面向?qū)ο蟮某绦蛟O(shè)計課程設(shè)計報告_第1頁
面向?qū)ο蟮某绦蛟O(shè)計課程設(shè)計報告_第2頁
面向?qū)ο蟮某绦蛟O(shè)計課程設(shè)計報告_第3頁
面向?qū)ο蟮某绦蛟O(shè)計課程設(shè)計報告_第4頁
面向?qū)ο蟮某绦蛟O(shè)計課程設(shè)計報告_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、面向?qū)ο蟮某绦蛟O(shè)計課程設(shè)計報告姓 名: 學(xué) 號: 班 級: 院 系: 日 期: 一設(shè)計目的課程設(shè)計是課程教學(xué)中的一項重要內(nèi)容,是完成教學(xué)計劃達(dá)到教學(xué)目標(biāo)的重要環(huán)節(jié),是教學(xué)計劃中綜合性較強(qiáng)的實踐教學(xué)環(huán)節(jié),它對幫助學(xué)生全面牢固地掌握課堂教學(xué)內(nèi)容、培養(yǎng)學(xué)生的實踐和實際動手能力、提高學(xué)生全面素質(zhì)具有很重要的意義。本次課程設(shè)計通過設(shè)計和實現(xiàn)幾個應(yīng)用程序,達(dá)到以下目標(biāo):1.使學(xué)生能夠比較熟練地掌握c+語言的基本語法規(guī)則;2.熟練掌握基本的面向?qū)ο蟮某绦蛟O(shè)計方法,如類的實現(xiàn)、創(chuàng)建類的實例對象、實現(xiàn)類的繼承等;3.掌握各種面向?qū)ο蟮某绦蛟O(shè)計技術(shù),如繼承和派生,虛繼承、虛函數(shù)、抽象類、多態(tài)的實現(xiàn)、運(yùn)算符重載、使

2、用c+標(biāo)準(zhǔn)庫等;4.掌握在vc+平臺上進(jìn)行程序設(shè)計和調(diào)試的方法。二內(nèi)容及要求1. 內(nèi)容與功能要求 題目一:通過組合和派生構(gòu)成新的類本設(shè)計題目的任務(wù)是使用point類產(chǎn)生line類。分別通過組合類及派生類兩種方法實現(xiàn),并要求分別給出使用類模板實現(xiàn)的程序。本設(shè)計題的目的是使學(xué)生掌握在不同的實現(xiàn)方法中,如何設(shè)計相應(yīng)的構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù),進(jìn)一步理解程序調(diào)用它們及析構(gòu)函數(shù)的執(zhí)行順序,掌握組合類和派生類。另外本設(shè)計題目要讓學(xué)生進(jìn)一步掌握和理解類模板的技術(shù)及其實現(xiàn)方法。題目二:人員信息管理系統(tǒng)設(shè)計題目:本設(shè)計題目的任務(wù)是設(shè)計一個人員信息管理系統(tǒng),并使用虛函數(shù)實現(xiàn)多態(tài)性,完成顯示不同人員信息的任務(wù)。設(shè)計要

3、求:設(shè)計employee類,用來存儲雇員的編號,級別,月薪等信息,能夠?qū)ζ溥M(jìn)行操作和顯示。以employee為基類派生出technician類,表示兼職技術(shù)人員,以及manager類,表示經(jīng)理,以及salesman類,表示兼職推銷員。利用manage類和salesman類派生出salesmanager類,表示銷售經(jīng)理。注意使用虛基類。題目三:學(xué)生考勤管理系統(tǒng)設(shè)計題目:在學(xué)生考勤管理系統(tǒng)中,考勤信息記錄了學(xué)生的缺課情況,它包括:缺課日期、第幾節(jié)課、課程名稱、學(xué)生姓名、缺課類型(遲到、早退、請假及曠課)。系統(tǒng)功能包括信息錄入、修改、查詢、統(tǒng)計等。設(shè)計要求:錄入學(xué)生的缺課記錄; 修改某個學(xué)生的缺課記

4、錄;查詢某個學(xué)生的缺課情況;統(tǒng)計某段時間內(nèi),曠課學(xué)生姓名及曠課次數(shù),按曠課次數(shù)由多到少排序; 統(tǒng)計某段時間內(nèi),有學(xué)生曠課的課程及曠課人次,按曠課人次由多到少排序;2. 軟件開發(fā)環(huán)境 windows 7,visual c+6.0 第一題 通過組合和派生構(gòu)成新的類1. 設(shè)計思路本題目的任務(wù)是使用point類產(chǎn)生line類。分別通過組合類及派生類兩種方法實現(xiàn),并要求分別給出使用類模板實現(xiàn)的程序。本題目的目的是使學(xué)生掌握在不同的實現(xiàn)方法中,如何設(shè)計相應(yīng)的構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù),進(jìn)一步理解程序調(diào)用它們及析構(gòu)函數(shù)的執(zhí)行順序,掌握組合類和派生類。另外本設(shè)計題目要讓學(xué)生進(jìn)一步掌握和理解類模板的技術(shù)及其實現(xiàn)方法

5、。2.程序詳細(xì)代碼及描述(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調(diào)用point的構(gòu)造函數(shù)endl;point:point(point&a)x=a.x;y=a.y;cout調(diào)用point復(fù)制函數(shù)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調(diào)用line的構(gòu)造函數(shù)endl;line:line(line&s):a(s.a),b(s.b),cw(s.cw)cout調(diào)用line的復(fù)制構(gòu)造函數(shù)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兩點(diǎn)之距為: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;/聲明結(jié)構(gòu)struct cowint color;int width;/實現(xiàn)point類template point:point(t a,t b):x(a),y(b)cout調(diào)用point的構(gòu)造函數(shù)endl;template point:point(point&a)x=a.

10、x;y=a.y;cout調(diào)用point的復(fù)制構(gòu)造函數(shù)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();/實現(xiàn)line類template line:line(point&a

11、1,point&a2,cow&a3):a(a1),b(a2),cw(a3)cout調(diào)用line的構(gòu)造函數(shù)endl;template line:line(line&s):a(s.a),b(s.b),cw(s.cw)cout調(diào)用line的復(fù)制構(gòu)造函數(shù)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兩點(diǎn)之距為: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調(diào)用point的構(gòu)造函數(shù)endl;point:point(point&a)x=a.x;y=a.y;cout調(diào)用point的復(fù)制構(gòu)造函數(shù)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調(diào)用line的構(gòu)造函數(shù)endl;line:line(line&s):point(s),x2(s.x2),y2(s.y2),cw(s.cw)cout調(diào)用line的復(fù)制構(gòu)造函數(shù)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兩點(diǎn)之距為: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調(diào)用po

18、int的構(gòu)造函數(shù)endl;template point:point(point&a)x=a.x;y=a.y;cout調(diào)用point的復(fù)制構(gòu)造函數(shù)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調(diào)用line的構(gòu)造函數(shù)endl;template line:line(line&s):point(s),x2(s.x2),y2(s.y2),cw(s.cw)cout調(diào)用line的復(fù)制構(gòu)造函數(shù)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兩點(diǎn)之距為: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.運(yùn)行結(jié)果及分析(1)用包含的方法構(gòu)成的新類(2)使用模板的方法構(gòu)成的新類(3) 通過繼承的方法構(gòu)成的新類(4) 通過模板繼承的方法構(gòu)成的新類程序完成了實驗要求。第二題 人員信息管理系統(tǒng)1. 設(shè)計思路本題目的任務(wù)是設(shè)計一個人員信息管理系統(tǒng),并使用虛函數(shù)實現(xiàn)多態(tài)性,完成顯示不同人員信息的任務(wù)。設(shè)計employee類,用來存儲雇員的編號,級別,月薪等信息,能

22、夠?qū)ζ溥M(jìn)行操作和顯示。以employee為基類派生出technician類,表示兼職技術(shù)人員,以及manager類,表示經(jīng)理,以及salesman類,表示兼職推銷員。利用manage類和salesman類派生出salesmanager類,表示銷售經(jīng)理。注意使用虛基類。2.程序詳細(xì)代碼及描述#include #include #include #include /全局?jǐn)?shù)據(jù),對象double managersalary; /經(jīng)理固定月薪double salesmanagersalary; /銷售經(jīng)理固定月薪double salesmanagerpercent; /銷售經(jīng)理提成double sale

23、spercent; /兼職推銷員提成double wageperhour; /兼職技術(shù)人員小時工資int id; /員工標(biāo)識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 /經(jīng)理類public: manager(char id,char *name,int duty):employee(id,name,duty) void calcsalary()earning=managersalary; void output() calcsalary(); coutnot

25、namet經(jīng)理tearningendl; ;class salesmanager:public employee /銷售經(jīng)理類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銷售經(jīng)理tearningt=t; double gett() return t; void sett(double t) this-t=t; void calcsalary() earning=wageperhour*t; void output() calcsalary(); coutnotnamet兼職技術(shù)人員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(); /查詢?nèi)藛T void set(); /基礎(chǔ)數(shù)據(jù)設(shè)置 void save(); /數(shù)據(jù)存盤 void load(); /數(shù)據(jù)載入; void company:clear() /清除內(nèi)存中人員數(shù)據(jù)

28、 employee *p=worker; while(p) worker=p-next; delete p; p=worker; void company:add() employee *p; /新結(jié)點(diǎn)指針 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; /創(chuàng)建新員工結(jié)點(diǎn) 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; /員工結(jié)點(diǎn)加入鏈表 if(worker) /若

30、已經(jīng)存在結(jié)點(diǎn) employee *p2; p2=worker; while(p2-next) /查找尾結(jié)點(diǎn) p2=p2-next; p2-next=p; /連接 else /若不存在結(jié)點(diǎn)(表空) worker=p; /連接 void company:delete() /刪除人員 int no; coutn# 刪除員工 #n; coutno; /查找要刪除的結(jié)點(diǎn) employee *p1,*p2; p1=worker; while(p1) if(p1-no=no) break; else p2=p1; p1=p1-next; /刪除結(jié)點(diǎn) if(p1!=null) /若找到結(jié)點(diǎn),則刪除 if(p1

31、=worker) /若要刪除的結(jié)點(diǎn)是第一個結(jié)點(diǎn) worker=p1-next; delete p1; else /若要刪除的結(jié)點(diǎn)是后續(xù)結(jié)點(diǎn) p2-next=p1-next; delete p1; cout找到并刪除n; else /未找到結(jié)點(diǎn) cout未找到此員工!n;void company:modify() int no,duty; char name20; int birthday; char specialty20; char bloodtype; int attend; double amount,t; coutn# 修改員工 #n; coutno; /查找要修改的結(jié)點(diǎn) employ

32、ee *p1,*p2; p1=worker; while(p1) if(p1-no=no) break; else p2=p1; p1=p1-next; /修改結(jié)點(diǎn) if(p1!=null) /若找到結(jié)點(diǎn) p1-output(); coutduty; if(p1-duty!=duty) /若崗位發(fā)生變動 coutname; if(duty=3) coutamount; else if(duty=4) coutt; /創(chuàng)建新員工結(jié)點(diǎn) 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; /員工結(jié)點(diǎn)替換到鏈表 p3-next=p1-next; if(p1=worker) /若要替換的結(jié)點(diǎn)是第一個結(jié)點(diǎn) worker=p3; else /若要刪除的結(jié)點(diǎn)是后續(xù)結(jié)點(diǎn) p2-next=p3; /刪除原來的員工結(jié)點(diǎn) 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論