学生成绩管理数据结构毕业论文.docx
《学生成绩管理数据结构毕业论文.docx》由会员分享,可在线阅读,更多相关《学生成绩管理数据结构毕业论文.docx(23页珍藏版)》请在冰豆网上搜索。
![学生成绩管理数据结构毕业论文.docx](https://file1.bdocx.com/fileroot1/2023-6/12/8cbea17d-2067-4730-85c3-af87f5ad362b/8cbea17d-2067-4730-85c3-af87f5ad362b1.gif)
学生成绩管理数据结构毕业论文
计算机工程学院
实践报告
课程名称:
数据结构课程设计
设计题目:
学生成绩管理
院系:
数理学院
专业:
信息与计算科学
组别:
28
起止日期:
2013年7月1日~2013年7月5日
指导教师:
周海岩寇海洲
学年学期:
2012~2013学年第2学期
设计任务书
课题
名称
学生成绩管理
设计
目的
综合运用程序设计、算法设计的方法,对实际应用中的问题进行数据分析和组织、算法设计和分析、程序设计和调试等环节,将理论与实践相结合,掌握利用计算机解决实际问题的基本方法和基本步骤,培养学生良好的程序设计风格、算法设计和分析能力。
实验
环境
PIV以上计算机,WindowXP以上操作系统;
编程语言不限。
任务
要求
要求学生结合课程体系的实际需求及实践能力、实验条件等外部因素,完成学生成绩管理课题的设计任务。
课题功能:
1)实现对学生成绩的录入;
2)对输入的数据进行查询、修改、删除、排序等操作;
任务要求:
1)界面友好,函数功能要划分好;2)总体设计应画流程图;3)程序要加必要的注释。
4)学生完成设计任务后,按要求提交算法设计报告,设计报告规范化,并能够反映算法设计的实际内容。
工作进度计划
序号
起止时间
工作内容
1
1~6周
制定课程设计计划,编写课程设计指导书
2
13~18周
下发任务,学生选题,分组,查阅资料
3
19周
上机系统调试,课程设计报告,课程设计答辩
4
20周
上交报告电子及打印文档
指导教师:
周海岩
年月日
摘要:
学生成绩管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强,数据安全性强,数据安全性好的库。
而对于后者则要求应用程序功能完备易使用等特点。
该系统主要实现,添加、修改、删除、读出、写入、查找、排序、计算总分、平均分、分类汇总等功能。
系统的核心是添加、修改和删除三者之间的联系,每个表的修改都将联动的影响其他的表,当完成添加或删除操作时系统会自动地完成学生成绩的修改。
查询功能也是系统的核心之一,在系统中主要根据学生姓名和学号进行查询,其目的就是为了方便用户使用。
系统有完整的用户添加、修改、删除和密码修改功能,并具备报表打印功能。
关键词:
添加;修改;删除;查找;排序;总分;平均分
目录
1需求分析:
1
1.1任务及要求1
1.2程序设计思想1
1.3实现功能1
2概要设计:
2
2.1线性顺序表的抽象数据定义:
3
2.2程序框图3
2.3程序模块3
3详细设计:
5
3.1声明一个student的结构体类型并且定义变量5
3.2声明类system且构造函数6
3.3调用添加函数6
3.4调用查询函数7
3.5调用显示函数7
3.6调用修改函数8
3.7调用删除函数9
3.8调用排序函数9
3.9do……while判断是否循环11
4调试分析:
12
5测试结果:
13
5.1主菜单13
5.2添加学生成绩13
5.3查询学生成绩14
5.4显示学生成绩14
5.5修改学生成绩15
5.6删除学生成绩15
5.7对学生成绩排序15
5.8退出16
5.9源程序文件名清单16
6附录:
17
1.需求分析
1.1任务及要求
该系统主要实现,添加、修改、删除、读出、查找、排序、计算总分、平均分、分类汇总等功能。
1.2程序设计思想
该系统需要解决多个问题,数据类型特征并不都相同。
为了解决问题的方便化,采用结构体来做程序。
并且很多数据在输出时采用了循环语句人为完成。
1.3实现功能
1)录入数据:
将学生学号、姓名、成绩写入文件。
2) 增加人员:
增加学生,并将学生姓名、学号和成绩写入文件。
3) 删除人员:
删除学生信息和成绩。
4) 修改数据:
修改学生成绩。
5) 按学号查询:
根据学号查询学生成绩,包括平均分。
6) 按姓名查询:
根据学生姓名查询学生成绩,包括总分和平均分。
7) 输出所有学生成绩。
8) 按照总分、平均分从高到低排序。
2.概要设计
2.1涉及到的基础知识
所用到的基础知识有结构体和简单的do--while循环语句和“break”跳出循环语句同时还有多处用到了for循环语句。
通过多个函数的结合完成预期的结果。
1.结构、类和构造函数
声明结构类型时,首先指定关键字struct和结构名,然后用一对花括号将若干个结构成员数据类型说明括起来。
(1).Structstudent声明一个名为student的结构体类型
{定义变量
};
intmain()
{定义student的结构变量,分配变量空间
}
(2)classsystem
{public:
System()成员函数
}
Private:
{
数据成员
}
2.循环结构:
(1)switch语句
switch语句,它也称为多选择语句。
它可以根据给定的条件,从多个分支语句序列中选择执行一个分支的语句序列。
switch语句的一般格式为:
switch(表达式)
{case常量表达式1:
语句;break;
……
case常量表达式n:
语句;
default:
语句;}
(2)for语句
这种循环语句不仅用于循环次数已知的情况,还能用于循环次数预先不能确定只给出循环结束条件的情况下。
for语句的一般形式:
for(表达式1;表达式2;表达式3)
{语句;循环体}
(3)do……while语句
Do
循环体
While(条件表达式)
当流程到达do后,立即执行循环体语句,然后再对表达式进行测试。
若条件表达式的值为真,则重复循环,否则退出。
2.2程序框图
2.3程序模块
2.3.1主程序模块
voidmain()
{
SYSTEMperson;
}
2.3.2添加模块
“学生成绩管理系统”包括几个模块:
添加学生成绩,显示学生成绩,查询学生成绩、修改学生成绩、删除学生成绩、将学生成绩进行排序,最后退出程序
主要程序的模块说明:
1)查询学生成绩模块
voidSYSTEM:
:
search()查询
case1:
按照学号查询
{for()
if(stu[i].number==num)
{输出学生成绩
break;}
if(stu[i].number!
=num)
cout<<"未找到该学生信息!
!
"<break;}
case2:
按照姓名查询
方法同上
2)修改学生成绩模块
voidSYSTEM:
:
change()修改
for()
if(stu[i].number==num)
{输入新的学生成绩
break;
}
if(stu[i].number!
=num)
cout<<"无此学生信息!
!
"<3)删除学生成绩
voidSYSTEM:
:
del()删除
输入新的学生成绩
for()
if(stu[i].number==num)
{
for()
用后一个学生信息覆盖前一个学生信息,学生人数减少一个
break;
}}
4)将学生成绩进行排序模块
voidSYSTEM:
:
PX()排序
{
switch(k)
{case1:
按学生总分排序
{
for()
for()
{
if()
{冒泡排序法}
}
}
}break;
case2:
按学生平均分排序
方法同上
5)各个模块之间的关系如下:
主程序模块
↙↙↓↘↘↘
添加查询显示修改删除排序
↙↘↙↘
按学号按姓名按总分按平均分
3.详细设计
3.1声明一个名为student的结构体类型并且定义变量
structStudent
{
stringname;longnumber;doubleshuxue;doubleyingyu;
doubleCyuyan;doubletiyu;doubleZF;doublePJF;};
3.2声明类system且构造函数
classSYSTEM
{public:
SYSTEM(){n=0;}构造函数
voidadd();添加
voidshow();显示
voidsearch();查询
voidchange();修改
voiddel();删除
voidPX();排序
private:
Studentstu[1000];定义一个结构体类型student的变量stu,其最大值为1000
intn;
};
3.3调用添加函数
voidSYSTEM:
:
add()添加
{
cout<<"学号:
"<>stu[n].number;
cout<<"姓名:
"<>stu[n].name;
cout<<"数学:
"<>stu[n].shuxue;
cout<<"英语:
"<>stu[n].yingyu;
cout<<"C语言:
"<>stu[n].Cyuyan;
cout<<"体育:
"<>stu[n].tiyu;
stu[n].ZF=stu[n].shuxue+stu[n].yingyu+stu[n].Cyuyan+stu[n].tiyu;
stu[n].PJF=(stu[n].shuxue+stu[n].yingyu+stu[n].Cyuyan+stu[n].tiyu)4;
n++;学生个数增加一个}
3.4调用查询函数
voidSYSTEM:
:
search()查询
{
cout<<"请选择查询方式:
"<cout<<"1.按学号查询"<cout<<"2.按姓名查询"<intc,i;
cin>>c;
switch(c)
{
case1:
按照学号查询
{
longnum;
cout<<"请输入要查询的学号:
"<>num;
for(i=0;iif(stu[i].number==num)
{cout<<"学号姓名数学英语C语言体育总分平均分"<cout<break;}
if(stu[i].number!
=num)
cout<<"未找到该学生信息!
!
"<break;}
case2:
按照姓名查询
与按学号查询相似
3.5调用显示函数
voidSYSTEM:
:
show()显示
{cout<<"学号姓名数学英语C语言体育总分平均分"<for(inti=0;i{
cout<}
}
3.6调用修改函数
voidSYSTEM:
:
change()修改
{
longnum;
cout<<"请输入要修改的学生学号:
"<cin>>num;
for(inti=0;iif(stu[i].number==num)
{cout<<"该学号的学生信息如下:
"<cout<<"学号姓名数学英语C语言体育总分平均分"<cout<cout<<"请输入新的学生信息:
"<cout<<"学号:
"<>stu[i].number;stu[n].number=stu[i].number;
cout<<"姓名:
"<>stu[i].name;stu[n].name=stu[i].name;
cout<<"数学:
"<>stu[i].shuxue;stu[n].shuxue=stu[i].shuxue;
cout<<"英语:
"<>stu[i].yingyu;stu[n].yingyu=stu[i].yingyu;
cout<<"C语言:
"<>stu[i].Cyuyan;stu[n].Cyuyan=stu[i].Cyuyan;
cout<<"体育:
"<>stu[i].tiyu;stu[n].tiyu=stu[i].tiyu;
stu[i].ZF=stu[i].shuxue+stu[i].yingyu+stu[i].Cyuyan+stu[i].tiyu;
stu[i].PJF=(stu[i].shuxue+stu[i].yingyu+stu[i].Cyuyan+stu[i].tiyu)4;
break;
}
if(stu[i].number!
=num)
cout<<"无此学生信息!
!
"<}
voidSYSTEM:
:
change()来实现对学生成绩的修改。
实现这个功能用到了先查找即用学号作为处理对象用change()函数与已存入的学号作对比,用循环语句控制查找,如果相同输出该学生的已存在的信息,再输入修改信息;如果不是就输出“未找到”。
3.7调用删除函数
voidSYSTEM:
:
del()删除
{
longnum;
cout<<"请输入要删除学生的学号,然后按回车确认:
"<cin>>num;
for(inti=0;iif(stu[i].number==num)
{
for(intj=i;jstu[j]=stu[j+1];
n--;学生人数减少一个
该代码主要实现了删除学生成绩的功能,首先要找到删除的是那个学生信息”stu[j]=stu[j+1];”将后面的学生信息向前移。
最后再输出学生成绩。
cout<<"已成功删除该学生信息!
!
"<}
}
3.8调用排序函数
voidSYSTEM:
:
PX()排序
{cout<<"请选择排序方式:
"<cout<<"1.按学生总分排序"<cout<<"2.按学生平均分排序"<cout<<"3.返回"<intk;
cin>>k;
switch(k)
{
case1:
按学生总分排序
{
Studentp;定义一个Student类型的变量p
for(inti=0;ifor(intj=0;j{
if(stu[j].ZF{
p=stu[j];
stu[j]=stu[j+1];
stu[j+1]=p;
}
}
该程序实现了对学生成绩的排序,其中“p”为函数参数是中间变量,利用该变量实现了两个数据的交换。
而利用结构体则可以方便快捷的将一个学生的所有信息进行交换。
按照总分的高低来进行的排序。
由高到低排序。
利用“for”循环语句的嵌套实现了学生之间总分的比较。
cout<<"学号姓名数学英语C语言体育总分"<for(intm=0;m{cout<}
}break;
case2:
按学生平均分排序
{与总分排序类似
}break;
case3:
return;返回
}
}
3.9do……while判断是否循环
voidmain()
{
SYSTEMperson;
intb;
dodo-while循环语句是先执行循环体里的语句,再进行判断,如果不符合while条件(即b<7)时要执行一次循环体,直到b的值大于或等于7是才退出循环。
{
cout<<"***************************************************************************"<cout<<"1.添加6.排序"<cout<<"2.查询7.退出"<cout<<"3.显示"<cout<<"4.修改"<cout<<"5.删除"<cout<<"***************************************************************************"<cout<<"请请根据你的需要选择(1~7):
";
cin>>b;
switch(b)
{
case1:
cout<<"请依次输入该学生的相关信息:
"<person.add();
break;
case2:
person.search();
break;
case3:
person.show();
break;
case4:
person.change();
break;
case5:
person.del();
break;
case6:
person.PX();
break;
case7:
cout<<"谢谢使用本系统!
!
!
"<}
}while(b<7);
}
4.调试分析
1)本程序的算法都比较合理,尽可能的减少不必要的麻烦。
模块的划分也十分的合理,根据题目的要求,将模块十分分成六个大的模块,由于测验数据对象并比较少,所以都是采用最简便最有效的方式。
然后通过主函数直接调用这些函数来达到完成所需要的命令。
2)由于学生成绩数字不是很多,所以在查找的选择上没有使用其他计较麻烦的查找方式而是直接使用比较简便的、针对查找对象较少的情况下使用的直接查找法。
3)但是在定义学生成绩管理是直接使用结构体去定义,设定了好几个数组,在现实生活中使用,数据多的情况下显得非常麻烦。
5.测试结果
5.1主菜单
图5-1
5.2添加学生成绩
图5-2
图5-3
5.3查询学生成绩
图5-4按学号查询
图5-5按姓名查询
5.4显示学生成绩
图5-6
5.5修改学生成绩
图5-7
图5-8显示修改后的所有学生成绩
5.6删除学生成绩
图5-9
5.7对学生成绩排序
图5-10按总分排序
图5-11按平均分排序
5.8退出
图5-12
5.9源程序文件名清单
#include
#include
6附录
总结
通过这次的课程设计,我巩固了以往学过的知识。
第一次尝试着将以前学过的东西按照自己的想法写出来。
虽然写的代码还显得幼稚也不成熟,但我觉得这是一次新的尝试。
对于自己开说也是一个挑战。
培养了编程能力,为后续课程的学习提供知识和能力支撑。
回顾起此次课程设计,至今我们仍感慨颇多综合起来,主要体现在以下几个方面:
首先,对数据结构的掌握还不够。
虽然完成了程序,但是只用到了基本的结构体、数组和类,以及一些简单的循环语句,像for循环,do……while语句和switch ……case选择语句。
只覆盖了书上很少的知识,例如链表,指针之类的知识都没有用到。
其次,在程序整体的设计上还不够完善,编写的程序是通过手动输入学生的各个成绩,调试时只是输入七组数据做实验,一旦有几千个数据通过这样的程序来运行时非常不可取的。
但是,我觉得该程序还有很大的改进空间,譬如可以用多文件做,这样功能更强大,也便于以后更好地改进和完善程序;而在程序的内容方面,还能增加更多功能,以满足不同需要的各种要求。
当然,值得欣慰的是,该程序基本完成里设计要求,并能顺利运行,界面清晰易理解,且具备各项基本功能,易于操作。
比如在做查询的时候,按照学号、姓名查询,做排序的时候,按照总分、平均分排序的思想就考虑的非常全面,基本能够满足不同使用者的需求。
在写课程设计的过程中,和同学之间的交流也让我受益良多。
在写代码时教了我许多也启发了我很多。
让我能够一遍遍的不断完善。
通过一个学期的学习,我认为要学好数据结构这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才可以学以致用。
总之,这次课程设计是我真正的去做的一个系统,肯定会有很多不足,但是我很欣慰。
致谢
这次的课程设计最终能够顺利的完成,许多人给了我很大的帮助。
首先,我要谢谢淮阴工学院计算机工程系给我提供了这次难得的实践机会,以及实验室人员提供的方便舒适的实验环境!
其次,我要谢谢这次课程设计的辅导老师给予我的帮助和辛勤指导,以及和我一起合作的同学的共同互助。
在设计过程中,我遇到了诸多的困难与麻烦,若没有他们的悉心指导与共同研讨,我也不能这么顺利的完成本次的课程设计,在这里衷心得对他们表示深深的谢意,谢谢!
最后,我要谢谢我的其他同学,多谢他们给我所提的建议以及他们给予我的帮助。
当然,在本次课程设计的完成过程中,我也参考了很多资料参考书,以及浏览了很多网站。
所以我也要谢谢这些书籍的著作者,及各网站提供信息的作者们。
在这里还要特别谢谢网站给我的指导和帮助。
同时谢谢淮阴工学院图书馆,给我提供了丰富的书籍资料!
参考文献
1严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社
2殷人昆.数据结构(C++版).清华大学出版社
3金远平.数据结构(C++描述).清华大学出版社
4许卓群.数据结构与算法.高等教育出版社
5Frank M.Carrano .数据结构与C++高级教程.清华大学出版社
指导教师评语
学号
姓名
陆君
班级