资源描述
//交流学习
//QQ:1194758555
#include〈stdio。h>
#include<string。h〉
#include<stdlib.h〉
#include<ctype.h〉
#include〈windows。h〉
int k,n;
struct student
{
double yuwen;
double shuxue;
double yingyu;
double zong;
double pingjun;
char name[20];
char num[20];
} stu[1000];
void jiazai(struct student stu[],int *num1);
void baocun(struct student stu[],int n);
void find(struct student stu[],int n);
int findnum(struct student stu[],int n,char *num);//查找学号;
void shanchu(struct student stu[],int *num1);
void shanchuyi(struct student stu[],int *num1);//删除一条记录;
void shanchuquanbu(struct student stu[],int *num1);
void tianjiayi(struct student stu[],int i);//添加一记录;
void tianjia(struct student stu[],int *num1);//添加记录;
void xiugai(struct student stu[],int n);//修改一条记录;
void output(struct student stu[],int n,int x);//打印信息;
void paixu(struct student stu[],int n);//排序;
int jianchaxuehao(struct student stu[],char *num);//检查学号的合法性;
int jianchachengji(double num);//检查成绩的合法性;
void outputone(struct student *stu,int i,int x);//输出一条信息
void caidan();
int main()
{
int q;
jiazai(stu,&n);
caidan();
scanf("%d”,&q);
while(q>6)
{
printf(”输入错误请重新输入\n请输入0-6的数字\n”);
scanf(”%d”,&q);
}
Sleep(300);
system(”cls”);
switch(q)
{
case 1 :
tianjia(stu,&n);
break;
case 2:
xiugai(stu,n);
break;
case 3:
paixu(stu,n);
break;
case 4:
find(stu,n);
break;
case 5:
shanchu(stu,&n);
break;
case 6:
output(stu,n,0);
break;
case 0:
exit(0);
}
return 0;
}
void caidan()
{
printf(”┌────────────────────────┐\n");
printf("├───────欢迎进入学生信息管理系统─────┤\n”);
printf(”├────────────────────────┤\n”);
printf(”│ 1添加学生成绩 │\n”);
printf(”├────────────────────────┤\n");
printf("│ 2修改学生成绩 │\n");
printf(”├────────────────────────┤\n");
printf("│ 3排序 │\n");
printf(”├────────────────────────┤\n”);
printf(”│ 4查找 │\n");
printf("├────────────────────────┤\n”);
printf(”│ 5删除 │\n");
printf(”├────────────────────────┤\n");
printf(”│ 6输出 │\n");
printf(”├────────────────────────┤\n”);
printf("│ 0退出 │\n”);
printf(”├────────────────────────┤\n");
printf(”└────────────────────────┘\n");
printf(”请输入选择:\n”);
}
void jiazai(struct student stu[],int *num1)
{
FILE *fp;
int i;
if((fp=fopen(”d:\\student.dat","r”))==NULL)
{
*num1=0;
return;
}
for(i=0; fread(&stu[i],sizeof(struct student),1,fp)!=0; i++)
*num1=i;
fclose(fp);
}
void paixu(struct student stu[],int n)
{
int xuehao(const void *a,const void *b);
int yuwen(const void *a,const void *b);
int shuxue(const void *a,const void *b);
int yingyu(const void *a,const void *b);
int zongchengji(const void *a,const void *b);
int (*cmp[])(const void *a,const void *b)= {xuehao,yuwen,shuxue,yingyu,zongchengji};
int a;
printf("┌───────────────────────┐\n");
printf(”│ 欢迎进入学生信息排序页面 │\n");
printf("└───────────────────────┘\n”);
printf(”┌───────────────────────┐\n”);
printf(”│ 0:按学号降序排序 │\n");
printf(”├───────────────────────┤\n”);
printf(”│ 1:按语文成绩降序排序 │\n");
printf(”├───────────────────────┤\n”);
printf(”│ 2:按数学成绩降序排序 │\n");
printf("├───────────────────────┤\n");
printf("│ 3:按英语成绩降序排序 │\n");
printf(”├───────────────────────┤\n”);
printf(”│ 4:安总成绩降序排序 │\n”);
printf(”└───────────────────────┘\n”);
printf("请输入选择:\n");
scanf("%d",&a);
Sleep(300);
system("cls");
qsort(stu,n,sizeof(stu[0]),cmp[a]);
output(stu,n,0);
}
int xuehao(const void *a,const void *b)
{
if(strcmp(((struct student *)a)-〉num,((struct student *)b)—>num)〉0)
return —1;
else
return 1;
}
int yuwen(const void *a,const void *b)
{
return ((struct student *)a)—>yuwen < ((struct student *)b)—>yuwen ? 1 : -1;
}
int shuxue(const void *a,const void *b)
{
return ((struct student *)a)—〉shuxue < ((struct student *)b)—>shuxue ? 1 : -1;
}
int yingyu(const void *a,const void *b)
{
return ((struct student *)a)—>yingyu 〈 ((struct student *)b)—〉yingyu ? 1 : —1;
}
int zongchengji(const void *a,const void *b)
{
return ((struct student *)a)->zong < ((struct student *)b)-〉zong ? 1 : —1;
}
void shanchuyi(struct student stu[],int *num1)
{
int i,in,c;
char y[20];
FILE *fp;
char str[20];
printf(”┌───────────────────────┐\n");
printf(”│ 欢迎进入学生信息删除页面 │\n”);
printf(”└───────────────────────┘\n”);
printf(”请输入需要删除的学号\n");
scanf(”%s",str);
c=jianchaxuehao(stu,str);
while(c==0)
{
printf("输入的学号不合法请重新输入\n");
scanf(”%s”,str);
c=jianchaxuehao(stu,str);
}
Sleep(300);
system(”cls”);
printf(”┌───────────────────────┐\n”);
printf(”│ 欢迎进入学生信息删除页面 │\n”);
printf("└───────────────────────┘\n”);
in=findnum(stu,*num1,str);
while(in〈0)
{
printf("该学生的信息不存在\n”);
printf("重新输入(yes--y)返回主菜单(no—-n)\n");
scanf(”%s”,y);
while(strcmp(y,”y”)&&strcmp(y,”n"))
{
printf(”请输入y或n\n”);
scanf("%s”,y);
}
if(!strcmp(y,”n”))
{
Sleep(300);
system("cls");
main();
}
Sleep(300);
system(”cls");
printf(”┌───────────────────────┐\n");
printf(”│ 欢迎进入学生信息删除页面 │\n");
printf("└───────────────────────┘\n");
printf("请输入需要删除的学号\n”);
scanf("%s",str);
in=findnum(stu,*num1,str);
}
for(i=in; i<*num1-1; i++)
stu[i]=stu[i+1];
(*num1)—-;
if((fp=fopen("d:\\student.dat",”w"))==NULL)
{
printf(”打开失败\n");
exit(0);
}
Sleep(300);
system(”cls");
printf("┌───────────────────────┐\n");
printf(”│ 欢迎进入学生信息删除页面 │\n”);
printf("└───────────────────────┘\n");
printf(”删除成功\n”);
baocun(stu,*num1);
printf(”继续删除(yes——y)返回上主菜单(no——n)\n");
getchar();
scanf(”%s",y);
while(strcmp(y,”y")&&strcmp(y,”n”))
{
printf("请输入y或n\n”);
getchar();
scanf(”%s”,y);
}
Sleep(300);
system("cls");
if(!strcmp(y,"n"))
main();
if(!strcmp(y,"y”))
shanchuyi(stu,num1);
}
void shanchuquanbu(struct student stu[],int *num1)
{
char y[20],a[20];
FILE *fp;
printf(”┌───────────────────────┐\n");
printf(”│ 欢迎进入学生信息删除页面 │\n”);
printf("└───────────────────────┘\n”);
printf(”是否全部删除?(yes——y)返回主菜单(no-—n)\n");
scanf(”%s”,y);
while(strcmp(y,”y")&&strcmp(y,”n”))
{
printf(”请输入y或n\n");
scanf("%s”,y);
}
Sleep(300);
system(”cls");
printf(”┌───────────────────────┐\n”);
printf("│ 欢迎进入学生信息删除页面 │\n”);
printf(”└───────────────────────┘\n”);
if(!strcmp(y,”y”))
{
fp=fopen(”d:\\student。dat”,"w”);
*num1=0;
printf("删除完成\n");
fclose(fp);
printf("返回主菜单(yes——y)结束(no—-n)\n”);
scanf(”%s",a);
while(strcmp(a,”y”)&&strcmp(a,”n”))
{
printf(”请输入y或n\n”);
scanf(”%s”,a);
}
Sleep(300);
system("cls");
if(!strcmp(a,"y"))
main();
else
{
Sleep(300);
system("cls");
return;
}
}
else
{
Sleep(300);
system("cls”);
main();
}
}
void shanchu(struct student stu[],int *num1)
{
int q;
printf(”┌─────────────────┐\n”);
printf("├───────删除────────┤\n”);
printf(”├─────────────────┤\n”);
printf(”├─────1:删除指定信息─────┤\n”);
printf(”├─────────────────┤\n”);
printf("├─────2:删除全部信息─────┤\n");
printf(”├─────────────────┤\n”);
printf(”└─────────────────┘\n");
printf(”请输入选择:\n");
getchar();
scanf(”%d",&q);
system("cls”);
switch(q)
{
case 1:
shanchuyi(stu,num1);
break;
case 2:
shanchuquanbu(stu,num1);
break;
}
}
int findnum(struct student stu[],int n,char *num)
{
int i;
for(i=0; i<n; i++)
{
if(strcmp(stu[i]。num,num)==0)
{
return i;
}
}
return —1;
}
void baocun(struct student stu[],int n)
{
FILE *fp;
if((fp=fopen(”d:\\student。dat”,"w”))==NULL)
{
printf(”打开失败\n");
exit(0);
}
fwrite(stu,(n+1)*sizeof(stu[0]),1,fp);
fclose(fp);
}
void output(struct student stu[],int n,int x)
{
int i;
char y[20];
if(n>0)
{
printf(”┌─────┬───┬───┬───┬───┬───┬───┐\n");
printf(”│%—10s│%—6s│%—6s│%—6s│%—6s│%—6s│%-6s”,”学号”,”姓名",”语文",”数学”,"英语”,"平均",”总成绩\n");
//printf(”└────┘┴\n”);
for(i=0; i<n; i++)
{
outputone(&stu[i],n,x);
}
printf(”└─────┴───┴───┴───┴───┴───┴───┘\n");
if(x)
{
char q[10];
printf(”返回主菜单(yes-y)返回上级菜单(no—n)\n");
scanf("%s",q);
while(strcmp(q,"y”)&&strcmp(q,"n”))
{
printf(”请输入y或n\n”);
scanf("%s",q);
}
Sleep(300);
system(”cls");
if(!strcmp(q,"y”))
{
main();
}
while(!strcmp(q,"n"))
{
paixu(stu,n);
}
}
}
else
printf(”没有任何记录,请先添加信息\n”);
printf("返回主菜单(yes——y)结束(no--n)\n”);
scanf("%s”,y);
while(strcmp(y,”y”)&&strcmp(y,”n”))
{
printf(”请输入y或n\n”);
scanf(”%s”,y);
}
Sleep(300);
system(”cls");
if(!strcmp(y,”y”))
{
main();
}
else
return;
}
void outputone(struct student *stu,int n,int x)
{
if(!x)
{
printf("├─────┼───┼───┼───┼───┼───┼───┤\n");
printf(”│%—10s│%—6s│%-6。2lf│%—6.2lf│%—6.2lf│%—6.2lf│%—6.2lf│\n”,stu—〉num,stu—>name,stu—>yuwen,stu-〉shuxue,stu—〉yingyu,stu—>pingjun,stu->zong);
}
else
{
printf("┌────┬───┬───┬───┬───┬───┬───┐\n”);
printf("│%—8s│%—6s│%—6s│%-6s│%—6s│%—6s│%-6s”,"学号”,"姓名",”语文",”数学”,"英语”,"平均”,"总成绩\n”);
printf(”├────┼───┼───┼───┼───┼───┼───┤\n”);
printf("│%—8s│%—6s│%—6。1lf│%—6.1lf│%—6。1lf│%—6.1lf│%—6.1lf│\n”,stu—〉num,stu->name,stu-〉yuwen,stu->shuxue,stu—〉yingyu,stu->pingjun,stu—>zong);
printf(”└────┴───┴───┴───┴───┴───┴───┘\n");
}
}
void tianjiayi(struct student stu[],int i)
{
int a,b;
printf(”请输入学生学号\n");
getchar();
scanf("%s”,stu[i].num);
a=jianchaxuehao(stu,stu[i].num);
while(a==0||a==2)
{
if(a==0)
printf(”输入的学号不合法请重新输入\n”);
if(a==2)
printf(”输入的学号与已有的重复请重新输入\n");
scanf(”%s”,stu[i]。num);
a=jianchaxuehao(stu,stu[i]。num);
Sleep(300);
system("cls");
printf(”┌───────────────────────┐\n”);
printf("│ 欢迎进入学生信息添加页面 │\n”);
printf(”└───────────────────────┘\n”);
}
printf(”请输入该学生姓名\n");
scanf(”%s",stu[i].name);
printf(”请输入语文成绩\n”);
scanf(”%lf",&stu[i]。yuwen);
b=jianchachengji(stu[i]。yuwen);
while(b==0)
{
printf("输入错误请重新输入\n”);
scanf("%lf",&stu[i].yuwen);
b=jianchachengji(stu[i]。yuwen);
}
printf(”请输入数学成绩\n");
scanf(”%lf”,&stu[i].shuxue);
b=jianchachengji(stu[i]。shuxue);
while(b==0)
{
printf(”输入错误请重新输入\n”);
scanf(”%lf”,&stu[i]。shuxue);
b=jianchachengji(stu[i]。shuxue);
}
printf("请输入英语成绩\n");
scanf(”%lf",&stu[i]。yingyu);
b=jianchachengji(stu[i]。yingyu);
while(b==0)
{
printf("输入错误请重新输入\n”);
scanf("%lf",&stu[i].yingyu);
b=jianchachengji(stu[i].yingyu);
}
stu[i].pingjun=(stu[i]。yuwen+stu[i].shuxue+stu[i]。yingyu)/3;
stu[i].zong=stu[i]。yuwen+stu[i]。shuxue+stu[i]。yingyu;
}
void tianjia(struct student stu[],int *num1)
{
char p[10]=”y”,y[10];
printf("┌───────────────────────┐\n");
printf(”│ 欢迎进入学生信息添加页面 │\n”);
printf("└───────────────────────┘\n”);
while(!strcmp(p,"y"))
{
tianjiayi(stu,*num1);
(*num1)+=1;
printf(”是否继续添加(yes—-y,no-——n)\n”);
getchar();
scanf(”%s",p);
while(strcmp(p,"n”)&&strcmp(p,”y”))
{
printf(”请输入y或n\n”);
getchar();
scanf(”%s",p);
}
Sleep(300);
system(”cls”);
}
baocun(stu,*num1);
printf("返回主菜单(yes—-y)结束(no-—n)\n");
getchar();
scanf(”%s”,y);
while(strcmp(y,”n”)&&strcmp(y,”y”))
{
printf(”请输入y或n\n");
getchar();
scanf(”%s",y);
}
if(!strcmp(y,”y”))
{
Sleep(300);
system("cls”);
main();
}
else
return;
}
void xiugai(struct student stu[],int n)
{
int in,b,c;
char a[10],q[10];
char str[20],y[10];
printf(”┌───────────────────────┐\n”);
printf(”│ 欢迎进入学生信息修改页面 │\n”);
printf(”└───────────────────────┘\n”);
printf(”请输入要修改学生的学号\n");
getchar();
scanf(”%s",str);
c=jianchaxuehao(stu,str);
in=findnum(stu,n,str);
while(c==0||in〈0)
{
if(in〈0||(in<0&&c==1))
printf("此条信息不存在\n”);
if(c==0)
printf("输入不合法请重新输入\n");
printf("重新输入(yes——y)返回主菜单(no-—n)\n”);
scanf(”%s”,a);
while(strcmp(a,”y”)&&strcmp(a,”n"))
{
printf(”请输入y或n\n”);
getchar();
scanf(”%s",a);
}
Sleep(300);
system(”cls");
printf("┌───────────────────────┐\n”);
printf(”│ 欢迎进入学生信息修改页面 │\n");
printf(”└───────────────────────┘\n");
if(!strcmp(a,”n”))
{
Sleep(300);
system(”cls”);
main();
}
printf(”请输入要修改学生的学号\n”);
scanf("%s”,str);
c=jianchaxuehao(stu,str);
in=findnum(stu,n,str);
}
printf(”修改前的信息如下:\n");
outputone(&stu[in],n,1);
printf(”是否修改姓?(yes——y,no——n)\n”);
getchar();
scanf("%s",y);
while(strcmp(y,”y”)&&strcmp(y,"n"))
{
printf(”请输入y或n\n”);
getchar();
scanf(”%s”,y);
}
Sleep(300);
system("cls");
printf("┌───────────────────────┐\n");
printf(”│ 欢迎进入学生信息修改页面 │\n”);
printf(”└───────────────────────┘\n”);
if(!strcmp(y,”y"))
{
printf(”请输入姓名\n");
scanf(”%s",stu[in]。name);
}
printf(”是否修改%s的成绩?(yes-—y)返回主菜单(no——n)\n”,stu[in]。num);
//getchar();
scanf(”%s”,q);
while(strcmp(q,”y")&&strcmp(q,”n”))
{
printf(”请输入y或n\n");
getchar();
scanf(”%s”,q);
}
if(!strcmp(q,”y”))
{
printf(”请输入%s的语文成绩\n”,stu[in]。num);
scanf(”%lf”,&stu[in]。yuwen);
b=jianchachengji(stu[in].yuwen);
while(b==0)
{
printf(”输入错误请重新输入\n");
scanf("%lf",&stu[in]。yuwen);
b=jianchachengji(stu[in]。yuwen);
}
printf(”请输入%s的数学成绩\n",stu[in]。num);
scanf("%lf”,&stu[in].shuxue);
b=jianchachengji(stu[in]。shuxue);
while(b==0)
{
printf("输入错误请重新输入\n”);
scanf("%lf",&stu[in]。shuxue);
b=jianchachengji(stu[in]。shuxue);
}
printf(”请输入%s的英语成绩\n",stu[in]。num);
scanf(”%lf",&stu[in].yingyu);
b=jianchachengji(stu[in]。yingyu);
while(b==0)
{
printf(”输入错误请重新输入\n");
scanf("%lf”,&stu[in].yingyu);
b=jianchachengji(stu[in].yingyu);
}
}
if(!strcmp(q,"n”))
展开阅读全文