面向对象的程序设计课程设计报告.doc_第1页
面向对象的程序设计课程设计报告.doc_第2页
面向对象的程序设计课程设计报告.doc_第3页
面向对象的程序设计课程设计报告.doc_第4页
面向对象的程序设计课程设计报告.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象的程序设计课程设计报告姓 名: 学 号: 班 级: 院 系: 日 期: 一设计目的课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。本次课程设计通过设计和实现几个应用程序,达到以下目标:1.使学生能够比较熟练地掌握c+语言的基本语法规则;2.熟练掌握基本的面向对象的程序设计方法,如类的实现、创建类的实例对象、实现类的继承等;3.掌握各种面向对象的程序设计技术,如继承和派生,虚继承、虚函数、抽象类、多态的实现、运算符重载、使用c+标准库等;4.掌握在vc+平台上进行程序设计和调试的方法。二内容及要求1. 内容与功能要求 题目一:通过组合和派生构成新的类本设计题目的任务是使用point类产生line类。分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。本设计题的目的是使学生掌握在不同的实现方法中,如何设计相应的构造函数和拷贝构造函数,进一步理解程序调用它们及析构函数的执行顺序,掌握组合类和派生类。另外本设计题目要让学生进一步掌握和理解类模板的技术及其实现方法。题目二:人员信息管理系统设计题目:本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,完成显示不同人员信息的任务。设计要求:设计employee类,用来存储雇员的编号,级别,月薪等信息,能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,以及manager类,表示经理,以及salesman类,表示兼职推销员。利用manage类和salesman类派生出salesmanager类,表示销售经理。注意使用虚基类。题目三:学生考勤管理系统设计题目:在学生考勤管理系统中,考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。系统功能包括信息录入、修改、查询、统计等。设计要求:录入学生的缺课记录; 修改某个学生的缺课记录;查询某个学生的缺课情况;统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序; 统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;2. 软件开发环境 windows 7,visual c+6.0 第一题 通过组合和派生构成新的类1. 设计思路本题目的任务是使用point类产生line类。分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。本题目的目的是使学生掌握在不同的实现方法中,如何设计相应的构造函数和拷贝构造函数,进一步理解程序调用它们及析构函数的执行顺序,掌握组合类和派生类。另外本设计题目要让学生进一步掌握和理解类模板的技术及其实现方法。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;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)return 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.widthendl;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 /声明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.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&a1,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);#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: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&);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,double 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-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(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();使用模板继承的方法(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调用point的构造函数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()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,width=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;cout派生类对象赋给基类对象:endl;a.display();cout派生类指针赋给基类指针:endl;point*p=&s1;p-display();cout基类对象引用派生类对象:endl;point &d=s1;d.display();4.运行结果及分析(1)用包含的方法构成的新类(2)使用模板的方法构成的新类(3) 通过继承的方法构成的新类(4) 通过模板继承的方法构成的新类程序完成了实验要求。第二题 人员信息管理系统1. 设计思路本题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息,能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,以及manager类,表示经理,以及salesman类,表示兼职推销员。利用manage类和salesman类派生出salesmanager类,表示销售经理。注意使用虚基类。2.程序详细代码及描述#include #include #include #include /全局数据,对象double managersalary; /经理固定月薪double salesmanagersalary; /销售经理固定月薪double salesmanagerpercent; /销售经理提成double salespercent; /兼职推销员提成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-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(); coutnotnamet经理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(); coutnotnamet销售经理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() earning=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() /清除内存中人员数据 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; coutattend; 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) /若已经存在结点 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=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; /查找要修改的结点 employee *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:p3=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; cinp1-birthday; cinp1-specialty; cinp1-bloodtype; cinp1-attend; if(duty=3) coutamount; (salesman *)p1)-setamount(amount); else if(duty=4) coutt; (technician *

温馨提示

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

评论

0/150

提交评论