c 语言学生成绩管理,C语言学生成绩管理系统

C语言学生成绩管理系统

答案:2  信息版本:手机版

解决时间 2019-10-04 11:02

已解决

2019-10-03 18:40

C语言学生成绩管理系统

某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组做函数参数的方式编程实现如下菜单驱动的学生成绩管理系统:

1、录入每个学生的学号和考试成绩

2、计算课程的总分和平均分

3、按成绩由高到低排出名次表

4、按学号由小到大排出成绩表

5、按学号查询学生排名及其考试成绩

6、按优秀(90-100)、良好(80-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,统计每个类别的人数及所占的百分比

7、输出每个学生的学号、考试成绩,课程总分和平均分

要求程序运行后先显示如下菜单,并提示用户输入选项:

1.Input record

2.Caculate total and average score of course

3.Sort in descending order by score

4.Sort in ascending order by number

5.Search by number

6.Statistic analysis

7.List record

0.Exit

Please enter your choice:

然后根据用户输入的选项执行相应的操作。

最佳答案

2019-10-03 19:41

这个能做出来,不过会花一点时间

全部回答

1楼

2019-10-03 20:40

#include "stdio.h" #include "stdlib.h" #include "string.h" int shoudsave=0; struct student { char num[10]; char name[20]; char sex[4]; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime[10]; }; typedef struct node { struct student data; struct node *next; }node,*link; void menu() { printf("********************************************************************************"); printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n"); printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n"); printf("\t5保存学生资料\t\t\t\t\t0退出系统\n"); printf("********************************************************************************\n"); } void printstart() { printf("-----------------------------------------------------------------------\n"); } void wrong() { printf("\n=====>提示:输入错误!\n"); } void nofind() { printf("\n=====>提示:没有找到该学生!\n"); } void printc() { printf(" 学号\t 姓名 性别 英语成绩 数学成绩 c语言成绩 总分 平均分\n"); } void printe(node *p) { printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave); } node* locate(link l,char findmess[],char nameornum[]) { node *r; if(strcmp(nameornum,"num")==0) { r=l->next; while(r!=null) { if(strcmp(r->data.num,findmess)==0) return r; r=r->next; } } else if(strcmp(nameornum,"name")==0) { r=l->next; while(r!=null) { if(strcmp(r->data.name,findmess)==0) return r; r=r->next; } } return 0; } void add(link l) { node *p,*r,*s; char num[10]; r=l; s=l->next; while(r->next!=null) r=r->next; while(1) { printf("请你输入学号(以'0'返回上一级菜单:)"); scanf("%s",num); if(strcmp(num,"0")==0) break; while(s) { if(strcmp(s->data.num,num)==0) { printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num); printstart(); printc(); printe(s); printstart(); printf("\n"); return; } s=s->next; } p=(node *)malloc(sizeof(node)); strcpy(p->data.num,num); printf("请你输入姓名:"); scanf("%s",p->data.name); getchar(); printf("请你输入性别:"); scanf("%s",p->data.sex); getchar(); printf("请你输入c语言成绩:"); scanf("%d",&p->data.cgrade); getchar(); printf("请你输入数学成绩:"); scanf("%d",&p->data.mgrade); getchar(); printf("请你输入英语成绩:"); scanf("%d",&p->data.egrade); getchar(); p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle / 3; p->next=null; r->next=p; r=p; shoudsave=1; } } void qur(link l) { int sel; char findmess[20]; node *p; if(!l->next) { printf("\n=====>提示:没有资料可以查询!\n"); return; } printf("\n=====>1按学号查找\n=====>2按姓名查找\n"); scanf("%d",&sel); if(sel==1) { printf("请你输入要查找的学号:"); scanf("%s",findmess); p=locate(l,findmess,"num"); if(p) { printf("\t\t\t\t查找结果\n"); printstart(); printc(); printe(p); printstart(); } else nofind(); } else if(sel==2) { printf("请你输入要查找的姓名:"); scanf("%s",findmess); p=locate(l,findmess,"name"); if(p) { printf("\t\t\t\t查找结果\n"); printstart(); printc(); printe(p); printstart(); } else nofind(); } else wrong(); } void del(link l) { int sel; node *p,*r; char findmess[20]; if(!l->next) { printf("\n=====>提示:没有资料可以删除!\n"); return; } printf("\n=====>1按学号删除\n=====>2按姓名删除\n"); scanf("%d",&sel); if(sel==1) { printf("请你输入要删除的学号:"); scanf("%s",findmess); p=locate(l,findmess,"num"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf("\n=====>提示:该学生已经成功删除!\n"); shoudsave=1; } else nofind(); } else if(sel==2) { printf("请你输入要删除的姓名:"); scanf("%s",findmess); p=locate(l,findmess,"name"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf("\n=====>提示:该学生已经成功删除!\n"); shoudsave=1; } else nofind(); } else wrong(); } void modify(link l) { node *p; char findmess[20]; if(!l->next) { printf("\n=====>提示:没有资料可以修改!\n"); return; } printf("请你输入要修改的学生学号:"); scanf("%s",findmess); p=locate(l,findmess,"num"); if(p) { printf("请你输入新学号(原来是%s):",p->data.num); scanf("%s",p->data.num); printf("请你输入新姓名(原来是%s):",p->data.name); scanf("%s",p->data.name); getchar(); printf("请你输入新性别(原来是%s):",p->data.sex); scanf("%s",p->data.sex); printf("请你输入新的c语言成绩(原来是%d分):",p->data.cgrade); scanf("%d",&p->data.cgrade); getchar(); printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade); scanf("%d",&p->data.mgrade); getchar(); printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade); scanf("%d",&p->data.egrade); p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle/3; printf("\n=====>提示:资料修改成功!\n"); shoudsave=1; } else nofind(); } void disp(link l) { int count=0; node *p; p=l->next; if(!p) { printf("\n=====>提示:没有资料可以显示!\n"); return; } printf("\t\t\t\t显示结果\n"); printstart(); printc(); printf("\n"); while(p) { 花範羔既薏焕割唯公沥 printe(p); p=p->next; } printstart(); printf("\n"); } void tongji(link l) { node *pm,*pe,*pc,*pt,*pa; node *r=l->next; if(!r) { printf("\n=====>提示:没有资料可以统计!\n"); return ; } pm=pe=pc=pt=pa=r; while(r!=null) { if(r->data.cgrade>=pc->data.cgrade) pc=r; if(r->data.mgrade>=pm->data.mgrade) pm=r; if(r->data.egrade>=pe->data.egrade) pe=r; if(r->data.totle>=pt->data.totle) pt=r; if(r->data.ave>=pa->data.ave) pa=r; r=r->next; } printf("------------------------------统计结果--------------------------------\n"); printf("总分最高者:\t%s %d分\n",pt->data.name,pt->data.totle); printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave); printf("英语最高者:\t%s %d分\n",pe->data.name,pe->data.egrade); printf("数学最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade); printf("c语言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade); printstart(); } void sort(link l) { link ll; node *p,*rr,*s; ll=(link)malloc(sizeof(node)); ll->next=null; if(l->next==null) { printf("\n=====>提示:没有资料可以排序!\n"); return ; } p=l->next; while(p) { s=(node*)malloc(sizeof(node)); s->data=p->data; s->next=null; rr=ll; while(rr->next!=null && rr->next->data.totle>=p->data.totle) rr=rr->next; if(rr->next==null) rr->next=s; else { s->next=rr->next; rr->next=s; } p=p->next; } free(l); l->next=ll->next; printf("\n=====>提示:排序已经完成!\n"); } void save(link l) { file* fp; node *p; int flag=1,count=0; fp=fopen("c:\\student","wb"); if(fp==null) { printf("\n=====>提示:重新打开文件时发生错误!\n"); exit(1); } p=l->next; while(p) { if(fwrite(p,sizeof(node),1,fp)==1) { p=p->next; count++; } else { flag=0; break; } } if(flag) { printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count); shoudsave=0; } fclose(fp); } void main() { link l; file *fp; int sel; char ch; char jian; int count=0; node *p,*r; printf("\t\t\t\t学生成绩管理系统\n\t\t\t\t-------西京学院本科部机制0502 彭琛(41号)\n"); l=(node*)malloc(sizeof(node)); l->next=null; r=l; fp=fopen("c:\\student","rb"); if(fp==null) { printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n"); scanf("%c",&jian); if(jian=='y'||jian=='y') fp=fopen("c:\\student","wb"); else exit(0); } printf("\n=====>提示:文件已经打开,正在导入记录......\n"); while(!feof(fp)) { p=(node*)malloc(sizeof(node)); if(fread(p,sizeof(node),1,fp)) { p->next=null; r->next=p; r=p; count++; } } fclose(fp); printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count); while(1) { menu(); printf("请你选择操作:"); scanf("%d",&sel); if(sel==0) { if(shoudsave==1) { getchar(); printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n"); scanf("%c",&ch); if(ch=='y'||ch=='y') save(l); } printf("\n=====>提示:你已经退出系统,再见!\n"); break; } switch(sel) { case 1:add(l);break; case 2:del(l);break; case 3:qur(l);break; case 4:modify(l);break; case 5:save(l);break; case 9:printf("\t\t\t==========帮助信息==========\n");break; default: wrong();getchar();break; } } }

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值