学生成绩管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
九、学生成绩管理系统设计
学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、 数学、英语和计算机)等。 基本功能: (1) 能按学期、按班级完成对学生成绩的录入、修改 (2) 能按班级统计学生的成绩,求学生的总分及平均分 (3) 能查询学生成绩,不及格科目及学生名单 (4) 能按班级输出学生的成绩单 要求:使用二进制文件方式存储数据,系统以菜单方式工作 #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 3 typedef struct z1 { char no[11]; char name[15]; int score[N]; float sum; float average; int order; struct z1 *next; }STUDENT; STUDENT *init(); STUDENT *create(); STUDENT *del(STUDENT *h); void print(STUDENT *h); void search1(STUDENT *h); void search2(STUDENT *h); STUDENT *insert(STUDENT *h); void sort(STUDENT *h); void save(STUDENT *h); void tongji(STUDENT *h); int menu_select(); STUDENT *load();
{ do{ printf("分数%d",i+1); scanf("%d",&info->score[i]); if(info->score[i]>100||info->score[i]<0) printf("输入数据有误,请重新输入\n"); }while(info->score[i]>100||info->score[i]<0); s1=s1+info->score[i]; } info->sum=s1; info->average=(float)s1/N; info->order=0; info->next=NULL; p=h; q=h; while(strcmp(p->no,s)&&p!=NULL) {q=p;p=p->next;} if(p==NULL) if(p==h) h=info; else q->next=info; else if(p==h) { info->next=p; h=info; } else { info->next=p; q->next=info; } printf("\n已经插入了%s这个学生\n",info->name); printf("----不要忘了存盘啊--\n"); return(h); } void save(STUDENT *h)
"9. 按姓名查找学生信息", "10. 退出系统"}; char s[3]; int c,i; for(i=0;i<=11;i++) printf(" %s\n",menu[i]); do { printf("\n请选择0~10中的某一个选项\n"); scanf("%s",s); c=atoi(s); }while(c<0||c>10); return c; } STUDENT *init() { return NULL; } STUDENT *create() { int i;int s; STUDENT *h=NULL,*info; for(;;) { info=(STUDENT *)malloc(sizeof(STUDENT)); if(!info) { printf("\n内存不足"); return NULL; } inputs("输入学号:",info->no,11); if(info->no[0]=='@')break; inputs("输入姓名:",info->name,15); printf("开始输入%d门课的成绩\n",N); s=0; for(i=0;i<N;i++) {
ห้องสมุดไป่ตู้
scanf("%s",s); p=h; while(strcmp(p->name,s)&&p!=NULL) p=p->next; if(p==NULL) printf("\n没有姓名为%s的学生\n",s); else { printf("\n\n\n***********************找到了 ***********************\n"); printf("|学号 | 姓名 | 数学 | 英语 | 计算机 | 总分 | 平均分 | 名 次 |\n"); printf("|----------|-----------|----|----|----|------|------|---|\n"); printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p>name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); printf("***********************end***********************\n"); } } STUDENT *insert(STUDENT *h) { STUDENT *p,*q,*info; char s[11]; int s1,i; printf("请输入插入点的学生学号\n"); scanf("%s",s); printf("\n请输入新的学生信息\n"); info=(STUDENT *)malloc(sizeof(STUDENT)); if(!info) { printf("\n内存不足!"); return NULL; } inputs("输入学号:",info->no,11); inputs("输入姓名:",info->name,15); printf("请输入%d门课的分数\n",N); s1=0; for(i=0;i<N;i++)
do{ printf("第%d门分数:",i+1); scanf("%d",&info->score[i]); if(info->score[i]>100||info->score[i]<0) printf("输入成绩错误,请重新输入:\n"); }while(info->score[i]>100||info->score[i]<0); s=s+info->score[i]; } info->sum=s; info->average=(float)s/N; info->order=0; info->next=h; h=info; } return h; } void inputs(char *prompt,char *s,int count) { char p[255]; do { printf(prompt); scanf("%s",p); if(strlen(p)>count) printf("\n太长了!\n"); }while(strlen(p)>count); strcpy(s,p); } void print(STUDENT *h) { int i=0; STUDENT *p; p=h; printf("\n\n\n***********************学生 ***********************\n"); printf("|序号|学号 | 姓名 | 数学 | 英语 |计算机 | 总分 |平均分 |名次 |\n");
printf("|---|-------|--------|----|----|----|------|------|---|\n"); while(p!=NULL) { i++; printf("|%3d |%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",i,p>no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p>order); p=p->next; } printf("***********************end***********************\n"); } STUDENT *del(STUDENT *h) { STUDENT *p,*q; char s[11]; printf("请输入要删除的学生的学号\n"); scanf("%s",s); q=p=h; while(strcmp(p->no,s)&&p!=NULL) { q=p; p=p->next; } if(p==NULL) printf("\n链表中没有学号为%s的学生\n",s); else { printf("\n\n\n***********************找到了 ***********************\n"); printf("|学号 | 姓名 | 数学 | 英语 | 计算机 | 总分 | 平均分 | 名次 |\n"); printf("|----------|----------|----|----|----|------|------|---|\n"); printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p>name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); printf("***********************end***********************\n"); printf("请按任意键删除\n"); getchar();
if(p==h) h=p->next; else q->next=p->next; free(p); printf("\n已经删除学号为%s的学生\n",s); } return h; } void search1(STUDENT *h) { STUDENT *p; char s[11]; printf("请输入你要查找的同学的学号\n"); scanf("%s",s); p=h; while(strcmp(p->no,s)&&p!=NULL) p=p->next; if(p==NULL) printf("'n没有学号为%s的学生\n",s); else { printf("\n\n\n***********************找到了 ***********************\n"); printf("|学号 | 姓名 | 数学 | 英语 | 计算机 | 总分 | 平均分 | 名 次 |\n"); printf("|----------|-----------|----|----|----|------|------|---|\n"); printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p>name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); printf("***********************end***********************\n"); } } void search2(STUDENT *h) { STUDENT *p; char s[11]; printf("请输入你要查找的同学的姓名\n");
void inputs(char *prompt,char *s,int count); STUDENT *load(); main() { int i; STUDENT *head; head=init(); for(;;) { switch(menu_select()) { case 0:head=init();break; case 1:head=create();break; case 2:head=insert(head);break; case 3:save(head);break; case 4:print(head);break; case 5:search1(head);break; case 6:head=del(head);break; case 7:sort(head);break; case 8:tongji(head);break; case 9:search2(head);break; case 10:exit(0); } } } int menu_select() { char *menu[]={"************菜单************", "0. 初始化链表", "1. 输入学生成绩", "2. 插入学生成绩", "3. 保存学生记录", "4. 显示学生记录", "5. 按学号查找学生信息", "6. 删除指定学号的学生信息", "7. 按某一门课对学生成绩排序", "8. 统计某门课程的学生成绩",
相关文档
最新文档