C++公司人員管理系統(tǒng)_第1頁
C++公司人員管理系統(tǒng)_第2頁
C++公司人員管理系統(tǒng)_第3頁
C++公司人員管理系統(tǒng)_第4頁
C++公司人員管理系統(tǒng)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C++課程設(shè)計(jì)報(bào)告公司人員管理系統(tǒng)姓名:班級(jí):指導(dǎo)教師:完成時(shí)間:設(shè)計(jì)題目(問題)描述和要求題目:公司人員管理系統(tǒng)問題描述:某小型公司,主要有四類人員:經(jīng)理、兼職技術(shù)人員、銷售經(jīng)理和兼職推銷員。現(xiàn)在,需要存儲(chǔ)這些人員的姓名、編號(hào)、級(jí)別、當(dāng)月薪水,計(jì)算月薪總額并顯示全部信息。要求:其中,人員編號(hào)在生成人員信息時(shí)同時(shí)生成,每輸入一個(gè)人員信息編號(hào)順序加1。程序?qū)λ腥藛T有提升級(jí)別的功能月薪的計(jì)算方法是:經(jīng)理拿固定月薪,兼職技術(shù)人員按工作小時(shí)數(shù)領(lǐng)取月薪,兼職推銷員的報(bào)酬按該推銷員當(dāng)月銷售額提成,銷售經(jīng)理既拿固定月薪也領(lǐng)取銷售提成。能按姓名或者編號(hào)顯示、查找、增加、刪除和保存各類人員的信息系統(tǒng)分析與模塊設(shè)計(jì)根據(jù)問題描述和要求,系統(tǒng)要求能夠按姓名或者編號(hào)顯示、查找、增加、刪除和保存各類人員的信息。確定程序至少應(yīng)該具備如下功能:“查詢?nèi)藛T”、“增加人員”、“刪除人員”、“數(shù)據(jù)存盤”基本模塊。系統(tǒng)既然具有“數(shù)據(jù)存盤”功能-人員數(shù)據(jù)可以保存到磁盤文件,那么也就意味著今后可以從磁盤文件讀出人員數(shù)據(jù),所以系統(tǒng)增加了“人員數(shù)據(jù)裝入”模塊,以方便用戶使用、避免數(shù)據(jù)重復(fù)錄入??紤]到系統(tǒng)實(shí)現(xiàn)簡(jiǎn)捷,人員數(shù)據(jù)文件采用文本文件,人員數(shù)據(jù)文件名:employee。做為一個(gè)完整系統(tǒng),除了具有增加人員,刪除人員信息模塊,還應(yīng)該具有修改人員相關(guān)信息的功能,所以本系統(tǒng)設(shè)計(jì)時(shí)考慮增加“修改人員”模塊。考慮到根據(jù)編號(hào)查找人員信息功能在“刪除人員”、“修改人員”等模塊都使用,所以可以考慮設(shè)置為一個(gè)模塊。考慮到系統(tǒng)要求人員編號(hào)在生成人員信息時(shí)同時(shí)生成,每輸入一個(gè)人員信息編號(hào)順序加1。這樣就要求人員編號(hào)在增加人員時(shí)自動(dòng)生成(增加1)且不重復(fù)。根據(jù)這個(gè)要求,可以考慮設(shè)置一個(gè)全局量:“當(dāng)前最大編號(hào)”,每增加一個(gè)人員,當(dāng)前最大編號(hào)自動(dòng)增1,然后新增加人員使用這個(gè)編號(hào)。為了保證系統(tǒng)能記憶這個(gè)編號(hào),可以使用一個(gè)數(shù)據(jù)文件保存當(dāng)前這個(gè)編號(hào)。系統(tǒng)每次開始運(yùn)行前從文件讀入這個(gè)編號(hào),隨著人員增加,編號(hào)自動(dòng)增加,系統(tǒng)每次運(yùn)行結(jié)束時(shí)將這個(gè)編號(hào)寫入文件。本系統(tǒng)將初值(沒有一個(gè)用戶時(shí))設(shè)置為0。綜合考慮系統(tǒng)具有下面8項(xiàng)功能模塊:增加人員,刪除人員,修改人員,查看公司人員信息。系統(tǒng)使用的數(shù)據(jù)文件格式如下:employee:(格式:姓名,編號(hào),月薪)wang 1 100000 A23000系統(tǒng)設(shè)計(jì)系統(tǒng)總體框架使用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想進(jìn)行分析,整個(gè)系統(tǒng)涉及兩大類信息和操作,公司,人員。所以系統(tǒng)主要涉及兩個(gè)大類:公司類Company、人員類Person。系統(tǒng)的總體框架就是公司類,人員類的定義;主函數(shù)中定義一個(gè)公司對(duì)象,循環(huán)顯示主菜單并根據(jù)用戶選擇調(diào)用公司類的相應(yīng)方法(成員函數(shù))。(1)公司類employee:考慮系統(tǒng)操作的人員信息的數(shù)量具有不確定性,所以考慮使用鏈表保存、處理人員信息。公司類包含:所有人員信息的一個(gè)不帶頭結(jié)點(diǎn)的鏈表(作為數(shù)據(jù)成員)及可以對(duì)人員信息進(jìn)行增,刪,改,查操作的相關(guān)模塊(Add,Delete,Modify,Query,Set,Save,Load)作為成員函數(shù)。(2)人員類Person:所有人員都具有的公共信息及操作可以使用人員類進(jìn)行描述。由于系統(tǒng)具有4類人員且4類人員數(shù)據(jù),操作有所不同,如銷售員包含銷售額,而技術(shù)人員包含工作小時(shí)數(shù)且計(jì)算工資的方法不同,所以應(yīng)當(dāng)為4類人員創(chuàng)建相應(yīng)的Person類的派生類。(3)為了使公司類可以方便處理人員信息,可以考慮將公司類確定為人員類的友元類或者人員類提供公共的方法以便公司類進(jìn)行操作。為了公司類可以用共同方法操作人員類,可以將人員類的方法確定為虛函數(shù)。類的層次圖EmployeeManagerSalesmanSalesManagerTechnician其中:(1)Employee類的number-人員編號(hào),Name-人員姓名,type-人員類別,monthSales-工資,Employee類的pay(),getmonthSales()定義為純虛函數(shù)分別表示要計(jì)算人員工資,由于定義純虛函數(shù),所以Employee是抽象類,具體計(jì)算工資,輸出人員信息由派生類完成。(2)各個(gè)派生的類,包含本類對(duì)象特有的數(shù)據(jù),Salesman::sales-銷售員銷售額,Technician::workHours-技術(shù)人員工作小時(shí)數(shù)。employeeAdd(NODE*head);增加員工信息delate(NODE*head);刪除員工信息change(NODE*head);修改員工信息save_exit(NODE*head);保存員工信息系統(tǒng)關(guān)鍵算法流程圖(1)主函數(shù)流程(2)employeeAdd(NODE*head)(3)delate(NODE*head)(4)change(NODE*head)

(5)save_exit(NODE*head)源程序清單參見附錄系統(tǒng)測(cè)試(列出各功能具體的輸入數(shù)據(jù)及對(duì)應(yīng)的輸出結(jié)果,說明其是否符合設(shè)計(jì)要求)小結(jié)(設(shè)計(jì)過程心得體會(huì))附錄:/*本程序有關(guān)的兩個(gè)數(shù)據(jù)文件:employee-人員信息文件(可選)*///**company.h**#ifndef_COMPANY_H_#define_COMPANY_H_#include"employee.h"typedefstructnode{ void*date; structnode*prev; structnode*next;}NODE;intinit_head(NODE*head);voidinit_file(NODE*head);voiddisplay(NODE*head);voidinsert_end(NODE*head,NODE*n);voidinsert(NODE*head,Employee*p);voiddelate(NODE*head);voidchange(NODE*head);voidsave_exit(NODE*head);voidemployeeAdd(NODE*head);voidfflush_in();#endif//**company.cpp***/* 作者: 日期:2013—10—8 功能:公司人員管理系統(tǒng)*/#include<iostream>#include"company.h"#include<string.h>#include<fstream>#include<stdlib.h>#include<fstream>usingnamespacestd;intinit_head(NODE*head){ if(NULL==head) { return1; } head->next=head; head->prev=head; return0;}voidinit_file(NODE*head){ charname[20]="\0"; intnumber=0; intrank=0; floatmonthSalary=0.0; //charpost[200]="\0"; inttype=0; NODE*n=NULL; ifstreaminfile; infile.clear(); infile.open("employee",ios_base::in); n=newNODE; if(n==NULL) exit(0); Employee*p; if(infile.is_open()) { while(infile>>name>>number >>rank>>type>>monthSalary){ switch(type){ case1: p=newTechnician; p->setName(name); p->setNum(number); p->setRank(rank); p->setType(type); p->setmonthSalary(monthSalary); break; case2: p=newSalesman; p->setName(name); p->setNum(number); p->setRank(rank); p->setType(type); p->setmonthSalary(monthSalary); break; case3: p=newManager; p->setName(name); p->setNum(number); p->setRank(rank); p->setType(type); p->setmonthSalary(monthSalary); break; case4: p=newSalesmanager; p->setName(name); p->setNum(number); p->setRank(rank); p->setType(type); p->setmonthSalary(monthSalary); break; } n->date=(void*)p; insert_end(head,n); n=newNODE; if(n==NULL) exit(0); } } deleten; infile.close();}voiddisplay(NODE*head){ NODE*cur=NULL; if(NULL==head) exit(0); cout<<"工作:\t"<<"姓名\t"<<"編號(hào)\t"<<"級(jí)別\t"<<"月薪\t"<<endl; cur=head->next; while(cur!=head){ ((Employee*)(cur->date))->display(); cur=cur->next; } cout<<"\n"<<endl;}voidinsert_end(NODE*head,NODE*n){ if(NULL==head) exit(0); n->prev=head->prev; n->next=head; head->prev->next=n; head->prev=n; }voidinsert(NODE*head,Employee*p){ if(head==NULL) exit(0); NODE*n=NULL; n=newNODE; n->date=(void*)p; insert_end(head,n);}voiddelate(NODE*head){ intnumber; NODE*cur=NULL; cout<<"請(qǐng)輸入你要開除的員工編號(hào)"<<endl; cin>>number; fflush_in(); if(NULL==head) exit(0); cur=head->next; while(cur!=head){ if(((Employee*)(cur->date))->getNum()==number){ cur->prev->next=cur->next; cur->next->prev=cur->prev; deletecur; cout<<"開除成功:"<<endl; break; } cur=cur->next; if(cur==head){ cout<<"本公司沒有這個(gè)人:"<<endl; break; } } }voidchange(NODE*head){ intnumber; intchose=0; intrank=0; NODE*cur=NULL; cout<<"請(qǐng)輸入您要修改的員工編號(hào):"<<endl; cin>>number; fflush_in(); if(NULL==head) exit(0); cur=head->next; while(cur!=head){ if(((Employee*)(cur->date))->getNum()==number){ cout<<"1.姓名2.級(jí)別"<<endl; cin>>chose; fflush_in(); if(chose==1){ ((Employee*)(cur->date))->setName(); } elseif(chose==2){ ((Employee*)(cur->date))->setRank(); ((Employee*)(cur->date))->pay(); } cout<<"修改成功:"<<endl; break; } cur=cur->next; if(cur==head){ cout<<"找不到您要的這個(gè)人:"<<endl; break; } }}voidsave_exit(NODE*head){ NODE*cur=NULL; ofstreamoutfile("employee",ios::binary); cur=head->next; while(cur!=head){ outfile<<((Employee*)(cur->date))->getName()<<"\t"<<((Employee*)(cur->date))->getNum()<<"\t"<<((Employee*)(cur->date))->getRank()<<"\t"<<((Employee*)(cur->date))->getType()<<"\t"<<((Employee*)(cur->date))->getmonthsalary()<<endl; cur=cur->next; } outfile.close(); exit(0);}voidemployeeAdd(NODE*head){intchose=6; do{ cout<<"1.兼職技術(shù)人員2.銷售經(jīng)理3.經(jīng)理4.兼職銷售員5.退出"<<endl; cin>>chose; fflush_in(); Employee*em; switch(chose){ case1://添加技術(shù)員 { em=newTechnician; em->setName(); em->setRank(1); em->setType(1); em->pay(); insert(head,em); } break; case2://添加銷售經(jīng)理 { em=newSalesmanager; em->setName(); em->setRank(2); em->setType(2); em->pay(); //em->display(); insert(head,em); } break; case3://添加經(jīng)理 { em=newManager; em->setName(); em->setRank(3); em->setType(3); em->pay(); insert(head,em); } break; case4://添加銷售人 { em=newSalesman; em->setName(); em->setRank(4); em->setType(4); em->pay(); insert(head,em); } break; case5: break; default: cout<<"輸入有誤:"<<endl; } }while(chose!=5);}/**功能:清除輸入緩存函數(shù)*參數(shù):無*返回值:無*/voidfflush_in(){ charc='\0'; c=getchar(); while(c!='\n') c=getchar();}//**employee.h**/* 作者: 日期:2013-10-9 功能:公司人員管理系統(tǒng)*/#ifndef_EMPLOYEE_H_#define_EMPLOYEE_H_classEmployee{public: staticintmaxNumber; Employee(); virtual~Employee(); virtualvoidsetName(); virtualvoidsetRank(); voidsetName(char*Name); voidsetNum(intNum); voidsetRank(intRank); voidsetmonthSalary(floatmonthsalary); voidsetType(intType); virtualvoidpromote(intgrade=0); virtualvoidpay(); virtualvoiddisplay(); char*getName(); intgetNum(); intgetRank(); floatgetmonthsalary(); intgetType();protected: char*name; intnumber; intrank; floatmonthSalary; inttype;};classTechnician:publicEmployee{public: Technician(); voidsetName(); voidsetRank(); voidpromote(intRank); voidpay(); voiddisplay(); protected: floathourRate; intworkHours; };classSalesman:virtualpublicEmployee{public: Salesman(); voidsetName(); voidsetRank(); voidpromote(intRank); voidpay(); voiddisplay();protected: floatcommRate; floatsales;};classManager:virtualpublicEmployee{public: Manager(); voidsetName(); voidsetRank(); voidpromote(intRank); voidpay(); voiddisplay();protected: floatmonthPay;};classSalesmanager:publicManager,publicSalesman{public: Salesmanager(); voidsetName(); voidsetRank(); voidpromote(intRank); voidpay(); voiddisplay();};#endif//**employee.cpp**/* 作者: 日期:2013-10-9 功能:公司人員管理系統(tǒng)*/#include<iostream>#include"employee.h"#include<string.h>#include"company.h"#include<stdlib.h>usingnamespace::std;intEmployee::maxNumber=0;Employee::Employee(){ charName[20]="\0"; name=newchar[strlen(Name)+1]; strcpy(name,Name); number=maxNumber++; rank=0; monthSalary=0.0; }Employee::~Employee(){ delete[]name;}voidEmployee::setName(char*Name){ strcpy(name,Name);}voidEmployee::setNum(intNum){ number=Num;}voidEmployee::setRank(intRank){ rank=Rank;}voidEmployee::setType(intType){ type=Type;}voidEmployee::setmonthSalary(floatmonthsalary){ monthSalary=monthsalary;}char*Employee::getName(){ returnname;}intEmployee::getNum(){ returnnumber;}intEmployee::getRank(){ returnrank;}intEmployee::getType(){ returntype;}floatEmployee::getmonthsalary(){ returnmonthSalary;}voidEmployee::pay(){}voidEmployee::display(){}voidEmployee::promote(intgrade){ type=grade;}voidEmployee::setName(){ charName[20]; cout<<"輸入員工姓名:"<<endl; cin>>Name; strcpy(name,Name);}voidEmployee::setRank(){ intRank=0; cout<<"輸入員工等級(jí):"<<endl; cin>>Rank; fflush_in(); rank=Rank; }Technician::Technician(){ hourRate=100;}voidTechnician::setName(){ Employee::setName();}voidTechnician::setRank(){ Employee::setRank(); monthSalary=(workHours*hourRate)*rank;}voidTechnician::promote(intRank){ Employee::promote(Rank);}voidTechnician::pay(){ cout<<"請(qǐng)輸入員工"<<name<<"工作小時(shí)數(shù):"; cin>>workHours; fflush_in(); if(workHours==0) { cout<<"輸入有誤:"<<endl; exit(0); } monthSalary=(workHours*hourRate)*rank;}voidTechnician::display(){ cout<<"兼技\t"<<name<<"\t"<<number<<"\t"<<rank<<"\t"<<monthSalary<<endl;}Salesman::Salesman() :Employee(){ commRate=0.03;}voidSalesman::setName(){ Employee::setName();}voidSalesman::setRank(){ Employee::setRank();}voidSalesman::promote(intRank){ Employee::promote(Rank);}voidSalesman::pay(){ cout<<"請(qǐng)輸入員工"<<name<<"銷售額:"; cin>>sales; fflush_in(); monthSalary=sales*commRate*100*rank;}voidSalesman::display(){ cout<<"推銷\t"<<name<<"\t"<<number<<"\t"<<rank<<"\t"<<monthSalary<<endl;}Manager::Manager(){ monthPay=10000;}voidManager::setName(){ Employee::setName();}voidManager::setRank(){ Employee::setRank();}voidManager::promote(intRank){ Employee::promote(Rank);}voidManager::pay(){ monthSalary=monthPay*rank;}voidManager::display(){ cout<<"經(jīng)理\t"<<name<<"\t"<<number<<"\t"<<rank<<"\t"<<monthSalary<<endl;}Salesmanager::Salesmanager(){ monthPay=6000; commRate=0.005;}voidSalesmanager::setName(){ Employee::setName(

溫馨提示

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

評(píng)論

0/150

提交評(píng)論