




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 c+程序設計課程設計 復數(shù)計算器管理系統(tǒng)指導教師:陳淑鑫設計時間:2007年9月23日至2007年9月28日復數(shù)計算器管理系統(tǒng)一、需求分析隨著科學技術的不斷提高,計算機科學日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領域并發(fā)揮著越來越重要的作用。計算器軟件系統(tǒng)應該能夠為用戶提供豐富的手段。 作為計算機應用的一部分,使用計算機進行數(shù)學運算,具有著其他方式所無法比擬的優(yōu)點.例如:圖文并茂、查找方便、價格便宜、可保存信息、保密性好等。這些優(yōu)點能夠極大地提高的效率,也是國家的科學化、信息化管理,與世界接軌的重要條件。 因此,開發(fā)這樣一套計算器軟件成為很有必要的事情,在下面的各章中我
2、們將以開發(fā)一套計算器軟件系統(tǒng)為例,談談其開發(fā)過程和所涉及到的問題及解決方法。要想進行復數(shù)計算器管理就必須有輔助管理可供選擇的菜單和可返回的菜單界面,因此在程序中編寫函數(shù)void select(),void menu()來完成上述功能。在選擇菜單中(void select())中提供了6項服務內(nèi)容:0.退出系統(tǒng);1. 多復數(shù)加法;2. 多復數(shù)減法;3多復數(shù)乘法;4. 測試100以內(nèi)的復數(shù)加減乘法運算,1次測試10道題;5. 多復數(shù)比較;并分別編寫函數(shù)void exit()、void input()、void search( )、void change()、void omit()、voit out
3、put()來實現(xiàn)其功能。定義了類,調(diào)用時就需用到c+i/o流,為了方便起見,在主程序定義了讀函數(shù) void read()和寫函數(shù) void write()。程序中還對登記號的自動排序和自動統(tǒng)計做了相應的處理。二、系統(tǒng)的軟硬件環(huán)境 1、硬件環(huán)境: 主 機 pentium4、2.4hz 內(nèi) 存 256mb 光 驅 24倍速以上 硬盤空間 80g 2、軟件環(huán)境: windows 2000/xp visual c+ 6.0編譯器3 系統(tǒng)模塊功能1.任務分工: 姓名進度梁福東陰發(fā)明騰躍確定題目,成立設計小組,做用戶需求分析 (0.5天)確定題目,進行需求分析 提出問題,給出相應的解決方法撰寫需求分析材料
4、查閱資料,進行問題分析,制定方案(1天)紀錄并整理,進行問題分析圖書、上網(wǎng)館查閱查閱以前學過的課本,書籍制定方案,設計大概的程序思想根據(jù)方案編寫程序并進行調(diào)試(2.5天)設計復數(shù)計算器加法,查詢的有關程序,并上機調(diào)試。設計復數(shù)計算器減法,刪除的有關程序,并上機調(diào)試。設計復數(shù)計算器的比較,退出系統(tǒng)的有關程序,并上機調(diào)試。撰寫設計說明書,完成設計(1天)完成說明書上的文字部分。抓屏,完成說明書上的非文字部分。解決程序中的問題,審閱說明書提交設計內(nèi)容并予以改進(1天)對整個程序設計過程進行總結,準備答辯。對整個程序設計過程進行總結,準備答辯。對整個程序設計過程進行總結,準備答辯。答辯(1天)答辯答辯
5、答辯2.模塊功能及程序操作步驟1).設計思路(1) 在該實驗設計中首先類是創(chuàng)建對象的模板,它包含著所創(chuàng)建的的狀態(tài)描述和方法的定義。它的完整描述包含了外部接口外部文件是#include和內(nèi)部算法以及數(shù)據(jù)結構的形式。它是將不同的類型的數(shù)據(jù)和與這些數(shù)據(jù)相關的操作封裝在一起的集合體。它更主要的特點是具有更高的封裝性,使數(shù)據(jù)具有隱藏性,同時它還具有封裝性。使對數(shù)據(jù)的操作簡單易行。(2) 使用不同的文件類型可以使系統(tǒng)打開不同的數(shù)據(jù)組合即文件時具有針對性,然后再對打開的文件進行文件流操作。不同的類型需要用不同的打開方式。(3) 采用了分支和復合語句程序結構。分支語句結構。下面的程序中,當輸入一個字符串比如“
6、”時,if語句會判斷輸入的字若不符合要求則提示復數(shù)數(shù)據(jù)格式錯誤,否則為說明復數(shù)對象已接受完。如:if(sk=-) /當前字符為負號if(sk=+) /當前字符為正號if(sk=i) /當前字符為iif(k!=len-1) /判斷字符i是否為字符串中作后一個字符另外一種是復合語句結構。比如在本程序中的應用,系統(tǒng)根據(jù)輸入的選擇語句執(zhí)行。比如,在該程序中,先判斷接受的字符串是否合法,合法則按順序循環(huán),否則輸出出錯信息并返回,直到退出。for(int k=0;klen;k+) /判斷接受的字符串是否合法for(k=0;klen;) /順序識別字符串中各字符2).模塊名稱及功能列表:模塊名稱模塊作用vo
7、id savefile()1.用戶資料保存函數(shù)void sub()2.復數(shù)減法預算函數(shù)void login()3.當前用戶信息函數(shù)ostream & operatorstrchoise; if(strcmp(strchoise,1)=0) add(); else if(strcmp(strchoise,2)=0) sub(); else if(strcmp(strchoise,3)=0) test(); else if(strcmp(strchoise,4)=0) mul(); else if(strcmp(strchoise,7)=0) compare(); b) 復數(shù)計算器加法此模塊用于復
8、數(shù)計算器的加法運算,此函數(shù)中分別調(diào)用了class ccomplex中的成員函數(shù): ccomplex operator+(ccomplex &com)完成復數(shù)加法的重載;及調(diào)用了istream & operator(istream &is,ccomplex &com),重載輸入,可以輸入a+bi的形式并判斷是否輸入正確和提取復數(shù)的實部和虛部。按1,回車進入復數(shù)加法界面:圖二:復數(shù)計算器加法界面按要求輸入數(shù)據(jù):圖三:復數(shù)加法結果c) 復數(shù)計算器減法此模塊用于復數(shù)計算器的加法運算,此函數(shù)中分別調(diào)用了class ccomplex中的成員函數(shù): ccomplex operator-(ccomplex &
9、com)完成復數(shù)加法的重載;及調(diào)用了istream & operator(istream &is,ccomplex &com),重載輸入,可以輸入a+bi的形式并判斷是否輸入正確和提取復數(shù)的實部和虛部。調(diào)用了istream&operator(istream &is,ccomplex &com)重載輸出,將結果a+bi輸出。按2進入復數(shù)計算器減法界面:圖四:復數(shù)計算器減法界面按要求輸入數(shù)據(jù): 圖五:復數(shù)減法結果 d)測試100以內(nèi)的復數(shù)加減乘法運算,1次測試10 道題。此模塊由void test(void)函數(shù)完成,使用到switch語句:switch(op) case 0: answer=a+
10、b; couta加上b等于; break; case 1: answer=a-b; couta減去b等于; break; case 2: answer=c*d; coutc乘以d(istream &is,ccomplex &com),重載輸入,可以輸入a+bi的形式并判斷是否輸入正確和提取復數(shù)的實部和虛部。按4并回車,進入復數(shù)乘法界面:圖八:復數(shù)乘法界面按要求輸入數(shù)據(jù):圖九:復數(shù)乘法結果f) 復數(shù)比較此模塊用于復數(shù)計算器的復數(shù)比較,此模塊中分別調(diào)用了class ccomplex中的成員函數(shù):重載函數(shù)功能operator=(ccomplex &com)是否相等operator(ccomplex
11、&com)是否大于operator(istream &is,ccomplex &com),重載輸入,可以輸入a+bi的形式并判斷是否輸入正確和提取復數(shù)的實部和虛部。調(diào)用了istream&operator(istream &is,ccomplex &com)重載輸出,將結果a+bi輸出。按5并回車,進入復數(shù)比較界面: 圖十:復數(shù)比較界面按要求輸入數(shù)據(jù):圖十一:復數(shù)比較結果g) 退出系統(tǒng) 按0并回車,退出系統(tǒng):圖十二:退出系統(tǒng)界面4).程序的使用說明:(1)程序操作步驟:a)在界面中根據(jù)需要輸入不同的數(shù)值選擇所要進行的操作。b)選擇1進行加法運算,填寫所需內(nèi)容。 c)在主菜單界面中選擇1后所進入的
12、復數(shù)加法的界面中再輸入復數(shù),根據(jù)中文提示,可對復數(shù)進行加法運算。d)在主菜單界面中選擇2,可對復數(shù)進行減法運算。根據(jù)中文提示,可對復數(shù)進行減法運算。e) 在主菜單界面中選擇3后,可測試100以內(nèi)的復數(shù)加減乘法運算,1次測試10 道題.5).系統(tǒng)總體框架圖主界面1多復數(shù)加法2多復數(shù)減法3測試100可加減乘法運4多復數(shù)乘法5多復數(shù)比較0退出系統(tǒng)4.使用范圍該程序適用于出租車出租信息(1.多復數(shù)加法、2.多復數(shù)減法、3.多復數(shù)乘法.4.測試100以內(nèi)的復數(shù)加減乘法運算,1次測試10道題,通過該程序可以完成:多復數(shù)加法、多復數(shù)減法、多復數(shù)乘法;5.復數(shù)比較。由于語句的束縛性,使得源程序暫時僅適用于復數(shù)
13、基本信息的管理;但從該程序設計的主體來看,此源程序卻適用于多數(shù)信息管理系統(tǒng)。5 結束語通過一學期的c+程序設計的學習以及近一周的c+程序設計課程設計的實踐,我組成功的編寫了一個完整的c+應用軟件,這段期間的學習、實踐不但鞏固了上學期所學的c+基礎理論知識,還提高了分析問題、解決問題的能力,并與此同時了解了c+軟件開發(fā)的基本步驟,培養(yǎng)了利用c+語言解決實際問題的能力和團隊協(xié)作精神。作為c+程序設計的初學者,雖然編寫了一個完整的c+應用軟件,但此軟件只能處理信息量小的數(shù)據(jù)信息即適用范圍小,不適用于信息量過于龐大的數(shù)據(jù)信息 。對于信息高速流通的場所,情況變化多種多樣,而此程序中可處理的情況過少。從這
14、一點上看,此程序需要改進。附:源程序代碼#include #include #include #include #include #include #define eps 1e-5 /定義精度常數(shù)using namespace std; /使用標準空間命名stdnamespace nameccomplex /定義命名空間nameccomplex class ccomplex /定義一個ccomplex類 private: double real,image; public: ccomplex(double real=0,double image=0) /構造函數(shù) real=real; imag
15、e=image; friend istream & operator(istream &is,ccomplex &com); /重載輸入friend ostream & operator(ccomplex &com); int operator(ccomplex &com) /重載運算符,比較模的大小 if(mod()com.mod() return 1; else return 0; int ccomplex:operator(ccomplex &com) if(mod()(istream &is,ccomplex &com) /重載輸入,可以輸入a+bi的形式 couts; /用字符串的形
16、式接受復數(shù)int len=strlen(s); /求出字符串的長度int n=0,sign=1; /n為當前從字符串中提取出來的數(shù)字,初始化為0;sign是難道符號,初始化為正com.image=com.real=0; for(int k=0;klen;k+) /判斷接受的字符串是否合法 if(sk 9) & (sk!=+ & sk!=- & sk!=i) couterrorendl; return is; /錯誤,輸出出錯信息并返回 for(k=0;klen;) /順序識別字符串中各字符 if(n!=0 &(sk=-|sk=+) /當前字符是否是符號位 com.real=sign*n; /是
17、符號位,且n!=0,即n已被賦值,表明當前讀取的是虛部的符號n=0; /將原n*sign值賦給實部,將n清零,準備接受虛部的值 if(sk=-) /當前字符為負號 sign=-1;k+; /給符號標志賦值 if(sk=+) /當前字符為正號 sign=1;k+; /給符號標志賦值 if(sk=i) /當前字符為i if(k!=len-1) /判斷字符i是否為字符串中作后一個字符cout=0 & sk=9) /當前字符在09之間,將數(shù)字字符轉換成數(shù)字數(shù)值 n=n*10+sk-0; k+; if(slen-1!=i & n!=0)/如果最后一個字符不是i,表示復數(shù)對象內(nèi)只有實部,沒有虛部 com.
18、real=n*sign; return is; ostream & operator(ostream &os,ccomplex &com) /重載輸入 if(fabs(com.image)eps) / 如果虛部為0oscom.real; /只輸出實部else if(fabs(com.real)eps) /如果實部為0oscom.image0) oscom.real+com.imagei; else oscom.realcom.imagei; /虛部為正return os; ccomplex ccomplex:operator+(ccomplex &com) /加法重載 ccomplex sum
19、; sum.real=real+com.real; /實部相加sum.image=image+com.image; /虛部相加return sum; ccomplex ccomplex:operator*(ccomplex &com) /乘法重載 ccomplex multi; multi.real=real*com.real-image*com.image; /乘積實部multi.image=real*com.image+image*com.real; /乘積虛部return multi; ccomplex ccomplex:operator-(ccomplex &com) /減法重載 cc
20、omplex sub; sub.real=real-com.real; sub.image=image-com.image; return sub; ccomplex ccomplex:operator+=(ccomplex &com) /重載加法賦值 real=real+com.real; image=image+com.image; return *this; ccomplex ccomplex:operator-=(ccomplex &com) /重載減法賦值 real=real-com.real; image=image-com.image; return *this; ccomple
21、x ccomplex:operator*=(ccomplex &com) /重載乘法賦值 double nreal=real*com.real-image*com.image; double nimage=real*com.image+image*com.real; real=nreal; image=nimage; return *this; int ccomplex:operator=(ccomplex &com) /重載等于 if(real=com.real & image=com.image) return 1; else return 0; void test(void) /測試函數(shù)
22、 user.ntest+; cout共10道題,做100以內(nèi)的加減運算,滿分100分:n; double real1,real2,image1,image2,real3,real4,image3,image4; ccomplex answer,temp; int score=0; char op; for(int i=0;i=9;i+) /為復數(shù)產(chǎn)生隨機值real1=rand()%200-100; image1=rand()%200-100; real2=rand()%200-100; image2=rand()%200-100; ccomplex a(real1,image1),b(real
23、2,image2); real3=rand()%20-10; image3=rand()%20-10; real4=rand()%20-10; image4=rand()%20-10; ccomplex c(real3,image3),d(real4,image4); op=rand()%3; /產(chǎn)生隨機加減乘法運算的三個值switch(op) case 0: answer=a+b; couta加上b等于; break; case 1: answer=a-b; couta減去b等于; break; case 2: answer=c*d; coutc乘以dtemp; /輸入用戶計算值if(ans
24、wer=temp) /比較用戶計算值 score+=10; else cout此題做錯了n; cout正確答案為:answerendl; cout你的最后得分是:scoreendl; if(user.ntest=3) user.alave=0; user.dlscoreuser.ntest-1=score; for(int i=0;iuser.ntest;i+) user.alave+=user.dlscorei; user.alave=user.alave/user.ntest; else user.dlscore0=user.dlscore1; user.dlscore1=user.dls
25、core2; user.dlscore2=score; for(i=0,user.alave=0;i3;i+) user.alave+=user.dlscorei; user.alave=user.alave/3; cout請按任意鍵繼續(xù)n; cout.flush(); cin.get(); cin.get(); void add() /復數(shù)加法運算函數(shù) user.nadd+; ccomplex num1,num2,sum,zero(0,0); cout加法計算n最少輸入兩個復數(shù),并且以0結束n; coutnum1; coutnum2; sum=num1+num2; coutnum1; int
26、 i=4; while(!(num1=zero) sum=sum+num1; cout第inum1; i+; cout加法結果是:sumendl; cout請按任意鍵繼續(xù)n; cout.flush(); cin.get(); cin.get(); void sub() /復數(shù)減法預算函數(shù) user.nsub+; ccomplex num1,num2,sub,zero(0,0); cout最少輸入兩個復數(shù),并且以0結束n; coutnum1; coutnum2; sub=num1-num2; coutnum1; int i=4; while(!(num1=zero) sub=sub-num1;
27、cout第inum1; i+; cout減法結果是:subendl; cout請按任意鍵繼續(xù)n; cout.flush(); cin.get(); cin.get(); void mul() /復數(shù)乘積函數(shù) user.nmul+; ccomplex num1,num2,mul,zero(0,0); cout乘法計算n最少輸入兩個復數(shù),并且以零結束n; coutnum1; coutnum2; mul=num1*num2; coutnum1; int i=4; while(!(num1=zero) mul*=num1; cout第inum1; i+; cout乘法結果是:mulendl; cout
28、請按任意鍵繼續(xù)n; cout.flush(); cin.get(); cin.get(); void compare() /兩復數(shù)比較函數(shù) ccomplex num1,num2; cout輸入兩個復數(shù)n; coutnum1; coutnum2; if(num1=num2) coutnum2) coutnum1的模大于num2的模n; else if(num1num2) coutnum2的模大于num1的模n; else cout這兩個復數(shù)的模相等n; cout按任意鍵繼續(xù)n; cin.get(); cin.get(); void userprint() /輸出用戶信息函數(shù) coutuser.s
29、zname使用的次數(shù)為:user.ntimeendl; cout其中:t加法的次數(shù):user.naddt減法的次數(shù):user.nsubt乘法的次數(shù):user.nmulendl; coutt測試次數(shù):user.ntestt平均成績:user.alaveendl; void login() /當前用戶信息函數(shù) char szname20; cout請輸入您的姓名:; cin.getline(szname,20); ifstream infile; user user1; infile.open(user.dat,ios:binary|ios:in); if(!infile) cout沒有原始記錄文
30、件,您是第一個用戶!n; strcpy(user.szname,szname); user.ntest+; return; infile.read(char *)&user1,sizeof(user); while(!infile.eof() if(strcmp(user1.szname,szname)=0) user=user1; user.ntime+; cout歡迎您再次使用復數(shù)計算器!; userprint(); cin.get(); infile.close(); return; infile.read(char *) &user1,sizeof(user); cout歡迎您再次使用
31、復數(shù)計算器!; strcpy(user.szname,szname); user.ntime+; infile.close(); return; void savefile() /用戶資料保存函數(shù) userprint(); fstream file; user user1; file.open(user.dat,ios:binary|ios:in|ios:out); if(!file) cout文件打開錯誤,不能進行更新!n; return; file.seekp(0,ios:beg); while(!file.eof() file.read(char *)&user1,sizeof(user); if(strcmp(user1.szname,user.szname)
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新解讀《CB-T 532 - 1999船用通風管路放水塞》新解讀
- Brand KPIs for health insurance:ICICI Lombard in India-英文培訓課件2025.4
- 基于注意力機制跨階段并行殘差融合模型的非侵入式負荷辨識
- 汽車傳感器與檢測技術電子教案:雷達傳感器
- 介紹大學活動方案
- 介紹校園文化活動方案
- 介紹美食活動方案
- 從化老人慰問活動方案
- 倉庫冬季活動策劃方案
- 仙人吹氣活動方案
- 23G409先張法預應力混凝土管樁
- 【MOOC】中國稅法:案例·原理·方法-暨南大學 中國大學慕課MOOC答案
- 鐵工電〔2023〕54號國鐵集團關于印發(fā)《普速鐵路工務安全規(guī)則》的通知
- 妊娠合并糖尿病的護理23張課件
- 我的家鄉(xiāng)-濟南
- 磁粉探傷儀操作使用標準
- T-CSCS 016-2021 鋼結構制造技術標準
- 數(shù)據(jù)中心機房工程施工組織方案
- 績效管理全套ppt課件(完整版)
- 句子專項復習(用)
- 霍爾傳感器直線電機位置檢測
評論
0/150
提交評論