


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計報告公司人員管理系統(tǒng)課程:面向對象課程設計1. 班級:11511學號:20113051102姓名:吳小蛟指導老師:清華教授2012年6月12日一、設計題目(問題)描述和要求題目:公司人員管理系統(tǒng)問題描述:某小型公司,主要有四類人員:經理、兼職技術人員、銷售經理和兼職推銷員?,F(xiàn)在,需要存儲這些人員的姓名、編號、級別、當月薪水,計算月薪總額并顯示全部信息。要求:其中,人員編號在生成人員信息時同時生成,每輸入一個人員信息編號順序加1。(1) 程序對所有人員有提升級別的功能月薪的計算方法是:經理拿固定月薪,兼職技術人員按工作小時數(shù)領取月薪,兼職推銷員的報酬按該推銷員當月銷售額提成,銷售經理既拿
2、固定月薪也領取銷售提成。能按姓名或者編號顯示、查找、增加、刪除和保存各類人員的信息二、系統(tǒng)分析與模塊設計根據(jù)問題描述和要求,系統(tǒng)要求能夠按姓名或者編號顯示、查找、增加、刪除和保存各類人員的信息。確定程序至少應該具備如下功能:“查詢人員”、“增加人員”、“刪除人員”、“數(shù)據(jù)存盤”基本模塊。系統(tǒng)既然具有“數(shù)據(jù)存盤”功能-人員數(shù)據(jù)可以保存到磁盤文件,那么也就意味著今后可以從磁盤文件讀出人員數(shù)據(jù),所以系統(tǒng)增加了“人員數(shù)據(jù)裝入”模塊,以方便用戶使用、避免數(shù)據(jù)重復錄入??紤]到系統(tǒng)實現(xiàn)簡捷,人員數(shù)據(jù)文件采用文本文件,人員數(shù)據(jù)文件名:Person.txt。做為一個完整系統(tǒng),除了具有增加人員,刪除人員信息模塊,
3、還應該具有修改人員相關信息的功能,所以本系統(tǒng)設計時考慮增加“修改人員”模塊??紤]到根據(jù)編號查找人員信息功能在“刪除人員”、“修改人員”等模塊都使用,所以可以考慮設置為一個模塊??紤]到系統(tǒng)要求人員編號在生成人員信息時同時生成,每輸入一個人員信息編號順序加1。這樣就要求人員編號在增加人員時自動生成(增加1)且不重復。根據(jù)這個要求,可以考慮設置一個全局量:“當前最大編號”,每增加一個人員,當前最大編號自動增1,然后新增加人員使用這個編號。為了保證系統(tǒng)能記憶這個編號,可以使用一個數(shù)據(jù)文件保存當前這個編號。系統(tǒng)每次開始運行前從文件讀入這個編號,隨著人員增加,編號自動增加,系統(tǒng)每次運行結束時將這個編號寫入
4、文件。本系統(tǒng)將初值(沒有一個用戶時)設置為0??紤]到人員的許多固定信息如:經理、銷售經理的固定月薪,銷售經理、銷售人員提成,技術人員小時工資等都是一些不需要每個人員都要輸入的信息,所以可以將這些信息都保存在一個數(shù)據(jù)文件中,本系統(tǒng)為了方便起見,將這些信息與“最大編號”全部保存在一個文件中,并使用“基礎數(shù)據(jù)設置”模塊進行設置和管理?;A數(shù)據(jù)文件也采用文本文件,基礎數(shù)據(jù)文件名:Base.txt本系統(tǒng)還提供“查詢本月經營信息”幫助計算銷售總額,工資總額,并按照公式計算本月盈虧。綜合考慮系統(tǒng)具有下面8項功能模塊:增加人員,刪除人員,修改人員,查詢本月經營信息,基礎數(shù)據(jù)設置,數(shù)據(jù)存盤,數(shù)據(jù)裝入。系統(tǒng)使用的
5、數(shù)據(jù)文件格式如下:Base.txt:(格式:項目數(shù)據(jù))經理固定月薪3000銷售經理固定月薪1000銷售經理提成1銷售人員提成2技術人員小時工資20ID6Person.txt:(格式:編號,姓名,人員類別,其它數(shù)據(jù),銷售員銷售額,技術人員工作小時)wang3100000liu1wu4100huang2tao3150000注:人員類型編號1經理;2銷售經理;3銷售員;4一技術人員三、系統(tǒng)設計1.系統(tǒng)總體框架使用面向對象的程序設計思想進行分析,整個系統(tǒng)涉及兩大類信息和操作,公司,人員。所以系統(tǒng)主要涉及兩個大類:公司類Company人員類Person。系統(tǒng)的總體框架就是公司類,人員類的定義;主函數(shù)中定
6、義一個公司對象,循環(huán)顯示主菜單并根據(jù)用戶選擇調用公司類的相應方法(成員函數(shù))。公司類Company考慮系統(tǒng)操作的人員信息的數(shù)量具有不確定性,所以考慮使用鏈表保存、處理人員信息。公司類包含:所有人員信息的一個不帶頭結點的鏈表(作為數(shù)據(jù)成員)及可以對人員信息進行增,刪,改,查詢經營信息,基礎數(shù)據(jù)設置,數(shù)據(jù)存盤,數(shù)據(jù)裝入等操作的相關模塊(Add,Delete,Modify,Query,Set,Save,Load)作為成員函數(shù)。人員類Person:所有人員都具有的公共信息及操作可以使用人員類進行描述。由于系統(tǒng)具有4類人員且4類人員數(shù)據(jù),操作有所不同,如銷售員包含銷售額,而技術人員包含工作小時數(shù)且計算工
7、資的方法不同,所以應當為4類人員創(chuàng)建相應的Person類的派生類。(3)為了使公司類可以方便處理人員信息,可以考慮將公司類確定為人員類的友元類或者人員類提供公共的方法以便公司類進行操作。為了公司類可以用共同方法操作人員類,可以將人員類的方法確定為虛函數(shù)。2.類的層次圖Person(No,Name,Duty,Earning,next,Person(),CalcSalaryManagerTechnician(Manager(),(t,CalcSalary(),Technician。,Output。GetT(),SetT(),CalcSalary(),Sales(Amount,Sales(),Get
8、Amount(),SetAmount(),CalcSalary(),SalesManager(Amount,SalesManager(),SetAmount(),CalcSalary(),Output()Output()Output()其中:(1) Person類的No-人員編號,Name人員姓名,Duty-人員類別,Earning-工資,next-指向下一個人員的指針;Person類的CalcSalary(),Output()定義為純虛函數(shù)分別表示要計算人員工資和輸出人員信息,由于定義純虛函數(shù),所以Person是抽象類,具體計算工資,輸出人員信息由派生類完成。(2) 各個派生的類,包含本類對
9、象特有的數(shù)據(jù),Sales:Amount-銷售員銷售額,SalesManager:Amount-銷售經理的總銷售額(系統(tǒng)統(tǒng)計各個銷售員銷售額得到銷售經理的總銷售額),Technician"-技術人員工作小時數(shù)。CompanyPerson*Worker,Clear(),Company(),Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()其中:(1) Worker就是人員鏈表。(2) Clear()用于清除人員鏈表所有結點。Add(),Delete(),Modify(),Query(),Set(),Save(),Lo
10、ad()分別表示系統(tǒng)各個功能模塊:增加人員,刪除人員,修改人員,查詢本月經營信息,基礎數(shù)據(jù)設置,數(shù)據(jù)存盤,數(shù)據(jù)裝入。3.系統(tǒng)關鍵算法流程圖(1)主函數(shù)流程Company:Add()輸入崗位輸入數(shù)據(jù),創(chuàng)建員工對象結點員工結點加入鏈表Company:Delete()I(結束J;(4)Company:Modify(5)Company:Query()(6)Company:Save()(7)Company:Load()源程序清單四、參見附錄五、系統(tǒng)測試后、*D:XProgra*FiLsAIicrosoftVisual人員和基礎數(shù)據(jù)己經裝入-經設W入入人本岸加除改詢礎據(jù)KB會游修宜基數(shù)數(shù)退統(tǒng)系m二管六、小
11、結K%確蜿單螺|面I七、參考文獻【1】陳維興,林小茶.C+面向對象程序設計教程.北京.清華大學出版社2010,10【2】譚浩強.C語言程序設計.北京:清華大學出版社.2010,附錄:/*本程序有關的兩個數(shù)據(jù)文件:base.txt基礎數(shù)據(jù)文件(必須存在,且按規(guī)定格式保存)person.txt一人員信息文件(可選)*/#include<iostream.h>#include<fstream.h>#include<ctype.h>#include<string.h>/全局數(shù)據(jù),對象經理固定月薪銷售經理固定月薪銷售經理提成銷售人員提成技術人員小時工資員工
12、標識(要保證唯一)doubleManagerSalary;/doubleSalesManagerSalary;/doubleSalesManagerPercent;/doubleSalesPercent;/doubleWagePerHour;/intID;/classPerson/員工類protected:intNo;/編號charName20;/姓名intDuty;/崗位doubleEarning;/收入Person*next;public:Person(charID,char*Name,intDuty)(this->Duty=Duty;strcpy(this->Name,Nam
13、e);this->No=ID;virtualvoidCalcSalary()=0;virtualvoidOutput()=0;friendclassCompany;classManager:publicPerson/經理類(public:Manager(charID,char*Name,intDuty):Person(ID,Name,Duty)(voidCalcSalary()(Earning=ManagerSalary;voidOutput()(CalcSalary();cout<<No<<"t"<<Name<<&qu
14、ot;t經理t"<<Earning<<endl;classSalesManager:publicPerson/銷售經理類(private:doubleAmount;public:SalesManager(charID,char*Name,intDuty):Person(ID,Name,Duty)voidSetAmount(doubles)Amount=s;voidCalcSalary()Earning=SalesManagerSalary+Amount*SalesManagerPercent/100;voidOutput()CalcSalary();cout&
15、lt;<No<<"t"<<Name<<"t銷售t"<<Earning<<endl;;classTechnician:publicPerson/技術員類private:doublet;Duty,doublepublic:Technician(charID,char*Name,intT):Person(ID,Name,Duty)this->t=T;doubleGetT()returnt;voidSetT(doubleT)this->t=T;voidCalcSalary()(Earn
16、ing=WagePerHour*t;voidOutput()(CalcSalary();cout<<No<<"t"<<Name<<"t技t"<<t<<"t"<<Earning<<endl;classSales:publicPerson/銷售員類(private:doubleAmount;Duty,doublepublic:Sales(charID,char*Name,intAmount):Person(ID,Name,Duty)(this-
17、>Amount=Amount;doubleGetAmount()(returnAmount;voidSetAmount(doubleAmount)(this->Amount=Amount;voidCalcSalary()(Earning=SalesPercent/100*Amount;voidOutput()(CalcSalary();cout<<No<<"t"<<Name<<"t銷售員t"<<Amount<<"t"<<Earning<
18、;<endl;classCompany/公司類private:Person*Worker;/員工表voidClear();/清除內存中數(shù)據(jù)public:Company()(Worker=0;Load();Company()(Person*p;p=Worker;while(p)(p=p->next;deleteWorker;Worker=p;Worker=0;voidDelete();/刪除人員voidModify();/修改人員voidQuery();/查詢人員voidSet();/基礎數(shù)據(jù)設置voidSave();/數(shù)據(jù)存盤(包括基礎數(shù)據(jù),人員數(shù)據(jù))voidLoad();/數(shù)據(jù)裝
19、入(包括基礎數(shù)據(jù),人員數(shù)據(jù));voidCompany:Clear()/清除內存中人員數(shù)據(jù)(內部使用)Person*p=Worker;while(p)Worker=p->next;deletep;p=Worker;voidCompany:Add()Person*p;/新結點指釘intDuty;charName20;doubleAmount,T;cout<<"n*新增員工*n"/輸入員工信息ID+;cout<<"輸入崗位(1-經理2-銷售經理3-銷售員4-技術員):”;cin>>Duty;cout<<"輸
20、入姓名:"cin>>Name;if(Duty=3)cout<<"本月銷售額:"cin>>Amount;elseif(Duty=4)cout<<"本月工作小時數(shù)(0-168):"cin>>T;/創(chuàng)建新員工結點switch(Duty)(case1:p=newManager(ID,Name,Duty);break;case2:p=newSalesManager(ID,Name,Duty);break;case3:p=newSales(ID,Name,Duty,Amount);break;ca
21、se4:p=newTechnician(ID,Name,Duty,T);break;p->next=0;/員工結點加入鏈表if(Worker)/若已經存在結點(Person*p2;p2=Worker;while(p2->next)/查找尾結點(p2=p2->next;p2->next=p;/連接Worker=p;/連接voidCompany:Delete()/刪除人員(intNo;cout<<"n*刪除員工*n"cout<<"ID:"cin>>No;/查找要刪除的結點Person*p1,*p2;
22、p1=Worker;while(p1)(if(p1->No=No)break;else(p2=p1;p1=p1->next;/刪除結點if(p1!=NULL)/若找到結點,貝U刪除(if(p1=Worker)/若要刪除的結點是第一個結點(Worker=p1->next;deletep1;else/若要刪除的結點是后續(xù)結點(p2->next=p1->next;deletep1;cout<<"找到并刪除n"else/未找到結點cout<<"未找到!n"intNo,Duty;charName20;doubl
23、eAmount,T;cout<<"n*修改員工*n"cout<<"ID:"cin>>No;/查找要修改的結點Person*p1,*p2;p1=Worker;while(p1)(if(p1->No=No)break;else(p2=p1;p1=p1->next;/修改結點if(p1!=NULL)/若找到結點(p1->Output();cout<<"調整崗位(1-經理2-銷售經理3-銷售員4-技術員):"cin>>Duty;if(p1->Duty!=Dut
24、y)/若崗位發(fā)生變動(/修改其它數(shù)據(jù)cout<<"輸入姓名:"cin>>Name;if(Duty=3)(cout<<"本月銷售額:"cin>>Amount;elseif(Duty=4)(cout<<"本月工作小時數(shù)(0-168):"cin>>T;/創(chuàng)建新員工結點Person*p3;switch(Duty)(case1:p3=newManager(p1->No,Name,Duty);break;case2:p3=newSalesManager(p1->N
25、o,Name,Duty);break;case3:p3=newSales(p1->No,Name,Duty,Amount);break;case4:p3=newTechnician(p1->No,Name,Duty,T);break;/員工結點替換到鏈表p3->next=p1->next;if(p1=Worker)/若要替換的結點是第一個結點Worker=p3;else/若要刪除的結點是后續(xù)結點p2->next=p3;/刪除原來的員工結點deletep1;else/若崗位沒有變動cout<<"輸入姓名:"cin>>p1-
26、>Name;if(Duty=3)(cout<<"本月銷售額:"cin>>Amount;(Sales*)p1)->SetAmount(Amount);elseif(Duty=4)(cout<<"本月工作小時數(shù)(0-168):"cin>>T;(Technician*)p1)->SetT(T);cout<<"修改成功!n"else/未找到結點cout<<"未找到!n”;voidCompany:Query()(cout<<"
27、;n*查詢人員本月銷售信息*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)(if(p->Duty=2)(SalesManager*)p)->SetAmount(sum);p->Output();sum2+=p->Earning;p=p->next;cout<<”本月盈利:"<<sum*0.
28、20-sum2<<endl;cout<<”(按照20%利潤計算)n"voidCompany:Set()cout«"n*設置基礎數(shù)據(jù)*n"cout«"經理固定月薪"«ManagerSalary«"元cin»ManagerSalary;cout«"銷售經理固定月薪"«SalesManagerSalary«"%:"cin»SalesManagerSalary;cout«"
29、;銷售經理提成"«SalesManagerPercent«"%cin»SalesManagerPercent;cout«"銷售人員提成"«SalesPercent«"cin»SalesPercent;cout«"技術人員小時工資"«WagePerHour«"(元/小時";cin»WagePerHour;cout«"員工標識="«ID«":
30、"cin»ID;)voidCompany:Save()/數(shù)據(jù)存盤(包括基礎數(shù)據(jù),人員數(shù)據(jù)),均采用文本文件ofstreamfPerson,fBase;charc;cout<<"n保存人員和基礎數(shù)據(jù),是否繼續(xù)?Y/N:"cin>>c;if(toupper(c)!='Y')return;/保存人員編號、姓名、崗位fPerson.open("person.txt”,ios:out);Person*p=Worker;while(p)(fPerson<<p->No<<"t&q
31、uot;<<p->Name<<"t"<<p->Duty<<"t”;if(p->Duty=3)fPerson<<(Sales*)p)->GetAmount()<<"t”;elseif(p->Duty=4)fPerson<<(Technician*)p)->GetT()<<"t”;fPerson<<endl;p=p->next;fPerson.close();/保存基礎數(shù)據(jù)fBase.open(&qu
32、ot;base.txt",ios:out);fBase<<"經理固定月薪t"<<ManagerSalary<<endl;fBase<<"銷售經理固定月薪t"<<SalesManagerSalary<<endl;fBase<<"銷售經理提成%t"<<SalesManagerPercent<<endl;fBase<<"銷售人員提成%t"<<SalesPercent<<
33、endl;fBase<<"技術人員小時工資t"<<WagePerHour<<endl;fBase<<"IDt"<<ID<<endl;fPerson.close();cout<<"n保存人員和基礎數(shù)據(jù)已經完成.n"voidCompany:Load()/數(shù)據(jù)裝入(包括基礎數(shù)據(jù),人員數(shù)據(jù))/基礎數(shù)據(jù)裝入ifstreamfBase;charbuf80;/buf用于保存數(shù)據(jù)文件中的注釋字符串fBase.open("base.txt",ios:
34、in);fBase>>buf>>ManagerSalary;/經理固定月薪銷售經理固定月薪銷售經理提成銷售人員提成技術人員小時工資員工標識fBase>>buf>>SalesManagerSalary;/fBase>>buf>>SalesManagerPercent;/fBase>>buf>>SalesPercent;/fBase>>buf>>WagePerHour;/fBase>>buf>>ID;/fBase.close();/清除內存人員數(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>>Duty;if(Duty=3)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學習資源共享平臺建設計劃
- 《貴州創(chuàng)泰礦業(yè)有限公司修文縣龍場鎮(zhèn)高倉老二洞鋁鐵礦山礦產資源綠色開發(fā)利用方案(三合一)》專家組評審意見
- 第二單元課題2氧氣-教學設計-2024-2025學年九年級化學人教版上冊
- 2025年鎮(zhèn)江道路運輸從業(yè)資格證模擬考試年新版
- 2025年湖州資格證模擬考試
- 2025年湖北貨車資格證考試題
- 2025年遼陽貨運從業(yè)資格證模擬考試下載題
- 2025年成都貨運從業(yè)資格證考試題庫工具箱
- 房地產避雷知識培訓課件
- 機器升級知識點培訓課件
- 5G基站建設的審批流程與標準
- 西門子S7-1200 PLC應用技術項目教程(第3版) 考試復習題
- 人工智能在招聘行業(yè)的應用
- 課件:《科學社會主義概論(第二版)》第一章
- 班組長安全管理培訓課件
- 增強CT檢查流程
- 水利行業(yè)知識培訓課件
- 2025年春新外研版(三起)英語三年級下冊課件 Unit5第1課時Startup
- 2024年揚州工業(yè)職業(yè)技術學院單招職業(yè)適應性測試試題庫(含答案)
- 2025-2030年中國人力資源服務行業(yè)全國市場開拓戰(zhàn)略制定與實施研究報告
- 2024年池州職業(yè)技術學院單招職業(yè)技能測試題庫標準卷
評論
0/150
提交評論