课程设计报告.docx
《课程设计报告.docx》由会员分享,可在线阅读,更多相关《课程设计报告.docx(40页珍藏版)》请在冰豆网上搜索。
课程设计报告
一、课程设计目的
1、使学生能够比较熟练地掌握C++语言的基本语法规则;
2、熟练掌握基本的面向对象的程序设计方法,如类的实现、创建类的实例—对象、实现类的继承等;
3、掌握各种面向对象的程序设计技术,如多态的实现、运算符重载、使用C++标准库等。
4、掌握在VC++平台上进行程序设计和调试的方法。
二、系统设计要求
题目1:
通过组合和派生构成新的类
本设计题目的任务是使用Point类产生Line类。
分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。
题目2:
人员信息管理系统
本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,完成显示不同人员信息的任务。
设计employee类,用来存储雇员的编号,级别,月薪等信息,能够对其进行操作和显示。
以employee为基类派生出technician类,表示兼职技术人员,以及manager类,表示经理,以及salesman类,表示兼职推销员。
利用manage类和salesman类派生出salesmanager类,表示销售经理。
注意使用虚基类。
进一步使用虚函数和抽象类改进上面的程序。
题目3:
成绩管理系统
输入一个班级的学生基本信息(包括学号,姓名,性别,科目),对N门考试的成绩进行管理
要求
●用户录入每个学生每门课程的分数;
●能够计算每个学生的各门功课总分和平均分,并按总分将成绩排序,显示每个学生的总分和排名;
●计算全班各门功课的平均分,显示每门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩等信息;
●显示每门科目中,成绩在90分以上的学生信息。
另外还输出每门科目中不及格的学生信息;
●能按姓名或者学号查找,增加,删除和保存各个学生的信息。
三、设计思路
1.1、
1.2、
2
3、
print()界面函数,主界面如下
SearchNo()按照编号查找学生信息
SaveInfo()将学生信息保存到文件
Setup()查找失败后创建一个新同学
Sort()学生成绩总分排序浏览
AveScore()计算各科平均成绩
Higer()查看成绩高于90分的学生信息
Failed()查看成绩不及格的学生信息
SearchName()按照姓名查找学生信息
exit(0)退出系统
四、调试过程
1.首先由于刚开始没读懂题意,我直接把课题一的模板类实现做成只有一个display()函数,根本没有真正显示出模板类的优点,后来通过和其他同学的讨论研究才发现自己在理解上有些偏差,于是我毫不犹豫地把原来学的程序放弃了,直接重新开始我的新任务,最后终于搞出来时,心情异常激动。
2.对于第二个课题,原本以为很简单的事,忽然发现运行时总是提醒调用了private的数据成员,搞得我很迷糊,虽然很努力的整天对着电脑修改错误,但结果收效甚微,错误没改好,貌似又出现了更多的错误,简直是一团乱麻,当时真想放弃,最终在同学的帮忙下终于做完,有点身心疲惫的感觉。
3.第三个题目很有挑战性,因为越做越觉得很吸引我,它一点一点促使我向前进。
在可以运行时我激动地搂着宿舍同学跳啊跳的,但是程序运行一段时间后就会自动中止,这让我很头疼,实在是有种受不了的感觉,看看其他同学也是很郁闷,但总不能只做一半就放弃,于是我上网看程序、图书馆查资料、看课本,终于成功了!
五、程序源代码
实验一
#include
#include
usingnamespacestd;
template
classPoint
{
public:
Point();//Point类的默认构造函数
Point(T,T,T);//Point类的带参数的构造函数
Point(Point&);//Point类的拷贝构造函数
~Point();//Point类的析构函数
voidsetx(Tx1)//设置x的函数
{
x=x1;
}
voidsety(Ty1)//设置y的函数
{
y=y1;
}
voidsetz(Tz1)//设置z的函数
{
z=z1;
}
Tgetx()//读取x的函数
{
returnx;
}
Tgety()//读取y的函数
{
returny;
}
Tgetz()//读取z的函数
{
returnz;
}
voiddisplay();//在屏幕上显示Point
protected:
Tx;//Point类的横坐标
Ty;//Point类的纵坐标
Tz;//Point类的竖坐标
};
template
Point:
:
Point()
{
x=y=z=0;
cout<<"Point类的默认构造函数被调用!
"<}
template
Point:
:
Point(Tx,Ty,Tz)
{
this->x=x;
this->y=y;
this->z=z;
cout<<"Point类的带参数的构造函数被调用!
"<}
template
Point:
:
Point(Point&p)
{
x=p.x;
y=p.y;
z=p.z;
cout<<"Point类的拷贝构造函数被调用!
"<}
template
Point:
:
~Point()
{
cout<<"Point类的析构函数被调用!
"<}
template
voidPoint:
:
display()
{
cout<<"("<}
template
classLine:
publicPoint
{
public:
Line();//Line类的默认构造函数
Line(T,T,T,T,T,T);//Line类的带参数的构造函数
Line(Line&);//Line类的拷贝构造函数
~Line();//Line类的析构函数
voidsetBeginPoint(Tx1,Ty1,Tz1)//设置起点
{
beginPoint.setx(x1);
beginPoint.sety(y1);
beginPoint.setz(z1);
}
voidsetEndPoint(Tx2,Ty2,Tz2)//设置终点
{
endPoint.setx(x2);
endPoint.sety(y2);
endPoint.setz(z2);
}
PointgetBeginPoint()//读取起点
{
returnbeginPoint;
}
PointgetEndPoint()//读取终点
{
returnendPoint;
}
voidcLength()//计算长度
{
Tl1;
l1=pow((endPoint.getx()-beginPoint.getx()),2)+pow((endPoint.gety()-beginPoint.gety()),2)
+pow((endPoint.getz()-beginPoint.getz()),2);
length=sqrt(l1);
}
TgetLength()//读取长度
{
returnlength;
}
voiddisplay();//在屏幕上显示Line
private:
PointbeginPoint;//起点
PointendPoint;//终点
Tlength;//长度
};
template
Line:
:
Line()
{
length=0.0;
cout<<"Line类的默认构造函数被调用!
"<}
template
Line:
:
Line(Tx1,Ty1,Tz1,Tx2,Ty2,Tz2):
beginPoint(x1,y1,z1),endPoint(x2,y2,z2)
{
cLength();
cout<<"Line类的带参数的构造函数被调用!
"<}
template
Line:
:
Line(Line&l):
beginPoint(l.beginPoint),endPoint(l.endPoint)
{
length=l.length;
cout<<"Line类的拷贝构造函数被调用!
"<}
template
Line:
:
~Line()
{
cout<<"Line类的析构函数被调用!
"<}
template
voidLine:
:
display()
{
beginPoint.display();
cout<<"->";
endPoint.display();
cout<<"它的长度是"<}
voidmain()
{
cout<<"创建Line类的对象时,不传递参数:
\n构造函数的调用顺序如下"<Lineline1;
line1.display();
cout<<"创建Line类的对象时,传递参数:
\n构造函数的调用顺序如下"<Lineline2(0,0,0,1,1,1);
line2.display();
cout<<"创建Line类的对象时,传递参数:
\n构造函数的调用顺序如下"<Lineline3(0.1,0.2,0.3,1.1,1.2,1.3);
line3.display();
cout<<"创建Line类的对象时,调用类的拷贝构造函数:
\n构造函数的调用顺序如下"<Lineline4(line3);
line4.display();
}
实验二
//Employee.h文件
#if!
definedEMPLOYEE_H
#defineEMPLOYEE_H
#include
#include
usingnamespacestd;
classEmployee
{
public:
Employee();//Employee类的默认的构造函数
Employee(string,string,string,float);//Employee类的带参数的构造函数
Employee(Employee&);//Employee类的拷贝构造函数
~Employee(){}//Employee类的析构函数
boolsetID(string);//设置编号的函数
boolsetName(string);//设置姓名的函数
boolsetGrade(string);//设置级别的函数
boolsetSalary(float);//设置月薪的函数
stringgetID()//读取编号的函数
{returnID;}
stringgetName()//读取姓名的函数
{returnname;}
stringgetGrade()//读取级别的函数
{returngrade;}
floatgetSalary()//读取月薪的函数
{returnsalary;}
virtualvoiddisplay(){}//在屏幕上显示雇员信息
protected:
stringID;
stringname;
stringgrade;
floatsalary;
};
Employee:
:
Employee()
{
ID="0000";
name="noname";
grade="0000";
salary=0.0;
}
Employee:
:
Employee(stringid,stringstrname,stringstrgrade,floats)
{
if(sizeof(id)!
=0)
ID=id;
if(sizeof(strname)!
=0)
name=strname;
if(sizeof(strgrade)!
=0)
grade=strgrade;
if(s>0)
salary=s;
}
Employee:
:
Employee(Employee&e)
{
ID=e.ID;
name=e.name;
grade=e.grade;
salary=e.salary;
}
boolEmployee:
:
setID(stringid)
{
if(sizeof(id)!
=0)
{
ID=id;
returntrue;
}
else
returnfalse;
}
boolEmployee:
:
setName(stringstrname)
{
if(sizeof(strname)!
=0)
{
name=strname;
returntrue;
}
else
returnfalse;
}
boolEmployee:
:
setGrade(stringstrgrade)
{
if(sizeof(strgrade)!
=0)
{
grade=strgrade;
returntrue;
}
else
returnfalse;
}
boolEmployee:
:
setSalary(floats)
{
if(s>0)
{
salary=s;
returntrue;
}
else
returnfalse;
}
#endif
//Technician.h文件
#if!
definedTECHNICIAN_H
#defineTECHNICIAN_H
#include"employee.h"
#include
#include
usingnamespacestd;
classTechnician:
publicEmployee//Technician技术人员类公有继承Employee雇员类
{
public:
Technician(){}//Technician类的默认的构造函数
Technician(stringid,stringstrname,stringstrgrade,floats);//Technician类的带参数的构造函数
Technician(Technician&);//Technician类的拷贝构造函数
~Technician(){}//Technician类的析构函数
voiddisplay();//在屏幕上显示Technician技术人员类的信息
};
Technician:
:
Technician(stringid,stringstrname,stringstrgrade,floats):
Employee(id,strname,strgrade,s)
{}
Technician:
:
Technician(Technician&t):
Employee(t)
{}
voidTechnician:
:
display()
{
cout<<"技术人员的个人信息如下:
"<cout<<"编号\t姓名\t级别\t\t月薪"<cout<}
#endif
//Salesman.h文件
#if!
definedSALESMAN_H
#defineSALESMAN_H
#include
#include"Employee.h"
#include
usingnamespacestd;
classSalesman:
virtualpublicEmployee//Salesman销售人员类公有继承Employee雇员类
{
public:
Salesman(){}//Salesman类的默认的构造函数
Salesman(stringid,stringstrname,stringstrgrade,floats);//Salesman类的带参数的构造函数
Salesman(Salesman&);//Salesman类的拷贝构造函数
~Salesman(){}//Salesman类的析构函数
voiddisplay();//在屏幕上显示Salesman销售人员类的信息
};
Salesman:
:
Salesman(stringid,stringstrname,stringstrgrade,floats):
Employee(id,strname,strgrade,s)
{}
Salesman:
:
Salesman(Salesman&s):
Employee(s)
{}
voidSalesman:
:
display()
{
cout<<"销售人员的个人信息如下:
"<cout<<"编号\t姓名\t级别\t\t月薪"<cout<}
#endif
//Manager.h文件
#if!
definedMANAGER_H
#defineMANAGER_H
#include
#include
#include"Employee.h"
usingnamespacestd;
classManager:
virtualpublicEmployee//Manager经理类公有继承Employee雇员类
{
public:
Manager(){}//Manager类的默认构造函数
Manager(stringid,stringstrname,stringstrgrade,floats);//Manager类的带参数的构造函数
Manager(Manager&);//Manager类的构造函数类
~Manager(){}//Manager类的析构函数
voiddisplay();//在屏幕上显示Manager经理类的信息
};
Manager:
:
Manager(stringid,stringstrname,stringstrgrade,floats):
Employee(id,strname,strgrade,s)
{}
Manager:
:
Manager(Manager&m):
Employee(m)
{}
voidManager:
:
display()
{
cout<<"经理的个人信息如下:
"<cout<<"编号\t姓名\t级别\t月薪"<cout<}
#endif
//Salesmanager.h文件
#if!
definedSALESMANAGER_H
#defineSALESMANAGER_H
#include
#include
#include"Salesman.h"
#include"Manager.h"
usingnamespacestd;
classSalesmanager:
publicManager,publicSalesman//Salesmanager销售经理类公有继承Employee雇员类
{
private:
stringID;
stringname;
stringgrade;
floatsalary;
public:
Salesmanager(){}//Salesmanager类的默认的构造函数
Salesmanager(stringid,stringstrname,stringstrgrade,floats);//Salesmanager类的带参数的构造函数
Salesmanager(Salesmanager&s);//Salesmanager类的拷贝构造函数
~Salesmanager(){}//Salesmanager类的析构函数
voiddisplay();//在屏幕上显示Salesmanager销售经理的信息
};
Salesmanager:
:
Salesmanager(stringid,stringstrname,stringstrgrade,floats):
Salesman(id,strname,strgrade,s),Manager(id,strname,strgrade,s)
{
ID=id;
name=strname;
grade=strgrade;
salary=s;
}
Salesmanager:
:
Salesmanager(Salesmanager&sm):
Salesman(sm),Manager(sm)
{
ID=sm.ID;
name=sm.name;
grade=sm.grade;
salary=sm.salary;
}
voidSalesmanager:
:
display()
{
cout<<"销售经理的个人信息如下:
"<cout<<"编号\t姓名\t级别\t\t月薪"<cout<}
#endif
//test2.cpp主函数
#include
#include
#include"Salesmanager.h"
#include"Technician.h"
usingnamespacestd;
voidcreatEmployeeArray(intcapacity)
{
stringid,strname,strgrade;
floats;
Employee*ptrToEmployee;
for(inti=0;i