面向对象的程序设计课程设计报告

上传人:无*** 文档编号:41340889 上传时间:2021-11-19 格式:DOC 页数:45 大小:657.50KB
收藏 版权申诉 举报 下载
面向对象的程序设计课程设计报告_第1页
第1页 / 共45页
面向对象的程序设计课程设计报告_第2页
第2页 / 共45页
面向对象的程序设计课程设计报告_第3页
第3页 / 共45页
资源描述:

《面向对象的程序设计课程设计报告》由会员分享,可在线阅读,更多相关《面向对象的程序设计课程设计报告(45页珍藏版)》请在装配图网上搜索。

1、面向对象的程序设计课程设计报告姓 名: 学 号: 班 级: 院 系: 日 期: 一设计目的课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。本次课程设计通过设计和实现几个应用程序,达到以下目标:1.使学生能够比较熟练地掌握C+语言的基本语法规则;2.熟练掌握基本的面向对象的程序设计方法,如类的实现、创建类的实例对象、实现类的继承等;3.掌握各种面向对象的程序设计技术,如继承和派生,虚继承、虚函数、抽象类、多态的实现、运算符重载、使

2、用C+标准库等;4.掌握在VC+平台上进行程序设计和调试的方法。二内容及要求1. 内容与功能要求 题目一:通过组合和派生构成新的类本设计题目的任务是使用Point类产生Line类。分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。本设计题的目的是使学生掌握在不同的实现方法中,如何设计相应的构造函数和拷贝构造函数,进一步理解程序调用它们及析构函数的执行顺序,掌握组合类和派生类。另外本设计题目要让学生进一步掌握和理解类模板的技术及其实现方法。题目二:人员信息管理系统设计题目:本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,完成显示不同人员信息的任务。设计要

3、求:设计employee类,用来存储雇员的编号,级别,月薪等信息,能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,以及manager类,表示经理,以及salesman类,表示兼职推销员。利用manage类和salesman类派生出salesmanager类,表示销售经理。注意使用虚基类。题目三:学生考勤管理系统设计题目:在学生考勤管理系统中,考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。系统功能包括信息录入、修改、查询、统计等。设计要求:录入学生的缺课记录; 修改某个学生的缺课记

4、录;查询某个学生的缺课情况;统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序; 统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;2. 软件开发环境 Windows 7,Visual C+6.0 第一题 通过组合和派生构成新的类1. 设计思路本题目的任务是使用Point类产生Line类。分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。本题目的目的是使学生掌握在不同的实现方法中,如何设计相应的构造函数和拷贝构造函数,进一步理解程序调用它们及析构函数的执行顺序,掌握组合类和派生类。另外本设计题目要让学生进一步掌握和理解类模板的技术及其实现方法

5、。2.程序详细代码及描述(1)/cpp1.h头文件#if !defined(CPP1_H)#define CPP1_H#include #include class Pointdouble X,Y;public:Point(double=0,double=0);Point(Point&);void Display()coutX=X,Y=Yendl;double Distance(Point&);double Getx()return X;double Gety()return Y;Point();struct Cowint Color;int Width;class LinePoint a,b

6、;Cow cw;public:Line(Point&,Point&,Cow&);double Display(Line&);Line(Line&);Line();#endif(2)/cpp1.cpp文件#include cpp1.hPoint:Point(double a,double b):X(a),Y(b)cout调用Point的构造函数endl;Point:Point(Point&a)X=a.X;Y=a.Y;cout调用Point复制函数endl;Point:Point()coutDelete PointX Yendl;double Point:Distance(Point&a)retu

7、rn sqrt(X-a.X)*(X-a.X)+(Y-a.Y)*(Y-a.Y);Line:Line(Point&a1,Point&a2,Cow&a3):a(a1),b(a2),cw(a3)cout调用Line的构造函数endl;Line:Line(Line&s):a(s.a),b(s.b),cw(s.cw)cout调用Line的复制构造函数endl;Line:Line()coutDelete Lineendl;double Line:Display(Line&a)a.a.Display();a.b.Display();coutColor=a.cw.Color,Width=a.cw.Widthen

8、dl;double x=a.a.Getx()-a.b.Getx();double y=a.a.Gety()-a.b.Gety();return sqrt(x*x+y*y);void main()Point a;Point b(5.2,11.8),c(38.9,85.6)a=c;cout两点之距为:a.Distance(b)endl;Cow cw=3,5;Line s(a,b,cw);Line s1(s);couts1.Display(s1)endl;使用模板的方法(1)/cpp11.h文件#if !defined(cpp11_H)#define cpp11_H#include #include

9、 /声明Point类template class PointT X,Y;public:Point(T=0,T=0);Point(Point&);void Display()coutX=X,Y=Yendl;T Distance(Point&);Point();T Getx()return X;T Gety()return Y;/声明结构struct Cowint Color;int Width;/实现Point类template Point:Point(T a,T b):X(a),Y(b)cout调用Point的构造函数endl;template Point:Point(Point&a)X=a.

10、X;Y=a.Y;cout调用Point的复制构造函数endl;template T Point:Distance(Point&a)return sqrt(X-a.X)*(X-a.X)+(Y-a.Y)*(Y-a.Y);template Point:Point()coutDelete PointX Yendl;/声明Line类template class LinePoint a,b;Cow cw;public:Line(Point&,Point&,Cow&);Line(Line&);T Display(Line&);Line();/实现Line类template Line:Line(Point&a

11、1,Point&a2,Cow&a3):a(a1),b(a2),cw(a3)cout调用Line的构造函数endl;template Line:Line(Line&s):a(s.a),b(s.b),cw(s.cw)cout调用Line的复制构造函数endl;template Line:Line()coutDelete Lineendl;template T Line:Display(Line&a)a.a.Display();a.b.Display();T x=a.a.Getx()-a.b.Getx();T y=a.a.Gety()-a.b.Gety(); return sqrt(x*x+y*y)

12、;#endif(2)/cpp11.cpp文件#include cpp13.hvoid main()Point a; Point b(5.2,11.8),c(38.9,85.6)a=c;cout两点之距为:a.Distance(b)endl;Cow cw=3,5;Lines(a,b,cw);Line s1(s);couts1.Display(s1)endl;使用继承的方法(1)cpp13.h文件#if !defined(PP13_H)#define CPP13_H#include #include /using namespace std;class Pointdouble X,Y;public

13、:Point(double=0,double=0);Point(Point&);void Display()coutX=X,Y=Yendl;double Distance(Point&);Point()coutDelete PointX Yendl;double Getx()return X;double Gety()return Y;struct Cowint Color;int Width;class Line:public Pointdouble X2,Y2;Cow cw;public:Line(double,double,double,double,Cow&);Line(Line&);

14、double Display(Line&);Line()coutDelete Lineendl;#endif(2)cpp13.cpp文件#includecpp13.hPoint:Point(double a,double b):X(a),Y(b)cout调用Point的构造函数endl;Point:Point(Point&a)X=a.X;Y=a.Y;cout调用Point的复制构造函数endl;inline double Point:Distance(Point&a)return sqrt(X-a.X)*(X-a.X)+(Y-a.Y)*(Y-a.Y);Line:Line(double a1,d

15、ouble a2,double a3,double a4,Cow&c):Point(a1,a2),X2(a3),Y2(a4),cw(c)cout调用Line的构造函数endl;Line:Line(Line&s):Point(s),X2(s.X2),Y2(s.Y2),cw(s.cw)cout调用Line的复制构造函数endl;double Line:Display(Line&a)Point:Display();coutX2=X2,Y2=Y2endl;coutColor=a.cw.Color,Width=a.cw.Widthendl;double x=X2-Getx();double y=Y2-G

16、ety();return sqrt(x*x+y*y);void main()Point a;Point b(5.2,11.8),c(38.9,85.6);a=c;cout两点之距为:a.Distance(b)endl;Cow cw=3,5;Line s(5.2,11.8,38.9,85.6),cw);Line s1(s);couts1.Display(s1)endl;cout基类对象的属性endl;a.Display();a=s;cout派生类的对象赋给基类对象endl;a.Display();cout派生类的对象赋给基类的指针:endl;Point &d=s1;d.Display();使用模

17、板继承的方法(1)cpp14.h文件#if !defined(CPP14_H)#define CPP14_H#include #include template class PointT X,Y;public:Point(T=0,T=0);Point(Point&);void Display()coutX=X,Y=Yendl;double Distance(Point&);T Getx()return X;T Gety()return Y;Point()coutDelete PointX Yendl;template Point:Point(T a,T b):X(a),Y(b)cout调用Po

18、int的构造函数endl;template Point:Point(Point&a)X=a.X;Y=a.Y;cout调用Point的复制构造函数endl;template double Point:Distance(Point&a)return sqrt(X-a.X)*(X-a.X)+(Y-a.Y)*(Y-a.Y);struct Cowint Color;int Width;template class Line:public PointT X2,Y2;Cow cw;public:Line(T,T,T,T,Cow&);Line(Line&);double Display(Line&);Line

19、()coutDelete Lineendl;template Line:Line(T a1,T a2,T a3,T a4,Cow&c):Point(a1,a2),X2(a2),Y2(a4),cw(c)cout调用Line的构造函数endl;template Line:Line(Line&s):Point(s),X2(s.X2),Y2(s.Y2),cw(s.cw)cout调用Line的复制构造函数endl;template double Line:Display(Line&a)Point:Display();coutX2=X2,Y2=Y2endl;coutColor=a.cw.Color,Wid

20、th=a.cw.Widthendl;double x=X2-Getx();double y=Y2-Gety();return sqrt(x*x+y*y);#endif(2)cpp14.cpp文件#include cpp14.hvoid main()Pointa;Point b(7.8,9.8),c(34.5,67.8);a=c;cout两点之距为:a.Distance(b)endl;Cow cw=3,5;Lines(7.8,9.8,34.5,67.8,cw);Lines1(s);couts1.Display(s1)endl;cout基类的对象属性:endl;a.Display();a=s;co

21、ut派生类对象赋给基类对象:endl;a.Display();cout派生类指针赋给基类指针:endl;Point*p=&s1;p-Display();cout基类对象引用派生类对象:endl;Point &d=s1;d.Display();4.运行结果及分析(1)用包含的方法构成的新类(2)使用模板的方法构成的新类(3) 通过继承的方法构成的新类(4) 通过模板继承的方法构成的新类程序完成了实验要求。第二题 人员信息管理系统1. 设计思路本题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息,能

22、够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,以及manager类,表示经理,以及salesman类,表示兼职推销员。利用manage类和salesman类派生出salesmanager类,表示销售经理。注意使用虚基类。2.程序详细代码及描述#include #include #include #include /全局数据,对象double ManagerSalary; /经理固定月薪double SalesManagerSalary; /销售经理固定月薪double SalesManagerPercent; /销售经理提成double Sale

23、sPercent; /兼职推销员提成double WagePerHour; /兼职技术人员小时工资int ID; /员工标识class Employee /员工类protected: int No; /编号 char Name20; /姓名 int Birthday; /生日 char Specialty20; /特长 char Bloodtype; /血型 int Attend; /加入公司时间 int Duty; /岗位 double Earning; /收入 Employee *next;public: Employee(char ID,char *Name,int Duty) this

24、-Duty=Duty; strcpy(this-Name,Name); this-No=ID; virtual void CalcSalary()=0; virtual void Output()=0; friend class Company;class Manager:public Employee /经理类public: Manager(char ID,char *Name,int Duty):Employee(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary; void Output() CalcSalary(); coutNot

25、Namet经理tEarningendl; ;class SalesManager:public Employee /销售经理类private: double Amount;public: SalesManager(char ID,char *Name,int Duty):Employee(ID,Name,Duty) void SetAmount(double s) Amount=s; void CalcSalary() Earning=SalesManagerSalary+Amount*SalesManagerPercent/100; void Output() CalcSalary(); c

26、outNotNamet销售经理tEarningt=T; double GetT() return t; void SetT(double T) this-t=T; void CalcSalary() Earning=WagePerHour*t; void Output() CalcSalary(); coutNotNamet兼职技术人员tttEarningAmount=Amount; double GetAmount() return Amount; void SetAmount(double Amount) this-Amount=Amount; void CalcSalary() Earn

27、ing=SalesPercent/100*Amount; void Output() CalcSalary(); coutNotNamet兼职推销员tAmounttEarningnext; delete Worker; Worker=p; Worker=0; void Add(); /增加人员 void Delete(); /删除人员 void Modify(); /修改人员 void Query(); /查询人员 void Set(); /基础数据设置 void Save(); /数据存盘 void Load(); /数据载入; void Company:Clear() /清除内存中人员数据

28、 Employee *p=Worker; while(p) Worker=p-next; delete p; p=Worker; void Company:Add() Employee *p; /新结点指针 int Duty; char Name20; int Birthday; char Specialty20; char Bloodtype; int Attend; double Amount,T; coutn# 新增员工 #n; /输入员工信息 ID+; coutDuty; coutName; coutBirthday; coutSpecialty; coutBloodtype; cou

29、tAttend; if(Duty=3) coutAmount; else if(Duty=4) coutT; /创建新员工结点 switch(Duty) case 1:p=new Manager(ID,Name,Duty); break; case 2:p=new SalesManager(ID,Name,Duty); break; case 3:p=new Salesman(ID,Name,Duty,Amount); break; case 4:p=new Technician(ID,Name,Duty,T); break; p-next=0; /员工结点加入链表 if(Worker) /若

30、已经存在结点 Employee *p2; p2=Worker; while(p2-next) /查找尾结点 p2=p2-next; p2-next=p; /连接 else /若不存在结点(表空) Worker=p; /连接 void Company:Delete() /删除人员 int No; coutn# 删除员工 #n; coutNo; /查找要删除的结点 Employee *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next; /删除结点 if(p1!=NULL) /若找到结点,则删除 if(p1

31、=Worker) /若要删除的结点是第一个结点 Worker=p1-next; delete p1; else /若要删除的结点是后续结点 p2-next=p1-next; delete p1; cout找到并删除n; else /未找到结点 cout未找到此员工!n;void Company:Modify() int No,Duty; char Name20; int Birthday; char Specialty20; char Bloodtype; int Attend; double Amount,T; coutn# 修改员工 #n; coutNo; /查找要修改的结点 Employ

32、ee *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next; /修改结点 if(p1!=NULL) /若找到结点 p1-Output(); coutDuty; if(p1-Duty!=Duty) /若岗位发生变动 coutName; if(Duty=3) coutAmount; else if(Duty=4) coutT; /创建新员工结点 Employee *p3; switch(Duty) case 1:p3=new Manager(p1-No,Name,Duty); break; case 2:p

33、3=new SalesManager(p1-No,Name,Duty); break; case 3:p3=new Salesman(p1-No,Name,Duty,Amount); break; case 4:p3=new Technician(p1-No,Name,Duty,T); break; /员工结点替换到链表 p3-next=p1-next; if(p1=Worker) /若要替换的结点是第一个结点 Worker=p3; else /若要删除的结点是后续结点 p2-next=p3; /删除原来的员工结点 delete p1; else /若岗位没有变动 coutp1-Name; c

34、inp1-Birthday; cinp1-Specialty; cinp1-Bloodtype; cinp1-Attend; if(Duty=3) coutAmount; (Salesman *)p1)-SetAmount(Amount); else if(Duty=4) coutT; (Technician *)p1)-SetT(T); cout修改成功!n; else /未找到结点 cout未找到!n;void Company:Query() coutDuty=3)sum+=(Salesman *)p)-GetAmount(); p=p-next; p=Worker; double sum

35、2=0; /工资总和 while(p) if(p-Duty=2)(SalesManager *)p)-SetAmount(sum); p-Output(); sum2+=p-Earning; p=p-next; cout本月盈利:sum*0.3-sum2endl; cout(按照30利润计算)n;void Company:Set() coutn# 设置基础数据 #n; cout经理固定月薪ManagerSalaryManagerSalary; cout销售经理固定月薪SalesManagerSalarySalesManagerSalary; cout销售经理提成SalesManagerPerc

36、entSalesManagerPercent; cout兼职推销员提成SalesPercentSalesPercent; cout兼职技术人员小时工资WagePerHourWagePerHour; cout=IDID;void Company:Save() /数据存盘 ofstream fEmployee,fBase; char c; coutc; if(toupper(c)!=Y)return; /保存人员编号、姓名、岗位 fEmployee.open(Employee.txt,ios:out); Employee *p=Worker; while(p) fEmployeeNotNametD

37、utyDuty=3) fEmployeeGetAmount()Duty=4) fEmployeeGetT()t; fEmployeenext; fEmployee.close(); /保存基础数据 fBase.open(base.txt,ios:out); fBase经理固定月薪tManagerSalaryendl; fBase销售经理固定月薪tSalesManagerSalaryendl; fBase销售经理提成tSalesManagerPercentendl; fBase兼职推销员提成tSalesPercentendl; fBase兼职技术人员小时工资tWagePerHourendl; fBaseIDtIDendl; fEmployee.close(); coutn保存人员和基础数据已经完成.n;void Company:Load()

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!