c#课程设计报告王文旭.docx

上传人:b****4 文档编号:3635249 上传时间:2022-11-24 格式:DOCX 页数:19 大小:74.86KB
下载 相关 举报
c#课程设计报告王文旭.docx_第1页
第1页 / 共19页
c#课程设计报告王文旭.docx_第2页
第2页 / 共19页
c#课程设计报告王文旭.docx_第3页
第3页 / 共19页
c#课程设计报告王文旭.docx_第4页
第4页 / 共19页
c#课程设计报告王文旭.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

c#课程设计报告王文旭.docx

《c#课程设计报告王文旭.docx》由会员分享,可在线阅读,更多相关《c#课程设计报告王文旭.docx(19页珍藏版)》请在冰豆网上搜索。

c#课程设计报告王文旭.docx

c#课程设计报告王文旭

计算机科学与应用系

C

#

 

题目:

简易计算器

专业:

计算机科学以技术

学号:

111006228

姓名:

王文旭

指导老师:

李向

完成日期:

2012-12-25

目录

1前言3

2需求分析3

2.1要求3

2.2任务3

2.3运行环境3

2.4开发工具3

3概要设计与详细设计4

3.1系统流程图4

4窗体相关控件设置5

5源代码分析6

6具体功能分析11

7程序的优缺点分析13

8课程设计报告总结13

9个人贡献14

 

1)前言

编写一个window窗口程序来进行简单的数据计算。

通过一个窗口类来进行数据的输入和计算,并将需要得到的数据显示出来以供操作者使用。

本程序能进行相应的键盘操作和鼠标操作。

并且还能在显示的标签内进行逐个删除和全部清空。

2)需求分析

2.1要求

(1)用C#语言实现window可视化窗口程序设计;

(2)操作简便并能用键盘输入数据和简单运算符;

(3)能够形象画出模块图且与程序流程图吻合;

(4)系统的各个功能模块要求用函数的形式实现;

(5)界面友好(良好的人机互交),程序要有注释。

2.2任务

(1)分析设计计算机的相关功能与操作;

(2)构造数学模型,画出所有模块的流程图;

(3)定义一个window窗口类,进行添加各种相应的控件,并进行相应控件属性的修改和设置,及调整;

(4)编写代码;

(5)程序分析与调试,输入需要操作的相关数据和运算符进行操作。

2.3运行环境

(1)MicrosoftVisualstudio2005编程环境;

2.4开发工具

(1)C#语言

(2)MicrosoftVisualstudio2005编程环境

3)概要设计与详细设计

3.1系统流程图

 

如图3.1所示。

4)window窗体相关控件设置

1.创建一个window应用程序,并把其项目名为Exp3;

2.把窗体命名为MainForm,Text属性设置为“简易计算器”;KeyPreview属性设置为True,使该窗体能够使用KeyPresss命令,从键盘上完成数据和简单运算符的输入输出;MaximizeBox属性设置为False,是窗体不能够最大化从而保持良好的视觉效果;BackColor设置为ControlDarkDark,使按钮能够清晰反存出来;ShowIcon设置为False,使窗体左上角的小图标不能显示出来;FormBorderStyle(不能鼠标改变窗口大小)属性为FixedDialog;StartPosition属性设置为CenterScreen,使窗体出现在屏幕正中央。

3.在窗体上放置一个Label,,命名为lblResult,将AutoSize属性设置为False,使标签Label的大小显示出来;将TextAlign属性设置为MiddleRight,使在标签中显示的内容靠右显示出来;BorderStyle属性设置为FixedSingle,使标签的轮廓和边缘显示出来;BackColor属性设置为White,将标签的背景设置为白色与Text中显示的黑色字和窗体的黑色背景形成对比。

4.在窗体上放置31Button,并按照图4-1所示简易计算器对各控件命名,修改相应Text属性;

lblResult

 

Button1111

Button2

Button3

 

btnPI

btnPST

btnBACK

btnUPTODOWN

 

btnSqrt

btnAsin

btnAcos

btnAtan

btnSIN

btnCOS

btnTAN

btnSqrt

btnDiv

btn9

btn8

btn7

 

btnMul

btn6

btn5

btn4

btnSub

btn3

btn2

btn1

 

btnDot

btnAdd

btnEqual

btn0

 

5)源代码的分析

1.建一个窗体类,publicpartialclassMainForm:

Form{};

2.窗体中的数据成员为,

constdoubleπ=3.1415926535898;//定义的常量π

doublenum=0;//定义的普通成员,完成数据间转换,充当媒介

intmb=0;//定义的普通成员,用来临时存储字符串长度

charoper='\0';//用来判断是什么运算符

doublenum1=0;//用来保存第一个操作数

doublenum2=0;//用来保存第一个操作数

boolisSecond=false;//判断是第几个操作数

boolisDone=false;//用来判断是否进行“=”操作

boolopen=false;//用来判断计算器是否打开

3.窗体中的方法成员,

voidsetBtnFun(charc)//对输入字符进行相应反映的操作

{

if(char.IsDigit(c))//判断输入字符“c“是否为数据类型

{

if(isSecond||isDone)//判断是否为第二个数据成员或者是否进行“=”操作

{

lblResult.Text="";//将标签设置为空

isSecond=false;//设置第二个操作数已经完成

isDone=false;//设置为没有完成“=”处理

}

if(lblResult.Text!

="0")//判断标签中没有零显示

{

strings=lblResult.Text+c.ToString();//将输入的字符合并到字符串中

lblResult.Text=s;//显示合并后的字符串

}

elseif(lblResult.Text=="0"&&c=='0')//判断标签中是0且新添加的字符

{也为0;

lblResult.Text="0";//该种情况下,标签中只显示0;

}

elseif(lblResult.Text=="0"&&c!

='0')//判断标签显示0且新添加的字符

{不是0;

lblResult.Text=c.ToString();//该种情况下,将新添加的字符覆盖掉原来标签中的0;

}

}

elseif(c=='+'||c=='-'||c=='*'||c=='/'||c=='^')

{//判断输入的字符是否为运算符

num1=double.Parse(lblResult.Text);//将标签中的字符串转为数字赋值给数字1

oper=c;//将字符c赋值给oper,以便后面进行判断

isSecond=true;//设置第二个数正在进行输入

}

elseif(c=='=')//判断字符c是否为“=”

{

num2=double.Parse(lblResult.Text);//将标签中的字符串转为数字赋值给数字2

doubleresult=0;//添加一个double成员来存储结果

switch(oper)//判断字符(即判断运算符)

{

case'+':

//求加

result=num1+num2;

break;

case'-':

result=num1-num2;//求减

break;

case'*':

//求乘

if(num2!

=0)

result=num1*num2;

break;

case'/':

//求除

result=num1/num2;

break;

case'^':

//求幂

result=Math.Pow(num1,num2);

break;

}

lblResult.Text=Convert.ToSingle(result).ToString();//将运算结果转num1=result;化为字符串

isSecond=false;

isDone=true;

}

elseif(c=='.')

{

if(lblResult.Text.IndexOf(".")==-1)//IndexOf从左查找字符判断是否{加过“.”

lblResult.Text+=".";

}

}

}

4.窗体中的事件成员,

a)

该事件为数字0~9、‘.’、‘+’、‘-’、‘*’、‘/’共用事件,通过用鼠标托引或Alt选择这些项,然后单击它们共有事件中的Click事件完成;

privatevoidbtnAdd_Click(objectsender,EventArgse)//所有数字键和运算符键的公共事件

{

if(open)

setBtnFun(char.Parse(((Button)sender).Text));

}

b)

该事件为窗口的KeyPress事件,通过该事件可以调用键盘上的字符

privatevoidMainForm_KeyPress(objectsender,KeyPressEventArgse)//键盘输入字符

{

if(open)

setBtnFun(e.KeyChar);

}

c)

该事件分别为窗体的实现计算器打开ON和关闭OFF功能的事件;只有当计算机处于开机状态时计算器才能工作,用“0”标识计算器是否处于开机状态;

privatevoidbutton3_Click(objectsender,EventArgse)//打开计算器的功能

{

lblResult.Text="0";//用“0”标识计算器是否处于开机状态

open=true;

}

privatevoidbutton1_Click(objectsender,EventArgse)//关闭计算器的功能

{

lblResult.Text="";

open=false;

}

d)

该事件为,将窗体中的“=”的Click事件;

privatevoidbtnEqual_Click(objectsender,EventArgse)

{

if(open)

setBtnFun(char.Parse(((Button)sender).Text));

}

e)

该事件为,窗体中的“清除”事件的Click事件,用来完成显示条上的清屏;

privatevoidbutton2_Click(objectsender,EventArgse)

{

if(open)

lblResult.Text="0";

}

f)

该事件为,对窗体上π按钮的实现,通过传送“3.1415”的各个字符来完成对π的调用和计算

privatevoidbtnPI_Click(objectsender,EventArgse)//PI键设置,和实现

{

if(open)

{

setBtnFun('3');

setBtnFun('.');

setBtnFun('1');

setBtnFun('4');

setBtnFun('1');

setBtnFun('5');

}

}

g)

通过该事件,调用voidsetBtnFun(charc)事件,来调用‘^’,完成X^Y的计算

privatevoidbtnMI_Click(objectsender,EventArgse)

{

if(open)

setBtnFun('^');

}

h)

该事件分别实现对sin、cos、tan按钮的实现和计算,通过输入一个任意角度,可以通过其需求完成其相应的计算,如:

输入角度30,调用sin功能,可以计算出sin30所对应的值0.5并显示出来;

sin功能函数的实现:

privatevoidbtnSin_Click(objectsender,EventArgse)

{

if(open)

{

num=π/180*(double.Parse(lblResult.Text));//将角度转化为弧度

lblResult.Text=Convert.ToSingle(Math.Sin(num)).ToString();

num=0;

}//调用Math的成员函数Sin()并转化为字符串

}

cos功能函数的实现:

privatevoidbtnCOS_Click(objectsender,EventArgse)

{

if(open)

{

num=π/180*(double.Parse(lblResult.Text));//将角度转化为弧度

lblResult.Text=Convert.ToSingle(Math.Cos(num)).ToString();

num=0;

}//调用Math的成员函数Sin()并转化为字符串

}

tan功能函数的实现:

privatevoidbtnTAN_Click(objectsender,EventArgse)

{

if(open)

{

num=π/180*(double.Parse(lblResult.Text));//将角度转化为弧度

lblResult.Text=Convert.ToSingle(Math.Tan(num)).ToString();

num=0;//调用Math的成员函数Sin()并转化为字符串

}

}

i)

该事件分别实现对arcsin、arccos、arctan按钮的实现和计算,通过输入一个[-1,1]的数字,可以通过其需求完成其相应的计算,如:

输入角度0.5,调用Acos功能,可以计算出Acos0.5所对应的角度60并显示出来;

Asin功能函数的实现:

privatevoidbtnAsin_Click(objectsender,EventArgse)

{

if(open)

{

//将显示条上的字符串转化为数字,调用Math的函数成员Asin()得到相应的弧度并转化为角度

num=double.Parse(lblResult.Text);

lblResult.Text=Convert.ToSingle(Math.Asin(num)*180/π).ToString();

num=0;

}

}

Acos功能函数的实现:

privatevoidbtnAcos_Click(objectsender,EventArgse)

{

if(open)

{

//将显示条上的字符串转化为数字,调用Math的函数成员Acos()得到相应的弧度并转化为角度

num=double.Parse(lblResult.Text);

lblResult.Text=Convert.ToSingle(Math.Acos(num)*180/π).ToString();

num=0;

}

}

Atan功能函数的实现:

privatevoidbtnAtan_Click(objectsender,EventArgse)

{

if(open)

{

//将显示条上的字符串转化为数字,调用Math的函数成员Atan()得到相应的弧度并转化为角度

num=double.Parse(lblResult.Text);

lblResult.Text=Convert.ToSingle(Math.Atan(num)*180/π).ToString();

num=0;

}

}

j)

该事件为实现对输入的数据进行开方,即求平方根,通过调用Math的Sqrt功能函数来完成计算,并将结果显示到显示条上;

privatevoidbtnSqrt_Click(objectsender,EventArgse)

{

if(open)//判断电脑是否处于开机状态

{

num=double.Parse(lblResult.Text);

if(num>=0)

lblResult.Text=Convert.ToString(Math.Sqrt(num));//调用Math的Sqrt功能函数来

num=0;完成计算;

}

}

k)

该事件为‘←’按钮的Click事件,用来完成对显示条的后退删除,即用来删除因失误而显示的字符,即回退;实现该功能String的Length和Remove功能函数;

privatevoidbtnBACK_Click(objectsender,EventArgse)

{

if(open)

{

mb=lblResult.Text.Length;//调用String的Length函数来求显示条上字符串的长度

if(mb!

=1)//调用String的Remove函数来删除显示条上最后一个字符

lblResult.Text=lblResult.Text.Remove(mb-1);

else

lblResult.Text="0";

num=0;

}

}

6)功能具体分析

a)可以完成简单数据的‘+’,‘-’,‘*’,‘/’的运算

如:

输入一个值5,可以键盘输入一个数字5或者单击窗体上的5按钮即可在显示条显示数字5(但要明白这里的5是以字符串的形式表示出来的并不是我们真正意义上的数字5)但在程序中通过数据类型转变即可再将其转化为数字double类型,然后将其赋值给num1;

其次,确认需要进行的运算,同理,输入运算符如‘*’(这里的乘号并未在显示条中显示,而是在内部进行的运算);

再次,同理,输入另一数字,并转化数据类型,复制予num2;

最后,系统内部,执行switch语句判断运算符,选择相对应的运算语句进行运算result=num1*num2,将运算的结果result转化为字符串类型,使其在显示上显示出来;

b)可以完成三角函数与反三角函数的运算

简单运算:

首先输入数字,输入方法同a)中所说(三角函数进行运算,输入的为角度;而对于反三角函数其输入的值为三角函数其对应的值在[-1,1]之内);

其次单击确定需要运算的运算符,即可求的其相对应的数值三角函数求得的值和反三角函数所求得的角度;

混合运算:

三角函数运算,首先输入一个角度如a1,求出其对应的三角函数值如sina1

然后输入运算符,如‘+’,其次输入另一个角度a2,求出其对应的三角函数值如cosa2,最后单击‘=’求结果,即可得到结果:

sina1+cosa2。

c)

可以求一个数的倒数,但是前提除数不能为零,否者为无穷大,没有意义;

d)

可以求一个数的幂,如x^y,先输入底数x,然后单击求幂的按钮,最后输入指数,单击‘=’按钮即可求得x^y的结果并在显示条上显示出需要求得的结果;

e)

可以求一个数的百分数,这个很简单,输入%号前的数字,单击求百分比按钮即可其相对应的数值;

f)

可以求一个数的平方根(但前提是被开根的数值必须大于等于零),输入数据,单击求根按钮即可求得其平方根,并在显示条上显示出来;

g)可以清屏,可以逐个删除,可以控制计算器是否处于开机关机状态。

7)程序的优缺点分析

优点:

Ø1.可以控制计算器是否处于开机关机状态。

通过以数字0判断计算器是否处于开机状态,还能有助于一些数据的输入如0.234,直接从小数点输入即可,方便快捷,一举多得;

Ø2.可以键盘输入数据,和简单的加,减,乘,除运算符,以及“=”运算符,还可以通过窗口上的按钮输入;

Ø3.拥有逐个删除字符的功能,可以使操作者因一些失误而导致的数据快速更正过来,还可以直接使用“清除”按钮对显示条进行清屏,方便操作者使用

Ø4.有良好的人机交流画面,方便操作者使用

Ø5.源代码中利用,多个button共用一个Click事件,减少了源代码的长度,是编程更加简便快捷,这种思想需要掌握和吸收、消化;

Ø6.计算器中运算符比较多,都是一些常用的,使使用者能够使用的范围不至于太狭小,增广了计算机使用的次数,受到更多人的欢迎。

缺点:

◆1.不能按混合运算从左到右的顺序进行运算,必须人工按四则运算的顺序进行逐个运算如1*2+3*4=14,必须先计算1*2,在计算3*4,最后再将2+12=14计算出来,这样计算起来比较麻烦,是使用不快捷,不简便。

◆2.不能使除数默认第一次所使用过的数据,如第一次计算6/3=2,如果再单击“=”运算符,不能继续让得到的结果除以3.相反的计算其中的变程使其除数默认为2,导致2/2=1而不是2/3=0.6666666667

◆3.在使用的时候不能输入负数;

8)课程设计报告总结

通过对这次数据结构的设计,在指导老师的悉心教导下,我学到了很多。

如:

通过本次实践掌握了数据类型之间的转换;学会掌握了窗体控件的的使用和各种属性的意义;学会了运用简单快捷的表达式实现程序逻辑;学会了逻辑运算符和关系运算在程序中的应用;学会了在程序中如何表达混合式;本次实践,虽然实现简易计算器比较简易,但也学会了很多知识,如通过将一些简单的按键功能封装在SetBtnFun()方法之内,并传递一个字符参数以区别实用的是哪一个功能。

如+,-,*,/,^的封装。

更好的是通过本次实践,展开了自己的联想,扩展了自己的思路,使自己的思维方式更加灵活快捷!

其次,通过本次实践我也找到了自己的一些不足和缺点,如,不能牢记各种属性的意思,易弄混,其次不能够使自己的作品完美也是有一点小小的遗憾!

不过,通过本次实践,我也学会了尊重别人创作思路,学会积极吸收优良的部分进行完善!

必竟,横看成岭侧成峰,远近高低各不同。

要学会而牢记孔夫子的话“三人行,必有我师焉,则其善者而从之,其不善者而改之。

”从另一个侧面,我也认识了编程的伟大,在这个领域,可以随便设计自己想要的东西,也可以说在这里,成就感不言而喻!

c#是一种比c语言用起来更方便的语言环境,能够自动匹配想要表达的字符。

降低了编程所需要的时间!

9)个人贡献:

分析实践问题构造数学模型,编撰源代码中的SetBtnFun()函数,和公共事件的Click事件的构思,及其他大部分事件的构思和撰写,以及窗体的设置。

本次实践完全是个人所完成,还协作帮助其他同学完成其他部分。

评语:

 

《C#课程设计》评分标准

题目:

简易计算器

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1