[面向对象程序设计]课程设计实验报告 - 范文中心

[面向对象程序设计]课程设计实验报告

11/28

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

指导教师 小组成员:专业班级:开设时间:

实 验 报 告

级计算机科学与技术专业 2011-2012(一)

2010

目录

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。 void main() {

Welcome we; Welcome you(we); you.Display();

you.Set(“Thank you.”); cout

测试程序的输出结果如右: 设计类Welcome 的原则 1)在头文件Cpp1.h 中声明类 2)在Cpp1.cpp中实现类

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

2.使用类改写程序

22

编写一个求方程axbxc0的根的程序,用三个函数分别求当b4ac大于零、等于零和小于零时方程的根。要求从主函数输入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()包含在此头文件中

using namespace std;

class Welcome { private: char str[100]; public:

Welcome(char s[]="Welcome!"); Welcome (Welcome &); void Set(char []); void Display(); char *Get(); void talk(); ~Welcome(); };

//Cpp1.cpp

#include #include #include"Cpp1.h" using namespace std; Welcome::Welcome(char s[])

{strcpy(str,s);} //把字符串数组s中的所有字符,拷贝到字符串数组str中 Welcome::Welcome(Welcome &c) //拷贝构造函数 {strcpy(str,c.str);} void Welcome::Set(char s[]) {strcpy(str,s);}

inline void Welcome::Display() {

cout

char* Welcome::Get() {

return str; }

Welcome::~Welcome() {

cout

void Welcome::talk() {

char s[100]; cout

while(strcmp(s,"OK")!=0) //s不等于"OK"时,循环输出及输出 {

cout

strcpy(str,"OK"); cout

void main() {

Welcome we; Welcome you(we); you.Display(); you.Set("Thank you."); cout

结果分析:该程序采用了多文件结构,利用构造函数、析构函数和复制构造函数将结果输出。前面先自动输出Welcome!和Thank you.然后调用函数自己输入什么就输出什么。左后当遇到OK时输出“All right!”和“Goodbye!”最后调用析构函数输出“Goodbye!” 任务2

#include //包含iostream的头文件#include

#include//字符串处理函数 using namespace std;

class FindRoot//定义类FindRoot { private:

float a,b,c;

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

int jud; public:

void Input();//输入函数 void Display();//显示函数 void Find();//求根函数 };

//以上是类的声明部分,以下是类的实现部分 void FindRoot::Input()

{cout

cout>a; if(a==0)

cout

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

cout>c;//输入c }

void FindRoot::Find()//定义求根的函数 {

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

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

}

else if(delta==0) { x1=-b/(2*a);

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

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

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

void FindRoot::Display()//定义显示函数 { }

void main()//主函数 {

while(1) {

switch(jud) { case 0:

{cout

cout

cout

cout

的解

FindRoot f;//定义类型 f.Input(); f.Find();

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

cout>m;

if(strcmp(m,Y)==0||strcmp(m,y)==0) break;//如果退出则终止运行 else

cout

}

任务3

#include #include using namespace std; class Point { public:

Point(double x1=0, double y1=0){px = x1; py = y1;}; void Display(void);

double Distance(Point &point); ~ Point(){}; double px, py; };

double Point::Distance(Point &point) {

double t1, t2; t1 = point.px - px; t2 = point.py - py; return sqrt(t1*t1+t2*t2); }

class Line:public Point { public:

Line(double x1, double y1, double x2, double y2); Line (Line &line);

double Display(Line &line); ~Line(); double x, y; };

Line::Line(double x1, double y1, double x2, double y2) {x = x2 - x1; y = y2 - y1; }

Line::Line(Line &line)

{ x = line.x; y = line.y;}

double Line::Display(Line &line) {return sqrt(x*x+y*y);} Line::~Line(){}; void main() { Point a;

Point b(1,1), c(2, 2); a = c;

cout

cout

结果分析:主要利用函数来实现根的求解。先判断a是否为0,若a=0则输出“a不能为0!!!”不为0则继续输入bc,根据求根公式分别调用函数,实现不同的功能。

#include

using namespace std;

class Point //Point类声明 {

public:

Point(int xx=0, int yy=0) {X=xx;Y=yy;} Point(Point &p);

int GetX() {return X;} int GetY() {return Y;} private: int X,Y; };

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

X=p.X; Y=p.Y; }

class Line //Line类的声明 {

public: //外部接口

Line (Point xp1, Point xp2); Line (Line &);

double GetLen(){return len;} ~Line(){cout

Point p1,p2; //Point类的对象p1,p2 double len;

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

Line:: Line (Point xp1, Point xp2):p1(xp1),p2(xp2) {

double x=double(p1.GetX()-p2.GetX()); double y=double(p1.GetY()-p2.GetY()); len=sqrt(x*x+y*y); }

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

Line:: Line (Line &Seg): p1(Seg.p1), p2(Seg.p2) {

len=Seg.len; }

//主函数 void main() {

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

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

cout

cout

}

#include #include using namespace std; class Point { public:

Point(double x1=0, double y1=0){px = x1; py = y1;}; void Display(void);

double Distance(Point &point); ~Point(){}; double px, py; };

double Point::Distance(Point &point) {

double t1, t2; t1 = point.px - px; t2 = point.py - py; return sqrt(t1*t1+t2*t2); }

class Line:public Point { public:

Line(double x1, double y1, double x2, double y2); Line (Line &line);

double Display(Line &line); ~Line(); double x, y; };

Line::Line(double x1, double y1, double x2, double y2) {

x = x2 - x1; y = y2 - y1; }

Line::Line(Line &line) {

x = line.x; y = line.y; }

double Line::Display(Line &line) {

return sqrt(x*x+y*y); }

Line::~Line(){}; void main() { Point a;

Point b(1, 1), c(2, 2); a = c;

cout

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" using std::string; int main() { manager m1; technician t1; salesmanager sm1; salesman s1; m1.promote(3); m1.pay();

// m1.displayStatus(); cout

// t1.displayStatus();

cout

// sm1.displayStatus();

cout

// s1.displayStatus();

cout>chazhao; string emName = chazhao;

for(int i =0 ; i

employee em = e[i];

if(strcmp(em.name.c_str(),chazhao)==0) { em.pay(); em.displayStatus(); } }

cout> m;

if(strcmp(m,Y)==0||strcmp(m,y)==0) break; else

cout

return 0; } //3.h

#include #include "string.h" using std::string; class employee {protected: int individualEmpNo; int grade; float accumPay; static int employeeNo; string zhiwu; public: employee(); ~employee(); void pay(); string name; void promote(int increment); void displayStatus(){ cout

};

class technician:public employee {private: float hourlyRate; int workHours; public: technician(); void pay(); };

class salesman:virtual public employee {protected:

double CommRate; double sales; public: salesman(); void pay(); };

class manager:virtual public employee {protected: float monthlyPay; public: manager(); void pay(); };

class salesmanager:public manager,public salesman {public: salesmanager(); void pay(); }; //3.h1

#include #include #include "date.h"

int employee::employeeNo = 1000; employee::employee() { char namestr[50]; cout>namestr; name = namestr; individualEmpNo = employeeNo++; grade = 1;

}

employee::~employee(){ } void employee::pay(){}

void employee::promote(int increment){ grade += increment;} technician::technician(){ zhiwu = "技术员"; hourlyRate = 100;} void technician::pay()

{ cout>workHours; accumPay = hourlyRate * workHours; cout

salesman::salesman(){ zhiwu = "销售员"; CommRate = 0.04;} void salesman::pay()

{ cout>sales; accumPay = sales * CommRate; cout

manager::manager(){ zhiwu = "经理"; monthlyPay = 8000;} void manager::pay()

{ accumPay = monthlyPay; cout

salesmanager::salesmanager()

{ zhiwu = "销售经理";monthlyPay = 5000; CommRate = 0.05;} void salesmanager::pay()

{ accumPay = monthlyPay; cout>sales; accumPay = monthlyPay + sales * CommRate; cout

浙江理工大学科技与艺术学院机电系课程设计报告

结果分析:

21


相关内容

  • [软件工程]优秀课程建设总结报告
    <软件工程>优秀课程建设总结报告 在德州学院<软件工程>优质课程建设的工作中,我们课程组全体成员认识到<软件工程>是计算机软件专业的一门核心基础课程,搞好这门课程的建设,对于提高计算机科学与技术专业学生的 ...
  • 面向应用型人才培养的网络工程专业课程体系探索与实践
    文章编号:1672-5913(2009)19-0134-06 面向应用型人才培养的网络工程专业课程体系探索与实践 郭广军1,羊四清1,戴经国1,龚德良2 (1.湖南人文科技学院 计算机科学技术系,湖南 娄底 417000:2.湘南学院 计算 ...
  • 生产系统仿真实验实验指导书
    生产系统仿真实验 实验指导书 江思定 编写 浙江科技学院经济管理学院管理科学与工程系 2008年7月 生产系统仿真实验指导书 Instruction of production system emulation experiment 一.实 ...
  • 华中师范大学本科专业评估
    华中师范大学本科专业评估 经济与工商管理学院 金融工程系 自评报告 二O 一三年九月二十六日 目 录 一.金融工程系现状概述---------------------------------------------------------- ...
  • 承德技师学院专业建设规划
    承德工业学校 专业建设项目规划 2016.12. 第一部分 专业建设背景 一.政策支持 2010年7月,<国家中长期教育改革和发展规划纲要(2010-2020年)>正式发布,明确提出了后10年教育改革和发展的战略目标, 同年&l ...
  • 济南大学实验室介绍
    CAD 实验室 CAD 实验室承担全院所有的上机实践课程,涉及课程学习.课程设计和毕业设计等多个教学环节,是 Solid Works 中国有限公司在山东设立的首家 Solid Works 授权教育基地及 CSWA 考试中心. 实验室设三个分 ...
  • 计算机世界最具影响力的20人
    转自: 计算机世界最具影响力的20人 1.约翰•冯•诺依曼 (John Von Neuman, 1903- 1957) 被誉为"电子计算机之父".他对人类的最大贡献是对计算机科学.计算机技术和数值分析的开拓性工作,194 ...
  • 大学生学科竞赛简版
    相关的国家级大学生学科竞赛介绍 历史最悠久的全国大学生科技学术竞赛是"挑战杯"全国大学生课外学术实践竞赛.根据<教育部 财政部关于实施高等学校本科教学质量与教学改革工程的通知>(教高[2007]1号)的总体安 ...
  • 交通运输工程专业学位研究生培养体系探索与实践
    摘要:本文对比分析了国内外专业学位研究生教育的差距,在对交通运输工程专业学位研究生培养现状进行充分调研的基础上,提出新型的适合交通运输工程学科的全日制专业硕士培养体系,详细阐述了对于培养模式的创新.实践教学创新.以及管理体制改革. 关键词: ...
  • 新一代教育测量与评价技术的发展与应用
    一.概述 1.关于教育测量技术的渊源 随着神经科学与认知心理学的发展,从人脑神经网络抽象而来的人工神经网络工作原理,使人工智能.机器学习得以实现并快速发展,与此同时,这也意味着人脑的部分工作可以被测量. 图:大脑神经元突触 图:人工模拟神经 ...