程序設(shè)計基礎(chǔ)實(shí)踐報告_第1頁
程序設(shè)計基礎(chǔ)實(shí)踐報告_第2頁
程序設(shè)計基礎(chǔ)實(shí)踐報告_第3頁
程序設(shè)計基礎(chǔ)實(shí)踐報告_第4頁
程序設(shè)計基礎(chǔ)實(shí)踐報告_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

福建師范大學(xué)閩南科技學(xué)

院程序設(shè)計基礎(chǔ)實(shí)踐報告題目職工工資信息管理系統(tǒng)學(xué)生姓名陳顯澤學(xué)院信息科學(xué)與工程學(xué)院專業(yè)班級土木工程1班完成時間2017.4.20指導(dǎo)教師褚若波目錄一、課程設(shè)計目的和要求二、課程設(shè)計基本內(nèi)容三、程序功能簡介四、主體內(nèi)容設(shè)計分析程序結(jié)構(gòu)模塊的功能及程序說明相關(guān)模塊源程序操作方法(流程)試驗(yàn)結(jié)果(包括輸入數(shù)據(jù)和輸出結(jié)果)設(shè)計體會參考文獻(xiàn)五、用戶使用說明六、對本設(shè)計過程及方法、手段的改進(jìn)建議一、課程設(shè)計的目的和要求本次課程設(shè)計,是基于“面向?qū)ο缶幊蹋–++)”課程學(xué)習(xí)內(nèi)容的重要實(shí)踐環(huán)節(jié),其主要目的在于通過綜合程序課程設(shè)計,培養(yǎng)和提高學(xué)生的獨(dú)立分析問題、解決實(shí)際問題的能力和計算機(jī)語言編程能力。本次課程設(shè)計時間為2周,要求每位同學(xué)在為期兩周的時間段內(nèi),在編程環(huán)境下,用面向?qū)ο蟪绦蛟O(shè)計思想進(jìn)行C++程序設(shè)計、功能模塊調(diào)試,在正確、合理的軟件功能規(guī)劃的基礎(chǔ)上,實(shí)現(xiàn)公用接口與私有實(shí)現(xiàn)的分離,獨(dú)立完成相關(guān)設(shè)計題所規(guī)定的任務(wù)、進(jìn)行課程設(shè)計報告編寫與整理。而且也是為了培養(yǎng)從資料文獻(xiàn)、科學(xué)實(shí)驗(yàn)中獲得知識的能力,提高從別人經(jīng)驗(yàn)中找到解決問題的新途徑的悟性,初步培養(yǎng)工程意識和創(chuàng)新能力。對掌握知識的深度、運(yùn)用理論去處理問題的能力、實(shí)驗(yàn)?zāi)芰?、課程設(shè)計能力、書面及口頭表達(dá)能力進(jìn)行考核。課程設(shè)計結(jié)束時,要求進(jìn)行設(shè)計成果演示(由指導(dǎo)老師驗(yàn)收相關(guān)程序運(yùn)行成果并打分);每人須對相關(guān)電子文檔進(jìn)行整理上交(包括:程序文件、幫助說明文檔);交課程設(shè)計報告一份(紙質(zhì)打印稿)。二、課程設(shè)計的內(nèi)容設(shè)計一個職工信息管理案例,實(shí)現(xiàn)不同類別職工的工資數(shù)據(jù)。職工的種類包括:正式職工和臨時工。定義一個基本的職工類,基本信息包括:編號、姓名、性別、年齡、家庭住址、基本職務(wù)工資。派生出正式職工類,增加的屬性包括:崗位津貼、養(yǎng)老金、住房公積金、所得稅、醫(yī)療保險、實(shí)發(fā)工資;臨時工增加的屬性包括:獎金、所得稅、實(shí)發(fā)工資。正式職工:實(shí)發(fā)工資=基本職務(wù)工資+崗位津貼-養(yǎng)老金-住房公積金-所得稅-醫(yī)療保險;臨時工:實(shí)發(fā)工資=基本職務(wù)工資+獎金-所得稅;基本功能與技術(shù)要求1、數(shù)據(jù)文件管理功能:利用輸入輸出流創(chuàng)建新文件、打開文件、保存文件。2、計算與統(tǒng)計功能:采用靜態(tài)數(shù)據(jù)成員與成員函數(shù)完成記錄中相關(guān)數(shù)據(jù)的統(tǒng)計;1)能夠打開已存在的數(shù)據(jù)表文件,對數(shù)據(jù)表中與某關(guān)鍵字匹配的相關(guān)記錄進(jìn)行數(shù)據(jù)統(tǒng)計(包括:工資總額、平均值)2)計算每個職工的實(shí)發(fā)工資。3、記錄管理功能:利用繼承與派生思想創(chuàng)建不同的類;記錄的管理采用鏈表或者指針數(shù)組實(shí)現(xiàn);采用抽象類、虛函數(shù)等實(shí)現(xiàn)對象與函數(shù)的動態(tài)關(guān)聯(lián),體現(xiàn)多態(tài)性。1)輸入/添加/插入記錄:利用重載運(yùn)算符“>>”完成對任意一條記錄輸入、添加或插入數(shù)據(jù)表中,并保存到數(shù)據(jù)文件中。2)查詢、顯示記錄:能夠打開已存在的數(shù)據(jù)表文件,根據(jù)用戶要求按所給記錄關(guān)鍵字查詢一個或多個相關(guān)聯(lián)記錄的各項(xiàng)信息。利用重載運(yùn)算符“<<”輸出個對象的信息。3)修改記錄:能夠打開已存在的數(shù)據(jù)表文件,并對確定的任意記錄進(jìn)行修改,在修改過程中,應(yīng)顯示記錄信息,給出確認(rèn)提示,并對更新的記錄信息進(jìn)行文件保存。4)刪除記錄:能夠打開已存在的數(shù)據(jù)表文件,可以刪除數(shù)據(jù)表中的任一記錄,要求具備邏輯刪除(具有恢復(fù)功能)和物理刪除功能,并對新的數(shù)據(jù)表信息進(jìn)行文件保存。三、程序功能簡介數(shù)據(jù)文件管理功能:利用輸入輸出流創(chuàng)建新文件、打開文件、保存文件。計算與統(tǒng)計功能:用靜態(tài)數(shù)據(jù)成員與成員函數(shù)完成記錄中相關(guān)數(shù)據(jù)的統(tǒng)計;記錄管理功能:實(shí)現(xiàn)輸入,插入,刪除,恢復(fù)等功能。四、主體內(nèi)容4.1設(shè)計分析設(shè)置基本類staff,并由此派生出正式職工類formal和臨時工類casual.由于在派生類中都要用到同名的同功能函數(shù),所以在基類中定義了虛函數(shù),以實(shí)現(xiàn)對象與函數(shù)的動態(tài)關(guān)聯(lián)。在整個程序中定義了三個函數(shù)stringInputNormalInfo(istream&input,stringtip,chartype);(用于直到輸入正確類型的數(shù)據(jù)才返回)voidSaveToFile(fstream&file,staff*s);(用于保存信息到指定文件)voidReadFromFile(fstream&file,staff**s);(用于從文件讀取信息),

InputNormalInfo函數(shù)用于對測試過程中一些由輸入錯誤引起的錯誤的糾正。最后在主函數(shù)中用SWITCH語句實(shí)現(xiàn)了對文件,信息的相關(guān)操作。為了體現(xiàn)C++工程性的特點(diǎn),本程序中的類,函數(shù)單獨(dú)作為頭文件和CPP文件,最后在主程序中調(diào)用即可。即為了實(shí)現(xiàn)面向?qū)ο笾械墓媒杩谂c私有實(shí)現(xiàn)的分離。各模塊的功能及程序說明函數(shù)模塊(作為三個頭文件)stringInputNormalInfo(istream&input,stringtip,chartype)用于直到輸入正確類型的數(shù)據(jù)才返回。執(zhí)行過程中用戶可能會由于不小心輸入錯誤,而是系統(tǒng)終止運(yùn)行,系統(tǒng)就會出錯。用這個函數(shù)檢查用戶的輸入是否正確,提高程序的可行性。voidSaveToFile(fstream&file,staff*s);用于保存信息到指定文件。此函數(shù)執(zhí)行對職工數(shù)據(jù)的保存。voidReadFromFile(fstream&file,staff**s);用于從文件讀取信息。主函數(shù)模塊(作為最終的主程序)創(chuàng)建主菜單界面,以供用戶選擇。用SWITCH語句和鏈表實(shí)現(xiàn)相關(guān)操作。職工信息文件模塊:case'1':(新建)case'2':(打開)case'3':(保存)case'4':(另存為)職工信息輸入模塊:case'5':(輸入信息)職工信息插入模塊:case'6':(插入信息)職工信息顯示模塊:case'7':(顯示信息)職工信息查詢模塊:case'8':(查詢信息)職工信息統(tǒng)計關(guān)鍵字模塊:case'9':(統(tǒng)計關(guān)鍵字(工資總額,平均值))職工信息刪除模塊:case'a':(刪除信息)職工信息恢復(fù)模塊:case'b':(恢復(fù)信息)退出系統(tǒng)模塊:case'q':(退出程序)類模塊(每個類作為一個頭文件,類的函數(shù)作為cpp文件)staff基本職工類:classstaff{}定義了職工的基本信息,數(shù)據(jù)包括編號,姓名,年齡等。設(shè)置輸入輸出重載友元函數(shù),計算工資的虛函數(shù)。formal正式職工類:classformal:publicclassstaff{}增加正式職工的其他數(shù)據(jù),比如保險之類的。明確定義計算工資函數(shù)casual臨時工類:classcasual:publicclassstaff(}增加臨時工的附加信息。明確定義計算工資函數(shù)。相關(guān)模塊源程序a.函數(shù)模塊InputNormalInfo函數(shù)cpp文件源程序#include"staff.h"#include"formal.h"#include"casual.h"stringInputNormalInfo(istream&input,stringtip,chartype)//用于直到輸入正確類型的數(shù)據(jù)才返回(stringstr;//臨時變量while(1)(boolwrong=false;//記錄是否輸入錯誤cout<<tip;if(INT==type)cout<<"(請輸入整數(shù))";elseif(DECIMAL==type)cout<<"(請輸入小數(shù)或整數(shù))〃;cout.put(':');getline(input,str);if(INT==type)//整數(shù)(for(autoiter=str.cbegin();iter!=str.cend();iter++)//使用迭代器檢查是否輸入的都是整數(shù)(if(!isdigit(*iter))//不是數(shù)字(wrong=true;break;}}elseif(DECIMAL==type)〃小數(shù)(boolpoint=false;//記錄是否已經(jīng)讀取到小數(shù)點(diǎn)for(autoiter=str.cbegin();iter!=str.cend();iter++)//使用迭代器檢查是否輸入的是小數(shù)(if(!isdigit(*iter))//不是數(shù)字(if('.'==*iter&&!point)//第一次讀取到小數(shù)點(diǎn)(point=true;//已經(jīng)讀取小數(shù)點(diǎn)continue;}//否則輸入錯誤wrong=true;break;}}}//判斷輸入是否錯誤if(!wrong)returnstr;}}SaveToFile函數(shù)cpp文件源程序#include"staff.h"#include"formal.h"#include"casual.h"voidSaveToFile(fstream&file,staff*s)//用于保存信息到指定文件(if(&file==&cout)(staff*p=s;while(p)(cout<<*p<<'\n';p=p->next;}}else(fstreamtemp;temp.open(path,ios::out);staff*p=s;while(p)(temp<<*p<<'\n';p=p->next;}temp.close();}}ReadFromFile函數(shù)cpp文件源程序#include"staff.h"#include"formal.h"#includecasual.hvoidReadFromFile(fstream&file,staff**s)//用于從文件讀取信息(file.seekg(0,ios::beg);if(*s)//如果已有信息(delete*s;*s=NULL;}stringinput;//記錄讀取到的一彳亍staff*p=NULL;staff*tail=NULL;//記錄鏈表尾部do〃讀取標(biāo)題(getline(file,input);if(〃-正式工-"==input)p=newformal;elseif(〃-臨時工-〃==input)p=newcasual;elsecontinue;file>>*p;//清除多余的信息if(!*s)//第一次讀入tail=*s=p;elsetail=tail->next=p;}while(file.good());file.clear();b.主函數(shù)模塊cpp文件源程序//職工工資信息系統(tǒng).cpp:定義控制臺應(yīng)用程序的入口點(diǎn)。#include"stdafx.h”#include<string>#include<fstream>#include<cctype>#include"formal.h"#include"staff.h"#include"casual.h"fstreamfile;〃文件流stringpath;〃路徑,記錄打開的文件路徑stringinput;//記錄輸入staff*head=NULL;//頭指針staff*recover=NULL;〃記錄可恢復(fù)信息intmain(intargc,char*argv[],char*envp[])(system("color1A");while(1)(system("cls");if(file.is_open())//已打開文件(cout<<〃當(dāng)前打開文件:〃<<path<<endl;}cout<<”1->新建\n”"2->打開\n〃"3->保存\n〃"4->另存為\n""5->輸入信息\n""6->插入信息\n""7->顯示信息\n〃"8->查詢信息\n""9->統(tǒng)計關(guān)鍵字(工資總額,平均值)\n〃"a->刪除信息\n〃〃b->恢復(fù)信息\n〃〃q->退出\n〃;getline(cin,input);system(〃cls〃);switch(input[0])(case'1'://新建(//詢問是否保存已打開的文件if(file.is_open())(cout<<path<<endl;cout<<〃是否保存當(dāng)前已打開的文件?(Y/N):〃;getline(cin,input);if('Y'==input[0]||'y'==input[0])(SaveToFile(file,head);cout<<〃保存成功〃<<endl;}elsecout<<〃保存失敗〃<<endl;file.close();}cout<<"請輸入新文件路經(jīng):〃;getline(cin,input);〃打開文件file.open(input,ios::in);if(file)〃文件已存在(file.close();〃先關(guān)閉文件cout<<〃文件已存在,是否替換?(Y/N):";stringtemp=input;//臨時保存文件路徑getline(cin,input);if(!('Y'==input[0]||'y'==input[0]))//取消新建(cout<<"新建失敗"<<endl;break;}elsecout<<〃已替換"<<endl;input=temp;}if(head)〃釋放內(nèi)存(deletehead;head=NULL;}path=input;file.open(path,ios::in|ios::out|ios::trunc);break;}case'2'://打開(cout<<〃請輸入要打開的文件路徑:〃;getline(cin,input);if(input==path)//已打開(cout<<〃已打開該文件!"<<endl;break;}//是否存在文件fstreamtemp;temp.open(input,ios::in);if(!temp)(cout<<"文件不存在,打開失?。?<<endl;break;}temp.close();//詢問是否保存if(file.is_open())(cout<<"是否保存文件:〃<<path<<'\n';path=input;cout<<"(Y/N):〃;getline(cin,input);if('y'==input[0]||'Y'==input[0])(SaveToFile(file,head);cout<<"保存成功"<<endl;}elsecout<<"未保存"<<endl;file.close();}elsepath=input;file.open(path,ios::in|ios::out|ios::app);ReadFromFile(file,&head);cout<<〃已讀入信息:\n";SaveToFile((fstream&)cout,head);break;}case'3'://保存(if(!file.is_open())//未打開文件(cout<<"當(dāng)前未打開文件!"<<endl;}else(SaveToFile(file,head);cout<<〃已保存到:〃<<path<<endl;}break;}case'4'://另存為(cout<<〃請輸入另存為的文件路徑:〃;getline(cin,input);fstreamtemp;string_path=input;〃臨時路徑temp.open(_path,ios::in);if(temp)〃文件已存在(cout<<〃文件已存在,是否替換?(Y/N):";getline(cin,input);if(!('Y'==input[0]||'y'==input[0]))//輸入的不是Y/y則取消另存為(cout<<〃取消另存"<<endl;break;}}//另存到_pathstringstr=path;//保存pathpath=_path;SaveToFile(temp,head);cout<<〃文件已另存到〃<<_path<<endl;path=str;break;}case'5'://輸入信息(staff*s=head;if(s)//取得鏈表尾部while(s->next)s=s->next;while(1)(staff*p;〃臨時變量cout<<"f(正式工)/c(臨時工)/q(退出八n";getline(cin,input);if('f'==input[0]||'F'==input[0])p=newformal;elseif('c'==input[0]||'C'==input[0])p=newcasual;elseif('q'==input[0]||'Q'==input[0])break;elsecontinue;cin>>*p;if(!head)s=head=p;elses=s->next=p;}break;}case'6'://插入信息(if(!head)cout<<"當(dāng)前無信息,無法插入!"<<endl;elseSaveToFile((fstream&)cout,head);cout<<〃插入到多少編號的后面:〃;getline(cin,input);stringno=input;staff*s=head;//定位編號位置boolflag=false;//編號輸入是否錯誤while(s->GetNO()!=no)(if(!s->next)//不存在指定編號(cout<<"編號輸入錯誤!"<<endl;flag=true;break;}s=s->next;}if(flag)break;//編號輸入錯誤則退出while(1)(staff*p;//臨時變量cout<<"f(正式工)/c(臨時工)/q(退出八n";getline(cin,input);if('f'==input[0]||'F'==input[0])p=newformal;elseif('c'==input[0]||'C'==input[0])p=newcasual;elseif('q'==input[0]||'Q'==input[0])break;elsecontinue;cin>>*p;p->next=s->next;s->next=p;s=p;}}break;}case'7'://顯示信息(if(head)SaveToFile((fstream&)cout,head);elsecout<<"當(dāng)前未打開文件!"<<endl;break;}case'8'://查詢信息(if(!head)cout<<〃當(dāng)前無信息,終止查詢!"<<endl;else(SaveToFile((fstream&)cout,head);cout<<"請輸入要查詢的內(nèi)容:〃;getline(cin,input);staff*s=head;cout<<"\n查詢結(jié)果:\n”;cout<<\n";while(1)(if(*s==input)(staff*p=s->next;//臨時保存s->next=NULL;SaveToFile((fstream&)cout,s);s->next=p;//還原}if(!s->next)break;elses=s->next;}}break;}case'9':〃統(tǒng)計關(guān)鍵字(工資總額,平均值)(if(!head)//無信息可統(tǒng)計(cout<<"當(dāng)前未輸入信息!"<<endl;break;}staff*s=head;//定位指針unsignedpopulation=0;//記錄人數(shù)doublemoney=0;//記錄總額do(population++;money+=s->GetMoney();s=s->next;}while(s);cout<<〃工資總額:〃<<money<<endl;cout<<"平均值:"<<money/population<<endl;break;}case'a'://刪除信息(if(!head)//無信息可刪除(cout<<"當(dāng)前未輸入信息!"<<endl;break;}charchoice='\0';//記錄選擇cout<<"A(邏輯刪除,可恢復(fù))/B(物理刪除,不可恢復(fù)):〃;getline(cin,input);if('A'==input[0]||'a'==input[0])choice='A';elseif('B'==input[0]||'b'==input[0])choice='B';else(cout<<"輸入錯誤!"<<endl;break;}while(1)(system("cls");if('A'==choice)cout<<〃以下刪除可恢復(fù):〃;elseif('B'==choice)cout<<"以下刪除不可恢復(fù):〃;system(〃pause〃);〃顯示信息SaveToFile((fstream&)cout,head);cout<<〃請輸入要刪除的編號(輸入0退出):〃;getline(cin,input);if("0"==input)break;〃退出stringno=input;//記錄編號staff*p=recover;〃臨時指針,記錄recover鏈表尾部if(head->GetNO()==no)〃第一條信息符合(if('A'==choice)〃邏輯刪除,先保存(if(p)p->next=head;elserecover=head;}head=head->next;if('A'==choice)(if(p)p->next->next=NULL;elserecover->next=NULL;}}else〃符合的信息不是第一條(staff*s=head;〃定位要刪除的信息之前的一條while(s->next&&s->next->GetNO()!=no)s=s->next;if(!s->next)//未找到匹配編號(cout<<"未找到匹配編號!\n”;system(〃pause〃);}else(if('A'==choice)//邏輯刪除,先保存(if(p)p->next=s->next;elserecover=s->next;}s->next=s->next->next;if('A'==choice)(if(p)p->next->next=NULL;elserecover->next=NULL;}}}}break;}case'b'://恢復(fù)信息(if(!recover)(cout<<〃無可恢復(fù)信息!〃<<endl;break;}SaveToFile((fstream&)cout,recover);cout<<〃\n是否恢復(fù)以上信息?(Y/N):〃;getline(cin,input);if('Y'==input[0]||'y'==input[0])(〃如果head指針為空則直接拷貝if(!head)(head=recover;recover=NULL;}〃取得head鏈表尾部staff*s=head;while(s->next)s=s->next;s->next=recover;recover=NULL;cout<<〃已恢復(fù)!"<<endl;}elsecout<<"未恢復(fù)!"<<endl;break;}caseq:(if(head||recover)(cout<<"還有殘留信息,確認(rèn)退出?(Y/N):";getline(cin,input);if('Y'==input[0]||'y'==input[0])return0;elsecontinue;}else(return0;}}default:continue;}system("pause");

c.類模塊(每個類的信息作為一個文件)基類staff的.h文件和cpp文件#include#include#include#includetypedef"stdafx.h<string><fstream><cctype>#include#include#include#includetypedef〃基本職工類//正式工〃臨時工〃基本職工類//正式工〃臨時工〃整數(shù)〃小數(shù)256#defineFORMAL1#defineCASUAL2#defineINT3#defineDECIMAL4#defineMAXIGNOREclassstaff//基本職工類(基類)(protected:stringno;//編號stringname;//姓名stringsex;〃性別unsignedage;〃年齡stringaddress;〃家庭住址doublebase_wage;//基本職務(wù)工資public:TYPEtype;//職工類型(子類類別)staff*next;//鏈表指針protected:voidInputBasicInfo(istream&input);//用于輸入基類的基本信息voidOutputBasicInfo(ostream&output);//用于輸出基類的基本信息virtualvoidCalcMoney()=0;//計算實(shí)發(fā)工資,并返回public:staff():type(STAFF),next(NULL){}//初始化~staff()(if(next)deletenext;}//刪除鏈表friendistream&operator>>(istream&input,staff&s);//用于輸入基類的基本信息并且調(diào)用子類的輸入函數(shù)friendostream&operator<<(ostream&output,staff&s);//用于輸出基類的基本信息并且調(diào)用子類的輸出函數(shù)friendvoidReadFromFile(fstream&file,staff**s);//用于從文件讀取信息stringGetNO()(returnno;}〃獲取編號virtualdoubleGetMoney()=0;〃獲取工資booloperator==(stringstr);〃查詢信息時用}#include"staff.h"#include"formal.h"#include"casual.h"boolstaff::operator==(stringstr)〃查詢信息時用(doubledata=atof(str.c_str());if(str==no)returntrue;//編號if(str==name)returntrue;//姓名if(str==sex)returntrue;〃性別if(data==age)returntrue;〃年齡if(str==address)returntrue;//家庭住址if(data==base_wage)returntrue;//基本職務(wù)工資if(FORMAL==type)〃正式工return*(formal*)this==str;

elseif(CASUAL==type)//臨時工return*(casual*)this==str;returnfalse;voidstaff::InputBasicInfo(istream&input)//用于輸入基類的基本信if(&input==if(&input==&cin)〃從鍵盤輸入<<"編號:";getline(input,no);<<"姓名:";getline(input,name)<<"性別:";getline(input,sex);coutcoutcout.cage=atoi(InputNormalInfo(input,"年齡”,INT).c_str());cout<<"家庭住址:";getline(input,address);工資",base_wage=atof(InputNormalInfo(input,"基本職務(wù)DECIMAL).c_str());else//從文件讀入input.ignore(MAX_IGNORE,':');getline(input,no);input.ignore(MAX_IGNORE,':');getline(input,name);input.ignore(MAX_IGNORE,':');getline(input,sex);input.ignore(MAX_IGNORE,.c工資",else//從文件讀入input.ignore(MAX_IGNORE,':');getline(input,no);input.ignore(MAX_IGNORE,':');getline(input,name);input.ignore(MAX_IGNORE,':');getline(input,sex);input.ignore(MAX_IGNORE,':')>>age;input.ignore(MAX_IGNORE,':');getline(input,address);base_wage;input.ignore(MAX_IGNORE,':')>>voidstaff::OutputBasicInfo(ostream&output)//用于輸出基類的基本信息(base_wage;voidoutput<<"編號:〃<<no<<'\n';output<<〃姓名:〃<<name<<'\n';output<<"性別:〃<<sex<<'\n';output<<〃年齡:〃<<age<<'\n';output<<"家庭住址:〃<<address<<'\n';output<<〃基本職務(wù)工資:〃<<base_wage<<'\n';}istream&operator>>(istream&input,staff&s)//用于輸入基類的基本信息并且調(diào)用子類的輸入函數(shù)(s.InputBasicInfo(input);if(FORMAL==s.type)//正式工input>>*(formal*)&s;elseif(CASUAL==s.type)//臨時工input>>*(casual*)&s;s.CalcMoney();returninput;}ostream&operator<<(ostream&output,staff&s)//用于輸出基類的基本信息并且調(diào)用子類的輸出函數(shù)(switch(s.type)〃輸出類型(caseFORMAL:output<<〃-正式工-\n”;break;caseCASUAL:output<<"-臨時工-\n”;break;}s.OutputBasicInfo(output);if(FORMAL==s.type)//正式工output<<*(formal*)&s;elseif(CASUAL==s.type)//臨時工output<<*(casual*)&s;returnoutput;}派生類formal的.h文件和.cpp文件#include"staff.h”classformal:publicstaff(private:doublesalary;〃崗位津貼doublepension;〃養(yǎng)老金doublehousing_fund;〃住房公積金doubleincome_tax;//所得稅doubleinsurance;〃醫(yī)療保險doublemoney;〃實(shí)發(fā)工資private:voidCalcMoney()(money=base_wage+salary-pension-housing_fund-income_tax-insurance;}//計算實(shí)發(fā)工資public:formal()(type=FORMAL;}//設(shè)置子類friendistream&operator>>(istream&input,formal&f);//用于輸入正式工的附加信息friendostream&operator<<(ostream&output,formal&f);//用于輸出正式工的附加信息booloperator==(stringstr);〃查詢信息時用doubleGetMoney()(returnmoney;}〃獲取工資};#include"formal.h"boolformal::operator==(stringstr)〃查詢信息時用(doubledata=atof(str.c_str());if(data==salary)returntrue;//崗位津貝占if(data==pension)returntrue;//養(yǎng)老金if(data==housing_fund)returntrue;//住房公積金if(data==income_tax)returntrue;//所得稅if(data==insurance)returntrue;//醫(yī)療保險if(data==money)returntrue;//實(shí)發(fā)工資returnfalse;}istream&operator>>(istream&input,formal&f)//用于輸入正式工的附加信息(if(&input==&cin)//從鍵盤輸入(f.salary=atof(InputNormalInfo(input,"崗位津貝占",DECIMAL).c_str());f.pension=atof(InputNormalInfo(input,"養(yǎng)老金",DECIMAL).c_str());f.housing_fund=atof(InputNormalInfo(input,"住房公積金",DECIMAL).c_str());f.income_tax=atof(InputNormalInfo(input,"所得稅",DECIMAL).c_str());f.insurance=atof(InputNormalInfo(input,"醫(yī)療保險",DECIMAL).c_str());}else//從文件讀入(input.ignore(MAX_IGNORE,':')>>f.salary;input.ignore(MAX_IGNORE,':')>>f.pension;input.ignore(MAX_IGNORE,':')>>f.housing_fund;input.ignore(MAX_IGNORE,':')>>f.income_tax;input.ignore(MAX_IGNORE,':')>>f.insurance;input.ignore(MAX_IGNORE,':')>>f.money;}returninput;}ostream&operator<<(ostream&output,formal&f)〃用于輸出正式工的附加信息(output<<"崗位津貼:"<<f.salary<<'\n';output<<"養(yǎng)老金:"<<f.pension<<'\n';output<<"住房公積金:"<<f.housing_fund<<'\n';output<<"所得稅:"<<f.income_tax<<'\n';output<<"醫(yī)療保險:"<<f.insurance<<'\n';output<<"實(shí)發(fā)工資:"<<f.money<<'\n';returnoutput;}派生類casual的.h文件和.cpp文件#include"staff.h"

doubleaward;〃獎金doubleincome_tax;//所得稅doublemoney;〃實(shí)發(fā)工資classcasual:publicstaffprivate:doubleaward;〃獎金doubleincome_tax;//所得稅doublemoney;〃實(shí)發(fā)工資(stringboolcasual::operator==(stringstr)(stringboolcasual::operator==(stringstr)//查詢信息時用voidCalcMoney()(money=base_wage+award-income_tax;}//計算實(shí)發(fā)工資public:casual()(type=CASUAL;}//設(shè)置子類friendistream&operator>>(istream&input,casual&c);//用于輸入臨時工的附加信息friendostream&operator<<(ostream&output,casual&c);//用于輸出臨時工的附加信息booloperator==(stringstr);〃查詢信息時用doubleGetMoney()(returnmoney;}〃獲取工資};#includecasual.hif(data==award)returntrue;//獎金if(dataif(data==award)returntrue;//獎金if(data==income_tax)returntrue;//所得稅if(data==money)returntrue;//實(shí)發(fā)工資//實(shí)發(fā)工資doubledata=atof(str.c_str());////用于輸入臨時工returnfalse;istream&operator>>(istream&input,casual&c)的附加信息

if(&input==&cin)//從鍵盤輸入(c.award=atof(InputNormalInfo(input,〃獎金〃,DECIMAL).c_str());c.income_tax=atof(InputNormalInfo(input,"所得稅“,DECIMAL).c_str());}else//從文件讀入(input.ignore(MAX_IGNORE,':')>>c.award;input.ignore(MAX_IGNORE,':')>>c.income_tax;input.ignore(MAX_IGNORE,':')>>c.money;}returninput;}ostream&operator<<(ostream&output,casual&c)//用于輸出臨時工的附加信息(output<<〃獎金:〃<<c.award<<'\n';output<<"所得稅:"<<c.income_tax<<'\n';output<<〃實(shí)發(fā)工資:"<<c.money<<'\n';returnoutput;}操作方法Switch(input[0]選擇輸入1,2,3,4,5,6,7,8,9,a,b

試驗(yàn)結(jié)果(包括輸入數(shù)據(jù)和輸出結(jié)果)開始運(yùn)行程序,進(jìn)入系統(tǒng)頁面,按照使用說明進(jìn)行操作C:\Windows\system32\cmd.exeSwitch(input[0]平均值〉資工自.3.息.息息.息息為.115..;jlg..;jlB..;j^--Hi±:一一-s-'s.-開存岸復(fù)出一^保顯查統(tǒng)圖1-1系統(tǒng)操作的界面圖1-2建立文件界面寓小或撇i成zqC:\Windows\system32\cmd.exe馨g<??*入升譬輸醬用ZC1---爵躍請譬敏D:0鹽斗住職津金公^號帆蹩老老葺療正茗網(wǎng)霍所醫(yī)f<1-3另.00200金9址志:70積2險資:1住職津金公■工T寓公生學(xué)0001051-M-■■■■02碧9也務(wù)施:2資

:0言:1住職:3稅工00zz--FT7.-圖1-4顯示信息界面圖1-5統(tǒng)計關(guān)鍵字界面C:\Windows\system32\cmd.exe00工00I:2資職:31稅工請輸入要查詢的內(nèi)容:001詢結(jié)臬號30七1-??0西資00:5胡工:2麗金00J--019址備:?積:4險資

J:0.;:1住職津金公■工

醫(yī)實(shí)圖1-6查詢信息界面,可按定義所以數(shù)據(jù)之一查詢,這里給出按編號查詢C:\Windows\system32\cmd.exe0

005:40陣資叫碧9也務(wù)施:20洗00

005:40陣資叫碧9也務(wù)施:20洗0耳—Ti、任職3稅T-制發(fā)5珂二二二llLz?m.」匚':---,L*T「r圖1-7刪除界面,有邏輯刪除和物理刪除C:\Windows\system32\cmd.exe-1一_0n0-_-■?.15闕-一二±一號30七1-0西資00:5胡工:2麗金00址京:7積:4險資「住職津金公置工至網(wǎng)Od所醫(yī)實(shí)是否恢復(fù)以上信息圖1-8邏輯刪除的恢復(fù)界面C:\Windows\system32\cmd.exe00金00:7積:4險資_公鬣工—.£斤一&一匚、笙髯集莆成膈〉圖1-9信息的插入與添加設(shè)計體會在學(xué)習(xí)C++以前,我認(rèn)為C++只是在C語言的基礎(chǔ)上的一種延伸,認(rèn)為只要學(xué)過C語言,就可以用C語言的那種設(shè)計思想來學(xué)習(xí)C++、設(shè)計C++程序。正是由于抱了這種錯誤的思想,使我在一開始學(xué)習(xí)C++的時候遇到了很大的困難,我沒有辦

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論