《C语言课程设计-学生成绩管理系统(24页).doc》由会员分享,可在线阅读,更多相关《C语言课程设计-学生成绩管理系统(24页).doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-C语言课程设计-学生成绩管理系统-第 22 页内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 学生信息管理系统学生姓名:学 号:专 业:软件工程班 级:2015-软件一班指导教师:日 期: 2016 年 1 月 1日内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生成绩管理系统指导教师时间2015.1.52015.1.9一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课
2、程设计题目中任意选择一题,独立完成,题目选定后不可更换。某班学生成绩管理,包括以下功能:v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能v 具有输出文件数据信息的功能三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知
3、意,要有必要的注释,每人至少500行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程设计,刘振安,机械工业出版社目 录
4、内蒙古科技大学课程设计任务书I目 录III第一章 需求分析41.1 引言41.2 任务概述41.3 数据描述41.4 功能需求41.5 运行需求41.6 任务计划4第二章 概要设计52.1 总体设计52.2 接口设计52.3 运行界面设计6第三章 详细设计83.1 查找模块设计83.2 排序模块设计8第四章 测试分析94.1 测试程序执行情况94.2 出现的问题和解决的方法11第五章 用户手册(可选)125.1 使用说明12第六章 课程设计总结13附录:程序代码13参考文献29致谢29第一章 需求分析1.1 引言本系统可方便管理学生成绩,具有多项功能,欢迎大家使用并推广!1.2 任务概述1.编
5、写一个学生成绩管理系统;2.运用所学知识写出代码具有输入丶查找丶统计丶修改丶删除等功能;3.能正确运行出结果并展示给指导老师;4.提高运用C语言解决实际问题的能力。1.3 数据描述本系统通过建立结构体对学生成绩的信息进行存储丶删除以及访问修改等.1.4 功能需求v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能v 具有输出文件数据信息的功能1.5 运行需求1.运行结果清楚;2.无错误信息出现;3.程序不崩溃
6、,能正常运行等。1.6 任务计划第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)第二章 概要设计2.1 总体设计Main( )主函数中显示主菜单Menu( ),运用 case( )语句显示多项功能,在进入菜单前先输入管理员登录密码,然后可进行多项功能操作.2.2 接口设计 函数名函数格式 /即函数首部函数功能Menuint Menu(void);显示菜单并获得用户键盘输入的选项ReadScorevoid ReadScore(STU stu,int n,int m);输入n个学生的m门课程成绩 Deletein
7、t Delete(STU stu,int n,int m);删除AverSumofEveryStudentvoid AverSumofEveryStudent(STU stu,int n,int m);计算每个学生各门课程的总分和平均分SortbyScorevoid SortbyScore(STU stu,int n,int m,int (*compare)(float a,float b);按选择法将总分的元素值排序Ascendingint Ascending(float a,float b);使数据按升序排序Descendingint Descending(float a,float b)
8、;使数据按降序排序SwapFloatvoid SwapFloat(float *x,float *y);交换两个单精度浮点型数据SwapLongvoid SwapLong(long *x,long *y);交换两个长整型数据SwapCharvoid SwapChar(char x,char y);交换两个字符串AsSortbyNumvoid AsSortbyNum(STU stu,int n,int m);按学号升序排序EditInformationvoid EditInformation(STU stu,int n,int m);修改SearchbyNumvoid SearchbyNum(S
9、TU stu,int n,int m);按学号查找学生成绩SearchbyNamevoid SearchbyName (STU stu,int n,int m);按姓名查找学生成绩StatisticAnalysisvoid StatisticAnalysis(STU stu,int n,int m);统计各分数段的学生人数及所占的百分比PrintScorevoid PrintScore(STU stu,int n,int m);学生信息记录WritetoFileVoid WritetoFile(STU record,int n,int m);写入到文件student.txt中ReadfromF
10、ileint ReadfromFile(STU record,int m);从文件中读取学生信息并返回学生数2.3 运行界面设计1.登录页面:2. 进入选项页面:第三章 详细设计3.1 查找模块设计开始按学号按姓名3.2 排序模块设计开始按总分降序按学号升序按总分升序第四章 测试分析4.1 测试程序执行情况1. 输入n个学生的m门课程成绩:2. 打印学生信息:3. 按学生总分升序排序:4. 按学生总分降序排序:5. 按学号升序排序:6. 修改学生信息:7. 删除学生信息:8. 按学号查找学生:9. 按姓名查找学生:10. 统计分析:11. 写入文件:12. 读取文件:4.2 出现的问题和解决的
11、方法1. 开始不会文件怎么写入和读取,然后通过老师的讲解和对同学的询问,最后成功解决了问题;2. 在写好程序后发现漏了删除和修改功能,自己加进去后发现程序有错误,通过网上查询和舍友帮助,最终解决了难题!第五章 用户手册(可选)5.1 使用说明1. 管理员登录密码:15671591352. 其他操作按提示操作即可.第六章 课程设计总结附录:程序代码#include#include #include#include#define MAX_LEN 10/字符串最大长度#define STU_NUM 30/最多的学生人数#define COURSE_NUM 6/最多的考试科目数typedef stru
12、ct student long num;/学号 char nameMAX_LEN;/姓名 float scoreCOURSE_NUM;/6门功课的成绩 float sum;/每个学生的总成绩 float aver;/每个学生的平均成绩STU;int Menu(void);/显示菜单并获得用户键盘输入的选项void ReadScore(STU stu,int n,int m);/输入n个学生的m门课程成绩int Delete(STU stu,int n,int m);/删除void AverSumofEveryStudent(STU stu,int n,int m);/计算每个学生各门课程的总分
13、和平均分void SortbyScore(STU stu,int n,int m,int (*compare)(float a,float b);/按选择法将总分的元素值排序int Ascending(float a,float b);/使数据按升序排序int Descending(float a,float b);/使数据按降序排序void SwapFloat(float *x,float *y);/交换两个单精度浮点型数据void SwapLong(long *x,long *y);/交换两个长整型数据void SwapChar(char x,char y);/交换两个字符串void As
14、SortbyNum(STU stu,int n,int m);/按选择法将数组sum的元素值升序排序void EditInformation(STU stu,int n,int m);/修改void SearchbyNum(STU stu,int n,int m);/按学号查找学生成绩并显示查找结果void SearchbyName (STU stu,int n,int m);/按姓名的字典顺序排出成绩表void StatisticAnalysis(STU stu,int n,int m);/统计各分数段的学生人数及所占的百分比void PrintScore(STU stu,int n,int
15、 m);/学生信息记录void WritetoFile(STU record,int n,int m);/写入到文件student.txt中int ReadfromFile(STU record,int m);/从文件中读取学生信息并返回学生数int main() char ch; int n = 0,m = 0; long x; STU stuSTU_NUM; printf(_n); printf(| 欢 迎 使 用 学 生 成 绩 管 理 系 统 |n); printf(|-|n); do printf(nnnn请输入管理员密码:); scanf(%ld,&x); while(x!=156
16、7159135); while(1) ch = Menu();/显示菜单,并读取用户输入 switch (ch) case 1:printf(请输入学生人数(n%d):,STU_NUM); scanf(%d,&n); printf(请输入每个学生的课程数目(m=%d):,COURSE_NUM); scanf(%d,&m); ReadScore(stu,n,m); break; case 2:PrintScore(stu,n,m); break; case 3:SortbyScore(stu,n,m,Descending); printf(n按学生总分升序排序 :n); PrintScore(s
17、tu,n,m); break; case 4:SortbyScore(stu,n,m,Ascending); printf(n按学生总分降序排序:n); PrintScore(stu,n,m); break; case 5:AsSortbyNum(stu,n,m); printf(n按学生学号升序排序:n); getch(); PrintScore(stu,n,m); getch(); break; case 6:EditInformation(stu,n,m); break; case 7:n=Delete(stu,n,m); break; case 8:SearchbyNum(stu,n,
18、m); break; case 9:SearchbyName(stu,n,m); break; case 10:StatisticAnalysis(stu,n,m); break; case 11:WritetoFile(stu,n,m); break; case 12:n = ReadfromFile(stu,m); break; case 0:printf(End of programe!n); exit(0); default:printf(Input error!n); return 0;int Menu(void)/显示菜单并获得用户键盘输入的选项 int itemSelected;
19、system(cls); system(color b0); printf(_n); printf(| 欢 迎 使 用 学 生 成 绩 管 理 系 统 |n); printf(|-|n); printf(| |n); printf(| 1.输入n个学生的m门课程成绩 |n); printf(| 2.学生成绩信息记录 |n); printf(| 3.按学生总分升序排序 |n); printf(| 4.按学生总分降序排序 |n); printf(| 5.按学生学号升序排序 |n); printf(| 6.修改学生信息 |n); printf(| 7.删除学生信息 |n); printf(| 8.按
20、学号查找学生信息 |n); printf(| 9.按姓名查找学生信息 |n); printf(| 10.统计分析 |n); printf(| 11.将学生信息写入文件中 |n); printf(| 12.通过文件读取学生信息 |n); printf(| 0.退出 |n); printf(|_|n); printf( 请输入您要操作的选项: ); scanf(%d,&itemSelected); system(cls); return itemSelected;void ReadScore(STU stu,int n,int m)/1.输入n个学生的m门课程成绩 int i,j; printf(
21、请输入学生学号,姓名和分数:n); for(i=0;in;i+) scanf(%ld%s,&stui.num,stui.name); for(j=0;jm;j+) scanf(%f,&stui.scorej); getch();void PrintScore(STU stu,int n,int m)/2.学生成绩信息记录 int i,j; AverSumofEveryStudent(stu,n,m); for(i=0;in;i+) printf(%ldt%st,stui.num,stui.name); for(j=0;jm;j+) printf(%.0ft,stui.scorej); prin
22、tf(%.0ft%.0fn,stui.sum,stui.aver); getch();void AverSumofEveryStudent(STU stu,int n,int m)/计算每个学生各门课程的总分和平均分 int i,j; for(i=0;in;i+) stui.sum=0; for(j=0;j0?stui.sum/m:-1;void SortbyScore(STU stu,int n,int m,int (*compare)(float a,float b)/排序 int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(*co
23、mpare)(stuj.sum,stuk.sum) k=j; if(k!=i) for(t=0;tm;t+) SwapFloat(&stuk.scoret,&stui.scoret); SwapFloat(&stuk.sum,&stui.sum); SwapFloat(&stuk.aver,&stui.aver); SwapLong(&stuk.num,&stui.num); SwapChar(stuk.name,stui.name); getch();int Ascending(float a,float b)/使数据按升序排序 return ab;void SwapFloat(float
24、*x,float *y)/交换两个单精度浮点型数据 float temp; temp = *x; *x = *y; *y = temp;void SwapLong(long *x,long *y)/交换两个长整型数据 long temp; temp = *x; *x = *y; *y = temp;void SwapChar(char x,char y)/交换两个字符串 char tempMAX_LEN; strcpy(temp,x); strcpy(x,y); strcpy(y,temp);void AsSortbyNum(STU stu,int n,int m)/按选择法将数组num的元素
25、值升序排序 int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(stuj.numstuk.num) k=j; if(k!=i) for(t=0;tm;t+)/交换m门课程的成绩 SwapFloat(&stuk.scoret,&stui.scoret); SwapFloat(&stuk.sum,&stui.sum);/交换总分 SwapFloat(&stuk.aver,&stui.aver);/交换平均分 SwapLong(&stuk.num,&stui.num);/交换学号 SwapChar(stuk.name,stui.name);/
26、交换姓名 getch();void SortbyName(STU stu,int n,int m)/交换法实现字符串按字典顺序排序 int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(strcmp(stuj.name,stui.name)0); for(t=0;tm;t+) SwapFloat(&stui.scoret,&stuj.scoret); SwapFloat(&stui.sum,&stuj.sum);/交换总分 SwapFloat(&stui.aver,&stuj.aver);/交换平均分 SwapLong(&stui.num,&stuj.
27、num);/交换学号 SwapChar(stui.name,stuj.name);/交换姓名 getch();void EditInformation(STU stu,int n,int m)/6。修改学生信息 system(cls); int number,i,j; printf(请输入您要修改的学号:); scanf(%d,&number); for(i=0;in;i+) if(stui.num=number) printf(请输入该学生的新学号,姓名和分数:n); scanf(%ld%s,&stui.num,stui.name); for(j=0;jm;j+) scanf(%f,&stu
28、i.scorej); printf(修改成功!n); AverSumofEveryStudent(stu,n,m); printf(%ldt%st,stui.num,stui.name); for(j=0;jm;j+) printf(%.0ft,stui.scorej); printf(%.0ft%.0fn,stui.sum,stui.aver); break; if(i=n) printf(无此信息!n); getch();int Delete(STU stu,int n,int m)/7.删除学生信息 system(cls); int number,i,j,k,Max; Max=n; pr
29、intf(请输入您要删除的学号:); scanf(%d,&number); for(i=0;in;i+) if(stui.num=number) for(j=i;jn-1;j+) stuj.num=stuj+1.num; strcpy(stuj.name,stuj+1.name); for(k=0;km;k+) stuj.scorek=stuj+1.scorek; stuj.aver=stuj+1.aver; stuj.sum=stuj+1.sum; n=n-1; printf(删除成功!n); printf(现在有%d人n,n); break; if(i=Max) printf(无此信息!n
30、); getch(); return n;void SearchbyNum(STU stu,int n,int m)/8.按学号查找并显示结果 long number; int i,j; printf(Input the number you want to search:); scanf(%ld,&number); for(i=0;in;i+) if(stui.num=number) printf(%ldt%st,stui.num,stui.name); for(j=0;jm;j+) printf(%.0ft,stui.scorej); printf(%.0ft%.0fn,stui.sum,
31、stui.aver); getch(); return; printf(nNot foud! n); getch();void SearchbyName (STU stu,int n,int m)/9.按姓名查找学生信息 char xMAX_LEN; int i,j; printf(Input the name you want to search:); scanf(%s,x); for(i=0;in;i+) if(strcmp(stui.name,x) = 0) printf(%ldt%st,stui.num,stui.name); for(j=0;jm;j+) printf(%.0ft,s
32、tui.scorej); printf(%.0ft%.0fn,stui.sum,stui.aver); getch(); return; printf(nNot found!n); getch();void StatisticAnalysis(STU stu,int n,int m)/10.统计各分数段人数及所占百分比 int i,j,total,t6; for(j=0;jm;j+) printf(For course %d:n,j+1); memset(t,0,sizeof(t); for(i=0;i=0 & stui.scorej60) t0+; else if(stui.scorej70
33、) t1+; else if(stui.scorej80) t2+; else if(stui.scorej90) t3+; else if(stui.scorej100) t4+; else if(stui.scorej=100) t5+; for(total=0,i=0;i=5;i+) total=total+ti; for(i=0;i=5;i+) if(i=0)printf(60t%dt%.2f%n,ti,(float)ti/n*100); else if (i=5)printf(%dt%dt%.2f%n,(i+5)*10,ti,(float)ti/n*100); else printf
34、(%d-%dt%dt%.2f%n,(i+5)*10,(i+5)*10+9,ti,(float)ti/n*100); getch();void WritetoFile(STU stu,int n,int m)/11.写入到文件student.txt中 FILE *fp; int i,j; if(fp = fopen(student.txt,w)=NULL) printf(Failure to open score.txt!n); exit(0); for(i=0;in;i+) fprintf(fp,%ldt%st,stui.num,stui.name); for(j=0;jm;j+) fprintf(fp,%.0ft,stui.scorej); fprintf(fp,%.0ft%.0fn,stui.sum,stui.aver);