




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络编程实验报告 计算器实验报告 实验一 计算器的制作 一实验要求 1. 参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能 完成数据的加减乘除的基本功能。 2. 控件的焦点以及Tab键的设置和使用 3. 多个控件(按钮)事件的共享 4. 键盘的事件的应用 二设计思路 1、首先要考虑将输入的内容在 textbox 上显示出来。所以整个过 程采用全局变量 input 来记录用户输入的内容(计算器的按键 输入或者键盘输入) 。然后再将 input 的内容显示到 textbox 上。 2、接下来就是怎么去将用户的输入变成数字和运算符的问题了。 本实验的计算器有“普通运算”和“科学运
2、算”之分。所以在 计算的时候需要判断是哪一种运算,用 radioButton.Checked 来判断。 3、如果是普通的运算, “+”、“-”、“*”、“/ ”的优先级一样,所 以算法比较简单,只需要将 input 字符串的内容分割成运算符 和数字,然后再 push 到两个不同的栈中。其中数字要先转换 为 double 类型,再存入到栈中。 4、如果是科学运算,则需要按照来“ +”、“- ”、“* ”、“ / ”的优先 级来进行运算。我是运用堆栈来实现的。算法如下:每当用户 点击“+”、“-”、“*”、“/ ”中的任何一个键时,则进行判断, 如果是 “*”、“/”,则将 “*”、“/ ”之前的
3、一个数变成 double 类型,然后再存入栈中。 然后设置乘号的标识符 flag1 为 true, 或者设置除号的标识符 flag2 为 true 。如果用户点击的是 “+”、 “- ”,则先判断 flag1,flag2 是否为 true, 如果为 true ,则从 栈中 pop 一个数,然后与当前用户输入的数进行计算,然后再 push 到栈中,并把“ +”、“- ”也存入到另一个栈中;如果为 false ,则将“ +”、“- ”之前的一个数变为 double ,然后存入 栈中,把“ +”、“- ”也存入到另一个栈中。 5、当用户点击“ =”号的时候,则对两个栈进行运算。由于实验 还要求可以支
4、持键盘输入。所以需要对 Input 进行判断。因为 如果是键盘输入, input 的值为空,所以需要先把 textbox 中 的内容读取进来,然后再进行判断,分割成数字和运算符,然 后再分别存入到两个栈中。如果是计算器的按键输入,则直接 对两个栈的内容进行运算。 6、假如你的输入为“ 1+2-3*4+4+ ”,然后按“ =”号,即输入的式 子后面多了一个“ +”号或“ -”号或“ *”号或“ / ”号,程序 会自动忽略式子最后多出的那一个运算符,依然能够正确计 算。而且程序的上一次计算结果能够作为下一次计算的一个输 入,即将上一次的计算结果赋给 input ,然后可以继续运算。 7、程序中还设
5、计了小数的计算、退格键以及清零键。可以进行小 数的“ +”、“ - ”、“* ”、“/ ”;若输错了数字,可以通过退格键 来清除。本实验的“退格键”支持一次性退多个格,例 网络编程实验报告 如,你输入 1+2-3*4/5+6 之类的,然后退格到 1+2-3 ,计算结 果依然正确。清零键即将程序中的各个变量的值重置。 8、本程序的键盘输入跟计算器上的按键输入具有同样的效果,同 样具有“普通运算”和“科学运算”之分。它只是在获得数据 方面跟按键输入不同,其余的计算是一样的。 四则运算核心代码: private void cal()判断“ +或 “号之前的运算符是不是为“*或者/号,如果是则进行相应
6、的计算。 if (radioButton2.Checked = true) if (flag1 = true) sum = Double.Parse(substr) * num.Pop(); num.Push(sum); flag1 = false; elseif (flag2 = true) sum = num.Pop() / Double.Parse(substr); num.Push(sum); flag2 = false; else num.Push(Double.Parse(substr); else num.Push(Double.Parse(substr); clears();
7、i = input.LastIndexOfAny(fuhao); private void button13_Click(object sender, EventArgs e)/加号算法,调用 cal()函数。 网络编程实验报告 substr = input.Substring(i + 1); if (substr != ) cal(); fh.Push(+ ); click(sender,e); private void button14_Click(object sender, EventArgs e)/减号算法,调用 cal()函数。 clears(); i = input.LastIn
8、dexOfAny(fuhao); substr = input.Substring(i + 1); if (substr != ) cal(); fh.Push(- ); click(sender,e); private void button15_Click(object sender, EventArgs e)/乘号算法。会先判断该运算符前面 一个是不是“ +或者-号,然后进行相应的处理。设置flag1/flag2为true。 clears(); i = input.LastIndexOfAny(fuhao); substr = input.Substring(i + 1); if (su
9、bstr != ) if (radioButton2.Checked = true) if (flag1 = true | flag2 = true) cal(); flag1 = true; else flag1 = true; num.Push(Double.Parse(substr); else 网络编程实验报告 num.Push(Double.Parse(substr); fh.Push(* ); click(sender,e); private void button16_Click(object sender, EventArgs e)/ 除号 clears(); i = inpu
10、t.LastIndexOfAny(fuhao); substr = input.Substring(i + 1); if (substr != null) if (radioButton2.Checked = true) if (flag1 = true | flag2 = true) cal(); flag2 = true; else flag2 = true; num.Push(Double.Parse(substr); else num.Push(Double.Parse(substr); fh.Push(/); click(sender,e); /clears(); if (input
11、 != ) textBox1.Focus(); private void button12_Click(object sender,EventArgs e)/退格键 网络编程实验报告 input=input.Remove(input.Length-1); textBox1.Text = input; substr = ; str = ; num.Clear(); num22.Clear(); fh.Clear(); fh2.Clear(); flagl = false; flag2 = false; flag3 = true;/flag3用来记录是否触发了退格键” sum = 0; num1
12、= 0; num2 = 0; private void clears。/此函数用来处理点击退格键事件。当点击退格键之后,如果点击了其他的按 键,则程序会先处理这个函数。 if (flag3 = true) jianpan(); flag3 = false; input = textBox1.Text; private void jianpan()键盘输入 input = textBox1.Text; while (input.Contains(+) | input.Contains(-) | input.Contains(*) | input.Contains(/) j = input.Ind
13、exOfAny(fuhao); substr = input.Substring(0, j); if (substr != ) switch (inputj) case+: cal(); fh.Push(+ ); break; case-: cal(); fh.Push(- ); break; case* : if (radioButton2.Checked = true) if (flag1 = true | flag2 = true) cal(); flag1 = true; 网络编程实验报告 else flag1 = true; num.Push(Double.Parse(substr)
14、; else num.Push(Double.Parse(substr); fh.Push(* ); break ; case/ : if (radioButton2.Checked = true) if (flag1 = true | flag2 = true) cal(); flag2 = true; else flag2 = true; num.Push(Double.Parse(substr); else num.Push(Double.Parse(substr); fh.Push(/ ); break ; input = input.Substring(j + 1); substr
15、= input; clears(); if (input = ) private void button18_Click(object sender, EventArgs e)/ “=号”键 网络编程实验报告 jianpan(); cal(); input = textBox1.Text; else i = input.LastIndexOfAny(fuhao); substr = input.Substring(i + 1); /Console.Write(substr); if (substr != ) cal(); while (num.Count != 0) num1 = num.Po
16、p(); num22.Push(num1); foreach (double number in num22) Console.Write(number+ ); while (fh.Count != 0) substr = fh.Pop(); fh2.Push(substr); foreach (string fuh in fh2) Console.Write(fuh+ ); if (fh2.Count != 0) sum = 0; num1 = num22.Pop(); while (num22.Count != 0) num2 = num22.Pop(); substr = fh2.Pop
17、(); switch (substr) case+ : sum = num1 + num2; num1 = sum; break ; case- : sum = num1 - num2; num1 = sum; break; 网络编程实验报告 case* : sum = numl * num2; numl = sum; break; case/ : sum = numl / num2; numl = sum; break; default: break; else sum = num22.Pop(); textBoxl.Text = sum.ToString(); input = sum.ToString(); substr = ; str =”; num.Clear(); num22.Clear(); fh.Clear(); fh2.Clear(); flag1 = false; flag2 = false; flag3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苏北四市生物试题及答案
- 2025年镇江房地产市场区域分化现状与投资机遇深度分析报告
- 2025年主题公园市场发展态势报告:品牌竞争力评估与行业趋势
- 班组长工作述职报告
- 网络直播行业自律规范与内容监管效果评估研究报告
- 安全工程师考试内容解析试题及答案
- 电商绿色物流智能化与自动化技术应用报告
- 红棋考试题及答案
- 工会考试知识试题及答案
- 教育资源整合的反思试题及答案
- 大数据在汽车行业的创新应用研究
- 西安特教面试试题及答案
- 2025年河南省商丘市柘城县中考一模英语试题(原卷版+解析版)
- 2025年安全培训考核试题及答案
- 2025年医保知识考试题库:医保基金监管案例及答案解析试卷
- 第5课《妙想逐飞天》课件- 2024-2025学年岭南美版(2024) 初中美术七年级下册
- 《建设工程施工合同(示范文本)》(GF-2017-0201)条款
- 2025年《机械制造工艺学》考试题库及参考答案
- 2025届山东省济南市历下区中考二模生物试题含解析
- 《建筑CAD 》课程标准
- 《抖音竞品分析》课件
评论
0/150
提交评论