高校工資管理系統(tǒng) C課程設(shè)計
《高校工資管理系統(tǒng) C課程設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《高校工資管理系統(tǒng) C課程設(shè)計(18頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、重慶郵電大學《C++》課程設(shè)計報告 C++課程設(shè)計 高 校 工 資 管 理 系 統(tǒng) 1.系統(tǒng)概述 通過設(shè)計一個較為簡單的《高校工資管理系統(tǒng)》,進一步熟悉C++中類的概念、類的封裝、繼承的實現(xiàn)方式。了解系統(tǒng)開發(fā)的需求分析、類層次設(shè)計、模塊分析、編碼測試、模塊組裝與整體調(diào)試的全過程,加深對C++的理解與Visual C++環(huán)境的使用;逐步熟悉程序設(shè)計的方法,并養(yǎng)成良好的編程習慣。 2.總體設(shè)計 2.1職工類的設(shè)計 基于C++中類的概念,類的封裝,繼承和抽象。編寫一個Person的基類包含共有的相關(guān)信息和操作,然后使職工類都
2、繼承于此基類從而實現(xiàn)多態(tài)。 2.2應(yīng)用類的設(shè)計 編寫一個Person類的友元類College類來實現(xiàn)添加,刪除,查找等功能。 2.3文件的讀寫設(shè)計 通過College類中的Save()函數(shù)來實現(xiàn)數(shù)據(jù)的存儲,保存在Person.dat中,而通過Load()函數(shù)來實現(xiàn)Person.dat數(shù)據(jù)的讀入。 3.詳細設(shè)計及系統(tǒng)實現(xiàn) 3.1 Person類 class Person //人員類(抽象類) { protected: int No; //編號 char Name[20]; //姓名 char Duty;
3、 //人員類別標志(0-教師,1-實驗員,2-行政人員,3-教師兼實驗員,4-行政兼教師) double Salary; //基本工資 Person *next; //指針域 public: Person() //基類構(gòu)造 { next=0; //指針域設(shè)置為空 } virtual ~Person() //基類虛析構(gòu) { } virtual void Input()=0; //從鍵盤輸入數(shù)據(jù) virtual void Input(ifstream& ifs)=0;
4、 //從文件輸入數(shù)據(jù) virtual void Output()=0; //向屏幕輸出數(shù)據(jù) virtual void Output(ofstream& ofs)=0; //向文件輸出數(shù)據(jù) virtual double Incoming()=0; //計算收入 friend class College; }; 3.2 Teacher類 class Teacher:virtual public Person //教師類 { protected: int Hours; //教師課時 publi
5、c: //為對象設(shè)置數(shù)據(jù)分為兩種途徑,通過)構(gòu)造函數(shù),)一般成員函數(shù) //分開可以使得程序中應(yīng)用更加靈活 //本程序采用:缺省構(gòu)造+Input() Teacher() //構(gòu)造函數(shù),初始化部分數(shù)據(jù) { Duty='0'; Salary=800; } void Input() //鍵盤補充輸入其它數(shù)據(jù) { cout<<"編號:"; cin>>No; cout<<"姓名:"; cin>>Name; cout<<"教師上學期課時:"; cin>>Hours; }
6、
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 7、g()
{
return Salary+(Hours-120)*20;
}
};
3.3 Assistant類
class Assistant:virtual public Person //實驗員
{
protected:
int Allowance;
int Hours;
public:
Assistant()
{
Duty='1';
Salary=650;
Allowance=150;
}
void Input()
{
cout<<"編號:" 8、; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"實驗員上學期實驗課時:"; cin>>Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 9、 {
ofs< 10、50;
Allowance=250;
}
void Input()
{
cout<<"編號:"; cin>>No;
cout<<"姓名:"; cin>>Name;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty;
}
void Output()
{
cout< 11、& ofs)
{
ofs< 12、00;
}
void Input()
{
cout<<"編號:"; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"教師上學期課時:"; cin>>Teacher::Hours;
cout<<"教師兼職實驗員上學期實驗課時:"; cin>>Assistant::Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Teacher::Hours>>Assistant::Hours;
}
v 13、oid Output()
{
cout< 14、
return Salary+(Teacher::Hours-120)*20
+Allowance+(Assistant::Hours-70)*20;
}
};
3.6 Manager_Teacher類
class Manager_Teacher:public Manager,public Teacher //行政人員兼教師
{
public:
Manager_Teacher()
{
Duty='4';
Manager::Salary=750;
}
void Input()
{
c 15、out<<"編號:"; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"行政人員兼職教師上學期課時:"; cin>>Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 16、stream& ofs)
{
ofs< 17、c:
College(); //構(gòu)造
~College(); //析構(gòu)
void Add(); //增加職工
void Delete(); //刪除職工
void Modify(); //修改職工
void Print(); //輸出職工信息
void Save(); //職工信息存盤
void Load(); //職工信息裝入
void Finding(); //查找職工
};
3.7.2 構(gòu)造函數(shù)
College::College() //構(gòu)造函數(shù)(創(chuàng)建個頭結(jié)點的鏈表)
{
18、Person *p=new Teacher;
PL=p;
cout<<"自動裝入數(shù)據(jù)...\n";
Load();
}
3.7.3 析構(gòu)函數(shù)
College::~College() //析構(gòu)函數(shù)(僅保留個頭結(jié)點)
{
Person *p=PL;
while(p) //逐個刪除結(jié)點,包括頭結(jié)點
{
PL=p->next;
delete p;
p=PL;
}
PL=0;
}
3.7.4 Add函數(shù)
void College::Add() //增加職工
{
cout<<"\t\t******* 19、*********高校工資管理系統(tǒng)*******************\n\n\n";
cout<<"\n\t\t\t\t**增加職工,輸入x結(jié)束** \n\n";
//查找尾結(jié)點
Person *p=PL;
while(p->next)p=p->next;
char ch='m';
//創(chuàng)建新結(jié)點,錄入數(shù)據(jù),連接到鏈表
Teacher *pt;
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
cout<<"職工分 20、類碼[0-教師,1-實驗員,2-行政人員,3-教師兼實驗員,4-行政兼教師]:\n\n";
for(;ch!='x';)
{
cout<<"類別:";
cin>>ch;
switch(ch)
{
case'0': pt=new Teacher; pt->Input();
p->next=pt;
break;
case '1': pa=new Assistant; pa->Input();
p->next=pa;
break;
case '2': pm= 21、new Manager; pm->Input();
p->next=pm;
break;
case '3': pta=new Teacher_Assistant; pta->Input();
p->next=pta;
break;
case '4': pmt=new Manager_Teacher; pmt->Input();
p->next=pmt;
break;
}
p=p->next;
}
}
3.7.5 Find函數(shù)
//查找職工結(jié)點(返回-找到 22、,-未找到.結(jié)點指針由p1返回,p2為前看指針)
int College::Find(int ID,Person **p1,Person **p2)
{
*p1=PL->next;
*p2=PL;
while(*p1)
{
if((*p1)->No==ID)
break; //找到
else
{
*p2=*p1; //繼續(xù)查找
*p1=(*p1)->next;
}
}
return *p1?1:0;
}
3.7.6 Clear函數(shù)
void College 23、::Clear() //清除所有的職工結(jié)點(僅保留頭結(jié)點)
{
Person *p=PL->next;
while(p)
{
PL->next=p->next;
delete p;
p=PL->next;
}
}
3.7.7 Delete函數(shù)
void College::Delete() //刪除職工
{
cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";
cout<<"\n\t\t\t\t** 刪除職工**\n";
int No; 24、
Person *p1,*p2;
cout<<"編號:"; cin>>No;
if(!Find(No,&p1,&p2))
{
cout<<"指定的人員沒有找到!\n";
}
else
{
p2->next=p1->next; //連接
delete p1;
cout<<"正確刪除!\n";
}
}
3.7.8 Modify函數(shù)
void College::Modify() //修改職工
{
cout<<"\t\t****************高校工資管理系統(tǒng)******** 25、***********\n\n\n";
cout<<"\n\t\t\t\t** 修改職工**\n";
int No;
Person *p1,*p2;
cout<<"編號:"; cin>>No;
if(!Find(No,&p1,&p2))
{
cout<<"指定的人員沒有找到!\n";
}
else
{
p1->Output(); //輸出原來的職工信息(做提示)
p1->Input(); //輸入新的職工信息(更新)
cout<<"修改完成!\n";
}
}
3.7.9 26、 Print函數(shù)
void College::Print() //輸出職工信息
{
cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";
cout<<"\n** 職工信息表**\n\n";
cout<<"編號\t姓名\t崗位\t\t其它\t工資\n";
Person *p=PL->next;
if(!p)
{
cout<<"無職工記錄!\n";
return;
}
while(p) //遍歷鏈表,輸出職工信息
{
p->Ou 27、tput();
p=p->next;
}
}
3.7.10 Save函數(shù)
void College::Save() //職工信息存盤
{
ofstream f("Person.dat",ios::out); //打開文件
//遍歷輸出至文件
Person *p=PL->next;
while(p)
{
p->Output(f);
p=p->next;
}
f.close(); //關(guān)閉文件
cout<<"職工信息已經(jīng)保存在Person.dat.\n";
}
3.7. 28、11 Load函數(shù)
void College::Load() //職工信息裝入
{
char buf[81]; //臨時空間
char Duty; //人員類型
Person *p2; //新建結(jié)點的指針
long t; //讀寫位置
//清除現(xiàn)有結(jié)點(保留頭結(jié)點)
Clear();
//打開文件
ifstream f("Person.dat",ios::in);
//建立結(jié)點,讀數(shù)據(jù)
Person *p=PL; //尾結(jié)點指針
while(1)
{
//讀取人員 29、類型
t=f.tellg();
f>>buf>>buf>>Duty;
if(f)
{
//根據(jù)人員類型創(chuàng)建新結(jié)點
switch(Duty)
{
case '0': p2=new Teacher; break;
case '1': p2=new Assistant; break;
case '2': p2=new Manager; break;
case '3': p2=new Teacher_Assistant; break;
30、 case '4': p2=new Manager_Teacher; break;
default: f.close(); return;
}
p->next=p2;
p=p->next;
f.seekg(t);
p->Input(f);
}
else
break;
}
//關(guān)閉文件
f.close();
cout<<"Person.dat數(shù)據(jù)已裝入.\n";
}
3.7.12 Finding函數(shù)
v 31、oid College::Finding()
{
cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";
cout<<"\n\t\t\t\t**查找職工**\n";
Person *p1,*p2;
int ID;
cout<<"編號;";
cin>>ID;
cout<<"\n\n";
p1=PL->next;
p2=PL;
while(p1)
{
if((p1)->No==ID)
{
cout<<"編號\t姓名\t崗位\t\t其它\t工資 32、\n";
(p1)->Output();
break;
}//找到
else
{
p2=p1; //繼續(xù)查找
p1=(p1)->next;
}
}
}
3.8 界面函數(shù)
char Meau()
{
char c;
int flag;
do
{
system("cls");
flag=1;
cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";
33、 cout<<"\t\t\t┏━━━━━━━━━━━━━━━━┑\n";
cout<<"\t\t\t┃ ┃\n";
cout<<"\t\t\t┃ 1、增加職工 ┃\n";
cout<<"\t\t\t┃ 2、刪除職工 ┃\n";
cout<<"\t\t\t┃ 3、查找職工 ┃\n";
cout<<"\t\t\t┃ 4、修改職工 34、 ┃\n";
cout<<"\t\t\t┃ 5、輸出職工信息 ┃\n";
cout<<"\t\t\t┃ 6、數(shù)據(jù)存盤 ┃\n";
cout<<"\t\t\t┃ 7、數(shù)據(jù)裝入 ┃\n";
cout<<"\t\t\t┃ 8、退出 ┃\n";
cout<<"\t\t\t┗━━━━━━━━━━━━━━━━┛\n";
cout<<"\n\n\n\t\t請輸入您的選擇:";
cin>>c 35、;
if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8')
flag=0;
}while(flag);
return c;
}//顯示主菜單,接受選擇
3.9 主函數(shù)
void main()
{
char ch;
College c; //定義大學對象
do{
ch=Meau();
switch(ch)
{
case '1': system("cls");c.Add(); cout<<"\n\n\t\t按任意 36、鍵結(jié)束...\n";getchar();getchar();break;
case '2': system("cls");c.Delete();cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();getchar();break;
case '3': system("cls");c.Finding();cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();getchar();break;
case '4': system("cls");c.Modify();cout<<"\n\n\t\t按任意鍵結(jié)束...\n 37、";getchar();getchar();break;
case '5': system("cls");c.Print(); cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();getchar();break;
case '6': system("cls");c.Save(); cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();getchar();break;
case '7': system("cls");c.Load(); cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();get 38、char();
};
}while(ch!='8');
}
4.系統(tǒng)評價
該系統(tǒng)實現(xiàn)了職工的添加,刪除,查找,顯示,修改,和數(shù)據(jù)的存盤與裝入操作,總體上來說功能比較全面,但仍有一些不足,如界面問題,以及程序中的許多繁瑣之處。
5.設(shè)計結(jié)果與分析
5.1 主界面
實現(xiàn)各種功能的選擇:
5.2 添加功能
實現(xiàn)添加功能,輸入“x“結(jié)束:
5.3 刪除功能
5.4 查找功能
5.5 修改功能
5.6 顯示功能
5.7 保存功能
5.8 讀入功能
6.設(shè)計體會與建議
6.1 體會
通過這次對《高校工資管理系統(tǒng)》這個實驗的設(shè)計,充分感受并體會到了C++中的面對對象設(shè)計的真意,以及學習了對一個程序的分解和分工完成的方法,掌握了一點編寫的技巧。實際的操作與解決問題的能力更有了大幅的提升。
6.2 建議
希望在以后的課程設(shè)計中,能更多的得到老師的幫助,可以幫助我們更清晰地理清思路,以及一些編程上的技巧。
7.附錄
7.1 成員
7.2 分工
18
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點美食推薦
- XX國有企業(yè)黨委書記個人述責述廉報告及2025年重點工作計劃
- 世界濕地日濕地的含義及價值
- 20XX年春節(jié)節(jié)后復(fù)工安全生產(chǎn)培訓人到場心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫之美生活之美
- 節(jié)后開工第一課輕松掌握各要點節(jié)后常見的八大危險
- 廈門城市旅游介紹廈門景點介紹廈門美食展示
- 節(jié)后開工第一課復(fù)工復(fù)產(chǎn)十注意節(jié)后復(fù)工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓
- 深圳城市旅游介紹景點推薦美食探索
- 節(jié)后復(fù)工安全生產(chǎn)培訓勿忘安全本心人人講安全個個會應(yīng)急
- 預(yù)防性維修管理
- 常見閥門類型及特點
- 設(shè)備預(yù)防性維修
- 2.乳化液泵工理論考試試題含答案