c++復數(shù)計算器課程設(shè)計報告_第1頁
c++復數(shù)計算器課程設(shè)計報告_第2頁
c++復數(shù)計算器課程設(shè)計報告_第3頁
c++復數(shù)計算器課程設(shè)計報告_第4頁
c++復數(shù)計算器課程設(shè)計報告_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課程設(shè)計報告課程設(shè)計題目:復數(shù)計算器學生姓名:專業(yè):班級:學號:完成實驗時間:實驗地點:指導教師:課程設(shè)計報告要求:結(jié)構(gòu)要求:問題分析:要求用自己的話概括出本課題的內(nèi)容、功能結(jié)構(gòu)結(jié)構(gòu)分析:根據(jù)問題分析的結(jié)果,進一步分析出系統(tǒng)的類結(jié)構(gòu)及相互關(guān)系,畫UML的類圖并描述其內(nèi)部結(jié)構(gòu)屬性及相互關(guān)系現(xiàn)流程分析:概述自己的實現(xiàn)過程:如工程建立流程、類創(chuàng)建流程等個性功能介紹:應(yīng)介紹自己在系統(tǒng)中的程序改進與新增的功能模塊的意義、價值課程設(shè)計小結(jié):簡述自己課程設(shè)計的收獲(一):問題描述和要求:(1):該復數(shù)計算器可進行“+”、“-”、“*”、“+=”、“-=”、“*=”、“比較兩模的大小”,可識別用戶輸入“a+bi”格式,這些可用多態(tài)中的對應(yīng)的運算符重載(2):可對上面每個功能進行測試并記錄最后三次的平均成績這可以用一個test()函數(shù)實現(xiàn)(3):把數(shù)據(jù)寫入文件當下次用戶輸入存在的姓名時把他的數(shù)據(jù)讀出來如果輸入的姓名不存在就替換掉,這可以用對應(yīng)的寫入文件和讀取去實現(xiàn)。(二):結(jié)構(gòu)分析、系統(tǒng)分析、畫uml圖描述它們的關(guān)系(1):根據(jù)問題描述和要求,系統(tǒng)要求該復數(shù)計算器有加、減、乘、加等于、減等于、乘等于、對用戶進行測試、比較兩個復數(shù)模長、能夠識別客戶輸入“a+bi”的模式等功能。最后還要求把客戶做過的信息(做了多少次加、減、乘、測試、最后三次的平均分、用戶名等信息)用文件來保存(2):既然要具備上面的功能我可以用我學過的多態(tài)中的運算符重載來實現(xiàn)還有要把數(shù)據(jù)存入盤中我可以用文件來對他進行保存文件名為:“xiao.txt”到下一個客戶想查信息時可輸入姓名進行匹配當新的用戶用時可對上次保存的信息覆蓋來保存當前的信息這我用系統(tǒng)函數(shù)remove()來實現(xiàn)。對于加、減、等功能的實現(xiàn)可以分辨用一個函數(shù)來完成,例如加可以用jia()函數(shù)完成。做好界面,另外還得要一個結(jié)構(gòu)體來定義一個用戶對象并把信息放在里面保存到文件中,這里用結(jié)構(gòu)體可定義全局變量對下面實行有好處。最后在主函數(shù)中調(diào)用每個函能的實現(xiàn)。Uml圖:Complex---real:float---image:float+operator+(complex&s):complex+operator-(complex&s):complex+operator++():complex+operator+=(complex&s):complex+operator-=(complex&s):complex+operator*=(complex&s):complex+operator--():complex+operator>(complex&s):int+operator<(complex&s):int+operator==(complex&s):int+operator!=(complex&s):int(三):系統(tǒng)設(shè)計(1):系統(tǒng)的總框架使用面向?qū)ο蟮某绦蛟O(shè)計是想進行分析,整個系統(tǒng)涉及一個類的信息和操作。該類為complex:復數(shù)類。在必要運算符重載中定義相應(yīng)的類的對象。該類所有成員如下:classComplex//定義一個complex的類{private:doubleReal,Image;public: CComplex(doublereal=0,doubleimage=0)//構(gòu)造函數(shù){Real=real;Image=image; }friendistream&operator>>(istream&is,CComplex&com);//重載輸入friendostream&operator<<(ostream&os,CComplex&com);//重載輸出CComplexoperator+(CComplex&com);//加法重載CComplexoperator-(CComplex&com);//減法重載CComplexoperator*(CComplex&com);//乘法重載CComplexoperator+=(CComplex&com);//加法賦值重載CComplexoperator-=(CComplex&com);//減法賦值重載CComplexoperator*=(CComplex&com);//乘法賦值重載CComplexoperator++();//自加CComplexoperator--();//自減doublemod(void);//求復數(shù)的模intoperator>(CComplex&com);intoperator<(CComplex&com);intoperator!=(CComplex&com);intoperator==(CComplex&com);};(2):該程序的系統(tǒng)流程如下圖:開始開始聲明一個complex類,并定義float,real,image;聲明類的函數(shù),構(gòu)造函數(shù),加減乘和取模運算sum.real=real+s.real;sum.image=imag+s.image;s.ubreal=real-s.real;sub.image=imag-s.image;accum.real=real*s.real-image*s.image;accum.imag=real*s.image+image*s.real;Sqrt(real*real=image*image);輸出a,s,a+s,a-s,a*s,∣a∣的值終止(四):對新添功能的介紹(1)本人是按要求做的沒加什么別的功能。(五):實驗心得(1):通過本課程設(shè)計讓我更好地知道多態(tài)中的運算符重載。(2):讓給我更好地了解鍵盤輸出流的格式與運用。(3):在本實驗中遇到不少問題,通過老師見講解和建議讓我知道以后在寫序時更快地去找到錯誤并解決。(4):通過本實驗讓我更好地理解文件并運用文件6、程序清單及注釋#include<iostream>#include<cmath>#include<fstream>usingnamespacestd;classcomplex//定義一個complex的類{private: floatReal,Image;public:complex(floatreal=0,floatimage=0)//構(gòu)造函數(shù) {Real=real; Image=image; }friendistream&operator>>(istream&is,complex&s)//輸出流重載 {charb[80];is>>b;intlen=strlen(b);intn=0,sign=1;s.Image=s.Real=0;for(intk=0;k<len;k++) {if((b[k]<'0'||b[k]>'9')&&(b[k]!='+'&&b[k]!='-'&&b[k]!='i'))//度輸入格式規(guī)范如不讓“+”,“-”,“*”在一起的還有輸入的一點,還有輸入的必須為0-9或運算付或“i” {cout<<"error"<<endl;returnis; } }for(k=0;k<len;)//提取實部和虛部 {if(n!=0&&(b[k]=='-'||b[k]=='+')) {s.Real=sign*n;n=0; }if(b[k]=='-') {sign=-1;k++; }if(b[k]=='+') {sign=1;k++; }if(b[k]=='i') {if(k!=len-1)//如果i不是最后一個就報錯cout<<"error\n";elses.Image=sign*n;break; }while(b[k]>='0'&&b[k]<='9')//對n賦值 {n=n*10+b[k]-'0';k++; } }if(b[len-1]!='i'&&n!=0) {s.Real=n*sign; }returnis; }friendostream&operator<<(ostream&os,complex&s)//輸出符重載{ if(s.Image==0) os<<s.Real; elseif(s.Real==0) os<<s.Image<<"i"; elseif(s.Image>0) os<<s.Real<<"+"<<s.Image<<"i"; else os<<s.Real<<s.Image<<"i"; returnos; }complexoperator+(complex&s);//對加法運算符重載complexoperator-(complex&s);//對減法運算符重載complexoperator*(complex&s);//對乘運算符重載complexoperator+=(complex&s);//對加等于運算符重載complexoperator-=(complex&s);//對減等于運算符重載complexoperator*=(complex&s);//對乘等于運算符重載complexoperator++()//對加運算符重載并實現(xiàn) {Real=Real+1; Image=Image+1; return*this;}complexoperator--()//對減運算符重載并實現(xiàn) {Real=Real-1;Image=Image-1; return*this; }intoperator==(complex&s);floatlenmod(void);intoperator!=(complex&s);intoperator>(complex&s);intoperator<(complex&s);};structuser//定義一個結(jié)構(gòu)體來保存用戶使用過復數(shù)計算器的信息{intk; charname[50]; intzd;intzs; intnsum; intndel; intnmui1; intntest; floatavg; }a;complexcomplex::operator+(complex&s)//對加運算符的實現(xiàn){complexsum;sum.Real=Real+s.Real;sum.Image=Image+s.Image;returnsum;}complexcomplex::operator-(complex&s)//對減運算符的實現(xiàn){complexsub;sub.Real=Real-s.Real;sub.Image=Image-s.Image;returnsub;}complexcomplex::operator*(complex&s)//對乘運算符的實現(xiàn){complexaccum;accum.Real=Real*s.Real-Image*s.Image;accum.Image=Real*s.Image+Image*s.Real;returnaccum;}floatcomplex::lenmod()//求復數(shù)的模長{returnReal*Real+Image*Image;}complexcomplex::operator+=(complex&s)/對加等于運算符的實現(xiàn){Real=Real+s.Real;Image=Image-s.Image;return*this;}complexcomplex::operator-=(complex&s)/對減等于運算符的實現(xiàn){Real=Real-s.Real; Image=Image-s.Image; return*this;}complexcomplex::operator*=(complex&s)//對乘等于運算符的實現(xiàn){Real=Real*s.Real-Image*s.Image; Image=Real*s.Image+Image*s.Real; return*this;}intcomplex::operator<(complex&s){if(lenmod()<s.lenmod()) return1;else return0;}intcomplex::operator>(complex&s){if(lenmod()>s.lenmod()) return1;else return0;}intcomplex::operator!=(complex&s){if(lenmod()!=s.lenmod()) return1;else return0;}intcomplex::operator==(complex&s){if(Real==s.Real&&Image==s.Image) return1;else return0;}voidjiemian();//界面函數(shù)的聲明voidzijia()//自加函數(shù){ a.zs=0; intn; do { ++(a.zs); complexb; cout<<"輸入一個復數(shù):"; cin>>b; ++b; cout<<"結(jié)果為:"<<b<<endl;cout<<"輸入的復數(shù)為(0)回界面或者繼續(xù),請輸入n==:"; cin>>n; }while(n!=0); jiemian();}voidzijian()//自減函數(shù){ a.zd=0; intn; do { ++(a.zd); complexb; cout<<"輸入一個復數(shù):"; cin>>b; --b; cout<<"結(jié)果為:"<<b<<endl;cout<<"輸入的復數(shù)為(0)回界面或者繼續(xù),請輸入n==:"; cin>>n; }while(n!=0); jiemian();}voidjia()//加函數(shù){ a.nsum=0; intn,i; do { ++(a.nsum); complexnum1[20],sum(0,0); cout<<"輸入加復數(shù)的個數(shù)至少兩個:"; cin>>n; for(i=0;i<n;i++) { cout<<"輸入第"<<i<<"個復數(shù):"; cin>>num1[i];sum=sum+num1[i]; } cout<<"相加復數(shù)的結(jié)果為:"<<sum<<endl; cout<<"輸入的數(shù)在(0)回界面不在(0)繼續(xù),請輸入n==:"; cin>>n; }while(n!=1&&n!=0); jiemian(); }voidjian()//減函數(shù){ a.ndel=0; intn,i; do { ++(a.ndel); complexnum1[20],del; cout<<"輸入被減復數(shù):"; cin>>num1[0]; del=num1[0]; cout<<"輸入減復數(shù)的個數(shù)至少一個:"; cin>>n; for(i=1;i<=n;i++) { cout<<"輸入第"<<i<<"個復數(shù):"; cin>>num1[i];del=del-num1[i]; } cout<<"相減復數(shù)的結(jié)果為:"<<del<<endl; cout<<"輸入的數(shù)在(0)回界面不為(0)繼續(xù),請輸入n==:"; cin>>n; }while(n!=1&&n!=0); jiemian();}voidcheng()//乘法函數(shù){ a.nmui1=0; intn,i; do { ++(a.nmui1); complexnum1[10],mui1; cout<<"輸入一個乘復數(shù):"; cin>>num1[0];mui1=num1[0]; cout<<"輸入乘復數(shù)的個數(shù)至少一個:"; cin>>n; for(i=1;i<=n;i++) { cout<<"輸入第"<<i<<"個復數(shù):"; cin>>num1[i];mui1=mui1*num1[i]; } cout<<"相乘復數(shù)的結(jié)果為:"<<mui1<<endl; cout<<"輸入的數(shù)在(0-1)回界面不在(0-1)繼續(xù),請輸入謝謝n==:"; cin>>n; }while(n!=1&&n!=0); jiemian();}voidbijiaodaxiao()//模的比較函數(shù){a.k=0; intn; do {++a.k;complexs,b; cout<<"輸入兩個復數(shù)"<<endl; cout<<"輸入第一個復數(shù):"; cin>>s;cout<<"輸入第二個復數(shù):"; cin>>b;if(s.lenmod()>b.lenmod()) cout<<"輸入第一個復數(shù)的模大于第二復數(shù)的模\n"; else {if(s.lenmod()==b.lenmod()) cout<<"兩復數(shù)的模相等"<<endl; else cout<<"輸入第一個復數(shù)的模小于第二復數(shù)的模"<<endl; }cout<<"輸入0回界面或者繼續(xù),請輸入n==:"; cin>>n; }while(n!=0); jiemian();}voidtest()//測試函數(shù){complexconsis,ques; floatreal1,real2,real3,real4,image1,image2,image3,image4; inti,n,k; charops; floatscore=0; floatsum1=0; a.ntest=0; a.avg=0;intj,m;cout<<"歡迎進入測試系統(tǒng)"<<endl; cout<<"輸入你要測試的次數(shù):"; cin>>m; for(j=1;j<=m;j++) {++(a.ntest); cout<<"輸入你要測試的題數(shù):"; cin>>n; for(i=1;i<=n;i++) { real1=rand()%200-99;real2=rand()%200-99;image1=rand()%200-99;image2=rand()%200-99; real3=rand()%20-9;real4=rand()%20-9; image3=rand()%20-9; image4=rand()%20-9; complexa(real1,image1),b(real2,image2),c(real3,image3),d(real4,image4); k=rand()%3; switch(k) { case0: { ops='+'; cout<<"該題為:"; cout<<a<<""<<"+"<<""<<b; consis=a+b; break; } case1: { ops='-'; cout<<"該題為:"; cout<<a<<""<<"-"<<""<<b;consis=a-b; break; } case2: { ops='*'; cout<<"該題為:"; cout<<a<<""<<"*"<<""<<b; consis=a*b; break; } } cout<<"輸入你做的答案:"; cin>>ques; if(consis==ques) { score=score+100/n; cout<<"回答正確,你現(xiàn)在的得分是:"; cout<<score<<endl;if((j>=(m-2))&&((m-2)>0)) { sum1=sum1+score; score=0; } } else { cout<<"你做錯了請繼續(xù)努力,正確答案是:"; cout<<consis; cout<<"你現(xiàn)在的得分是:"; cout<<score<<endl; } } }a.avg=sum1/a.ntest; }voidshow();//信息顯示函數(shù)聲明voidsavefile()//把數(shù)據(jù)寫到文件中去{show();ofstreamoutfile("xiao.txt");outfile.write(reinterpret_cast<char*>(&a),sizeof(a)); outfile.close();return;}voidjiemian()//界面函數(shù){intchoose; do {system("cls");cout<<"\t"<<"*****==========================================*****************"<<endl;cout<<"\t"<<"*****歡迎進入一個由張小華制作的簡單的復數(shù)計算器********"<<endl; cout<<"\t"<<"*****==========================================********"<<endl;cout<<"\t"<<"=========================菜單如下======================================"<<endl; cout<<"\t"<<"\t"<<"1:復數(shù)加法\n"; cout<<"\t"<<"\t"<<"2:復數(shù)的減法\n"; cout<<"\t"<<"\t"<<"3:復數(shù)自加\n"; cout<<"\t"<<"\t"<<"4:復數(shù)自減\n";cout<<"\t"<<"\t"<<"5:復數(shù)模的比較\n";cout<<"\t"<<"\t"<<"6:復數(shù)乘法\n"; cout<<"\t"<<"\t"<<"7:測試\n"; cout<<"\t"<<"\t"<<"0:退出該程序并保存\n"; cout<<"請選擇:"; cin>>choose; switch(choose) { case1: jia();break; case2: jian();break; case3: zijia();break; case4: zijian();break; case5: bijiaodaxiao();break; case6: cheng();break; case7: test();break; case0: cout<<"謝謝你的使用歡迎下次再來:"<<endl; break; default: cout<<"輸入有誤請按任意鍵再輸謝謝:"<<endl; exit(0); } }while(choose!=0); savefile();}voidshow()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論