数据结构实验报告
2010年第二学期
中南大学信息科学与工程学院数据结构课程设计报告册
课程设计名称:学生成绩管理
专业:通信工程
班级: 0803
学号: 00000000
姓名: .。。。。。。
指导老师:。。。。。。。
目录
一、问题描述…………………
二、基本要求…………………
三、数据结构的设计…………
四、软件模块结构图…………
五、程序设计思想……………
六、程序流程图………………
七、源程序……………………
八、调试分析…………………
九、测试数据…………………
十、用户使用手册……………十一、心得体会………………
一、问题描述
在学生成绩管理中,经常会遇到求平均成绩,统计不及格学生成绩,统计优秀学生人数,以及按成绩对学生进行排名等。
二、基本要求
现假设有某个班级的若干名学生,每个学生都考试完成了4门课程。
(1)求每门课程的平均成绩。
(2)输出所有有不及格课程的学生的学号、姓名、全部课程的成绩、平均成绩。
(3)输出所有平均分在90分以上(含90分)的学生学号、姓名。
(4)对4门课程中的任何一门,可随意抽取1门按学生成绩进行排序。
三、数据结构的设计
先设计了头文件,以及定义了struct score这个结构体,根据功能分析了要设定的函数:student *head=(student *)malloc(sizeof(student)),void input()录入学生信息,float average ()求平均成绩,void display()显示菜单,void paixu()排序,void Delete()删除学生信息,void print()输出函数,void search()查找函数,全由主菜单控制,最后在主函数中用if、case语句来控制。
四、软件模块结构图
五、程序设计思想
主要利用if语言和条件语句进行程序的设计,输入学生的数据,根据不同的要求进行查询、排序等要求。
六、程序流程图
七、源程序
#include
#include
#include
#include
using namespace std;
int amount=0; //记录学生个数
int const Q=80;
float A[Q];
struct score//各门功课结构体
{
float sjjg;
float yingyu;
float shuxue;
float tiyu;
float gailv;
struct score *next;
};
class student//学生类
{
public:
string number;
string name;
string sex;
score chengji;
float average;
class student *next;
};
student *head=(student *)malloc(sizeof(student));
void input();//录入学生信息
void display();//显示菜单
void search1();//查询
void search2();//查询
void change1();//修改
void change2();//修改
void Delete();//删除学生信息
void save();//保存学生信息
void paixu1();//按数据结构排序
void paixu2();//按英语排序
void paixu3();//按数学排序
void paixu4();//按体育排序
void paixu5();//按概率排序
void paixu6();//按平均分排序
void tongji();//统计学生信息
void show();//显示学生信息
void duwenjian();//读取文件信息
void insert();
void main()
{
cout<<"\t\t|※※※※※※※※※※※※※※※※※※※※※※※|\n";
cout<<"\t\t|※欢迎使用学生信息管理系统※|\n";
cout<<"\t\t ------------------------------------------------ \n";
cout<<"\t\t|※指导老师:彭春华※|\n";
cout<<"\t\t|※※|\n";
cout<<"\t\t|※制作者:谭邹平、武岳、商振峰※|\n";
cout<<"\t\t|※※|\n";
cout<<"\t\t|※※※※※※※※※※※※※※※※※※※※※※※|\n";
char x;
bool flag2=0;
display();
do
{
do
{
cin>>x;
if((x>='a'&&x<='z'))flag2=1;
else
{
cout<<"指令错误!!!!!!!!!!"< cout<<" 请选择相应的数字进行操作: "< } } while(flag2==0); switch(x) { case 'a':cout<<"******************************现在进行学生信息录入******************************\n"; input(); cout<<"输入的学生信息为:"< show(); cout<<"************************************************************************ ********\n"; display();break; case 'b': { char z; cout<<"******************************现在进行学生信息查询******************************\n"; cout<<"请选择查询方式:"< cout<<"(0)--按姓名查询;(1)--按学号查询;"< cin>>z; while(z!='0'&&z!='1') { cout<<"指令错误(请选择(0)或者(1))!!!!!!!"< cout<<"请选择查询方式:(0)--按姓名查询;(1)--按学号查询;"; cin>>z; } switch(z) { case '0':search1();break;//按姓名查询 case '1':search2();break;//按学号查询 } cout<<"************************************************************************ ********\n"; display(); break; } case 'c': {char p; cout<<"******************************现在进行学生信息修改******************************\n"; cout<<"请选择修改方式:(0)--按姓名修改;(1)--按学号修改;"< cin>>p; while(p!='0'&&p!='1') { cout<<"指令错误(请选择(0)或者(1))!!!!!!!"< cout<<"请选择修改方式:(0)--按姓名修改;(1)--按学号修改;"< cin>>p; } switch(p) { case '0': change1();break;//按姓名修改 case '1': change2();break;//按学号修改 } cout<<"************************************************************************ ********\n"; display(); break; } case 'd': cout<<"******************************现在进行学生信息删除******************************\n"; Delete();//删除 show(); cout<<"************************************************************************ ********\n"; display(); break; case 'e': cout<<"******************************现在进行显示学生信息******************************\n"; show(); //显示数据 cout<<"************************************************************************ ********\n"; display(); break; case 'f':cout<<"******************************现在进行保存学生信息******************************\n"; save();//保存学生信息 cout<<"************************************************************************ ********\n"; display(); break; case 'g':cout<<"******************************现在进行读取学生信息******************************\n"; duwenjian(); cout<<"************************************************************************ ********\n"; display(); break; case 'h':cout<<"******************************现在进行统计学生信息******************************\n"; tongji();//统计学生信息 cout<<"************************************************************************ ********\n"; display(); break; case 'i': { char a; cout<<"******************************现在进行排序******************************\n"; cout<<"请选择排序方式:"< cout<<"1 按数据结构成绩排序"< cout<<"2 按英语成绩排序"< cout<<"3 按数学成绩排序"< cout<<"4 按体育成绩排序"< cout<<"5 按概率成绩排序"< cout<<"6 按平均分排序"< cin>>a; while(a<'1'||a>'6') { cout<<"指令错误(请选择(1-6))!!!!!!!"< cout<<"1 按数据结构成绩排序"< cout<<"2 按英语成绩排序"< cout<<"3 按数学成绩排序"< cout<<"4 按体育成绩排序"< cout<<"5 按概率成绩排序"< cout<<"6 按平均分排序"< cin>>a; } switch(a) { case '1': paixu1();break;// 按数据结构成绩排序 case '2': paixu2();break;//按英语成绩排序 case '3': paixu3();break;//按数学成绩排序 case '4': paixu4();break;//按体育成绩排序 case '5': paixu5();break;//按概率成绩排序 case '6': paixu6();break;//按平均分排序 } cout<<"************************************************************************ ********\n"; display(); break; } case 'j': cout<<"************************************************************************ ********\n"; cout<<" ¤您已退出学生成绩管理系统, 谢谢您的使用! ¤\n"; cout<<"************************************************************************ ********\n"; cout< exit(0); break; case 'k': cout<<"************************************************************************ ********\n"; cout<<"*****************************现在进行插入学生信息*******************************\n"; insert(); cout<<"************************************************************************ ********\n"; display(); break; } } while(flag2==1); } void display()//显示菜单 { cout<<"\t\t ------------------------------------------------ \n"; cout<<"\t\t|★★★★★★★★成绩管理系统★★★★★★★★★|\n"; cout<<"\t\t|★------------------------------------------★|\n"; cout<<"\t\t|★ a.录入学生信息 b.查询学生信息★|\n"; cout<<"\t\t|★★|\n"; cout<<"\t\t|★ c.修改学生信息 d.删除学生信息★|\n"; cout<<"\t\t|★★|\n"; cout<<"\t\t|★ e.显示学生信息 f.保存学生信息★|\n"; cout<<"\t\t|★★|\n"; cout<<"\t\t|★g.读文件h.统计学生信息★|\n"; cout<<"\t\t|★★|\n"; cout<<"\t\t|★i.排序k.插入学生信息★|\n"; cout<<"\t\t|★★|\n"; cout<<"\t\t|★j.退出本软件★|\n"; cout<<"\t\t|★★★★★★★★★★★★★★★★★★★★★★★|\n"; cout<<"\t\t ------------------------------------------------ \n";} void show()//显示学生信息 { student *stu=head->next; cout<<" 学号姓名性别数据结构英语数学体育概率平均分"< int i=1; while(stu!=NULL&&i<=amount){ cout< cout< cout< cout< cout< cout< cout< cout< cout< cout< stu=stu->next; } } void save()//保存学生信息 { student *stu=head->next;//从头保存 ofstream out("成绩管理.txt",ios::out); out< int i=1; while(stu!=NULL&&i<=amount) { out< < < < < < stu=stu->next;i++; cout< } cout<<"......成功将学生信息保存到〈成绩管理.txt〉中!!!!"< out.close(); } void input()//录入学生数据 { head->next=NULL;//要录入学生信息,必须删除以前所有的信息 amount=0; char c; int j=0; student *p=head; do { student *stu=new student; cout<<"请输入学号:(8位)"< cin>>(*stu).number; cout<<"请输入姓名:"< cin>>(*stu).name; cout<<"请输入性别:"< cin>>(*stu).sex; cout<<"请输入数据结构成绩:"< cin>>(*stu).chengji.sjjg; cout<<"请输入英语成绩:"< cin>>(*stu).chengji.yingyu; cout<<"请输入数学成绩:"< cin>>(*stu).chengji.shuxue; cout<<"请输入体育成绩:"< cin>>(*stu).chengji.tiyu; cout<<"请输入概率成绩:"< cin>>(*stu).chengji.gailv; (*stu).average=0.2*((*stu).chengji.sjjg+(*stu).chengji.yingyu+(*stu).chengji.shuxue+(*stu).cheng ji.tiyu+(*stu).chengji.gailv); stu->next=p->next; p->next=stu; amount++; cout<<"数据信息录入成功,想继续录入吗?(y/n)"; cin>>c; p=p->next; while(c!='y'&&c!='n') { cout<<"指令错误<请输入y/n!>!!!!!!"< cout<<"数据信息录入成功,想继续录入吗(y/n)"; cin>>c; } } while(c=='y'); j++; cout<<"输入了"< } void search1()//按姓名查询 { char c; string name; do { student *stu=head->next; bool flag=0; cout<<"请输入您要查询的学生姓名:"< cin>>name; for(int i2=1;i2<=amount;i2++) { if(name==stu->name) {flag=1; cout<<"您要查询的学生是:"< cout<<" 学号姓名性别数据结构英语数学体育概率平均分"< cout< cout< cout< cout< cout< cout< cout< cout< cout< cout< break; } else stu=stu->next; }//for if(flag==1) { cout<<"您想继续查询吗?(y/n)"< cin>>c; while(c!='y'&&c!='n') { cout<<"指令错误!!!!!<请输入y/n!!!!!!>"< cin>>c; } } if(flag==0) { cout<<"对不起!您要查询的学生不存在!!!!!!!"< cout<<"您想继续查询吗?(y/n)"< cin>>c; while(c!='y'&&c!='n') { cout<<"指令错误!!!!!<请输入y/n!!!!!!>"< cin>>c; } } }while(c=='y'); } void search2()//按学号查询 { char c; string no; do { student *stu=head->next; bool flag=0; cout<<"请输入您要查询的学生学号:"< cin>>no; for(int i2=1;i2<=amount;i2++) { if(no==stu->number) {flag=1; cout<<"您要查询的学生是:"< cout<<" 学号姓名性别数据结构英语数学体育概率平均分"< cout< cout< cout< cout< cout< cout< cout< cout< cout< cout< break; } else stu=stu->next; }//for if(flag==1) { cout<<"您想继续查询吗?(y/n)"< cin>>c; while(c!='y'&&c!='n') { cout<<"指令错误!!!!!<请输入y/n!!!!!!>"< cin>>c; } } if(flag==0) { cout<<"对不起!您要查询的学生不存在!!!!!!!"< cout<<"您想继续查询吗?(y/n)"< cin>>c; while(c!='y'&&c!='n') { cout<<"指令错误!!!!!<请输入y/n!!!!!!>"< cin>>c; } } }while(c=='y'); } void change1()//修改学生数据,按姓名修改 { string name; char c; do { bool flag=0; student *stu=head; score chengji; cout<<"请输入您要修改的学生的姓名:"< cin>>name; do { if(name==(*stu).name) { flag=1; cout<<"请输入新的数据结构成绩:"< cin>>chengji.sjjg; (*stu).chengji.sjjg=chengji.sjjg; cout<<"请输入新的英语成绩:"< cin>>chengji.yingyu; (*stu).chengji.yingyu=chengji.yingyu; cout<<"请输入新的数学成绩:"< cin>>chengji.shuxue; (*stu).chengji.shuxue=chengji.shuxue; cout<<"请输入新的体育成绩:"< cin>>chengji.tiyu; (*stu).chengji.tiyu=chengji.tiyu; cout<<"请输入新的概率成绩:"< cin>>chengji.gailv; (*stu).chengji.gailv=chengji.gailv; (*stu).average=0.2*((*stu).chengji.sjjg+(*stu).chengji.yingyu+(*stu).chengji.shuxue+(*stu).cheng ji.tiyu+(*stu).chengji.gailv); cout<<" 学号姓名性别数据结构英语数学体育概率平均分"< cout< cout< cout< cout< cout< cout< cout< cout< cout< cout< cout<<".......数据修改成功!\n"; break; } stu=stu->next; } while(stu!=NULL); if(flag==0) cout<<"对不起,您要修改的学生不存在!请重新输入!!!!!!"< cout<<"想继续修改吗?(y/n)"< cin>>c; while(c!='y'&&c!='n') { cout<<"指令错误<请输入y/n!>!!!!!!!"< cout<<"您想继续修改吗?(y/n)"< cin>>c; } } while(c=='y'); } void change2()//修改学生数据,按学号修改 { string number;char c; do { bool flag=0; student *stu=head; score chengji; cout<<"请输入您要修改的学生的学号:"< cin>>number; do { if(number==(*stu).number) { flag=1; cout<<"请输入新的数据结构成绩:"< cin>>chengji.sjjg; (*stu).chengji.sjjg=chengji.sjjg; cout<<"请输入新的英语成绩:"< cin>>chengji.yingyu; (*stu).chengji.yingyu=chengji.yingyu; cout<<"请输入新的数学成绩:"< cin>>chengji.shuxue; (*stu).chengji.shuxue=chengji.shuxue; cout<<"请输入新的体育成绩:"< cin>>chengji.tiyu; (*stu).chengji.tiyu=chengji.tiyu; cout<<"请输入新的概率成绩:"< cin>>chengji.gailv; (*stu).chengji.gailv=chengji.gailv; (*stu).average=0.2*((*stu).chengji.sjjg+(*stu).chengji.yingyu+(*stu).chengji.shuxue+(*stu).cheng ji.tiyu+(*stu).chengji.gailv); cout<<" 学号姓名性别数据结构英语数学体育概率平均分"< cout< cout< cout< cout< cout< cout< cout< cout< cout< cout< cout<<".......数据修改成功!\n"; break; } stu=stu->next; } while(stu!=NULL); if(flag==0) cout<<"对不起,您要修改的学生不存在!请重新输入!!!!!!"< cin>>c; while(c!='y'&&c!='n') { cout<<"指令错误<请输入y/n!>!!!!!!!"< cout<<"您想继续修改吗?(y/n)"<