日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

基于WPF的科学计算器程序

發(fā)布時(shí)間:2024/1/8 asp.net 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于WPF的科学计算器程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基于WPF的科學(xué)計(jì)算器程序

  • 1.前言
  • 2.界面展示
    • 2.1標(biāo)準(zhǔn)計(jì)算器界面
    • 2.2科學(xué)計(jì)算器界面
  • 3.功能分析
  • 4.代碼實(shí)現(xiàn)
    • 4.1窗體拖動(dòng)
    • 4.2界面切換
    • 4.3運(yùn)算符優(yōu)先級(jí)
    • 4.4功能函數(shù)
  • 5.結(jié)語(yǔ)

1.前言

????????Windows實(shí)驗(yàn)課程需要根據(jù)老師發(fā)布的文檔選擇一個(gè)項(xiàng)目完成,考慮復(fù)習(xí)月時(shí)間比較緊張以及項(xiàng)目的可行性,因此選擇了計(jì)算器程序。
????????本次實(shí)驗(yàn)利用WPF構(gòu)建程序界面,調(diào)用dll進(jìn)行運(yùn)算,并在界面顯示運(yùn)算結(jié)果。在完成基本要求的前提下,實(shí)現(xiàn)了科學(xué)計(jì)算器的部分功能。
????????PS:本實(shí)驗(yàn)所創(chuàng)建的窗體項(xiàng)目類型為:Windows窗體應(yīng)用(.Net Framework),動(dòng)態(tài)鏈接庫(kù)項(xiàng)目類型為:類庫(kù)(.Net Framework)(熟悉visual studio的盆友應(yīng)該比較清楚)。

2.界面展示

????????本實(shí)驗(yàn)計(jì)算器程序的界面基于WPF,包含標(biāo)準(zhǔn)計(jì)算器和科學(xué)計(jì)算器兩個(gè)界面,以擴(kuò)大計(jì)算器程序的適用性。 標(biāo)準(zhǔn)計(jì)算器界面和科學(xué)計(jì)算器界面通過(guò)tabControl控件進(jìn)行切換,方便快捷。界面上方左側(cè)為本計(jì)算器程序的logo,即:“Calc”,為計(jì)算器英文簡(jiǎn)寫(xiě)。

2.1標(biāo)準(zhǔn)計(jì)算器界面

????????標(biāo)準(zhǔn)計(jì)算器界面背景設(shè)置為黑色,不同區(qū)域的按鈕設(shè)置為不同的顏色,給人更直觀的視覺(jué)效果。由于隱藏了窗體狀態(tài)欄,因此將退出程序的功能集成為程序按鈕的點(diǎn)擊事件,即“Exit”按鈕;直接點(diǎn)擊鼠標(biāo)左鍵滑動(dòng),即可拖動(dòng)窗體,以改變窗體的位置。
????????該計(jì)算器程序總體風(fēng)格仿照蘋(píng)果手機(jī)端計(jì)算器,布局方面運(yùn)用到了Grid以及Grid的嵌套,以實(shí)現(xiàn)區(qū)域的劃分以及按鈕的對(duì)齊。如上圖所示,文本框設(shè)置為兩個(gè),分別顯示歷史輸入以及當(dāng)前輸入。在xmal文件中定義了按鈕的樣式,使按鈕的形狀變?yōu)閳A形,同時(shí)賦予了按鈕點(diǎn)擊時(shí)的動(dòng)作反饋,即點(diǎn)擊時(shí)按鈕顏色發(fā)生變化,增強(qiáng)了人機(jī)交互性。

2.2科學(xué)計(jì)算器界面

????????科學(xué)計(jì)算器在標(biāo)準(zhǔn)計(jì)算器的基礎(chǔ)上增加了很多新的功能,比如:三角函數(shù)、次方、開(kāi)根號(hào)、階乘等,因此額外添加了一些新的按鍵。值得一提的是,由于使用了tabControl控件,科學(xué)計(jì)算器界面無(wú)法重用標(biāo)準(zhǔn)計(jì)算器界面定義的輸入欄以及按鈕。科學(xué)計(jì)算器界面按鈕排布為:7×5,同樣的,給不同區(qū)域的按鈕賦予了不同的顏色。
????????由于科學(xué)計(jì)算器功能較多,全部功能均表現(xiàn)在界面上,容易導(dǎo)致界面按鈕過(guò)多,很不美觀。因此,這里借鑒了已有的方案,即設(shè)置第二功能鍵,點(diǎn)擊“2nd”按鈕,切換部分按鍵的功能,在實(shí)現(xiàn)擴(kuò)展功能的同時(shí),兼顧界面的視覺(jué)效果。

3.功能分析

????????功能分析這部分就不寫(xiě)那么詳細(xì)了(其實(shí)是比較懶,實(shí)驗(yàn)報(bào)告上肯定不能怠慢),總結(jié)一下實(shí)現(xiàn)的功能吧:基本算術(shù)運(yùn)算、數(shù)據(jù)類型兼容(整形、浮點(diǎn)型)、正負(fù)數(shù)、小括號(hào)、取余運(yùn)算、三角函數(shù)、反三角函數(shù)、次方開(kāi)方運(yùn)算、對(duì)數(shù)階乘運(yùn)算以及刪除回退和錯(cuò)誤提示的功能,大概就這樣。
????????放幾張圖看一下吧(放太多的話讀著可能不太方便,這里就放三張吧):


4.代碼實(shí)現(xiàn)

????????OKK,終于到代碼了,這個(gè)實(shí)驗(yàn)雖然簡(jiǎn)單但代碼還是不少了,全部貼出來(lái)估計(jì)看的人也會(huì)抓狂吧,因此這里簡(jiǎn)要分析一下關(guān)鍵代碼,有助于大家理解整個(gè)項(xiàng)目,本實(shí)驗(yàn)全部代碼放在Github。

4.1窗體拖動(dòng)

????????本次實(shí)驗(yàn),為了美化窗體,去除了窗體狀態(tài)欄,因此需要實(shí)現(xiàn)窗體拖動(dòng)的方法。

//狀態(tài)欄隱藏后窗體拖動(dòng)private void Window_MouseMove(object sender, MouseEventArgs e){//解決此報(bào)錯(cuò):調(diào)度程序進(jìn)程已掛起,但消息仍在處理中if (e.LeftButton == MouseButtonState.Pressed) {Dispatcher.BeginInvoke(new Action(() => {this.DragMove();}));}}

4.2界面切換

????????本項(xiàng)目實(shí)現(xiàn)了標(biāo)準(zhǔn)計(jì)算器和科學(xué)計(jì)算器,當(dāng)進(jìn)行切換時(shí),為了重用標(biāo)準(zhǔn)計(jì)算器的按鈕點(diǎn)擊事件,需要對(duì)文本框進(jìn)行賦值。

//當(dāng)選項(xiàng)卡發(fā)生變化時(shí)private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e){if (tabControl.SelectedIndex == 0) //界面一,即標(biāo)準(zhǔn)計(jì)算器{this.Result = TempResult;this.Input = TempInut;}if (tabControl.SelectedIndex == 1) //界面二,即科學(xué)計(jì)算器{this.Result = this.Result1;this.Input = this.Input1;} }

4.3運(yùn)算符優(yōu)先級(jí)

????????根據(jù)運(yùn)算符類型返回運(yùn)算符的優(yōu)先級(jí),用于確定運(yùn)算符的入棧順序。

private int OperatorLevel(string op) //返回運(yùn)算符優(yōu)先級(jí){int level = 0;switch (op){case "+": level = 0; break;case "-": level = 0; break;case "*": level = 1; break;case "/": level = 1; break;case "%": level = 1; break;case "1/x": level = 1; break;case "^": level = 2; break;case "!": level = 3; break;case "√": level = 3; break;case "log(":case "ln(":case "sin(":case "cos(":case "tan(":case "sin-1(":case "cos-1(":case "tan-1(": level = 4; break;}return level;}

4.4功能函數(shù)

????????算法邏輯實(shí)現(xiàn)部分需要分析界面輸入的數(shù)據(jù),將數(shù)字放入數(shù)字棧,將運(yùn)算符放入符號(hào)棧,因此需要判斷某一字符串是否為數(shù)字。

private bool isNumberic(string value) //判斷元素是否為數(shù)字{if (value == "e" || value == "π") //圓周率return true;for (int i = 0; i < value.Length; i++){if (i == 0){if (!isNumber(value[i])){if ((value[i] == '+' || value[i] == '-') && value.Length != 1)continue;elsereturn false;}}else{if (!isNumber(value[i]))return false;}}return true;}private bool isNumber(char value){if ('0' <= value && value <= '9' || value == '.')return true;return false;}

5.結(jié)語(yǔ)

????????本項(xiàng)目還有一些可以改進(jìn)的地方,比如增加錯(cuò)誤提示的類型,本實(shí)驗(yàn)錯(cuò)誤提示僅有:“Divisor cannot be zero”、“Invalid input”以及“Error”。
????????另一點(diǎn)是本項(xiàng)目可以新增一個(gè)界面——程序員計(jì)算器,新增界面很簡(jiǎn)單,即對(duì)tabControl新增一個(gè)item,然后進(jìn)行按鍵的布局以及功能的實(shí)現(xiàn)。由于當(dāng)時(shí)復(fù)習(xí)時(shí)間有限,就沒(méi)有做這個(gè)界面,大家有興趣可以嘗試一下。
????????PS:窗體應(yīng)用項(xiàng)目????????算法實(shí)現(xiàn)項(xiàng)目

總結(jié)

以上是生活随笔為你收集整理的基于WPF的科学计算器程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。