VC++ 多功能計(jì)算器
《VC++ 多功能計(jì)算器》由會(huì)員分享,可在線閱讀,更多相關(guān)《VC++ 多功能計(jì)算器(24頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 課程設(shè)計(jì)說(shuō)明書(shū) NO.24 多功能計(jì)算器 1、課程設(shè)計(jì)的目的 本課程設(shè)計(jì)以《VC++程序設(shè)計(jì)》課程為基礎(chǔ),目的是進(jìn)一步培養(yǎng)學(xué)生綜合應(yīng)用VC++的各種編程知識(shí)和技巧進(jìn)行程序設(shè)計(jì)的能力,最終掌握面向?qū)ο蟮木幊碳夹g(shù)。通過(guò)本次課程設(shè)計(jì),學(xué)生應(yīng)能達(dá)到具備設(shè)計(jì)功能較為復(fù)雜的Windows應(yīng)用程序的能力,同時(shí)培養(yǎng)學(xué)生自主學(xué)習(xí)和獨(dú)立創(chuàng)新的精神。 系統(tǒng)地學(xué)習(xí)面向?qū)ο缶幊趟枷耄私釳FC架構(gòu),逐步熟悉可視化編程環(huán)境Visual C++,加深對(duì)面向?qū)ο缶幊痰乃枷氲恼J(rèn)識(shí)。能夠獨(dú)立的完成一個(gè)簡(jiǎn)單的編程,實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器的編程和應(yīng)用,從而更深入的了解Visual C++的工作原
2、理。 2、功能描述 在Visual C++環(huán)境下設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器系統(tǒng),該計(jì)算器應(yīng)能實(shí)現(xiàn)如下功能: 1)、二進(jìn)制、八進(jìn)制、十進(jìn)制及十六進(jìn)制數(shù)的加、減、乘、除、乘方、取模等簡(jiǎn)單計(jì)算 2)、科學(xué)計(jì)算函數(shù),包括(反)正弦、(反)余弦、(反)正切、(反)余切、開(kāi)方、指數(shù)等函數(shù)運(yùn)算 3)、以角度、弧度兩種方式實(shí)現(xiàn)上述部分函數(shù) 4)、具備歷史計(jì)算的記憶功能 5)、對(duì)不正確的表達(dá)式能指出其錯(cuò)誤原因 3、案論論證 3.1、可行性分析 本設(shè)計(jì)是簡(jiǎn)單計(jì)算器。日常計(jì)算機(jī)使用中,常常涉及到一些有關(guān)計(jì)算的問(wèn)題,一個(gè)小型的計(jì)算器軟件變得非常有用,該校型計(jì)算器需要空間資源較少,對(duì)電腦其他程序的應(yīng)用
3、影響較小。它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面、必要的交互信息和較好的健壯性;醒目美觀的軟件封面。使用人員能快捷簡(jiǎn)單地進(jìn)行操作。即時(shí)準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了時(shí)間,對(duì)人們的生活有一定的幫助 3.2、需求分析 本軟件主要用于計(jì)算機(jī)windows 2000/XP以上版本的用戶(hù)的使用,這次課程設(shè)計(jì)一般是實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的功能。要程序能實(shí)現(xiàn):加,減,乘,除,開(kāi)方,倒數(shù)等運(yùn)算功能;還要實(shí)現(xiàn)數(shù)據(jù)的輸入,輸出,計(jì)算,顯示及程序退出等功能。另外還可以實(shí)現(xiàn)多種科學(xué)計(jì)算的功能,如:三角函數(shù)的計(jì)算,弧度與角度間的轉(zhuǎn)換,對(duì)數(shù)指數(shù)的計(jì)算等等。 3.3、總體方案設(shè)計(jì) (
4、1)功能框架 圖1 功能框架圖 (2)主要功能原理: ①正弦、余弦、正切、余切函數(shù): 制度的選擇,程序運(yùn)行默認(rèn)制度選中角度,當(dāng)選項(xiàng)中“角度”按鈕時(shí),則需將其轉(zhuǎn)換為角度計(jì)算,由公式:弧度=PI*角度/180,可將表達(dá)式中角度轉(zhuǎn)換為弧度既s[ll-1]=PI*s[ll-1]/180。對(duì)于反、正余弦和反正余切,由于C++math.h庫(kù)函數(shù)提供的計(jì)算結(jié)果是弧度的,所以當(dāng)選中默認(rèn)的“弧度”按鈕時(shí)可不必將計(jì)算結(jié)果轉(zhuǎn)換,當(dāng)選中“角度”按鈕時(shí),則由公式:角度=弧度*180/PI,既可計(jì)算出來(lái)。 ②實(shí)現(xiàn)進(jìn)制間浮點(diǎn)數(shù)的轉(zhuǎn)換 對(duì)不同進(jìn)制的輸入,將其轉(zhuǎn)換為十進(jìn)制數(shù)后出入,顯示時(shí)轉(zhuǎn)換為所選擇的進(jìn)
5、行輸出。 所以進(jìn)制間的轉(zhuǎn)換輸出,其實(shí)只是將已存的那個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為其他進(jìn)制輸出。 ③歷史計(jì)算的記憶功能 對(duì)(和),使用一個(gè)運(yùn)算符棧和一個(gè)操作數(shù)棧存儲(chǔ)。按(時(shí),進(jìn)棧保存;按)時(shí),出棧運(yùn)算。 對(duì)MC、MR、MS、M+,使用一個(gè)浮點(diǎn)數(shù)存儲(chǔ)中間值,MC為將其清零,MR為讀取其值,MS為保存、M+為在原有值的基礎(chǔ)上加當(dāng)前值。 3.4、詳細(xì)設(shè)計(jì) (1)進(jìn)行開(kāi)始編程前的數(shù)據(jù)結(jié)構(gòu)分析: double m_mem; //中間值 bool m_IsHudu; //弧度、角度判斷 void init(); CRect rectSmall; CRect rectLa
6、rge; double base; //進(jìn)制基數(shù) double m_operand; //存儲(chǔ)當(dāng)前輸入的操作數(shù) double m_accum; //存儲(chǔ)當(dāng)前的計(jì)算處理結(jié)果 bool m_bCoff; //表示當(dāng)前輸入是否是小數(shù) double m_coff; //小數(shù)輸入是的系數(shù) Operator m_operator; //當(dāng)前運(yùn)算符 CalcError m_errorState; //當(dāng)前運(yùn)算狀態(tài) bool m_bOperandAvail; //表示當(dāng)前是否是新輸入數(shù)字 (2)界面設(shè)計(jì),將要實(shí)現(xiàn)的按鍵添加入: (3)添加按鍵函數(shù)
7、: void CCalculatorDlg::OnAdd() // 加 void CCalculatorDlg::OnAddMi() // +/- void CCalculatorDlg::OnBackspace() // Backspace void CCalculatorDlg::OnClear() // 清除 void CCalculatorDlg::OnClearE() // 清除當(dāng)前 void CCalculatorDlg::OnDivid() // 除 void CCalculatorDlg::OnEqual()
8、// 等于 void CCalculatorDlg::OnMimus() // 減 void CCalculatorDlg::OnMod() // 取模 void CCalculatorDlg::OnMultiply() // 乘 void CCalculatorDlg::OnPoint() // 小數(shù)點(diǎn) void CCalculatorDlg::OnX2() // 平方 void CCalculatorDlg::OnSin() //sin函數(shù) void CCalculatorDlg::OnTan() // tan函數(shù)
9、 void CCalculatorDlg::OnMs() //覆蓋記憶 void CCalculatorDlg::OnMr() //讀記憶 void CCalculatorDlg::OnMc() //清零記憶 void CCalculatorDlg::OnMadd() //增加記憶 void CCalculatorDlg::OnLog() //log函數(shù) void CCalculatorDlg::OnLn() //ln函數(shù) void CCalculatorDlg::OnCot() //cot函數(shù) void CCalcula
10、torDlg::OnCos() //cos函數(shù) void CCalculatorDlg::OnSqrt() //開(kāi)方 void CCalculatorDlg::OnXy() //X的Y次方 等等… (4)完善功能: 增加如下函數(shù)實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換: char change(int a) //將整數(shù)轉(zhuǎn)換為字符 { if(a < 10) return '0'+a; else return 'A'+a-10; } CString ToCString(int base, double m_operand) //將double(根據(jù)基
11、數(shù)base)轉(zhuǎn)換為CString { CString temp = "", temp2; if(m_operand == 0) return "0"; __int64 operand = (__int64)m_operand; m_operand = m_operand - operand; //整數(shù)部分 while(operand){ temp2.Format("%c", change((int)(operand%base))); temp = temp2 + temp; operand /= base; } temp = temp
12、+ "."; //小數(shù)部分 while(m_operand > 10e-10){ m_operand *= base; operand = (__int64)m_operand; temp2.Format("%c", change((int)operand)); temp = temp + temp2; m_operand = m_operand - operand; } return temp; } double change2(char a) //將字符轉(zhuǎn)換為浮點(diǎn)數(shù) { if(a >= '0' && a <= '9')
13、 return (double) (a - '0'); else return (double) (a - 'A'); } double ToDouble(double base, CString str, int &k) //將CString(根據(jù)基數(shù)base)轉(zhuǎn)換為double //k為標(biāo)志是否刪除了小數(shù)點(diǎn) { double num = 0.0; double temp = 1.0/base; int len = str.GetLength(), i = 0; k = 0; //整數(shù)部分 while(i < len){ if(str.G
14、etAt(i) == '.') break; num = num*base + change2(str.GetAt(i)); i++; } i++; if(i >= len) k = 1; //小數(shù)部分 while(i < len){ num = num + change2(str.GetAt(i)) * temp; temp *= 1.0/base; i++; } return num; } 加入出錯(cuò)處理: if(m_errorState != ErrNone){ if(m_errorState == Er
15、rDivideByZero) m_Edit = "除數(shù)不能為零"; else if(m_errorState == ErrModFloat) m_Edit = "浮點(diǎn)數(shù)不能取mod"; else if(m_errorState == ErrTanMax) m_Edit = "tan為無(wú)窮大"; else if(m_errorState == ErrCotMin) m_Edit = "cot為無(wú)窮大"; else if(m_errorState == ErrLogSign) m_Edit = "不可以對(duì)負(fù)數(shù)取對(duì)數(shù)"; }
16、 (5)增加方便用戶(hù)功能: 加入加速鍵: 圖2 增加控件圖 4、運(yùn)行結(jié)果 (1)基本計(jì)算器的運(yùn)行效果如圖3所示 圖3 基本計(jì)算器的運(yùn)行圖 (2)科學(xué)計(jì)算器的運(yùn)行效果如圖4所示 圖4 科學(xué)計(jì)算器運(yùn)行效果圖 (3)不可以對(duì)浮點(diǎn)數(shù)進(jìn)行取模運(yùn)算,例如9.2 mod 9.2=?。運(yùn)行結(jié)果如圖5所示 圖5 浮點(diǎn)數(shù)不能取摸示意圖 (4)不可以對(duì)90度角進(jìn)行正切操作。Tan 90=?。運(yùn)行結(jié)果如圖6所示。 圖6 90度角不能進(jìn)行正切操作
17、示意圖 (5)不可以對(duì)0度角進(jìn)行取余切操作。Cot0=?。運(yùn)行結(jié)果如圖7所示 圖7 0度角不能取余示意圖 (6)不可以對(duì)負(fù)數(shù)求對(duì)數(shù)。例如Ln -9=?。運(yùn)行結(jié)果如圖8所示 圖8 對(duì)數(shù)不可求對(duì)數(shù)示意圖 (7)不可以對(duì)負(fù)數(shù)進(jìn)行開(kāi)方。運(yùn)行結(jié)果如圖9所示 圖9 負(fù)數(shù)不能開(kāi)方示意圖 5、心得體會(huì) C++是一種面對(duì)對(duì)象的編程語(yǔ)言,它跟我們大一學(xué)習(xí)的面向過(guò)程語(yǔ)言C++有很大的不同。在C語(yǔ)言中完全沒(méi)有類(lèi)這個(gè)概念,平時(shí)用的最多的就是數(shù)組和結(jié)構(gòu)體。但面向?qū)ο蟮恼Z(yǔ)言就不同了,在軟件的開(kāi)發(fā)過(guò)程中,
18、我們可以通過(guò)編寫(xiě)各種各樣不同功能的類(lèi)去實(shí)現(xiàn)我們所想要的功能。而且我們還可以把這些類(lèi)保存起來(lái),這樣,當(dāng)我們以后要用到的時(shí)候把它加入到工程里面就可以用了。而且,對(duì)于以前的一些類(lèi),加入它有一些功能我們想拿來(lái)用,但是又想在此基礎(chǔ)上增加一些新的功能,這怎么辦呢?我們可以通過(guò)重載這個(gè)類(lèi),然后加入我們想要的東西,那么在軟件開(kāi)發(fā)功能中就可以節(jié)省很多的時(shí)間,提高軟件開(kāi)發(fā)的效率。 剛看到這個(gè)課程設(shè)計(jì)題目的時(shí)候,我認(rèn)為要實(shí)現(xiàn)起來(lái)并不難。但當(dāng)我開(kāi)始做的時(shí)候,發(fā)現(xiàn)這遠(yuǎn)沒(méi)有我想的那么簡(jiǎn)單,反而是越做越難。這并不是擺一些控件,添加響應(yīng)就可以實(shí)現(xiàn)的了。就拿最簡(jiǎn)單的加、減、乘、除來(lái)說(shuō)吧。在進(jìn)行設(shè)計(jì)的時(shí)候,我除了要實(shí)現(xiàn)基本的兩
19、個(gè)數(shù)進(jìn)行簡(jiǎn)單的四則運(yùn)算外,還要實(shí)現(xiàn)他們連加、連減等。對(duì)于除法還要考慮除數(shù)不能為零這種情況。在進(jìn)行科學(xué)計(jì)算這些功能設(shè)計(jì)的時(shí)候,我發(fā)現(xiàn)用常規(guī)的方法并不能滿(mǎn)足我的要求。為了判斷一個(gè)表達(dá)式的正誤還有運(yùn)算的優(yōu)先級(jí),我必須用到一個(gè)堆棧。為了實(shí)現(xiàn)堆棧這個(gè)數(shù)據(jù)結(jié)構(gòu),我花了不少時(shí)間在上面。而對(duì)于個(gè)別的功能,我是手工寫(xiě)出函數(shù)處理的。 在此次實(shí)驗(yàn),我掌握面向?qū)ο蠹夹g(shù)相關(guān)的一些軟件開(kāi)發(fā)技術(shù)。利用MFC類(lèi)庫(kù)開(kāi)發(fā)Windows應(yīng)用程序,消息映射是如何工作的。代碼編寫(xiě)能力又有了進(jìn)一步的提高。 參考文獻(xiàn) [1] 劉於勛等.C++程序設(shè)計(jì). [M].科學(xué)出版社,2007 [2] 榮欽科技
20、.Visual C++游戲編程基礎(chǔ). [M].電子工業(yè)出版社,2004 [3] 揣錦華.面向?qū)ο蟪绦蛟O(shè)計(jì)與VC++實(shí)踐. [M].西安電子科技大學(xué)出版社,2005 [4] 羅偉堅(jiān).Visual C++經(jīng)典游戲程序設(shè)計(jì). [M].人民郵電出版社,2006 [5]《Visual C ++ 程序設(shè)計(jì)—基礎(chǔ)與實(shí)例分析》,朱晴婷,黃海鷹,陳蓮君,[M].清華大學(xué)出版社 [6]《Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)(第2版)》,黃維通,[M].清華大學(xué)出版社 [7] 劉振安、劉燕君、孫忱,《C++語(yǔ)言課程設(shè)計(jì)》,[M].機(jī)械工業(yè)出版社,2007年 [8] 嚴(yán)華峰. Visual C++
21、課程設(shè)計(jì)案例精編. [M].北京:中國(guó)水利水電出版社,2002
[9] 張宏軍,黨留群,趙天巨.Visual C++ 6.0編程案例精解.[M].北京:電子工業(yè)出版社,2005
附錄:
部分程序源代碼
//stack.h標(biāo)準(zhǔn)的堆棧模板程序(頭文件)
#if !defined(STACK_H)
#define STACK_h
#include
22、class T> class Stack { private: T stacklist[MaxStackSize]; //堆棧的最大尺寸 int top; public: Stack(); void Push(const T& item); //壓棧 T Pop(); //出棧 void ClearStack(); //清空堆棧 T Peek() const; //輸出堆棧頂部元素(計(jì)算結(jié)果) int StackEmpty() const
23、; //判斷堆棧是否為空
int StackFull() const; //判斷堆棧是否已滿(mǎn)
};
//構(gòu)造函數(shù),將top置-1
template 24、p++;
stacklist[top]=item; //不滿(mǎn)則壓棧
}
//出棧
template 25、清棧
template 26、class T>
int Stack 27、
char c;
T newoperand;
while (cin>>c,c!='=')
{
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case '^':
Compute1(c);
break;
default:
//非運(yùn)算符,則必為操作數(shù),將字符送回
cin.putback(c);
//讀入操作數(shù)并將其存入棧中
cin>>newoperand;
Enter(newoperand);
break;
}
28、}
//答案已在棧頂,用peek輸出之
if (!S.StackEmpty())
cout<<"結(jié)果是:"< 29、
S.ClearStack();
cout<<" \n";
Enter(N); //將N存放到棧中
switch(d)
{
case 'T':
S.Push(tan(N));//正切計(jì)算
break;
case 'S':
S.Push(sin(N));//正弦計(jì)算
break;
case 'c':
S.Push(cos(N));//余弦計(jì)算
break;
default:
30、 S.ClearStack();
break;
}
f (!S.StackEmpty())
cout<<"結(jié)果是:"< 31、#############"< 32、,重新輸入
{cout<<" Error node,please choose again!"< 33、#########"< 34、數(shù)
break;
case 2:
kaifang(A);//開(kāi)方的具體運(yùn)算函數(shù)
break;
case 3:
jiecheng(A);//階乘的具體運(yùn)算函數(shù)
break;
default:
cout<<"Continue?………………(y or N)"< 35、alcualator 36、
cout<<"* 請(qǐng)輸入所選擇的運(yùn)算: **"<
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第七章-透射電子顯微鏡
- 群落的結(jié)構(gòu)(課件)
- 焊接基礎(chǔ)知識(shí)
- 水文地質(zhì)學(xué)課件
- 某公司員工工傷安全管理規(guī)定
- 消防培訓(xùn)課件:安全檢修(要點(diǎn))
- 某公司安全生產(chǎn)考核與獎(jiǎng)懲辦法范文
- 安全作業(yè)活動(dòng)安全排查表
- 某公司危險(xiǎn)源安全辨識(shí)、分類(lèi)和風(fēng)險(xiǎn)評(píng)價(jià)、分級(jí)辦法
- 某公司消防安全常識(shí)培訓(xùn)資料
- 安全培訓(xùn)資料:危險(xiǎn)化學(xué)品的類(lèi)別
- 中小學(xué)寒假學(xué)習(xí)計(jì)劃快樂(lè)度寒假充實(shí)促成長(zhǎng)
- 紅色插畫(huà)風(fēng)輸血相關(guān)知識(shí)培訓(xùn)臨床輸血流程常見(jiàn)輸血不良反應(yīng)
- 14.應(yīng)急救援隊(duì)伍訓(xùn)練記錄
- 某公司各部門(mén)及人員安全生產(chǎn)責(zé)任制