学生成绩管理系统程序设计Word格式文档下载.docx
《学生成绩管理系统程序设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统程序设计Word格式文档下载.docx(12页珍藏版)》请在冰点文库上搜索。
1.2为何选用C++
相比较于DOS系统、C语言系统、JAVA系统等,C++具有其独特的优点让我们在设计中选择它。
它是一门独立的语言;
它并不依赖C语言,我们可以完全不学C语言,而直接学习C++。
根据《C++编程思想》(<
ThinkinginC++>
)一书所评述的,C++与C的效率往往相差在正负5%之间。
所以有人认为在大多数场合C++完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。
支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
对于初学者来说,用起编程很上手。
二.需求分析
2.1管理功能
系统主要实现对学生的管理功能。
主要有管理员登陆、学生登录、管理员信息管理、学生信息管理等。
2.2系统总体设计图
三.概念设计
3.1基本信息
学生基本信息:
学号、学生姓名、性别、出生日期、专业
课程信息:
课程号、所属专业、课程名、类型、开课学期、课时数、学分
学生课程成绩信息:
学号、课程号、成绩、学分
管理员信息:
管理员账号、管理员姓名、密码
四.程序设计
使用VisualC++平台设计学生成绩管理系统的主框架。
学生成绩管理系统能有效地管理每个学生的各科成绩,还可以管理学生的基本信息以及课程信息。
该系统能简便地实行相关记录的查询,添加,修改,删除操作。
改程序设计主要记录编写学生成绩表中记录的查询,添加,修改,删除功能,以及实现这些功能的相关代码。
学生基本信息表,课程信息表的功能和功能实现代码与此表类似。
4.1问题定义
该程序主要是为了实现对一个班某一门课的成绩进行管理,为实现该功能先定义了一个系统菜单:
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)插入一条记录
(5)按姓名查找,删除一条记录
(6)查找并显示一条记录
(7)输出统计信息(新增)
(8)从正文中添加数据到结构体数组中
(9)将所有数据写入文件中
(0)退出程序
4.2功能实现:
菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:
功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。
功能2是显示所有的记录,通过循环输出,格式也比较重要。
功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。
功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。
功能6的算法在5中就已经体现了,输入姓名,一一比较。
功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。
功能8和9是对文件的操作,提前准备好数据。
4.3数据结构
1、typedefstructStudent定义一个结构体数组、并使用类型定义为Student新类型。
Studentstu[80];
Stu是一个包含有80个元素的一维结构体数组;
Stu[2]表示第三个学生的相关信息,stu[2].name表示第三个人的姓名,类似stu[2].score表示第三个人的分数。
2、intmenu_select()定义一个菜单函数,通过向形参里输入整数来进行下
一步操作。
如intmenu_select
(1)表示想数组中输入学生信息,接下来会进入到下一界面操作。
3、intInput(Studentstud[],intn)表示定义一个输入学生信息的函数,通过向形参里输入一个数组名来完成下一步操作。
如scanf(“%s”,stu[n+i].name)表示想数组中输入学生姓名。
4、voidDisplay(Studentstud[],intn)表示定义一个输出学生信息函数,通过向形参里输入一个数组名来完成下一步操作。
如scanf(“%s”,stu[n+i].name)表示想数组中输出学生姓名。
5、voidSort_by_num(Studentstud[],intn)表示定义一个按学号排序的函数,通过向形参里输入一个数组名来完成下一步操作,即是排序。
如scanf(“%s”,stu[n+i].name)表示对输入进去的N+I个学生进行排序。
6、intInsert_a_record(Studentstud[],intn)表示定义一个插入函数,通过向形参中调入数组来实现功能。
7、intDelete_a_record(Studentstud[],intn)表示定义一个按姓名查找、删除函数来实现功能。
8、voidQuery_a_record(Studentstud[],intn)表示定义一个查找函数来显示查找功能。
9、voidStatistic(Studentstud[],intn)表示定义一个新增功能函数,输出统计信息。
10、intAddfromText(Studentstud[],intn)表示定义一个从文件中读入数据函数。
11、voidWritetoText(Studentstud[],intn)表示定义一个将数据写入文件的函数。
4.4程序编写
voidmain()/*主函数*/
{
intn=0;
for(;
;
)通过FOR循环来完成以下程序
switch(menu_select())/*选择判断*/进入菜单选项后选择功能选项
case1:
如要输入学生信息键入1号键
printf("
\t\t\tInputRecords\n"
);
/*输入若干条记录*/
n=Input(stu,n);
break;
case2:
如要显示所有信息键入2号键
\t\t\tDisplayAllRecords\n"
/*显示所有记录*/
Display(stu,n);
case3:
如要将输入的信息按学号排序键入3号键
\t\t\tSort\n"
Sort_by_num(stu,n);
/*按学号排序*/然后通过调用Sort_by_num(stu,n)函数完成排序
\t\t\tSortSuceessed!
\n"
\t\t\t"
system("
pause"
case4:
如要插入一条信息键入4号键
\t\t\tInsertaRecord\n"
n=Insert_a_record(stu,n);
/*插入一条记录*/然后通过调用
Insert_a_record(stu,n)完成插入
case5:
如要按姓名删除一个记录键入5号键
\t\t\tDeleteaRecord\n"
n=Delete_a_record(stu,n);
/*按姓名查找,删除一条记录*/然后通过调用函数n=Delete_a_record(stu,n)实现删除记录
case6:
如要显示所有信息键入6号键
\t\t\tQuery\n"
Query_a_record(stu,n);
/*查找并显示一个记录*/然后通过调用函数Query_a_record(stu,n)实现功能
case7:
如要输出统计信息键入7号键
\t\t\tStatistic\n"
Statistic(stu,n);
/*新增功能,输出统计信息*/然后通过调用函数Statistic(stu,n)实现统计功能
case8:
如要对数据暂时保存键入8号键
\t\t\tAddRecordsfromaTextFile\n"
n=AddfromText(stu,n);
/*新增功能,输出统计信息*/然后通过调用函数AddfromText(stu,n)实现暂存信息
case9:
如要将刚才输入的信息保存键入9号键
\t\t\tWritetoaTextfile\n"
WritetoText(stu,n);
/*循环写入数据*/然后调用函数AddfromText(stu,n)实现保存功能
case0:
最后入要退出程序键入0号键
\t\t\tHaveaGoodLuck,Bye-bye!
/*结束程序*/
exit(0);
}
4.5设计测试流程
1、进入界面
2、输入选项1,回车;
按提示输入数据:
3、回到主菜单;
输入选项7,回车;
输入文件名:
data.txt,回车;
出现成功提示,则读入文件操作成功。
4、回到主菜单,输入2,回车
每10个暂停显示数据
5、回到主菜单,输入3,回车
出现排序成功信息。
6、回到主菜单,输入4,回车
按提示插入一组数据
7、回到主菜单,输入5,回车
按提示输入姓名,删除数据
出现删除成功的信息
8、回到主菜单,输入6,回车
输入姓名进行查询
9、回到主菜单,输入7,回车
出现统计信息
10、回到主菜单,输入9,回车
输入result.txt,回车
出现成功写入文件的信息
11、回到主菜单,输入0,回车退出系统
4.6程序调试情况
1、开始进入界面时键入任意选项后就不能继续进行,发现是没有使用循环语句,重新使用后能继续运行。
2、输入一个信息后在输出信息时,由于调用数据输出函数不正确不能显示刚才输入的信息,调试后能正常运行。
3、对于插入一个成绩,必须是在所输入数据正确排序后方可进行。
4、从正文中输入数据到结构体中只能暂存信息,如要保存信息必须得将信息加入文件中。
5、对于将信息加入文件,必须新建一个文本文件,方可保存。
当数据输入文件后,就可以在你新建的文本文件中看到输入的信息。
6、最后一条就是我所编写的程序一次性只能写入80个同学的信息,所以,必须每输完一次文件记录后再次新建文件。
7、提示:
每输入一个信息记得保存!
五、心得及体会
该次课程设计是将我们学的理论知识运用与实际的过程,开始出现了一些问题,走了许多弯路,在此期间,但通过上网搜索和询问同学把困难解决了。
写的过程中遇到了些实际问题,如书写格式不对造成编译错误,更严重的是一些逻辑性错误,这些都反映出自己学习得不扎实,和自己的书写习惯不好,这也提醒我们在以后的编程中要时时小心步步留意。
六、参考文献或网站
【1】《C程序设计基础教程》(杨有安编人民邮电出版社)
【2】《C程序设计经典教程》
第四版(美国HarveyM.Deitel/PaulJ.Deitel著,聂雪军、贺军译,清华大学出版社出版)
【3】周长发《精通VisualC++图像处理编程》电子工业出版社2006年6月
【4】孙鑫.《VC++深入详解》电子工业出版社2006年06月
【5】XX
【6】谷歌
出师表
两汉:
诸葛亮
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。
然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。
诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
宫中府中,俱为一体;
陟罚臧否,不宜异同。
若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;
不宜偏私,使内外异法也。
侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:
愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为督:
愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
亲贤臣,远小人,此先汉所以兴隆也;
亲小人,远贤臣,此后汉所以倾颓也。
先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。
侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也
。
臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。
先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。
后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。
受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;
故五月渡泸,深入不毛。
今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。
此臣所以报先帝而忠陛下之职分也。
至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。
若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;
陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。
臣不胜受恩感激。
今当远离,临表涕零,不知所言。