《人机交互》实验报告
----简单计算器的功能实现
院系:信息工程学院
专业:08软件工程二班
组员姓名:楚婕,周培富,胡伟,李文竹
指导教师:陈姝
2010年11月21日
目录
一、实验目的 3
二、实验内容 3
三、实验设计的基本思想和方法要求
3.1软件开发方式 4
3.2开发语言 4
3.3开发集成环境 4
3.4系统硬件要求 5
3.5软件要求 5
四、实验过程和步骤
4.1需求分析 5
4.2概要设计 5
4.3详细设计 6
4.3.1类的设计 6
4.3.2按键的设计 7
4.3.3算法的设计 8
4.3.4界面的设计 9
4.4编写代码 10
4.5系统测试 10
4.5.1测试目的: 10
4.5.2测试过程 10
五、个人实验心得 11
一、实验目的
目的:为更好的将课本所学的理论知识付诸于实践,掌握利用状态转换网络进行系统设计的方法,我们决定实现一个简单的计算器程序。它不像windows所带的计算器那样因为功能复杂而使很多操作让人难于理解,望而却步。
这款计算器功能简单,能实现加、减、乘、除等基本数学运算。这些功能的实现,用C#语言编写。该计算器大大降低了数学计算的难度且提高了计算的准确度和精确度。界面清晰,让人一目了然。该计算器使用简单和操作方便,对非专业人士在日常生活中的计算操作有很大的帮助作用。
二、实验内容
根据设计出的状态转换网络图,使得该四则运算计算器程序实现“operand1 operator operand2'=' ”,并将计算结果显示在显示文本框中。operand1可以是整数或者小数或者是上一次的运算结果,operand2 是整数或者小数,操作符是“+ - * /”。另外还要实现辅助键的功能,C键清零,CE(Clear Entry)键取消用户上一次的操作,MS键储存上一次运算结果,M+键将本次输入的数和储存的数相加,并输出结果,M-键将本次输入的数和储存的数相减,并输出结果,MR读取储存在内存中的值,MC清空所储存的值,ß键取消前一步的输入。界面如下图:
图1 程序运行界面
三、实验设计的基本思想和方法要求
3.1软件开发方式:采用面向对象技术。
面向对象是利用抽象、封装等机制,借助于类、对象、继承、传递等技术进行系统构造的软件开发方法。它较为自然地模拟了人类认识世界的方式,因而是一个很好的认知方法和思维方法,也是一种很好的软件开发方法。
3.2开发语言:C#。
一个系统设计的根本目的就是真正满足用户的实际需求,并采用安全、可靠、成熟的技术来实现。鉴于当今技术的发展趋势,结合本程序的实现难易程度和工作量,我们采用了C#技术开发。C#是一种最新的、面向对象的编程语言。它使得程序员可以高效的编写各种基于Microsoft .NET平台的应用程序。
3.3开发集成环境:Visual Studio 2005。
3.4系统硬件要求:CPU要求在PIII以上,硬盘的可用空间要大于20G,内存在256M以上。
3.5软件要求:安装了Windows NT/2000及其以上版本的系统。
四、实验过程和步骤
实验过程主要有五部分组成:需求分析,概要设计,详细设计,编写代码,系统测试。如下所示:
4.1需求分析
即要实现简单计算器的功能,包括加、减、乘、除等运算功能,还要实现数据的输入、输出、计算、显示及程序退出等功能。
4.2概要设计
本系统主要采用Visual Studio 2005软件对计算器进行设计,用C#程序设计语言来完成整个系统应用程序的编写。
计算器的屏显为TEXTBOX控件,右侧的数字、操作符控件为BUTTON控件。“选项”和“帮助”采用MenuStrip控件,并使用ToolStripMenuItem类设计了子菜单,输入的原始数据、运算中间数据和结果在顶部的TEXTBOX控件显示。每种计算功能均为独立设计算法。
计算器的状态转换图,如下所示:
4.3详细设计
4.3.1类的设计:
class Program :应用程序的主入口点;
class getResult:计算结果;
class form:界面设计。
4.3.2按键的设计:
(1)本计算器按键均使用BUTTON控件。按键代码以1为例,其余按键代码可参看源代码Form1.Designer.cs文件。
// button1
this.button1.Location = new System.Drawing.Point(212, 103);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(44, 38);
this.button1.TabIndex = 1;
this.button1.TabStop = false;
this.button1.Text = "1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button_click);
this.button1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.GetKey);
(2)计算器按键响应以CE、C为例,代码如下,其余可参考源代码Form1.cs文件。
//CE键处理函数,用于将第二行的清零
private void button14_Click(object sender, EventArgs e)
{
print.Text = firstLine + nextline + "0";
getKey = "";
old_getKey = "";
}
//C键处理函数,用于初始化所有的变量
private void button13_Click(object sender, EventArgs e)
{
init();
print.Text = firstLine + nextline + "0";
}
private void button18_Click(object sender, EventArgs e)
{
changeChar('/');
}
private void button11_Click(object sender, EventArgs e)
{
if (getKey.Length == 0) getKey = "0.";
else if (!getKey.Contains(".")) getKey += ".";
print.Text = firstLine + nextline + getKey;
}
private void button24_Click(object sender, EventArgs e)
{
if (firstLine.Length == 0 && getKey.Length != 0) ;
else if (firstLine[firstLine.Length - 1] <= '9' && firstLine[firstLine.Length - 1] >= '0') ;
else if (firstLine.Length == 0 || firstLine[firstLine.Length - 1] == '+' || firstLine[firstLine.Length - 1] == '-' || firstLine[firstLine.Length - 1] == '*' || firstLine[firstLine.Length - 1] == '/')
{
kuohao++;
changeChar('(');
}
}
4.3.3算法的设计
算法设计是计算器的核心,每种算法的实现都是一个基本函数的设计,其中还要考虑异常处理,界面帮助等问题。算法代码选择了几个实例,如下所示,其他算法代码可参看getResult.cs文件。
//处理带负号的数字
if (expression[1] == '-')
{
temp_num = "";
for (j = 1;expression[j] != ')'; j++)
temp_num += expression[j];
num.Add(Convert.ToDouble(temp_num));
expression=expression.Remove(0, j+1);
continue;
}
//返回1表示要弹栈,0表示入栈
private static int compare(char ch1, char ch2)
{
if(ch1=='*'||ch1=='/')
if (ch2 == '*' || ch2 == '/') return 1;
else return 0;
if(ch1=='+'||ch1=='-')
if (ch2 == '(') return 0;
else return 1;
return -1;
}
4.3.4界面的设计
虽然这是一个简单的计算器,但也需做到功能的全面性。因此添加了“选项”和“帮助”按钮,加强软件功能,也丰富了界面元素。其中“选项”采用MenuStrip控件,并加入下划列表运用ToolStripMenuItem类,用以“退出”。“帮助”按钮同样使用ToolStripMenuItem类,并加入下划选项“关于”,意为加入本程序的有关说明书,但因本软件有专一的使用说明介绍,就不再添加链接。部分代码如下:
// 退出ToolStripMenuItem
this.退出ToolStripMenuItem.Name = "退出ToolStripMenuItem";
this.退出ToolStripMenuItem.Size = new System.Drawing.Size(94, 22);
this.退出ToolStripMenuItem.Text = "退出";
this.退出ToolStripMenuItem.Click += new System.EventHandler(this.退出ToolStripMenuItem_Click);
图三 退出界面图
4.4编写代码
详见计算器文件夹中源代码:Form1.cs,Form1.Designer.cs,getResult.cs,Program.cs。
4.5系统测试
4.5.1测试目的:测试是保证软件质量的重要手段。它的目标是为了验证各阶段所完成的工作是否满足需求分析和详细设计要求,识别出期望的结果和真正结果之间的差别,以便修正系统设计和代码实现中的潜在错误,提高系统运行的性能。
4.5.2测试过程:
(1)代码审查:首先由编写程序的同学非正式的进行,之后由小组共同进行,以查出程序中的逻辑错误和编码错误。
(2)软件调试:对于发现的错误必须进行诊断,找到其发生的原因和地点,然后改正,并进行重新测试。
部分的异常处理,代码如下:
//在确定后面的处理函数没有问题的时候要在getResult的函数里面加上一个是否计算成功的返回值,用于判断输入的式子
//是否为正确的式子
try
{
// MessageBox.Show(temp_str);
result = getResult.calculate(temp_str);
print.Text = temp_str + '=' + nextline + result.ToString();
}
catch (Exception e1)
{
print.Text = nextline + "ERROR";
}
五、实验心得
经过了一个学期的人机交互的学习,我们受益良多,最终设计出了一款计算器系统,虽然它有待进一步完善,但却融入了大家的心血,只要有所付出,就会有所收获。
本次课程设计是在老师的严格要求下,根据其状态转换图并从正规的软件开发角度进行设计开发的。这次课程设计,使我们加强了理论与实际应用的结合,对软件文档的编写规则、调试测试的方法都有了基本的掌握,与此同时,在状态转换图的应用和代码的编写方面也学到了不少东西。因此首先要感谢我们的任课老师陈姝老师,在陈老师的精心授课和指导之下,使我们的设计有了明确的方向,其次要感谢我们的组员,由于大家的积极帮助和努力,我们这个小团队共同克服了许多困难完成了此次课程设计。
设计这个计算器主要是参考操作系统中自带的计算器,而本系统的功能还不是很强大,这就需要我们去不断的完善,及时发现系统的漏洞并尽快修复,以使系统的实用性增强。
作为此计算机的主要编码人员之一,我得到了一个很大的经验教训——在进行编码前应该尽可能详细的把设计先写出来。我们现在虽然编写的是一个比较小的软件,但是由于初始时没有将计算机的设计实现和在运行过程中计算机所处状态的装换想好,而是采取了边编码边设计的这个严重偏离了软件工程的正确思想的错误行为,导致了在后期测试中出现比较多的bug。这些都是由于没有在编码前先进行软件设计的分析而造成的,对于此次的错误我会铭记在心。在以后不论是自己编写一个软件还是和一个团队开发一个软件,我都会避免此次类似的错误,并会用软件工程的思想来进行软件的开发与设计。现代各种应用软件都一般比较大并且要经过很多程序员的一起合做,才能开发出来,如果没有软件工程这一思想,那么组织这些由各个程序员编写不同代码,并将其合并成一个完整的应用软件或是系统软件将是一个不可能完成的任务。而在学习的过程我发现身边的同学也并没有重视此思想,认为开发软件前的软件设计图是一种浪费时间的事情。但是此次以后我想我会慢慢的纠正这个错误的观点的。
实验4计数器及其应用一实验目的1学习用集成触发器构成计数器的方法2掌握中规模集成计数器的使用及功能测试方法二实验原理计数器是一个用…
HUNANUNIVERSITY程序设计训练简单的计算器报告学生姓名田博鑫学生学号专业班级指导老师20xx年6月16日至20xx年7…
HTML网页实验报告院系计算机控制与工程学院班级计1241学号姓名完成日期1一实验名称设计一个网页计算器二需求分析计算器是日常生活…
目录一系统开发的背景1二系统分析与设计1一二计算器的主要功能1系统模块结构设计1三系统的设计与实现2一二计算器的初始界面2一般计算…
C计算器实验报告班级学号20xx13432姓名蔡启林一实验目的和要求设计一个简单计算器具有一般计算功能能进行基本的加减乘除运算还具…
《计算机组成原理》实验报告学院:专业:班级学号:AP0804114学生姓名:实验日期:指导老师:成绩评定:五邑大学信息学院计算机组…
西安财经学院信息学院实验报告实验名称运算器实验通用寄存器实验移位寄存器实验实验室实验楼418实验日期20xx112920xx122…
课程实验报告课程名称计算机组成原理专业班级学号U20xx14669姓名蒋志斌同组成员张源信报告日期计算机科学与技术学院目录一实验名…
实验一图灵机模型与计算机硬件系统虚拟拆装五实验报告实验名称学号姓名实验报告表11图灵机模型中的主要组成部分及作用班级实验时间年月日…