资源描述
。
实验报告
实验课名称:数据结构实验
实验名称:考试日程安排与成绩统计问题
一、问题描述
l 现要安排考试的考表(即考试日程表),假设共有10个班的学生,要安排10门必修课程的考试,必修课程是以班级来确定的,每个班各有3门必修课,因此各班的考试科目是不相同的;安排考表的原则是:相同课程采用统一的试卷,因此同一门课程的考试必须在相同时间进行,同一个班所修的科目必须安排在不同的时间进行考试,以避免考试时间的冲突。并要求全部考试的日程尽可能短。
l 要求对考试结果做统计和排序。假设分别以编号0,1,2,3,4,5,6,7,8,9代表10门要考试的课程,以B1,B2,B3,B4,B5,B6,B7,B8,B9,B10代表10个班,每个人的信息包括学号、姓名、班级、各门考试课程成绩、三门课程总成绩,每个班的学生人数自行设定。要求设计一个简单的考试成绩的查询统计系统实现以下功能:
² 显示学生考试情况
-按考试总分从高到底输出全体学生的信息。
-按照从B1到B10的班级顺序,分班级按照考试总分从高到底的顺序输出各班学生的信息。
-输出指定班的学生考试成绩信息。
² 统计学生考试成绩
-按总成绩统计出90分以上、80~89分、70~79分、60~69分、60分以下各分数段的人数,并按总分从高到低分段输出。
-根据指定的某们课程的成绩,统计出上述各分数段的人数,并按分数从高到低分段输出。
-统计并输出指定班级中总成绩或某一门课成绩的各分数段人数和每个人具体的信息。
² 查找学生成绩
-查找总分或某一门课程成绩的指定分数段的人数及学生的详细信息。
-查找指定班级中总分或某一门课程成绩属于某分数段的学生详细信息。
-查找指定学生(例如给定学号)的具体信息,包括:姓名、班级、各科分数、总分数等。
二、数据结构设计
根据实验要求,对学生成绩的存储的数据结构如下:
typedef struct
{
char number[15];//学号
char name[100];//姓名
int fen[4];//成绩(分别为语文成绩、数学成绩、英语成绩、总分)
int n[2];//名次(n[0]为总分名次n[1]为单科名次)
}node;
typedef struct
{
node stu[maxsize+1]; //存放学生信息
int num; //存放学生人数
}SqList;
三、算法设计
根据问题要求,首先创建学生信息,输入各科成绩,计算总分,之后利用快速排序实现对学生单科及总分的排序,最后输出。
设计流程图如图1.1所示。
图1.1 设计流程图
(1) 数据输入
根据输入提示,对学生基本信息做相应的输入,其代码如下:
cout<<"请输入学生人数:"<<endl;
cin>>a.num;
for(i=1;i<=a.num;i++)//输入每个学生的三门成绩
{
cout<<"请输入第"<<i<<"个学生的学号和姓名:"<<endl;
cin>>a.stu[i].number;
cin>>a.stu[i].name;
cout<<"请输入第"<<i<<"个学生语文,数学,英语成绩:"<<endl;
cin>>a.stu[i].fen[0];
cin>>a.stu[i].fen[1];
cin>>a.stu[i].fen[2];
}
}
学生信息初始化完成后,在根据输入提示选择相应操作:
while(1)
{
cout<<"1.总分排序 "<<endl;
cout<<"2.语文排序 "<<endl;
cout<<"3.数学排序 "<<endl;
cout<<"4.英语排序 "<<endl;
cout<<"0.退 出 \n"<<endl;
cout<<"请选择:"<<endl;
cin>>choice;
switch(choice)
{
case 1:
……………………
case 2:
……………………
case 3:
……………………
case 4:
……………………
case 0:
return 0;
default:
cout<<"输入错误,请重新输入(0--4)"<<endl;
break;
}
}
(2) 创建学生信息并进行相应排序,本实验中采用快速排序,其代码如下:
int Partition(SqList &L,int low,int high,int i) //枢轴函数
{
int pivotkey; // 枢轴关键字
pivotkey=L.stu[low].fen[i];
L.stu[0]=L.stu[low];
while(low<high)
{
while(low<high&&L.stu[high].fen[i]>=pivotkey)
--high;
L.stu[low]=L.stu[high];
while(low<high&&L.stu[low].fen[i]<=pivotkey)
++low;
L.stu[high]=L.stu[low];
}
L.stu[low]=L.stu[0];
return low;
}
void QSort(SqList &L,int low,int high,int i) //快速排序函数
{
int pivotloc;
if(low<high)// 子序列长度大于1
{
pivotloc=Partition(L,low,high,i);
QSort(L,low,pivotloc-1,i); //递归快速排序
QSort(L,pivotloc+1,high,i); //递归快速排序
}
}
(3) 根据所选择的操作进行相应的输出,代码如下:
case 1:
QuickSort(x,3); place(x,0,3);//排序
display2(x);//调用输出函数
break;
case 2:
QuickSort(x,0); place(x,1,0); //排序
display3(x); //调用输出函数
break;
case 3:
QuickSort(x,1); place(x,1,1); //排序
display3(x); //调用输出函数
break;
case 4:
QuickSort(x,2); place(x,1,2); //排序
display3(x); //调用输出函数
break;
case 0:
return 0;
四、界面设计
程序包含输入提示功能和输出提示功能。
五、运行测试与分析
(1)运行程序,显示提示,如图1.2所示。
图1.2 启动界面
(2) 按要求输入学生数,学生信息和成绩,如图1.3所示。
图1.3 数据输入界面
(3)数据结果输出。根据实验要求输出实验结果。如图1.4所示。
图1.4 数据结果输出界面
六、实验收获与思考
通过本次实验,熟练掌握了对排序的理解,在本实验中,利用快速排序进行排序,更加加深了对快速排序的实现过程的理解。
教师评分:
教师签字:
THANKS !!!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考
-可编辑修改-
展开阅读全文