2022年c程序设计大作业 .pdf
《2022年c程序设计大作业 .pdf》由会员分享,可在线阅读,更多相关《2022年c程序设计大作业 .pdf(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语言课程设计09 电信集成班陈颖宏课程设计说明书C 程序设计大作业学生成绩管理系统班级:电信 2009 级集成班学生:陈颖宏学号:200930251378 序号:提交日期:2010 年3 月 27日成绩评定:分任课教师签名:年月日前言名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-1-页 共 29 页本课程设计题目是“学生成绩管理系统设计”,其内容是设计一个使用二进制文件方式存储数据,并且以菜单方式工作的管理系统。设计目的是设计一个能够方便、直观地管理学生相关信息的系统。该系统可以实现以下功能:1 能按学期、按班级完成对学
2、生成绩的录入、修改;2 能按班级统计显示的成绩,计算学生的总分及平均分;3 能查询学生的成绩,不及格科目及学生名单;4 能按班级输出学生的成绩单。正文名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-2-页 共 29 页1.需求分析:本程序主要用于输入、查询、统计、导入以及导出学生的成绩。主要的输入方式是利用键盘输入,且输入的字符最好是英文及数字,输入中文时有时会出现错误。程序的有效窗口大小一般为半个屏幕,以至于有些功能的版面出现显示方面的错误。经测试,程序基本可以正常工作:当在主菜单输入“1”时,可以正常初始化,输入余下的菜单
3、选项时也能按要求跳转到指定画面;各子菜单选项也都能正常运行;但是输入班级、姓名等字符时,有时会显示错误的字符。2 概要设计1抽象数据类型的定义:学生结构体定义为struct stu,变量为student;学期数组定义为char term7;班别数组定义为char banbie20;学号数组定义为char no15;姓名数组定义为char name20;科目数组定义为int scoreMAXSUB;总成绩变量定义为int sum;平均成绩变量定义为float average。2抽象函数类型的定义:菜单选择程序“menu_select()”为 int型;初始化函数“initialize(stude
4、nt*)”为 void 型;数据输入函数“input(student*)”为 void 型;数据编辑函数“editmenu(student*)”为 void 型;数据查询查询函数“searchmenu(student*)”为void型;数据统计函数“total(student*)”为 void型;数据导出函数“save(student*)”为 void 型;数据导入函数“load(student*)”为 void 型;数据导出函数“output(student*)”为 void 型;添加学生记录函数“add_record(student*)”为 void 型;删除学生记录“delete_rec
5、ord(student*)”为 void 型;修改学生记录函数“student*edit_record(student*)”为 void 型;按学名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-3-页 共 29 页号查询函数“student*no_search(student*)”为 void型;按姓名查询函数“student*name_search(student*)”为 void 型。3主程序的流程如Main()函数流:4各程序模块之间的层次(调程图用)关系图:3 详细设计1各个操作及模块的伪代码:Main()函数的伪代码
6、算法:printf(欢迎使用学生成绩管理系统(请按回车键!).n);for(;)switch(menu_select()选择选项 1:初始化;break;选择选项 2:数据录入;主函数:main.c 自定义函数:student.c 调用调用头文件:student.h 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-4-页 共 29 页break;选择选项 3:数据编辑;break;选择选项 4:数据统计;break;选择选项 5:数据查询;break;选择选项 6:数据导出;break;选择选项 7:数据显示;数据导出;pri
7、ntf(导出成功!n)break;选择选项 0:printf(nnnntttt_感谢您使用本系统!n);退出系统;退出应用程序;初始化函数的伪代码:查找每一个学生记录 初始化当前学生记录为空记录 printf(记录已经初始化!n按任意键继续!);结束初始化函数并返回主菜单;数据录入函数的伪代码:对学生信息数组中的每条记录进行循环 为数组 stuArrayi分配内存;如果数组stuArrayi为空;printf(分配内存失败!);return;do 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-5-页 共 29 页 print
8、f(目前容量可以存储%d条记录,继续请输入y or Y,返回请输入n or N!n,MAXNUM-i);接受输入字符;如果输入字符为y 或Ybreak;如果输入字符为n 或Nreturn;else printf(输入错误!请重新输入 n);while输入字符不为 y、Y、n、N 中的一个;printf(请输入需要录入的班级:);接收输入的班别;printf(请输入学期(如 08-09-1 表示 08-09 学年第一学期):);接收输入的学期;printf(请输入第%d位同学学号(共 12 位):,i+1);接收输入的学号;printf(请输入第%d位同学姓名:,i+1);接收输入的姓名;pri
9、ntf(请输入%d门成绩 n,MAXSUB);for(j=0;jMAXSUB;j+)do printf(课程%d成绩(语文为 1,数学为 2,英语为3,计算机为4),j+1);接收成绩;刷新内存缓冲区;检查输入的成绩是否在要求范围内;printf(错误数据!请重新输入 n);;while输入的成绩不在要求范围内;临时统计总成绩;保存当前学生的总成绩;算出当前学生的平均成绩;结束函数return;编辑函数的伪代码:do printf(nt请输入菜单项数字(14):);接受输入选项;while选项不在范围内;switch(menuitem)选项 1:增加记录;名师资料总结-精品资料欢迎下载-名师精
10、心整理-第 6 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-6-页 共 29 页break;选项 2:删除记录;break;选项 3:修改记录;break;选项 4:返回主菜单;退出 return;增加记录函数的伪代码:对学生信息数组中的每条记录进行循环;如果当前记录是空记录;break;学生信息数组是否存满;printf(该组已经存满!);getch();return;为新记录创建一个保存空间;创建保存空间是否成功;printf(n内存不足!);getch();return;printf(输入学号:);接收输入的学号;printf(请输入第%d位学生姓名:,i+1);接收输
11、入的姓名;printf(请输入%d门成绩 n,MAXSUB);对各科目进行循环;do printf(科目%d成绩(语文为 1,数学为2,英语为3,计算机为4),j+1)名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-7-页 共 29 页接收输入的成绩;输入的成绩是否在范围内;printf(错误数据,请重新输入n);getch();while输入的成绩不在范围内;临时统计总成绩;保存当前学生的总成绩;算出当前学生的平均成绩;将当前学生的信息存入学生信息数组;删除记录函数的伪代码:printf(n请输入要删除的学生学号:);接收输
12、入的学号;对学生信息数组中每条学生记录进行循环;学生信息数组中是否存在与用户输入学号相同的学生;printf(n存在要删除的学生记录!);getch();break;是否找遍数组中的所有记录;printf(n不存在要删除的学生记录!);getch();return;输出要删除的学生信息printf(你确定要删除该记录吗?Y or N!n);接收删除指令;从当前删除记录位置到最后一个记录循环;将记录向上移动一行;数组 stuArrayj内存为空;printf(正在删除.n);printf(n.已经删除学号为%s的学生记录.n,s);else 返回编辑子菜单;名师资料总结-精品资料欢迎下载-名师精
13、心整理-第 8 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-8-页 共 29 页修改记录函数的伪代码:printf(n请输入要修改的学生学号:);接收输入的学号;对学生信息数组中的每条学生记录进行循环;学生信息数组中是否存在与输入的学号相同的学生;printf(n存在要修改的学生记录!);getch();break;是否找遍数组所有记录;printf(n不存在要修改的学生记录!);getch();返回菜单选择界面return;开始修改学生信息;printf(你确定要修改该记录吗?Y or Nn);scanf(%s,&c);接收确认指令;确认修改;修改状态标志为1 确认修改;e
14、lse /*不修改;返回编辑子菜单;while(m=1)/*确认修改;printf(要修改哪个科目的成绩(语文为1,数学为2,英语为 3,计算机为4)n)接收修改科目的编号;进入科目修改循环;printf(科目%d成绩,j);接收新的成绩;输入的成绩是否在范围中;printf(错误数据,请重新输入!n);while输入的成绩不在范围中;对当前学生每个科目进行循环;临时统计当前学生总成绩;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-9-页 共 29 页 计算当前学生的平均成绩;printf(还要继续修改此记录吗?Y or N
15、!n);接收确认指令;确认指令;修改状态标志为1 确认修改;else 跳出确认循环break;返回修改后的学生记录;数据查询函数的伪代码:接收选择 选择 1:学号查询;break;选择 2:姓名查询;break;选择 3:返回主菜单return;学号查询函数的伪代码:printf(n请输入要查询的学生的学号:);接收输入的学号;对学生信息数组中的每条学生记录进行循环;学生信息数组中是否存在与收入的学号相同的记录;printf(n存在要查询的学生记录!);getch();跳出循环,不再查找break;是否找遍数组中所有的记录;printf(n不存在要查询的学生记录!);getch();返回菜单选
16、择界面return;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-10-页 共 29 页输出要查询的学生信息开始do printf(返回请输入b or B!n);接收输入字符;若字符为 b 或B 返回菜单选择;else printf(输入错误!请重新输入 n);while字符不为 b 或B;姓名查询函数的伪代码:printf(n请输入要查询的学生姓名:);接收输入的姓名;对学生信息数组中的每条学生信息进行循环;学生信息数组中是否存在与输入的学生姓名相同的记录;printf(n存在要查询的学生记录!);getch();跳出循
17、环,不再查找;是否找遍数组中的所有记录;printf(n不存在要查询的学生记录!);getch();返回菜单选择界面;输出要查询的学生信息开始printf(返回请输入b or B!n);接收输入字符;若字符为 b 或B 返回菜单选择;else printf(输入错误!请重新输入 n);while字符不为 b 或B;数据统计函数的伪代码:对学生信息数组中的每条学生记录进行循环;把当前学生班别放到班级变量中;把当前学生学期放到学期变量中);把当前学生总分放到班级总分变量中;把当前学生平均分放到班级平均分变量中;把当前学生各科成绩分别计算总分;记录班级学生数;从学生信息数组中的第i+1 条记录循环到
18、最后一条记录;当学生记录存在 名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-11-页 共 29 页把当前 l 另一学生班别放到班级变量中;把当前 l 另一学生学期放到学期变量中);比较两个学生是否同一班级;将当前学生成绩加入本班总成绩;将当前学生平均成绩加入本班平均成绩;计算各科成绩的总分;统计班级学生数;不是同一班级;跳出循环,结束当前统计break;输出统计界面;如果同一班级下条记录没有,跳出循环;break;else 否则将当前记录作为新的班级的第一条记录开始新的比较;2函数和过程的调用关系图:名师资料总结-精品资料
19、欢迎下载-名师精心整理-第 12 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-12-页 共 29 页4 调试分析1每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过同学的帮助及上网搜索,发现利用“system(“cls”);”可以消去前一屏幕的内容;然而接下来又出现新的问题:有些函数会出现错误;经过多次调试和修改,才发现把“system(“cls”);”放在调用的函数之前以及适当的位臵可以解决此问题。2有些显示画面中,本该在同一行出现的内容会由于太长以至于在两行中出现;于是不停地改动该行的内容使之能够出现在同一行中。3在数据录入界面中,原来是先输入班级、学期及学号
20、后判断输入的内容是否为“no”,然后根据输入选择是返回还是继续输入数据,然而会导致查询及导出界面查询乱码;经调试,在录入数据之前加上名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-13-页 共 29 页“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)
21、;”可以先判断再输入。5 用户使用说明本程序在VC+软件中运行无误,主要运行系统为windows xp、windows Vista和 windows 7,但是在 windows 7 中运行有时会出现兼容性错误,故推荐在 windows Xp中使用。使用方法:双击启动程序student.exe,会出现欢迎界面,按回车键继续;出现主菜单界面,第一次使用时要进行初始化:输入1 回车可成功初始化;回到主菜单界面,输入 2 回车进行学生成绩输入,最多可输入70位学生的成绩,输入过程中输入 y 回车可返回主菜单界面;输入 3 回车可进行学生成绩的编辑,在出现的子菜单界面可以选择“1 增加数据、2 删除数据
22、、3 修改数据”中任一项进行编辑,输入 4 回车可返回主菜单;在主菜单界面输入4 可进行学生成绩的统计,统计结果包括每班各科成绩的总分、平均分;在主菜单界面输入5 可进行学生成绩的查询,在子菜单界面可以选择“1 按学号查询和 2 按姓名查询”中的任一项,输入 3 回车返回主菜单界面;在主菜单界面输入6 可以把已经保存的数据导入到系统中(前提是已经有保存的文件);在主菜单界面中输入7 可以进行数据的保存;在主菜单界面中输入0 会退出系统。6 测试结果(列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。)错误 1(如图 1):查询时出现乱码;名师资料总结-精品
23、资料欢迎下载-名师精心整理-第 14 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-14-页 共 29 页7 本次课程设计总结(个人收获和体会:在程序设计中碰到的问题及其解决方法;学习 C语言的体会,和老师分享你对这门课程的见解,提出你的建议和意见)附录带注释的源程序:#ifndef _STUDENT_H/*是否编译过STUDENT_H段*/#define _STUDENT_H/*声明 STUDENT_H条件编译段*/*头文件*/#include#include /*引入动态存储分配函数库*/#include /*引入输入输出函数库*/#include string.h/*引入
24、字符和字符串函数库*/*定义常数名*/#define MAXNUM 70/*定义最大学生记录数*/#define MAXSUB 4/*定义最大科目数*/*定义学生结构变量*/typedef struct stu/*定义学生结构体*/char term7;/*定义学期数组*/char banbie20;/*定义班别数组*/char no15;/*定义学号数组*/char name20;/*定义姓名数组*/int scoreMAXSUB;/*定义科目数组*/图 1 名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 29 页 -C 语言课程设计09 电信集成班陈颖宏第-15-页 共 2
25、9 页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*);/*删除学生记录*/student*edit_rec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年c程序设计大作业 2022 程序设计 作业
限制150内