《C++程序設計》教學實習報告-08信息.doc_第1頁
《C++程序設計》教學實習報告-08信息.doc_第2頁
《C++程序設計》教學實習報告-08信息.doc_第3頁
《C++程序設計》教學實習報告-08信息.doc_第4頁
《C++程序設計》教學實習報告-08信息.doc_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

天津農(nóng)學院計算機科學與信息工程系C+程序設計教學實習報告實習名稱: C+程序設計 專 業(yè): 信息管理與信息系統(tǒng) 班 級: 2008級 2 班 學 號: 0808044227 姓 名: 李立 指導教師: 趙光煜 成 績: 二00九年 七 月 十 日15 目 錄 1 教學實習的內容12 教學實習的目的13 教學實習設計介紹14 總結與體會141 教學實習的內容通過使用所學的C+語言的基本詞法和語法規(guī)則(字符集、詞法規(guī)則、程序結構、運算符和表達式、各類語句、函數(shù)格式和調用方式、作用域及存儲類)以及一些面向對象的程序設計方法(類和對象的概念及定義格式、對象的賦值和運算、繼承性和派生類、多態(tài)性和虛函數(shù))等知識,熟練掌握其內涵并且達到自己編譯程序的目的。使用C+開發(fā)環(huán)境進行C+程序的設計、編輯、編譯、調試、運行、測試,完成實習報告。2 教學實習的目的完成C+程序設計課程學習后,通過本次教學實習,對所學的C+專業(yè)知識進一步消化、理解并且掌握程序設計方法,把所學的C+專業(yè)知識靈活運用到現(xiàn)實問題中,鍛煉和提高綜合運用所學面向對象的程序設計方法和其他的一些知識結合起來解決實際問題的能力。而且,通過學習C+知識讓我利用另外一種方式去發(fā)現(xiàn)問題、分析問題和解決問題的重要性3 教學實習設計介紹 對整個系統(tǒng)的設計思路是這樣的,首先由員工輸入用戶信息,包括編號、姓名和職務;然后,在計算某為職工的當月工資時,系統(tǒng)先從一輸入的職工信息文件中獲取職工的工作類型,接著調用不同的處理程序進行計算;最后將結果存檔。從用戶的需求中,可以發(fā)現(xiàn)5種類型的職員都可以分別設計為一個類。首先,他們都屬于雇員,因此可以設計一個基類employee(雇員),然后從中派生出technician(技術人員)類、salesman(銷售人員)類、secretary(文秘)類。對于技術經(jīng)理和銷售經(jīng)理來說,他們都屬于經(jīng)理,所以設計時可以從employee類中派生出一個manager(經(jīng)理)類作為techmanager(技術人員)類、salesman(銷售人員)類、secretary(文秘)類的父類。而經(jīng)理類本身并不對應實際的工作類型,由于技術經(jīng)理有技術人員和經(jīng)理的雙重特點,因此techmanager類同時繼承technician類和manager類;銷售經(jīng)理有銷售人員和經(jīng)理的雙重特點,因此salesmanager類同時繼承salesman類和manager類。根據(jù)用戶需求,employee類應該擁有的屬性有:編號、姓名、職務、月份和工資。Employee類的服務可以包括info()、search()、countsalary()、recordinfo()和recordsalary()。其中info()函數(shù)用于接收用戶輸入的職工信息;search()函數(shù)用來根據(jù)職工名查找職工信息;countsalary()函數(shù)為工資計算函數(shù),但在基類中為空,原因是各類人員的工資計算方法不同,無法在基類中統(tǒng)一定義,必須在派生類中分別定義。Recordinfo()函數(shù)和recordsalary()函數(shù)分別是職工信息和職工工資的記錄函數(shù),分別將信息存入文件info.txt和salary.txt。該系統(tǒng)的源程序如下,salary.h為頭文件,定義了所有的類,salary.cpp實現(xiàn)了所有的類,manager.cpp為主程序,實現(xiàn)了整個管理流程。/*/ */ salary.h */ 定義對所有的類 */ */*class employeepublic:int number; /編號char *name; /姓名int status; /職務代碼,1:技術經(jīng)理;2:銷售經(jīng)理;3:技術人員;4:銷售人員5:文秘int month; / 所計算工資的月份float salary; / 工資額public:void info(); /接受用戶輸入的職工信息bool search(); /根據(jù)姓名查找職工信息virtual void countSalary()=0; /計算工資函數(shù),純虛函數(shù)用于被重載int recordInfo(); /記錄職工信息int recordSalary(); /記錄職工工資信息;class technician: virtual public employeeprotected:int workHour; /本月工作小時數(shù)float hourlySalary; /時薪public:technician(float x=35); /構造函數(shù)void countSalary(); /技術人員工資計算函數(shù);/銷售人員類class salesman: virtual public employeeprotected:float saleSum; / 本月銷售額double getRate; /提成比率public:salesman(float x=0.05); /構造函數(shù)void countSalay(); /銷售人員工資計算函數(shù);/經(jīng)理類,不對應實際職務class manager:virtual public employeeprotected:float fixedSalary; /經(jīng)理的固定工資public:manager(float x=6000); /構造函數(shù)void countSalary();/經(jīng)歷的工資計算函數(shù),為空;/文秘類class secretary: public employeefloat fixedSalary; /文秘的固定工資float bonus; /文秘的獎金public:secretary(float x=4000); /構造函數(shù)void countSalary(); /文秘的工資計算函數(shù);/技術經(jīng)理類class techmanager: public technician, public managerfloat gradeBonus; /技術經(jīng)理的業(yè)績等級獎(每級)int grade; /技術經(jīng)理的業(yè)績等級public:techmanager(float x=1000);/構造函數(shù)void countSalary();/技術經(jīng)歷的工資計算函數(shù);/銷售經(jīng)理類class salesmanager: public salesman, public managerpublic:salesmanager(float x=0.02);/構造函數(shù)void countSalary();/銷售經(jīng)歷的工資計算函數(shù);/*/ */ salary.cpp */ 實現(xiàn)所有的類 */ */*#include #include#includesalary.husing namespace std;struct infoRecorderint number;char name30;int status; irl; /職工信息結構,用于將職工信息寫入文件struct salaryRecorderchar name30;int month;float salary; srl; /職工工資信息結構,用于將職工信息寫入文件void employee:info()char namestr30; /用于臨時存放職工姓名coutendlnamestr;name=new charstrlen(namestr)+1; /動態(tài)申請內存空間strcpy(name,namestr); /拷貝職工姓名到namecoutnumber;while(number9999) /檢查員工編號coutnumber;countstatus;while (status5) /檢查員工職務代碼coutstatus;bool employee:search()int i:ifstream ifile(info.txt,ios:in|ios:binary); /打開員工信息文件info.txtif(! ifile)cerrend員工信息文件讀取錯誤!endl;return false;while (! ifile.eof() / 根據(jù)職工名查找職工信息ifile.read( (char *)&irl, sizeof(irl) ); /讀取一條記錄i=strcmp(,name);/比較職工名是否匹配if(i=0) 如果匹配就讀取職工信息number=irl.number;status=irl.status;ifile.close();return true; /查找到職工信息ifile.close();return false; /未查找到職工信息int employee:recordIfo()strcpy(,name);/先將職工信息存入結構inforecorder中irl.status=status;ofstream ofile(info.txt, ios:app|ios:binary);/使用追加方式打開員工信息文件info.txtif(! ofile)cerrendl員工信息文件打開錯誤!endl;return 0;ofile.write( (char *)&irl, sizeof(irl) );/寫入一個記錄ofile.close();return 1;int employee:recordSalary()char ch1;coutendlch1;/獲取用戶輸入while (ch1 =Y&ch1! =y&ch1! =N&ch1! =n)cinch1;if( ch1=N|ch1n) return 0;/不存檔else /存檔strcpy(,name);/將職工工資信息先存入結構salaryrecorder中coutendlsrl.month; while(sr1.month12)/檢查輸入月份 Coutendlsr1.month; srl.salary=salary; ofstream ofile(salary.txt,ios:app|ios:binary);/打開文件salary.txt if(! ofile) cerrendl員工工資文件打開錯誤!endl; return 0; ofile.write( (char *)&srl,sizeof(srl) );/寫入一條記錄ofile.close();return 1;technician:technician(float x)hourlySalary=x;/技術人員時薪默認為35元void technician:countSalary()cout請輸入技術員nameworkHour;/輸入工作時數(shù)salary=workHour*hourlySalary;/工資=工作時數(shù)*cout技術員salaryendl;/class salesman/salesman:salesman(float x)getRate=x; / 銷售員提成比率為5%void salesman:countSalary()cout請輸入銷售員namesaleSum; /輸入銷售額salary=saleSum*getRate; /工資=銷售額*提成比率cout銷售員name編號number本月工資為:salaryendl;/class manager/manager:manager(float x)fixedSalary=x; / 經(jīng)理的固定工資為6000元void manager:countSalary()/class secretary/secretary:secretary(float x)fixedSalary=4000; /文秘的固定工資為4000元void secretary:countSalary()cout請輸入文秘namebonus; /輸入文秘當月獎金salary=fixedSalary+bonus; /工資=固定工資+獎金coutendl文秘name編號number本月工資為:salaryendl;/class techmanager/techmanager:teachmanager(float x)gradeBonus=x; /技術經(jīng)理工作業(yè)績每等級的獎金void techmanager:countSalary()cout請輸入技術經(jīng)理namegrade; / 輸入工作業(yè)績等級while( grade3) /檢查輸入工作業(yè)績等級coutendl工作業(yè)績等級錯誤,工作業(yè)績等級必須為1、2、3,請重新輸入:;salary=fixedSalary+grade*gradeBonus; /工資=固定工資+業(yè)績等級*每級獎金coutendl技術經(jīng)理name編號number本月工資為:salaryendl;/class salesmanafer/salesmanager:salesmanager(float x)getRate=x;/銷售經(jīng)理的銷售總額提成比率void salesmanager:countSalary()cout請輸入銷售經(jīng)理namesaleSum;/當月銷售總額salary=fixedSalary+saleSum*getRate;/工資=固定工資+當月銷售額*提成比率coutendl銷售經(jīng)理name編號number本月工資為:salaryendl;/*/ */ manager.cpp */ 主程序 * / * /*#include#include#includesalary.husing namespace std;void main()char ch1; /用于臨時存放姓名char namestr30; /分別定義各個類的實例technician em, te;salesman sa;secretary se;manager ma;techmanager tm;salesmanager sm; /定義一個基類指針數(shù)組分別指向各個派生類的對象employee *pem6=&ma,&tm,&sm,&te,&sa,&se;int i;coutendl=; coutendl=職工工資管理系統(tǒng)=; coutendl=;while(true) /設定循環(huán)操作coutendlch1;while( ch1 =1 & ch1!=2 & ch1!=3 )/檢查用戶輸入cinch1;if( ch1=1 ) /輸入員工信息(); /接受用戶輸入員工信息em.recordInfo(); / 記錄員工信息else if( ch1=2 ) /計算員工工資coutendlnamestr;=new charstrlen(namestr)+1; / 申請內存空間存放姓名strcpy(,namestr); / 復制姓名while( ! em.search() ) /根據(jù)姓名查找員工信息coutendlnamestr; /如輸入員工姓名錯誤,則重復上述步驟=new charstrlen(namestr)+1;strcpy(,namestr);i=em.status; /獲得該名職工的職務代碼pemi-name=; /將獲得的職工信息輸入到對應的派生類對象pemi-number=em.number;pemi-status=em.status;pemi-countSalary(); / 根據(jù)職務代碼調用不同派生類的函數(shù)pemi-recordSalary(); /刪除動態(tài)申請的空間else break; /如果用戶選擇3,則退出程序運行結果如下:= 職工工資管理系統(tǒng)=請選擇操作:1.輸入員工信息;2。計算員工工資;3.退出。請輸入員工姓名:Tom請輸入員工編號:1001請輸入員工職務代

溫馨提示

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

評論

0/150

提交評論