分享

(1)用批处理让DOS运算加法减法乘法除法

 nxhujiee 2021-10-14

@echo off
title DOS计算器—by blackboy
mode con: cols=45 lines=20
setlocal enabledelayedexpansion

REM 开始界面
:begin
cls
color 0a
echo.
echo                ╭——————╮
echo        ╭———┤ DOS 计算器 ├———╮
echo        │      ╰——————╯     
echo        │             =by x2009.cn= 
echo        │                           
echo        │          请选择:          
echo        │                           
echo        │      1 – 普通+-×÷     
echo        │      2 – 求N次方          
echo        │      3 – 求阶乘           
echo        │      h – 帮助             
echo        │      q – 退出             
echo        │                           
echo        ╰——————————————╯
REM 取得用户输入
echo.
set UserChoice=”"
set /p UserChoice=请选择:
if /I %UserChoice%==q goto end
if /I %UserChoice%==h goto help
if %UserChoice%==1 goto normal
if %UserChoice%==2 goto fang
if %UserChoice%==3 goto jiecheng
goto error

REM 普通运算
:normal
cls
echo.
echo.
echo.
echo          ╭—————————╮
echo          │ 普通+-×÷运算 │
echo          ╰—————————╯
echo.
set /p UserInput=请输入表达式:
REM 检测表达式
echo %UserInput% | findstr “[0-9]“>nul || goto error
echo %UserInput% | findstr /I “[a-z]“>nul && goto error
echo %UserInput% | find “.”>nul && goto error
echo %UserInput% | findstr “+ – * /”>nul || goto error
echo %UserInput% | find “+”>nul && goto add
echo %UserInput% | find “-”>nul && goto minus
echo %UserInput% | find “*”>nul && goto multiply
echo %UserInput% | find “/”>nul && goto divide
REM 实际运算
:add
for /f “tokens=1,2 delims=+” %%a in (“%UserInput%”) do set /a result=%%a+%%b
echo 计算结果=%result%
goto refresh
:minus
for /f “tokens=1,2 delims=-” %%a in (“%UserInput%”) do set /a result=%%a-%%b
echo 计算结果=%result%
goto refresh
:multiply
for /f “tokens=1,2 delims=*” %%a in (“%UserInput%”) do set /a result=%%a*%%b
echo 计算结果=%result%
goto refresh
:devide
for /f “tokens=1,2 delims=/” %%a in (“%UserInput%”) do set /a result=%%a/%%b
echo 计算结果=%result%
goto refresh

REM 计算N次方
:fang
cls
echo.
echo.
echo.
echo          ╭—————————╮
echo          │    求 N 次 方   
echo          ╰—————————╯
echo.
set /p UserInput=请输入表达式:
REM 检测表达式
echo %UserInput% | findstr “[0-9]“>nul || goto error
echo %UserInput% | findstr /I “[a-z]“>nul && goto error
echo %UserInput% | find “.”>nul && goto error
echo %UserInput% | find “_”>nul || goto error
set num=
set n=
set /a result=1
for /f “tokens=1,2 delims=_” %%a in (“%UserInput%”) do set /a num=%%a & set /a n=%%b
if %n%==0 goto showfang
for /L %%i in (1,1,%n%) do set /a result*=%num%
:showfang
echo 计算结果=%result%
goto refresh

REM 计算阶乘
:jiecheng
cls
echo.
echo.
echo.
echo          ╭—————————╮
echo          │    求 阶 乘     
echo          ╰—————————╯
echo.
set /p UserInput=请输入要求阶乘的整数:
REM 检测表达式
echo %UserInput% | findstr “[0-9]“>nul || goto error
echo %UserInput% | findstr /I “[a-z]“>nul && goto error
echo %UserInput% | find “.”>nul && goto error
set /a result=1
REM 不可以直接判断UserInput是否为0
set num=%UserInput%
if %num%==0 goto showjiecheng
for /L %%i in (%num%,-1,1) do set /a result*=%%i
:showjiecheng
echo 计算结果=%result%
goto refresh

REM 错误
:error
cls
color 0c
echo.
echo.
echo.
echo        ╭————————————╮
echo        │  输入错误,请参考帮助! │
echo        ╰————————————╯
echo.

REM 刷新
:refresh
echo.
set UserChoice=”"
set /p UserChoice=请按任意键继续,退出请按q,帮助请按h:
if /I %UserChoice%==q goto end
if /I %UserChoice%==h goto help
goto begin

REM 帮助
:help
cls
color 0a
echo.
echo                 ╭——————╮
echo       ╭————┤   帮  助   ├————╮
echo       │        ╰——————╯       
echo       │                               
echo       │   1.普通运算请使用以下形式:   
echo       │       4+1 5-2 2*3 6/2         
echo       │                               
echo       │   2.计算N次方请使用以下形式:  
echo       │        2_5 (求2的5次方)       
echo       │                               
echo       │   3.只支持整数运算            
echo       │                               
echo       │   4.输入部分特殊符号可能会    
echo       │     导致意外退出              
echo       │                               
echo       ╰————————————————╯
goto refresh

REM 退出
:end
cls
color 0a
echo.
echo.
echo.
echo      ╭————————————————╮
echo      │                               
echo      │     非常感谢您的使用,  │
echo      │                               
echo      ╰————————————————╯
ping -n 2 127.1>nul
exit

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约