C语言学生成绩管理系统设计.docx
- 文档编号:26593109
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:30
- 大小:415.51KB
C语言学生成绩管理系统设计.docx
《C语言学生成绩管理系统设计.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统设计.docx(30页珍藏版)》请在冰豆网上搜索。
C语言学生成绩管理系统设计
沈阳航空航天大学
课程设计报告
大作业名称:
C语言课程设计
大作业题目:
学生成绩管理系统设计
院(系):
计算机学院
专业:
计算机科学与技术
班级:
学号:
姓名:
指导教师:
完成日期:
2016年12月24日
第1章概要设计
1.1题目的内容与要求
内容:
学生成绩信息包括:
姓名、学号、语文、数学、英语。
实现的主要功能有:
1)信息维护。
包括学生成绩的输入、按学号删除、按学号修改等。
2)信息查询。
输入学号或姓名,显示出该生三个科目的成绩,计算出三科总分
并显示,按总分将所有学生成绩排序,显示出该生的名次。
3)成绩统计。
先输入任意一个科目,接着选择a或b来分别显示平均分或统计
分数段学生,若选择a,则直接显示出该科目的平均分;若选择b,则提示
用户输入一个分数段,显示所有该科目属于该分数段内的学生信息,并给出
学生总数。
要求:
1)系统以菜单方式工作。
在不同的界面为用户给出具体提示。
2)系统利用C语言实现,源程序要有适当的注释。
3)采用VC环境进行运行调试。
1.2总体结构
本程序主要分为七个模块(功能模块图见图1.1):
结构体模块,输入模块,显示模块,修改模块,删除模块,查询模块,统计模块。
结构体模块:
建立一个结构体模块,为链表存信息用。
输入模块:
键盘输入每个学生的信息,并保存在文件中。
显示模块:
显示全部学生的具体信息。
修改模块:
修改某个学生的成绩信息。
删除模块:
删除某个学生的全部信息。
查询模块:
查询某个学生的具体信息。
统计模块:
通过功能选择,统计并显示某一科目的平均分或某分数段学生的具体信息。
图1.1功能模块图
第2章详细设计
2.1主模块
控制整个程序的运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,流程如图2.1所示。
Y
NN
Y
图2.1主模块流程图
注释:
1.显示主菜单;
2.选择不同序号执行不同功能;
2.2输入模块
输入所有学生信息并保存,流程如图2.2所示。
图2.2输入模块流程图
注释:
1.循环输入每个学生的信息;
2.保存所有信息
2.3显示模块
显示所有学生的具体信息,流程图如2.3所示。
图2.3显示模块流程图
注释:
1.选择号好功能;
2.显示全部学生的具体信息。
2.4修改模块
修改某个学生各个科目的成绩,流程图如2.4所示。
Y
N
图2.4修改模块流程图
注释:
1.输入要修改学生的学号;
2.输入要修改的科目信息;
3.修改成功,是否要继续修改。
是,继续;否,回到主菜单。
2.5删除模块
按学号删除某学生的全部信息,流程图如图2.5所示。
Y
N
N
图2.5删除模块流程图
注释:
1.输入要删除的学生的学号;
2.显示该生信息,是否删除。
是,删除;否,是否继续操作。
3.是否继续删除。
是,重复上述操作;否,退出回到主菜单。
2.6查询模块
输入要查询学生的学号,显示该生具体信息,流程图如图2.6所示。
Y
N图2.6查询模块流程图
注释:
1.输入要查询的学生的学号;
2.显示该生的具体信息;
3.是否继续查询。
是,继续查询下一位;否,回到主菜单。
2.7统计模块
通过选择不同功能,显示某个科目的平均分或某分数段学生的具体信息,流程图如图2.7所示。
case‘a’:
case‘b’:
Y
N
图2.7统计模块流程图
注释:
1.通过菜单选择科目;
2.通过菜单选择a或b功能,分别显示该科目平均分或某分数段学生信息;
3.是否继续查询?
是,继续;否,回到主菜单。
第3章调试分析
在这次课程设计中,程序编写的过程中遇到了很多问题,主要是函数实现方面问题较多。
问题1:
查询函数chaxun()中,会造成数据混乱,原因是for循环中某行代码运用错误,如下:
for(i=0;i { if(stu[i].num==x) { k=i;/*找到要查询的同学学号,并用k记下其下标*/ } OutputOneStudent(k); } 将OutputOneStudent(k);拿出后,查询功能正常实现。 正确编写如下: for(i=0;i { if(stu[i].num==x) { k=i;/*找到要查询的同学学号,并用k记下其下标*/ } } OutputOneStudent(k); 问题2: 统计函数tongji(),功能实现完后不能回到主菜单。 解决方法是,把功能函数gongneng()其中的while循环删掉。 第4章使用说明 运行截图如下: 1.输入成绩 2.信息显示 3.修改信息 4.删除信息 5.查询信息 6.1统计信息----科目平均分 6.2统计信息----科目某分数段学生信息 7.退出系统 参考文献 1.王敬华,《C语言程序设计教程(第二版)》,清华大学出版社,2009年8月 2.谭浩强,《C语言程序设计教程(第二版)》,清华大学出版社,1999年12月 3.谭浩强,《C语言程序设计题解与上机指导》,清华大学出版社,2000年11月 4.田淑清,《C语言程序设计辅导与习题集》,中国铁道出版社,2000年1月 5.张荣梅、梁晓林,《VisualC++实用教程》,冶金工业出版社,2004年 附录(程序清单) 程序代码: #include #include #include #defineN3 structstudent { intnum;//学号 charname[20];//姓名 floatscore[3];//三门课成绩 floatsum;//总分 floataver;//平均分 }stu[N]; voidmenu();//主菜单功能 voidinput();//输入信息到结构体中 voidsave(intx);//保存stud.dat文件函数 voidprint();//输出显示所有学生信息 voidSaveAllStudent(intn);//保存全部学生信息 voidxiugai(intn);//按学号修改成绩 intshanchu(intn);//按学号删除 voidOutputOneStudent(inti);//查询一个学生的信息 voidchaxun(intn);//按学号查询成绩 voidtongji();//统计科目信息 voidgongneng(intx);//a或b功能分别显示科目平均分或分数段学生信息 intmain() { printf("***********************************************************\n"); printf("**\n"); printf("*Hwadee&学生成绩管理系统&Hwadee*\n"); printf("**\n"); printf("******************************************************\n\n\n"); printf("****************●●欢迎使用●●*******************\n"); while (1) { menu(); } return0; } /*主菜单***********************************************************/ voidmenu() { intchoice; intn=N; printf("\n请选择功能: \n"); printf("\n1: 输入成绩\n2: 显示信息\n3: 修改成绩\n4: 删除信息\n5: 查询成绩\n6: 成绩统计\n0: 退出系统\n\n"); printf("\n请选择序号: \n"); scanf("%d",&choice); switch(choice) { case1: input(); save(N); break; case2: print(); break; case3: xiugai(n); break; case4: shanchu(n); break; case5: chaxun(n); break; case6: tongji(); break; case0: printf("\n谢谢使用,再见! \n\n"); exit(-1); break; default: printf("输入错误! \n"); break; } } /*写入函数****************************************************/ voidinput() { inti,j; printf("\n输入信息\n"); for(i=0;i { printf("输入学号: "); scanf("%d",&stu[i].num); printf("输入姓名: "); scanf("%s",&stu[i].name); for(j=0;j { printf("第%d门成绩的分数: ",j+1); scanf("%f",&stu[i].score[j]); } stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; stu[i].aver=stu[i].sum/3; printf("\n"); } } /*写入文件***********************************************************/ voidsave(intx) { FILE*fp;/*定义文件指针用于向文件读入数据*/ inti; if((fp=fopen("student.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/ { printf("cannotopenfile\n"); exit (1); } for(i=0;i { if(fwrite(&stu[i],sizeof(structstudent),1,fp)! =1) { printf("error\n"); } } fclose(fp); printf("\n\n信息保存成功! 恭喜! ! \n\n"); } /*显示全部学生信息**************************************************/ voidprint() { inti; printf("学号姓名语文数学英语总分平均分\n"); for(i=0;i printf("%d%s%.2f%.2f%.2f%.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].aver); } /*保存全部学生信息******************************************8*/ voidSaveAllStudent(intn) { FILE*fp; if((fp=fopen("student.dat","wb"))==NULL) { printf("文件打开失败! \n"); exit (1); } fwrite(stu,sizeof(structstudent),n,fp); fclose(fp); } /*修改学生信息************************************************/ voidxiugai(intn) { structstudenttemp; intk=-1,x,i; charc1='y'; while(c1=='y') { printf("\n请输入要修改的同学的学号: "); scanf("%d",&x); for(i=0;i { if(x==stu[i].num) { k=i;/*找到要修改的同学学号,并用k记下其下标*/ break; } } if(k<0) { printf("\n输入学号有误,请重新输入! "); } else { printf("\n请输入要修改学生修改后的的信息\n"); printf("语文(空格)数学(空格)英语\t\n"); scanf("%f%f%f",&temp.score[0],&temp.score[1],&temp.score[2]); temp.sum=(temp.score[0]+temp.score[1]+temp.score[2]); temp.aver=(temp.score[0]+temp.score[1]+temp.score[2])/3; stu[k].score[0]=temp.score[0];/*修改该学生信息*/ stu[k].score[1]=temp.score[1]; stu[k].score[2]=temp.score[2]; stu[k].sum=temp.sum; stu[k].aver=temp.aver; printf("\n修改成功! 恭喜! ! \n"); break; } SaveAllStudent(k); printf("\n继续修改操作吗? "); printf("\n继续修改请按y;不进行修改请按n\n"); getchar(); c1=getchar(); } printf("\n按任意键继续! \n"); getchar(); } /*删除学生信息*************************************************/ intshanchu(intn) { inti,k=-1,x; charc1='y',c2; while(c1=='y') { c2='n'; printf("\n请输入要删除的同学的学号: "); scanf("%d",&x); for(i=0;i { if(x==stu[i].num) { k=i;/*找到要删除的同学学号,并用k记下其下标*/ break; } } if(k<0) { printf("\n输入学号有误,请重新输入! "); } else { printf("\n该同学信息如下: \n"); OutputOneStudent(k); printf("\n\n确定删除? \n"); printf("确定进行删除请按y;不进行删除请按n\n"); getchar(); c2=getchar(); if(c2=='y') { for(i=k;i { stu[i]=stu[i+1]; } n--;/*学生人数减1*/ printf("\n删除成功! 恭喜! ! \n"); } else printf("\n取消删除! \n"); printf("\n继续删除操作吗? "); printf("\n继续删除请按y;不进行删除请按n\n"); getchar(); c1=getchar(); } } save(n); printf("\n按任意键继续! \n"); getchar(); return(n); } /*查询一个学生信息********************************************/ voidOutputOneStudent(inti) { printf("学号: %d姓名: %s\n",stu[i].num,stu[i].name); printf("语文: %.1f数学: %.1f英语: %.1f总分: %.1f平均分: %.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].aver); } /*按学号查询学生信息**************************************/ voidchaxun(intn) { inti,j,k,x; charc='y'; while(c=='y') { k=-1; printf("\n请输入学生学号: "); scanf("%d",&x); if(x>3||x<1) { break; } for(i=0;i { if(stu[i].num==x) { k=i;/*找到要查询的同学学号,并用k记下其下标*/ } } OutputOneStudent(k); stu[x-1].num=1;//该生排名 for(j=0;j<3;j++) { if(stu[j].sum>stu[x-1].sum) stu[x-1].num++; } printf("\n该生排名为第%d名。 \n",stu[x-1].num); printf("\n\n继续查询其他学生信息吗? "); printf("\n继续查询请按y;不进行查询请按n\n"); getchar(); c=getchar(); } printf("\n按任意键继续! \n"); getchar(); } /*学生信息统计操作**********************************************/ voidtongji() { charc='y'; while(c=='y') { intx; printf("\n输入一个科目: "); printf("\n\n1: 语文\n2: 数学\n3: 英语\n0: 退出"); printf("\n\n请选择序号: "); scanf("%d",&x); if(x>0&&x<6) { switch(x) { case1: gongneng(x); break; case2: gongneng(x); break; case3: gongneng(x); break; case0: exit(-1); break; default: printf("输入错误! \n"); } } printf("\n\n继续查询其他科目信息吗? "); printf("\n继续查询请按y;不进行查询请按n\n"); getchar(); c=getchar(); } } /*选择a或b来分别显示该科平均分或统计分数段学生****************/ voidgongneng(intx) { printf("\n\n请选择功能: \n"); printf("\na: 显示该科目平均分\nb: 统计分数段学生\n"); printf("\n请选择a或b: "); charc; scanf("%s",&c); switch(c) { case'a': floatave; ave=(stu[0].score[x-1]+stu[1].score[x-1]+stu[2].score[x-1])/3; printf("\n\n该科目的平均成绩为: %.2f\n",ave); break; case'b': floatm,n; inti; intz; floatfenshu; printf("\n请输入分数段: __空格__\n"); scanf("%f%f",&m,&n); z=0; for(i=0;i<3;i++) { fenshu=stu[i].score[x-1]; if(fenshu>m&&fenshu<=n) { printf("\n\n学生信息为: \n"); OutputOneStudent(i); z++; } else continue; } printf("\n\n学生总数为: %d\n",z); break; case0: exit(-1); default: printf("输入错误! \n"); } } 课程设计总结: 经过几天的课程设计,我学到了很多东西: ①巩固和加深了对编程的理解,提高了综合运用本课程所学知识的能力。 ②培养了我选用参考书,查阅手册与文献资料的能力。 培养了独立思考,深入研究,分析问题、解决问题的能力。 ③经过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。 ④能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。 课程设计是我们把所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并未走向社会打下了一个良好的基础。 在这次课程设计中我遇到了很所问题和麻烦,得到了老师和同学们的帮助和指导,才能够使得这次课程设计顺利的进行下去。 在此对老师和同学们表示万分感谢! 指导教师评语: 指导教师(签字): 年月日 课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 成绩管理系统 设计