按学号及学期删除学生记录模块
用函数voidshanchu(Student*r)来实现
主要功能是用来删除学生记录。
首先有个读文件的操作,之后会有判断语句,根据所输入的学号及学期,来显示删除前的信息记录,添加for循环语句,循环把后一位的信息提前一位,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。
按数据结构成绩(冒泡)降序排序模块
用函数voidmaopao(Student*r)来实现
主要功能时是用来对学生的记录来按单科成绩(这里以数据结构成绩为例)进行排序。
这样方便对某科成绩有个大致的了解。
首先会有一个读文件操作,为排序做基础。
本排序使用冒泡排序。
它有两个优点:
一是很容易写出代码;二是具有稳定性,这里的稳定性是指原序列中相同两元素的相对顺序仍然保持到排序后的序列。
冒泡排序时进过n-1趟子排序完成的,第i趟子排序从第1个数至第n+1个数,若第i个数比后一个数大(则升序,小则降序。
本程序一律采用降序)则交换两数。
排序之后,将排序之后的结果写入文件,再打开文件的时候,里面显示的就是按单科成绩排序后的结果。
按总分(选择)降序排序:
用函数voidxuanze(Student*r)来实现
主要功能时是用来对学生的记录来按总分成绩进行排序。
这样方便对学生总体有个大致的了解。
首先会有一个读文件操作,为排序做基础。
本排序使用选择排序。
其基本思想是:
n个记录的文件的直接选择排序可进过n-1趟直接选择排序得到有序结果:
初始状态,无序区为R[1..n],有序区为空。
第一趟排序在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第一个记录R[1]交换,使R[1..n]和R[2..n]分别变为记录个数增加1个的新有序区记录和记录数减少1个的新无序区。
.....
第i趟排序第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。
该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第一个记录与R交换,使R[1..i]和R分别变成为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
统计各科总分及平均分模块:
用函数voidtongji(Student*r)来实现
主要功能是计算总分和各科平均分,计算完之后将总分保存到文件中。
4、测试与分析
进入主界面选择<1>输入学生信息
输入结束后的界面:
Student.txt:
23赵月89.092.088.03269.089.7
12李丽92.085.088.03265.088.3
31王虎87.079.045.03211.070.3
选择<2>,输出了学生信息:
选择<3>,按学号及学期查询学生信息:
选择<4>,按姓名及学期查询学生信息:
选择<5>,按学号及学期修改学生信息:
Student.txt:
23赵月89.092.088.03269.089.7
12李丽92.085.088.03265.088.3
31王虎87.079.085.03211.070.3
选择<6>,插入学生信息:
Student.txt:
23赵月89.092.088.03269.089.7
12李丽92.085.088.03265.088.3
31王虎87.079.085.03211.070.3
17王万78.079.086.03243.081.0
选择<7>,按学号及学期删除学生信息:
Student.txt:
23赵月89.088.088.03269.089.7
12李丽92.088.088.03265.088.3
17王万78.086.086.03243.081.0
选择<8>,按数据结构降序<冒泡>排序:
Student.txt:
23赵月89.088.088.03269.089.7
12李丽92.088.088.03265.088.3
17王万78.086.086.03243.081.0
选择<9>,按总分降序<选择>排序:
Student.txt:
23赵月89.088.088.03269.089.7
12李丽92.088.088.03265.088.3
17王万78.086.086.03243.081.
选择<10>,统计各科成绩的总分和平均分:
选择<11>,退出:
5、总结
课程设计终于结束了感觉有很多的收获,通过课程设计我又一次巩固了所学的知识,对学习到的理论知识进行了巩固,真正的理解及体会了。
平时有很多知识都是似懂非懂,通过平时上机操作,自己也了解了一些,但在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进步就很有成就感。
在课程设计中遇到不少困难,通过查阅资料,询问同学,在应用课本的前提下,拓展课外知识,完成了此次课程设计,虽然还有许多不足之处,但是从中我学到了许多东西。
我懂得了我们不能拘泥于所学知识,应对其灵活运用。
通过此次课程的设计使我认识到对知识的掌握不全面,而且感觉我们在学习专业知识的同时还需要再加强其他方面知识的学习,因为编程有时候涉及到其他方面的知识,只有了解了其他方面的知识才能收集资料,然后编程。
在编程的过程中,又重新复习了课本,从中学到了许多以前未学到的知识,感觉非常有成就感,特别当自己把程序一点点完善时,
让我对自己更加有信心,让我对数据结构这门课程也更感兴趣了,以前我一直感觉枯燥难学的数据结构,在编程的过程中我也愿意去认真研究学习了。
这次数据结构课程设计中,多亏了同学的耐心帮助。
如果没有同学的指导改错,我会花更多的时间去找错误。
在以后的学习过程中,我一定会认真负责地对待课本中的每一个知识点,进一步充实自己,提高自己。
争取在不断的练习中提高自己的层次。
也希望可以在以后的专业课当中多增加一些实践的内容,只有多动手,我们才能不断提高。
6、附录:
源程序清单
#include
#include
#include//主要是对cin,cout之类的一些操纵运算,是I/O流控制头文件。
#include//文件和标准控制台的输入输出
#include
//数组、结构体
structStudent//结构体
{
intterm;//学期
intnum;//学号
charname[12];//姓名
floatmark1;//成绩1
floatmark2;//成绩2
floatmark3;//成绩3
floatsum;//总分
floataverage;//平均分
};
intnum=0;
//声明
voidinput(Student*r);//输入
voidoutput(Student*r);//输出
voidsearchnum(Student*r);//按学号及学期查找
voidsearchname(Student*r);//按姓名及学期查找
voidchange(Student*r);//按学号及学期修改信息
Student*insert(Student*r);//插入信息
voidshanchu(Student*r);//按学号及学期删除信息
voidmaopao(Student*r);//按数据结构降序(冒泡)排序
voidxuanze(Student*r);//按总分降序(选择)排序
voidtongji(Student*r);//统计各科总分和平均分信息
voidmain()
{
cout<<"输入学生的个数:
";
cin>>num;//全局变量
Student*p=(Student*)newStudent[num];//定义指针数组,存放学生个数
intm;
do{
cout<cout<cout<<"\t*----------------------------->菜单栏<-----------------------------*\n"<cout<<"\t*<1>输入学生信息并保存到文件<2>读取文件并输出学生信息*"<cout<<"\t*<3>按学号及学期查询<4>按姓名及学期查询*"<cout<<"\t*<5>按学号及学期修改信息<6>插入信息*"<cout<<"\t*<7>按学号及学期删除信息<8>按数据结构降序(冒泡)排序*"<cout<<"\t*<9>按总分降序(选择)排序<10>统计各科成绩的总分和平均分*"<cout<<"\t*<11>退出*"<cout<<"\t*------------------------------------------------------------------*\n"<cout<<"请选择:
";
cin>>m;
switch(m)
{
case1:
input(p);//输入
break;
case2:
output(p);
break;
case3:
searchnum(p);
break;
case4:
searchname(p);
break;
case5:
change(p);
break;
case6:
p=insert(p);
break;
case7:
shanchu(p);
break;
case8:
maopao(p);
break;
case9:
xuanze(p);
break;
case10:
tongji(p);
break;
case11:
//退出
break;
}
}while(m!
=11);
}
//输入信息
voidinput(Student*r)
{
FILE*fp;
intn=0;
inti;
intt=0;//t为标志位,1为找到,0为未找到
cout<请输入学生信息<---------"<for(i=0;i{
cout<<"请输入学期:
";
cin>>r[i].term;
cout<<"请输入第"<
";
cin>>r[i].num;
if(i>=1)
{
for(n=0;n
{
if(r[n].num==r[i].num)
{
cout<<"该学号已存在!