C++_課程設計_公司人員管理系統(tǒng)完全代碼未刪減版要點_第1頁
C++_課程設計_公司人員管理系統(tǒng)完全代碼未刪減版要點_第2頁
C++_課程設計_公司人員管理系統(tǒng)完全代碼未刪減版要點_第3頁
C++_課程設計_公司人員管理系統(tǒng)完全代碼未刪減版要點_第4頁
C++_課程設計_公司人員管理系統(tǒng)完全代碼未刪減版要點_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、姓名或者編號顯示、查找、增加、刪除和保存各類人員的信息1、 系統(tǒng)分析與模塊設計根據(jù)問題描述和要求,系統(tǒng)要求能夠按姓名或者編號顯示、查找、增加、刪 除和保存各類人員的信息。確定程序至少應該具備如下功能:“查詢?nèi)藛T”、“增加人員”、“刪除人員”、“數(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)將初值(沒有一個用戶時)設置為00考慮到人員的許多固定信息如:經(jīng)理、銷售經(jīng)理的固定月薪,銷售經(jīng)理、銷 售人員提成,技術人員小時工資等都是一些不需要每個人員都要輸入的信息,所以可以將這些信息都保存在一個數(shù)據(jù)文件中,本系統(tǒng)為了方便起見,將這些信息與“最大編號”全部保存在一個文件中,并使用“基礎數(shù)據(jù)設置”模塊進行設置 和管理?;A數(shù)據(jù)文件也采用文本文件,基礎數(shù)據(jù)文件名:Base.txt。本系統(tǒng)還提供“查詢本月經(jīng)營信息”幫助計算銷售總額,工資總額,并按照 公式計算本月盈虧。綜合考慮系統(tǒng)具有下面8項功能模塊:增加人員,刪除人員,修改人員,查 詢本月經(jīng)營信息,基礎數(shù)據(jù)設置,數(shù)據(jù)存盤,數(shù)據(jù)裝入。

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

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

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

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

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

10、。(3) Add(),Delete(),Modify(),Query(),Set(),Save(),Load()個功能模塊:增加人員,刪除人員,修改人員,查詢本月經(jīng)營信息,基礎數(shù)據(jù)設置,數(shù)據(jù)存盤,數(shù)據(jù)裝入。3 .系統(tǒng)關鍵算法流程圖(1)主函數(shù)流程(2) Company:Add()(3) Company:Delete()(4) Company:Modify(5) Company:Query()(6)Company:Save()(7) Company:Load()3、 源程序清單參見附錄4、 系統(tǒng)測試ca "D: Procra* FilesMicrosof t Visual人員和基礎數(shù)據(jù)

11、已經(jīng)裝入一.至殳 印 表人人人本數(shù)費請 幺腳修查基數(shù)數(shù)退統(tǒng) 系 nr 二 理 管自心5、 小結通過程序設計,我能夠基本掌握C+程序設計的方法,并且在此基礎上掌握類的構造方法,明確類中構造函數(shù)、成員函數(shù)的建立以及調(diào)用,此外,并且,結合C+中字符串函數(shù)的編譯系統(tǒng)給定的庫函數(shù),采用一定的邏輯編譯,實現(xiàn)題目中要求的各項要求,達到基本實驗 目的,提高自己的 C+語言使用水平。6、 參考文獻11陳維興,林小茶.C+面向?qū)ο蟪绦蛟O計教程.北京.清華大學出版社2010, 102譚浩強.C語言程序設計.北京:清華大學出版社.2010, 5附錄:/*本程序有關的兩個數(shù)據(jù)文件:base.txt一基礎數(shù)據(jù)文件(必須存

12、在,且按規(guī)定格式保存)person.txt人員信息文件(可選)*/#include <iostream.h>#include <fstream.h>#include <ctype.h>#include <string.h>/全局數(shù)據(jù),對象double ManagerSalary; /經(jīng)理固定月薪double SalesManagerSalary; /銷售經(jīng)理固定月薪 double SalesManagerPercent; ZB售經(jīng)理提成%/銷售人員提成/技術人員小時工資/員工標識(要保證唯一)double SalesPercent;double

13、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 void Output()=0;friend class Company;);cla

14、ss Manager:public Person 經(jīng)理類(public:Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary;void Output()CalcSalary();cout<<No<<"t"<<Name<<"t 經(jīng)理t"<<Earning<<endl;);class SalesManager:public Person /銷售經(jīng)理類

15、(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<<"t"<<Name<<"t 銷售經(jīng)理

16、 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 CalcSalary()(Earning=WagePerHour*t;)void Output()(Calc

17、Salary();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):Person(ID,Name,Duty)(this->Amount=Amount;)dou

18、ble 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<<"t"<<Earning<<endl;

19、);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;Worker=p;) Worker=0;)void Add(); /增加人員void Delete(); 刪除人員void Modify();修改人員void Query();查詢?nèi)藛Tvoid Set(); /基礎數(shù)據(jù)設置void Save();/數(shù)據(jù)存盤(包括

20、基礎數(shù)據(jù),人員數(shù)據(jù))void Load();/數(shù)據(jù)裝入(包括基礎數(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()(Person *p; /新結點指針int Duty;char Name20;double Amount,T;cout<<"n* 新增員工 *n”;/輸入員工信息ID+;cout<<"輸入崗位(1-經(jīng)理2-銷售經(jīng)理3-銷售員4-技術

21、員):";cin>>Duty;cout<<"輸入姓名:";cin>>Name;if(Duty=3)cout<<”本月銷售額:"cin>>Amount;else if(Duty=4)cout<<"本月工作小時數(shù)(0-168):"cin>>T;/創(chuàng)建新員工結點switch(Duty)case 1:p=new Manager(ID,Name,Duty); break;case 2:p=new SalesManager(ID,Name,Duty); break

22、;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) 若已經(jīng)存在結點Person *p2;p2=Worker;while(p2->next) /查找尾結點p2=p2->next;p2->next=p; /連接else /若不存在結點(表空)Worker=p; /連接void Company:Delete() 刪除人員int No;cout<<"n* 刪除員

23、工 *n"cout<<"ID:" cin>>No;/查找要刪除的結點Person *p1,*p2; p1=Worker;while(pl)if(p1->No=No) break;elsep2=p1;p1=p1->next;/刪除結點if(p1!=NULL)/若找到結點,則刪除if(p1=Worker) /若要刪除的結點是第一個結點Worker=p1->next;delete p1;else /若要刪除的結點是后續(xù)結點p2->next=p1->next;delete p1;cout<<"找到

24、并刪除n"else /未找到結點 cout<<"未找至U !n"void Company二Modify()int No,Duty;char Name20;double Amount,T;cout<<"n* 修改員工 *n"cout<<"ID:" cin>>No;/查找要修改的結點Person *p1,*p2; p1=Worker;while(pl)(if(p1->No=No)break;else(p2=p1;p1=p1->next;/修改結點if(p1!=NULL)

25、/若找到結點(p1->Output();cout<<"調(diào)整崗位(1-經(jīng)理2-銷售經(jīng)理3-銷售員4-技術員):";cin>>Duty;if(p1->Duty!=Duty)/若崗位發(fā)生變動(/修改其它數(shù)據(jù)cout<<"輸入姓名:";cin>>Name;if(Duty=3)(cout<<”本月銷售額:";cin>>Amount;else if(Duty=4)(cout<<"本月工作小時數(shù)(0-168):"cin>>T;/創(chuàng)建

26、新員工結點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,Amount); break;case 4:p3=new Technician(p1->No,Name,Duty,T); break; /員工結點替換到鏈表 p3->next=p1->next;if(p1=Worker) /若要替換的

27、結點是第一個結點 Worker=p3;else /若要刪除的結點是后續(xù)結點 p2->next=p3;/刪除原來的員工結點delete p1;else /若崗位沒有變動cout<<"輸入姓名:";cin>>p1->Name;if(Duty=3)cout<<”本月銷售額:”;cin>>Amount; (Sales *)p1)->SetAmount(Amount);else if(Duty=4)cout<<"本月工作小時數(shù)(0-168):"cin>>T; (Technic

28、ian *)p1)->SetT(T);cout<<"修改成功!n"else /未找到結點 cout<<"未找至U !n"void Company二Query()cout<<"n*查詢?nèi)藛T本月銷售信息*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

29、->Duty=2)(SalesManager *)p)->SetAmount(sum); p->Output();sum2+=p->Earning; p=p->next;cout<<"本月盈利J :"<<sum*0.20-sum2<<endl;cout<<"(按照20%利潤計算)n")void Company二Set()cout<<"n*設置基礎數(shù)據(jù)*n"cout<<”經(jīng)理固定月薪"<<ManagerSalary

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

31、lt;"%:"cin>>SalesPercent;cout<<"技術人員小時工資"<<WagePerHour<<"(元/小時):"cin>>WagePerHour;cout<<"員工標識>="<<ID<<":"cin>>ID;)void Company:Save() /數(shù)據(jù)存盤(包括基礎數(shù)據(jù),人員數(shù)據(jù)),均采用文本文件 ofstream fPerson,fBase;char c;co

32、ut<<"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"<<p->Name<<"t"<<p->Duty<<"t"if(p-

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

34、lary<<endl;fBase<<”銷售經(jīng)理固定月薪 t"<<SalesManagerSalary<<endl;fBase<<”銷售經(jīng)理提成% t"<<SalesManagerPercent<<endl;fBase<<”銷售人員提成% t"<<SalesPercent<<endl;fBase<<”技術人員小時工資 t"<<WagePerHour<<endl;fBase<<"ID

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

36、rSalary; 銷售經(jīng)理固定月薪fBase>>buf>>SalesManagerPercent;倘售經(jīng)理提成 %/銷售人員提成/技術人員小時工資/員工標識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)fPerso

溫馨提示

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

評論

0/150

提交評論