




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目人員信息管理系統(tǒng) 姓 名:班 級(jí):學(xué) 號(hào):指導(dǎo)教師:成 績(jī):完成時(shí)間:完成地點(diǎn):湖州師范學(xué)院一設(shè)計(jì)任務(wù)分析建立人員信息管理系統(tǒng),需實(shí)現(xiàn)以下要求:(1)建立職工信息數(shù)據(jù),包括職工編號(hào)、姓名、性別、工資、出生時(shí)間、參加工作時(shí)間和年齡(必須計(jì)算得到)。(2)根據(jù)職工信息表,建立只含有姓名和年齡的職工信息簡(jiǎn)表。(3)使用繼承的方法構(gòu)造3個(gè)類,(即雇員類虛基類,教師類和工人類派生類)使用相應(yīng)的對(duì)象放置10個(gè)職工信息。(4)編寫同名display()成員函數(shù),用來(lái)輸出數(shù)組的內(nèi)容。(5)按不同類別輸出職工信息,比如按系輸出教師信息。(6)要求對(duì)“
2、”和“”運(yùn)算符進(jìn)行重載??紤]到輸人職工編號(hào)時(shí),也會(huì)因不小心引人空格,而且名字中也需要有空格,所以重載“運(yùn)算符時(shí),需要滿足這個(gè)要求。(7)抽取并計(jì)算職工的平均年齡。(8)檢索(查找)指定信息。(9)顯示年齡分布的柱狀圖 對(duì)于要求(3)“使用相應(yīng)的對(duì)象放置10個(gè)職工信息”,信息不明確,不清楚是總共十個(gè)還是兩類各十個(gè),故設(shè)計(jì)成操作者自己輸入所要輸入教師和工人的人數(shù),感覺這樣更加人性化。整個(gè)界面及操作均在命令窗口完成。通過類的繼承,及函數(shù)重載、運(yùn)算符重載,字符串函數(shù)的調(diào)用及制表符的利用,實(shí)現(xiàn)上述功能。二模塊設(shè)計(jì) (1)類設(shè)計(jì):本程序定義了生日DAY這個(gè)結(jié)構(gòu)體,包含年、月、日三個(gè)整型變量,定義了三個(gè)類,
3、虛基類People,含有職工編號(hào)number、姓名name、性別sex、工資wage、出生時(shí)間birthday、參加工作時(shí)間worktime和年齡age及一個(gè)靜態(tài)數(shù)據(jù)成員ye用于記錄現(xiàn)在的年份。People類中定義了People類的有參構(gòu)造函數(shù),無(wú)參構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),析構(gòu)函數(shù),Setnum函數(shù)用于設(shè)置職工編號(hào),Setname函數(shù)用于設(shè)置職工姓名,Setsex函數(shù)用于設(shè)置職工性別,Setwage函數(shù)用于設(shè)置職工工資,Setbir函數(shù)用于設(shè)置職工出生日期,Setworktime函數(shù)用于設(shè)置職工工作時(shí)間,Setage函數(shù)用于設(shè)置職工年齡,Getnumber函數(shù)獲得編號(hào),Getname函數(shù)獲得姓
4、名。Getsex函數(shù)獲得性別,Getbirthday函數(shù)顯示出生年月日,Getday函數(shù)獲得出生日期,Getage函數(shù)獲得年齡,Getwage函數(shù)獲得工資數(shù),Getworktime函數(shù)獲得工作時(shí)間數(shù),Setye用于設(shè)置現(xiàn)在的年份。由People類派生出兩個(gè)子類,一個(gè)為工人worker類,在People的基礎(chǔ)上增加職務(wù)zhiwu這個(gè)成員變量。worker類定義了有參構(gòu)造函數(shù),無(wú)參構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),析構(gòu)函數(shù),Setzhiwu函數(shù)用于設(shè)置職務(wù)類型,Getzhiwu函數(shù)通過布爾變量的形參,判斷是否顯示職務(wù),并獲得職務(wù)數(shù)據(jù)。display函數(shù)用于顯示工人信息。并在工人類中對(duì)及及兩個(gè)運(yùn)算符針對(duì)老師這
5、個(gè)類進(jìn)行了重載。(2) 函數(shù)設(shè)計(jì)Setname函數(shù)對(duì)職工編號(hào)個(gè)數(shù)進(jìn)行了判斷,小于等于7個(gè)賦值成功,返回1,否則返回0。Setname函數(shù)對(duì)職工姓名進(jìn)行了判斷,字符數(shù)不多于15個(gè)賦值成功,返回1,否則返回0。Setsex函數(shù)接受字符W,w,M,m,分辨標(biāo)志女和男,符合要求賦值成功返回1,否則返回0。Setwage函數(shù)、Setworktime函數(shù)判斷參數(shù)是否為正,若為正賦值成功返回1,否則返回0。Setbir函數(shù)判斷了各個(gè)月份最多的天數(shù),包括閏年的判斷,若符合要求,賦值成功返回1,否則返回0。最后通過計(jì)算得到年齡,用Setage函數(shù)賦值時(shí),若年齡在18到67歲之間,賦值成功返回1,否則返回0。其他
6、Get函數(shù)即常規(guī)的返回函數(shù)。工人方面Setzhiwu函數(shù)用于設(shè)置職務(wù),初步定為管理器材的,打掃衛(wèi)生的,當(dāng)保安的及修理工。教師方面Setxi函數(shù)用于設(shè)置老師所在的系,初步定為信息與計(jì)算科學(xué)系,數(shù)學(xué)系,物理系,科學(xué)系四類。及display函數(shù)根據(jù)不同的對(duì)象,實(shí)現(xiàn)了重載。三主要數(shù)據(jù)結(jié)構(gòu)使用動(dòng)態(tài)數(shù)組存儲(chǔ)結(jié)構(gòu),對(duì)教師信息與工人信息進(jìn)行存儲(chǔ)及操作,其中數(shù)據(jù)類型DAY定義如下:typedef struct int year; int month; int day;DAY;虛基類雇員類定義如下: class People public: People(char *,char *,char ,DAY p,dou
7、ble ,double); People(); People(People &p); People(); int Setnum(char *a); int Setname(char *a); int Setsex(char a); int Setwage(double a); int Setbir(DAY a); int Setworktime(double a); int Setage(int a); char *Getnumber(); char *Getname(); char Getsex(); void Getbirthday(); DAY Getday(); int Getage(
8、); double Getwage(); double Getworktime(); void Setye(int a);protected: char number7; char name15; char sex; double wage; DAY birthday; double worktime; int age; static int ye;老師類定義如下:class teacher:virtual public People protected: int xi; public: teacher(char *a,char *b,char c,DAY p,double d,double
9、e,int f); teacher(teacher &p); teacher(); teacher(); int Setxi(int a); int Getxi(bool a); void display(); friend istream & operator (istream& in,teacher &q); friend ostream & operator (istream& in,worker &p); friend ostream & operator (ostream& out,worker &p);4 流程圖開始 輸入年份工人人數(shù)教師人數(shù)按其他結(jié)束按0按1輸入職工數(shù)據(jù)人員信息管
10、理系統(tǒng)菜單 無(wú)按6按5按2輸出柱狀圖有判斷有無(wú)數(shù)據(jù)按4按3無(wú)判斷有無(wú)數(shù)據(jù)無(wú)判斷有無(wú)數(shù)據(jù)有有判斷有無(wú)數(shù)據(jù)輸出職工信息簡(jiǎn)表顯示平均年齡有無(wú)按其他選擇輸出類別無(wú)判斷有無(wú)數(shù)據(jù)按其他按2按1按0選擇系按其他選擇檢索內(nèi)容有按其他按3按1輸出信息與計(jì)算科學(xué)系按3按2按2姓名檢索輸出符合要求的年齡檢索輸出符合要求的編號(hào)檢索輸出符合要求的按1輸出科學(xué)系輸出物理系輸出數(shù)學(xué)系選擇職務(wù) 按0按2按3按1輸出管理器材修理工保安輸出打掃衛(wèi)生5 源代碼頭文件:#include#includeusing namespace std;typedef struct int year; int month; int day;DAY
11、;/人事管理People類class People public: People(char *,char *,char ,DAY p,double ,double); People() People(People &p); People() int Setnum(char *a) if(strlen(a)7) cout輸入的職工編號(hào)不得多于七位,請(qǐng)從新輸入!15) cout姓名不得多于15位,請(qǐng)重新輸入!endl; return 0; else strcpy(name,a);return 1; int Setsex(char a) char *b; b=strlwr(&a); /*仿照wind
12、ouw命令行不區(qū)分大小寫*/ if(*b!=m&*b!=w) cout姓別設(shè)置出錯(cuò),請(qǐng)重新輸入!endl; return 0; else sex=a;return 1; int Setwage(double a) if(a0) cout工資為負(fù),請(qǐng)重新輸入!endl;return 0; else wage=a;return 1; int Setbir(DAY a) int maxDay=31;if(a.month=4|a.month=6|a.month=9|a.month=11)maxDay=30;else if(a.month=2)if(a.year%4=0&a.year%100!=0)|a
13、.year%400=0)maxDay=29;elsemaxDay=28;if(a.year=0|a.month12|a.daymaxDay)cout出生日期輸入有誤,請(qǐng)重新輸入!endl; return 0; birthday=a;return 1; int Setworktime(double a) if(a0) cout工作時(shí)間為負(fù),請(qǐng)重新輸入!endl;return 0; else worktime=a;return 1; int Setage(int a) if(a67) cout年齡小于18歲或大于67歲,不符合情況!endl;return 0; else age=a;return
14、1; char *Getnumber()return number; char *Getname()return name; char Getsex() return sex; void Getbirthday() coutbirthday.year年birthday.month月birthday.day日endl; DAY Getday()return birthday; int Getage()return age; double Getwage()return wage; double Getworktime()return worktime; void Setye(int a) ye=
15、a; protected: char number7; char name15; char sex; double wage; DAY birthday; double worktime; int age; static int ye; People:People(char *a,char *b,char c,DAY p,double d,double e) strcpy(name,a); strcpy(number,b); sex=c; birthday=p; wage=d; worktime=e; People:People(People &p):birthday(p.birthday)
16、strcpy(name,); strcpy(number,p.number); sex=p.sex; wage=p.wage; worktime=p.worktime; int People:ye=2010; /*靜態(tài)變量,用來(lái)記錄年份*/ /*工人類的定義*/ class worker:virtual public People protected: int zhiwu; public: worker(char *a,char *b,char c,DAY p,double d,double e,int f):People(a,b,c,p,d,e) zhiwu=f; worker(
17、worker &p):People(p) zhiwu=p.zhiwu; worker() worker() int Setzhiwu(int a) if(a3) cout輸入選項(xiàng)有誤,請(qǐng)重新輸入!endl; return 0; else zhiwu=a; return 1; /*獲取職務(wù)*/ int Getzhiwu(bool a) if(a) switch(zhiwu) case 0:cout管理器材; break; case 1:cout打掃衛(wèi)生; break; case 2:cout保安; break; case 3:cout修理工; return zhiwu; /*編寫同名函數(shù)disp
18、lay()*/ void display() cout工人姓名:Getname() 編號(hào):Getnumber()endl;cout工人性別:Getsex() 出生年月:;Getbirthday();cout工人年齡:Getage() 從事的工作:;Getzhiwu(1);coutendl;cout工人工資:Getwage() 工作時(shí)間:Getworktime()運(yùn)算符*/ friend istream & operator (istream& in,worker &p)char name30,sname30,num20,snum20,sex;int zhiwu,i,j;double gz,wt
19、;gets(name); /*不知道為什么,添了這個(gè)才能輸入姓名*/ while(1) cout請(qǐng)輸入工人姓名(不多于15位):; gets(name); j=0; for(i=0;i30;i+) /*消除姓名之前的空格*/if(i=0)while(namei= )i+;snamej=namei;j+; if(p.Setname(sname) break;while(1)j=0; cout請(qǐng)輸入工人編號(hào)(不多于七7位):;gets(num);for(i=0;i20;i+) /*消除空格*/if(numi!= )snumj=numi;j+;if(p.Setnum(snum) break; whi
20、le(1) coutsex; if(p.Setsex(sex) break;while(1)int y,m,d; cout請(qǐng)輸入工人出生時(shí)間endl; couty; coutm; coutd; DAY day=y,m,d; if(p.Setbir(day)&p.Setage(ye-y) break;while(1) coutzhiwu; if(p.Setzhiwu(zhiwu) break;while(1) coutgz; if(p.Setwage(gz) break;while(1) coutwt; if(p.Setworktime(wt) break;return in; /*重載工人類的
21、運(yùn)算符*/ friend ostream & operator (ostream& out,worker &p)out*工人信息*endl; out工人姓名:p.Getname() 編號(hào):p.Getnumber()endl;out工人性別:p.Getsex() 出生年月:;p.Getbirthday();out工人年齡:p.Getage() 從事的工作:;p.Getzhiwu(1);outendl;out工人工資:p.Getwage() 工作時(shí)間:p.Getworktime()endl;out*endl;return out; ; /*教師類的定義*/ class teacher:virtua
22、l public People protected: int xi; public: teacher(char *a,char *b,char c,DAY p,double d,double e,int f):People(a,b,c,p,d,e) xi=f; teacher(teacher &p):People(p) xi=p.xi; teacher() teacher() int Setxi(int a) if(a3) cout輸入選項(xiàng)有誤,請(qǐng)重新輸入!endl; return 0; else xi=a; return 1; int Getxi(bool a) /*定義是否顯示信息*/ i
23、f(a) switch(xi) case 0:cout信息與計(jì)算科學(xué)系; break; case 1:cout數(shù)學(xué)系; break; case 2:cout物理系; break; case 3:cout科學(xué)系; return xi; /*編寫同名函數(shù)display()*/ void display() cout教師姓名:Getname() 編號(hào):Getnumber()endl;cout教師性別:Getsex() 出生年月:;Getbirthday();cout教師年齡:Getage() 所在的系:;Getxi(1);coutendl;cout教師工資:Getwage() 工作時(shí)間:Getwor
24、ktime()運(yùn)算符*/ friend istream & operator (istream& in,teacher &q)char name30,sname30,num20,snum20,sex;int xi,i,j;double gz,wt;gets(name); while(1) cout請(qǐng)輸入教師姓名(不多于15位):; gets(name); j=0; for(i=0;i30;i+) /*消除姓名之前的空格*/if(i=0)while(namei= )i+;snamej=namei;j+; if(q.Setname(sname) break; while(1)j=0; cout請(qǐng)輸
25、入教師編號(hào)(不多于七7位):;gets(num);for(i=0;i20;i+)if(numi!= )snumj=numi;j+;if(q.Setnum(snum) break; while(1) coutsex; if(q.Setsex(sex) break;while(1)int y,m,d; cout請(qǐng)輸入教師出生時(shí)間endl; couty; coutm; coutd; DAY day=y,m,d; if(q.Setbir(day)&q.Setage(ye-y) break;while(1) coutxi; if(q.Setxi(xi) break;while(1) coutgz; if
26、(q.Setwage(gz) break;while(1) coutwt; if(q.Setworktime(wt) break;return in; /*重載教師類的運(yùn)算符*/ friend ostream & operator (ostream& out,teacher &p)out*教師信息*endl; out教師姓名:p.Getname() 編號(hào):p.Getnumber()endl;out教師性別:p.Getsex() 出生年月:;p.Getbirthday();out教師年齡:p.Getage() 所在的系:;p.Getxi(1);outendl;out教師工資:p.Getwage(
27、) 工作時(shí)間:p.Getworktime()endl;out*endl;return out; ;主函數(shù):#include#include#include#includepeople.husing namespace std;/*數(shù)據(jù)輸入函數(shù)*/void main() int year,num1=0,num2=0,ml; /*num1用來(lái)存儲(chǔ)工人數(shù),num2用來(lái)存儲(chǔ)教師數(shù)*/ bool sf=1,sc; /*sf判斷是否有數(shù)據(jù)輸入,sc用于是否有能顯示的信息*/ int s,i,j; double pinjun; /*記錄平均年齡*/ int a1,a2,a3,a4,a5,amax; /*記錄
28、五個(gè)年齡段的人數(shù),及五個(gè)年齡段中最大的人數(shù)*/ while(1) coutyear; if(year=2100) cout年份不符合現(xiàn)狀!endl; else break; while(1) coutnum1; if(num1=0) cout工人人數(shù)有誤!endl; else break; while(1) coutnum2; if(num2=0) cout教師人數(shù)有誤!endl; else break; worker *w=new workernum1; teacher *t=new teachernum2; w0.Setye(year); while(1) cout endl; cout
29、*歡迎來(lái)到人員信息管理系統(tǒng)* endl; cout 請(qǐng)選擇所要的操作 endl; cout 數(shù)據(jù)輸入:請(qǐng)按1 endl; cout 輸出職工信息簡(jiǎn)表:請(qǐng)按2 endl; cout 按類別輸出職工信息:請(qǐng)按3 endl; cout 顯示職工平均年齡:請(qǐng)按4 endl; cout 檢索信息:請(qǐng)按5 endl; cout 顯示年齡分布的柱狀圖:請(qǐng)按6 endl; cout 退出系統(tǒng):請(qǐng)按0 endl; cout ml; if(ml6) printf(指令有誤,請(qǐng)重新輸入!); else break; switch(ml) case 1: for(i=0;iwi; for(i=0;iti; sf=0;
30、 break; /*輸出職工簡(jiǎn)表*/ case 2: if(sf) cout還沒有數(shù)據(jù)輸入,無(wú)法輸出職工信息簡(jiǎn)表!endl; break; cout職工信息簡(jiǎn)表:endl; coutendl; coutsetiosflags(ios_base:left)setw(16)姓名setw(6)年齡endl; for(i=0;inum2;i+) coutendl; coutsetiosflags(ios_base:left)setw(16)ti.Getname()setw(6)ti.Getage()endl; for(i=0;inum1;i+) coutendl; coutsetiosflags(io
31、s_base:left)setw(16)wi.Getname()setw(6)wi.Getage()endl; coutendl; coutresetiosflags(ios_base:left); break; /*按類別輸出*/ case 3: if(sf) cout還沒有數(shù)據(jù)輸入,無(wú)法按類別輸出!endl; break; cout按系輸出請(qǐng)按1,按職務(wù)輸出請(qǐng)按2i; if(i!=1&i!=2) cout輸入錯(cuò)誤,請(qǐng)重新輸入!endl; else break; switch(i) case 1: couti; if(i3) cout輸入錯(cuò)誤,請(qǐng)重新輸入!endl;else break; s
32、c=0; for(j=0;jnum2;j+) if(tj.Getxi(0)=i)couttj;sc=1; if(!sc) cout無(wú)滿足條件的信息!endl; break; case 2: couti; if(i3) cout輸入錯(cuò)誤,請(qǐng)重新輸入!endl;else break; sc=0; for(j=0;jnum1;j+) if(wj.Getzhiwu(0)=i) coutwj; sc=1; if(!sc) cout無(wú)滿足條件的信息!endl; break; ; break; /*輸出平均年齡*/ case 4: if(sf) cout還沒有數(shù)據(jù)輸入,無(wú)法顯示平均年齡!endl; brea
33、k; s=0; for(i=0;inum1;i+) s+=wi.Getage(); for(j=0;jnum2;j+) s+=tj.Getage(); pinjun=1.0*s/(num1+num2); cout職工平均年齡為:pinjunendl; break; /*檢索*/ case 5: if(sf) cout還沒有數(shù)據(jù)輸入,無(wú)法檢索!endl; break; cout通過姓名檢索請(qǐng)按1,年齡檢索請(qǐng)按2,編號(hào)檢索請(qǐng)按3i; if(i3) cout輸入錯(cuò)誤,請(qǐng)重新輸入!endl;else break; switch(i) case 1: char jsname20; cout請(qǐng)輸入所要檢索
34、的姓名:; gets(jsname); gets(jsname); sc=0; for(i=0;inum1;i+) if(strcmp(wi.Getname(),jsname)=0) coutwi; sc=1; for(j=0;jnum2;j+) if(strcmp(tj.Getname(),jsname)=0) couttj; sc=1; if(!sc) cout沒有此姓名的人!endl; break; case 2: int jsage; coutjsage; sc=0; for(i=0;inum1;i+) if(wi.Getage()=jsage) coutwi; sc=1; for(j=0;jnum2;j+) if(tj.Getage()=jsage) couttj; sc=1; if(!sc) cout沒有此年齡的人!endl; break; case 3: char jsnum10; coutjsnum; sc=0; for(i=0;inum1;i+) if(strcmp(wi.Getnumb
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 土地使用權(quán)轉(zhuǎn)讓合同
- 油罐清洗施工方案
- 裝飾頂帽施工方案
- 公司員工聘用合同書
- 橋梁施工方案對(duì)比
- 纜索吊拱橋施工方案
- 2025年防雷防爆及弱電工程設(shè)備項(xiàng)目建議書
- 拆除溫感煙感探頭施工方案
- 酒店弱電養(yǎng)護(hù)方案
- 滁州商場(chǎng)指示牌施工方案
- (二模)2025年寶雞市高考模擬檢測(cè)試題(二)物理試卷(含答案)
- 基地種植合作合同范本
- 露天煤礦安全生產(chǎn)技術(shù)露天煤礦安全管理培訓(xùn)
- 2025年安徽警官職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- 2025年浙江寧波市江北區(qū)民政局招聘編外工作人員1人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年湖南大眾傳媒職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)學(xué)生專用
- YB-T 6121-2023 鋼的晶間氧化深度測(cè)定方法
- 2025屆中交投資有限公司全球校園招聘來(lái)了筆試參考題庫(kù)附帶答案詳解
- 2025年南京旅游職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 【2025年衛(wèi)生健康宣傳日】世界防治結(jié)核病日
- 物流倉(cāng)儲(chǔ)的火災(zāi)防范
評(píng)論
0/150
提交評(píng)論