版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《面向?qū)ο蟪绦蛟O(shè)計》課程設(shè)計報告書</p><p> 課題名稱: 《面向?qū)ο蟪绦蛟O(shè)計》 </p><p> 學(xué)生學(xué)號: </p><p> 班 級: </p><p> 學(xué)生姓名:
2、</p><p> 指導(dǎo)老師: </p><p><b> 二〇一二年七月八日</b></p><p><b> 目 錄</b></p><p> 一、課程設(shè)計目標………………………………………………………………2</p><
3、;p> 二、任務(wù)描述……………………………………………………………………2</p><p> 三、程序總體結(jié)構(gòu)………………………………………………………………2</p><p> 四、實驗形式與分工……………………………………………………………2</p><p> 五、程序的詳細設(shè)計……………………………………………………………2</p&
4、gt;<p> 六、程序清單……………………………………………………………………2</p><p> 七、系統(tǒng)測試……………………………………………………………………2</p><p> 八、分析與討論…………………………………………………………………2</p><p> 一、課程設(shè)計目標 </p><p> 1
5、、學(xué)會用面向?qū)ο蟪绦蛟O(shè)計的思想編程。尤其是抽象、封裝、繼承和多態(tài) </p><p><b> 性等要素。 </b></p><p> 2 、注重綜合訓(xùn)練。在實際編程中,要求程序具有可讀性、實用性、可維護 </p><p> 性、可重用性和健壯性,盡量運用異常處理機制來處理程序中的錯誤。 </p><p> 3
6、、掌握多文件編程和使用文件。</p><p> 二、任務(wù)描述 </p><p> 分數(shù)計算器,進行分數(shù)的算術(shù)運算和邏輯運算。實現(xiàn)以下功能: </p><p> ?。?) 能夠像使用基本數(shù)據(jù)那樣,對分數(shù)進行算術(shù)運算和比較分數(shù)的大?。?</p><p> ?。? )以a/b 的形式輸入輸出分數(shù),允許輸入輸出整數(shù)這種特殊形式; <
7、;/p><p> ?。? )對不是約化型的分數(shù)進行約化,避免分母為負數(shù)。 </p><p> ?。? )如果分數(shù)的分母為 0、除數(shù)為 0 或輸入是格式有誤,采用異常處理機制解決。 </p><p> 三、程序總體結(jié)構(gòu) </p><p> 1、 以下為循環(huán)計算二元分數(shù)計算式的流程圖:</p><p> 在實驗中還
8、需要面對六個運算符重載,通過運算符重載,我們可以簡單的使用分數(shù)計算,而不需要關(guān)心它的結(jié)構(gòu),運算符重載,我們根據(jù)基本的數(shù)學(xué)定理,將加減乘除包裝,并重載了輸入輸出運算符,這樣,在輸入輸出時便可直接輸出用戶方便接收的格式。</p><p> 2、函數(shù)功能的實現(xiàn) </p><p> 四、實驗形式與分工 </p><p> 課題由我一人完成,有請教別人幫忙調(diào)試和修改的
9、地方。</p><p> 五、程序的詳細設(shè)計 </p><p><b> 1、主函數(shù)main</b></p><p><b> 2、函數(shù)功能的實現(xiàn)</b></p><p><b> 3、流程圖如下</b></p><p><b>
10、六、程序清單 </b></p><p> 1、源程序的設(shè)計(在此附上源程序(cpp文件)清單)</p><p> #include<iostream></p><p> #include<fstream></p><p> #include<cmath></p><
11、p> using namespace std;</p><p> //-------------------------------創(chuàng)建分數(shù)類------------------------------------</p><p> class Fraction</p><p><b> {</b></p><
12、p><b> private:</b></p><p> int nume; //分子</p><p> int deno; //分母</p><p> int Gcf(int m,int n);
13、 //輔助函數(shù),返回m和n最大公因數(shù)</p><p><b> public:</b></p><p> Fraction(int n=1,int d=1);</p><p> virtual~Fraction(){}</p><p> void Reduction();
14、 //約分</p><p> int GetNume() const{return nume;} //返回分子</p><p> int GetDeno() const{return deno;} //返回分母</p><p> void SetNume(
15、int n); //設(shè)置分子</p><p> void SetDeno(int d); //設(shè)置分母</p><p> Fraction operator+(const Fraction &a) const; //重載加法符+</p>
16、<p> Fraction operator-(const Fraction &a) const; //重載加法符-</p><p> Fraction operator*(const Fraction &a) const; //重載加法符*</p><p> Fraction operator/(const Fraction &a
17、) const;//重載加法符/</p><p><b> };</b></p><p> ostream &operator << (ostream &out,const Fraction &a); //重載輸出運算符<<</p><p> istream &oper
18、ator >> (istream &in,Fraction &a); //重載輸入運算符>></p><p> //---------------------------------最大公因數(shù)函數(shù)------------------------------</p><p> int Fraction::Gcf(int m,
19、int n)</p><p><b> {</b></p><p> if(n==0) return m; //如果n=0,m為最大公因數(shù)</p><p> else return Gcf(n,m%n);//否者輾轉(zhuǎn)相除</p><p>&
20、lt;b> }</b></p><p> //------------------------------------約分函數(shù)---------------------------------</p><p> void Fraction::Reduction()</p><p><b> {</b></p>
21、;<p> if(deno<0) //若分母小于0,將符號提前</p><p><b> {</b></p><p> nume=-nume;</p><p> deno=-deno;</p><p><b> }</b></p><
22、;p> int f=Gcf(abs(nume),deno);</p><p> nume=nume/f;//實現(xiàn)約數(shù)</p><p> deno=deno/f;</p><p><b> }</b></p><p> //-------------------------------
23、---構(gòu)造函數(shù)-----------------------------------</p><p> Fraction::Fraction(int n,int d):nume(n),deno(d)</p><p><b> {</b></p><p> if(deno==0) cout<<"分母為0"&
24、lt;<endl; //查出異常</p><p> Reduction();//約分</p><p><b> }</b></p><p> //----------------------------------設(shè)置分母函數(shù)-------------------------------</
25、p><p> void Fraction::SetNume(int n)</p><p><b> {</b></p><p><b> nume=n;</b></p><p> Reduction();</p><p><b> }</b><
26、;/p><p> //----------------------------------設(shè)置分子函數(shù)-------------------------------</p><p> void Fraction::SetDeno(int d)</p><p><b> {</b></p><p> if(d==0)
27、cout<<"分母為0"<<endl;//查出異常</p><p><b> deno=d;</b></p><p> Reduction();</p><p><b> }</b></p><p> //--------------
28、--------------------重載運算符+--------------------------------</p><p> Fraction Fraction::operator+(const Fraction &a) const</p><p><b> {</b></p><p> Fraction result;
29、</p><p> result.nume=this->nume*a.deno+this->deno*a.nume;//求和的分子</p><p> result.deno=this->deno*a.deno;//求和的分母</p><p> result.Reduction(); //約分</
30、p><p> return result; //返回和</p><p><b> }</b></p><p> //----------------------------------重載運算符---------------------------------</p><p> Fracti
31、on Fraction::operator-(const Fraction &a) const</p><p><b> {</b></p><p> Fraction result;</p><p> result.nume=this->nume*a.deno-this->deno*a.nume;//求差的分子&
32、lt;/p><p> result.deno=this->deno*a.deno;//求差的分母</p><p> result.Reduction(); //約分</p><p> return result; //返回差</p><p><b> }<
33、;/b></p><p> //----------------------------------重載運算符*--------------------------------</p><p> Fraction Fraction::operator * (const Fraction &a) const</p><p><b> {&
34、lt;/b></p><p> Fraction result;</p><p> result.nume=this->nume*a.nume;//求積的分子</p><p> result.deno=this->deno*a.deno;//求積的分母</p><p> result.Re
35、duction(); //約分</p><p> return result; //返回積</p><p><b> } </b></p><p> //----------------------------------重載運算符/----------------------------
36、----</p><p> Fraction Fraction::operator / (const Fraction &a) const</p><p><b> {</b></p><p> if(a.nume==0) cout<<"除數(shù)為0"<<endl;//如果除數(shù)為0
37、,輸出異常</p><p> Fraction result;</p><p> result.nume=this->nume*a.deno;//求商的分子</p><p> result.deno=this->deno*a.nume;//求商的分母</p><p> result.Reduct
38、ion(); //約分</p><p> return result; //返回商</p><p><b> }</b></p><p> //----------------------------------重載運算符<<--------------------------
39、------</p><p> ostream &operator << (ostream &out,const Fraction &a)</p><p><b> {</b></p><p> out<<a.GetNume()<<"/"<<a.G
40、etDeno();//按一定格式輸出分數(shù)</p><p> return out;//返回輸出流</p><p><b> }</b></p><p> //----------------------------------重載運算符>>---------------------------
41、-----</p><p> istream &operator >> (istream &in,Fraction &a)</p><p><b> {</b></p><p> char ch;//接收字符</p><p> int m,n;
42、//定義分子和分母</p><p> in>>m;//輸入分子</p><p> in>>ch;//輸入//</p><p> if(ch !='/') cout<<"非法字符"<<endl;</p>
43、<p> in>>n;//輸入分母</p><p> if(n==0) cout<<"分母為0"<<endl;//如果分母為0,輸出異常</p><p> a.SetNume(m);//設(shè)置分子</p><p> a.SetDeno
44、(n);//設(shè)置分母</p><p> a.Reduction();//約分</p><p> return in;//返回輸入流</p><p><b> }</b></p><p> int main(void)</p><
45、;p><b> {</b></p><p> Fraction obj1,obj2,result;//定義兩個分數(shù)和結(jié)果</p><p> char index,ch;//定義符號</p><p> ifstream infile("input.txt",ios::in);
46、 //以輸入的方式打開文件</p><p> if(!infile)//若文件打開失敗</p><p><b> {</b></p><p> cout<<"打開文件input.txt失??!"<<endl;</p><p>
47、<b> exit(1);</b></p><p><b> }</b></p><p> ofstream outfile("output.txt",ios::app); //以輸出的方式打開文件</p><p> if(!outfile)//若文件打開失敗<
48、;/p><p><b> {</b></p><p> cout<<"打開文件output.txt失敗"<<endl;</p><p><b> exit(1);</b></p><p><b> }</b></p>
49、<p> outfile<<"---------------------本次計算結(jié)果如下--------------------"<<endl;</p><p> for(;;)//無限次循環(huán)直到求解完成</p><p><b> {</b></p><p>
50、 infile>>obj1;//輸入第一個分數(shù)</p><p> infile>>index;//輸入需要執(zhí)行的操作符號</p><p> infile>>obj2;//輸入第二個分數(shù)</p><p> infile>>ch;//選擇
51、繼續(xù)或者計算結(jié)果</p><p> if(index=='+') result=obj1+obj2;//加法</p><p> else if(index=='-') result=obj1-obj2; //減法</p><p> else if(index=='*') result=ob
52、j1*obj2;//乘法</p><p> else if(index=='/') result=obj1/obj2;//除法</p><p><b> else </b></p><p><b> {</b></p><p> system("PA
53、USE");</p><p><b> return 0;</b></p><p><b> }</b></p><p> cout<<"正在計算"<<obj1<<" "<<index<<" &qu
54、ot;<<obj2<<"..."<<endl;;</p><p> ofstream outfile("output.txt",ios::app);</p><p> if(!outfile)</p><p><b> {</b></p><p
55、> cout<<"打開文件output.txt失敗"<<endl;</p><p><b> exit(1);</b></p><p><b> }</b></p><p> outfile<<obj1<<" "<&
56、lt;index<<" "<<obj2<<" "<<"="<<" "<<result<<endl;</p><p> //輸出結(jié)果到output.txt</p><p> cout<<"計算完成,結(jié)果保
57、存在output.txt中"<<endl<<endl;</p><p> if(ch==';') continue;//若遇到";",繼續(xù)執(zhí)行</p><p> else if(ch=='=')//若遇到"=",計算結(jié)果</p>&l
58、t;p><b> {</b></p><p> outfile<<"-------------------------謝謝使用------------------------"<<endl<<endl;</p><p><b> break;</b></p><
59、;p><b> }</b></p><p> outfile.close();//文件輸出流關(guān)閉</p><p><b> }</b></p><p> infile.close();//文件輸出流關(guān)閉</p><p> system("
60、;PAUSE");</p><p><b> return 0;</b></p><p><b> } </b></p><p><b> 七、系統(tǒng)測試 </b></p><p><b> 1、運行結(jié)果分析</b></p>
61、<p> input.txt 輸入截圖如下:</p><p><b> QQ軟件截圖如下</b></p><p> Output.txt輸出截圖如下</p><p> Input.txt、QQ軟件截圖以及output.txt 輸出截圖如下:</p><p> 2、系統(tǒng)測試調(diào)試分析 </p&g
62、t;<p> ?。?)、在VC++ 6.0環(huán)境中頭文件要改成#include<iostream.h>。</p><p> (2)、重載輸入輸出流時未加引用,導(dǎo)致輸入輸出結(jié)果錯誤,加了引用以后成功解決;</p><p> (3)、在異常處理中,格式錯誤就會顯示“非法字符”字樣;當分母是0時,會出現(xiàn)計算機內(nèi)部給出一個隨機數(shù)代替0,從而出現(xiàn)不斷的循環(huán)計算。<
63、/p><p><b> 八、分析與討論</b></p><p> 1、討論與程序的整理</p><p> 由于是一個人完成,但是有些模塊還是一個人無法完成,比如說程序出現(xiàn)報錯,有些很生疏,上網(wǎng)搜素后,按照網(wǎng)上的解釋做也不能解決的,于是就把那一個函數(shù)給刪掉了,所以函數(shù)的有些功能就沒有實現(xiàn),比如說Compare函數(shù),報錯多次無效后,就刪掉了。雖然
64、無法實現(xiàn)那個功能,但是我從自己思考分析的過程以及不會調(diào)試某些錯誤的請教中,逐步對整個流程有了一個較為全面的認識,于是就在一次次的整理中稍稍改動使之完善。</p><p><b> 2、總結(jié)與分析</b></p><p> 通過對課本的重新溫故,我們最終將可行的代碼編寫出,并在不斷地修改之下做到方便使用的要求;編碼的速度有一個從慢到快的過程,在本次試驗中,我們的速度
65、依然比較慢,這看出我們平時編碼比較少,缺乏熟練度,并對算法了解不深入;但是我們的代碼看起來仍然有些凌亂,效率還沒有帶到真正的高效,每次運行都需要等待幾秒鐘。再以后我們將通過練習基礎(chǔ)功,簡化程序代碼,實現(xiàn)簡單代碼完善功能的理想。通過此次的課程設(shè)計,我課本上所學(xué)習的有關(guān)內(nèi)容應(yīng)用到實踐當中,使我們在應(yīng)用過程中更加清楚的了解并掌握C++語言的各部分的內(nèi)容,進一步加深了對C++語言的認識與理解,尤其注重了C++語言與C語言不同的部分,同時提高了個
66、人程序設(shè)計思想,及時發(fā)現(xiàn)一些錯誤,并在調(diào)試過程中更加深刻的認識到C++語言程序的嚴謹性。在編寫程序的過程中我們會遇到很多錯誤,語法錯誤在編譯時就會被發(fā)現(xiàn),連接錯誤在連接時就會被發(fā)現(xiàn)。但程序內(nèi)部的邏輯錯誤只能由我們自己去發(fā)現(xiàn)并定位修改,在調(diào)試程序時,首先對整個程序流程有全面的認識,調(diào)試過程中需細心。同時,我們這次還利用了VC++6.0的單步調(diào)試功能,更加清楚的了解了每條語句的調(diào)用過程和結(jié)果。</p><p> 總
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計——計算器
- 計算器課程設(shè)計---計算器仿真程序設(shè)計
- c++計算器課程設(shè)計--計算器程序設(shè)計
- 面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計
- 【課程設(shè)計】面向?qū)ο蟪绦蛟O(shè)計
- 面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計
- 面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計
- 面向?qū)ο笳n程設(shè)計--模擬科學(xué)計算器
- 面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計報告
- 面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計報告
- 《面向?qū)ο蟮某绦蛟O(shè)計》課程設(shè)計
- java課程設(shè)計--java面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計
- 《面向?qū)ο蟪绦蛟O(shè)計》課程設(shè)計---java日歷
- 《面向?qū)ο蟪绦蛟O(shè)計》課程設(shè)計java日歷
- 面向?qū)ο缶幊逃?xùn)練課程設(shè)計---迷你計算器設(shè)計
- 面向?qū)ο蟮某绦蛟O(shè)計課程設(shè)計報告
- 《c#計算器程序設(shè)計》課程設(shè)計--計算器的開發(fā)與應(yīng)用
- c++面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計報告
- 面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計--火車訂票系統(tǒng)
- java計算器課程設(shè)計---計算器模擬程序
評論
0/150
提交評論