C++人事管理系統(tǒng)課程設(shè)計(jì)報(bào)告_第1頁
C++人事管理系統(tǒng)課程設(shè)計(jì)報(bào)告_第2頁
C++人事管理系統(tǒng)課程設(shè)計(jì)報(bào)告_第3頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、設(shè)計(jì)題目(問題)描述和要求1 題目:人事管理系統(tǒng)2 問題描述: 某小型公司,主要有四類人員:經(jīng)理、兼職技術(shù)人員、銷售經(jīng)理和兼職推銷 員?,F(xiàn)在,需要存儲(chǔ)這些人員的姓名、編號(hào)、級(jí)別、當(dāng)月薪水,計(jì)算月薪總額并 顯示全部信息。要求:( 1) 其中,人員編號(hào)在生成人員信息時(shí)同時(shí)生成, 每輸入一個(gè)人員信息編號(hào)順 序加 1。( 2) 程序?qū)λ腥藛T有提升級(jí)別的功能( 3) 月薪的計(jì)算方法是: 經(jīng)理拿固定月薪, 兼職技術(shù)人員按工作小時(shí)數(shù)領(lǐng)取月 薪,兼職推銷員的報(bào)酬按該推銷員當(dāng)月銷售額提成 , 銷售經(jīng)理既拿固定月 薪也領(lǐng)取銷售提成。( 4) 能按姓名或者編號(hào)顯示、查找、增加、刪除和保存各類人員的信息二、系統(tǒng)

2、分析與模塊設(shè)計(jì) 根據(jù)問題描述和要求,系統(tǒng)要求能夠按姓名或者編號(hào)顯示、查找、增加、刪 除和保存各類人員的信息。確定程序至少應(yīng)該具備如下功能: “查詢?nèi)藛T”、“增 加人員”、“刪除人員”、“數(shù)據(jù)存盤”基本模塊。系統(tǒng)既然具有“數(shù)據(jù)存盤”功能人員數(shù)據(jù)可以保存到磁盤文件,那么也就 意味著今后可以從磁盤文件讀出人員數(shù)據(jù), 所以系統(tǒng)增加了 “人員數(shù)據(jù)裝入” 模 塊,以方便用戶使用、避免數(shù)據(jù)重復(fù)錄入??紤]到系統(tǒng)實(shí)現(xiàn)簡(jiǎn)捷,人員數(shù)據(jù)文件 采用文本文件,人員數(shù)據(jù)文件名: Person.txt 。做為一個(gè)完整系統(tǒng),除了具有增加人員,刪除人員信息模塊,還應(yīng)該具有修 改人員相關(guān)信息的功能,所以本系統(tǒng)設(shè)計(jì)時(shí)考慮增加“修改人

3、員”模塊。考慮到根據(jù)編號(hào)查找人員信息功能在“刪除人員” 、“修改人員”等模塊都使 用,所以可以考慮設(shè)置為一個(gè)模塊。考慮到系統(tǒng)要求人員編號(hào)在生成人員信息時(shí)同時(shí)生成,每輸入一個(gè)人員信息編號(hào)順序加 1。這樣就要求人員編號(hào)在增加人員時(shí)自動(dòng)生成 ( 增加 1)且不重復(fù)。 根據(jù)這個(gè)要求,可以考慮設(shè)置一個(gè)全局量: “當(dāng)前最大編號(hào)”,每增加一個(gè)人員, 當(dāng)前最大編號(hào)自動(dòng)增 1,然后新增加人員使用這個(gè)編號(hào)。為了保證系統(tǒng)能記憶這 個(gè)編號(hào),可以使用一個(gè)數(shù)據(jù)文件保存當(dāng)前這個(gè)編號(hào)。 系統(tǒng)每次開始運(yùn)行前從文件 讀入這個(gè)編號(hào), 隨著人員增加, 編號(hào)自動(dòng)增加, 系統(tǒng)每次運(yùn)行結(jié)束時(shí)將這個(gè)編號(hào) 寫入文件。本系統(tǒng)將初值 ( 沒有一個(gè)

4、用戶時(shí) )設(shè)置為 0??紤]到人員的許多固定信息如:經(jīng)理、銷售經(jīng)理的固定月薪,銷售經(jīng)理、銷 售人員提成, 技術(shù)人員小時(shí)工資等都是一些不需要每個(gè)人員都要輸入的信息, 所 以可以將這些信息都保存在一個(gè)數(shù)據(jù)文件中, 本系統(tǒng)為了方便起見, 將這些信息 與“最大編號(hào)”全部保存在一個(gè)文件中,并使用“基礎(chǔ)數(shù)據(jù)設(shè)置”模塊進(jìn)行設(shè)置 和管理。基礎(chǔ)數(shù)據(jù)文件也采用文本文件,基礎(chǔ)數(shù)據(jù)文件名: Base.txt 。本系統(tǒng)還提供“查詢本月經(jīng)營(yíng)信息”幫助計(jì)算銷售總額,工資總額,并按照 公式計(jì)算本月盈虧。綜合考慮系統(tǒng)具有下面 8 項(xiàng)功能模塊:增加人員,刪除人員,修改人員,查 詢本月經(jīng)營(yíng)信息,基礎(chǔ)數(shù)據(jù)設(shè)置,數(shù)據(jù)存盤,數(shù)據(jù)裝入。系統(tǒng)

5、使用的數(shù)據(jù)文件格式如下:Base.txt: (格式:項(xiàng)目 數(shù)據(jù) ) 經(jīng)理固定月薪 3000 銷售經(jīng)理固定月薪 1000 銷售經(jīng)理提成 1 銷售人員提成 2 技術(shù)人員小時(shí)工資 20ID 6Person.txt:(格式:編號(hào),姓名,人員類別,其它數(shù)據(jù),銷售員銷售額,技術(shù)人員工作小時(shí))2 wang 31000003 liu 14 wu 4 1005 huang 26 tao 3150000注:人員類型編號(hào) 1經(jīng)理; 2銷售經(jīng)理; 3銷售員; 4技術(shù)人員三、系統(tǒng)設(shè)計(jì)1. 系統(tǒng)總體框架使用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想進(jìn)行分析,整個(gè)系統(tǒng)涉及兩大類信息和操作,公司,人員。所以系統(tǒng)主要涉及兩個(gè)大類:公司類 Comp

6、any人員類Person。系統(tǒng)的總體框架就是公司類,人員類的定義;主函數(shù)中定義一個(gè)公司對(duì)象,循環(huán)顯 示主菜單并根據(jù)用戶選擇調(diào)用公司類的相應(yīng)方法 (成員函數(shù))。公司類Company考慮系統(tǒng)操作的人員信息的數(shù)量具有不確定性,所以考慮 使用鏈表保存、處理人員信息。公司類包含:所有人員信息的一個(gè)不帶頭結(jié)點(diǎn)的 鏈表(作為數(shù)據(jù)成員)及可以對(duì)人員信息進(jìn)行增,刪,改,查詢經(jīng)營(yíng)信息,基礎(chǔ) 數(shù)據(jù)設(shè)置,數(shù)據(jù)存盤,數(shù)據(jù)裝入等操作的相關(guān)模塊 (Add,Delete,Modify,Query,Set,Save,Load)作為成員函數(shù)。人員類Person :所有人員都具有的公共信息及操作可以使用人員類進(jìn)行描 述。由于系統(tǒng)具

7、有4類人員且4類人員數(shù)據(jù),操作有所不同,如銷售員包含銷售 額,而技術(shù)人員包含工作小時(shí)數(shù)且計(jì)算工資的方法不同,所以應(yīng)當(dāng)為4類人員創(chuàng)建相應(yīng)的Person類的派生類。(3)為了使公司類可以方便處理人員信息,可以考慮將公司類確定為人員類的友 元類或者人員類提供公共的方法以便公司類進(jìn)行操作。為了公司類可以用共同方法操作人員類,可以將人員類的方法確定為虛函數(shù)。2. 類的層次圖Person No,Name,Duty,Earni ng, next,Perso n( ),CalcSalary(),Output() Ma nager(), Amou nt,Amou nt, t,CalcSalary(), Sale

8、s(),GetAmou nt(), SalesMa nager(),Tech nicia n(),Output()SetAmou nt(),SetAmou nt(),GetT(),SetT(),CalcSalary(), CalcSalary(), CalcSalary(),Output() Output() Output()Tech ni cia n其中:(1) Person類的No-人員編號(hào),Name人員姓名,Duty-人員類別,Earning-工 資,next-指向下一個(gè)人員的指針;Person類的CalcSalary() ,Output()定義為 純虛函數(shù)分別表示要計(jì)算人員工資和輸出人

9、員信息,由于定義純虛函數(shù),所以Person是抽象類,具體計(jì)算工資,輸出人員信息由派生類完成。(2) 各個(gè)派生的類,包含本類對(duì)象特有的數(shù)據(jù),Sales:Amount-銷售員銷售額,SalesManager:Amount-銷售經(jīng)理的總銷售額(系統(tǒng)統(tǒng)計(jì)各個(gè)銷售員銷售額得到 銷售經(jīng)理的總銷售額),Technician:t-技術(shù)人員工作小時(shí)數(shù)。Compa nyPerson *Worker,Clear(),Compa ny(),Compa ny(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()其中:(1) Worker就是人員鏈表。(2) Clea

10、r()用于清除人員鏈表所有結(jié)點(diǎn)。(3) Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分別表示系統(tǒng)各個(gè)功能模塊:增加人員,刪除人員,修改人員,查詢本月經(jīng)營(yíng)信息,基礎(chǔ)數(shù)據(jù)設(shè)置,數(shù)據(jù)存盤,數(shù)據(jù)裝入。3. 系統(tǒng)關(guān)鍵算法流程圖(1)主函數(shù)流程開始創(chuàng)建公司對(duì)象顯示菜單 接受輸入根據(jù)輸入執(zhí)行公司操作 Compa ny:Add() Compa ny:Delete()開始I輸入員工ID查找要?jiǎng)h除結(jié)點(diǎn)匚、.結(jié)點(diǎn)存在?二q F片鏈表刪除員工結(jié)點(diǎn)提示未找到1結(jié)束 Compa ny:Modify(5) Compa ny:Query()遍歷統(tǒng)計(jì)銷售額遍歷統(tǒng)計(jì)工資總

11、額計(jì)算盈虧打印本月經(jīng)營(yíng)信息結(jié)束(6)Compa ny:Save()(7) Compa ny:Load()四、源程序清單參見附錄五、系統(tǒng)測(cè)試(列出各功能具體的輸入數(shù)據(jù)及對(duì)應(yīng)的輸出結(jié)果,說明其是否符合設(shè)計(jì)要 求)六、小結(jié)(設(shè)計(jì)過程心得體會(huì))附錄:/*本程序有關(guān)的兩個(gè)數(shù)據(jù)文件:base.txt-基礎(chǔ)數(shù)據(jù)文件(必須存在,且按規(guī)定格式保存)person .txt人員信息文件(可選)*/ #include <iostream.h>#include <fstream.h>#include <ctype.h>#include <string.h> /全局?jǐn)?shù)據(jù),對(duì)

12、象double ManagerSalary;/經(jīng)理固定月薪double SalesManagerSalary; /銷售經(jīng)理固定月薪double SalesManagerPercent; 銷/ 售經(jīng)理提成 double SalesPercent;/銷售人員提成 class Person /員工類double WagePerHour;int ID;/技術(shù)人員小時(shí)工資/員工標(biāo)識(shí)(要保證唯一 )protected:int No; /編號(hào)char Name20; /姓名int Duty;/崗位double Earning; /收入Person *next;public:Person(char ID,ch

13、ar *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 Person /經(jīng)理類public:Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary;void Output(

14、)CalcSalary(); cout<<No<<"t"<<Name<<"t 經(jīng)理 t"<<Earning<<endl;class SalesManager:public Person /銷售經(jīng)理類private:double Amount;public:SalesManager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void SetAmount(double s)Amount=s;void CalcSalary()Ear

15、ning=SalesManagerSalary+Amount*SalesManagerPercent/100;void Output()CalcSalary(); cout<<No<<"t"<<Name<<"t 銷售經(jīng)理 t"<<Earning<<endl;class Technician:public Person /技術(shù)員類private:double t;public:Technician(char ID,char *Name,int Duty,double T):Person

16、(ID,Name,Duty) this->t=T;double GetT()return t;void SetT(double T)this->t=T;void CalcSalary()Earning=WagePerHour*t;void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t 技術(shù)員 t"<<t<<"t"<<Earning<<endl;class Sales:public

17、Person / 銷售員類private:double Amount;public:Sales(char ID,char *Name,int Duty,double Amount):Person(ID,Name,Duty) this->Amount=Amount;double GetAmount()return Amount;void SetAmount(double Amount) this->Amount=Amount;void CalcSalary() Earning=SalesPercent/100*Amount;void Output()CalcSalary(); cou

18、t<<No<<"t"<<Name<<"t 銷售員 t"<<Amount<<"t"<<Earning<<endl;class Company /公司類private:Person *Worker; /員工表void Clear(); /清除內(nèi)存中數(shù)據(jù) public:Company()Worker=0;Load();Company()Person *p;p=Worker;while(p) p=p->next; delete Worker;

19、 Worker=p;Worker=0;void Add();/增加人員void Delete(); /刪除人員void Modify(); /修改人員void Query(); /查詢?nèi)藛Tvoid Set();/基礎(chǔ)數(shù)據(jù)設(shè)置void Save();/數(shù)據(jù)存盤 (包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù) )void Load();/數(shù)據(jù)裝入 (包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù) );void Company:Clear() /清除內(nèi)存中人員數(shù)據(jù) (內(nèi)部使用 ) Person* p=Worker;while(p)Worker=p->next;delete p; p=Worker;void Company:Add()Per

20、son *p; /新結(jié)點(diǎn)指針int Duty;char Name20;double Amount,T;cout<<"n* 新增員工 *n"/輸入員工信息ID+;cin>>Duty;coutvv"輸入崗位(1-經(jīng)理2-銷售經(jīng)理3-銷售員4-技術(shù)員):" cout«"輸入姓名:"cin>>Name;if(Duty=3)cout«"本月銷售額:"cin>>Amount;else if(Duty=4)coutvv"本月工作小時(shí)數(shù)(0-168):&

21、quot;cin>>T;/創(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 Sales(ID,Name,Duty,Amount); break;case 4:p=new Technician(ID,Name,Duty,T); break;p->next=0;/員工結(jié)點(diǎn)加入鏈表if(Worker) /若已經(jīng)存在結(jié)點(diǎn)Person *p2;p2=Worker;while(p2->next

22、) /查找尾結(jié)點(diǎn)p2=p2->next;p2->next=p; /連接else /若不存在結(jié)點(diǎn) (表空 )Worker=p; /連接void Company:Delete() /刪除人員int No; cout<<"n* 刪除員工 *n" cout<<"ID:" cin>>No;/查找要?jiǎng)h除的結(jié)點(diǎn)Person *p1,*p2; p1=Worker; while(p1) if(p1->No=No) break;else p2=p1; p1=p1->next;/刪除結(jié)點(diǎn) if(p1!=NULL)/

23、若找到結(jié)點(diǎn),則刪除 if(p1=Worker) /若要?jiǎng)h除的結(jié)點(diǎn)是第一個(gè)結(jié)點(diǎn) Worker=p1->next; delete p1;else / 若要?jiǎng)h除的結(jié)點(diǎn)是后續(xù)結(jié)點(diǎn) p2->next=p1->next; delete p1; coutvv"找到并刪除n"else /未找到結(jié)點(diǎn) cout«"未找到!n"void Company:Modify()int No,Duty;char Name20;double Amount,T;cout<<"n* 修改員工 *n" cout<<&quo

24、t;ID:" cin>>No;/查找要修改的結(jié)點(diǎn)Person *p1,*p2; p1=Worker; while(p1)if(p1->No=No)break;elsep2=p1; p1=p1->next;/修改結(jié)點(diǎn) if(p1!=NULL)/ 若找到結(jié)點(diǎn) cin>>Duty;p1->Output();coutvv"調(diào)整崗位(1-經(jīng)理2-銷售經(jīng)理3-銷售員4-技術(shù)員):" if(p1->Duty!=Duty)/若崗位發(fā)生變動(dòng) /修改其它數(shù)據(jù)cout«"輸入姓名:"cin>>Na

25、me; if(Duty=3)cout«"本月銷售額:"cin>>Amount;else if(Duty=4)coutvv"本月工作小時(shí)數(shù)(0-168):" cin>>T;/創(chuàng)建新員工結(jié)點(diǎn)Person *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 Sales(p1->No,Name,Duty,A

26、mount); 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)是第一個(gè)結(jié)點(diǎn) Worker=p3;else /若要?jiǎng)h除的結(jié)點(diǎn)是后續(xù)結(jié)點(diǎn)p2->next=p3;/刪除原來的員工結(jié)點(diǎn)delete p1;else / 若崗位沒有變動(dòng)coutvv"輸入姓名:";cin>>p1->Name;if(Duty=3)cout«"本月銷售額:"cin&#

27、187;Amount; (Sales *)p1)->SetAmount(Amount);else if(Duty=4)cout«"本月工作小時(shí)數(shù)(0-168):"cin»T; (Technician *)p1)->SetT(T);cout«"修改成功!n"else /未找到結(jié)點(diǎn)cout«"未找到!n"void Company:Query()cout<<"n* 查詢?nèi)藛T本月銷售信息 *n"double sum=0; /銷售額總和Person *p=Wor

28、ker;while(p)if(p->Duty=3)sum+=(Sales *)p)->GetAmount(); p=p->next;p=Worker;double sum2=0; /工資總和while(p)if(p->Duty=2)(SalesManager *)p)->SetAmount(sum);p->Output(); sum2+=p->Earning; p=p->next;cout«"本月盈利:"v<sum*0.20-sum2v<endl;coutvv"(按照20%利潤(rùn)計(jì)算)n"

29、;void Company:Set()cout<<"n* 設(shè)置基礎(chǔ)數(shù)據(jù) *n"cout«"經(jīng)理固定月薪"<<ManagerSalaryvv"元:" cin>>ManagerSalary;cout«"銷售經(jīng)理固定月薪"«SalesManagerSalaryvv'元:" cin>>SalesManagerSalary;coutvv"銷售經(jīng)理提成"vvSalesManagerPercent<<%

30、 :" cin>>SalesManagerPercent;coutvv"銷售人員提成"vvSalesPercent<<"%:" cin>>SalesPercent;coutvv"技術(shù)人員小時(shí)工資"v<WagePerHourvv"(元/小時(shí)):" cin>>WagePerHour;coutvv"員工標(biāo)識(shí)>="vv|Dvv":"cin>>ID;void Company:Save() /數(shù)據(jù)存盤 (包

31、括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù) ),均采用文本文件ofstream fPerson,fBase;char c;coutvv"n 保存人員和基礎(chǔ)數(shù)據(jù) ,是否繼續(xù) ?Y/N:"cin>>c;if(toupper(c)!='Y')return;/保存人員編號(hào)、姓名、崗位fPerson.open("person.txt",ios:out);Person *p=Worker;while(p)fPersonvvp->Novv"t"vvp->Namevv"t"vvp->Dutyvv"

32、t"if(p->Duty=3) fPerson<<(Sales*)p)->GetAmount()<<"t"else if(p->Duty=4)fPerson<<(Technician *)p)->GetT()<<"t" fPerson<<endl;p=p->next;fPerson.close();/保存基礎(chǔ)數(shù)據(jù)fBase.open("base.txt",ios:out);fBase«"經(jīng)理固定月薪 t"v

33、<ManagerSalaryvvendl;fBase«"銷售經(jīng)理固定月薪 t"<<SalesManagerSalaryvvendl; fBase«"銷售經(jīng)理提成 t"<<SalesManagerPercent<<endl; fBasevv"銷售人員提成 t"<<SalesPercent<<endl;fBasevv"技術(shù)人員小時(shí)工資 t"v<WagePerHourv<endl; fBasevv"IDt"

34、;vvIDvvendl;fPerson.close();coutvv"n 保存人員和基礎(chǔ)數(shù)據(jù)已經(jīng)完成 .n" void Company:Load() /數(shù)據(jù)裝入 (包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù) ) /基礎(chǔ)數(shù)據(jù)裝入ifstream fBase;char buf80; /buf 用于保存數(shù)據(jù)文件中的注釋字符串fBase.open("base.txt",ios:in);fBase>>buf>>ManagerSalary;/經(jīng)理固定月薪fBase>>buf>>SalesManagerSalary; /銷售經(jīng)理固定月薪 f

35、Base>>buf>>SalesManagerPercent; /銷/ 售經(jīng)理提成/銷售人員提成 /技術(shù)人員小時(shí)工資 /員工標(biāo)識(shí)fBase>>buf>>SalesPercent; fBase>>buf>>WagePerHour; fBase>>buf>>ID;fBase.close();/清除內(nèi)存人員數(shù)據(jù)Clear();/人員數(shù)據(jù)數(shù)據(jù)裝入ifstream fPerson;Person *p=Worker;int No; char Name20; int Duty;double Amount,T;fPerson.open("person.txt",ios:in);/讀一條記錄 fPerson>>No>>Name>>Duty; if(Duty=3)fPerson>>Amount;else if(Du

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論