版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、重慶郵電大學c+課程設計報告c+課程設計1.系統(tǒng)概述通過設計一個較為簡單的高校工資管理系統(tǒng),進一步熟悉c+中類的概念、類的封裝、繼承的實現(xiàn)方式。了解系統(tǒng)開發(fā)的需求分析、類層次設計、模塊分析、編碼測試、模塊組裝與整體調試的全過程,加深對c+的理解與visual c+環(huán)境的使用;逐步熟悉程序設計的方法,并養(yǎng)成良好的編程習慣。2.總體設計2.1職工類的設計基于c+中類的概念,類的封裝,繼承和抽象。編寫一個person的基類包含共有的相關信息和操作,然后使職工類都繼承于此基類從而實現(xiàn)多態(tài)。2.2應用類的設計編寫一個person類的友元類college類來實現(xiàn)添加,刪除,查找等功能。2.3文件的讀寫設計
2、通過college類中的save()函數(shù)來實現(xiàn)數(shù)據(jù)的存儲,保存在person.dat中,而通過load()函數(shù)來實現(xiàn)person.dat數(shù)據(jù)的讀入。3.詳細設計及系統(tǒng)實現(xiàn)3.1 person類class person /人員類(抽象類)protected: int no; /編號 char name20; /姓名 char duty; /人員類別標志(0-教師,1-實驗員,2-行政人員,3-教師兼實驗員,4-行政兼教師) double salary; /基本工資 person *next; /指針域public: person() /基類構造 next=0; /指針域設置為空 virtual
3、person() /基類虛析構 virtual void input()=0; /從鍵盤輸入數(shù)據(jù) virtual void input(ifstream& ifs)=0; /從文件輸入數(shù)據(jù) virtual void output()=0; /向屏幕輸出數(shù)據(jù) virtual void output(ofstream& ofs)=0; /向文件輸出數(shù)據(jù) virtual double incoming()=0; /計算收入 friend class college;3.2 teacher類class teacher:virtual public person /教師類protected: int h
4、ours; /教師課時public: /為對象設置數(shù)據(jù)分為兩種途徑,通過)構造函數(shù),)一般成員函數(shù) /分開可以使得程序中應用更加靈活 /本程序采用:缺省構造+input() teacher() /構造函數(shù),初始化部分數(shù)據(jù) duty=0; salary=800; void input() /鍵盤補充輸入其它數(shù)據(jù) coutno; coutname; couthours; void input(ifstream& ifs) ifsnonamedutyhours; void output() coutnotnamet教師tthourstincoming()endl; void output(ofstr
5、eam& ofs) ofsno name duty hoursendl; double incoming() return salary+(hours-120)*20; ;3.3 assistant類class assistant:virtual public person /實驗員protected: int allowance; int hours;public: assistant() duty=1; salary=650; allowance=150; void input() coutno; coutname; couthours; void input(ifstream& ifs)
6、 ifsnonamedutyhours; void output() coutnotnamet實驗員tthourstincoming()endl; void output(ofstream& ofs) ofsno name duty hoursendl; double incoming() return salary+allowance+(hours-70)*20; ;3.4 manager類class manager:virtual public person /行政人員protected: int allowance;public: manager() duty=2; salary=750
7、; allowance=250; void input() coutno; coutname; void input(ifstream& ifs) ifsnonameduty; void output() coutnotnamet行政人員tincoming()endl; void output(ofstream& ofs) ofsno name dutyendl; double incoming() return salary+allowance; ;3.5 teacher_assistant類class teacher_assistant:public teacher,public assi
8、stant /教師兼實驗員public: teacher_assistant() duty=3; teacher:salary=800; void input() coutno; coutname;coutteacher:hours; coutassistant:hours; void input(ifstream& ifs) ifsnonamedutyteacher:hoursassistant:hours; void output() coutnotnamet教師兼實驗員 teacher:hours assistant:hourstincoming()endl; void output(o
9、fstream& ofs) ofsno name dutyteacher:hours assistant:hoursendl; double incoming() return salary+(teacher:hours-120)*20 +allowance+(assistant:hours-70)*20; ;3.6 manager_teacher類class manager_teacher:public manager,public teacher /行政人員兼教師public: manager_teacher() duty=4; manager:salary=750; void input
10、() coutno; coutname; couthours; void input(ifstream& ifs) ifsnonamedutyhours; void output() coutnotnamet行政人員兼教師 hourstincoming()endl; void output(ofstream& ofs) ofsno name duty hoursendl; double incoming() return salary+allowance+hours*20; ;3.7 college類3.7.1 頭文件class collegeprivate: person *pl; void
11、 clear(); int college:find(int id,person *p1,person *p2);public: college(); /構造 college(); /析構 void add(); /增加職工 void delete(); /刪除職工 void modify(); /修改職工 void print(); /輸出職工信息 void save(); /職工信息存盤 void load(); /職工信息裝入 void finding(); /查找職工;3.7.2 構造函數(shù)college:college() /構造函數(shù)(創(chuàng)建個頭結點的鏈表) person *p=new
12、teacher; pl=p; coutnext; delete p; p=pl; pl=0;3.7.4 add函數(shù)void college:add() /增加職工 couttt*高校工資管理系統(tǒng)*nnn; coutnext)p=p-next; char ch=m; /創(chuàng)建新結點,錄入數(shù)據(jù),連接到鏈表 teacher *pt; assistant *pa; manager *pm; teacher_assistant *pta; manager_teacher *pmt; cout職工分類碼0-教師,1-實驗員,2-行政人員,3-教師兼實驗員,4-行政兼教師:nn; for(;ch!=x;) c
13、outch; switch(ch) case0: pt=new teacher; pt-input(); p-next=pt; break; case 1: pa=new assistant; pa-input(); p-next=pa; break; case 2: pm=new manager; pm-input(); p-next=pm; break; case 3: pta=new teacher_assistant; pta-input(); p-next=pta; break; case 4: pmt=new manager_teacher; pmt-input(); p-next
14、=pmt; break; p=p-next; 3.7.5 find函數(shù)/查找職工結點(返回-找到,-未找到.結點指針由p1返回,p2為前看指針)int college:find(int id,person *p1,person *p2) *p1=pl-next; *p2=pl; while(*p1) if(*p1)-no=id) break; /找到 else *p2=*p1; /繼續(xù)查找 *p1=(*p1)-next; return *p1?1:0;3.7.6 clear函數(shù)void college:clear() /清除所有的職工結點(僅保留頭結點) person *p=pl-next;
15、while(p) pl-next=p-next; delete p; p=pl-next; 3.7.7 delete函數(shù)void college:delete() /刪除職工 couttt*高校工資管理系統(tǒng)*nnn; coutntttt* 刪除職工*n; int no; person *p1,*p2; coutno; if(!find(no,&p1,&p2) coutnext=p1-next; /連接 delete p1; cout正確刪除!n; 3.7.8 modify函數(shù)void college:modify() /修改職工 couttt*高校工資管理系統(tǒng)*nnn; coutntttt*
16、修改職工*n; int no; person *p1,*p2; coutno; if(!find(no,&p1,&p2) coutoutput(); /輸出原來的職工信息(做提示) p1-input(); /輸入新的職工信息(更新) cout修改完成!n; 3.7.9 print函數(shù)void college:print() /輸出職工信息 couttt*高校工資管理系統(tǒng)*nnn; coutn* 職工信息表*nn; coutnext; if(!p) coutoutput(); p=p-next; 3.7.10 save函數(shù)void college:save() /職工信息存盤ofstream f
17、(person.dat,ios:out); /打開文件 /遍歷輸出至文件 person *p=pl-next; while(p) p-output(f); p=p-next; f.close(); /關閉文件 coutbufbufduty; if(f) /根據(jù)人員類型創(chuàng)建新結點 switch(duty) case 0: p2=new teacher; break; case 1: p2=new assistant; break; case 2: p2=new manager; break; case 3: p2=new teacher_assistant; break; case 4: p2=
18、new manager_teacher; break; default: f.close(); return; p-next=p2; p=p-next; f.seekg(t); p-input(f); else break; /關閉文件 f.close(); coutperson.dat數(shù)據(jù)已裝入.n;3.7.12 finding函數(shù)void college:finding()couttt*高校工資管理系統(tǒng)*nnn;coutntttt*查找職工*n;person *p1,*p2;int id;coutid;coutnext; p2=pl; while(p1) if(p1)-no=id) cou
19、toutput(); break; /找到 else p2=p1; /繼續(xù)查找 p1=(p1)-next; 3.8 界面函數(shù)char meau()char c;int flag;dosystem(cls);flag=1; couttt*高校工資管理系統(tǒng)*nnn; couttttn; coutttt n; coutttt 1、增加職工 n; coutttt 2、刪除職工 n;coutttt 3、查找職工 n; coutttt 4、修改職工 n; coutttt 5、輸出職工信息 n;coutttt 6、數(shù)據(jù)存盤 n; coutttt 7、數(shù)據(jù)裝入 n;coutttt 8、退出 n; couttt
20、tn; coutc; if(c=1|c=2|c=3|c=4|c=5|c=6|c=7|c=8) flag=0;while(flag);return c;/顯示主菜單,接受選擇3.9 主函數(shù)void main() char ch; college c; /定義大學對象 do ch=meau(); switch(ch) case 1: system(cls);c.add(); coutnntt按任意鍵結束.n;getchar();getchar();break; case 2: system(cls);c.delete();coutnntt按任意鍵結束.n;getchar();getchar();b
21、reak; case 3: system(cls);c.finding();coutnntt按任意鍵結束.n;getchar();getchar();break; case 4: system(cls);c.modify();coutnntt按任意鍵結束.n;getchar();getchar();break; case 5: system(cls);c.print(); coutnntt按任意鍵結束.n;getchar();getchar();break; case 6: system(cls);c.save(); coutnntt按任意鍵結束.n;getchar();getchar();b
22、reak; case 7: system(cls);c.load(); coutnntt按任意鍵結束.n;getchar();getchar(); ; while(ch!=8);4.系統(tǒng)評價該系統(tǒng)實現(xiàn)了職工的添加,刪除,查找,顯示,修改,和數(shù)據(jù)的存盤與裝入操作,總體上來說功能比較全面,但仍有一些不足,如界面問題,以及程序中的許多繁瑣之處。5.設計結果與分析5.1 主界面實現(xiàn)各種功能的選擇:5.2 添加功能實現(xiàn)添加功能,輸入“x“結束:5.3 刪除功能5.4 查找功能5.5 修改功能5.6 顯示功能5.7 保存功能5.8 讀入功能6.設計體會與建議6.1 體會通過這次對高校工資管理系統(tǒng)這個實驗的
23、設計,充分感受并體會到了c+中的面對對象設計的真意,以及學習了對一個程序的分解和分工完成的方法,掌握了一點編寫的技巧。實際的操作與解決問題的能力更有了大幅的提升。6.2 建議 希望在以后的課程設計中,能更多的得到老師的幫助,可以幫助我們更清晰地理清思路,以及一些編程上的技巧。7.附錄7.1 成員7.2 分工1.1 課程設計的目的(1)要求學生能夠熟練掌握c+語言的基本知識和技能。(2)基本掌握面向對象程序設計的基本思路和方法。(3)能夠利用所學的基本知識和技能,解決簡單的面向對象程序設計問題。1.2 課程設計的背景和意義1.2.1課程設計的背景1. 理論研究基礎(1)c+在c的基礎上增加了面向
24、對象的機制。(2)充分運用面向對象機制中的繼承性與多態(tài)性實現(xiàn)函數(shù)的設計。2. 技術層面的支持運用系統(tǒng)為c+面向對象程序設計提供的各種設計方法和vc+系統(tǒng)提供的庫函數(shù)實現(xiàn)項目的開發(fā)。1.2.2 課程設計的意義通過設計此系統(tǒng),熟練掌握c+語言的基本知識和技能,基本掌握面向對象程序開發(fā)的基本思路和方法,培養(yǎng)學生的動手操作能力,提高自主學藝能力,能夠利用所學的基本知識和技能,進行簡單應用程序設計。 第2章 需求分析2.1 問題描述某公司需要存儲雇員的編號、姓名、性別、所在部門,級別,并進行工資的計算。其中,雇員分為經(jīng)理、技術人員、銷售人員和銷售經(jīng)理。四類人員的月薪計算方法如下:經(jīng)理拿固定月薪;技術人員
25、按小時領取月薪;銷售人員按其當月銷售額的提成領取工資;銷售經(jīng)理既拿固定月薪也領取銷售提成。設計一程序能夠對公司人員進行管理,應用到繼承、抽象類、虛函數(shù)、虛基類、多態(tài)和文件的輸入/輸出等內容。2.2 功能要求(1)基本功能1) 添加功能:程序能夠任意添加上述四類人員的記錄,可提供選擇界面供用戶選擇所要添加的人員類別,要求員工的編號要唯一,如果添加了重復編號的記錄時,則提示數(shù)據(jù)添加重復并取消添加。2) 查詢功能:可根據(jù)編號、姓名等信息對已添加的記錄進行查詢,如果未找到,給出相應的提示信息,如果找到,則顯示相應的記錄信息;3) 顯示功能:可顯示當前系統(tǒng)中所有記錄,每條記錄占據(jù)一行。4) 編輯功能:可
26、根據(jù)查詢結果對相應的記錄進行修改,修改時注意編號的唯一性。5)刪除功能:主要實現(xiàn)對已添加的人員記錄進行刪除。如果當前系統(tǒng)中沒有相應的人員記錄,則提示“記錄為空!”并返回操作;否則,輸入要刪除的人員的編號或姓名,根據(jù)所輸入的信息刪除該人員記錄,如果沒有找到該人員信息,則提示相應的記錄不存。6) 統(tǒng)計功能:能根據(jù)多種參數(shù)進行人員的統(tǒng)計。例如,統(tǒng)計四類人員數(shù)量以及總數(shù),或者統(tǒng)計男、女員工的數(shù)量,或者統(tǒng)計平均工資、最高工資、最低工資等信息。7)保存功能:可將當前系統(tǒng)中各類人員記錄存入文件中,存入方式任意。8)讀取功能:可將保存在文件中的人員信息讀入到當前系統(tǒng)中,供用戶進行使用。(2)擴展功能在完成以上
27、基本功能的基礎上,可自行進行擴展或完善,例如: 1) 添加人員記錄時,考慮各種數(shù)據(jù)的有效性。2)組合查詢功能的實現(xiàn)。3)可按人員的某些信息進行排序,例如按工資進行排序等。4)對文件的讀寫使用二進制信息。2.3 問題的解決方案根據(jù)系統(tǒng)功能要求,可以將問題解決分為以下步驟:1)應用系統(tǒng)分析,建立該系統(tǒng)的功能模塊框圖以及界面的組織和設計;2)分析系統(tǒng)中的各個實體及它們之間的關系; 3)根據(jù)問題描述,設計系統(tǒng)的類層次; 4)完成類層次中各個類的描述; 5)完成類中各個成員函數(shù)的定義; 6)完成系統(tǒng)的應用模塊; 7)功能調試; 8)完成系統(tǒng)總結報告。第3章 系統(tǒng)設計3.1 數(shù)據(jù)設計3.1.1 類設計設計
28、基類以派生出各個人員類:類名人員類 person數(shù)據(jù)成員num name sex department grade wage編號 姓名 性別 部門 級別 工資成員函數(shù)獲取姓名、獲取編號、獲取性別的函數(shù) 輸入輸出的虛函數(shù)表 3.1繼承基類設計經(jīng)理類:類名 經(jīng)理類 manager數(shù)據(jù)成員繼承于person類成員函數(shù)輸入輸出函數(shù)表 3.2根據(jù)經(jīng)理類設計經(jīng)理管理類: 類名 經(jīng)理管理類 man_administ 數(shù)據(jù)成員mantmax、top經(jīng)歷數(shù)組 總數(shù) 成員函數(shù)添加 修改 查詢 統(tǒng)計 顯示 刪除 保存 讀取表 3.3設計繼承于基類的銷售人員類: 類名 銷售人員類 sales 數(shù)據(jù)成員銷售額 提成率和
29、基類成員 成員函數(shù)獲取銷售額、提成率的函數(shù) 輸入輸出函數(shù)表 3.4根據(jù)銷售人員類涉及銷售人員管理類: 類名 銷售人員管理類 sal_administ 數(shù)據(jù)成員saltmax top 成員函數(shù)添加 修改 查詢 統(tǒng)計 顯示 刪除 保存 讀取表 3.5設計繼承于基類的技術人員類: 類名 技術人員類 technicist 數(shù)據(jù)成員 hour pay2 工作時間(小時) 薪水/小時 成員函數(shù)輸入輸出函數(shù)表 3.6根據(jù)技術人員類設計技術人員管理類: 類名 技術人員管理類 tec_administ 數(shù)據(jù)成員tectmax top 成員函數(shù)添加 修改 查詢 統(tǒng)計 顯示 刪除 保存 讀取表 3.7根據(jù)經(jīng)理類及銷
30、售人員類設計銷售經(jīng)理類: 類名 銷售經(jīng)理類 salesmanager 數(shù)據(jù)成員 pay1 工資 成員函數(shù)輸入輸出函數(shù)表 3.8根據(jù)銷售經(jīng)理類設計銷售經(jīng)理管理類: 類名 銷售經(jīng)理管理類 salman_administ 數(shù)據(jù)成員salmantmax top 成員函數(shù)添加 修改 查詢 統(tǒng)計 顯示 刪除 保存 讀取表 3.93.1.2 類之間的關系每一個人員類都是其相應人員管理類的友元類,以方便人員管理類對相應人員類的訪問;每一個人員管理類也都是基類的友元類,以方便對編號姓名等數(shù)據(jù)成員的訪問。即:manager類是man_administ類的友元類;sales類是sal_administ的友元類;sa
31、lesmanager類是salman_administ的友元類;technicist類是tec_administ的友元類;person類是man_administ、sal_administ、salman_administ、tec_administ類的友元類3.1.3 函數(shù)設計 系統(tǒng)設計了五個函數(shù):實現(xiàn)經(jīng)理菜單、銷售人員菜單、技術人員菜單、銷售經(jīng)理菜單的函數(shù)和實現(xiàn)主菜單的函數(shù);其中各類人員管理菜單的函數(shù)基本相同,在此只給出經(jīng)理菜單的函數(shù)算法如下: void manmenu() man_administ m;int choice;while(choice!=0)cout n *經(jīng)理管理* endl
32、;cout+endl;cout| |endl;cout退出 |endl;cout| |endl;cout+endl;coutchoice;switch(choice)case 1:m.add();break; case 2:m.search();break; case 3:m.edit();break; case 4:m.total();break;case 5:m.delete();break;case 6:m.show();break;case 7:m.save();break; case 8:m.read();break;case 0:cout退出成功!endl;break;defaul
33、t:cout無此選項 請重試!endl;break; 實現(xiàn)主菜單的函數(shù)算法: int main() cout *歡迎進入公司人員信息管理系統(tǒng)*endl;int choice;docout *主菜單*nendl;coutendl;cout| |endl;cout 經(jīng)理管理 2 = 銷售人員管理 3 = 技術人員管理 4= 銷售經(jīng)理管理 0 = 退出系統(tǒng) |endl;cout| |endl;coutendl;coutchoice;switch(choice)case 1:manmenu();break; case 2:salmenu();break; case 3:tecmenu();break;
34、case 4:salmanmenu();break;case 0:coutn您已安全退出系統(tǒng).endl;break;default:coutn沒有此選項 請重選!endl;break;while(choice!=0); coutn *歡迎您下次再使用本系統(tǒng)!*endl;return 0;3.2 結構設計3.2.1 系統(tǒng)流程圖類的關系圖:人員類經(jīng)理類銷售人員類技術人員類銷售經(jīng)理類圖 3.1添加函數(shù)流程圖:圖 3.2輸入信息編號是否存在添加成功 top+添加否是人員管理菜單人員管理菜單查詢函數(shù)流程圖:查詢按編號查詢按姓名查詢輸入編號輸入姓名是否找到找到了不存在此人是否 圖 3.3人員管理菜單 修改函數(shù)流程圖:修改按姓名查找按編號查找否輸入編號輸入姓名是否存在找到了敗找到了輸入修改信息編號是否存在修改失敗是是否 圖 3.4修改成功人員管理菜單刪除函數(shù)流程圖:刪除按編號找按姓名找輸入姓名輸入編號否是否存在刪除失敗是找到了確定刪除取消確定刪除成功圖 3.53.2.2 界面設計 系統(tǒng)采用的主菜單圖形樣式,如圖所示: 圖 3.6選擇相應的人員之后可進入該類人員的管理菜單選項,如圖所示: 圖 3.7 圖 3.8 圖 3.9 圖 3.9每個菜單的子菜單項如圖所示,實現(xiàn)這些界面主要用到了循環(huán)等方法。第4章 系統(tǒng)實現(xiàn)4.1 類實現(xiàn)定義人員類作為基類,包含各個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游行業(yè)景點評級標準
- 手術中的電生理監(jiān)測
- 自制禮物課件教學課件
- 河南省2024九年級語文上冊第二單元8就英法聯(lián)軍遠征中國致巴特勒上尉的信課件新人教版
- 慢病調理中心介紹
- 消防演練總結講評
- 農(nóng)業(yè)物聯(lián)網(wǎng)導論
- 感恩課件英文教學課件
- 玉米灰斑病病害循環(huán)
- 氣管切開燒傷病人的護理
- TCECA-G 0171-2022 零碳工廠評價規(guī)范
- Q∕GDW 10278-2021 變電站接地網(wǎng)技術規(guī)范
- 光與色的世界(課件)
- 馬凳筋施工專項方案(12頁)
- 李鐵安:高品質課堂的塑造
- 巖石力學基本教程 教學PPT 第6章 地應力
- 2019年航測遙感試卷及答案82分(錯題給出參考答案)
- 義務教育《化學》課程標準(2022年版)
- 縱膈腫瘤ppt模板
- 鋼結構焊接施工記錄含內容
- 治安保衛(wèi)重點要害部位審定表
評論
0/150
提交評論