10信科王炳松《数据结构课程设计报告》.docx
《10信科王炳松《数据结构课程设计报告》.docx》由会员分享,可在线阅读,更多相关《10信科王炳松《数据结构课程设计报告》.docx(15页珍藏版)》请在冰豆网上搜索。
10信科王炳松《数据结构课程设计报告》
福建农林大学计算机与信息学院
计算机类
课程设计报告
课程名称:
算法与数据结构
课程设计题目:
成绩管理系统
姓名:
王炳松
系:
信息与计算科学系
专业:
信息与计算科学
年级:
2010
学号:
102260003030
指导教师:
宁正元
职称:
教授
2011年1月20日
目录
1、数据结构课程设计任务书.............................................................................................1
1.1、题目....................................................................................................................1
1.2、要求....................................................................................................................1
2、总体设计......................................................................................................................1
2.1、功能模块设计......................................................................................................1
2.2、所有功能模块的流程图.........................................................................................2
3、详细设计.........................................................................................................................3
3.1、程序中所采用的数据结构及存储结构的说明.........................................................3
3.2、算法的设计思想....................................................................................................3
4、调试与测试:
.................................................................................................................4
4.1、调试方法与步骤:
.................................................................................................4
4.2、测试结果的分析与讨论:
.......................................................................................4
4.3、测试过程中遇到的主要问题及采取的解决措施:
..................................................6
5、源程序清单和执行结果...................................................................................................7
6、总结..............................................................................................................................11
7、参考文献......................................................................................................................11
1、数据结构课程设计任务书
1.1、题目
成绩管理系统
1.2、要求
对一个班级的多门课程的成绩进行管理,能够实现一个班级学生信息的输入、输出、查找、删除、修改、排序、求平均分和及格率等操作。
2、总体设计
2.1、功能模块设计
根据课程设计题目的功能要求,各个功能模块的组成框图如下
2.2、所有功能模块的流程图
3、详细设计
3.1、程序中所采用的数据结构及存储结构的说明
定义一个学生类,其中包括学生的个人信息等私有成员,含有输入信息,查询信息等成员函数。
classstudent{
public:
student();
student(inta,stringb,stringc,intd,inte,intf,intg);
student(student&s);
intgetstudent();
intchange();
voidinput();
staticintgetcountp(){returncountp1;}
intgetnumber(){returnnumber;}
intgetsub(){returnChinese+Math+English;}
staticvoidswap(student&s1,student&s2);
private:
staticintcountp1;
intnumber;
stringname;
stringgender;
intage;
intChinese;
intMath;
intEnglish;
};
3.2、算法的设计思想
1、首先建立一个学生类,包含他的所有信息,比如学(number)、姓名(name)、性别(gender)、年龄(age)和各科的成绩(Chinese,math,English);
2、然后在编写相应的各个小的函数段,主要有添加(student(inta,stringb,stringc,intd,inte,intf,intg)),查找(intgetstudent()),修改(intchange()),排序等;
3、最后在main()函数中再利用switch()的选择功能对所需要执行的操作进行选择,主要有:
1、添加一个学生的信息
2、查询一个学生的信息
3、更改一个学生的信息
4、查看所有学生的信息
5、查看一个学生的总成绩
6、查看全班的平均分
7、查看排名后的结果
8、查看该班的及格率
9、退出该操作系统
4、调试与测试:
4.1、调试方法与步骤:
第一步:
添加学生信息
第二步:
查询一个学生信息
第三步:
更改一个学生信息
第四步:
查看所有学生信息
第五步:
查看一个学生的总成绩
第六步:
查看全班平均分
第七步:
查看排名后结果
第八步:
查看全班的及格率
第九步:
退出该操作系统
4.2、测试结果的分析与讨论:
(见下页)
4.3、测试过程中遇到的主要问题及采取的解决措施:
1、所输入的格式不符合要求,可能会导致输出的错误,这时应该重新输入
2、当输入的学号有重复的时候,在查找过程中就会发现,故而希望不要输入相同的学号
3、改程序还只是一些简单的处理过程的程序,若要想将其变得更加的完美,还希望大家多多帮忙
5、源程序清单和执行结果
#include
#include
usingnamespacestd;
classstudent{//类的定义
public:
student();//默认构造函数
student(inta,stringb,stringc,intd,inte,intf,intg);//构造函数
student(student&s);//复制构造函数
intgetstudent();//读取学生信息
intchange();//更改学生信息
voidinput();//输入学生信息
staticintgetcountp(){returncountp1;}//计算学生数
intgetnumber(){returnnumber;}//读取学生学号
intgetsub(){returnChinese+Math+English;}//读取学生总成绩
staticvoidswap(student&s1,student&s2);//交换学生信息
private:
staticintcountp1;//计数器(学生数)
intnumber;//学号
stringname;//姓名
stringgender;//性别
intage;//年龄
intChinese;//语文成绩
intMath;//数学成绩
intEnglish;//英语成绩
};
intstudent:
:
countp1=0;//静态常量
student:
:
student(){//默认构造函数的实现
number=0;name="wang";gender="nan";age=21;Chinese=0;Math=0;English=0;
}
student:
:
student(inta,stringb,stringc,intd,inte,intf,intg){//构造函数的实现
number=a;name=b;gender=c;age=d;Chinese=e;Math=f;English=g;
}
student:
:
student(student&s){//复制构造函数的实现
number=s.number;name=s.name;gender=s.gender;age=s.age;Chinese=s.Chinese;Math=s.Math;English=s.English;
}
intstudent:
:
change(){//更改学生信息函数的实现
charxx;
cout<<"请输入要改变的数据"<cout<<"a代表number,b代表name,c代表gender,"<cout<<"d代表age,e代表Chinese,f代表Math,g代表English"<cin>>xx;
cout<<"将信息更改为:
";
switch(xx){
case'a':
cin>>number;break;
case'b':
cin>>name;break;
case'c':
cin>>gender;break;
case'd':
cin>>age;break;
case'e':
cin>>Chinese;break;
case'f':
cin>>Math;break;
case'g':
cin>>English;break;
}
return0;
}
intstudent:
:
getstudent(){//读取学生信息函数的实现
cout<return0;
}
voidstudent:
:
input(){//输入学生信息函数的实现
cin>>number>>name>>gender>>age>>Chinese>>Math>>English;
countp1++;
}
voidstudent:
:
swap(student&s1,student&s2){//交换学生信息函数的实现
students3;
if(s1.getsub()s3=s1;
s1=s2;
s2=s3;
}
}
intmain(){//主函数
inti,n,ava=0;//定义变量
intcountp=0;
floatava1;
doublek=0;
studenta[100];
cout<<"*************************************************"<cout<<"☆欢迎来到学生成绩管理系统☆"<cout<<"*************************************************"<for(i=0;n!
=9;i++){//循环的实现
cout<<"*************************************************"<cout<<"请选择您要执行的操作:
"<cout<<"1、添加一个学生的信息2、查询一个学生的信息"<cout<<"3、更改一个学生的信息4、查看所有学生的信息"<cout<<"5、查看一个学生的总成绩6、查看全班的平均分"<cout<<"7、查看排名后的结果8、查看该班的及格率"<cout<<"9、退出该操作系统"<cout<<"*************************************************"<cin>>n;
switch(n){//switch语句的实现
case1:
//添加一个学生的信息
if(countp<100){
cout<<"学号"<<"姓名"<<"性别"<<"年龄"<<"语文成绩"<<"数学成绩"<<"英语成绩"<a[countp].input();
countp=student:
:
getcountp();
}
break;
case2:
//查询一个学生的信息
intm1,p;
cout<<"请输入你要查看的学生的学号:
";
cin>>m1;
for(p=0;pif(m1==a[p].getnumber())
a[p].getstudent();
if(p>countp)
cout<<"您所输入的信息不对,无法查询"<break;
case3:
//更改一个学生的信息
intm2,p1;
cout<<"请输入你要修改的学生的学号:
";
cin>>m2;
for(p1=0;p1if(m2==a[p1].getnumber())
a[p1].change();
if(p1>countp)
cout<<"您所输入的信息不对,无法查询"<break;
case4:
//查看所有学生的信息
intm3;
for(m3=0;m3a[m3].getstudent();
break;
case5:
//查看一个学生的总成绩
intm4,p2;
cout<<"请输入你要查看的学生的学号:
";
cin>>m4;
for(p2=0;p2if(m4==a[p2].getnumber()){
cout<<"该学生的总成绩是:
";
cout<}
if(p>countp)
cout<<"您所输入的信息不对,无法查询"<break;
case6:
//查看全班的平均分
intm5;
for(m5=0;m5ava=ava+a[m5].getsub();
ava1=static_cast(ava);
cout<<"全班的平均成绩是:
"<<(ava1/countp)<break;
case7:
//查看排名后的结果
intm6,m7;
for(m6=0;m6for(m7=1;m7student:
:
swap(a[m6],a[m7]);
for(m6=0;m6cout<<"第"<"<a[m6].getstudent();
}
break;
case8:
//查看该班的及格率
intm8;
for(m8=0;m8if(a[m8].getsub()>=180)
k++;
}
cout<<"该班的及格率是:
"<<(k/countp)*100<<"%"<break;
case9:
//退出该操作系统
break;
}
}
return0;
}//主函数结束
6、总结
本程序在刚开始调试时有许多错误,但在我的努力及同学的帮助下都被一一克服,现在在操作本程序时可根据提示进行相关操作,能正确输出结果。
在刚开始的几次调试中曾经出现过不能运行、不会正确输出结果、不能进行循环练习等等问题。
经过我的努力及同学的帮助,这些问题得到克服,并且使程序的功能也得到了一定的完善,并且给出正确答案。
在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。
从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。
除此之外,我还得到了一些有用的教训:
写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。
在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。
7、参考文献
[1]严蔚敏,陈文博编著.数据结构及应用算法教程.北京:
清华大学出版社
[2]宁正元.数据结构-用C语言描述.北京:
中国水利水电出版社,2000
[3]苏仕华主编.数据结构自学辅导.北京:
清华大学出版社,2002
[4]宁正元,王秀丽.算法与数据结构.北京:
清华大学出版社,2006.