学生成绩管理系统.docx
- 文档编号:29286268
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:49
- 大小:272.44KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(49页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
课程设计说明书
课程名称:
高级语言程序设计
设计题目:
学生成绩管理系统
院系:
计算机科学与信息工程学院
学生姓名:
***
学号:
********
专业班级:
11级信息技术方向
指导教师:
**
2012年6月
课程设计任务书
设计题目
学生成绩管理系统
学生姓名
***
所在院系
计算机科学与信息工程学院
专业、年级、班
11级信息技术班
设计要求:
完成一个学生成绩管理系统系统,具体要求如下:
1.系统主控平台
2.添加学生成绩信息
3.显示学生信息
4.查询学生信息
5.修改学生信息
6.删除学生信息
7.计算学生成绩
8.文件保存
9.退出
学生应完成的工作:
1学生应认真学习参考程序,理解每个文件、每个函数以及各个变量的作用和意义。
在此基础上进一步改进程序,最后正确地运行程序。
2对程序进行测试,设计详细的测试计划,然后根据测试计划设计测试用例,对程序进行测试。
测试时应注意对各种边缘情况进行测试。
3完成课程设计报告
参考文献:
1梁旭谷晓琳黄明C语言课程设计(第2版)电子工业出版社2011
2谭浩强C程序设计教程清华大学出版社2011
工作计划:
.1.小组审题,查阅资料,进行设计前的必要资料准备(3天)。
2.把程序完整运行出来(4天)。
3.增加改进程序(3天)。
4.写课程设计报告(3天)。
5.提交课程设计报告及答辩(1天)
任务下达日期:
2012年6月4日
任务完成日期:
2012年6月18日
指导教师(签名):
学生(签名):
何冉冉
目录
一设计要求4
二系统的功能模块4
三数据结构定义5
四函数及变量声明5
五Main函数10
六程序处理流程10
七预处理12
八系统实现截图12
九程序设计过程中遇到的问题及解决过程19
十课程设计心得及体会20
十一参考文献20
十二源程序21
学生成绩管理系统
一、设计要求
1.要求使用多文件方式实现设计.
2.要求在各个文件内实现结构化设计.
3.每个模块作为一个单独的C文件.
4.宏和数据结构等放在头文件中,并使用条件编译.
二、系统的功能模块
根据设计要求,学生成绩管理系统功能模块如图2-1所示。
图2-1
三、数据结构定义
定义一个结构体类型student,使用typedef语句定义一个新类型stu,变量中包括学生基本信息,如姓名、学号和性别,包括四门课程的成绩以及指向下一个学生的指针,共8个结构体成员。
typedefstructstudent
charname[MAX];/*姓名*/
charnum[MAX];/*学号*/
charsex[MAX];/*性别*/
intChinese;/*语文成绩*/
intmathematic;/*数学成绩*/
intEnglish;/*英语成绩*/
intcomputer;/*计算机成绩*/
structstudent*next;/*指向下一个学生的指针*/
}stu;
定义一个头节点,将其初始化为空。
Stu*head=NULL;/*student结构体链表的头节点*/
四、函数及变量声明
1.主要处理函数声明
函数声明部分包括主要处理函数的声明。
其中有输入信息、显示信息、查询信息、更新信息、删除信息、计算成绩、保存文件和退出等。
以下是这几个函数的声明。
voidinput_record();/*输入学生成绩的处理*/
voidshow_record();/*显示学生成绩处理*/
voidsearch_record();/*查询学生成绩的处理*/
voidupdate_record();/*更新学生成绩*/
voiddelete_record();/*删除学生成绩*/
voidcalculate();/*计算学生成绩*/
voidsave_to_file();/*保存到文件的处理*/
voidexit_system();/*退出系统*/
2.查询子函数声明
其中查询学生信息可以分别按照学号、姓名和性别进行查询,以下查询子菜单所对应的函数声明。
voidsearch_by_id();/*通过学号检索学生的处理*/
voidsearch_by_name();/*通过姓名检索学生的处理*/
voidsearch_by_sex();/*通过性别检索学生的处理*/
voidsearch_exit();/*退出子菜单,返回上级菜单*/
3.计算子函数声明
其中计算学生成绩要分别计算总分和平均分,以下计算子菜单所对应的函数声明。
voidcalc_total();/*计算总成绩的处理*/
voidcalc_average();/*计算平均成绩的处理*/
voidcalc_exit();/*退出子菜单,返回上级菜单*/
以下三种函数是辅助函数的声明。
4.辅助函数声明
为完成系统功能,特编写了部分完成辅助功能的函数,包括输入学生信息的函数、查找最后一个学生记录函数的清空所有记录的函数,具体声明如下。
voidcreate_stu_by_input(stu*pNewStu);/*通过输入为student赋值*/
stu*get_last_student(stu*p);/*找到最后一个学生的记录*/
voidclear_record();/*清空所有记录*/
5.显示控制函数声明
为了让系统显示的更加规范,可操作性强,特编写了一些显示控制的函数,下面是这些的显示控制函数的声明。
voidprint_menu_main();/*显示主菜单*/
voidprint_menu_title(char*title);/*显示菜单的标题*/
voidprint_table_head();/*显示学生记录的表格的头部*/
voidprint_table_row(stu*p);/*显示一条学生记录*/
voidprint_table_buttom();/*显示学生记录的表格的底部*/
voidprint_table_head_total();/*显示总分表格的头部*/
voidprint_table_row_total(stu*p);/*显示一个学生的总分*/
voidprint_table_buttom_total();/*显示总分表格的底部*/
voidprint_table_head_avg();/*显示平均分表格的头部*/
voidprint_table_row_avg(stu*p);/*显示一个学生的平均分*/
voidprint_table_buttom_avg();/*显示平均分表格的底部*/
6.全局变量声明
下面是系统中用到的全局变量。
(1)字符数组menu_main中存储的是主菜单要显示的字符。
charmenu_main[]=
“|\n”
“|1输入学生成绩\n”
“|2显示学生成绩\n”
“|3查询学生成绩\n”
“|4更新学生成绩\n”
“|5删除学生成绩\n”
“|6计算学生成绩\n”
“|7保存文件\n”
“|8退出程序\n”
“|\n”;
(2)函数指针数组menu_main_func存储的是主菜单项中8个功能函数的地址,分别对应1-8菜单项。
例如,当用户选择1的时候,调用数组的第0个元素,即调用input_record()函数,依次类推。
void(*menu_main_func[])()=
{
input_record,
show_record,
search_record,
update_record,
delete_record,
calculate,
save_to_file,
exit_system
};
(3)字符数组menu_search中存储的是查询子菜单中要显示的字符
charmenu_search[]=
"|\n"
"|1按照学号查询\n"
"|2按照姓名查询\n"
"|3按照性别查询\n"
"|4返回上级菜单\n"
"|\n";
(4)函数指针数组menu_search_func存储的是查询子菜单所对应的4个功能函数的地址,分别对应1-4菜单项,当用户选择1的时候,调用数组的第0个元素,即调用函数search_by_id(),依次类推。
void(*menu_search_func[])()=
{
search_by_id,
search_by_name,
search_by_sex,
search_exit
};
(5)字符数组menu_main中存储的是子菜单要显示的字符。
charmenu_calc[]=
"|\n"
"|1计算总成绩\n"
"|2计算平均分\n"
"|3返回上级菜单\n"
"|\n";
(6)函数指针数组menu_calc_func[]存储的是计算子菜单项所对应的3个功能函数的地址,分别对应1-3菜单项。
当用户选择1的时候,调用数组的第0个元素,即调用函数calc_total(),依次类推。
void(*menu_calc_func[])()=
{
calc_total,
calc_average,
calc_exit
};
五.Main函数
主函数调用函数print_menu_main(),显示主菜单,等待用户输入。
voidmain()
{
voidprint_menu_main();
print_menu_main();//显示主菜单等待用户输入
}
六.程序处理流程
系统的执行应从系统菜单的选择开始,允许用户输入1-8之间的数值来选择要进行的操作,输入其他字符都是无效的,系统会给出出错的提示信息。
若用户输入1,则调用input_record()函数,进行输入学生信息操作;若输入2,则调用show_record()函数,进行显示学生信息操作;若输入3,则调用search_record函数,进行查找学生信息操作。
此时进入查询子菜单,查询子菜单允许用户输入1-4之间的数值来选择查询方式,其中,1是按学号查询,2是按姓名查询,3是按性别查询,4是返回主菜单。
若输入4,则调用update_record()函数,进行更新学生信息操作。
若输入5,则调用delete_record()函数,进行删除学生信息操作;若输入6,则调用calculate()函数,计算学生成绩操作,此时进入计算子菜单,计算子菜单允许用户输入1-3之间的数值来选择查询的方式,其中,1是计算总成绩,2是计算平均分,3是返回主菜单;如意输入7,则调用save_to_file()函数,进行保存文件操作;若输入8,则调用exit_system()函数,释放单链表中数据,退出系统。
系统的处理流程如图2-2所示。
图2-2程序流程图
七、预处理
#include
#include
#include
#defineTITLE"学生成绩管理系统"//标题文字
#defineMAX10
#defineMENU_MAIN_COUNT8//主菜单的选项个数
#defineMENU_SEARCH_COUNT4//查询子菜单的选项个数
#defineMENU_CALC_COUNT3//计算子菜单的选项个数
八.系统实现截图
1.主界面
系统运行后,首先进入主菜单界面,允许用户输入1-8之间的不同的数字,来实现不同的操作,主菜单界面如图4-1所示.
图4-1学生成绩管理主菜单界面
2.输入学生信息
进入主菜单界面后,输入数字1进入输入学生信息界面,用户可以根据提示信息输入学生的基本信息和四门成绩,输入完一条信息后系统提示用户是否继续输入下一条学生信息,如果用户输入“Y”或“y”,则继续输入下一条学生信息,否则返回主界面,输入信息界面如图4-2所示。
图4-2输入学生信息界面
3.显示学生信息
在主菜单界面中如果输入数字2,则进入显示学生信息界面,系统会将刚才输入的学生信息按照预定格式显示出来,如果没有学生信息,系统将给出提示。
显示信息界面如图4-3所示
图4-3显示学生信息界面
4.查询学生信息
在主菜单界面中,如果输入数字3,则进入查询学生信息子菜单,如图4-4所示。
允许输入数字1-4,分别按照三种不同方式对学生信息进行查询和返回上级菜单操作,例如,输入1按学号查询,系统提示输入学号,如果输入学号存在,系统显示该学生信息,否则给出没有找到的提示,图4-5是显示查询结果界面。
图4-4查询学生信息子菜单界面
图4-5显示查询结果界面
5.更新学生信息
在主菜单界面中如果输入数字4,则进入更新学生信息界面,根据系统提示输入要更新的学生的学号,如果该学号不存在,系统将给出提示信息,如果该学号存在,用户输入的新信息将覆盖原数据。
更新学生信息过程如图4-6所示。
图4-6更新学生信息界面
6.删除学生信息
在主菜单界面中如果输入数字5,则进入删除学生信息界面,根据系统提示输入要删除的学生的学号,如果该学号不存在,系统将给出提示信息,如果该学号存在,系统直接将该学生信息删除,并给出删除成功的提示信息。
删除学生信息界面如图4-7所示。
图4-7删除学生信息界面
7.计算学生成绩
在主菜单界面中如果输入数字6,则进入计算学生成绩子菜单,如图4-8所示,允许输入数字1-3,分别计算学生的总分、平均分和返回上级菜单操作。
例如输入1,计算总分,系统按照预定格式将学生信息、四门成绩和总分打印出来,总分放在最后,界面如图4-9所示。
图4-8计算学生成绩子菜单
图4-9计算总分界面
8.保存文件
在主菜单界面中如果输入数字7,则进入保存界面,系统提示输入文件名,保存完成后,系统会给出提示,如图4-10所示。
图4-10保存文件界面
9.退出
在主菜单界面中如果输入数字8,退出系统。
九、程序设计过程中遇到的问题及解决过程
1.对程序整体理解,但在设计过程中,细节问题处理不当,造成程序不能运行或者运行错误,并且,对某一部分的程序不能独立设计出来。
对此问题的解决是参考了《c程序设计课程设计》上的参考程序,完成了设计,但是不是一味的照搬,对参考程序进行了修改和添加。
增加了按成绩区间查询的查询方式,增加了按总成绩排序的排序方式。
2.在组建工程的时候,将各个程序分给小组成员,两个人设计一个模块,但是出现了连接错误,各个模块之间也出现了输入上的错误,致使程序不能运行。
对于各个模块逐一检查,添加修改,最终使各个模块错误消除,同时连接错误也自行解决。
3.在刚开始程序设计的时候,不了解什么是组建工程,什么是模块,对于程序设计本身也有不理解的地方,不知道该从何下手。
解决方法:
先看《c程序设计课程设计》,了解怎样组建工程,理解每个模块的作用,弄清楚参考程序上的逻辑顺序以及如何设计等问题,然后再进行课程设计。
十、课程设计心得及体会
对于第一次做课程设计的我来说,这次的课程设计是一次既让人痛苦又让人开心的事情。
开始的时候根本不清楚课程设计要设计什么,不知道到底怎样设计,因为平时所写的c程序都是一些简单而且基本的C程序,根本不是解决实际情况,符合客户要求的工程程序,所以觉得无从下手,觉得很困难,甚至没有一个思路,而且对于组建工程,构建模块等工作无法理解。
这些情况都使自己陷入了苦恼的深渊。
后来,听从辅导老师的意见,从《C程序设计课程设计》开始,一点点了解怎样组建工程,怎么样构建模块,对于每个模块应该怎么样进行设计,逻辑思维是什么,然后开始构建。
在设计过程中一直都有错误存在,困难重重。
遇到困难就开始用大量的时间进行修改以及整理,理出思路。
最终将工程调试成功,添加模块成功,而这些成功的瞬间是最快乐最开心的时刻。
而且通过这次课程设计我学会了好多东西,觉得自己设计的东西更加接近实际的程序要求。
知道团队合作的重要性,知道怎样使团队一起合作构建程序。
总的来说,我获益匪浅。
十一、参考文献
[1]梁旭等.《C程序设计课程设计(第2版)》[M]电子工业出版社,2011
[2]谭浩强.C程序设计(第四版),[M]清华大学出版社,2011
[3]张昕.C语言程序设计:
Visual6.0环境。
[M]北京:
中国水利水电出版社,2005
十二、源程序
//预处理
#include
#include
#include
#defineTITLE"学生成绩管理系统"//标题文字
#defineMAX10
#defineMENU_MAIN_COUNT8//主菜单的选项个数
#defineMENU_SEARCH_COUNT4//查询子菜单的选项个数
#defineMENU_CALC_COUNT3//计算子菜单的选项个数
//数据结构定义
typedefstructstudent{
charname[MAX];//姓名
charnum[MAX];//学号
charsex[MAX];//性别
intchinese;//语文成绩
intmathematic;//数学成绩
intenglish;//英语成绩
intcomputer;//计算机成绩
structstudent*next;//指向下一个学生的指针
}stu;
//定义一个头节点,将其初始化为空
stu*head=NULL;//*student结构体链表的头节点
//函数及变量声明
//1.主要处理函数声明
voidinput_record();//输入学生成绩的处理
voidshow_record();//显示学生成绩的处理
voidsearch_record();//查询学生成绩的处理
voidupdate_record();//更新学生成绩的处理
voiddelete_record();//删除学生成绩的处理
voidcalculate();//计算学生成绩的处理
voidsave_to_file();//保存到文件的处理
voidexit_system();//退出系统
//2.查询子函数声明
voidsearch_by_id();//通过学号检索学生的处理
voidsearch_by_name();//通过姓名检索学生的处理
voidsearch_by_sex();//通过性别检索学生的处理
voidsearch_exit();//退出子菜单,返回上级菜单
//3.计算子函数声明
voidcalc_total();//计算总成绩的处理
voidcalc_average();//计算平均成绩的处理
voidcalc_exit();//退出子菜单,返回上级菜单
//4.辅助函数声明
voidcreate_stu_by_input(stu*pNewStu);//通过输入为Student赋值
stu*get_last_student(stu*p);
voidclear_record();
//5.显示控制函数声明
voidprint_menu_main();//显示主菜单
voidprint_menu_title(char*title);//显示菜单的标题
voidprint_table_head();//显示学生记录的表格的头部
voidprint_table_table_row(stu*p);//显示一条学生记录
voidprint_table_buttom();//显示学生记录的表格的底部
voidprint_table_head_total();//显示总分表格的头部
voidprint_table_row_total(stu*p);//显示一个学生的总分
voidprint_table_buttom_total();//显示总分表格的底部
voidprint_table_head_avg();//显示平均分表格的头部
voidprint_table_row_avg(stu*p);//显示一个学生的平均分
voidprint_table_buttom_avg();//显示平均分表格的底部
//全局变量声明
//
(1)menu_main中存储的主菜单显示字符
charmenu_main[]=
"|\n"
"|1输入学生成绩\n"
"|2显示学生成绩\n"
"|3查询学生成绩\n"
"|4更新学生成绩\n"
"|5删除学生成绩\n"
"|6计算学生成绩\n"
"|7保存文件\n"
"|8退出系统\n"
"|\n";
//
(2)menu_main_func存储的主菜单中8个功能函数的地址
void(*menu_main_func[])()=
{
input_record,
show_record,
search_record,
update_record,
delete_record,
calculate,
save_to_file,
exit_system
};
//(3)menu_search中存储的查询子菜单中要显示的字符
charmenu_search[]=
"|\n"
"|1按照学号查询\n"
"|2按照姓名查询\n"
"|3按照性别查询\n"
"|4返回上级菜单\n"
"|\n";
//(4)menu_search_func存储的查询子菜单项所对应的4个功能函数的地址
void(*menu_search_func[])()=
{
search_by_id,
search_by_name,
search_by_sex,
search_exit
};
//(5)menu_main中存储的是子菜单要显示的字符
charmenu_calc[]=
"|\n"
"|1计算总成绩\n"
"|2计算平均分\n"
"|3返回上级菜单\n"
"|\n";
//(6)menu_calc_func[]存储的是计算子菜单单项的对应的3个功能函数的地址
void(*menu_calc_func[])()=
{
calc_total,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统