天津城市建设学院
课程设计任务书
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) 输平均分数
目录
一、需求分析 ....................................................... 2
1、1.程序的功能 ................................................ 2 2、2.输入输出的要求 ............................................ 2 3、3.测试数据 .................................................. 2 二、概要设计 ....................................................... 3
4、1.程序设计组成框图 .......................................... 3 5、2.程序流程图 ................................................ 4 ................................................................... 4 三、详细设计 ....................................................... 4
6、1.函数的入口和出口 .......................................... 4 7、2.主函数 .................................................... 4 8、3.成员函数 .................................................. 5 四、调试分析 ....................................................... 5 五、核心源程序清单和执行结果 ....................................... 6
9、1.程序清单 .................................................. 6 10、 ............................................................................................................ 2
.执行结果 .................................................. 10
六、参考文献 ...................................................... 12
一、需求分析
1.程序的功能
设计一个学生作业完成情况程序,实现对学生作业完成情况的修改,对学生信息的删除,对总成绩的排序,输出平均分数。 2.输入输出的要求
必须符合输入输出函数的定义。 3.测试数据
系统保存的学生信息: stu1("1","David",1); stu2("2","Mike",1); stu3("3","Tom",2);
学号 第几次作业 成绩 1 1 22 1 2 33 1 3 44 2 1 55 2 2 66 2 3 77 3 1 88 3 2 99 3 3 100
二、概要设计
1.程序设计组成框图
在主函数main()中调用各函数
定义学生作业情况的一维数组
声明student类
以菜单形式提示输入
用switch语句对输入作出反应实现输出
各学生学
号
各学生姓
名
学生班级 在类中调
用setPoint 等函数
学号、姓名、10次作业的完成情况
2.程序流程图
三、详细设计
1.函数的入口和出口
cout
cout
void main(){
string name,id; double point; int index,i,cls;
int select;
vector students; Student stu1("0001","Clark",1); Student stu2("0002","Mac",1); Student stu3("0003","Tim",2); students.push_back(stu1); students.push_back(stu2); students.push_back(stu3);
3.成员函数
getTotal():用来实现十次作业的情况输入和。
showHomework():用来实现某个学生十次完成作业的情况。 getName():让后面的类调用此函数,名字函数。
getId():让后面的类调用此函数,学号函数,实现根据学号显示此学生的作业完成情况。 getSClass():让后面的类调用此函数,班级函数,实现根据班级显示学生作业完成情况的功能。
SetPoint():记录成绩函数,使后面的类调用此函数用来显示修改后的成绩。
getHomework():获得作业完成情况函数,使后面的类调用此函数实现修改后的学生作业完成情况。
void Sort():排序函数,使用快速排序实现对学生总成绩的排序。
四、调试分析
(1)在类中调用函数时,出现了一些错误,问题出现在调用时的函数变量和初始化函数时的变量不一致,然后又检查程序,将变量匹配。
(2)运用了快速排序的方法,到调用排序函数时出现变量不匹配,检查程序,并修改。 (3)在输出平均成绩的时候,循环出现错误,没有语法错误,但是输出结果与正确结果不一致,后来发现是最后输出在循环内,所以又进行了修改。
(4)运用了容器vector,在用之前并不熟悉这个功能,也出现了不少错误,比如它的定义,装载,输出,最后通过上网了解了容器的功能对程序加以修改直至没有错误。
(5)运用了map功能,这个功能适用于对这次设计的查询并修改的程序,使程序更优化。(6)对数据结构有了进一步的理解,使用算法后可以使设计思路更加清晰,对所学过东西的结合,也学了新的东西vector,map。
五、核心源程序清单和执行结果
1.程序清单
#include #include
#include //属于STL库,为了把c和c++分开
#include //map是一种关联容器,它定义了一种数据结构,类似查表功能,每一个数据都有自己的键值,通过键值可以查找和排序相应的数 据 using namespace std; class Student{
string id; //学生学号 string name; //学生姓名
int sClass; //学生所正在班级 double sum; //所有作业成绩之和
double homework[10]; //十次作业完成情况及成绩
enum{unfinished=-1}; //枚举类型,枚举初始化,将学生完成情况一一枚举出来,等待成绩赋值 public:
Student(string id,string na,int cls):name(na),id(id),sClass(cls){ //构造函数赋值
for(int i=0;i
homework[i]=unfinished; //初始化学生的10次作业都是未完成的 } void setPoint(int index,double point){ //录入成绩函数,index是每次作业计数,point是作业分数
homework[index-1]=point; //把每次作业成绩赋给作业完成情况 }
double getHomework(int index){ //得到作业完成情况函数 return homework[index-1]; }
double getTotal(){ //作业总成绩函数 sum=0;
for(int i=0;i
if(homework[i]!=unfinished) sum+=homework[i]; return sum; }
void showHomework(){ //显示最后学生作业完成情况函数 for(int i=0;i
if(homework[i]==unfinished) cout
else
cout
string getName(){ //初始化学生姓名函数 return name; }
string getId(){ //初始化学生学号函数 return id; }
int getSClass(){ //初始化学生所在班级函数 return sClass; } };
void sort(int s ,int t,double a[],string b[]){ //int i,j; double x; string y; 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]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
void main(){
string name,id; double point; int index,i,cls; int select;
快速排序,排序平均成绩
vector students; //定义容器students
Student stu1("1","David",1); //把三个学生信息存到容器中 Student stu2("2","Mike",1); Student stu3("3","Tom",2);
students.push_back(stu1); students.push_back(stu2); students.push_back(stu3); double a[1000]; string b[1000];
cout
cout
cout
cout>select; switch(select){ case 1:
cout>id>>index>>point;
for(i=0;i
students[i].setPoint(index,point); break; case 2:
cout>id;
for( i=0;i
cout
cin>>cls;
for( i=0;i
号功能
if (cls==students[i].getSClass()){ cout
cout>id>>index;
for( i=0;i
students[i].setPoint(index,-1); break; case 5:
cout>id;
for( i=0;i
students.erase(&students[i]); break; case 6:
cout
a[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
break; case 7:
cout
tol+=students[i].getTotal(); }
cout
}//switch
}//while
}
2.执行结果
-------------------输入操作1-7 8退出-------------------
(1)通过键盘输入某位学生某次作业的分数,请按1
(2)给定学号,显示某位学生作业完成情况,请按2
(3)给定某个班级的班号,显示该班所有学生的作业完成情况,请按3
(4)给定某位学生的学号,修改该学生的作业完成信息,请按4
(5)给定某位学生的学号,删除该学生的信息,请按5
(6)按学生的最终平时成绩进行排序,请按6
(7)输出平均分数,请按7
(8)退出,请按8
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
1
1
22
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
1
2
33
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
1
3
44
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
2
1
55
输入操作1-7 8退出
10
1
输入某位学生学号某次作业的分数
2
2
66
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
2
3
77
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
3
1
88
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
3
2
99
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
3
3
100
输入操作1-7 8退出
6
按学生的最终平时成绩进行排序
Tom 287
Mike 198
David 99
输入操作1-7 8退出
7
输出平均分数
194.667
输入操作1-7 8退出
2
给定学号,显示某位学生作业完成情况
2
55 66 77 unfinished
11 unfinished unfinished
unfinish
ed unfinished unfinished unfinished
输入操作1-7 8退出
3
给定某个班级的班号,显示该班所有学生的作业完成情况
1
David
22 33 44 unfinished unfinished unfinished unfinish
ed unfinished unfinished unfinished
Mike
55 66 77 unfinished unfinished
unfinish
ed unfinished unfinished unfinished
输入操作1-7 8退出
4
给定某位学生的学号,修改该学生的作业完成信息为未完成
3
2
输入操作1-7 8退出
2
给定学号,显示某位学生作业完成情况
3
88 unfinished 100 unfinished unfinished unfinished
unfinished unfinished unfinished unfinished
输入操作1-7 8退出
5
给定某位学生的学号,删除该学生的信息
2
输入操作1-7 8退出
2
给定学号,显示某位学生作业完成情况
2
输入操作1-7 8退出
六、参考文献
[1]《数据结构》. 王红梅. 清华大学出版社
[2]《数据结构学习辅导与实验指导》. 王红梅. 清华大学出版社
[3]《C++程序设计》. 钱能. 清华大学出版社
[4]《C++程序设计试验指导》. 钱能. 清华大学出版社
[5]《C++程序设计》.谭浩强. 清华大学出版社
12 unfinished
13
天津城市建设学院
课程设计任务书
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) 输平均分数
目录
一、需求分析 ....................................................... 2
1、1.程序的功能 ................................................ 2 2、2.输入输出的要求 ............................................ 2 3、3.测试数据 .................................................. 2 二、概要设计 ....................................................... 3
4、1.程序设计组成框图 .......................................... 3 5、2.程序流程图 ................................................ 4 ................................................................... 4 三、详细设计 ....................................................... 4
6、1.函数的入口和出口 .......................................... 4 7、2.主函数 .................................................... 4 8、3.成员函数 .................................................. 5 四、调试分析 ....................................................... 5 五、核心源程序清单和执行结果 ....................................... 6
9、1.程序清单 .................................................. 6 10、 ............................................................................................................ 2
.执行结果 .................................................. 10
六、参考文献 ...................................................... 12
一、需求分析
1.程序的功能
设计一个学生作业完成情况程序,实现对学生作业完成情况的修改,对学生信息的删除,对总成绩的排序,输出平均分数。 2.输入输出的要求
必须符合输入输出函数的定义。 3.测试数据
系统保存的学生信息: stu1("1","David",1); stu2("2","Mike",1); stu3("3","Tom",2);
学号 第几次作业 成绩 1 1 22 1 2 33 1 3 44 2 1 55 2 2 66 2 3 77 3 1 88 3 2 99 3 3 100
二、概要设计
1.程序设计组成框图
在主函数main()中调用各函数
定义学生作业情况的一维数组
声明student类
以菜单形式提示输入
用switch语句对输入作出反应实现输出
各学生学
号
各学生姓
名
学生班级 在类中调
用setPoint 等函数
学号、姓名、10次作业的完成情况
2.程序流程图
三、详细设计
1.函数的入口和出口
cout
cout
void main(){
string name,id; double point; int index,i,cls;
int select;
vector students; Student stu1("0001","Clark",1); Student stu2("0002","Mac",1); Student stu3("0003","Tim",2); students.push_back(stu1); students.push_back(stu2); students.push_back(stu3);
3.成员函数
getTotal():用来实现十次作业的情况输入和。
showHomework():用来实现某个学生十次完成作业的情况。 getName():让后面的类调用此函数,名字函数。
getId():让后面的类调用此函数,学号函数,实现根据学号显示此学生的作业完成情况。 getSClass():让后面的类调用此函数,班级函数,实现根据班级显示学生作业完成情况的功能。
SetPoint():记录成绩函数,使后面的类调用此函数用来显示修改后的成绩。
getHomework():获得作业完成情况函数,使后面的类调用此函数实现修改后的学生作业完成情况。
void Sort():排序函数,使用快速排序实现对学生总成绩的排序。
四、调试分析
(1)在类中调用函数时,出现了一些错误,问题出现在调用时的函数变量和初始化函数时的变量不一致,然后又检查程序,将变量匹配。
(2)运用了快速排序的方法,到调用排序函数时出现变量不匹配,检查程序,并修改。 (3)在输出平均成绩的时候,循环出现错误,没有语法错误,但是输出结果与正确结果不一致,后来发现是最后输出在循环内,所以又进行了修改。
(4)运用了容器vector,在用之前并不熟悉这个功能,也出现了不少错误,比如它的定义,装载,输出,最后通过上网了解了容器的功能对程序加以修改直至没有错误。
(5)运用了map功能,这个功能适用于对这次设计的查询并修改的程序,使程序更优化。(6)对数据结构有了进一步的理解,使用算法后可以使设计思路更加清晰,对所学过东西的结合,也学了新的东西vector,map。
五、核心源程序清单和执行结果
1.程序清单
#include #include
#include //属于STL库,为了把c和c++分开
#include //map是一种关联容器,它定义了一种数据结构,类似查表功能,每一个数据都有自己的键值,通过键值可以查找和排序相应的数 据 using namespace std; class Student{
string id; //学生学号 string name; //学生姓名
int sClass; //学生所正在班级 double sum; //所有作业成绩之和
double homework[10]; //十次作业完成情况及成绩
enum{unfinished=-1}; //枚举类型,枚举初始化,将学生完成情况一一枚举出来,等待成绩赋值 public:
Student(string id,string na,int cls):name(na),id(id),sClass(cls){ //构造函数赋值
for(int i=0;i
homework[i]=unfinished; //初始化学生的10次作业都是未完成的 } void setPoint(int index,double point){ //录入成绩函数,index是每次作业计数,point是作业分数
homework[index-1]=point; //把每次作业成绩赋给作业完成情况 }
double getHomework(int index){ //得到作业完成情况函数 return homework[index-1]; }
double getTotal(){ //作业总成绩函数 sum=0;
for(int i=0;i
if(homework[i]!=unfinished) sum+=homework[i]; return sum; }
void showHomework(){ //显示最后学生作业完成情况函数 for(int i=0;i
if(homework[i]==unfinished) cout
else
cout
string getName(){ //初始化学生姓名函数 return name; }
string getId(){ //初始化学生学号函数 return id; }
int getSClass(){ //初始化学生所在班级函数 return sClass; } };
void sort(int s ,int t,double a[],string b[]){ //int i,j; double x; string y; 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]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
void main(){
string name,id; double point; int index,i,cls; int select;
快速排序,排序平均成绩
vector students; //定义容器students
Student stu1("1","David",1); //把三个学生信息存到容器中 Student stu2("2","Mike",1); Student stu3("3","Tom",2);
students.push_back(stu1); students.push_back(stu2); students.push_back(stu3); double a[1000]; string b[1000];
cout
cout
cout
cout>select; switch(select){ case 1:
cout>id>>index>>point;
for(i=0;i
students[i].setPoint(index,point); break; case 2:
cout>id;
for( i=0;i
cout
cin>>cls;
for( i=0;i
号功能
if (cls==students[i].getSClass()){ cout
cout>id>>index;
for( i=0;i
students[i].setPoint(index,-1); break; case 5:
cout>id;
for( i=0;i
students.erase(&students[i]); break; case 6:
cout
a[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
break; case 7:
cout
tol+=students[i].getTotal(); }
cout
}//switch
}//while
}
2.执行结果
-------------------输入操作1-7 8退出-------------------
(1)通过键盘输入某位学生某次作业的分数,请按1
(2)给定学号,显示某位学生作业完成情况,请按2
(3)给定某个班级的班号,显示该班所有学生的作业完成情况,请按3
(4)给定某位学生的学号,修改该学生的作业完成信息,请按4
(5)给定某位学生的学号,删除该学生的信息,请按5
(6)按学生的最终平时成绩进行排序,请按6
(7)输出平均分数,请按7
(8)退出,请按8
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
1
1
22
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
1
2
33
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
1
3
44
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
2
1
55
输入操作1-7 8退出
10
1
输入某位学生学号某次作业的分数
2
2
66
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
2
3
77
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
3
1
88
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
3
2
99
输入操作1-7 8退出
1
输入某位学生学号某次作业的分数
3
3
100
输入操作1-7 8退出
6
按学生的最终平时成绩进行排序
Tom 287
Mike 198
David 99
输入操作1-7 8退出
7
输出平均分数
194.667
输入操作1-7 8退出
2
给定学号,显示某位学生作业完成情况
2
55 66 77 unfinished
11 unfinished unfinished
unfinish
ed unfinished unfinished unfinished
输入操作1-7 8退出
3
给定某个班级的班号,显示该班所有学生的作业完成情况
1
David
22 33 44 unfinished unfinished unfinished unfinish
ed unfinished unfinished unfinished
Mike
55 66 77 unfinished unfinished
unfinish
ed unfinished unfinished unfinished
输入操作1-7 8退出
4
给定某位学生的学号,修改该学生的作业完成信息为未完成
3
2
输入操作1-7 8退出
2
给定学号,显示某位学生作业完成情况
3
88 unfinished 100 unfinished unfinished unfinished
unfinished unfinished unfinished unfinished
输入操作1-7 8退出
5
给定某位学生的学号,删除该学生的信息
2
输入操作1-7 8退出
2
给定学号,显示某位学生作业完成情况
2
输入操作1-7 8退出
六、参考文献
[1]《数据结构》. 王红梅. 清华大学出版社
[2]《数据结构学习辅导与实验指导》. 王红梅. 清华大学出版社
[3]《C++程序设计》. 钱能. 清华大学出版社
[4]《C++程序设计试验指导》. 钱能. 清华大学出版社
[5]《C++程序设计》.谭浩强. 清华大学出版社
12 unfinished
13