科学计算器课程设计报告Word文档下载推荐.docx

上传人:b****1 文档编号:1523187 上传时间:2023-04-30 格式:DOCX 页数:13 大小:269.88KB
下载 相关 举报
科学计算器课程设计报告Word文档下载推荐.docx_第1页
第1页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第2页
第2页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第3页
第3页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第4页
第4页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第5页
第5页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第6页
第6页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第7页
第7页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第8页
第8页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第9页
第9页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第10页
第10页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第11页
第11页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第12页
第12页 / 共13页
科学计算器课程设计报告Word文档下载推荐.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

科学计算器课程设计报告Word文档下载推荐.docx

《科学计算器课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《科学计算器课程设计报告Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。

科学计算器课程设计报告Word文档下载推荐.docx

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<

T>

(T[],bool)//泛型函数,返回栈顶元素

TPop_Get<

(T[],bool)//泛型函数,弹出并返回栈顶元素

voidPush<

(T[],T,bool)//泛型函数,执行入栈操作

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=='

-'

*'

/'

^'

)//是

运算符时

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'

<

'

:

='

valH=lyb.Pop_Get(lyb.VALUE,true);

//优先级低或

相等完成相关运算

valL=lyb.Pop_Get(lyb.VALUE,true);

//调试过程发生内存泄露

switch(lyb.GetTop(lyb.OPER,false))

{//完成相关运算

lyb.Push(lyb.VALUE,valL+valH,true);

break;

lyb.Push(lyb.VALUE,valL-valH,true);

lyb.Push(lyb.VALUE,valL*valH,true);

if(valH==0)

除数不能为零"

lyb.Push(lyb.VALUE,valH,true);

lyb.Push(lyb.OPER,'

false);

return;

lyb.Push(lyb.VALUE,valL/valH,true);

lyb.Push(lyb.VALUE,lyb.pow(valL,valH),true);

break;

default:

lyb.Pop_Get(lyb.OPER,false);

lyb.Push(lyb.OPER,ch,false);

lyb.result=lyb.VALUE[0];

tmpchar=lyb.GetTop(lyb.VALUE,true).ToString();

>

//优先级高,运算符

进栈

}

textBox2.Text=tmpchar;

textBox1.Text=lyb.inputstr;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2