




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、封封 皮皮 (按學校要求手工填寫)(按學校要求手工填寫) 2 課 程 設 計 任 務 書 學院學院信息科學與工程學院信息科學與工程學院專業(yè)專業(yè)通信工程通信工程 學生姓名學生姓名張昊張昊學號學號 12030604171203060417 設計題目設計題目小型人員信息管理系統(tǒng)的設計與實現(xiàn) 內容及要求: 小型人員信息管理系統(tǒng)的設計與實現(xiàn) 某小型公司主要有四類人員:經理、兼職技術人員、銷售經理和兼職推銷員?,F(xiàn)在, 需要存儲這些人員的姓名、編號、級別、當月薪水,計算月薪總額并顯示全部信息。 人員編號基數(shù)為 1000,每輸入一個人員信息編號順序加 1。 程序要有對所有人員提升級別的功能。本例中為簡單起見,
2、所有人員的初始級別均為 1 級,然后進行升級,經理升為 4 級,兼職技術人員和銷售經理升為 3 級,推銷員認為 1 級。 月薪計算辦法是:經理拿固定月薪 8000 元;兼職技術人員按每小時 100 元領取月薪; 兼職推銷員的月薪按該推銷員當月銷售額的 4提成;銷售經理即拿固定月薪也領取銷售 提成,固定月薪為 5000 元,銷售提成為所管轄部門當月銷售總額的千分之五。 要求為每一類人員單獨建立文件,并在每個文件中手工錄入一些人員基本信息,并根據(jù)這 些基本信息計算職工的月薪,并將計算結果保存入相應的磁盤文件中。要求編寫程序實現(xiàn) 上述功能,并且可以通過實例演示上述功能。 進度安排: 第 17 周:分
3、析題目,查閱課題相關資料,進行類設計、算法設計; 第 18 周:程序的設計、調試與實現(xiàn); 第 19 周:程序測試與分析,撰寫課程設計報告,進行答辯驗收 指導教師(簽字):指導教師(簽字): 年年 月月 日日 學院院長(簽字)學院院長(簽字) 年年 月月 日日 3 1 需求分析 .- 1 - 2 算法基本原理 .- 1 - 3 類設計 .- 2 - 4 詳細設計 .- 3 - 4.1 類的接口設計 .- 3 - 4.2 類的實現(xiàn) .- 5 - 4.3 主函數(shù)設計 .- 10 - 5 dos 界面程序運行結果及分析 .- 11 - 5.1 程序運行結果 .- 11 - 5.2 運行結果分析.- 1
4、2 - 6 基于 mfc 的圖形界面程序開發(fā).- 13 - 6.1 基于 mfc 的圖形界面程序設計.- 13 - 6.2 程序測試 .- 17 - 6.3 mfc 程序編寫總結.- 19 - 7 參考文獻 - 19 - 4 1 需求分析需求分析 (1)對小型公司做一個小型人員信息管理系統(tǒng)。該公司主要有四類人員:經理、 兼職技術人員、銷售經理和兼職推銷員。 (2)該管理系統(tǒng)需要存儲這些人員的姓名、編號、級別、當月薪水,計算月薪 總額并顯示全部信息。 (3)該系統(tǒng)具體要求:人員編號基數(shù)為 1000,每輸入一個人員信息編號順序 加 1;對所有人員提升級別,所有人員的初始級別均為 1 級,然后進行升
5、 級,經理升為 4 級,兼職技術人員和銷售經理升為 3 級,推銷員認為 1 級; 經理拿固定月薪 8000 元;兼職技術人員按每小時 100 元領取月薪;兼職 推銷員的月薪按該推銷員當月銷售額的 4提成;銷售經理即拿固定月薪 也領取銷售提成,固定月薪為 5000 元,銷售提成為所管轄部門當月銷售 總額的千分之五;要求為每一類人員單獨建立文件,并在每個文件中手工 錄入一些人員基本信息,并根據(jù)這些基本信息計算職工的月薪,并將計算 結果保存入相應的磁盤文件中。 2 算法基本原理算法基本原理 1、 定義一個員工虛基類 employee()包含姓名、編號、級別、當月薪水四 個共有屬性的數(shù)據(jù)成員;并在該虛
6、基類基礎上派生出經理 mansger() 、 兼職技術人員 technology() 、銷售經理 salemansger()和兼職推銷員 salesman()四類派生類。四種派生類分別實現(xiàn)各自的的員工升級、編號, 添加各自特有的數(shù)據(jù)成員并計算出各自的月薪。 (1)員工等級直接按照要求賦值即可; (2) 在積累中定義靜態(tài)數(shù)據(jù)成員 static int count,并初始化 int employee:count=1000, 并在基類構造函數(shù)中實現(xiàn)編號的賦值 +count; num=count; (3)派生類調用構造函數(shù)時對數(shù)據(jù)成員進行賦值,并對各種派生類輸入 各自的用于計算月薪的數(shù)據(jù)成員,并按照要
7、求計算各自的月薪。 2、 定義一個結構體鏈表 struct linked,并將該鏈表頭指針封裝在友元類 head()中。 3、 運行時構造對象指針,并存在鏈表中,講鏈表的頭指針封裝在一個友元類中。利用類 中的成員函數(shù)來實行對鏈表節(jié)點的打印、添加、刪除以及查詢。這里所以的操作均為數(shù)據(jù) 結構中對單鏈表的操作。 5 3 類設計類設計 首先定義一個員工類 employee 作為基類,由于要派生多個派生類,所以將 其定義成虛基類;然后由基類派生出四種派生類,分別是 mansger,technology,salemansger 和 salesman。 定義一個結構體鏈表 linked 用來存放生成的對象指
8、針,并將頭指針封裝存放在 友元類 head 中。 基類 employee 中的數(shù)據(jù)成員姓名、編號、等級、月薪以及一個靜態(tài)變量, 靜態(tài)變量用來為員工自動賦值編號,在基類構造函數(shù)中輸入員工姓名,并將編 號和等級自動賦值。 派生類 mansger 中無需添加新成員,在派生類 technology 中添加工作時間, 在 salemansger 中添加部門月銷售額,在 salesman 添加月銷售額。派生類的功 能有輸出函數(shù) print() ,儲存函數(shù) save() ; 友元類 head 中存放的數(shù)據(jù)成員有 linked *top,功能有構造函數(shù) head() , 插入函數(shù) insert() ,查詢函數(shù)
9、 check() ,刪除函數(shù) delete() ,輸出函數(shù) print() 。 基類與各派生類之間的關系如圖: mansger # name20: char # num: int # rank: int #wages: float +employee() +print(): void + mansger () +print(): void +save(): void employee # name20: char # num: int # rank: int #wages: float #count: int=1000 +employee() +print(): void salesman #
10、 name20: char # num: int # rank: int #wages: float +employee() +print(): void -sum1 :int +salesman () +print(): void +save(): void salemansger # name20: char # num: int # rank: int #wages: float +employee() +print(): void -sum :int +salemansger() +print(): void +save(): void technology # name20: cha
11、r # num: int # rank: int #wages: float +employee() +print(): void -time :int +technology() +print(): void +save(): void head -top: struct* +insert(employee *temp) 6 4 詳細設計詳細設計 整個程序分為三部分,各種職員的類,結構體鏈表以及封裝鏈表的類。實 現(xiàn)時先生成各職員的對象指針,之后將生成的對象指針插入到鏈表中,最后通 過封裝類的成員函數(shù)對鏈表節(jié)點進行操作,最后實現(xiàn)對各員工的操作。 4.1 類的接口設計 #include #inc
12、lude #include using namespace std; class employee /基類 employee 聲明 protected: /數(shù)據(jù)成員 char name20; /員工姓名 int num; /員工編號 int rank; /員工登記 float wages; /員工月薪 static int count; /靜態(tài)變量 public: /外部接口 employee(); /構造函數(shù) void print(); /輸出函數(shù) friend class head; /聲明友元類 ; class mansger:virtual public employee /派生類 m
13、ansger 聲明 public: mansger():employee(); /構造函數(shù) void print(); /輸出函數(shù) void save(); /儲存函數(shù) friend class head; ; +check(): void +delete():void +print():void 7 class salemansger:virtual public employee /派生類 salemansger 聲明 protected: int sum; /部門銷售額 public: salemansger():employee(); /構造函數(shù) void print(); /輸出函數(shù)
14、 void save(); /儲存函數(shù) friend class head; class technology:virtual public employee /派生類 technology 聲明 protected: int time; /工作時間 public: technology():employee(); /構造函數(shù) void print(); /輸出函數(shù) void save(); /儲存函數(shù) friend class head; ; class salesman:virtual public employee /派生類 salesman 聲明 protected: int sum1
15、; /個人銷售額 public: salesman():employee(); /構造函數(shù) void print(); /輸出函數(shù) void save(); /儲存函數(shù) friend class head; ; struct linked /定義單鏈表 employee *p; linked *next; ; class head /友元類 head 聲明 public: head(); /構造函數(shù) void insert(employee *temp); /單鏈表插入函數(shù) 8 void check(); /查找函數(shù) void delete(); /刪除函數(shù) void print(); /輸出
16、函數(shù) head(); /析構函數(shù) private: linked *top; /單鏈表頭指針 ; 4.2 類的實現(xiàn) employee /基類的實現(xiàn) employee :employee() /基類的構造函數(shù) coutname; +count; num=count; rank=1; /基類成員賦值 void employee: print() /輸出類數(shù)據(jù)成員 cout編號num 姓名name 等級rank 月薪wagesendl; mansger /派生類的實現(xiàn) mansger :mansger():employee() /派生類構造函數(shù) rank=4; wages=8000; void ma
17、nsger: print() /輸出函數(shù) cout編號num 姓名name 等級rank 月薪wagesendl; void mansger :save() /儲存函數(shù) ofstream fs(d:mansger.txt); fswages; coutmansger okendl; salemansger /派生類的實現(xiàn) 9 salemansger:salemansger():employee() /派生類構造函數(shù) rank=3; coutsum; wages=0.005*sum; void salemansger:print() /輸出函數(shù) cout編號num 姓名name 等級rank 月
18、薪wagesendl; void salemansger:save() /儲存函數(shù) ofstream fs(d:salemansger.txt); fswages; coutsalemansger okendl; technology /派生類的實現(xiàn) technology:technology():employee() /派生類的構造函數(shù) rank=3; couttime; wages=100*time; void technology:print() /輸出函數(shù) cout編號num 姓名name 等級rank 月薪wagesendl; void technology:save() /儲存函數(shù)
19、 ofstream fs(d:technology.txt); fswages; couttechnology okendl; salesman /派生類的實現(xiàn) salesman :salesman():employee() /派生類的構造函數(shù) coutsum1; 10 wages=0.04*sum1; void salesman:print() /派生類的輸出函數(shù) cout編號num 姓名name 等級rank 月薪wagesendl; void salesman:save() /儲存函數(shù) ofstream fs(d:salesman.txt); fswages; coutsalesman
20、oknext=null; void head:insert(employee *temp) /鏈表的插入函數(shù) linked *ttop = top; while(ttop-next) ttop = ttop-next; ttop-next = new linked; ttop-next-p = temp; ttop-next-next = 0; void head:check() /鏈表的查找函數(shù) char s20; couts; linked *pbuf = top-next; while(pbuf!=null) if(strcmp(pbuf-p-name,s)!=0) pbuf=pbuf-
21、next; else if(strcmp(pbuf-p-name,s)=0) 11 cout編號p-num 姓名p- name 等級p-rank 月薪p-wagesnext; continue; else cout查無此人endl; void head:delete() /鏈表的刪除函數(shù) int a; couta; linked *pbuf = top,*q; while(pbuf-next!=null) if(a!=pbuf-next-p-num) pbuf=pbuf-next; else if(a=pbuf-next-p-num) q=pbuf-next; pbuf-next=pbuf-n
22、ext-next; delete q; cout刪除成功endl; else cout查無此人next; while(pbuf!=null) pbuf-p-print(); pbuf=pbuf-next; head:head() /友元類的析構函數(shù) linked *ttop,*q; ttop = top-next; while(ttop!=null) q=ttop; 12 ttop = ttop-next; delete q; void mnue(head *data) /菜單函數(shù) int n; coutn; switch(n) case 1: data-check(); /查找鏈表節(jié)點 br
23、eak; case 2: data-delete(); /刪除鏈表節(jié)點 break; case 3: data-print(); /輸出鏈表節(jié)點 break; case 0: break; coutn; if(n!=0) mnue(data); void menu(head *data) /菜單函數(shù) mansger *m; salemansger *s; technology *t; salesman *sa; /聲明類指針 int n; coutn; switch(n) case 1: m=new mansger; /構造對象指針 m-save(); /儲存對象數(shù)據(jù) 13 data-inse
24、rt(m); /將對象指針插入到鏈表中 break; case 2: s=new salemansger; /構造對象指針 s-save(); /儲存對象數(shù)據(jù) data-insert(s); /將對象指針插入到鏈表中 break; case 3: t=new technology; /構造對象指針 t-save(); /儲存對象數(shù)據(jù) data-insert(t); /將對象指針插入到鏈表中 break; case 4: sa=new salesman; /構造對象指針 sa-save(); /儲存對象數(shù)據(jù) data-insert(sa); /將對象指針插入到鏈表中 break; case 0:
25、 break; coutn; if(n!=0) menu(data); /遞歸調用 在類的成員函數(shù)實現(xiàn)過程中,派生類的構造函數(shù)使用參數(shù)調用了基類的構 造函數(shù)。在類外定義成對象指針,并用 new 生成動態(tài)內存空間來儲存,并將其 插入到鏈表中并進行封裝。通過封裝類對鏈表的操作從而調用各員工類中的成 員函數(shù)對各員工類進行題目所需功能的操作。 4.3 主函數(shù)設計 void main() /主函數(shù) head data; /構造對象 int n; while(1) coutn; switch(n) case 1: menu( /菜單函數(shù) 1 break; 14 case 2: mnue( /菜單函數(shù) 2
26、break; case 0: system(pause); return; system(cls); 5 dos 界面程序運行結果及分析界面程序運行結果及分析 5.1 程序運行結果 對員工類進行輸入操作 15 實現(xiàn)查找、刪除以及輸出功能 5.2 運行結果分析 整個程序是采用單鏈表的形式來儲存對象指針,合理的利用的內存資源。 為了通過封裝鏈表的類對各員工類里的成員函數(shù)進行調用,再次將該類聲 明成友元類。類的外部為對象指針申請動態(tài)的儲存空間,并將其插入到單鏈表 中,通過頭結點對各個節(jié)點進行訪問操作。 最后執(zhí)行析構函數(shù)的時候講點鏈表的節(jié)點一個一個釋放掉。 利用 mfc appwizard 創(chuàng)建一個基
27、于對話框的 mfc 應用程序。 該程序使用鏈表類,對公司的員工信息進行輸入、刪除、存盤以及讀取的功能 16 6 基于基于 mfc 的圖形界面程序開發(fā)的圖形界面程序開發(fā) mfc 的圖形界面程序設計可在上述類設計的基礎上進行改造,mfc 的圖 形界面程序與 dos 界面程序的主要不同點是:mfc 圖形界面程序與 dos 界面 程序的輸入輸出方式不同,dos 界面程序采用字符交互式實現(xiàn)數(shù)據(jù)輸入輸出, 主要通過 cin,cout 等 i/o 流實現(xiàn),而 mfc 的圖形程序界面采用標準 windows 窗口和控件實現(xiàn)輸入輸出,因此必須在 mfc 類的框架下加入上面所設計的矩 陣和方程組類,并通過圖形界面
28、的輸入輸出改造來完成。 6.1 基于 mfc 的圖形界面程序設計 (1)界面設計)界面設計 首先在 vc 中建立 mfc appwizard(exe)工程,名稱為 guasslinegui,并在 向導的 step1 中選擇 dialog based,即建立基于對話框的應用程序,如下圖 45 所示。 17 將對話框資源中的默認對話框利用工具箱改造成如下界面,如圖所示。 6.2 詳細設計詳細設計 本程序鏈表類對象為一結構體 cfund,它記錄了姓名,編號,等級,月薪 等所有員工的信息。 struct cfund cstring m_name; /姓名 cstring m_rank; /等級 flo
29、at wages; /月薪 18 float income; /用于計算月薪的變量 ; 聲明一個 cptrlist 型的鏈表類 m_fundlist。 public: ch8demo2dlg(cwnd* pparent = null); / standard constructor cptrlist m_fundlist; 為對話框類添加一個成員函數(shù) resfiesh,將鏈表對象中的數(shù)據(jù)在列表框顯 示。 void ch8demo2dlg:reflesh() cstring str,str1; m_cthelist.resetcontent (); /清空列表框 if(!m_fundlist.i
30、sempty() /鏈表不為空 position pos=m_fundlist.getheadposition(); /獲取鏈表頭的位置 for(int i=0;iincome); /格式化月薪 str=姓名:+m_pfund-m_name+ 等級:+m_pfund- m_rank+ 薪水:+str1; m_cthelist.addstring(str); /添加列表框數(shù)據(jù) updatedata(false); /更新總量編輯框 對列表框類進行輸入,刪除的操作代碼如下: void ch8demo2dlg:oncheck() updatedata(true); /獲得編輯框數(shù)據(jù) cfund *m
31、_pfund=new cfund; /創(chuàng)建結構體對象指針 switch(m_radio) case 0: /插入操作 if(m_name.isempty() afxmessagebox(用戶輸入不正確); return; m_pfund-m_name=m_name; m_pfund-m_rank=4; /m_pfund-wages=m_wages; 19 m_pfund-income=8000; m_fundlist.addtail(m_pfund); m_name= ; m_wages=0; updatedata(false); reflesh(); break; case 1: /插入操作
32、 if(m_name.isempty() afxmessagebox(用戶輸入不正確); return; m_pfund-m_name=m_name; m_pfund-m_rank=3; m_pfund-wages=m_wages; m_pfund-income=m_wages*100; m_fundlist.addtail(m_pfund); m_name= ; m_wages=0; updatedata(false); reflesh(); break; case 2: /插入操作 if(m_name.isempty() afxmessagebox(用戶輸入不正確); return; m_
33、pfund-m_name=m_name; m_pfund-m_rank=3; m_pfund-wages=m_wages; m_pfund-income=5000+m_wages*0.005; m_fundlist.addtail(m_pfund); m_name= ; m_wages=0; updatedata(false); reflesh(); break; case 3: /插入操作 if(m_name.isempty() 20 afxmessagebox(用戶輸入不正確); return; m_pfund-m_name=m_name; m_pfund-m_rank=1; m_pfun
34、d-wages=m_wages; m_pfund-income=m_wages*0.04; m_fundlist.addtail(m_pfund); m_name= ; m_wages=0; updatedata(false); reflesh(); break; case 4: /去除表頭操作 if(m_fundlist.getcount() m_fundlist.removehead(); m_name= ; m_wages=0; updatedata(false); reflesh(); break; case 5: /去除表尾操作 if(m_fundlist.getcount() m_
35、fundlist.removetail(); m_name= ; m_wages=0; updatedata(false); reflesh(); break; 為更方便使用,在操作單選按鈕是設置了一下響應函數(shù): void ch8demo2dlg:onradio1() /單選按鈕的響應函數(shù) updatedata(true); switch(m_radio) 21 case 0: m_temp=nothing; break; case 1: m_temp=工作時間; break; case 2: m_temp=部門銷售額; break; case 3: m_temp=銷售額; break; ca
36、se 4: m_temp=nothing; break; case 5: m_temp=nothing; break; updatedata(false); 存盤操作函數(shù): void ch8demo2dlg:onbutton2() char szname40; cstring strfilter,strfilename,strtext; strfilter=bookinfo files(*.*)|*.*|; cfiledialog dlg(false,null,null,ofn_explorer|ofn_hidereadonly|ofn_enab lesizing|ofn_filemustex
37、ist,strfilter); if(dlg.domodal()=idok) /顯示保存 文件對話框 strfilename=dlg.getpathname(); /獲取文件 名 cfile m_file(strfilename,cfile:modecreate|cfile:modewrite); if(m_fundlist.getcount()=0) afxmessagebox(數(shù)據(jù)為空!); return; 22 for(int i=0;im_fundlist.getcount();i+) m_cthelist.gettext(i,strtext); /獲取列表 框數(shù)據(jù) strcpy(szn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林省海門市重點名校2024屆中考猜題數(shù)學試卷含解析
- 建湖實中教育集團達標名校2024屆中考數(shù)學考前最后一卷含解析
- 水電工施工方案
- 山東大學《信息檢索與閱讀》2023-2024學年第一學期期末試卷
- 廣西工程職業(yè)學院《人權法》2023-2024學年第二學期期末試卷
- 濮陽醫(yī)學高等??茖W?!镀つw性病護理學》2023-2024學年第二學期期末試卷
- 2025年廣東省廣州市廣東第二師范學院番禺附中高三第二次模擬考試試卷歷史試題含解析
- 廣西信息職業(yè)技術學院《短片寫作》2023-2024學年第二學期期末試卷
- 朔州市重點中學2025屆高三下學期第五次月考生物試題試卷試卷含解析
- 內蒙古巴彥淖爾第一中學2025年高三接軌考試物理試題文試題含解析
- 日本_多自然河川_治理及其對我國河道整治的啟示
- PCBA外觀檢驗標準_IPC-A-610E完整
- 新版《江蘇省建設工程驗收資料》分部分項檢驗批劃分文檔
- 《甲方認質認價確認單》
- 淺析民族歌曲《哥哥不來花不開》的演唱特征
- 建筑工程施工工作聯(lián)系函
- 物流客戶關系管理論文
- 黃河科技學院建筑系教學樓土木工程設計計算
- 居民健康檔案管理流程圖參考模板
- 干部(職工)基本信息審核表
- 企業(yè)、學校、實習生三方協(xié)議實習協(xié)議書
評論
0/150
提交評論