c程序设计大作业学生成绩管理系统设计与实现课程设计说明书

上传人:痛*** 文档编号:124517459 上传时间:2022-07-25 格式:DOC 页数:30 大小:584KB
收藏 版权申诉 举报 下载
c程序设计大作业学生成绩管理系统设计与实现课程设计说明书_第1页
第1页 / 共30页
c程序设计大作业学生成绩管理系统设计与实现课程设计说明书_第2页
第2页 / 共30页
c程序设计大作业学生成绩管理系统设计与实现课程设计说明书_第3页
第3页 / 共30页
资源描述:

《c程序设计大作业学生成绩管理系统设计与实现课程设计说明书》由会员分享,可在线阅读,更多相关《c程序设计大作业学生成绩管理系统设计与实现课程设计说明书(30页珍藏版)》请在装配图网上搜索。

1、课程设计说明书 ?C程序设计大作业? 学生成绩管理系统 前言本课程设计题目是“学生成绩管理系统设计,其内容是设计一个使用二进制文件方式存储数据,并且以菜单方式工作的管理系统。设计目的是设计一个能够方便、直观地管理学生相关信息的系统。该系统可以实现以下功能:能按学期、按班级完成对学生成绩的录入、修改;能按班级统计显示的成绩,计算学生的总分及平均分;能查询学生的成绩,不及格科目及学生名单;能按班级输出学生的成绩单。正文1. 需求分析:本程序主要用于输入、查询、统计、导入以及导出学生的成绩。主要的输入方式是利用键盘输入,且输入的字符最好是英文及数字,输入中文时有时会出现错误。程序的有效窗口大小一般为

2、半个屏幕,以至于有些功能的版面出现显示方面的错误。经测试,程序根本可以正常工作:当在主菜单输入“1时,可以正常初始化,输入余下的菜单项选择项时也能按要求跳转到指定画面;各子菜单项选择项也都能正常运行;但是输入班级、姓名等字符时,有时会显示错误的字符。2概要设计抽象数据类型的定义:学生结构体定义为struct stu,变量为student;学期数组定义为char term7; 班别数组定义为char banbie20; 学号数组定义为char no15; 姓名数组定义为char name20; 科目数组定义为int scoreMAXSUB; 总成绩变量定义为int sum; 平均成绩变量定义为f

3、loat average。抽象函数类型的定义:菜单项选择择程序“menu_select()为int型; 初始化函数“initialize(student * )为void型;数据输入函数“input(student * )为void型;数据编辑函数“editmenu(student * )为void型; 数据查询查询函数“searchmenu(student * )为void型; 数据统计函数“total(student * )为void型; 数据导出函数“save(student * )为void型 ;数据导入函数“load(student * )为void型; 数据导出函数“output(

4、student * )为void型;添加学生记录函数“add_record(student * )为void型;删除学生记录“delete_record(student * )为void型;修改学生记录函数“student * edit_record(student * )为void型;按学号查询函数“student * no_search(student * )为void型; 按姓名查询函数“student * name_search(student * )为void型。主程序的流程如Main函数流: 各程序模块之间的层次调 程图 用关系图:主函数: main.c自定义函数:student.

5、c调用调用头文件:student.h3详细设计各个操作及模块的伪代码:Main()函数的伪代码算法:printf(欢送使用学生成绩管理系统(请按回车键!).n);for(;)switch(menu_select() 选择选项1:初始化;break;选择选项2:数据录入;break;选择选项3:数据编辑;break;选择选项4:数据统计;break;选择选项5:数据查询;break; 选择选项6:数据导出;break; 选择选项7:数据显示;数据导出;printf(导出成功!n)break;选择选项0:printf(nnnntttt_感谢您使用本系统!n);退出系统;退出应用程序;初始化函数的伪

6、代码:查找每一个学生记录初始化当前学生记录为空记录printf(记录已经初始化!n按任意键继续!);结束初始化函数并返回主菜单;数据录入函数的伪代码:对学生信息数组中的每条记录进行循环为数组stuArrayi分配内存;如果数组stuArrayi为空;printf(分配内存失败!);return;do printf(目前容量可以存储%d条记录,继续请输入y or Y,返回请输入n or N!n,MAXNUM-i); 接受输入字符; 如果输入字符为y或Ybreak; 如果输入字符为n或Nreturn; else printf(输入错误!请重新输入n);while输入字符不为y、Y、n、N中的一个;

7、printf(请输入需要录入的班级:);接收输入的班别;printf(请输入学期(如08-09-1表示08-09学年第一学期):);接收输入的学期;printf(请输入第%d位同学学号(共12位):,i+1);接收输入的学号;printf(请输入第%d位同学姓名:,i+1);接收输入的姓名;printf(请输入%d门成绩n,MAXSUB);for(j=0;jMAXSUB;j+)doprintf(课程%d成绩(语文为1,数学为2,英语为3,计算机为4),j+1); 接收成绩; 刷新内存缓冲区; 检查输入的成绩是否在要求范围内;printf(错误数据!请重新输入n);;while输入的成绩不在要求

8、范围内;临时统计总成绩;保存当前学生的总成绩;算出当前学生的平均成绩;结束函数return;编辑函数的伪代码:doprintf(nt请输入菜单项数字14:);接受输入选项;while选项不在范围内;switch(menuitem)选项 1:增加记录;break;选项 2:删除记录;break;选项 3:修改记录;break;选项 4:返回主菜单;退出return;增加记录函数的伪代码:对学生信息数组中的每条记录进行循环;如果当前记录是空记录;break;学生信息数组是否存满;printf(该组已经存满!);getch();return;为新记录创立一个保存空间;创立保存空间是否成功;print

9、f(n内存缺乏!);getch(); return;printf(输入学号:);接收输入的学号;printf(请输入第%d位学生姓名:,i+1);接收输入的姓名;printf(请输入%d门成绩n,MAXSUB);对各科目进行循环;doprintf(科目%d成绩(语文为1,数学为2,英语为3,计算机为4),j+1)接收输入的成绩;输入的成绩是否在范围内;printf(错误数据,请重新输入n);getch();while输入的成绩不在范围内;临时统计总成绩;保存当前学生的总成绩;算出当前学生的平均成绩;将当前学生的信息存入学生信息数组;删除记录函数的伪代码:printf(n请输入要删除的学生学号:

10、);接收输入的学号;对学生信息数组中每条学生记录进行循环;学生信息数组中是否存在与用户输入学号相同的学生;printf(n存在要删除的学生记录!);getch();break;是否找遍数组中的所有记录;printf(n不存在要删除的学生记录!);getch();return;输出要删除的学生信息printf(你确定要删除该记录吗?Y or N!n);接收删除指令;从当前删除记录位置到最后一个记录循环;将记录向上移动一行;数组stuArrayj内存为空;printf(正在删除.n);printf(n.已经删除学号为%s的学生记录.n,s);else返回编辑子菜单;修改记录函数的伪代码:print

11、f(n请输入要修改的学生学号:);接收输入的学号;对学生信息数组中的每条学生记录进行循环;学生信息数组中是否存在与输入的学号相同的学生;printf(n存在要修改的学生记录!);getch();break; 是否找遍数组所有记录;printf(n不存在要修改的学生记录!);getch();返回菜单项选择择界面return;开始修改学生信息;printf(你确定要修改该记录吗?Y or Nn);scanf(%s,&c); 接收确认指令;确认修改;修改状态标志为1确认修改;else /*不修改;返回编辑子菜单;while(m=1) /*确认修改;printf(要修改哪个科目的成绩语文为1,数学为2

12、,英语为3,计算机为4n)接收修改科目的编号;进入科目修改循环;printf(科目%d成绩,j); 接收新的成绩;输入的成绩是否在范围中;printf(错误数据,请重新输入!n);while输入的成绩不在范围中;对当前学生每个科目进行循环;临时统计当前学生总成绩;计算当前学生的平均成绩;printf(还要继续修改此记录吗?Y or N!n); 接收确认指令;确认指令;修改状态标志为1确认修改;else 跳出确认循环break; 返回修改后的学生记录;数据查询函数的伪代码:接收选择选择 1:学号查询;break;选择 2:姓名查询;break;选择 3:返回主菜单return;学号查询函数的伪代

13、码:printf(n请输入要查询的学生的学号:);接收输入的学号;对学生信息数组中的每条学生记录进行循环;学生信息数组中是否存在与收入的学号相同的记录;printf(n存在要查询的学生记录!); getch();跳出循环,不再查找break;是否找遍数组中所有的记录;printf(n不存在要查询的学生记录!);getch();返回菜单项选择择界面return; 输出要查询的学生信息开始do printf(返回请输入b or B!n);接收输入字符;假设字符为b或B返回菜单项选择择;else printf(输入错误!请重新输入n);while字符不为b或B;姓名查询函数的伪代码:printf(n

14、请输入要查询的学生姓名:);接收输入的姓名;对学生信息数组中的每条学生信息进行循环;学生信息数组中是否存在与输入的学生姓名相同的记录;printf(n存在要查询的学生记录!);getch();跳出循环,不再查找;是否找遍数组中的所有记录;printf(n不存在要查询的学生记录!);getch();返回菜单项选择择界面;输出要查询的学生信息开始printf(返回请输入b or B!n);接收输入字符;假设字符为b或B返回菜单项选择择;else printf(输入错误!请重新输入n);while字符不为b或B;数据统计函数的伪代码:对学生信息数组中的每条学生记录进行循环;把当前学生班别放到班级变量

15、中;把当前学生学期放到学期变量中);把当前学生总分放到班级总分变量中;把当前学生平均分放到班级平均分变量中;把当前学生各科成绩分别计算总分;记录班级学生数;从学生信息数组中的第i+1条记录循环到最后一条记录;当学生记录存在把当前l另一学生班别放到班级变量中;把当前l另一学生学期放到学期变量中);比拟两个学生是否同一班级;将当前学生成绩参加本班总成绩;将当前学生平均成绩参加本班平均成绩;计算各科成绩的总分;统计班级学生数;不是同一班级;跳出循环,结束当前统计break; 输出统计界面;如果同一班级下条记录没有,跳出循环;break;else否那么将当前记录作为新的班级的第一条记录开始新的比拟;函

16、数和过程的调用关系图:4调试分析每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过同学的帮助及上网搜索,发现利用“system(“cls);可以消去前一屏幕的内容;然而接下来又出现新的问题:有些函数会出现错误;经过屡次调试和修改,才发现把“system(“cls);放在调用的函数之前以及适当的位置可以解决此问题。有些显示画面中,本该在同一行出现的内容会由于太长以至于在两行中出现;于是不停地改动该行的内容使之能够出现在同一行中。在数据录入界面中,原来是先输入班级、学期及学号后判断输入的内容是否为“no,然后根据输入选择是返回还是继续输入数据,然而会导致查询及导出界面查询乱码;经调试,

17、在录入数据之前加上 “do printf(目前容量可以存储%d条记录,继续请输入y or Y,返回请输入n or N!n,MAXNUM-i); c=getch(); if(c=y|c=Y)break; else if(c=n|c=N)return; else printf(输入错误!请重新输入n);while(c!=y&c!=Y&c!=n&c!=N);可以先判断再输入。5用户使用说明本程序在VC+软件中运行无误,主要运行系统为windows xp、windows Vista和windows 7,但是在windows 7中运行有时会出现兼容性错误,故推荐在windows Xp中使用。使用方法:双

18、击启动程序student.exe,会出现欢送界面,按回车键继续;出现主菜单界面,第一次使用时要进行初始化:输入1回车可成功初始化;回到主菜单界面,输入2回车进行学生成绩输入,最多可输入70位学生的成绩,输入过程中输入y回车可返回主菜单界面;输入3回车可进行学生成绩的编辑,在出现的子菜单界面可以选择“1增加数据、2删除数据、3修改数据中任一项进行编辑,输入4回车可返回主菜单;在主菜单界面输入4可进行学生成绩的统计,统计结果包括每班各科成绩的总分、平均分;在主菜单界面输入5可进行学生成绩的查询,在子菜单界面可以选择“1按学号查询和2按姓名查询中的任一项,输入3回车返回主菜单界面;在主菜单界面输入6

19、可以把已经保存的数据导入到系统中前提是已经有保存的文件;在主菜单界面中输入7可以进行数据的保存;在主菜单界面中输入0会退出系统。6测试结果(列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。) 错误1如图1:查询时出现乱码;图17本次课程设计总结(个人收获和体会:在程序设计中碰到的问题及其解决方法;学习C语言的体会,和老师分享你对这门课程的见解,提出你的建议和意见)附录带注释的源程序:#ifndef _STUDENT_H /*是否编译过STUDENT_H段*/#define _STUDENT_H /*声明STUDENT_H条件编译段*/*头文件*/#inc

20、lude #include /*引入动态存储分配函数库*/#include /*引入输入输出函数库*/#include string.h /*引入字符和字符串函数库*/*定义常数名*/#define MAXNUM 70 /*定义最大学生记录数*/#define MAXSUB 4 /*定义最大科目数*/*定义学生结构变量*/typedef struct stu /*定义学生结构体*/char term7; /*定义学期数组*/char banbie20; /*定义班别数组*/char no15; /*定义学号数组*/char name20; /*定义姓名数组*/int scoreMAXSUB;

21、/*定义科目数组*/int sum; /*定义总成绩变量*/float average; /*定义平均成绩变量*/student; /*定义一个学生结构体变量student*/*定义菜单项选择项*/int menu_select(); /*菜单项选择择程序*/void initialize(student * ); /*初始化*/void input(student * ); /*数据输入*/void editmenu(student * ); /*数据编辑*/void add_record(student * ); /*添加学生记录*/void delete_record(student *

22、 ); /*删除学生记录*/student * edit_record(student * ); /*修改学生记录*/void search_select(struct stu * stuArrayMAXNUM); /*数据查询*/student * no_search(student * ); /*按学号查询*/student * name_search(student * ); /*按姓名查询*/void total(student * ); /*数据统计*/void save(student * ); /*数据导出*/void load(student * ); /*数据导入*/void

23、 output(student * );#endif /*STUDENT_H条件编译段结束*/#includestudent.h /*引入预定义文件*/int main()student * p; /*保存单个学生信息*/student * stuArrayMAXNUM;/*保存所有学生信息的数组*/p=(student * )malloc(sizeof(student); /*创立一个空的学生记录*/stuArray0=p; /*将该学生信息放入数组第一个位置*/printf(欢送使用学生成绩管理系统(请按回车键!).n); /*输出提示信息*/getch(); /*等待使用者回应*/for

24、(;) /*进入主菜单*/switch(menu_select() /*等待使用者输入选择*/ case 1: /*选择选项1*/system(cls);initialize(stuArray); /*初始化*/break; /*跳出,重新进行菜单项选择择*/case 2: /*选择选项2*/system(cls);input(stuArray); /*数据录入*/break; /*跳出,重新进行菜单项选择择*/case 3: /*选择选项3*/system(cls);editmenu(stuArray); /*数据编辑*/break; /*跳出,重新进行菜单项选择择*/case 4: /*选

25、择选项4*/system(cls);total(stuArray); /*数据统计*/getch();break; /*跳出,重新进行菜单项选择择*/case 5: /*选择选项5*/system(cls);search_select(stuArray); /*数据查询*/getch();break; /*跳出,重新进行菜单项选择择*/case 6: /*选择选项6*/system(cls);load(stuArray); /*数据导出*/break;/*跳出,重新进行菜单项选择择*/case 7: /*选择选项7*/system(cls);output(stuArray); /*数据显示*/

26、save(stuArray); /*数据导出*/printf(导出成功!n);getch();break; /*跳出,重新进行菜单项选择择*/case 0: /*选择选项0*/system(cls);printf(nnnntttt_感谢您使用本系统!n);getch();exit(0); /*退出系统*/return 0; /*退出应用程序*/int menu_select()int menuItem=-1;system(cls);printf(nnnnn);/*输出开始菜单界面*/printf( |*学生成绩管理系统*| n);printf( |-| n);printf( | 主菜单项 |

27、n);printf( |-| n);printf( | 1-初始化 | n);printf( | 2-数据录入 | n);printf( | 3-数据编辑 | n);printf( | 4-数据统计 | n);printf( | 5-数据查询 | n);printf( | 6-数据导入 | n);printf( | 7-数据导出 | n);printf( | 0-退出系统 | n);printf( |-| n);printf(n 请输入菜单项数字(07)(第一次进入系统请先初始化!):);do /*进入菜单项选择择循环*/ scanf(%d,&menuItem);if(menuItem7)pu

28、ts(输入有误,请重新输入:);while(menuItem7);return menuItem;void initialize(student * stuArrayMAXNUM)int i=0; /*学生记录行号*/for(i=0;iMAXNUM;i+) /*查找每一个学生记录*/stuArrayi=NULL; /*初始化当前学生记录为空记录*/printf(记录已经初始化!n按任意键继续!);getch();return;/*结束初始化函数并返回主菜单*/void input(student * stuArrayMAXNUM)int i=0; /*学生记录行号*/int j=0; /*学生

29、功课号*/int s=0; /*总成绩*/char c;for(i=0;ibanbie); /*接收输入的班别*/printf(请输入学期(如08-09-1表示08-09学年第一学期):); /*提示输入学期*/scanf(%s,&stuArrayi-term); /*接收输入的学期*/printf(请输入第%d位同学学号(共12位):,i+1); /*提示输入学号*/scanf(%s,&stuArrayi-no); /*接收输入的学号*/printf(请输入第%d位同学姓名:,i+1); /*提示输入姓名*/scanf(%s,&stuArrayi-name); /*接收输入的姓名*/prin

30、tf(请输入%d门成绩n,MAXSUB); /*提示输入成绩*/for(j=0;jscorej); /*接收成绩*/fflush(stdin); /*刷新内存缓冲区*/ if(stuArrayi-scorej100)|(stuArrayi-scorejscorej100)|(stuArrayi-scorejscorej; /*临时统计总成绩*/stuArrayi-sum=s;/*保存当前学生的总成绩*/stuArrayi-average=s/MAXSUB;/*算出当前学生的平均成绩*/return; /*结束函数*/void editmenu(struct stu *stuArrayMAXNU

31、M)int menuitem=-1;printf(nnn);printf(t|-*-*-|n);printf(t|-*编辑子菜单*-|n);printf(t|-*-*-|n);printf(t| 1-增加记录 |n);printf(t| 2-删除记录 |n);printf(t| 3-修改记录 |n);printf(t| 4-返回主菜单 |n);printf(t|-*-*-|n);doprintf(nt请输入菜单项数字14:);scanf(%d,&menuitem);while(menuitem4);switch(menuitem)case 1:add_record(stuArray);brea

32、k;case 2:delete_record(stuArray);break;case 3:edit_record(stuArray);break;case 4:return;return;void add_record(student * stuArrayMAXNUM)int i=0; /*学生记录行号*/int j=0; /*科目号*/student * info; /*临时保存当前学生的信息*/int s=0; /*临时保存总成绩*/system(cls);/*搜查最新记录*/for(i=0;ino); /*接收输入的学号*/printf(请输入第%d位学生姓名:,i+1); /*提示输

33、入姓名*/scanf(%s,&info-name); /*接收输入的姓名*/printf(请输入%d门成绩n,MAXSUB); /*提示输入成绩*/for(j=0;jscorej); /*接收输入的成绩*/if(info-scorej100) | (info-scorejscorej100) | (info-scorejscorej; /*临时统计总成绩*/info-sum=s; /*保存当前学生的总成绩*/info-average=s/MAXSUB; /*算出当前学生的平均成绩*/stuArrayi=info; /*将当前学生的信息存入学生信息数组*/void delete_record(s

34、tudent * stuArrayMAXNUM)int i=0; /*学生记录行号*/int j=0; /*科目号*/char s11; /*学号*/char c; /*确认指令Y删除N不删除*/system(cls);printf(n请输入要删除的学生学号:); /*提示输入学生学号*/scanf(%s,&s); /*接收输入的学号*/j=i+1;for(i=0;ino,s,11)=0) /*学生信息数组中是否存在与用户输入学号相同的学生*/printf(n存在要删除的学生记录!);getch(); /*找到指定学号的学生记录*/break;if(i=MAXNUM)|(stuArrayi=N

35、ULL) /*是否找遍数组中的所有记录*/printf(n不存在要删除的学生记录!);getch(); /*没有找到与指定学号相同的学生*/return;/*输出要删除的学生信息开始*/printf(n*-*这是要删除的记录吗?*-*n);printf(| 学期 | 学号 | 班别 | 姓名 | 语文 | 数学 | 英语 |计算机| 总分 | 平均分|n);printf(|-|-|-|-|-|-|-|-|-|-|n);printf(|%-7s|%-12s|%-6s|%-6s|%6d|%6d|%7d|%6d|%6d|%7.2f|n,stuArrayi-term,stuArrayi-no,stuArrayi-banbie,stuArrayi-name,stuArrayi-score0,stuArrayi-score1,stuArrayi-

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!