学生作业完成情况管理程序.docx
《学生作业完成情况管理程序.docx》由会员分享,可在线阅读,更多相关《学生作业完成情况管理程序.docx(17页珍藏版)》请在冰豆网上搜索。
![学生作业完成情况管理程序.docx](https://file1.bdocx.com/fileroot1/2023-5/28/5f12781f-3afa-4d7e-a895-89eed828e2c3/5f12781f-3afa-4d7e-a895-89eed828e2c31.gif)
学生作业完成情况管理程序
天津城市建设学院
课程设计任务书
2011—2012学年第1学期
电子与信息工程系专业班级
课程设计名称:
数据结构课程设计
设计题目:
学生作业完成情况管理程序
完成期限:
自2012年1月2日至2012年1月6日共1周
设计依据、要求及主要内容(可另加附页):
一、设计目的
熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求
(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;
(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;
(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;
(4)认真编写课程设计报告。
三、设计内容
1)请设计一个学生作业完成情况管理程序。
假设某门课程一学期要留10次作业,每次老师要进行批改,给出分数后还要进行登记。
学期期末要根据每次作业的成绩计算出最终的平时成绩(满分100)。
作业登记信息应该包含:
学号、姓名、10次作业的完成情况。
2)基本要求
该程序应该具有下列功能:
(1)通过键盘输入某位学生某次作业的分数;
(2)给定学号,显示某位学生作业完成情况;
(3)给定某个班级的班号,显示该班所有学生的作业完成情况;
(4)给定某位学生的学号,修改该学生的作业完成信息;
(5)给定某位学生的学号,删除该学生的信息;
(6)按学生的最终平时成绩进行排序;
(7)输平均分数
一、需求分析
1.程序的功能
设计一个学生作业完成情况程序,实现对学生作业完成情况的修改,对学生信息的删除,对总成绩的排序,输出平均分数。
2.输入输出的要求
必须符合输入输出函数的定义。
3.测试数据
系统保存的学生信息:
stu1("1","David",1);
stu2("2","Mike",1);
stu3("3","Tom",2);
学号第几次作业成绩
1122
1233
1344
2155
2266
2377
3188
3299
33100
二、概要设计
1.程序设计组成框图
2.程序流程图
三、详细设计
1.函数的入口和出口
cout<<"-------------------输入操作1-78退出-------------------\n\n";
cout<<"
(1)通过键盘输入某位学生某次作业的分数,请按1\n";
cout<<"
(2)给定学号,显示某位学生作业完成情况,请按2\n";
cout<<"(3)给定某个班级的班号,显示该班所有学生的作业完成情况,请按3\n";
cout<<"(4)给定某位学生的学号,修改该学生的作业完成信息,请按4\n";
cout<<"(5)给定某位学生的学号,删除该学生的信息,请按5\n";
cout<<"(6)按学生的最终平时成绩进行排序,请按6\n";
cout<<"(7)输出平均分数,请按7\n";
cout<<"(8)退出,请按8\n\n";
2.主函数
voidmain(){
stringname,id;
doublepoint;
intindex,i,cls;
intselect;
vectorstudents;
Studentstu1("0001","Clark",1);
Studentstu2("0002","Mac",1);
Studentstu3("0003","Tim",2);
students.push_back(stu1);
students.push_back(stu2);
students.push_back(stu3);
3.成员函数
getTotal():
用来实现十次作业的情况输入和。
showHomework():
用来实现某个学生十次完成作业的情况。
getName():
让后面的类调用此函数,名字函数。
getId():
让后面的类调用此函数,学号函数,实现根据学号显示此学生的作业完成情况。
getSClass():
让后面的类调用此函数,班级函数,实现根据班级显示学生作业完成情况的功能。
SetPoint():
记录成绩函数,使后面的类调用此函数用来显示修改后的成绩。
getHomework():
获得作业完成情况函数,使后面的类调用此函数实现修改后的学生作业完成情况。
voidSort():
排序函数,使用快速排序实现对学生总成绩的排序。
四、调试分析
(1)在类中调用函数时,出现了一些错误,问题出现在调用时的函数变量和初始化函数时的变量不一致,然后又检查程序,将变量匹配。
(2)运用了快速排序的方法,到调用排序函数时出现变量不匹配,检查程序,并修改。
(3)在输出平均成绩的时候,循环出现错误,没有语法错误,但是输出结果与正确结果不一致,后来发现是最后输出在循环内,所以又进行了修改。
(4)运用了容器vector,在用之前并不熟悉这个功能,也出现了不少错误,比如它的定义,装载,输出,最后通过上网了解了容器的功能对程序加以修改直至没有错误。
(5)运用了map功能,这个功能适用于对这次设计的查询并修改的程序,使程序更优化。
(6)对数据结构有了进一步的理解,使用算法后可以使设计思路更加清晰,对所学过东西的结合,也学了新的东西vector,map。
五、核心源程序清单和执行结果
1.程序清单
#include
#include
#include//属于STL库,为了把c和c++分开
#include
usingnamespacestd;
classStudent{
stringid;//学生学号
stringname;//学生姓名
intsClass;//学生所正在班级
doublesum;//所有作业成绩之和
doublehomework[10];//十次作业完成情况及成绩
enum{unfinished=-1};//枚举类型,枚举初始化,将学生完成情况一一枚举出来,等待成绩赋值
public:
Student(stringid,stringna,intcls):
name(na),id(id),sClass(cls){//构造函数赋值
for(inti=0;i<10;i++)
homework[i]=unfinished;//初始化学生的10次作业都是未完成的
}
voidsetPoint(intindex,doublepoint){//录入成绩函数,index是每次作业计数,point是作业分数
homework[index-1]=point;//把每次作业成绩赋给作业完成情况
}
doublegetHomework(intindex){//得到作业完成情况函数
returnhomework[index-1];
}
doublegetTotal(){//作业总成绩函数
sum=0;
for(inti=0;i<10;i++)
if(homework[i]!
=unfinished)
sum+=homework[i];
returnsum;
}
voidshowHomework(){//显示最后学生作业完成情况函数
for(inti=0;i<10;i++)
if(homework[i]==unfinished)
cout<<"unfinished\t";
else
cout<cout<<"\n";
}
stringgetName(){//初始化学生姓名函数
returnname;
}
stringgetId(){//初始化学生学号函数
returnid;
}
intgetSClass(){//初始化学生所在班级函数
returnsClass;
}
};
voidsort(ints,intt,doublea[],stringb[]){//快速排序,排序平均成绩
inti,j;
doublex;
stringy;
i=s;
j=t;
x=a[i];
y=b[i];
while(i!
=j)
{while((j>i)&&(a[j]>=x))j--;
if(j>i)
{a[i]=a[j];b[i]=b[j];i++;}
while((j>i)&&(a[i]<=x))i++;
if(j>i)
{a[j]=a[i];b[j]=b[i];j--;}
}
a[i]=x;
b[i]=y;
i++;j--;
if(j>s)sort(s,j,a,b);
if(i}
voidmain(){
stringname,id;
doublepoint;
intindex,i,cls;
intselect;
vectorstudents;//定义容器students
Studentstu1("1","David",1);//把三个学生信息存到容器中
Studentstu2("2","Mike",1);
Studentstu3("3","Tom",2);
students.push_back(stu1);
students.push_back(stu2);
students.push_back(stu3);
doublea[1000];
stringb[1000];
cout<<"-------------------输入操作1-78退出-------------------\n\n";
cout<<"
(1)通过键盘输入某位学生某次作业的分数,请按1\n";
cout<<"
(2)给定学号,显示某位学生作业完成情况,请按2\n";
cout<<"(3)给定某个班级的班号,显示该班所有学生的作业完成情况,请按3\n";
cout<<"(4)给定某位学生的学号,修改该学生的作业完成信息,请按4\n";
cout<<"(5)给定某位学生的学号,删除该学生的信息,请按5\n";
cout<<"(6)按学生的最终平时成绩进行排序,请按6\n";
cout<<"(7)输出平均分数,请按7\n";
cout<<"(8)退出,请按8\n\n";
while(true){
cout<<"输入操作1-78退出\n";
doubletol=0;
cin>>select;
switch(select){
case1:
cout<<"输入某位学生学号某次作业的分数\n";//1号功能
cin>>id>>index>>point;
for(i=0;iif(id==students[i].getId())
students[i].setPoint(index,point);
break;
case2:
cout<<"给定学号,显示某位学生作业完成情况\n";//2号功能
cin>>id;
for(i=0;iif(id==students[i].getId())
students[i].showHomework();
break;
case3:
cout<<"给定某个班级的班号,显示该班所有学生的作业完成情况\n";//3号功能
cin>>cls;
for(i=0;iif(cls==students[i].getSClass()){
cout<students[i].showHomework();
}
break;
case4:
cout<<"给定某位学生的学号,修改该学生的作业完成信息为未完成\n";//4号功能
cin>>id>>index;
for(i=0;ifor(i=0;iif(id==students[i].getId())
students[i].setPoint(index,-1);
break;
case5:
cout<<"给定某位学生的学号,删除该学生的信息\n";//5号功能
cin>>id;
for(i=0;iif(id==students[i].getId())
students.erase(&students[i]);
break;
case6:
cout<<"按学生的最终平时成绩进行排序\n";//6号功能
for(i=0;ia[i+1]=students[i].getTotal(),b[i+1]=students[i].getName();
sort(1,students.size(),a,b);
for(i=students.size();i>=1;i--){
cout<
cout<}
break;
case7:
cout<<"输出平均分数\n";//7号功能
for(i=0;i{
tol+=students[i].getTotal();
}
cout<cout<break;
default:
return;
}//switch
}//while
}
2.执行结果
-------------------输入操作1-78退出-------------------
(1)通过键盘输入某位学生某次作业的分数,请按1
(2)给定学号,显示某位学生作业完成情况,请按2
(3)给定某个班级的班号,显示该班所有学生的作业完成情况,请按3
(4)给定某位学生的学号,修改该学生的作业完成信息,请按4
(5)给定某位学生的学号,删除该学生的信息,请按5
(6)按学生的最终平时成绩进行排序,请按6
(7)输出平均分数,请按7
(8)退出,请按8
输入操作1-78退出
1
输入某位学生学号某次作业的分数
1
1
22
输入操作1-78退出
1
输入某位学生学号某次作业的分数
1
2
33
输入操作1-78退出
1
输入某位学生学号某次作业的分数
1
3
44
输入操作1-78退出
1
输入某位学生学号某次作业的分数
2
1
55
输入操作1-78退出
1
输入某位学生学号某次作业的分数
2
2
66
输入操作1-78退出
1
输入某位学生学号某次作业的分数
2
3
77
输入操作1-78退出
1
输入某位学生学号某次作业的分数
3
1
88
输入操作1-78退出
1
输入某位学生学号某次作业的分数
3
2
99
输入操作1-78退出
1
输入某位学生学号某次作业的分数
3
3
100
输入操作1-78退出
6
按学生的最终平时成绩进行排序
Tom287
Mike198
David99
输入操作1-78退出
7
输出平均分数
194.667
输入操作1-78退出
2
给定学号,显示某位学生作业完成情况
2
556677unfinishedunfinishedunfinishedunfinish
edunfinishedunfinishedunfinished
输入操作1-78退出
3
给定某个班级的班号,显示该班所有学生的作业完成情况
1
David
223344unfinishedunfinishedunfinishedunfinish
edunfinishedunfinishedunfinished
Mike
556677unfinishedunfinishedunfinishedunfinish
edunfinishedunfinishedunfinished
输入操作1-78退出
4
给定某位学生的学号,修改该学生的作业完成信息为未完成
3
2
输入操作1-78退出
2
给定学号,显示某位学生作业完成情况
3
88unfinished100unfinishedunfinishedunfinished
unfinishedunfinishedunfinishedunfinished
输入操作1-78退出
5
给定某位学生的学号,删除该学生的信息
2
输入操作1-78退出
2
给定学号,显示某位学生作业完成情况
2
输入操作1-78退出
六、参考文献
[1]《数据结构》.王红梅.清华大学出版社
[2]《数据结构学习辅导与实验指导》.王红梅.清华大学出版社
[3]《C++程序设计》.钱能.清华大学出版社
[4]《C++程序设计试验指导》.钱能.清华大学出版社
[5]《C++程序设计》.谭浩强.清华大学出版社