C課程設(shè)計公司職員管理系統(tǒng)完整代碼_第1頁
C課程設(shè)計公司職員管理系統(tǒng)完整代碼_第2頁
C課程設(shè)計公司職員管理系統(tǒng)完整代碼_第3頁
免費預(yù)覽已結(jié)束,剩余15頁可下載查看

下載本文檔

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

文檔簡介

1、課程設(shè)計報告公司人員管理系統(tǒng)課程:面向?qū)ο笳n程設(shè)計班級:11511學(xué)號:20113051102姓名:吳小蛟指導(dǎo)老師:清華教授2012年6月12日一、設(shè)計題目(問題)描述和要求1題目:公司人員管理系統(tǒng)2問題描述:某小型公司,主要有四類人員:經(jīng)理、兼職技術(shù)人員、銷售經(jīng)理和兼職推銷員?,F(xiàn)在,需要存儲這些人員的姓名、編號、級別、當(dāng)月薪水,計算月薪總額并顯示全部信息。要求:(1)其中,人員編號在生成人員信息時同時生成,每輸入一個人員信息編號順序加1。(2)程序?qū)λ腥藛T有提升級別的功能(3)月薪的計算方法是:經(jīng)理拿固定月薪,兼職技術(shù)人員按工作小時數(shù)領(lǐng)取月薪,兼職推銷員的報酬按該推銷員當(dāng)月銷售額提成,銷售

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

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

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

5、入。系統(tǒng)使用的數(shù)據(jù)文件格式如下:Base.txt:(格式:項目數(shù)據(jù))經(jīng)理固定月薪3000銷售經(jīng)理固定月薪1000銷售經(jīng)理提成1銷售人員提成2技術(shù)人員小時工資20ID6Person.txt:(格式:編號,姓名,人員類別,其它數(shù)據(jù),銷售員銷售額,技術(shù)人員工作小時)wang31000002 liu1wu41003 huang2tao3150000注:人員類型編號1經(jīng)理;2銷售經(jīng)理;3銷售員;4技術(shù)人員三、系統(tǒng)設(shè)計1. 系統(tǒng)總體框架使用面向?qū)ο蟮某绦蛟O(shè)計思想進行分析,整個系統(tǒng)涉及兩大類信息和操作,公司,人員。所以系統(tǒng)主要涉及兩個大類:公司類Company人員類Person。系統(tǒng)的總體框架就是公司類,人

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

7、技術(shù)人員包含工作小時數(shù)且計算工資的方法不同,所以應(yīng)當(dāng)為4類人員創(chuàng)建相應(yīng)的Person類的派生類。(3)為了使公司類可以方便處理人員信息,可以考慮將公司類確定為人員類的友元類或者人員類提供公共的方法以便公司類進行操作。為了公司類可以用共同方法操作人員類,可以將人員類的方法確定為虛函數(shù)。2. 類的層次圖PersonNo,Name,Duty,Earning,next,Person(),CalcSalary(),Output()ManagerSalesSalesManagerTechnicianManager(),Amount,Amount,t,CalcSalary(),Sales(),GetAmou

8、nt(),SalesManager(),Technician(),Output。SetAmount(),SetAmount(),GetT(),SetT(),CalcSalary(),CalcSalary(),CalcSalary(),Output()Output()Output()其中:(1) Person類的No-人員編號,Name人員姓名,Duty-人員類別,Earning-工資,next-指向下一個人員的指針;Person類的CalcSalary(),Output()定義為純虛函數(shù)分別表示要計算人員工資和輸出人員信息,由于定義純虛函數(shù),所以Person是抽象類,具體計算工資,輸出人員信息

9、由派生類完成。(2) 各個派生的類,包含本類對象特有的數(shù)據(jù),Sales:Amount-銷售員銷售額,SalesManager:Amount-銷售經(jīng)理的總銷售額(系統(tǒng)統(tǒng)計各個銷售員銷售額得到銷售經(jīng)理的總銷售額),Technician:t-技術(shù)人員工作小時數(shù)。CompanyPerson*Worker,Clear(),Company(),Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()其中:(1)Worker就是人員鏈表。分別表示系統(tǒng)各(2)Clear()用于清除人員鏈表所有結(jié)點(3) Add(),Delete(),Modif

10、y(),Query(),Set(),Save(),Load()個功能模塊:增加人員,刪除人員,修改人員,查詢本月經(jīng)營信息,基礎(chǔ)數(shù)據(jù)設(shè)置,數(shù)據(jù)存盤,數(shù)據(jù)裝入。3. 系統(tǒng)關(guān)鍵算法流程圖(1)主函數(shù)流程開始接受輸入創(chuàng)建公司對象141顯示菜單根據(jù)輸入執(zhí)行公司操作NNY結(jié)束Company:Add()Company:Delete()開始輸入員工ID查找要刪除結(jié)點結(jié)點存在?鏈表刪除員工結(jié)點提示未找到結(jié)束Company:Modify(5)Company:Query()(6)Company:Save()(7)Company:Load()四、源程序清單參見附錄五、系統(tǒng)測試CA"D:Procra*File

11、sIicrosoftVisual人員和基礎(chǔ)數(shù)據(jù)已經(jīng)裝入-盼人人人本數(shù)真請么醫(yī)修查基數(shù)數(shù)退統(tǒng)系二瑾管自心六、小結(jié)通過程序設(shè)計,我能夠基本掌握C+程序設(shè)計的方法,并且在此基礎(chǔ)上掌握類的構(gòu)造方法,明確類中構(gòu)造函數(shù)、成員函數(shù)的建立以及調(diào)用,此外,并且,結(jié)合C+中字符串函數(shù)的編譯系統(tǒng)給定的庫函數(shù),采用一定的邏輯編譯,實現(xiàn)題目中要求的各項要求,達到基本實驗?zāi)康?,提高自己的C+語言使用水平。七、參考文獻【1】陳維興,林小茶.C+面向?qū)ο蟪绦蛟O(shè)計教程北京.清華大學(xué)出版社2010,10【2】譚浩強.C語言程序設(shè)計.北京:清華大學(xué)出版社.2010,5附錄:/*本程序有關(guān)的兩個數(shù)據(jù)文件:base.txt-基礎(chǔ)數(shù)據(jù)文

12、件(必須存在,且按規(guī)定格式保存)person.txt人員信息文件(可選)*/#inelude<iostream.h>#ineludevfstream.h>#inelude<etype.h>#inelude<string.h>II全局?jǐn)?shù)據(jù),對象doubleManagerSalary;II經(jīng)理固定月薪doubleSalesManagerSalary;/銷售經(jīng)理固定月薪doubleSalesManagerPercent;銷售經(jīng)理提成doubleSalesPereent;II銷售人員提成doubleWagePerHour;II技術(shù)人員小時工資intID;員工標(biāo)

13、識(要保證唯一)classPerson/員工類protected:intNo;/編號charName20;/姓名intDuty;/崗位doubleEarning;/收入Person*next;public:Person(charID,char*Name,intDuty)this->Duty=Duty;strcpy(this->Name,Name);this->No=ID;virtualvoidCalcSalary()=0;virtualvoidOutput()=0;friendclassCompany;classManager:publicPerson/經(jīng)理類public:M

14、anager(charID,char*Name,intDuty):Person(ID,Name,Duty)voidCalcSalary()Earning=ManagerSalary;voidOutput()CalcSalary();cout<<No<<"t"<<Name<<"t經(jīng)理t"<<Earning<<endl;classSalesManager:publicPerson/銷售經(jīng)理類private:doubleAmount;public:SalesManager(charID,c

15、har*Name,intDuty):Person(ID,Name,Duty)voidSetAmount(doubles)Amount=s;voidCalcSalary()Earning=SalesManagerSalary+Amount*SalesManagerPercent/100;voidOutput()CalcSalary();cout<<No<<"t"<<Name<<"t銷售經(jīng)理t"<<Earning<<endl;classTechnician:publicPerson/技術(shù)

16、員類private:doublet;public:Technician(charID,char*Name,intDuty,doubleT):Person(ID,Name,Duty)this->t=T;doubleGetT()returnt;voidSetT(doubleT)this->t=T;voidCalcSalary()Earning=WagePerHour*t;voidOutput()CalcSalary();cout<<No<<"t"<<Name<<"t技術(shù)員t"<<t<

17、;<"t"<<Earning<<endl;classSales:publicPerson/銷售員類private:doubleAmount;public:Sales(charID,char*Name,intDuty,doubleAmount):Person(ID,Name,Duty)this->Amount=Amount;doubleGetAmount()returnAmount;voidSetAmount(doubleAmount)this->Amount=Amount;voidCalcSalary()Earning=SalesP

18、ercent/100*Amount;voidOutput()CalcSalary();cout<<No<<"t"<<Name<<"t銷售員t"<<Amount<<"t"<<Earning<<endl;classCompany/公司類private:Person*Worker;/員工表voidClear();/清除內(nèi)存中數(shù)據(jù)public:Company()Worker=0;Load();Company()Person*p;p=Worker;w

19、hile(p)p=p->next;deleteWorker;Worker=p;Worker=0;voidAdd();/增加人員voidDelete();/刪除人員voidModify();/修改人員voidQuery();/查詢?nèi)藛TvoidSet();/基礎(chǔ)數(shù)據(jù)設(shè)置voidSave();/數(shù)據(jù)存盤(包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù))voidLoad();/數(shù)據(jù)裝入(包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù));voidCompany:Clear()/清除內(nèi)存中人員數(shù)據(jù)(內(nèi)部使用)Person*p=Worker;while(p)Worker=p->next;deletep;p=Worker;voidCompany

20、:Add()Person*p;/新結(jié)點指針intDuty;charName20;doubleAmount,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;elseif(Duty=4)coutvv"本月工作小時數(shù)(0-168):&

21、quot;cin>>T;/創(chuàng)建新員工結(jié)點switch(Duty)case1:p=newManager(ID,Name,Duty);break;case2:p=newSalesManager(ID,Name,Duty);break;case3:p=newSales(ID,Name,Duty,Amount);break;case4:p=newTechnician(ID,Name,Duty,T);break;p->next=0;/員工結(jié)點加入鏈表if(Worker)/若已經(jīng)存在結(jié)點Person*p2;p2=Worker;while(p2->next)/查找尾結(jié)點p2=p2-&

22、gt;next;p2->next=p;/連接else/若不存在結(jié)點(表空)Worker=p;/連接voidCompany:Delete()/刪除人員intNo;cout<<"n*刪除員工*n"cout<<"ID:"cin>>No;/查找要刪除的結(jié)點Person*p1,*p2;p1=Worker;while(p1)if(p1->No=No)break;elsep2=p1;p1=p1->next;/刪除結(jié)點if(p1!=NULL)/若找到結(jié)點,則刪除if(p1=Worker)/若要刪除的結(jié)點是第一個結(jié)點W

23、orker=p1->next;deletep1;else/若要刪除的結(jié)點是后續(xù)結(jié)點p2->next=p1->next;deletep1;coutvv"找到并刪除n"else/未找到結(jié)點cout«"未找到!n"voidCompany:Modify()intNo,Duty;charName20;doubleAmount,T;cout<<"n*修改員工*n"cout<<"ID:"cin>>No;/查找要修改的結(jié)點Person*p1,*p2;p1=Worker

24、;while(p1)if(p1->No=No)break;elsep2=p1;p1=p1->next;/修改結(jié)點if(p1!=NULL)/若找到結(jié)點p1->Output();coutvv"調(diào)整崗位(1-經(jīng)理2-銷售經(jīng)理3-銷售員4-技術(shù)員):";cin>>Duty;if(p1->Duty!=Duty)/若崗位發(fā)生變動/修改其它數(shù)據(jù)cout«"輸入姓名:"cin>>Name;if(Duty=3)cout«"本月銷售額:"cin>>Amount;elseif(

25、Duty=4)coutvv"本月工作小時數(shù)(0-168):"cin>>T;/創(chuàng)建新員工結(jié)點Person*p3;switch(Duty)case1:p3=newManager(p1->No,Name,Duty);break;case2:p3=newSalesManager(p1->No,Name,Duty);break;case3:p3=newSales(p1->No,Name,Duty,Amount);break;case4:p3=newTechnician(p1->No,Name,Duty,T);break;/員工結(jié)點替換到鏈表p3-&

26、gt;next=p1->next;if(p1=Worker)/若要替換的結(jié)點是第一個結(jié)點Worker=p3;else/若要刪除的結(jié)點是后續(xù)結(jié)點p2->next=p3;/刪除原來的員工結(jié)點deletep1;else/若崗位沒有變動coutvv"輸入姓名:"cin>>p1->Name;if(Duty=3)coutvv"本月銷售額:"cin>>Amount;(Sales*)p1)->SetAmount(Amount);elseif(Duty=4)coutvv"本月工作小時數(shù)(0-168):"c

27、in»T;(Technician*)p1)->SetT(T);cout«"修改成功!n"else/未找到結(jié)點cout«"未找到!n"voidCompany:Query()cout<<"n*查詢?nèi)藛T本月銷售信息*n"doublesum=0;/銷售額總和Person*p=Worker;while(p)if(p->Duty=3)sum+=(Sales*)p)->GetAmount();p=p->next;p=Worker;doublesum2=0;/工資總和while(p)i

28、f(p->Duty=2)(SalesManager*)p)->SetAmount(sum);p->Output();sum2+=p->Earning;p=p->next;cout«"本月盈利:"v<sum*0.20-sum2v<endl;cout<<"(按照20%利潤計算)n"voidCompany:Set()cout<<"n*設(shè)置基礎(chǔ)數(shù)據(jù)*n"cout«"經(jīng)理固定月薪"<<ManagerSalaryvv"元

29、:"cin>>ManagerSalary;cout«"銷售經(jīng)理固定月薪"«SalesManagerSalaryvv'元:"cin>>SalesManagerSalary;cout«"銷售經(jīng)理提成"«SalesManagerPercentvv'%:"cin>>SalesManagerPercent;cout«"銷售人員提成"«SalesPercent<<"%:"ci

30、n>>SalesPercent;cout«"技術(shù)人員小時工資"v<WagePerHourvv"(元/小時):"cin>>WagePerHour;cout«"員工標(biāo)識>="vv|D<v":"cin>>ID;voidCompany:Save()/數(shù)據(jù)存盤(包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù)),均采用文本文件ofstreamfPerson,fBase;charc;cout<<"n保存人員和基礎(chǔ)數(shù)據(jù),是否繼續(xù)?Y/N:"cin&g

31、t;>c;if(toupper(c)!='Y')return;/保存人員編號、姓名、崗位fPerson.open("person.txt",ios:out);Person*p=Worker;while(p)fPerson<<p->No<<"t"<<p->Name<<"t"<<p->Duty<<"t"if(p->Duty=3)fPerson<<(Sales*)p)->GetAmoun

32、t()<<"t"elseif(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"<<ManagerSalaryvvendl;fBase«"銷售經(jīng)理固定月薪t"«S

33、alesManagerSalaryvvendl;fBase«"銷售經(jīng)理提成t"<<SalesManagerPercent<<endl;fBasevv"銷售人員提成t"<<SalesPercent<<endl;fBasevv"技術(shù)人員小時工資t"v<WagePerHourv<endl;fBasevv"|Dt"vv|Dvvendl;fPerson.close();cout<<"n保存人員和基礎(chǔ)數(shù)據(jù)已經(jīng)完成.n"void

34、Company:Load()/數(shù)據(jù)裝入(包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù))/基礎(chǔ)數(shù)據(jù)裝入ifstreamfBase;charbuf80;/buf用于保存數(shù)據(jù)文件中的注釋字符串fBase.open("base.txt",ios:in);fBase>>buf>>ManagerSalary;/經(jīng)理固定月薪fBase>>buf>>SalesManagerSalary;/銷售經(jīng)理固定月薪fBase>>buf>>SalesManagerPercent;/銷/售經(jīng)理提成/銷售人員提成/技術(shù)人員小時工資/員工標(biāo)識/銷售人員提成/

35、技術(shù)人員小時工資/員工標(biāo)識fBase>>buf>>SalesPercent;fBase>>buf>>WagePerHour;fBase>>buf>>ID;fBase.close();/清除內(nèi)存人員數(shù)據(jù)Clear();/人員數(shù)據(jù)數(shù)據(jù)裝入ifstreamfPerson;Person*p=Worker;intNo;charName20;intDuty;doubleAmount,T;fPerson.open("person.txt",ios:in);/讀一條記錄fPerson>>No>>Name>>

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論