《 面向对象程序设计》课程设计实验报告.docx

上传人:b****3 文档编号:27557484 上传时间:2023-07-02 格式:DOCX 页数:27 大小:182.75KB
下载 相关 举报
《 面向对象程序设计》课程设计实验报告.docx_第1页
第1页 / 共27页
《 面向对象程序设计》课程设计实验报告.docx_第2页
第2页 / 共27页
《 面向对象程序设计》课程设计实验报告.docx_第3页
第3页 / 共27页
《 面向对象程序设计》课程设计实验报告.docx_第4页
第4页 / 共27页
《 面向对象程序设计》课程设计实验报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

《 面向对象程序设计》课程设计实验报告.docx

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

《 面向对象程序设计》课程设计实验报告.docx

《面向对象程序设计》课程设计实验报告

《面向对象程序设计》课程设计

 

指导教师

小组成员:

专业班级:

2010级计算机科学与技术专业

开设时间:

2011-2012

(一)

 

目录

1.任务1……………………………………………………………2

1.1任务介绍……………………………………………2

1.2小组成员任务分配…………………………………2

1.3.1设计思想及主要流程图…………………………2

1.3.1主要程序清单……………………………………2

1.3.1运行结果及分析…………………………………4

1.3.2设计思想及主要流程图…………………………2

1.3.2主要程序清单……………………………………2

1.3.2运行结果及分析…………………………………4

1.3.3设计思想及主要流程图…………………………2

1.3.3主要程序清单……………………………………2

1.3.3运行结果及分析…………………………………4

2.任务2…………………………………………………………2

2.1任务介绍……………………………………………2

2.2小组成员任务分配…………………………………2

2.3设计思想及主要流程图……………………………2

2.3主要程序清单………………………………………2

2.3运行结果及分析……………………………………4

3收获、体会和建议……………………………………4

 

任务1.按照要求设计类

1.根据输出设计类

设计类就是根据数据封装的要求,抽象出适合的类。

有如下测试程序和测试程序的输出结果,要求设计类Welcome。

voidmain()

{

Welcomewe;

Welcomeyou(we);

you.Display();

you.Set(“Thankyou.”);

cout<

you.talk();

you.Display();

}

测试程序的输出结果如右:

设计类Welcome的原则

1)在头文件Cpp1.h中声明类

2)在Cpp1.cpp中实现类

3)使用内联函数定义Display()函数

2.使用类改写程序

编写一个求方程

的根的程序,用三个函数分别求当

大于零、等于零和小于零时方程的根。

要求从主函数输入a、b、c的值并输出结果。

使用面向过程的解法一般是把变量设为double型,适用库函数cmath进行计算。

请注意:

使用面向对象的方法解决这个问题,首先要从解一元二次方程出发,抽象一个代表一元二次方程的类。

为了使用这个类,必须根据要结局的问题,为这个类设计合适的数据成员和成员函数。

3.使用包含(聚合)和派生设计新类

(1)使用包含的方法,编写一个点类Point和线段类Line,演示构造函数、复制构造函数、析构函数作用及其调用顺序;

(2)使用派生的方法,编写一个点类Point,然后由它派生线段类,并演示构造函数、复制构造函数、析构函数作用及其调用顺序。

 

任务1:

小组成员任务分配:

李小拉:

任务一中的第一个任务(包括设计思想,流程图,程序编写)

胡海薇:

任务一中的第二个任务(包括设计思想,流程图,程序编写)

周子研:

任务一中的第三个任务(包括设计思想,流程图,程序编写)

最后的结果分析大家一起分析与总结

设计思想:

1.根据所给的主函数及运行结果来分析,类welcome包含成员函数和数据成员,输入数据和输出数据都将会显示出来,当输入OK时结束输出数据,最后调用析构函数。

2.根据题意求二元一次方程的跟,并且要用成员函数和数据成员,应该首先判断是否是二元一次方程,然后再判断有无根,利用选择函数分别调用1个,0个,2个根的函数并将其输出。

每输出一个方程的跟后再选择是否要继续。

3.1)

2)先定义一个point类,再由point类派生出line类,利用构造函数,复制构造函数和析构函数来计算出点点之间的距离也就是线的长度。

 

任务1:

1

//Cpp1.h

#include

#include//函数strcpy(),stcmy()包含在此头文件中

usingnamespacestd;

classWelcome

{

private:

charstr[100];

public:

Welcome(chars[]="Welcome!

");

Welcome(Welcome&);

voidSet(char[]);

voidDisplay();

char*Get();

voidtalk();

~Welcome();

};

//Cpp1.cpp

#include

#include

#include"Cpp1.h"

usingnamespacestd;

Welcome:

:

Welcome(chars[])

{strcpy(str,s);}//把字符串数组s中的所有字符,拷贝到字符串数组str中

Welcome:

:

Welcome(Welcome&c)//拷贝构造函数

{strcpy(str,c.str);}

voidWelcome:

:

Set(chars[])

{strcpy(str,s);}

inlinevoidWelcome:

:

Display()

{

cout<

}

char*Welcome:

:

Get()

{

returnstr;

}

Welcome:

:

~Welcome()

{

cout<<"Goodbye!

"<

}

voidWelcome:

:

talk()

{

chars[100];

cout<<"输入:

";

cin.getline(s,100);

while(strcmp(s,"OK")!

=0)//s不等于"OK"时,循环输出及输出

{

cout<<"输出:

"<

cout<<"输入:

";

cin.getline(s,128);

}

strcpy(str,"OK");

cout<<"Allright!

"<

cout<<"Goodbye!

"<

}

voidmain()

{

Welcomewe;

Welcomeyou(we);

you.Display();

you.Set("Thankyou.");

cout<

you.talk();

you.Display();

}

 

结果分析:

该程序采用了多文件结构,利用构造函数、析构函数和复制构造函数将结果输出。

前面先自动输出Welcome!

和Thankyou.然后调用函数自己输入什么就输出什么。

左后当遇到OK时输出“Allright!

”和“Goodbye!

”最后调用析构函数输出“Goodbye!

任务2

 

#include//包含iostream的头文件

FindRoot

a,b,c,d,p,q:

float

x1,x2:

double

FindRoot

Find:

void

GTzero:

void

EQzero:

void

LTzero:

void

#include

#include//字符串处理函数

usingnamespacestd;

classFindRoot//定义类FindRoot

{

private:

floata,b,c;

doubler,q,x1,x2;//定义数据成员类型

intjud;

public:

voidInput();//输入函数

voidDisplay();//显示函数

voidFind();//求根函数

};

//以上是类的声明部分,以下是类的实现部分

voidFindRoot:

:

Input()

{cout<<"这是一个求解ax2+bx+c=0的根的程序:

"<

for(;;)

{

cout<<"输入方程系数a:

";

cin>>a;

if(a==0)

cout<<"错误:

a不能为0!

!

!

"<

elsebreak;

}//输入a,并对a的可能情况进行判断

cout<<"输入方程系数b:

";

cin>>b;//输入b

cout<<"输入方程系数c:

";

cin>>c;//输入c

}

voidFindRoot:

:

Find()//定义求根的函数

{

floatdelta=b*b-4*a*c;//定义求根公式的数据类型

if(delta<0)

{jud=0;

r=-b/(2*a);

q=sqrt(-delta)/(2*a);//有两个共轭复数根的情况

}

elseif(delta==0)

{x1=-b/(2*a);

jud=1;}//有两个相同的根的情况

else

{x1=(-b+sqrt(delta))/(2*a);

x2=(-b-sqrt(delta))/(2*a);

jud=2;}//有两个不同的根的情况

}

voidFindRoot:

:

Display()//定义显示函数

{

switch(jud)

{

case0:

{cout<<"x1="<

cout<<"x2="<

case1:

cout<<"x1=x2="<

case2:

cout<<"x1="<

}

}

voidmain()//主函数

{

while

(1)

{

FindRootf;//定义类型

f.Input();

f.Find();

f.Display();//以上各函数按顺序执行

cout<<"是否退出?

(Y退出,其它任意键继续)"<

charm[2];charY[]="Y";chary[]="y";//定义字符串

cin>>m;

if(strcmp(m,Y)==0||strcmp(m,y)==0)

break;//如果退出则终止运行

else

cout<<"请继续……"<

}

}

任务3

#include

#include

usingnamespacestd;

classPoint

{

public:

Point(doublex1=0,doubley1=0){px=x1;py=y1;};

voidDisplay(void);

doubleDistance(Point&point);

~Point(){};

doublepx,py;

};

doublePoint:

:

Distance(Point&point)

{

doublet1,t2;

t1=point.px-px;

t2=point.py-py;

returnsqrt(t1*t1+t2*t2);

}

classLine:

publicPoint

{

public:

Line(doublex1,doubley1,doublex2,doubley2);

Line(Line&line);

doubleDisplay(Line&line);

~Line();

doublex,y;

};

Line:

:

Line(doublex1,doubley1,doublex2,doubley2)

{x=x2-x1;

y=y2-y1;

}

Line:

:

Line(Line&line)

{x=line.x;

y=line.y;}

doubleLine:

:

Display(Line&line)

{returnsqrt(x*x+y*y);}

Line:

:

~Line(){};

voidmain()

{Pointa;

Pointb(1,1),c(2,2);

a=c;

cout<<"两点之间的距离为:

"<

Lines(1,1,2,2);

Lines1(s);

cout<

结果分析:

主要利用函数来实现根的求解。

先判断a是否为0,若a=0则输出“a不能为0!

”不为0则继续输入bc,根据求根公式分别调用函数,实现不同的功能。

#include

usingnamespacestd;

classPoint//Point类声明

{

public:

Point(intxx=0,intyy=0){X=xx;Y=yy;}

Point(Point&p);

intGetX(){returnX;}

intGetY(){returnY;}

private:

intX,Y;

};

Point:

:

Point(Point&p)//拷贝构造函数的实现

{

X=p.X;

Y=p.Y;

}

classLine//Line类的声明

{

public:

//外部接口

Line(Pointxp1,Pointxp2);

Line(Line&);

doubleGetLen(){returnlen;}

~Line(){cout<<"end"<

private:

//私有数据成员

Pointp1,p2;//Point类的对象p1,p2

doublelen;

};//组合类的构造函数

Line:

:

Line(Pointxp1,Pointxp2):

p1(xp1),p2(xp2)

{

doublex=double(p1.GetX()-p2.GetX());

doubley=double(p1.GetY()-p2.GetY());

len=sqrt(x*x+y*y);

}

//组合类的拷贝构造函数

Line:

:

Line(Line&Seg):

p1(Seg.p1),p2(Seg.p2)

{

len=Seg.len;

}

//主函数

voidmain()

{

Pointmyp1(0,3),myp2(4,0);//建立Point类的对象

Lineline(myp1,myp2);//建立Line类的对象

Lineline2(line);//利用拷贝构造函数建立一个新对象

cout<<"Thelengthofthelineis:

";

cout<

cout<<"Thelengthoftheline2is:

";

cout<

}

#include

#include

usingnamespacestd;

classPoint

{

public:

Point(doublex1=0,doubley1=0){px=x1;py=y1;};

voidDisplay(void);

doubleDistance(Point&point);

~Point(){};

doublepx,py;

};

doublePoint:

:

Distance(Point&point)

{

doublet1,t2;

t1=point.px-px;

t2=point.py-py;

returnsqrt(t1*t1+t2*t2);

}

classLine:

publicPoint

{

public:

Line(doublex1,doubley1,doublex2,doubley2);

Line(Line&line);

doubleDisplay(Line&line);

~Line();

doublex,y;

};

Line:

:

Line(doublex1,doubley1,doublex2,doubley2)

{

x=x2-x1;

y=y2-y1;

}

Line:

:

Line(Line&line)

{

x=line.x;

y=line.y;

}

doubleLine:

:

Display(Line&line)

{

returnsqrt(x*x+y*y);

}

Line:

:

~Line(){};

voidmain()

{

Pointa;

Pointb(1,1),c(2,2);

a=c;

cout<<"两点之间的距离为:

"<

Lines(1,1,2,2);

Lines1(s);

cout<

}

任务2.人力资源管理系统(局部)

某小型公司,主要有四类人员:

经理、兼职技术人员、销售经理和兼职推销员。

现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。

人员编号基数为1000,每输入一个人员信息编号顺序加1。

月薪计算方法:

(1)经理拿固定月薪8000元;

(2)兼职技术人员按每小时100元领取月薪;

(3)兼职推销员的月薪按该推销员当月销售额的4%提成;

(4)销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5%。

程序要对所有人员有提升级别的功能。

可将所有人员的初始级别均定为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,销售人员仍为1级。

(本项提升级别的方法可以自行确定。

设计要求:

在附件中给出的资料基础上进行完善。

完成类的设计

(1)按照给定资料,设计类

(2)进行类成员函数的实现

(3)给出代码的注释

(4)画出系统中出现的类的类图

屏幕显示采用菜单形式

整体功能

(1)可以随时通过雇员的名字查询他的工资情况。

(2)有查询结束标志。

(3)有查询提示。

小组成员任务分配:

小组成员都参与了这次的程序设计,一起讨论并且交换设计思想,一起设计流程图,一起将其改成与题目相符合的程序。

最后一起分析完成这次的设计。

 

//3.cpp

#include

#include"date1.h"

#include"string.h"

usingstd:

:

string;

intmain()

{

managerm1;

techniciant1;

salesmanagersm1;

salesmans1;

m1.promote(3);

m1.pay();

//m1.displayStatus();

cout<<"*******************************************"<

cout<<""<

t1.promote

(2);

t1.pay();

//t1.displayStatus();

cout<<""<

cout<<"*******************************************"<

cout<<""<

sm1.promote

(2);

sm1.pay();

//sm1.displayStatus();

cout<<""<

cout<<"*******************************************"<

cout<<""<

s1.pay();

//s1.displayStatus();

cout<<""<

cout<<"*******************************************"<

cout<<""<

employeee[4]={m1,t1,sm1,s1};

while(true){

charchazhao[50];

cout<<"请输入要查找的雇员姓名:

";

cin>>chazhao;

stringemName=chazhao;

for(inti=0;i<4;i++)

{

employeeem=e[i];

if(strcmp(em.name.c_str(),chazhao)==0)

{

em.pay();

em.displayStatus();

}

}

cout<<"是否退出?

(Y退出,其它任意键继续)"<

charm[2];charY[]="Y";chary[]="y";

cin>>m;

if(strcmp(m,Y)==0||strcmp(m,y)==0)

break;

else

cout<<"继续..."<

}

return0;

}

//3.h

#include

#include"string.h"

usingstd:

:

string;

classemployee

{protected:

intindividualEmpNo;

intgrade;

floataccumPay;

staticintemployeeNo;

stringzhiwu;

public:

employee();

~employee();

voidpay();

stringname;

voidpromote(intincrement);

voiddisplayStatus(){cout<<"";

cout<

cout<

cout<<"编号"<

};

classtechnician:

publicemployee

{private:

floathourlyRate;

intworkHours;

public:

technician();

voidpay();

};

classs

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

当前位置:首页 > 外语学习 > 法语学习

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

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