《 面向对象程序设计》课程设计实验报告.docx
- 文档编号:15239497
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:27
- 大小:182.75KB
《 面向对象程序设计》课程设计实验报告.docx
《《 面向对象程序设计》课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《《 面向对象程序设计》课程设计实验报告.docx(27页珍藏版)》请在冰点文库上搜索。
《面向对象程序设计》课程设计实验报告
《面向对象程序设计》课程设计
实
验
报
告
指导教师
小组成员:
专业班级:
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 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 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计 面向对象程序设计课程设计实验报告 面向 对象 程序设计 课程设计 实验 报告