




已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
“信息與計算科學”專業(yè)C+語言程序設計課程設計 班級 計算科學 姓名 學號 指導教師 設計日期 2016春19周20周 (一)、設計菜單選擇程序。菜單是應用程序的界面,通過控制語句改變程序執(zhí)行的順序,設計菜單是程序設計的基礎。本設計分兩步:第一步:設計一個菜單程序。1 菜單內(nèi)容:程序運行后,給出3個菜單項的內(nèi)容和輸入提示,如下:1) 利用克萊姆法則求解線性方程組2) 統(tǒng)計一篇英文文章的單詞數(shù)3) 退出程序第二步:為上述菜單項配上相應的功能。 開始 選擇運算 求 解 線 性 方 程 組 求 解 單 詞 的 個 數(shù) 退 出 結(jié)束1.流程圖:2.程序優(yōu)缺點:優(yōu)點: 采用了 動態(tài)開辟二維數(shù)組,傳遞不知道大小的二維數(shù)組,程序規(guī)范,可讀性強。缺點:采用遞歸算法,增加了程序的時間復雜度。3.代碼段:#include#include#include #includeusing namespace std;double *open_up(int row,int line);double Price(int row,int line,double *a); void Head();void Cramer();void Statis_Words();int main()char ch; / 選擇變量 while(1) Head();couttt選擇要進行的程序:endl; ch = cin.get(); coutendl; switch(ch) case 1:system(cls);Cramer();break; case 2:system(cls);Statis_Words();break; case 3:system(cls); cout 退出程序 endl; exit(0);break; default :system(cls);couttt 輸入有誤 endl; cin.get();return 0;void Head()couttt 菜單選擇程序 endl;couttt endl;couttt endl;couttt 1.克萊姆法則解線性方程組 endl;couttt 2.統(tǒng)計英語文章單詞數(shù) endl;couttt 3. 結(jié) 束 endl;couttt endl;couttt endl; void Cramer() int m = 0,n = 0,i = 0,k = 0,j = 0,h = 0;double Quit = 0.0,l = 0.0;double *a = open_up(15,15); /動態(tài)開辟二維數(shù)組double *e = open_up(15,15); /動態(tài)開辟二維數(shù)組double *T = open_up(15,15); /動態(tài)開辟二維數(shù)組double *W = open_up(15,15); /動態(tài)開辟二維數(shù)組double P15 = 0.0,d15 = 0.0; cout tt克萊姆法則計算矩陣的值 endl;cout 輸入所求線性方程組的系數(shù)矩陣;cout 輸入行數(shù)m和列數(shù)n m n;cout輸入矩陣endl;for(i = 0;i m;i+) for(j = 0;j aij; coutendl;Quit = Price(n,n,(double *)a);cout 系數(shù)矩陣的值為:Quitendl;cout輸入方程組的解矩陣endl;for(i = 0;i di;for(i = 0;i m;i+) for(j = 0;j n;j+) eij = aij; for(j = 0;j n;j+)for(i = 0;i m;i+) aij = di;for(i = 0;i m;i+)Pj = Price(n,n,(double*)a)/Quit; /強制類型轉(zhuǎn)換cout x j = Pj endl;for(h = 0;h m;h+) /重置矩陣 ahj = ehj; void Statis_Words() char ch = 0; int count = 0,word = 0; cout輸入一片英語文章 以零結(jié)尾n = 0 & ch = 91 & ch 122 & ch 127) /判斷是否為 word = 0; else if(0 = word) word = 1; count+; cout文章一共有count個單詞endl;double Price(int row,int line,double *a)/求矩陣行列式的遞歸函數(shù) int i = 0,j = 0,c = 0,p = 0,q = 0; double sum = 0; double *ele = open_up(row,line); /動態(tài)開辟二維數(shù)組 if(row = 1) return *a; for(i = 0;i row;i+) /遞歸法求解行列式的值 for(c = 0;c row;c+) if(c i) p=0; else p=1; for(j = 0;j row - 1;j+) elecj = *( a+row*(c+p) + (j+1) ); if(i % 2 = 0) q = 1; else q = -1; sum += *(a+i*row+0) * q * Price(row-1,row-1,(double *)ele); return sum;double *open_up(int row,int line) / 動態(tài)開辟二維數(shù)組 double *ele = new double *row;for (int i = 0; i row; i+)elei = new doubleline;return ele; 4.程序運行截圖:(二)、有理數(shù)的四則運算。 有理數(shù)就是兩個整數(shù)的比率,通常表示為,分母不能為0。 本設計要求設計一個Rational(有理數(shù))類,實現(xiàn)有理數(shù)的四則運算,該類型的對象使用起來要像使用基本類型的對象一樣自然。具體要求如下:1 抽象Ration類,包含兩個數(shù)據(jù)成員(分子、分母),比如有理數(shù)可以用對象表示為。2 如果分子分母有公約數(shù),應該約分,例如應表示為。根據(jù)需要,有時要將表示為,或者將表示為重載相應的運算符(輸入、輸出、加、減、乘、除)。比如,要計算,希望像普通加法一樣操作,和相加得,算數(shù)表達式為。又如,想使用如下形式直接輸入分子分母 cin r; /輸出則需要重載這兩個流運算符。1.流程圖: 小數(shù)轉(zhuǎn)換轉(zhuǎn)換 結(jié)束執(zhí)行減法執(zhí)行加法執(zhí)行乘法 開始創(chuàng)建分數(shù)對象執(zhí)行除法 開始 開始 開始創(chuàng)建分數(shù)對象創(chuàng)建分數(shù)對象創(chuàng)建分數(shù)對象執(zhí)行除法執(zhí)行除法執(zhí)行除法執(zhí)行乘法執(zhí)行乘法執(zhí)行加法執(zhí)行加法執(zhí)行減法2.程序優(yōu)缺點:優(yōu)點: 采用了友元函數(shù)實現(xiàn)運算符重載,使用windows命名規(guī)則程序規(guī)范,可讀性強,使用外部接口讓程序更安全。缺點: 部分函數(shù)為類的友元函數(shù),破壞了類的完整性。3.代碼段:#include#includeusing namespace std; int gcd(int a, int b) ;class Rationpublic:Ration(int a = 0,int b = 0):numer(a),denom(b) void decide ();void trans (); void input (); friend Ration operator -(Ration c1,Ration c2);friendRation operator +(Ration c1,Ration c2);friend Ration operator *(Ration c1,Ration c2);friend Ration operator /(Ration c1,Ration c2);friend int gcd(int a, int b);friend istream & operator (istream &in,Ration &c );friend ostream & operator (ostream &out,Ration &c );private:int numer;int denom;void Ration : trans () /轉(zhuǎn)變?yōu)樾?shù) decide(); double c = (double)numer/(double)denom; cout 小數(shù)形式為 c endl;void Ration : decide() / 判別是否可以寫成分數(shù) if(0 = denom) cout (istream &in,Ration &c )/c.decide();coutc.numer;cin.get();in c.denom; return in;ostream & operator (ostream &out,Ration &c )/c.decide();if(c.numer != 0) int GCD = gcd(c.numer,c.denom) ; if(GCD = 1) outc.numer/c.denom endl; else outc.numer/GCD/c.denom/GCDendl; else out0n; return out; int gcd(int a, int b) / 求最小公倍數(shù) int n = b; int c = a % b; while(c!=0) a = b; b = c; c = a % b; return b; int main() Ration A; Ration B; Ration c; cout 請輸入分數(shù)A A; cout 請輸入分數(shù)B B; cout B = B; cout A = A; c = B / A; cout c = B / A = cendl; c = B * A; cout c = B * A = cendl; c = B + A; cout c = B + A = cendl; c = B - A; cout c = B - A = cendl; c.trans();return 0;4.程序截圖:(三)、職工信息表設計。 使用繼承的方法,編寫最多能輸入10個職工的信息表,再根據(jù)這個表產(chǎn)生一個職工信息簡表,并利用多態(tài)性實現(xiàn)信息的輸出。設計要求實現(xiàn)如下功能:1 建立職工信息數(shù)據(jù),包括職工編號、姓名,性別和年齡。2 根據(jù)職工信息表,建立只含姓名和年齡的職工信息簡表。3 使用繼承的方法構(gòu)造2個類,使用相應的對象數(shù)組放置10個職工信息。4 編寫同名display( )成員函數(shù),用來輸出數(shù)組的內(nèi)容。5 編寫函數(shù)printer( ),用來根據(jù)實際對象輸出它們的內(nèi)容。1.流程圖: 開始開始類對象初始化打印類對象數(shù)組1打印類對象數(shù)組2調(diào)用printer函數(shù)選擇查詢職員結(jié)束2.程序優(yōu)缺點:優(yōu)點:使用windows命名規(guī)則程序規(guī)范,可讀性強,代碼精煉,時間復雜度低,空間復雜度低缺點: 功能較弱,操作性低。3.代碼段:#include #include#includeusing namespace std; class Employee_one public: Employee_one(int n,char *nam,char s,int a):num(n),name(nam),sex(s),age(a) virtual void display(); int getnum() return num; char* getname() return name; char getsex() return sex; int getage() return age; private: int num; char *name; char sex; int age; ; class Employee_two:public Employee_one public: Employee_two(int n,char* nam,char s,int a,int w):Employee_one(n,nam,s,a),wages(w) void display(); int getwages() return wages; private: int wages; ; void Employee_one:display() coutsetw(15)nname:name setw(15)setiosflags(ios:right) age:age setw(15)setiosflags(ios:left)sex:sexsetw(15) setiosflags(ios:left)num:num; void Employee_two : display() coutname:getname()setw(15)age:getage()endl; /*nwages:wages*/; void printer(Employee_two w2) int a = 0,i = 0; couta; if(a = 10) for (i = 0;i 10;i+) if (w2i.getnum()=a) coutname:w2i.getname()nage:w2i.getage()nwages: w2i.getwages()nsex:w2i.getsex()nnum:w2i.getnum(); else cout編號錯誤差無此人; int main() Employee_one w110 = Employee_one(1,ci,m,18),Employee_one(2,cai,m,19), Employee_one(3,xi,f,18),Employee_one(4,su,m,20), Employee_one(5,li,m,20),Employee_one(6,yan,m,19), Employee_one(7,yi,m,18),Employee_one(8,xiu,m,21), Employee_one(9,su,m,17), Employee_one(10,men,m,22); Employee_two w210= Employee_two(1,ci,m,18,800),Employee_two(2,cai,m,19,700), Employee_two(3,xi,f,18,900),Employee_two(4,su,m,20,750), Employee_two(5,li,m,20,860),Employee_two(6,yan,m,19,900), Employee_two(7,yi,m,18,1000),Employee_two(8,xiu,m,21,680), Employee_two(9,su,m,17,1500),Employee_two(10,men,m,22,700) ; cout職工信息數(shù)據(jù)顯示如下:; for(int i = 0;i display(); cout n; coutn; cout職工信息簡表如下:n; for(int j = 0;j display(); coutn; cout實際對象信息為:n; printer(w2); coutn; return 0; 4.程序截圖:(四).高校人事管理系統(tǒng):1、問題描述(功能要求): 某高校,主要人員有:在職人員(行政人員、教師、雙肩挑人員(注:教師編制,擔任領導職務)、退休人員、返聘人員和臨時工?,F(xiàn)在,需要存儲這些人員的人事檔案信息:編號、姓名、性別、年齡、職務、職稱、政治面貌、最高學歷、任職時間、來校時間。要求: 1) 添加刪除功能:能根據(jù)學校人事的變動情況,添加刪除記錄;2) 查詢功能:能根據(jù)編號和姓名進行查詢;3) 編輯功能(高級):根據(jù)查詢對相應的記錄進行修改,并存儲;4) 統(tǒng)計功能:能根據(jù)多種參數(shù)進行人員的統(tǒng)計(在職人數(shù)、黨員人數(shù)、女工人數(shù)、高學歷高職稱人數(shù));5) 保存功能:能對輸入的數(shù)據(jù)進行相應的存儲,要求重載插入和提取符以完成數(shù)據(jù)的保存和打開。6) 人員編號在生成人員信息時同時生成,每輸入一個人員信息,編號順序加1。 2、問題的解決方案: 根據(jù)系統(tǒng)功能要求,可以將問題解決分為以下步驟:1) 應用系統(tǒng)分析,建立該系統(tǒng)的功能模塊框圖以及界面的組織和設計;2) 分析系統(tǒng)中的各個實體及它們之間的關系包括屬性和行為;3) 根據(jù)問題描述,設計系統(tǒng)的類層次;4) 完成類層次中各個類的描述(包括屬性和方法);5) 完成類中各個成員函數(shù)的定義;6) 完成系統(tǒng)的應用模塊;7) 功能調(diào)試;完成系統(tǒng)總結(jié)報告以及系統(tǒng)使用說明書。 高校人事管理系統(tǒng)包括的功能:1.流程圖 結(jié)束 動態(tài)增加容量增加教職工刪除教職工顯示教職工查找教職工修改教職工統(tǒng)計職務人數(shù)執(zhí)行銷毀函數(shù)退出 開始 選擇函數(shù) 開始 開始 開始 選擇函數(shù) 選擇函數(shù) 選擇函數(shù)v統(tǒng)計職務人數(shù)刪除教職工增加教職工查找教職工顯示教職工修改教職工執(zhí)行銷毀函數(shù)退出執(zhí)行銷毀函數(shù)退出修改教職工顯示教職工查找教職工增加教職工刪除教職工統(tǒng)計職務人數(shù)v 動態(tài)增加容量 結(jié)束2程序優(yōu)缺點:優(yōu)點:采用動態(tài)類數(shù)組建立,并設立了數(shù)組的有效長度,并且自動增加數(shù)組長度,不必使用文件結(jié)構(gòu),降低了空間復雜度,代碼規(guī)范可讀性性強,封裝緊密,安全。采用了數(shù)據(jù)結(jié)構(gòu)鏈表的思想缺點:界面設計有所欠缺。部分函數(shù)算法還需加強3程序代碼:#include #include #include #includeusing namespace std;#define SIZE_INTE 10 / 初始類數(shù)組的長度 int usedsize = 0; / 類數(shù)組的有效長度 class Personnel_Staff /人員類public:void Add(); /新增教職工信息void Display(); /顯示已有教職工信息void Edit(); /修改教職工信息bool Search(int Num ,char *Na); /查找教職工void Delete(); /刪除教職工信息void State(); /統(tǒng)計信息 int GetSer_Number() return Ser_Number; int GetAge() return Age; int GetOff_Time() return Off_Time; int GetStart_Time() return Start_Time; char *GetName() return Name; char *GetSex() return Sex; char *GetJob() return Job; char *GetTitle_Po() return Title_Po; char *GetPol_Status() return Pol_Status; char *GetEdu_Certi() return Edu_Certi; private:int Ser_Number; /編號int Age; /年齡int Off_Time; /任職時間int Start_Time; /來校時間char Name20; /姓名char Sex20; /性別char Job20; /職務char Title_Po20; /職稱char Pol_Status20; /政治面貌char Edu_Certi20; /學歷;/#*新增教職工信息void Personnel_Staff:Add()/Tusedsize = usedsize;int f = 1;cout #新增職工檔案# endl;cout Ser_Number;/ser_Number = usedsize;cout Name;cout Sex;cout Age;while (1)cout Job;if ( strcmp(Job,行政) = 0 | strcmp(Job,教師) = 0 | strcmp(Job,雙肩挑) = 0 | strcmp(Job,退休) = 0 | strcmp(Job,返聘) = 0 | strcmp(Job,臨時工) =0)break;elsecout 錯誤! 請重新輸入 ! endl; while (1)cout Title_Po;if (strcmp(Title_Po,無) = 0| strcmp(Title_Po,講師) = 0| strcmp(Title_Po,副教授) = 0| strcmp(Title_Po,教授) = 0)break;elsecout 錯誤! 請重新輸入 ! endl;while (1)cout Pol_Status;if (strcmp(Pol_Status,群眾)|strcmp(Pol_Status,黨員)|strcmp(Pol_Status,團員)=0)break;elsecout 錯誤! 請重新輸入 ! endl;while (1)cout Edu_Certi;if (strcmp(Edu_Certi,博士后) = 0| strcmp(Edu_Certi,學士) = 0| strcmp(Edu_Certi,碩士) = 0| strcmp(Edu_Certi,博士) = 0) break; elsecout 輸入有誤,請重新輸入! endl;cout Off_Time;cout Start_Time;cout *添加成功* endl;void SetAdd(Personnel_Staff p,int *val) /輸出參數(shù) val p*val.Add(); (*val)+; /#輸出教職工的檔案void Personnel_Staff:Display()cout 輸出所選教職工的檔案 endl;cout 編號: Ser_Number endl;cout 姓名: Name endl;cout 性別: Sex endl;cout 年齡: Age endl;cout 職稱: Title_Po endl;cout 政治面貌: Pol_Status endl;cout 學歷: Edu_Certi endl;cout 任職時間: Off_Time endl;cout 來校時間: Start_Time endl;cout 輸出結(jié)束 endl;cout = 0) for (int i = 0;i val;i+) pi.Display(); elsecout tt沒有數(shù)據(jù)成員 endl;/#查找已用的教職工信息bool Personnel_Staff:Search(int Num ,char *Na ) if (Num = Ser_Number) return true;if (!strcmp(Na, Name) return true; return false;void SetSearch(Personnel_Staff *p,int val)cout #查找已有的教職工 endl;cout 1、按編號查找 / 2、按姓名查找 choice; /choice=1|choice=2switch (choice) case 1: cout Num; for(int i = 0;i val;i+) if ( pi.Search(Num, ) ) pi.Display(); break; case 2: cout Na;for(int i = 0;i val;i+) if ( pi.Search(-1,Na) ) pi.Display(); break;/#修改已有的教職工信息void Personnel_Staff:Edit()int n = 0,renumber = 0,reage = 0,flag = 1,rectime = 0,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省南充市2025年中考英語真題附答案
- 2025年中國顆粒積木行業(yè)市場全景分析及前景機遇研判報告
- 2025年中國模塊電源行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報告
- 2025年中國馬飼料市場運行態(tài)勢及行業(yè)發(fā)展前景預測報告
- 泌尿外科??浦R
- 細化培訓課件
- 倉庫作業(yè)培訓課件
- 2025年 重慶兩江新區(qū)雁啟幼兒園招聘考試筆試試題附答案
- 2025-2031年中國農(nóng)村網(wǎng)購行業(yè)市場全景監(jiān)測及投資戰(zhàn)略咨詢報告
- 2025年中國烘手器市場運行態(tài)勢及行業(yè)發(fā)展前景預測報告
- 寵物店鋪轉(zhuǎn)讓合同協(xié)議書
- T/CAEPI 70-2023水泥窯協(xié)同處置生活垃圾焚燒飛灰水洗除鹽工藝技術要求
- 2025至2030年中國電梯能量回饋單元數(shù)據(jù)監(jiān)測研究報告
- 高支模質(zhì)量問題的分析與整改
- 2024年全國工會財務知識大賽備賽試題庫500(含答案)
- 計算機體系結(jié)構(gòu)計算題示例答案
- 2025年事業(yè)單位聯(lián)考a真題及答案
- 企業(yè)運營與發(fā)展-形考任務一-國開(ZJ)-參考資料
- 校園食品安全與傳染病防控教育專題培訓
- 四川省成都市青羊區(qū)2024-2025學年數(shù)學五下期末統(tǒng)考試題含答案
- 幼兒園教師超輕黏土培訓
評論
0/150
提交評論