《C语言学生成绩管理系统设计(共25页).doc》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统设计(共25页).doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上专心-专注-专业 沈阳航空航天大学课 程 设 计 报 告大作业名称:C 语言课程设计大作业题目:学生成绩管理系统设计院(系):计算机学院专 业:计算机科学与技术班 级:学 号:姓 名:指导教师:完成日期:2016年12月24日精选优质文档-倾情为你奉上专心-专注-专业目目 录录 2精选优质文档-倾情为你奉上专心-专注-专业第 1 章 概要设计1.1 题目的内容与要求题目的内容与要求内容: 学生成绩信息包括:姓名、学号、语文、数学、英语。 实现的主要功能有: 1)信息维护。包括学生成绩的输入、按学号删除、按学号修改等。 2) 信息查询。输入学号或姓名,显示出该生三个科目
2、的成绩,计算出三科总分 并显示,按总分将所有学生成绩排序,显示出该生的名次。 3)成绩统计。先输入任意一个科目,接着选择 a 或 b 来分别显示平均分或统计 分数段学生,若选择 a,则直接显示出该科目的平均分;若选择 b,则提示 用户输入一个分数段,显示所有该科目属于该分数段内的学生信息,并给出 学生总数。要求: 1)系统以菜单方式工作。在不同的界面为用户给出具体提示。 2)系统利用 C 语言实现,源程序要有适当的注释。 3)采用 VC 环境进行运行调试。1.2 总体结构总体结构本程序主要分为七个模块(功能模块图见图功能模块图见图 1.1):结构体模块,输入模块,显示模块,修改模块,删除模块,
3、查询模块,统计模块。结构体模块:建立一个结构体模块,为链表存信息用。输入模块:键盘输入每个学生的信息,并保存在文件中。显示模块:显示全部学生的具体信息。修改模块:修改某个学生的成绩信息。删除模块:删除某个学生的全部信息。查询模块:查询某个学生的具体信息。统计模块:通过功能选择,统计并显示某一科目精选优质文档-倾情为你奉上专心-专注-专业的平均分或某分数段学生的具体信息。 图图 1.1 功能模块图功能模块图第 2 章 详细设计2.1 主模块主模块控制整个程序的运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,流程如图 2.1 所示。 Y N N Y 学生成绩管理系统显示模块修改模
4、块删除模块输入模块查询模块统计模块主模块 开始 显示主菜单选 0 退出 执行具体功能 显示结果 结束选 1-6精选优质文档-倾情为你奉上专心-专注-专业 图图 2.1 主模块流程图主模块流程图注释:1. 显示主菜单;2. 选择不同序号执行不同功能;2.2 输入模块输入模块输入所有学生信息并保存,流程如图 2.2 所示。图图 2.2 输入模块流程图输入模块流程图注释:1. 循环输入每个学生的信息;2.保存所有信息2.3 显示模块显示模块 显示所有学生的具体信息,流程图如 2.3 所示。 input()printf(输入学号:);printf(输入姓名:);printf(第%d 门成绩的分数:,j
5、+1); 结束计算总分、平均分 printf(nn 信息保存成功!恭喜!nn);Print() 显示信息精选优质文档-倾情为你奉上专心-专注-专业 图图 2.3 显示模块流程图显示模块流程图 注释:1. 选择号好功能;2. 显示全部学生的具体信息。2.4 修改模块修改模块修改某个学生各个科目的成绩,流程图如 2.4 所示。 Y N 图图 2.4 修改模块流程图修改模块流程图注释:1. 输入要修改学生的学号;2. 输入要修改的科目信息;3. 修改成功,是否要继续修改。是,继续;否,回到主菜单。2.5 删除模块删除模块 结束xiugai()printf(n 请输入要修改的同学的学号:);print
6、f(n 请输入要修改学生修改后的的信息n);是否继续修改?结束printf(n 修改成功!恭喜!n);精选优质文档-倾情为你奉上专心-专注-专业 按学号删除某学生的全部信息,流程图如图 2.5 所示。精选优质文档-倾情为你奉上专心-专注-专业 Y NN 图图 2.5 删除模块流程图删除模块流程图注释:1. 输入要删除的学生的学号;2. 显示该生信息,是否删除。是,删除;否,是否继续操作。3. 是否继续删除。是,重复上述操作;否,退出回到主菜单。2.6 查询模块查询模块 输入要查询学生的学号,显示该生具体信息,流程图如图 2.6 所示。Yshanchu()printf(n 请输入要删除的同学的学
7、号:); printf(n 该同学信息如下:n);是否删除?printf(n 删除成功!恭喜!n);是否继续删除?结束Ychaxun()printf(n 请输入学生学号:);显示该生具体信息是否继续查询?结束精选优质文档-倾情为你奉上专心-专注-专业 N 图图 2.6 查询模块流程图查询模块流程图注释:1. 输入要查询的学生的学号;2. 显示该生的具体信息;3. 是否继续查询。是,继续查询下一位;否,回到主菜单。2.7 统计模块统计模块 通过选择不同功能,显示某个科目的平均分或某分数段学生的具体信息,流程图如图 2.7 所示。case a:case b:Y N 图图 2.7 统计模块流程图统计
8、模块流程图注释:1. 通过菜单选择科目;2. 通过菜单选择 a 或 b 功能,分别显示该科目平均分或某分数段学生信息;tongji()printf(n 输入一个科目:);选择功能 a 或b计算该科目平均分 printf(nn 该科目的平均成绩为:%.2fn,ave);printf(n 请输入分数段:_ 空格_ n);显示属于该分数段的学生;学生总数是否继续查询其他科目? 结束精选优质文档-倾情为你奉上专心-专注-专业3. 是否继续查询?是,继续;否,回到主菜单。第 3 章 调试分析在这次课程设计中,程序编写的过程中遇到了很多问题,主要是函数实现方面问题较多。问题 1:查询函数 chaxun(
9、)中,会造成数据混乱,原因是 for 循环中某行代码运用错误,如下: for(i=0;in;i+) if(stui.num=x) k=i;/*找到要查询的同学学号,并用 k 记下其下标*/ OutputOneStudent(k); 将 OutputOneStudent(k);拿出后,查询功能正常实现。正确编写如下: for(i=0;in;i+) if(stui.num=x) k=i;/*找到要查询的同学学号,并用 k 记下其下标*/ OutputOneStudent(k); 问题 2:统计函数 tongji() ,功能实现完后不能回到主菜单。解决方法是,精选优质文档-倾情为你奉上专心-专注-专
10、业把功能函数 gongneng()其中的 while 循环删掉。 第 4 章 使用说明运行截图如下:1.输入成绩2.信息显示精选优质文档-倾情为你奉上专心-专注-专业3.修改信息4.删除信息精选优质文档-倾情为你奉上专心-专注-专业5.查询信息6.1 统计信息-科目平均分6.2 统计信息-科目某分数段学生信息精选优质文档-倾情为你奉上专心-专注-专业7.退出系统精选优质文档-倾情为你奉上专心-专注-专业参考文献1. 王敬华, C 语言程序设计教程(第二版) ,清华大学出版社,2009 年 8 月2. 谭浩强, C 语言程序设计教程(第二版) ,清华大学出版社,1999 年 12 月3. 谭浩强
11、, C 语言程序设计题解与上机指导 ,清华大学出版社,2000 年 11 月4. 田淑清, C 语言程序设计辅导与习题集 ,中国铁道出版社,2000 年 1 月5. 张荣梅、梁晓林, Visual C+实用教程 ,冶金工业出版社,2004 年附 录(程序清单)程序代码:#include#include#include#define N 3struct studentint num; /学号char name20; /姓名float score3; /三门课成绩float sum; /总分float aver; /平均分stuN;void menu(); /主菜单功能void input();
12、/输入信息到结构体中void save(int x); /保存 stud.dat 文件函数void print(); /输出显示所有学生信息void SaveAllStudent(int n); /保存全部学生信息void xiugai(int n); /按学号修改成绩int shanchu(int n); /按学号删除void OutputOneStudent(int i); /查询一个学生的信息精选优质文档-倾情为你奉上专心-专注-专业void chaxun(int n); /按学号查询成绩void tongji(); /统计科目信息void gongneng(int x); /a 或 b
13、 功能分别显示科目平均分或分数段学生信息int main() printf(*n); printf(* *n); printf(* Hwadee &学生成绩管理系统& Hwadee *n); printf(* *n); printf(*nnn); printf(*欢迎使用*n);while(1)menu();return 0;/*主菜单*/void menu()int choice; int n=N; printf(n 请选择功能:n);printf(n1:输入成绩n2:显示信息n3:修改成绩n4:删除信息n5:查询成绩n6:成绩统计n0:退出系统nn);printf(n 请选择序号:n);s
14、canf(%d,&choice);精选优质文档-倾情为你奉上专心-专注-专业switch(choice)case 1:input();save(N);break;case 2:print();break;case 3:xiugai(n);break;case 4:shanchu(n);break;case 5:chaxun(n);break;case 6:tongji();break;case 0:printf (n 谢谢使用,再见!nn);exit (-1);break;default:printf(输入错误!n);break;/*写入函数*/void input()int i,j;prin
15、tf(n 输入信息n);for(i=0;iN;i+)printf(输入学号:);scanf(%d,&stui.num);printf(输入姓名:);scanf(%s,&stui.name);精选优质文档-倾情为你奉上专心-专注-专业for(j=0;jN;j+)printf(第%d 门成绩的分数:,j+1);scanf(%f,&stui.scorej);stui.sum=stui.score0+stui.score1+stui.score2;stui.aver=stui.sum/3;printf(n);/*写入文件*/void save(int x) FILE *fp;/*定义文件指针用于向文件
16、读入数据*/ int i; if(fp=fopen(student.dat,rb+)=NULL)/*以二进制读,写方式打开文件*/ printf(cannot open filen); exit(1); for(i=0;iN;i+) if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(file write errorn); fclose(fp); printf(nn 信息保存成功!恭喜!nn);/*显示全部学生信息*/void print()int i;printf(学号 姓名 语文 数学 英语 总分 平均分n);for(i=0;iN
17、;i+)精选优质文档-倾情为你奉上专心-专注-专业printf(%d %s %.2f %.2f %.2f %.2f %.2fn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.sum,stui.aver);/*保存全部学生信息*8*/void SaveAllStudent(int n) FILE *fp; if(fp=fopen(student.dat,wb)=NULL) printf(文件打开失败!n); exit(1); fwrite(stu,sizeof(struct student),n,fp); fclose(f
18、p);/*修改学生信息*/void xiugai(int n) struct student temp;int k=-1,x,i; char c1=y; while(c1=y) printf(n 请输入要修改的同学的学号:); scanf(%d,&x); for(i=0;in;i+) if(x=stui.num) k=i;/*找到要修改的同学学号,并用 k 记下其下标*/ break; if(k0)精选优质文档-倾情为你奉上专心-专注-专业 printf(n 输入学号有误,请重新输入!); else printf(n 请输入要修改学生修改后的的信息n); printf(语文(空格)数学(空格)
19、英语tn); scanf(%f %f %f,&temp.score0,&temp.score1,&temp.score2); temp.sum=(temp.score0+temp.score1+temp.score2); temp.aver=(temp.score0+temp.score1+temp.score2)/3;stuk.score0=temp.score0;/*修改该学生信息*/ stuk.score1=temp.score1; stuk.score2=temp.score2;stuk.sum=temp.sum;stuk.aver=temp.aver;printf(n 修改成功!恭喜
20、!n); break; SaveAllStudent(k); printf(n 继续修改操作吗?); printf(n 继续修改请按 y;不进行修改请按 nn);getchar(); c1=getchar(); printf(n 按任意键继续!n); getchar();/*删除学生信息*/int shanchu(int n) int i,k=-1,x; char c1=y,c2; while(c1=y)精选优质文档-倾情为你奉上专心-专注-专业 c2=n; printf(n 请输入要删除的同学的学号:); scanf(%d,&x); for(i=0;in;i+) if(x=stui.num)
21、 k=i;/*找到要删除的同学学号,并用 k 记下其下标*/ break; if(k0) printf(n 输入学号有误,请重新输入!); else printf(n 该同学信息如下:n); OutputOneStudent(k); printf(nn 确定删除?n); printf(确定进行删除请按 y;不进行删除请按 nn);getchar();c2=getchar(); if(c2=y) for(i=k;i3|x1) break; 精选优质文档-倾情为你奉上专心-专注-专业 for(i=0;in;i+) if(stui.num=x) k=i;/*找到要查询的同学学号,并用 k 记下其下标
22、*/ OutputOneStudent(k); stux-1.num=1; /该生排名 for(j=0;jstux-1.sum)stux-1.num+; printf(n 该生排名为第%d 名。n,stux-1.num); printf(nn 继续查询其他学生信息吗?); printf(n 继续查询请按 y;不进行查询请按 nn);getchar(); c=getchar(); printf(n 按任意键继续!n); getchar();/*学生信息统计操作*/void tongji()char c=y; while(c=y) int x; printf(n 输入一个科目:); printf(
23、nn1:语文n2:数学n3:英语n0:退出); printf(nn 请选择序号:); scanf(%d,&x);精选优质文档-倾情为你奉上专心-专注-专业 if(x0&x6) switch(x) case 1: gongneng(x);break; case 2: gongneng(x);break; case 3:gongneng(x);break; case 0: exit (-1); break; default: printf(输入错误!n); printf(nn 继续查询其他科目信息吗?); printf(n 继续查询请按 y;不进行查询请按 nn);getchar(); c=get
24、char();/*选择 a 或 b 来分别显示该科平均分或统计分数段学生*/void gongneng(int x) printf(nn 请选择功能:n); printf(na:显示该科目平均分nb:统计分数段学生n); printf(n 请选择 a 或 b:);char c; scanf(%s,&c);switch(c)精选优质文档-倾情为你奉上专心-专注-专业 case a:float ave; ave=(stu0.scorex-1+stu1.scorex-1+stu2.scorex-1) /3; printf(nn 该科目的平均成绩为:%.2fn,ave);break;case b: f
25、loat m,n; int i; int z; float fenshu; printf(n 请输入分数段:_ 空格_ n); scanf(%f %f,&m,&n);z=0; for(i=0;im & fenshu=n) printf(nn 学生信息为:n); OutputOneStudent(i); z+; else continue; printf(nn 学生总数为:%dn,z);break;case 0:exit (-1);default: printf(输入错误!n);精选优质文档-倾情为你奉上专心-专注-专业课程设计总结:课程设计总结:经过几天的课程设计,我学到了很多东西:巩固和加深
26、了对编程的理解,提高了综合运用本课程所学知识的能力。培养了我选用参考书,查阅手册及文献资料的能力。培养了独立思考,深入研究,分析问题、解决问题的能力。经过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。课程设计是我们把所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并未走向社会打下了一个良好的基础。在这次课程设计中我遇到了很所问题和麻烦,得到了老师和同学们的帮助和指导,才能够使得这次课程设计顺利的进行下去。在此对老师和同学们表示万分感谢!指导教师评语:指导教师(签字): 年 月 日课程设计成绩