求助求助求助
程序代码:
#include<stdio.h> #include<conio.h> typedef struct student { char id[8]; /*学号*/ char name[8]; /*姓名*/ char sex[2]; /*性别*/ int yuwen ; /*语文成绩*/ int shuxue; /*数学成绩*/ int yingyu; /*英语成绩 */ float sum; /*个人总成绩*/ float ave; /*个人平均成绩*/ }; /*声明数组及学生数量*/ struct student s[30]; int num=0; void choose(); /*选择菜单*/ void creat(); /* 创建学生的资料 */ void add(); /*追加学生的资料*/ void search(); /*查询学生的成绩*/ void alter(); /*修改学生的资料*/ void del(); /*删除学生的资料*/ void statistics(); /*统计学生的成绩*/ void sort(); /*对学生资料进行排序*/ void print(); /* 输出显示学生的资料 */ void student_information(); int SearchByName(char name[]) ; void WriteInfo(); void ReadInfo() ; void main(){ int x; printf("欢迎登陆学生管理系统\n"); printf("\n\n\n\n欢迎使用学生管理系统!\n"); ReadInfo(); while(1) { printf("1.创建学生的资料\n"); printf("2.追加学生的资料\n"); printf("3.修改学生的资料\n"); printf("4.查询学生的成绩\n"); printf("5.删除学生的资料\n"); printf("6.统计学生的成绩\n"); printf("7.对学生平均成绩进行排序\n"); printf("8.输出显示学生的资料\n"); printf("9. 退出\n"); printf("请输入您要选择的功能(1-9):\n"); scanf("%d",&x); getchar(); switch(x) { case 1: printf("选中了1.创建学生的资料\n"); creat(); break; case 2: printf("选中了2.追加学生的资料\n"); add();break; case 3: printf("选中了3.修改学生的资料\n"); alter(); break; case 4: printf("选中了4.查询学生的成绩\n"); search();break; case 5: printf("选中了5.删除学生的资料\n"); del();break; case 6: printf("选中了6.统计学生的成绩\n"); statistics();break; case 7: printf("选中了7.对学生平均成绩进行排序\n"); sort();break; case 8: printf("选中了8.输出显示学生的资料\n"); print();break; case 9: printf("退出\n"); exit(0); break; } WriteInfo(); } } void creat() /* 创建学生的资料 */ { while(1) { printf("请输入学号:\n"); scanf("%d",&s[num].id); getchar(); printf("请输入姓名:\n"); scanf("%s",s[num].name); getchar(); printf("请输入性别:\n"); scanf("%s",s[num].sex); getchar(); printf("请输入数学成绩:\n"); scanf("%d",&s[num].shuxue); getchar(); printf("请输入语文成绩:\n"); scanf("%d",&s[num].yuwen); getchar(); printf("请输入英语成绩:\n"); scanf("%d",&s[num].yingyu); getchar(); num++; printf("是否继续输入学生信息(y/n):\n"); if(getchar()=='n') { break; } } } void add()/*追加学生的资料*/ { while(1) { char Name[20]; int i=0; printf("请输入要追加学生信息的姓名:\n"); scanf("%s",&Name); getchar(); i=SearchByName(Name); if(i==-1) { printf("该学生不存在!\n"); } else { printf("您要追加的学生信息为:\n"); student_information(i); printf("请输入您要追加的学生信息为:\n"); printf("请输入学号:\n"); scanf("%d",&s[i].id); getchar(); printf("请输入姓名:\n"); scanf("%s",s[i].name); getchar(); printf("请输入性别:\n"); scanf("%s",s[i].sex); getchar(); printf("请输入数学成绩:\n"); scanf("%d",&s[i].shuxue); getchar(); printf("请输入语文成绩:\n"); scanf("%d",&s[i].yuwen); getchar(); printf("请输入英语成绩:\n"); scanf("%d",&s[i].yingyu); getchar(); } printf("是否继续追加学生信息(y/n):\n"); if(getchar()=='n') { break; } } } void search() /*查询学生的成绩*/ { while(1) { char Name[20]; int i=0; printf("请输入您要查询的学生姓名:\n"); scanf("%s",&Name); getchar(); i=SearchByName(Name); if(i==-1) { printf("该学生不存在!\n"); } else { printf("您要查询的信息为:\n"); student_information(i); } printf("是否继续查询?(y/n):\n"); if(getchar()=='n') { break; } } } void alter() /*修改学生的资料*/ { while(1) { char Name[20]; int i; printf("请输入您要查询的学生姓名:\n"); scanf("%s",&Name); getchar(); i=SearchByName(Name); if(i==-1) { printf("该学生不存在!\n"); } else { printf("请输入您要修改的信息:\n"); printf("请输入学号:\n"); scanf("%s",&s[i].id); getchar(); printf("请输入姓名:\n"); scanf("%s",s[i].name); getchar(); printf("请输入性别:\n"); scanf("%s",s[i].sex); getchar(); printf("请输入数学成绩:\n"); scanf("%d",&s[i].shuxue); getchar(); printf("请输入语文成绩:\n"); scanf("%d",&s[i].yuwen); getchar(); printf("请输入英语成绩:\n"); scanf("%d",&s[i].yingyu); getchar(); } printf("是否继续修改学生信息(y/n):\n"); if(getchar()=='n') { break; } } } void del() /*删除学生的资料*/ { int j; while(1) { char Name[20]; int i=0; printf("请输入您要删除的学生姓名:\n"); scanf("%s",&Name); getchar(); i=SearchByName(Name); if(i==-1) { printf("该学生不存在!\n"); } else { printf("您要删除的信息为:\n"); student_information(i); } printf("是否确认删除?(y/n):\n"); if(getchar()=='y') { for(j=i;j<sizeof(s)-1;j++) s[i]=s[i+1]; } else{ printf("是否继续删除?(y/n)\n"); if(getchar()=='n') { break; } } } } void student_information() { printf("学号:%d\n", s[num].id); printf("姓名:%s\n", s[num].name); printf("性别:%s\n", s[num].sex); printf("高数成绩:%d\n",s[num].shuxue); printf("英语成绩:%d\n", s[num].yingyu); printf("语文成绩:%d\n", s[num].yuwen); printf("平均成绩:%f\n", s[num].ave); } void statistics() /*统计学生的成绩*/ { int i; for (i = 0; i<sizeof(s); i++) { s[i].ave = (float)(s[i].shuxue+s[i].yingyu+s[i].yuwen)/ 4; printf("输出第%d个同学的平均成绩:%f\n", i+1, s[i].ave); } } void sort() /*对学生资料进行排序*/ { int i,j; struct student tmp={0}; for (i=0;i<sizeof(s);i++) { for (j=0;j<sizeof(s);j++) { if (s[j].ave<s[j+1].ave) { tmp=s[j]; s[j]=s[j+1]; s[j+1]=tmp; } } } } void print() /* 输出显示学生的资料 */ { int i; for (i = 0; i < sizeof(s); i++) { printf("学号:%d\n", s[i].id); printf("姓名:%s\n", s[i].name); printf("性别:%s\n", s[i].sex); printf("数学成绩:%d\n", s[i].shuxue); printf("英语成绩:%d\n",s[i].yingyu); printf("语文成绩:%d\n", s[i].yuwen); printf("平均成绩:%f\n", s[i].ave); } } int SearchByName(char Name[]) { int i; for (i=0;i<sizeof(s);i++) { if (strcmp(s[i].name,Name)==0) { return i; } } return -1; } /*将学生信息从文件读出*/ void ReadInfo() { FILE *fp; int i; if ((fp=fopen("Database.txt","rb"))==NULL) { printf("不能打开文件!\n"); return; } if (fread(&i,sizeof(int),1,fp)!=1) { i=-1; } else { for(i=0;i<sizeof(s);i++) { fread(&s[i],sizeof(struct student),1,fp); } } fclose(fp); } /*将学生信息写入文件*/ void WriteInfo() { FILE *fp; int i; if ((fp=fopen("Database.txt","wb"))==NULL) { printf("不能打开文件!\n"); return; } if (fwrite(&num,sizeof(int),1,fp)!=1) { printf("写入文件错误!\n"); } for (i=0;i<num;i++) { if (fwrite(&s[i],sizeof(struct student),1,fp)!=1) { printf("写入文件错误!\n"); } } fclose(fp); }
好像查询功能有问题,
然后也创建的学生信息没有保存。
还有 如果想输多少存多少个该怎么定义数组,我用8查看所有学生的信息是输出30个成员信息。。。如果只创建一个怎么样才能只显示一个?