科学计算器课程设计报告.docx
- 文档编号:17397960
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:13
- 大小:269.88KB
科学计算器课程设计报告.docx
《科学计算器课程设计报告.docx》由会员分享,可在线阅读,更多相关《科学计算器课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
科学计算器课程设计报告
班号:
81
NET结构与C#程序设计
课程设计
题目___科学计算器_________
学院信息工程
专业电子信息工程
年级班别11级电子信息工程1班
学号3111002763
学生姓名刘宇彬
指导教师杨劲涛
2013年5月10日
软件说明:
功能:
实现科学计算器的基本功能,包括:
1带括号的加减乘除四则运算
2,常用数学函数的运算
3,存储器计算
4,输入方式为直接从键盘接收数据或鼠标点击按钮
5,实现简单的软件加密
软件设计:
1、使用硬盘序列号加密软件
程序主界面加载前检查“C:
\Users\Administrator\Documents\LybCalculator”目录下的license.dat文件是否存在,若存在,检查文件内容是否与硬盘序列号相同;
否则弹出“软件使用许可协议对话框”,若用户同意协议内容,在“C:
\Users\Administrator\Documents\LybCalculator”目录下创建license.dat文件,并在里面保存硬盘序列号,若用户不同意,直接退出程序。
获得硬盘序列号代码如下:
stringHdid;//储存硬盘序列号
try
{
ManagementClasscimobject1=newManagementClass("Win32_DiskDrive");
ManagementObjectCollectionmoc1=cimobject1.GetInstances();
foreach(ManagementObjectmoinmoc1)
{
HDid=(string)mo.Properties["Model"].Value;
}
stringhdinfo=HDid;
}
catch
{
MessageBox.Show("读取硬盘信息出错!
");
}
2、计算过程中的数据处理用一个类创建的对象来实现。
类名:
Calculator;
成员方法:
Calculator()//构造函数
voidInit()//初始化必要数据,在清零操作是调用
charCOMPARE(char,char)//比较运算符的优先级,返回’>’或’<’或’=’
doubleFact(double)//返回形参的阶乘值
TGetTop
TPop_Get
voidPush
voidInsert(string)//插入字符串,用于显示输出数据
stringMathFuction(char)//根据传入参数的值判断要进行哪一种数学函数的运算,返回处理结果的字符串。
voidOnButton(string)//按下每一个按钮时调用此函数,用于存储按钮对应的字符串
doublepow(double,double)//计算参数1的参数2次方,返回结果。
成员变量:
publicboolIsResultRepeate;//是否第二次或以上按下“等于”按钮
publicstringtmpstr;//临时字符串,存储当前输入数据
publicstringinputstr;//用于储存输入的所有数据,在编辑框1显示
publicdoubleresult;//储存当前计算结果
publicchar[]OPER=newchar[100];//字符数组,存储运算符,实现简单的栈的操作
publicdouble[]VALUE=newdouble[100];//数值数组,存储数据,实现简单的栈的操作
publicintI=0;//数值数组的下标,类似于指向栈顶指针
publicintJ=0;//字符数组下标,类似于指向栈顶指针
publicdoubletmpvalue;//储存由字符串tmpstr转换过来的临时数据
publiccharlastChar;//最后一个运算符
publicdoublelastValue;//最后一个运算数据
publicboolIsDu;//选择角度与弧度,true表示角度,false表示弧度
privatedoublePI=3.14159265358979323846;//圆周率
publicdoublems;//存储器中的值
publicdoublemsave;//储存当前值,用于与ms进行M+或M-操作
publicboolislastoper;//最后一次按下的是否运算符,true表示是,false表示不是
publicboolinv;//按下“Inv”按钮时,显示、隐藏部分按钮的依据
3、主要文件说明
1),About.cs//关于对话框
2),Form1.cs//主窗体运行
3),help.cs//帮助说明文档窗体
4),license.cs//软件使用许可协议窗体
4、程序性能分析:
测试客户机信息:
电脑型号技嘉G41MT-D3P台式电脑
操作系统Windows7旗舰版32位SP1(DirectX11)
处理器英特尔Pentium(奔腾)双核E5500@2.80GHz
内存4GB(金士顿DDR31333MHz)
运行时内存占用峰值7318k;
启动瞬间CPU占用24%
运行期间CPU占用<2%
5、主要函数
1)LybCalculator.Form1.OnButtonN(char)
当输入为“0~9”小数点,“+、-、*、/、^(”时调用此函数,四运算的核心,计算器的大部分运算过程需要用到此函数,非常重要!
2)LybCalculator.Form1.Onsign(char)
按下sin,cos,tan等数学函数时需要调用此函数,把对应值传递给类中的MathFuction函数,是进行数学函数运算的核心函数。
界面设计:
主窗体
界面中包含一个主窗体,一个“关于”对话框。
主窗体仿windows7自带计算器的界面,包含58个按钮,三个单选按钮,两个编辑框,一个listview控件,一个groupbox控件及一个menu控件。
“Inv”按钮说明:
单击一次循环隐藏显示sincostansinhcosh,tanh和asinacosatanasinhacoshatanh按钮。
测试结果截图:
图表1四则运算测试
图表2除数为0时测试
图表3带括号四则运算测试
图表4数学函数测试
图表5记忆运算测试
图表6“关于”对话框
图表7第一次使用时弹出软件使用许可协议窗口
总结:
第一次接触完全面向对象的编程语言C#,并用它来制作科学计算器。
计算器计算过程所用的算法完全属于原创,由于时间仓促,算法不够完美,进行一些复杂计算时会出错、不能处理计算过程中产生的所有异常,但足以应对日常的带括号四则运算及简单的数学函数运算。
通过这个程序的设计与制作,我对面向对象的编程方法有了进一步的理解。
附录:
程序主要函数代码:
publicvoidOnButtonN(charch)
{
doublevalH;
doublevalL;
if((ch>=48&&ch<=57)||ch=='.')
{
lyb.islastoper=false;
if(lyb.IsResultRepeate)
{
lyb.IsResultRepeate=false;//清除括号状态
lyb.inputstr="";
}
lyb.tmpstr+=ch;
textBox2.Text=lyb.tmpstr;
}
else
{
if(lyb.tmpstr.Length!
=0)
{
lyb.tmpvalue=double.Parse(lyb.tmpstr);//tmpstr转换成double型
lyb.tmpstr="";//转换后清空m_tmpstr
lyb.Push(lyb.VALUE,lyb.tmpvalue,true);//m_lyb.tmpvalue进栈
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='^')//是
运算符时
{
if(lyb.GetTop(lyb.OPER,false)=='(')return;//栈顶元素是左括号直
接返回
if(lyb.islastoper)return;//上一个也是运算符,直接返回
lyb.islastoper=true;
char.ToString(ch));
chartmp=lyb.COMPARE(ch,lyb.GetTop(lyb.OPER,false));//当前运算符
与栈顶元素比较
switch(tmp)
{
case'<':
case'=':
valH=lyb.Pop_Get(lyb.VALUE,true);//优先级低或
相等完成相关运算
valL=lyb.Pop_Get(lyb.VALUE,true);//调试过程发生内存泄露
switch(lyb.GetTop(lyb.OPER,false))
{//完成相关运算
case'+':
lyb.Push(lyb.VALUE,valL+valH,true);break;
case'-':
lyb.Push(lyb.VALUE,valL-valH,true);break;
case'*':
lyb.Push(lyb.VALUE,valL*valH,true);break;
case'/':
if(valH==0)
{
MessageBox.Show("除数不能为零");
lyb.Push(lyb.VALUE,valH,true);
lyb.Push(lyb.OPER,'/',false);
return;
}
lyb.Push(lyb.VALUE,valL/valH,true);break;
case'^':
lyb.Push(lyb.VALUE,lyb.pow(valL,valH),true);
break;
default:
break;
}
lyb.Pop_Get(lyb.OPER,false);
lyb.Push(lyb.OPER,ch,false);
lyb.result=lyb.VALUE[0];
tmpchar=lyb.GetTop(lyb.VALUE,true).ToString();break;
case'>':
lyb.Push(lyb.OPER,ch,false);break;//优先级高,运算符
进栈
default:
break;
}
}
textBox2.Text=tmpchar;
textBox1.Text=lyb.inputstr;
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 科学 计算器 课程设计 报告