軟件基礎訓練-公司職員信息管理_第1頁
軟件基礎訓練-公司職員信息管理_第2頁
軟件基礎訓練-公司職員信息管理_第3頁
軟件基礎訓練-公司職員信息管理_第4頁
軟件基礎訓練-公司職員信息管理_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上 暑假實習-公司職員信息管理(面向對象程序設計)公司職員信息管理系統(tǒng)一、 系統(tǒng)概要:公司職員的信息管理程序主要實現(xiàn)以下功能:輸入員工的姓名,輸出該員工的基本信息、級別以及當月工資信息。需求如下。1、 某小型公司,主要由總經(jīng)理、技術經(jīng)理和技術人員、銷售經(jīng)理和銷售人員。要求存儲所有人員的一下信息:姓名、性別、出生年月、技術特長、血型、星座、參加工作時間、接入本公司時間、聯(lián)系電話、編號、級別、當月薪,計算月薪總額并顯示全部信息。2、 人員的編號從開始,依次遞增。3、 程序對所有人員有提升級別的功能。假設所有人員的初始級別均為級,然后進行升級,總經(jīng)理升為級,技術經(jīng)理和銷售經(jīng)理

2、升為級,技術人員升為級,銷售人員為級。4、 月工資計算辦法如下:總經(jīng)理拿固定月薪10000元; 技術經(jīng)理拿固定月薪6000元加獎金;技術人員拿固定月薪3000元加獎金;銷售經(jīng)理既拿固定月薪也領取銷售提成,固定月薪為4000元,銷售提成為所轄部門的當月銷售總額的(0.5%);銷售人員的月薪按當月銷售額的提成。5、 考核結果作為升級和工資提成的依據(jù),考核結果按百分制計算。二、 基本功能要求:設計一個基類employee,然后派生出technician(技術人員)類、manager(經(jīng)理)類和salesman(銷售人員)類共3類,在此基礎上通過繼承和派生實現(xiàn)其它類。職員信息要求保存到文件。對部分數(shù)據(jù)

3、應設置有操作權限。三、 功能描述:1、 新進入公司員工基本信息的輸入。2、 公司員工基本信息的查詢、修改。3、 離開公司員工信息的處理。4、 與員工級別有關的操作。5、 與月薪有關的操作。6、 與人員考核有關的操作。四、 主要知識點:1、 C語言程序設計技術,特別是數(shù)組和指針的應用。2、 面向對象程序設計技術,特別是繼承和派生以及文件的操作。5、 總體設計思路:在最初拿到程序設計的要求時,我便有個明確的思路:由大化小。不管是多么復雜,多么冗長的程序,都是有一個個小功能或者說是函數(shù),指針組合而成的,當我把這個大程序分解成其所需要的各個小功能進行編程時,這個公司職工管理系統(tǒng)就會明顯地簡單多了。正如

4、上圖所示,在反復看了幾遍要求之后,我把幾個重要的信息或者對象用紅色的字體標出,這有助于我在編程時時刻提醒我還有哪些需要注意的,也助我理清了編程的思路。變成之前,應注意到本職工信息管理系統(tǒng)以C+語言知識為基礎,運用各種函數(shù)、文件等方式實現(xiàn)錄入職工信息并保存,顯示所有職工信息,查詢職工信息,職工信息修改并保存,刪除職工信息,月薪總額管理,退出的功能。程序主要以函數(shù)調(diào)用及友元類的方式工作,菜單功能在主函數(shù)中由switch語句實現(xiàn)。該程序一共用了8個函數(shù),可以說函數(shù)是該程序的核心與靈魂。這些函數(shù)分別是:1.Input (); / 輸入函數(shù),可以實現(xiàn)員工信息的輸入及存入文件;2.enlarge / ad

5、d (); / 增加員工函數(shù);3.delete () ; / 刪除員工函數(shù);4.alter / change () ; / 修改員工函數(shù);5.checkperson / find () ; / 查詢個人信息函數(shù);6.save () ; / 保存函數(shù);7.promote () ; / 升級函數(shù);8.test () ; / 設定考核成績函數(shù); 而,在編寫功能函數(shù)之前,我先是將整個程序的對象做了個梳理:銷售人員類:salesman技術人員類:technician基類:employee派 生銷售經(jīng)理類:Tmanager職工基本信息:姓名,性別,出生年月,技術特長,血型,星座,參加工作的時間,接入本公司

6、的時間,聯(lián)系電話,級別,編號,月薪總合技術經(jīng)理類:Smanager總經(jīng)理類: manager 6、 主程序:1.首先,加上頭文件:#include#include#includeusing namespace std;/全局數(shù)據(jù),對象double Managersalary=10000; /總經(jīng)理固定月薪double Tmanagersalary=6000; /技術經(jīng)理固定月薪double Smanagersalary=4000; /銷售經(jīng)理固定月薪double Techniciansalary=3000; /技術人員固定月薪int ID=0; /員工編號/ 整個程序操作對象的基類,最初編寫的

7、部分!class Employee /基類protected: /以下為所需的職員基本信息的定義int No; /編號char Name20; /姓名char Sex2; /性別char Blood3; /血型char Birth10; /出生年月char Tel20; /聯(lián)系電話char Technicial20; /技術特長 char Constellation20; /星座int Duty; char Timeofbegin10; /參加工作時間char Timeofcome10; /接入本公司時間int Grade; /級別 double Earning; /工資/月薪Employee

8、 *next; /基類的指針public:Employee(char ID,int Grade,char *Name,char *Sex,char *Birth,char *Blood,char *Tel, char *Technicial,char *Constellation,char *Timeofbegin,char *Timeofcome,int Duty)this-Duty=Duty;this-Grade=Grade;strcpy(this-Name,Name);this-No=ID;strcpy(this-Sex,Sex);strcpy(this-Birth,Birth);str

9、cpy(this-Blood,Blood);strcpy(this-Tel,Tel);strcpy(this-Technicial,Technicial);strcpy(this-Constellation,Constellation);strcpy(this-Timeofbegin,Timeofbegin);strcpy(this-Timeofcome,Timeofcome); /指針的指向virtual void Salary()=0;virtual void Output()=0;virtual void Output1()=0; virtual void Output2()=0;fri

10、end class Company; /需基類,之后可能用到的;/以下是五個派生類,也是公司已有的五個級別職員稱謂class Manager:public Employee/1.派生經(jīng)理類public:Manager(char ID,int Grade,char *Name,char *Sex,char *Birth,char *Blood,char *Tel,char *Technicial,char*Constellation,char*Timeofbegin,char*Timeofcome,intDuty):Employee(ID,Grade,Name,Sex,Birth,Blood,T

11、el,Technicial,Constellation,Timeofbegin,Timeofcome,Duty) void Salary()Earning=Managersalary;void Output()Salary();cout編號:Not級別:Gradet姓名:Namet性別:Sext血型:Bloodt出生:Birtht聯(lián)系電話:Telt特長:Technicialt星座:Constellationt開始工作時間:Timeofbegint加入公司時間:Timeofcomet經(jīng)理t工資:Earningendl;void Output1()Salary(); cout編號:Not級別:Gr

12、adet姓名:Namet經(jīng)理endl; void Output2()Salary();cout編號:Not級別:Gradet姓名:Namet經(jīng)理t工資:EarningWorkload=Workload;double GetWorkload() return Workload; void SetWorkload(double Amount)this-Workload=Amount;void Salary()Earning=Smanagersalary+Workload*0.005; void Output()Salary();cout編號:Not級別:Gradet姓名:Namet性別:Sext血

13、型:Bloodt出生:Birtht聯(lián)系電話:Telt特長:Technicialt星座:Constellationt開始工作時間:Timeofbegint加入公司時間:Timeofcomet銷售經(jīng)理t工資:Earningendl;void Output1() Salary(); cout編號:Not級別:Gradet姓名:Namet銷售經(jīng)理endl;void Output2()Salary();cout編號:Not級別:Gradet姓名:Namet銷售經(jīng)理t工資:EarningWorkload=Workload;double GetWorkload() return Workload; void

14、 SetWorkload(double Amount)this-Workload=Amount;void Salary()Earning=Workload*0.01;void Output()Salary();cout編號:Not級別:Gradet姓名:Namet性別:Sext血型:Bloodt出生:Birtht聯(lián)系電話:Telt特長:Technicialt星座:Constellationt開始工作時間:Timeofbegint加入公司時間:Timeofcomet銷售人員t工資:Earningendl; void Output1()Salary();cout編號:Not級別:Gradet姓名:

15、Namet銷售人員endl;void Output2()Salary();cout編號:Not級別:Gradet姓名:Namet銷售人員t工資:EarningAward=Award;double GetAward()return Award; void SetAward(double Amount )this-Award=Amount ;void Salary() Earning=Techniciansalary+Award;void Output()Salary();cout編號:Not級別:Gradet姓名:Namet性別:Sext血型:Bloodt出生:Birtht聯(lián)系電話:Telt特長

16、:Technicialt星座:Constellationt開始工作時間:Timeofbegint加入公司時間:Timeofcomet技術員t工資:Earningendl;void Output1()Salary();cout編號:Not級別:Gradet姓名:Namet技術員endl;void Output2()Salary();cout編號:Not級別:Gradet姓名:Namet技術員t工資:EarningAward=Award; double GetAward()return Award; void SetAward(double Amount )this-Award=Amount ;v

17、oid Salary()Earning=Tmanagersalary+Award;void Output()Salary();cout編號:Not級別:Gradet姓名:Namet性別:Sext血型:Bloodt出生:Birtht聯(lián)系電話:Telt特長:Technicialt星座:Constellationt開始工作時間:Timeofbegint加入公司時間:Timeofcomet技術經(jīng)理t工資:Earningendl; void Output1()Salary();cout編號:Not級別:Gradet姓名:Namet技術經(jīng)理endl; void Output2() Salary(); co

18、ut編號:Not級別:Gradet姓名:Namet技術經(jīng)理t工資:Earningnext; delete Worker;Worker=p; Worker=0; void Find(char Name20); /按姓名查找 void Find(int ID); /按編號查找 void Add(); /增加人員 void Delete(); /刪除人員 void Change(); /修改人員 void Search(); /查詢?nèi)藛T void Save(); /數(shù)據(jù)存盤(包括基礎數(shù)據(jù),人員數(shù)據(jù)) void Money(); /月薪計算;/ void Company:Find(char Name2

19、0) / 查詢?nèi)藛T的函數(shù)/void Company:Add() / 增加員工函數(shù)Employee *p; /新結點指針 int Duty; char Name20; char Sex2; /性別char Birth10;char Tel20; /聯(lián)系方式 char Technicial20;char Constellation20; /星座char Blood3; /血型char Timeofbegin10;char Timeofcome10;int Grade;double Workload=0; coutn* 新增員工 *n; /輸入員工信息 cout 工號: +ID n;cout 1.經(jīng)

20、理 2.技術經(jīng)理 3.銷售經(jīng)理 4.技術人員 5.銷售人員 n;cout 請選擇新增人員職位: Duty; if(Duty=1) Grade=4;else if(Duty=2|Duty=3) Grade=3;else if(Duty=4) Grade=2;else Grade=1; coutName; coutSex;coutBirth;coutTel;coutTechnicial;coutConstellation;coutBlood;coutTimeofbegin; coutTimeofcome;switch(Duty) case 1:p=new Manager(ID,Grade,Name

21、,Sex,Birth,Blood,Tel,Technicial,Constellation,Timeofbegin,Timeofcome,Duty); break; case 2:p=new Technicianmanager(ID,Grade,Name,Sex,Birth,Blood,Tel,Technicial,Constellation,Timeofbegin,Timeofcome,Duty,Workload); break; case 3:p=new Salesmanager(ID,Grade,Name,Sex,Birth,Blood,Tel,Technicial,Constellat

22、ion,Timeofbegin,Timeofcome,Duty,Workload); break; case 4:p=new Technician(ID,Grade,Name,Sex,Birth,Blood,Tel,Technicial,Constellation,Timeofbegin,Timeofcome,Duty,Workload); break; case 5:p=new Salesman(ID,Grade,Name,Sex,Birth,Blood,Tel,Technicial,Constellation,Timeofbegin,Timeofcome,Duty,Workload); b

23、reak; p-next=0; /員工結點加入鏈表 if(Worker) /若已經(jīng)存在結點 Employee *p2; p2=Worker; while(p2-next) /查找尾結點 p2=p2-next; p2-next=p; /連接 else /若不存在結點(表空) Worker=p; /連接cout新員工已添加; /void Company:Delete() /刪除人員函數(shù) int No; coutn* 刪除員工 *n; coutNo; /查找要刪除的結點 Employee *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p

24、2=p1; p1=p1-next; /刪除結點 if(p1!=NULL) /若找到結點,則刪除 if(p1=Worker) /若要刪除的結點是第一個結點 Worker=p1-next; delete p1; else /若要刪除的結點是后續(xù)結點 p2-next=p1-next; delete p1; cout找到并刪除n; else /未找到結點 cout未找到!n; /void Company:Change() /修改人員函數(shù) int No,Duty; char Name20; char Sex3;char Birth10;char Blood3;char Tel20;char Techni

25、cial20;char Constellation20;char Timeofbegin10;char Timeofcome10;double Workload; int Grade;coutn* 修改員工 *n; coutNo; /查找要修改的結點 Employee *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next; /修改if(p1!=NULL)/若找到結點 p1-Output(); coutDuty; if(p1-Duty!=Duty) /若職位發(fā)生變動 /修改其它數(shù)據(jù) coutName; c

26、outSex;coutBirth;coutTel;coutTechnicial;coutConstellation;coutBlood;coutTimeofbegin; coutTimeofcome; if(Duty=1) Grade=4;else if(Duty=2|Duty=3) Grade=3;else if(Duty=4) Grade=2;Else Grade=1;if(Duty=2&Duty=4)coutWorkload;if(Duty=3&Duty=5)coutWorkload; /創(chuàng)建新員工結點 Employee *p3; switch(Duty) case 1:p3=new M

27、anager(p1-No,Grade,Name,Sex,Birth,Blood,Tel,Technicial,Constellation,Timeofbegin,Timeofcome,Duty); break; case 2:p3=new Technicianmanager(p1-No,Grade,Name,Sex,Birth,Blood,Tel,Technicial,Constellation,Timeofbegin,Timeofcome,Duty,Workload); break; case 3:p3=new Salesmanager(p1-No,Grade,Name,Sex,Birth,

28、Blood,Tel,Technicial,Constellation,Timeofbegin,Timeofcome,Duty,Workload); break; case 4:p3=new Technician(p1-No,Grade,Name,Sex,Birth,Blood,Tel,Technicial,Constellation,Timeofbegin,Timeofcome,Duty,Workload); break; case 5:p3=new Salesman(p1-No,Grade,Name,Sex,Birth,Blood,Tel,Technicial,Constellation,T

29、imeofbegin,Timeofcome,Duty,Workload); break; /員工結點替換到鏈表 p3-next=p1-next; if(p1=Worker) /若要替換的結點是第一個結點 Worker=p3; else p2-next=p3; /若要刪除的結點是后續(xù)結點 delete p1; /刪除原來的員工結點 else /若職位沒有變動 coutp1-Name; if(Duty=2) coutWorkload; (Technicianmanager*)p1)-SetAward(Workload); else if(Duty=3)coutWorkload; (Salesman

30、ager *)p1)-SetWorkload(Workload); else if(Duty=4) coutWorkload; (Technician *)p1)-SetAward(Workload); else if (Duty=5) coutWorkload; (Salesman *)p1)-SetWorkload(Workload); cout修改成功!n; else /未找到結點 cout未找到!n; /void Company:Search() /查找人員 char xingming10,count(0); coutOutput1(); sum2+=p-Earning; p=p-ne

31、xt; cout本月實發(fā)工資總數(shù):sum2元endl; char choose; cout是否繼續(xù)?(Y/N)choose;do coutxingming; Employee *p4=Worker; while(p4) if(strcmp(p4-Name,xingming)=0) if(p4-Duty=1) (Manager*)p4)-Output(); count+; break; else if(p4-Duty=2) (Technicianmanager*)p4)-Output(); count+; break; else if(p4-Duty=3) (Salesmanager*)p4)-Output(); count+; break; else if(p4-Duty=4) (Technician*)p4)-Output(); count+; break; else if(p4-Duty=5) (Salesman*)p4)-Output(); count+; break; else p4=p4-next; if(count=0) cout未找到!endl; c

溫馨提示

  • 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

提交評論