软件工程导论——简易计算器
简易计算器 (1)

目录第一章:设计目的11.1课程设计目的.................................................................................. 错误!未定义书签。
1.2简易计算器设计的意义 (1)1.3系统的基本要求 (1)1.4功能设计 (3)第二章:功能描述 (3)2.1功能模块框图 (3)2.2相关功能介绍.................................................................................. 错误!未定义书签。
2.1系统模块机构框图 (4)第三章:总体设计 (5)3.1系统流程图 (3)3.2模块描述 (5)3.3函数声明 (5)第四章:程序实现 (5)4.1界面设计 (10)4.2计算界面 (11)4.3退出界面 (12)第五章:课程设计的结果展示 (13)第六章:参考文献................................................................................................. - 15 -第七章:课程设计总结......................................................................................... - 16 -第一章课程设计目的1.通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。
特别是作为本科生,更要注重实践这一环节,只有这样我们才能成为合格的计算机人材。
通过这次课程设计,进一步巩固所学的语句,如语句嵌套等;加深对循环,分支等结构的运用;最后还可以熟悉四则运算﹑三角函数等经典算法。
2.通过此次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过去图书馆查资料,上网找资料等手段学到一些新知识,比如画图函数,颜色填充函等。
简易计算器(Android应用使用Java开发)

简易计算器(Android应用使用Java开发)随着智能手机的普及,手机应用程序也变得越来越多样化和智能化。
其中,计算器应用无疑是人们生活中最常用的一种应用之一。
本文将介绍如何使用Java开发一个简易计算器的Android应用程序。
1. 概述简易计算器是一款可以进行基本的数学计算的应用程序。
用户可以在界面上输入数字和操作符,计算器会自动根据用户的操作给出计算结果。
本应用程序采用Java语言进行开发,运行于Android操作系统。
2. 开发环境在开始开发前,我们需要搭建好Android开发环境。
首先,下载并安装Java Development Kit(JDK),确保版本为最新稳定版。
然后,下载并安装Android Studio,这是一款为Android开发而设计的集成开发环境(IDE)。
3. 创建项目打开Android Studio,并点击"Start a new Android Studio project"来创建一个新的项目。
在弹出的窗口中,填写项目名称、包名等基本信息,并选择适当的设备和目标SDK版本。
4. 设计界面在项目创建完成后,我们需要设计计算器的界面。
可以使用Android Studio自带的可视化UI设计器来拖拽和放置UI元素,也可以手动在XML布局文件中编写界面代码。
界面的核心组件包括输入框、按钮和显示区域。
5. 添加逻辑功能界面设计完成后,我们需要为计算器添加逻辑功能。
创建一个Java类作为计算器的主活动(Activity),在其中实现输入和操作的处理逻辑。
可以使用Android提供的计算相关API,例如使用eval()方法进行表达式计算。
6. 编译和调试在开发过程中,我们可以随时进行编译和调试来检查应用程序的运行情况。
点击Android Studio的运行按钮,选择目标设备并运行应用程序。
在模拟器或真机上进行调试,查看是否符合我们的预期效果。
7. 测试和发布在功能开发和调试完毕后,我们需要进行应用的测试阶段。
软件开发与环境-----简易计算器

运城学院软件开发环境与工具实验一实验题目:简易计算器实验类型:设计性实验地点: 第三软件实验室指导老师:王琦专业班级:计算机科学与技术系1102班姓名:马苗苗(2011100226)2013年 10月21 日一、实验题目简易计算器二、实验目的实现简单的计算器运算功能,包括加减乘除。
三、实验步骤1)代码如下Public Class Form1Dim i As Integer = 0Dim flog As IntegerDim s As StringDim m As DoubleDim t As DoubleDim ta As IntegerDim tb As IntegerPrivate Sub num1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles num1.Clickn=1If i = 0 Thenta = ta * 10 + nshuRu.Text = taElsetb = tb * 10 + nshuRu.Text = ta & "." & tbEnd IfEnd SubPrivate Sub dian_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dian.Clicki = 1End SubPrivate Sub jieGuo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles jieGuo.ClickjiSuan()suanShi.Text = ""s = mflog = 0End SubPrivate Sub jia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles jia.ClickDim sa As Doublesa = shuRu.TextIf flog = 0 Thens = sam = sEnd IfIf flog = 1 Thenm = m + sas = s & "+" & saEnd IfIf flog = 2 Thenm = m - sas = s & "-" & saEnd IfIf flog = 3 Thenm = m * sas = s & "*" & saEnd IfIf flog = 4 Thenm = m / sas = s & "/" & saEnd IfshuRu.Text = msuanShi.Text = s & "+"ta = 0tb = 0i = 0flog = 1End SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadshuRu.Text = 0End SubPrivate Sub C_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles C.Clickta = 0tb = 0i = 0m = 0shuRu.Text = 0s = ""suanShi.Text = ""End SubPrivate Sub suanShi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles suanShi.ClickEnd SubEnd Class2)运行结果如下:四、实验总结通过这次实验我学会了如何制作一个简易的计算器,学会了简单的四则运算,加,减,乘,除。
毕业设计(论文)-基于AT89C51单片机的简易计算器设计

计算器(Calculator)是微型电子计算机的一种特殊类型。
它与一般通用计算机的主要区别在于程序输入方式的不同。
计算器的程序一般都已经固定,只需按键输入数据和运算符号就会得出结果,很容易就能掌握。
而一般计算机的程序可以根据需要随时改动,或重新输入新的程序。
简易计算器主要用于加减乘除;科学计算器,又增添了初等函数运算(有的还带有数据总加、求平均值等统计运算)。
现代电子计算器首次问世是1963年。
那时的计算器是台式的,在美国波士顿的电子博览会上展出过。
与计算机相比,它小巧玲珑,计算迅捷,一般问题不必事先编写复杂的程序。
随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。
这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。
随着社会需求,计算器也从原有单一的数字加减计算演变为复杂的多种运算。
现在不在单一的在某一方面而是涉及到生活的方方面面.由于我对知识掌握的不够熟练,重点不够清楚,导致在重点与非重点处花费的时间不成比例,进度缓慢,这是设计没能全部完成的部分原因。
目前只做到按键与显示的结合(即在显示器上可以显示数字键还有命令键+-*/ =清零);加法子程序已经编写成功并严整无误,但在整体调试中未能圆满实现,本部分正在调试中。
等调试成功后,其它运算子程序的问题将迎刃而解。
引言 (1)目录 (2)1.简易计算器的设计方案 (3)1.1硬件部分设计方案 (3)1.2软件部分设计 (3)1.3 硬件设计原理图 (4)2. 简易计算器部分电路设计 (5)2.1 AT89C51常用指令 (5)2.2 显示及显示接口 (11)2.3 键盘、液晶显示的组合接口 (15)2.4 算术逻辑运算处理 (18)3.总设计电路及调试 (19)致谢 (21)参考文献 (22)1.简易计算器的设计方案1.1硬件部分设计方案1 单片机部分单片机以AT89C51来做为核心元器件。
简易计算器设计范文

简易计算器设计范文首先,我们需要决定计算器的基本功能。
一个简易计算器通常应该具备加法、减法、乘法和除法的功能。
此外,我们还可以添加开方、求平方以及取模等功能。
在设计计算器之前,我们需要确定用户界面。
对于一个简易计算器来说,我们可以使用命令行界面或者图形用户界面。
在本文中,我们将使用命令行界面。
接下来我们需要设计计算器的算法。
为了实现加、减、乘、除这些基本运算,我们可以编写四个函数来完成。
比如,加法函数可以接收两个数并返回它们的和,减法函数可以接收两个数并返回它们的差,乘法函数可以接收两个数并返回它们的乘积,除法函数可以接收两个数并返回它们的商。
同时,我们还需要添加一些辅助函数来处理开方、求平方以及取模等功能。
比如,开方函数可以接收一个数并返回它的平方根,求平方函数可以接收一个数并返回它的平方,取模函数可以接收两个数并返回它们的余数。
在设计计算器时,我们还要考虑到用户输入的错误处理。
如果用户输入无效的操作或者除数为零,我们需要给出错误的提示信息。
接下来,我们来设计主要的程序流程。
首先,我们需要显示一个欢迎信息,告诉用户如何使用计算器。
然后,在一个循环中,我们会要求用户输入要执行的操作,然后读取用户输入的操作和操作数。
根据用户的选择,我们会调用相应的函数来执行计算,并输出结果。
接着,我们会继续询问用户是否要继续进行计算。
如果用户选择退出,我们会结束循环并显示一个退出信息。
最后,我们需要编写测试用例来确保计算器的功能正常。
我们可以输入一些固定的操作和操作数,然后验证计算器返回的结果是否正确。
如果测试用例中出现错误,我们需要进行修复。
在编写代码之前,我们还需要选择一个编程语言。
对于一个简易计算器来说,Python是一个非常适合的选择。
Python具有简单易读的语法,能够轻松地实现我们的设计。
下面是本文的设计示例:```python#导入所需的库import math#加法函数def add(x, y):return x + y#减法函数def subtract(x, y):return x - y#乘法函数def multiply(x, y):return x * y#除法函数def divide(x, y):if y == 0:raise ValueError("除数不能为零") return x / y#开方函数def square_root(x):if x < 0:raise ValueError("不能对负数开方") return math.sqrt(x)#求平方函数def square(x):return x ** 2#取模函数def modulo(x, y):if y == 0:raise ValueError("除数不能为零") return x % y#欢迎信息print("欢迎使用简易计算器!")print("请按以下方式输入操作:")print("加法:'a 数1 数2'")print("减法:'s 数1 数2'")print("乘法:'m 数1 数2'")print("除法:'d 数1 数2'")print("开方:'r 数'")print("求平方:'q 数'")print("取模:'o 数1 数2'")#主程序循环while True:#用户输入operation = input("输入操作:")data = operation.splitif data[0] == "a":result = add(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "s":result = subtract(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "m":result = multiply(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "d":try:result = divide(float(data[1]), float(data[2])) print("结果为:", result)except ValueError as e:print("错误:", str(e))elif data[0] == "r":try:result = square_root(float(data[1]))print("结果为:", result)except ValueError as e:print("错误:", str(e))elif data[0] == "q":result = square(float(data[1]))print("结果为:", result)elif data[0] == "o":try:result = modulo(float(data[1]), float(data[2]))print("结果为:", result)except ValueError as e:print("错误:", str(e))else:print("无效的操作")#判断是否继续计算choice = input("是否继续计算?(y/n)")if choice == "n":breakprint("谢谢使用,再见!")```通过以上设计,我们可以在命令行中使用这个简易计算器来执行加、减、乘、除、开方、求平方和取模等操作。
少儿编程Scratch课程课件 - 简易计算器(二)功能设计与程序实现

按键3程序
简易计算器 - 功能设计与程序实现
第七步:实现数字按键4的输入。
按键4程序
简易计算器 - 功能设计与程序实现
第八步:实现数字按键5的输入。
按键5程序
简易计算器 - 功能设计与程序实现
第九步:实现数字按键6的输入。
按键6程序
简易计算器 - 功能设计与程序实现
简易计算器 - 功能设计与程序实现
简易计算器案例中总共设计使用了6个变量,描 述如下:
“输入显示”:用来显示输入的内容; “计算结果”:用来显示加减乘除计算的结果; “数字1”:用来存储用于计算的第一个数字; “数字2”:用来存储用于计算的第二个数字; “运算符”:用来存储用于计算的运算符; “开机状态”:用来存储当前的开关机状态。
乘法*程序
简易计算器 - 功能设计与程序实现
第十八步:实现除法符号/的输入,改变运算符变量为/。
除法/程序
简易计算器 - 功能设计与程序实现
第十九步:实现清除显示屏显示,恢复初设计与程序实现
第二十步:实现等号运算程序。
1
简易计算器 - 功能设计与程序实现
少儿趣味编程 - Scratch
简易计算器(二)功能设计与程序实现
简易计算器 - 功能设计与程序实现
少儿趣味编程 - Scratch
1 Part
功能设计
简易计算器 - 功能设计与程序实现
简易计算器包括以下功能:
1、开机功能和关机功能。 2、数字及小数点按键输入功能。 3、输入数字以及计算结果的屏幕显示功能。 4、加、减、乘、除四种运算的计算功能。 5、屏幕输入以及计算结果的清除功能。
开机按钮程序
简易计算器 - 功能设计与程序实现
毕业论文设计-简易计算器的制作

存档编号XX水利水电大学毕业设计题目简易计算器的制作学院信息工程学院专业通信工程姓名XX学号2XXXX指导教师XX完成时间2014.5.14教务处制独立完成与诚信声明本人郑重声明:所提交的毕业设计(论文)是本人在指导教师的指导下,独立工作所取得的成果并撰写完成的,郑重确认没有剽窃、抄袭等违反学术道德、学术规范的侵权行为。
文中除已经标注引用的内容外,不包含其他人或集体已经发表或撰写过的研究成果。
对本文的研究做出重要贡献的个人和集体,均已在文中作了明确的说明并表示了谢意。
本人完全意识到本声明的法律后果由本人承担。
毕业设计(论文)作者签名:指导导师签名:签字日期:签字日期:毕业设计(论文)版权使用授权书本人完全了解华北水利水电大学有关保管、使用毕业设计(论文)的规定。
特授权华北水利水电大学可以将毕业设计(论文)的全部或部分内容公开和编入有关数据库提供检索,并采用影印、缩印或扫描等复制手段复制、保存、汇编以供查阅和借阅。
同意学校向国家有关部门或机构送交毕业设计(论文)原件或复印件和电子文档(涉密的成果在解密后应遵守此规定)。
毕业设计(论文)作者签名:导师签名:签字日期:签字日期:目录摘要 0Abstract (1)第一章绪论 (2)1.1 开发背景 (2)1.2 设计目的 (3)第二章方案论证与设计 (4)设计指标 (4)方案论证与设计 (4)第三章硬件模块介绍 (7)主控及运算模块 (7)显示模块 (12)输入模块 (15)第四章软件设计 (17)主程序的设计 (17)键盘扫描的程序设计 (18)显示模块程序设计 (20)运算模块程序设计 (22)第五章仿真及调试 (23)结束语 (24)致谢 (25)参考文献 (26)附录一:硬件实物图 (27)附录二:系统程序 (28)附录三:任务书 (39)附录四:开题报告 (41)附录五:外文原文与外文译文 (46)基于AT89C51单片机的简易计算器的设计摘要计算器在人们的日常生活中是较为常见的电子产品之一。
简易计算器课件

Windows的计算器 的计算器
设计“简易计算器” 设计“简易计算器”
任务一:创建一个“ 简 易计算器”,程序运 行时,文本框中输入 数据后,单击其中一 个命令按钮,文本框 中宣示相应的计算结 果。如图:
设计“简易计算器” 设计“简易计算器”
任务一:设计“简易计算器”的界面,如图:
设计“简易计算器” 设计“简易计算器”
InputBox对话框
MsgBox对话框
常用语句与函数
常用的函数
2、数学函数
常用语句与函数
常用的函数
3、转换函数
VB可视化程序开发环境 可视化程序开发环境
标签控件:主要用来显示不希望被用户修改的文本。 文本控件:是一个文本编辑区域,用户可以在该区域 中输入编辑和显示文本内容。 文本框、标签、命令按钮等都是对象,对象的特征 称为对象的属性。
设计简易计算器
任务三: 任务三:编写事件的程序代码
If txtInput.Text = "" Then MsgBox "没有输入内容 没有输入内容!" 没有输入内容 txtInput.Text = "" txtInput.SetFocus Check = False ElseIf Not IsNumeric(txtInput.Text) Then MsgBox "输入的不是数字 输入的不是数字!" 输入的不是数字 txtInput.Text = "" txtInput.SetFocus Check = False Else Check = True End If End Function Private Sub cmdAbs_Click() If Check() Then lblShow.Caption = "该数的绝对值为 & CStr(Abs(Val(txtInput.Text))) 该数的绝对值为:" 该数的绝对值为 End Sub Private Sub cmdExit_Click() End End Sub Private Sub cmdRoot_Click() If Check() Then lblShow.Caption = "该数的平方根为 & CStr(Sqr(Val(txtInput.Text))) 该数的平方根为:" 该数的平方根为 End Sub Private Sub cmdSquare_Click() If Check() Then lblShow.Caption = "该数的平方数为 & CStr(Val(txtInput.Text) * Val(txtInput.Text)) 该数的平方数为:" 该数的平方数为 End Sub Private Sub Form_Load() End Sub
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011-2012(2)《软件工程导论》实验报告实验一:项目计划、分析和设计学院:计算机学院 班级: 软件111 姓名: 张鹏 学号:119074174内容:实验一:项目计划、分析和设计[ 实验日期 ]2012 年3月28日 [ 实验目的 ]1. 初步了解结构化分析、设计方法的原理、步骤以及各阶段的文档,练习撰写简要的需求文档、设计文档。
2. 为了解决自己及他人对世界困惑,更加客观真实的了解国内外!(任务艰巨呀!) [ 实验内容 ](1)包含的功能有:加、减、乘、除运算,开方、平方等功能。
(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。
(4)计算功能基本上是用系统内部函数。
(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。
(6)“CE”按钮可以清除所有已输入的数据从头计算[ 实验原理和步骤 ]界面要求N[ 实验结果]即[ 实验报告要求][ 实验总结]经过了两个星期的C语言程序设计,在同学的热情帮助下基本完成了计算器课题的设计修改任务,虽然有些地方不尽如人意但是初步达到了对自己的要求。
信息时代是科技和经济发展的产物,软件产业是信息时代的产物,它在我们的生活工作中发挥着越来越大的作用,计算器的设计对我们知识的掌握有很大的作用,更能方便他人,可行性很强。
刚开始设计的时候找不到头绪,不知道该从哪里下手,通过向同学询问和向老师寻求帮助找走进了设计的门槛。
在设计这个程序时,刚开始是根据网上的资料,,经过自己的反复尝试以及与与同学的讨论,这也不难,最好还是被我搞定了。
这些只要你自己愿意去尝试,问题都可以迎刃而解的。
通过网上查找到很多成功的计算器程序,通过对那些已经成功地程序进行分析找到自己的设计思路,制定设计流程。
并通过比较各种程序了解各个程序的利弊,从而明确自己计算器的设计方向和如何通过技术手段达到自己的目的。
万事开头难,可是对于并不是很熟悉的C语言在下面的工作中困难处处能遇见。
通过查找C语言教材去图书馆查找相关的资料和同学一起讨论终于把一个个棘手的陌生的问题解决。
测试阶段中发现了几处错误导致程序不能编译,通过耐心的分析源代码终于编好了一个完整无误的程序。
在这次的C语言程序设计实习中遇到了现实编程中必然见到的问题通过这些问题的解决积累了编程的实践经验。
在实际的编程操作中发现自己C语言知识的不足,加深了对C语言的理解。
在学习之余体验到收获的感觉。
同时认识到程序员的工作并不是我们想象的那么简单轻松的,在现在的编程中要有足够的耐心和热情。
实验二:[ 实验目的 ]培养良好的编码风格。
[ 实验内容 ]根据详细设计的结果,按结构化思想编写代码,并对程序进行注释。
[ 实验原理和步骤]编码风格强调“清晰易读”而不是个人技巧。
请注意变量或函数的名字要有意义,表达式和语句要一目了然,排版风格、循环语句风格要保持一致,函数宏的定义,常数的定义,注释要全面。
注释包括序言性注释、函数模块注释和程序语句注释。
程序源代码/*简易计算器..2012.4.4——5.4...张鹏..119074174....此程序在wintc下运行!*/#include"dos.h"#include"conio.h"#include"string.h"#include"stdio.h"#define normbut_bor 0x80#define presbut_but 0xb8#define normnum_but 0x8e#define presnum_but 0xb9#define spebut_char 0x2c#define win_color 0xf2#define win_char 0xfbstruct s_button /*按键的结构体*/{int sx,sy,ex,ey;char *head;int press;}button[17]; /*图表按键数*/char far *vid_mem;static int tx=32,ty=3; /*静态变量*/float v1=0.0,v2=0.0;struct stack /*结构体栈*/{char s[20];int tos,top;}stack;char tag;init_stack() /*初始化栈*/{stack.tos=0;stack.top=0;stack.s[stack.tos]='\0';}push(char ch) /*入栈*/{stack.s[stack.tos++]=ch;stack.s[stack.tos]='\0';}pop() /*取栈数据通过*/{if(stack.tos>0)stack.s[--stack.tos]='\0';}clear_stack() /*清空栈*/{stack.tos=0;stack.top=0;stack.s[stack.tos]='\0';}int form_win() /*表格窗口初始化*/{textbackground(WHITE); /*窗口背景颜色*/clrscr(); /*清零*/draw_win(); /*窗口画线*/active_button(); /*窗口按键*/out_text_win(); /*输出文本窗口*/window_xy(32,3); /*计算结果窗口*/}draw_win() /*边框画线窗口*/{int i;char far *t;char *s="这是一个模拟计算器!"; /*顶端边框输出的字符*/ draw_border(30,0,79,24,win_color); /*边框的位置和颜色*/ i=(79-30-strlen(s))/2+30;t=vid_mem+i*2;for(;*s;){*t++=*s++;*t++=win_color; /*顶端字体颜色*/}}draw_border(int sx,int sy,int ex,int ey,int attrib) /*边界线函数*/ {char far *t,far *v;int i;t=vid_mem;for(i=sx+1;i<ex;i++){v=t+sy*160+i*2;*v++=196; /*每一行上画线确定为直线*/*v=attrib;v=t+ey*160+i*2;*v++=196; /*每一行下画线确定为直线*/*v=attrib;}for(i=sy+1;i<ey;i++){v=t+i*160+sx*2;*v++=179; /*每一列左画线确定为直线*/*v=attrib;v=t+i*160+ex*2;*v++=179; /*每一列由画线确定为直线*/*v=attrib;}write_char(sx,sy,218,attrib);write_char(ex,sy,191,attrib);write_char(sx,ey,192,attrib);write_char(ex,ey,217,attrib);}write_char(int x,int y,char ch,int attrib) /*字符输入函数*/{char far *v;v=vid_mem;v+=x*2+160*y;*v++=ch;*v=attrib;}active_button()/*图表按钮设定函数*/{int i;make_button(0,32,9,38,11,"1");/*每个键对应的位置和数值*/make_button(1,42,9,48,11,"2");make_button(2,52,9,58,11,"3");make_button(3,62,9,67,11,"+");make_button(4,71,9,76,11,"-");make_button(5,32,12,38,14,"4");make_button(6,42,12,48,14,"5");make_button(7,52,12,58,14,"6");make_button(8,62,12,67,14,"*");make_button(9,71,12,76,14,"/");/*"/"的位置*/make_button(10,32,15,38,17,"7");make_button(11,42,15,48,17,"8");make_button(12,52,15,58,17,"9");make_button(13,62,15,67,17,"=");make_button(14,71,15,76,17,"<-");make_button(15,32,18,38,20,"0");/*"0"的位置*/make_button(16,71,18,76,20,"End");for(i=0;i<17;i++){draw_border(button[i].sx,button[i].sy,button[i].ex,button[i].ey,normbut_bor);}for(i=0;i<17;i++){write_top(button[i].sx+1,button[i].sy+1,button[i].ex-1,button[i].head,normnum_but);}}write_top(int x1,int y,int x2,char *s,int attrib){char far *v,far *t;int i;v=vid_mem;for(i=x1;i<=x2;i++){t=v+y*160+i*2;*t++=' ';*t=attrib;}i=(x2-x1-strlen(s)+1)/2+x1;t=v+160*y+i*2;for(;*s;){*t++=*s++;*t++=attrib;}}make_button(int num,int sx,int sy,int ex,int ey,char *top){button[num].sx=sx;button[num].sy=sy;button[num].ex=ex;button[num].ey=ey;button[num].head=top;button[num].press=0;}out_text_win() /*结果输出窗口*/{draw_border(31,2,75,4,0x7f);write_top(32,3,74," ",0xff);}get_key() /*得到按键值*/{union inkey /*共用体*/{char ch[2];int i;}c;c.i=bioskey(0);return(c.i);}window_xy(int x,int y){union REGS r; /*定义联合体*/r.h.ah=2; /*初始化*/r.h.dh=y;r.h.dl=x;r.h.bh=0;int86(0x10,&r,&r);}key_choice() /*小键盘键的输入函数*/{int ch,bx=0,by=0;/*起始停留键的位置*/do{ch=get_key();switch(ch){case 0x4f31:res_but(bx,by);bx=0;by=0;get_data(bx,by);break;/*图表键和小键盘的键对应,此处为1*/case 0x5032:res_but(bx,by);bx=1;by=0;get_data(bx,by);break;/*2*/case 0x5133:res_but(bx,by);bx=2;by=0;get_data(bx,by);break;/*3*/case 0x4b34:res_but(bx,by);bx=0;by=1;get_data(bx,by);break;/*4*/case 0x4c35:res_but(bx,by);bx=1;by=1;get_data(bx,by);break;/*5*/case 0x4d36:res_but(bx,by);bx=2;by=1;get_data(bx,by);break;/*6*/case 0x4737:res_but(bx,by);bx=0;by=2;get_data(bx,by);break;/*7*/case 0x4838:res_but(bx,by);bx=1;by=2;get_data(bx,by);break;/*8*/case 0x4939:res_but(bx,by);bx=2;by=2;get_data(bx,by);break;/*9*/case 0x5230:res_but(bx,by);bx=0;by=3;get_data(bx,by);break;/*0*/case 0x4e2b :res_but(bx,by);bx=3;by=0;get_data(bx,by);send1();break;/*加*/case 0x4a2d :res_but(bx,by);bx=4;by=0;get_data(bx,by);send1();break;/*减*/case 0x372a :res_but(bx,by);bx=3;by=1;get_data(bx,by);send1();break;/*乘*/case 0x352f:res_but(bx,by);bx=4;by=1;get_data(bx,by);send1();break;/*除*/case 0x0d3d:res_but(bx,by);bx=3;by=2;get_data(bx,by);send2();out_text_win();put_string();break;/*等于号*/case 0x1c0d:res_but(bx,by);bx=2;by=4;get_data(bx,by);send2();out_text_win();put_string();break;/* 回车键(相当与等于号)*/ case 0x0e08:res_but(bx,by);bx=4;by=2;pop();text_clo();break; /*退格(backspace)*/case 0x3920:res_but(bx,by);get_data(bx,by);ba_space(bx,by); break;/* 空格*/case 0x4f00:res_but(bx,by);bx=4;by=3;exit(1);break;/*结束(End)*/case 0x4800:res_but(bx,by);by--;break;/* 上*/case 0x4b00:res_but(bx,by);bx--;break;/* 左*/case 0x5000:res_but(bx,by);by++;break;/* 下*/case 0x4d00:res_but(bx,by);bx++;break;/* 右*/}if(bx<0)bx=0; /* 只能在X0到4和Y在0到4内选择按键*/if(by<0)by=0;if(by>4)by=4;if(bx>4)bx=4; /* 只能在X0到4和Y在0到4内选择按键*/select_but(bx,by);}while(1);}ba_space(int x,int y){int num;char ch;if(y>2)if(x<2)num=15;else num=16;else num=x+5*y;switch(num){case 3:send1();break;case 13:send2();out_text_win();put_string();break;case 4:send1();break;case 8:send1();break;case 9:send1();break;case 16:exit(1);break;/*图表对应的结束键*/case 14:pop();text_clo();break;/*"〈-"对应功能*/default:;}}text_clo() /*文本光标*/{tx--; /*光标向左移*/if(tx<32)tx++; /*backspace时X不能小于32*/put_char(tx,ty,'');}put_string() /*计算机运算函数*/{float result;tx=32;switch(tag) /*根据运算符号计算*/{case '+': result=v1+v2;break; /*做加法*/case '-':result=v1-v2;break; /*做减法*/case'*':result=v1*v2;break; /*做乘法*/case '/': result=v1/v2;break; /*做除法*/default :result=v1; /*若不计算输出0*/}sprintf(stack.s,"%.3f",result); /*输出结果保留小数点后三位*/while(stack.s[stack.top]){put_char(tx,ty,stack.s[stack.top++]);tx++;}}send1() /*向服务器发送请求*/{sscanf(stack.s,"%f",&v1); /*输入并储存在V1中*/clear_stack(); /*清除栈*/}send2() /*向服务器发送信息*/{sscanf(stack.s,"%f",&v2);clear_stack(); /*清除栈*/}get_data(int x,int y) /*键的移动和对应数值关系*/{int num;char ch;if(y>2)if(x<2)num=15;else num=16; /*使得第3行只能取的0键和End键*/else num=x+5*y; /*其余各键坐标和原来设定的值的关系*/switch(num) /*使得图表面键和实际键一致*/{case 0:ch='1';break; /*图表面1键和实际1一致*/case 1:ch='2';break;case 2:ch='3';break;case 3:ch='+';break;case 4:ch='-';break;case 5:ch='4';break;case 6:ch='5';break;case 7:ch='6';break;case 8:ch='*';break;case 9:ch='/';break;case 10:ch='7';break;case 11:ch='8';break;case 12:ch='9';break;case 13:ch='=';break;case 15:ch='0';break; /*图表面0键和实际0一致*/default:ch=1;}if(ch!=1){put_char(tx,ty,ch);if(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/')push(ch);else tag=ch;tx++;}}select_but(int x,int y) /*选择按钮*/{int num;if(y>2)if(x<2)num=15;else num=16;else num=x+5*y;draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,presbut_but);write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,presnum_but); }res_but(int x,int y){int num;if(y>2)if(x<2)num=15;else num=16;else num=x+5*y;if(num<16){draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,normbut_bor);write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,normnum_but);}else{draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,normbut_bor);write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,spebut_char);}}put_char(int x,int y,char ch) /*计算窗口的输入确定函数*/{char far *v;v=vid_mem;v+=x*2+y*160; /*光标的位置*/*v++=ch; /*输入字符随光标的推进*/*v=0xf0; /*输入数字的颜色*/window_xy(x,y); /*光标在窗口坐标*/}calculator() /*计算器构成的函数*/{int a,b;key_choice(); /*键选择函数*/}write_text(int x,int y,char *s,int attrib) /*文本输入函数*/{char ch;int lx=x,ly=y;for(;*s;){ch=*s++;switch(ch){case '\n':lx=x;ly++;break;default:write_char(lx++,ly,ch,attrib);}}}menu() /*左边窗口函数*/{ char *j="方向键\n移动!""\n空格键\n确定!\n可用小键盘\n输入!\n用小窗口\n显示"; /*左边框中显示的字符*/ char *s="设计人员\n1 \n2 \n3 \n ""\n组长:K ";draw_border(0,0,29,24,win_color); /*左边框的位置和颜色*/write_top(1,2,28,"操作步骤",0xf9);/*INTRODCTION的位置和颜色*/write_text(2,5,j,0x79); /*输入字符的位置和颜色*/write_text(2,17,s,0x79); /*输入字符的位置和颜色*/}main() /*用户名随意..密码520!退出输入密码0即可!*/{char user[10];int passward;printf("hello!welcome you!\nplease input ueser and passward!quit---please input passward 0!\n");while(1){printf("user:");scanf("%s",user); /*用户名随意..密码520!*/printf("passward:"); /*用户名随意..密码520!*/scanf("%d",&passward); /*用户名随意..密码520!*/if(passward==520) /*用户名随意..密码520!*/{init_stack();vid_mem=(char far *)0xb8000000;if(!form_win()){printf("can't form the device,press any key to leave!...");/*如果不能显示见面窗口,按任意退出。