国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端實(shí)現(xiàn)科學(xué)計(jì)算器

這篇具有很好參考價(jià)值的文章主要介紹了前端實(shí)現(xiàn)科學(xué)計(jì)算器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Calculator

這個(gè)作業(yè)屬于哪個(gè)課程 https://bbs.csdn.net/forums/ssynkqtd-05
這個(gè)作業(yè)要求在哪里 https://bbs.csdn.net/topics/617294583
這個(gè)作業(yè)的目標(biāo) 完成一個(gè)具有可視化界面的計(jì)算器
其他參考文獻(xiàn)

源代碼鏈接

0. 界面展示

前端實(shí)現(xiàn)科學(xué)計(jì)算器,Front,前端

1. PSP表格

PSP Personal Software Process Stages 預(yù)估耗時(shí)(分鐘) 實(shí)際耗時(shí)(分鐘)
Planning 計(jì)劃 60 40
? Estimate ? 估計(jì)這個(gè)任務(wù)需要多少時(shí)間 15 10
Development 開發(fā) 700 850
? Analysis ? 需求分析 (包括學(xué)習(xí)新技術(shù)) 100 150
? Design Spec ? 生成設(shè)計(jì)文檔 60 75
? Design Review ? 設(shè)計(jì)復(fù)審 30 45
? Coding Standard ? 代碼規(guī)范 (為目前的開發(fā)制定合適的規(guī)范) 30 40
? Design ? 具體設(shè)計(jì) 60 90
? Coding ? 具體編碼 300 350
? Code Review ? 代碼復(fù)審 45 60
? Test ? 測(cè)試(自我測(cè)試,修改代碼,提交修改) 60 75
Reporting 報(bào)告 90 60
? Test Repor ? 測(cè)試報(bào)告 30 20
? Size Measurement ? 計(jì)算工作量 15 10
? Postmortem & Process Improvement Plan ? 事后總結(jié), 并提出過程改進(jìn)計(jì)劃 45 30
合計(jì) 850 950

2. 解題思路描述

要求實(shí)現(xiàn)一個(gè)具有圖形化界面簡(jiǎn)易計(jì)算器

  1. 編程語言選擇。原本打算使用 Java,Python 等的 GUI 框架來實(shí)現(xiàn)一個(gè)簡(jiǎn)單圖形化界面,但是界面要實(shí)現(xiàn)的好看比較困難,最后選擇 html + css + js 來實(shí)現(xiàn)。
  2. 界面設(shè)計(jì)。一般的計(jì)算器都比較簡(jiǎn)陋,要做一個(gè)比較好看的計(jì)算器需要花點(diǎn)時(shí)間來設(shè)計(jì) UI 界面,以前有開發(fā)移動(dòng)端的經(jīng)驗(yàn),看過比較多的 UI 設(shè)計(jì),這點(diǎn)比較容易。
  3. 核心功能。實(shí)現(xiàn)計(jì)算功能用 js 其實(shí)就是字符串的計(jì)算,計(jì)算邏輯的實(shí)現(xiàn)是比較困難的,特別是加上了科學(xué)計(jì)算以后。這點(diǎn)可以去 github 和 stackflow 上看看。
  4. exe打包。作業(yè)要求要生成 exe 文件,第一次遇到 html 生成 exe 的情況。查找到軟件 HTML2EXE 可以實(shí)現(xiàn)此需求(超好用)。

3. 設(shè)計(jì)與實(shí)現(xiàn)過程

項(xiàng)目由 html、css、js 完成。

  1. 將所有的按鍵及屬性裝在一個(gè)數(shù)組內(nèi),便于后續(xù)代碼的編寫

    let calculator_buttons = [
        {
            name: "square-root", symbol: "√", formula: "Math.sqrt(", type: "math_function"
        }, {
            name: "square", symbol: "x2", formula: POWER, type: "math_function"
        }
        .....
        ];
    
  2. 將輸入的字符分為 operation (顯示的字符串) 和 formula (計(jì)算使用的字符串)

    let data = {
        operation: [], formula: [],
    }
    
  3. 點(diǎn)擊等于的時(shí)候進(jìn)行計(jì)算

    function calculator(button) {
        if (button.type === 'operator') {
            data.operation.push(button.symbol)
            data.formula.push(button.formula)
        }
        	......
        else if (button.type === 'math_function') {
            let symbol, formula;
            if (button.name === 'factorial') {
                symbol = "!"
                formula = button.formula
                data.operation.push(symbol)
                data.formula.push(formula)
            } 
            ......
        } else if (button.type === 'key') {
            if (button.name === 'clear') {
                data.operation = []
                data.formula = []
                updateOutputResult(0)
            } 
            ......
        } else if (button.type === 'calculate') {
            formula_str = data.formula.join('')
            // 生成計(jì)算使用的字符串
            ......
            let result
            try {
                // 計(jì)算結(jié)果
                ......
            } catch (error) {
                if (error instanceof SyntaxError) {
                    result = "SyntaxError"
                    updateOutputResult(result)
                    return
                }
            }
            ans = result  // 保存上一次計(jì)算結(jié)果
            data.operation = [result]
            data.formula = [result]
            updateOutputResult(result)
            return
        }
        updateOutputOperation(data.operation.join(''))
    }
    
  4. 將 formula 生成計(jì)算使用的字符串

    let POWER_SEARCH_RESULT = search(data.formula, POWER)
            let FACTORIAL_SEARCH_RESULT = search(data.formula, FACTORIAL)
            const BASES = powerBaseGetter(data.formula, POWER_SEARCH_RESULT)
            BASES.forEach(base => {
                let toreplace = base + POWER
                let replacement = "Math.pow(" + base + ",";
                formula_str = formula_str.replace(toreplace, replacement)
            })
            const NUMBERS = factorialNumGetter(data.formula, FACTORIAL_SEARCH_RESULT)
            NUMBERS.forEach(number => {
                formula_str = formula_str.replace(number.toReplace, number.replacement)
            })
    

    前端實(shí)現(xiàn)科學(xué)計(jì)算器,Front,前端

  5. 由于 js 的 eval 產(chǎn)生的結(jié)果會(huì)有多數(shù)的小數(shù),這里進(jìn)行優(yōu)化,對(duì)小數(shù)取兩位小數(shù),對(duì)整數(shù)則正常輸入

    const r = /^\+?[1-9][0-9]*$/;
                result = eval(formula_str);
                if (!r.test(result)) {
                    result = parseFloat(result.toFixed(2));
                }
    

    前端實(shí)現(xiàn)科學(xué)計(jì)算器,Front,前端
    前端實(shí)現(xiàn)科學(xué)計(jì)算器,Front,前端

    1. html 生成 exe

    前端實(shí)現(xiàn)科學(xué)計(jì)算器,Front,前端

4. 程序性能改進(jìn)

  1. 字符串處理改進(jìn)

    在剛開始,對(duì)輸入的數(shù)字或者運(yùn)算符進(jìn)行簡(jiǎn)單的拼接字符串僅僅可以實(shí)現(xiàn)簡(jiǎn)單的加減乘除,難以實(shí)現(xiàn)三角函數(shù)等科學(xué)運(yùn)算。改進(jìn)之后,將顯示和計(jì)算的字符串分開存儲(chǔ),這樣便于計(jì)算操作。

  2. 減少DOM操作

    盡量減少對(duì)DOM的頻繁操作,將多個(gè)DOM操作合并成一個(gè),使用DocumentFragment來減少DOM重繪。

5. 單元測(cè)試展示

  1. 本項(xiàng)目采用 jest 進(jìn)行單元測(cè)試,這個(gè)測(cè)試框架用起來十分便利

    {
      "devDependencies": {
        "jest": "^29.7.0",
        "jsdom": "^22.1.0"
      },
      "scripts": {
        "test": "jest",
        "coverage": "jest --coverage"
      }
    }
    
    
  2. 測(cè)試代碼

    test("7 + 8 = 15", () => {
        calculator(calculator_buttons[4]) // clear
        calculator(calculator_buttons[10])  // 7
        calculator(calculator_buttons[36]) // +
        calculator(calculator_buttons[11])  // 8
        expect(document.querySelector('.operation .value').innerHTML).toBe("7+8")
        calculator(calculator_buttons[35]) // equal
        expect(document.querySelector('.result .value').innerHTML).toBe("15")
    })
    test("√(16) = 4", () => { ...... }
    test("(2 + 2)^(3) = 64", () => { ...... }
    test("exp(2) ≈ 7.39", () => { ...... }
    test("+2^(3) = 8", () => { ...... }
    
  3. 構(gòu)造數(shù)據(jù)及優(yōu)化覆蓋率

    構(gòu)造測(cè)試數(shù)據(jù)主要是計(jì)算器的運(yùn)算符都要用上,另外要注意一下比較少見的數(shù)據(jù),比如 “+2^(3) = 8”。比較偏的地方注意到了,覆蓋率就上去了

  4. 覆蓋率結(jié)果

前端實(shí)現(xiàn)科學(xué)計(jì)算器,Front,前端

6. 心路歷程與收獲

? 項(xiàng)目的初衷是創(chuàng)建一個(gè)科學(xué)計(jì)算器的Web應(yīng)用,使用戶能夠執(zhí)行基本的數(shù)學(xué)運(yùn)算,如加減乘除,以及更高級(jí)的科學(xué)計(jì)算。在實(shí)現(xiàn)過程中我意識(shí)到用戶界面對(duì)于計(jì)算器的吸引力和可用性至關(guān)重要,因此,我花了一些時(shí)間完成了一個(gè)直觀且美觀的UI。

? 通過這個(gè)項(xiàng)目,我學(xué)到了很多關(guān)于前端開發(fā)的知識(shí)和技巧,提高了HTML、CSS和JavaScript編程的能力,學(xué)會(huì)了如何創(chuàng)建具有可視化界面的Web應(yīng)用。此外,我還學(xué)會(huì)了如何設(shè)計(jì)用戶友好的界面,并如何進(jìn)行測(cè)試和調(diào)試以確保應(yīng)用的質(zhì)量。文章來源地址http://www.zghlxwxcb.cn/news/detail-722229.html

到了這里,關(guān)于前端實(shí)現(xiàn)科學(xué)計(jì)算器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端——編寫一個(gè)簡(jiǎn)易網(wǎng)頁計(jì)算器

    前端——編寫一個(gè)簡(jiǎn)易網(wǎng)頁計(jì)算器

    如下圖效果所示,輸入兩個(gè)運(yùn)算數(shù),點(diǎn)擊不同的運(yùn)算符,會(huì)在下方得到不同的運(yùn)算結(jié)果 分析與代碼實(shí)現(xiàn) 在HTML部分,定義了一個(gè)標(biāo)題為\\\"網(wǎng)頁計(jì)算器\\\"的網(wǎng)頁,并創(chuàng)建了兩個(gè)輸入框和四個(gè)按鈕。最后,創(chuàng)建了一個(gè)只讀的結(jié)果顯示框,便于計(jì)算結(jié)果的輸出 在JavaScript部分,定義了一

    2024年01月24日
    瀏覽(28)
  • Web前端開發(fā) 小實(shí)訓(xùn)(二) 簡(jiǎn)易計(jì)算器

    Web前端開發(fā) 小實(shí)訓(xùn)(二) 簡(jiǎn)易計(jì)算器

    學(xué)生能夠使用函數(shù)完成簡(jiǎn)易計(jì)算器編寫 中文 英語 加法 add 減法 subtract 乘法 multi 除法 division 次冪 pow() 平方根 sqrt() 提示: 除法中的除數(shù)不能為0! 參考代碼: 參考代碼 步驟3-4參考代碼 申明方法后,在每個(gè)分支后調(diào)用 最后直接調(diào)用運(yùn)行頁面 因面向的是初學(xué)Web前端課程的學(xué)生

    2024年04月28日
    瀏覽(32)
  • Java 實(shí)現(xiàn)計(jì)算器

    Java 實(shí)現(xiàn)計(jì)算器

    *使用Java語言編寫一個(gè)能實(shí)現(xiàn)“加、減、乘、除”四則運(yùn)算的計(jì)算器程序。* 要求: (1)在程序中要體現(xiàn)面向?qū)ο缶幊陶Z言的三大特征:封裝、繼承和多態(tài)。 (2)該程序要易于擴(kuò)展和復(fù)用。以后可以方便地增加新的運(yùn)算;程序的業(yè)務(wù)邏輯與界面部分要實(shí)現(xiàn)分離,便于業(yè)務(wù)邏

    2024年02月12日
    瀏覽(21)
  • Android計(jì)算器實(shí)現(xiàn)

    Android計(jì)算器實(shí)現(xiàn)

    這個(gè)項(xiàng)目是一個(gè)簡(jiǎn)單的計(jì)算器應(yīng)用,它可以執(zhí)行加、減、乘、除四種基本運(yùn)算等計(jì)算器的基本功能。我們將使用Android Studio作為開發(fā)工具。 1. 在Android Studio中創(chuàng)建新的Android項(xiàng)目。 2. 在布局文件(`activity_main.xml`)中,我們將添加一個(gè)按鈕和一個(gè)用于顯示結(jié)果的文本視圖。 3. 在

    2024年02月07日
    瀏覽(27)
  • 實(shí)現(xiàn)復(fù)數(shù)計(jì)算器

    實(shí)現(xiàn)復(fù)數(shù)計(jì)算器

    ????????本論文描述了一個(gè)復(fù)數(shù)計(jì)算器的設(shè)計(jì)和實(shí)現(xiàn),旨在擴(kuò)展傳統(tǒng)計(jì)算器的功能,以支持復(fù)數(shù)的加法、減法、乘法和除法。通過使用Java編程語言和Swing圖形用戶界面庫,我們創(chuàng)建了一個(gè)直觀、易于使用的界面,允許用戶輸入復(fù)數(shù),并執(zhí)行基本的算術(shù)運(yùn)算。 ????????計(jì)

    2024年02月02日
    瀏覽(24)
  • pyqt 實(shí)現(xiàn)計(jì)算器

    pyqt 實(shí)現(xiàn)計(jì)算器

    文件名為:untitled.py QApplication: QApplication 類管理圖形用戶界面應(yīng)用程序的控制流和主要設(shè)置。 可以說 QApplication是Qt的整個(gè)后臺(tái)管理的命脈 app = QApplication(sys.argv)這句作用用來初始化窗口系統(tǒng)? app.exec(): app.exec_()的作用是運(yùn)行主循環(huán),必須調(diào)用此函數(shù)才能開始事件處理,調(diào)用該

    2024年02月16日
    瀏覽(23)
  • verilog實(shí)現(xiàn)計(jì)算器設(shè)計(jì)

    verilog實(shí)現(xiàn)計(jì)算器設(shè)計(jì)

    該實(shí)驗(yàn)為用verilog編寫的一個(gè)運(yùn)算系統(tǒng),其功能是實(shí)現(xiàn)4位整數(shù)的加、減、乘、除運(yùn)算。運(yùn)算時(shí)通過矩陣鍵盤輸入運(yùn)算類型和運(yùn)算所需要的數(shù)據(jù),然后通過內(nèi)部電路處理,將計(jì)算的結(jié)果送于數(shù)碼管或LCD1602顯示。 工程截圖如下: 本設(shè)計(jì)分為兩個(gè)子模塊,按鍵輸入和數(shù)碼管輸出。

    2024年01月16日
    瀏覽(19)
  • Qt實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    Qt實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    三級(jí)項(xiàng)目想用Qt做界面。 為了熟悉一下Qt操作,歷時(shí)8h做了個(gè)計(jì)算器。 沒用到數(shù)據(jù)庫,布的控件也比較簡(jiǎn)單。 所以calculator.pro和widget.ui就不放了(太長(zhǎng)了占地方) 文件壓縮包放在下一篇了,需要自取。 自學(xué)時(shí)間較短,有很多不足歡迎指正。 ?:del按鍵上的圖片用的是絕對(duì)路

    2024年02月11日
    瀏覽(29)
  • 【Python】簡(jiǎn)單計(jì)算器實(shí)現(xiàn)(四)

    解決思路: 最后,我們來看看最簡(jiǎn)單的運(yùn)算函數(shù)和判斷運(yùn)算符函數(shù)。 定義函數(shù): def calculate(n1, n2, operator) param n1: float param n2: float param operator: + - * / return: float 定義函數(shù): def is_operator(e) param e: str return: bool 最后的調(diào)用 這里定義了兩個(gè)變量 result 和 _ 來接收 final_calc 返回的兩個(gè)

    2024年02月16日
    瀏覽(21)
  • 模擬實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包