课程设计报告.docx

上传人:b****5 文档编号:8325184 上传时间:2023-01-30 格式:DOCX 页数:40 大小:319.69KB
下载 相关 举报
课程设计报告.docx_第1页
第1页 / 共40页
课程设计报告.docx_第2页
第2页 / 共40页
课程设计报告.docx_第3页
第3页 / 共40页
课程设计报告.docx_第4页
第4页 / 共40页
课程设计报告.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

课程设计报告.docx

《课程设计报告.docx》由会员分享,可在线阅读,更多相关《课程设计报告.docx(40页珍藏版)》请在冰豆网上搜索。

课程设计报告.docx

课程设计报告

一、课程设计目的

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1