




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+課程設計報告公司人員管理系統姓 名:班 級:學 號:指導教師:成 績:完成時間:完成地點:一、 設計題目(問題)描述和要求1 題目:公司人員管理系統 2 問題描述:某小型公司,主要有四類人員:經理、兼職技術人員、銷售經理和兼職推銷員?,F在,需要存儲這些人員的姓名、編號、級別、當月薪水,計算月薪總額并顯示全部信息。 要求: (1) 其中,人員編號在生成人員信息時同時生成,每輸入一個人員信息編號順序加1。 (2) 程序對所有人員有提升級別的功能 (3) 月薪的計算方法是:經理拿固定月薪,兼職技術人員按工作小時數領取月薪,兼職推銷員的報酬按該推銷員當月銷售額提成 ,銷售經理既拿固定月薪也領取銷售
2、提成。 (4) 能按姓名或者編號顯示、查找、增加、刪除和保存各類人員的信息 二、 系統分析與模塊設計根據問題描述和要求,系統要求能夠按姓名或者編號顯示、查找、增加、刪除和保存各類人員的信息。確定程序至少應該具備如下功能:“查詢人員”、“增加人員”、“刪除人員”、“數據存盤”基本模塊。系統既然具有“數據存盤”功能人員數據可以保存到磁盤文件,那么也就意味著今后可以從磁盤文件讀出人員數據,所以系統增加了“人員數據裝入”模塊,以方便用戶使用、避免數據重復錄入??紤]到系統實現簡捷,人員數據文件采用文本文件,人員數據文件名:Person.txt。做為一個完整系統,除了具有增加人員,刪除人員信息模塊,還應該
3、具有修改人員相關信息的功能,所以本系統設計時考慮增加“修改人員”模塊。考慮到根據編號查找人員信息功能在“刪除人員”、“修改人員”等模塊都使用,所以可以考慮設置為一個模塊??紤]到系統要求人員編號在生成人員信息時同時生成,每輸入一個人員信息編號順序加1。這樣就要求人員編號在增加人員時自動生成(增加1)且不重復。根據這個要求,可以考慮設置一個全局量:“當前最大編號”,每增加一個人員,當前最大編號自動增1,然后新增加人員使用這個編號。為了保證系統能記憶這個編號,可以使用一個數據文件保存當前這個編號。系統每次開始運行前從文件讀入這個編號,隨著人員增加,編號自動增加,系統每次運行結束時將這個編號寫入文件。
4、本系統將初值(沒有一個用戶時)設置為0??紤]到人員的許多固定信息如:經理、銷售經理的固定月薪,銷售經理、銷售人員提成,技術人員小時工資等都是一些不需要每個人員都要輸入的信息,所以可以將這些信息都保存在一個數據文件中,本系統為了方便起見,將這些信息與“最大編號”全部保存在一個文件中,并使用“基礎數據設置”模塊進行設置和管理。基礎數據文件也采用文本文件,基礎數據文件名:Base.txt。本系統還提供“查詢本月經營信息”幫助計算銷售總額,工資總額,并按照公式計算本月盈虧。綜合考慮系統具有下面8項功能模塊:增加人員,刪除人員,修改人員,查詢本月經營信息,基礎數據設置,數據存盤,數據裝入。系統使用的數據
5、文件格式如下:Base.txt:(格式:項目 數據)經理固定月薪3000銷售經理固定月薪1000銷售經理提成1銷售人員提成2技術人員小時工資20ID6Person.txt:(格式:編號,姓名,人員類別,其它數據,銷售員銷售額,技術人員工作小時)2wang31000003liu14wu41005huang26tao3150000注:人員類型編號1經理;2銷售經理;3銷售員;4技術人員三、 系統設計1. 系統總體框架使用面向對象的程序設計思想進行分析,整個系統涉及兩大類信息和操作,公司,人員。所以系統主要涉及兩個大類:公司類Company、人員類Person。系統的總體框架就是公司類,人員類的定義
6、;主函數中定義一個公司對象,循環顯示主菜單并根據用戶選擇調用公司類的相應方法(成員函數)。(1)公司類Company:考慮系統操作的人員信息的數量具有不確定性,所以考慮使用鏈表保存、處理人員信息。公司類包含:所有人員信息的一個不帶頭結點的鏈表(作為數據成員)及可以對人員信息進行增,刪,改,查詢經營信息,基礎數據設置,數據存盤,數據裝入等操作的相關模塊(Add,Delete,Modify,Query,Set,Save,Load)作為成員函數。(2)人員類Person:所有人員都具有的公共信息及操作可以使用人員類進行描述。由于系統具有4類人員且4類人員數據,操作有所不同,如銷售員包含銷售額,而技術
7、人員包含工作小時數且計算工資的方法不同,所以應當為4類人員創建相應的Person類的派生類。(3)為了使公司類可以方便處理人員信息,可以考慮將公司類確定為人員類的友元類或者人員類提供公共的方法以便公司類進行操作。為了公司類可以用共同方法操作人員類,可以將人員類的方法確定為虛函數。2. 類的層次圖Person No,Name,Duty,Earning,next,Person(),CalcSalary(),Output()Manager Sales SalesManager Technician Manager(), Amount, Amount, t,CalcSalary(), Sales(),
8、GetAmount(), SalesManager(), Technician(),Output() SetAmount(), SetAmount(), GetT(),SetT(),CalcSalary(), CalcSalary(), CalcSalary(),Output() Output() Output()其中:(1)Person 類的No-人員編號,Name-人員姓名,Duty-人員類別,Earning-工資,next-指向下一個人員的指針;Person 類的CalcSalary(),Output()定義為純虛函數分別表示要計算人員工資和輸出人員信息,由于定義純虛函數,所以Perso
9、n是抽象類,具體計算工資,輸出人員信息由派生類完成。(2)各個派生的類,包含本類對象特有的數據,Sales:Amount-銷售員銷售額,SalesManager:Amount-銷售經理的總銷售額(系統統計各個銷售員銷售額得到銷售經理的總銷售額),Technician:t-技術人員工作小時數。Company Person *Worker,Clear(),Company(),Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()其中:(1)Worker就是人員鏈表。(2)Clear()用于清除人員鏈表所有結點。(3)Add(),D
10、elete(),Modify(),Query(),Set(),Save(),Load()分別表示系統各個功能模塊:增加人員,刪除人員,修改人員,查詢本月經營信息,基礎數據設置,數據存盤,數據裝入。3. 系統關鍵算法流程圖(1)主函數流程(2) Company:Add()(3) Company:Delete()(4) Company:Modify(5) Company:Query() (6)Company:Save()(7) Company:Load()四、 源程序清單參見附錄五、 系統測試(列出各功能具體的輸入數據及對應的輸出結果,說明其是否符合設計要求)六、 小結(設計過程心得體會)附錄:/
11、*本程序有關的兩個數據文件:base.txt基礎數據文件(必須存在,且按規定格式保存)person.txt人員信息文件(可選)*/#include <iostream.h>#include <fstream.h>#include <ctype.h>#include <string.h>/全局數據,對象double ManagerSalary; /經理固定月薪double SalesManagerSalary; /銷售經理固定月薪double SalesManagerPercent; /銷售經理提成double SalesPercent; /銷售人
12、員提成double WagePerHour; /技術人員小時工資int ID; /員工標識(要保證唯一)class Person /員工類protected: int No; /編號 char Name20; /姓名 int Duty; /崗位 double Earning; /收入 Person *next;public: Person(char ID,char *Name,int Duty) this->Duty=Duty; strcpy(this->Name,Name); this->No=ID; virtual void CalcSalary()=0; virtual
13、 void Output()=0; friend class Company;class Manager:public Person /經理類public: Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary; void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t經理t"<<Earning<<e
14、ndl; ;class SalesManager:public Person /銷售經理類private: double Amount;public: SalesManager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void SetAmount(double s) Amount=s; void CalcSalary() Earning=SalesManagerSalary+Amount*SalesManagerPercent/100; void Output() CalcSalary(); cout<<No<<
15、;"t"<<Name<<"t銷售經理t"<<Earning<<endl; ;class Technician:public Person /技術員類private: double t;public: Technician(char ID,char *Name,int Duty,double T):Person(ID,Name,Duty) this->t=T; double GetT() return t; void SetT(double T) this->t=T; void CalcSalar
16、y() Earning=WagePerHour*t; void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t技術員t"<<t<<"t"<<Earning<<endl; ;class Sales:public Person /銷售員類private: double Amount;public: Sales(char ID,char *Name,int Duty,double Amount):Pe
17、rson(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(); cout<<No<<"t"<<Name<<"t銷售員t"<<Amount<
18、<"t"<<Earning<<endl; ;class Company /公司類private: Person *Worker; /員工表 void Clear(); /清除內存中數據public: Company() Worker=0; Load(); Company() Person *p; p=Worker; while(p) p=p->next; delete Worker; Worker=p; Worker=0; void Add(); /增加人員 void Delete(); /刪除人員 void Modify(); /修改人
19、員 void Query(); /查詢人員 void Set(); /基礎數據設置 void Save(); /數據存盤(包括基礎數據,人員數據) void Load(); /數據裝入(包括基礎數據,人員數據); void Company:Clear() /清除內存中人員數據(內部使用) Person* p=Worker; while(p) Worker=p->next; delete p; p=Worker; void Company:Add() Person *p; /新結點指針 int Duty; char Name20; double Amount,T; cout<<
20、"n* 新增員工 *n" /輸入員工信息 ID+; cout<<"輸入崗位(1-經理2-銷售經理3-銷售員4-技術員):" cin>>Duty; cout<<"輸入姓名:" cin>>Name; if(Duty=3) cout<<"本月銷售額:" cin>>Amount; else if(Duty=4) cout<<"本月工作小時數(0-168):" cin>>T; /創建新員工結點 switch(D
21、uty) 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; /員工結點加入鏈表 if(Worker) /若已經存在結點 Person *p2; p2=Worker; while(p2->next) /查找尾結點 p2=p2->next;
22、 p2->next=p; /連接 else /若不存在結點(表空) Worker=p; /連接 void Company:Delete() /刪除人員 int No; 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)/若找到結點,則刪除 if(p1=W
23、orker) /若要刪除的結點是第一個結點 Worker=p1->next; delete p1; else /若要刪除的結點是后續結點 p2->next=p1->next; delete p1; cout<<"找到并刪除n" else /未找到結點 cout<<"未找到!n"void Company:Modify() int No,Duty; char Name20; double Amount,T; cout<<"n* 修改員工 *n" cout<<"ID
24、:" 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!=Duty) /若崗位發生變動 /修改其它數據 cout<<"輸入姓名:"
25、; cin>>Name; if(Duty=3) cout<<"本月銷售額:" cin>>Amount; else if(Duty=4) cout<<"本月工作小時數(0-168):" cin>>T; /創建新員工結點 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
26、=new Sales(p1->No,Name,Duty,Amount); break; case 4:p3=new Technician(p1->No,Name,Duty,T); break; /員工結點替換到鏈表 p3->next=p1->next; if(p1=Worker) /若要替換的結點是第一個結點 Worker=p3; else /若要刪除的結點是后續結點 p2->next=p3; /刪除原來的員工結點 delete p1; else /若崗位沒有變動 cout<<"輸入姓名:" cin>>p1->Na
27、me; if(Duty=3) cout<<"本月銷售額:"cin>>Amount; (Sales *)p1)->SetAmount(Amount); else if(Duty=4) cout<<"本月工作小時數(0-168):"cin>>T; (Technician *)p1)->SetT(T); cout<<"修改成功!n" else /未找到結點 cout<<"未找到!n"void Company:Query() cout<
28、;<"n* 查詢人員本月銷售信息 *n" double sum=0; /銷售額總和 Person *p=Worker; 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<
29、<"本月盈利:"<<sum*0.20-sum2<<endl; cout<<"(按照20利潤計算)n"void Company:Set() cout<<"n* 設置基礎數據 *n" cout<<"經理固定月薪"<<ManagerSalary<<"元:"cin>>ManagerSalary; cout<<"銷售經理固定月薪"<<SalesManagerSa
30、lary<<"元:" cin>>SalesManagerSalary; cout<<"銷售經理提成"<<SalesManagerPercent<<":"cin>>SalesManagerPercent; cout<<"銷售人員提成"<<SalesPercent<<":"cin>>SalesPercent; cout<<"技術人員小時工資"<
31、<WagePerHour<<"(元/小時):" cin>>WagePerHour; cout<<"員工標識>="<<ID<<":"cin>>ID;void Company:Save() /數據存盤(包括基礎數據,人員數據),均采用文本文件 ofstream fPerson,fBase; char c; cout<<"n保存人員和基礎數據,是否繼續?Y/N:" cin>>c; if(toupper(c)!=
32、39;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)->GetAmount()<<"
33、t" else if(p->Duty=4) fPerson<<(Technician *)p)->GetT()<<"t" fPerson<<endl; p=p->next; fPerson.close(); /保存基礎數據 fBase.open("base.txt",ios:out); fBase<<"經理固定月薪t"<<ManagerSalary<<endl; fBase<<"銷售經理固定月薪t"<
34、;<SalesManagerSalary<<endl; fBase<<"銷售經理提成t"<<SalesManagerPercent<<endl; fBase<<"銷售人員提成t"<<SalesPercent<<endl; fBase<<"技術人員小時工資t"<<WagePerHour<<endl; fBase<<"IDt"<<ID<<endl; fPers
35、on.close(); cout<<"n保存人員和基礎數據已經完成.n"void Company:Load() /數據裝入(包括基礎數據,人員數據) /基礎數據裝入 ifstream fBase; char buf80; /buf用于保存數據文件中的注釋字符串 fBase.open("base.txt",ios:in); fBase>>buf>>ManagerSalary; /經理固定月薪 fBase>>buf>>SalesManagerSalary; /銷售經理固定月薪 fBase>&g
36、t;buf>>SalesManagerPercent; /銷售經理提成 fBase>>buf>>SalesPercent; /銷售人員提成 fBase>>buf>>WagePerHour; /技術人員小時工資 fBase>>buf>>ID; /員工標識 fBase.close(); /清除內存人員數據 Clear(); /人員數據數據裝入 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
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年山西體育職業學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年安徽汽車職業技術學院高職單招職業適應性測試歷年(2019-2024年)真題考點試卷含答案解析
- 氣管插管患者管道護理
- 2025年天津海運職業學院高職單招職業適應性測試歷年(2019-2024年)真題考點試卷含答案解析
- 2025年天津城市職業學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 物流運輸總結匯報模板
- 6歲小學生音樂課件
- BJ20養護知識課件
- 簡約清新畢業答辯
- 6S相關知識課件
- 2025年AR眼鏡行業市場規模及主要企業市占率分析報告
- 日常小學生防性侵安全教育課件
- 市政城市環境管理
- 16J914-1 公用建筑衛生間
- 教學課件:《新時代新征程》
- 建筑給水聚丙烯管道(PP-R)工程技術規程
- 重慶市事業單位專業技術二級崗位管理試行辦法
- 信息技術2.0微能力:小學五年級道德與法治上(第四單元) 民族瑰寶-中小學作業設計大賽獲獎優秀作品模板-《義務教育道德與法治課程標準(2022年版)》
- 全球松子分析預測報告
- 英國FBA超重標簽
- 環境藝術與室內設計專業室內設計手繪表現技法教學課件(圖文)
評論
0/150
提交評論