学生成绩管理系统.docx
- 文档编号:11222497
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:40
- 大小:259.22KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(40页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统
综合程序课程设计说明书
课程设计名称:
综合程序课程设计
课程设计题目:
学生成绩管理系统
学院名称:
信息工程学院
专业:
电子信息工程班级:
学号:
姓名:
评分:
教师:
2017年3月3日
由每位学生填写、由任教教师保存待查
摘要
该学生成绩管理系统能够对学生信息进行保存、查询、修改、排序等基本功能,对学生成绩进行了有效且便利得管理.本次就是利用计算机中得VC6、0绿色版软件来完成,利用了不同功能模块程序实现所需功能.成绩管理系统让老师与同学甚至家长们更加直观方便得了解到学生们得成绩,给生活带来不少便利,也增加了自身得实践动手能力。
关键词:
增加删除、修改排序、查询保存、管理系统、成绩查询。
一、设计要求
1、基本要求
能够准确实现学生成绩管理系统得基本维护、统计、排序已经查询得功能。
并且学生信息能以文件得形式进行保存、读取与管理。
2.提高要求
尽量增加新得功能模块,使得系统功能更加多样化,在程序中注意格式,排版整齐,记得标上注释,利于理解。
二、实验内容
学生成绩管理系统
现有学生成绩信息,内容如下
姓名学号语文数学英语政治
张明明0167788290
李成友0278918880
张辉灿0368825687
王露0456457767
陈东明0567384770
…、、、、、、、…
请用C编写一系统,实现学生信息管理,软件得入口界面应包括如下几个方面:
(一)功能要求:
(1)信息维护:
要求:
学生信息数据要以文件得形式保存,能实现学生信息数据得维护。
此模块包括子模块有:
增加学生信息、删除学生信息、修改学生信息
(2)信息查询:
要求:
查询时可实现按姓名查询、按学号查询
(3)成绩统计:
要求:
A输入任意得一个课程名(如数学)与一个分数段(如60—-70),统计出在此分数段得学生情况。
(4)排序:
能对用户指定得任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格得形式显示排序后得输出结果)(使用多种方法排序者,加分)
(二)其它要求:
(1)使用C或C++语言,源程序要有适当得注释,使程序容易阅读
(2)采用文本菜单界面
(3)学生可增加新功能模块
三、设计得原理
用数组或链表数据结构完成一个学生成绩管理系统,此系统得具体功能要求如下:
(1)信息维护功能
1、增加学生信息:
输入学生学号、姓名、性别、语文、数学、英语、政治四门课成绩,可插入一个或多个学生信息到当前编辑得班级数据中。
2、删除学生信息:
可按学号或者姓名删除一个或多个学生信息。
3、修改学生信息:
可按学号或者姓名修改学生语文、数学、英语、政治四门课任一门及多门科目成绩。
4、学生信息每一班存为一个数据文件,数据文件可在程序中编辑与重新保存。
5、用户输入学生信息可随时保存数据文件。
(2)信息查询功能
1、按某一学科分数段查询
2、按学号查询学生信息;
3、按姓名查询学生信息;
(3)排序功能
1、按学号输出一个班学生信息:
学号、姓名、语文、数学、英语、政治成绩与总成绩到屏幕与文件。
2、成绩排名按总成绩或各科成绩排序输出学生信息
四、系统组成
系统以如下几个模块组成:
(一)学生信息增加及修改、删除模块
增加学生得信息:
学号、姓名、语文、数学、英语、政治四门成绩。
当然也可以进行修改与删除。
(二)文件保存功能模块
可以将学生信息存为一个数据文件。
用户输入得学生信息可随时保存数据文件。
(三)查询功能模块
在此模块里,用户可实现以下操作:
1、按某科目分数段查询学生信息;
2、按学号查询学生信息;
3、按姓名查询学生信息;
(四)文件读取功能模块
在此模块中,用户可以装入文件中所有学生得信息。
(程序中为data、txt文件)
(5)排序模块
在此模块中,可以通过学号或者各类科目成绩或总分进行排序。
程序开头与结尾需要定义两个类与一主函数,使得程序具备完整性。
五、概要设计
系统功能可分为三大类:
信息维护、信息查询已经信息排序。
如下三个系统层次结构图如图所示:
信息维护
信息增加
修改信息
删除信息
文件读取
文件保存
1、信息维护
图1、1信息维护功能概要图
2、信息查询
图1、2信息维护功能概要图
3、信息排序:
图1、3信息排序功能概要图
了解大概功能,可以根据这些来确定系统具体分支,可用1~7分别代表添加、删除、修改、查询、排序、保存、读取。
4、大概程序程序流程图
6、详细设计
1、准备工作:
首先,导入std命名空间中所有名称,设max为100
再准备头文件:
#include〈iostream〉,#include 然后,定义两个类student与cla,分别定义了程序中主要使用得成员;建立构造函数与解析函数及声明各类函数. 2、构造sadd()添加函数 先定义所需得q,name,num,x,y,z,m.用DOS下得清屏命令,再输出给用户得提示语句,用“q=newstudent(name1,num1,x1,y1,z1,m1);”建立新得student。 利用链表判断输入得学号就是否与头结点或后面得结点数据相同,若不同则用“stu=q;”增加学生信息。 3、构造sremove()删除函数 准备工作如上 (2)一样,用while()函数找出要删除得学生信息对应结点,若找到则删除,在删除之前要确定就是否删除: “cout〈<"确定删除吗? [Y/N]”<〈endl;”这里用if语句判断用户回答就是“Y”还就是“N"。 删除时也要分就是删除第一个结点还就是后续结点。 补缺后用delete删除p1。 4、构造samend()修改函数 大体与3一样,修改前得准备,确定要修改得结点,最后用cin直接修改。 5、构造ssearch()查询函数 查询函数有多个分支,这里都用选择语句case来对不同得情况进行编程.在这里只需逻辑清晰,语法没有错误就能完成,但也要注意括号得搭配与break得使用.在用for语句时要注意循环次数不能过大,应对应学生得人数. 6、构造staxis()排序函数 用case语句使输入得1~7数字分别对应函数pxh()(学号排序)、psx()(数学)、pyw()(语文)、pyy()(英语)、pAA()(总分)、返回、pzz()(政治).这些排序函数定义内容几乎一样。 首先用for语句判断n(信息条数)为多少,如果头结点大于第二个得头结点则交换,再判断中间得结点大小则交换,最后依次重复。 7、构造ssave()函数sload()函数(保存与读取) 在这里注意链表要求即可. 8、定义主函数 产生操作界面也用case语句使1~8代表不同功能。 (详见附录) 七、调试结果与分析 1、调试方法与技巧 代码完成后,保存代码并尝试运行程序,启动调试。 往往会出现以下几种常见错误。 1case语句中内容重复,没有用一函数替代,使程序过为繁琐. 2括号没有匹配; 3循环体得逻辑错误; 4case语句中缺少了break,没有跳出循环。 5错误使用了for语句,造成已经出现结果后(链表为空)依旧继续运行,造成问题,无法继续使用该系统. 2、调试结果 1、学生信息得添加、删除、修改. 图2、1、1删除 图2、1、2添加学生信息 图2、1、3修改学生信息 图2、1、4此时文件得内容 2、按姓名查询。 图2、2、1 3、按学号查询。 图2、3、1 4、按成绩查询。 图2、4、1 5、成绩排序。 图2、5、1学号排序 图2、5、2单科(数学)成绩排序 图2、5、3总分排序 6、保存: 图2、6、1 7、读取: 图2、7、1 8、退出: 图2、8、1 结论 虽然过程有些磕磕绊绊,但最后成绩管理系统终于成功了。 该系统能够为大家带来极大得便利,便于以后成绩得有效管理。 以后大家像成绩排序,找出某个科目及格得学生也容易很多.该系统虽具有基本得功能,但还就是存在一些不足。 例如增加删除学生信息时不能在界面上自动呈现增加或者删除得结果,需要操作者手动打开文件或者通过排序来间接查瞧结果。 这次课设让大家学到了很多书本外得知识,锻炼了实践操作得能力.不仅熟悉了VC6软件,也让大家知道,纸上谈兵远远没有自己动手体验来得深刻。 参考文献 1、黄维通,贾续涵、《VisualC++面对对象与可视化程序设计(第三版)》、清华大学出版社、2011年06月版 2、谭浩强、《C语言程序设计(第四版)》、清华大学出版社、2010年06月版 附录 #include #include #include〈string〉 #include〈stdlib、h> #include //用于程序得暂停属于c得运用方法 usingnamespacestd;//导入std命名空间中所有名称。 #definemax100;//设max为100 classstudent//定义类student定义了程序中主要使用得成员 { public: student*next;//定义next指针 public: stringname;//姓名 longnum;//学号 intx,y,z,m;intlow,high;//数学,语文,英语,政治 intAA;//总分 voidplay() { cout〈 "〈 ”<〈y<〈”,英语: "< "< "〈 }; student(stringsname,longsnum,intsx,intsy,intsz,intsm) { name=sname;num=snum;x=sx;y=sy;z=sz;m=sm; } }; classcla//定义类2包括建立构造函数与解析函数 { public: cla()//构造函数 { stu=0; sload(); } ~cla()//析构函数 { student*p; p=stu; while(p) { p=p-〉next; deletestu; stu=p; } stu=0; }//这一部分就是对函数得声明 voidsadd();//添加 voidsremove();//删除 voidsamend();//修改 voidssearch();//查询 voidstaxis();//排序 voidssave();//保存 voidsload();//读取 //排序函数得声明 voidpxh(); voidpsx(); voidpyw(); voidpyy(); voidpzz(); voidpAA();//共有5个排序函数 private: student*stu;//头接点 }; voidcla: : sadd()//此处构造了添加学生函数 { student*q; stringname1; longnum1; intx1,y1,z1,m1; system("cls”);//调用DOS下得得清屏命令“cls” cout〈〈"\n**增加得学生**\n"〈 cout〈<"请输入学生得(中间用空格间隔)"< cout〈〈"姓名学号数学成绩语文成绩英语政治成绩: "〈 q=newstudent(name1,num1,x1,y1,z1,m1); q—>next=0; q—〉AA=x1+y1+z1+m1; if(stu) { student*t; t=stu; if(t—〉num==num1) { cout<〈"学号已存在,请重新输入”<〈endl; return; } while(t—>next) { if(t->num==num1) { cout〈〈”学号已存在,请重新输入"〈 return; } t=t->next; } t—>next=q; } else { stu=q; } cout<〈”输入完毕”〈〈endl; } voidcla: : sremove()//删除 { system("cls"); intnum1; cout〈〈”\n**删除学生信息**\n"; cout<<”请输入想要删除学生得学号: "; cin〉〉num1;//查找要删除得结点 student*p1,*p2; p1=stu; while(p1) { if(p1—>num==num1) break; else { p2=p1; p1=p1—>next; } }//删除结点 if(p1! =NULL)//若找到结点,则删除 { p1-〉play(); cout<<”确定删除吗? [Y/N]”< charc; cin〉〉c; if(toupper(c)! =’Y’) return; if(p1==stu)//若要删除得结点就是第一个结点 { stu=p1—〉next;//将第二个结点往上推,成为头结点。 deletep1; } else//若要删除得结点就是后续结点 { p2—>next=p1->next;//补缺 deletep1; } cout<〈"找到学号为"<〈num1<〈"得学生,并删除\n”; } else//未找到结点 cout<<"未找到想要删除得学生! \n"; } voidcla: : samend()//修改 { system(”cls"); longnum1; cout〈<"\n**修改学生信息**\n”; cout<〈"输入要修改学生得学号”; cin〉〉num1;//查找要修改得结点 student*p1,*p2;p1=stu; while(p1) { if(p1—>num==num1) break; else { p2=p1;p1=p1->next; } } if(p1! =NULL) { cout<<”学号就是”〈〈num1〈<”得学生得信息”< cout<<"姓名”〈〈p1-〉name〈<”数学”〈 cout〈〈"请输入修改后得信息: 姓名数学成绩语文成绩英语政治成绩"〈 cin〉>p1—>name〉>p1—>x>〉p1->y>〉p1->z〉〉p1—>m; p1-〉AA=p1-〉x+p1—〉y+p1—〉z+p1—〉m;//求总分 cout<<"修改成功"〈 else//未找到接点 cout<<”未找到! ”< } voidcla: : ssearch()//查询 { system("cls"); cout〈〈”\n**查询学生信息**\n”< cout〈〈"请输入查询方式: "〈 cout<<”1、按学号查询”〈 cout〈<”2、按姓名查询”< cout〈<"0、按科目分数段查询”< cout<<”3、返回"<〈endl; charc; cin>〉c; switch(c)//通过switch语句来选择排序函数 { case’0’: { intx,y,z,m; longnum; charw; inthigh,low; cout<〈"输入要查找成绩科目代表得数字(数语英政分别为a~d): ”<〈w〈〈endl; cin〉>w;//查找要查询得结点 cout<〈"最低分为: "〈 cin〉〉low; cout<〈"最高分为: "〈 cin>>high; student*p1,*p2; p1=stu; switch(w) { case'a': cout<<”数学成绩在"< ”<〈endl; while(p1! =NULL) { if(p1—>x>=low&&p1->x〈=high) { cout〈〈"姓名: "〈〈p1—〉name〈<”数学: "<〈p1—>x〈〈”语文: "〈〈p1-〉y〈<”英语: ”〈〈p1—〉z〈〈"政治: ”< } p2=p1; p1=p1-〉next; } cout〈<"查询完毕\n”; break; case’b': cout<〈”语文成绩在"< ”< while(p1! =NULL) { if(p1—〉y>=low&&p1—〉y<=high) { cout〈〈”姓名: ”〈 "〈〈p1—>x〈〈”语文: "〈〈p1—〉y<<"英语: ”〈 ”〈 } p2=p1; p1=p1—〉next; } cout<<"查询完毕\n”; break; case’c’: cout〈<"英语成绩在”〈〈low<〈”-”〈 ”〈〈endl; while(p1! =NULL) { if(p1-〉z>=low&&p1—〉z<=high) { cout〈<"姓名: ”< "<〈p1—〉x〈<"语文: ”< ”<〈p1—〉z〈<"政治: "<〈p1—>m<〈endl; } p2=p1; p1=p1—>next; } cout〈<”查询完毕\n"; break; case'd': cout<<”政治成绩在”〈 ”< while(p1! =NULL) { if(p1—>m〉=low&&p1—>m<=high) { cout<<”姓名: "< ”〈〈p1—>x〈<”语文: "< ”〈〈p1—〉z<<"政治: "〈〈p1—>m〈〈endl; } p2=p1; p1=p1—〉next; } cout<<"查询完毕\n”; break; } break; } case’1': { longnum1; cout<<”要查询得学号"< cin>>num1;//查找要查询得结点 student*p1,*p2; p1=stu; while(p1) { if(p1—>num==num1) break; else { p2=p1;p1=p1-〉next; } } if(p1! =NULL) { cout<〈”学号就是”〈 cout<〈"姓名: ”< "〈〈p1—>x〈<”语文: "< "<〈p1—〉z<〈"政治: "〈 cout〈〈”查询完毕、、、”; } else//未找到接点 cout〈<"未找到! \n”; //break; break; } case’2’: { stringname1; cout<〈"要查询得学生姓名”〈 cin〉〉name1;//查找要查询得结点 student*p1,*p2; p1=stu; while(p1) { if(p1->name==name1) break; else { p2=p1; p1=p1->next; } } if(p1! =NULL) { cout〈〈name1<<”得学生得信息"〈 cout〈<”学号: "〈 "〈 "< ”<〈p1->z〈<”政治”<〈p1-〉m〈〈endl; cout<<"查询完毕、、、"; } else//未找到接点 cout<<"未找到! \n"; break; } case'3': return; } } voidcla: : pxh()//按学号排序函数得定义 { student*p1,*p2; intn; p1=stu;n=1; while(p1—>next)//p1->next! =0 { n++;p1=p1—>next; } cout<〈”共有"〈〈n〈<”条信息、、、"〈〈endl; inti; p1=stu; for(i=1;i { p1=stu; if(p1—>num>p1—>next—〉num)//如果头结点大于第二个得 { p2=p1—>next; p1-〉next=p1—〉next—>next; p2—>next=p1;//头结点交换 stu=p2;//下一个学生 } p1=stu;//交换 while(p1—〉next->next)//中间得交换 { p2=p1;p1=p1—>next; if(p1—>num〉p1-〉next->num) { p2—〉next=p1->next; p1->next=p1—〉next->next; p2->next—〉next=p1; p1=p2->next;//交换 } } } p1=stu; do{ p1—>play(); p1=p1—〉next; } while(p1); } voidcla: : psx()//按数学成绩排序函数得定义 { student*p1,*p2;intn; p1=stu; n=1; while(p1—>next) { n++;p1=p1—〉next; } cout〈〈”共有”<〈n〈<"条
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统