| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7254 人关注过本帖, 3 人收藏
标题:[分享]初学C#的练手程序--计算器(有图,有源码)
只看楼主 加入收藏
vfoxer
Rank: 2
等 级:论坛游民
威 望:1
帖 子:136
专家分:21
注 册:2006-9-12
收藏(3)
 问题点数:0 回复次数:26 
[分享]初学C#的练手程序--计算器(有图,有源码)
这是我初学C#第一次写的代码,当时是作为练手用的,现在分享出来给更多的新人练手用。
编程环境是vs2005。
代码注释我都写得很详细,几乎可以作为教程来看,希望给像我这样的新人有更多的帮助。

//一楼为图片,源程序
//二楼为源代码

Hh57W3ZG.rar (398.43 KB) [分享]初学C#的练手程序--计算器(有图,有源码)


[此贴子已经被作者于2007-4-7 11:22:32编辑过]



snKKi4CB.jpg (17.95 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 计算器 源码 初学 练手 
2007-04-07 11:17
vfoxer
Rank: 2
等 级:论坛游民
威 望:1
帖 子:136
专家分:21
注 册:2006-9-12
收藏
得分:0 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace jisuanqi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/*下面定义在计算过程中将用到的变量,如用户输入的操作数、小数点输入标志等*/

String Op1, Op2;
//预先输入操作数
Boolean DecimaFlag;
//小数点存在吗?
int NumOps;
//操作数个数
String LastInput;
//指示上一次按键事件的类型
int OpFlag;
//指示未完成的操作
String TempReadout;

//下面在窗体装载的时候初始化设计的参变量,例如将操作数的个数清空等。
private void Form1_Load(object sender, EventArgs e)
{
DecimaFlag = false;
//将小数点标志设置为假
NumOps = 0;
//将输入操作数个数设置为0
LastInput = "NONE";
//将最后一次输入标记设置为None
OpFlag = 0;
//将未完成的操作设置为空
Txtread.Text = "0.";
//格式化文本框的输出
}

/*定义一个函数来读取操作数,该函数有一个整型参数,该参数是用来确定用户单击的按钮所对应的数字的,
* 将这个数字字符增加到文本框显示的文本末尾,就实现了数字的输入操作,然后将该结果保存到操作数中,
* 为以后的运算做准备*/
//数字键0-9的click事件过程
//向显示中的数追加新数
public void calculate(int MyNumber)
{
int Index = MyNumber;
//取得单击的按钮对应的数字
if (LastInput != "NUMS")
{
Txtread.Text = "0.";
//格式化输入
DecimaFlag = false;
//设置小数点标志
}
if (DecimaFlag)
{
//表明已经单击过小数点按钮
Txtread.Text = Txtread.Text + MyNumber;
//则直接在文本框文本后面增加字符
}
else
{
//如果小数点标记为假
if (Txtread.Text == "0.")
{
//如果文本框中没有文本
Txtread.Text = MyNumber + ".";
//则将文本框中的字符设置为数字和点
}
else
{
//如果文本框中已经存在了字符
Txtread.Text = Txtread.Text.Substring(0, Txtread.Text.Length - 1) + MyNumber + ".";
//则将文本插入到整数部分的结尾处
}
}
if (LastInput == "NEG")
{
//如果上一次输入为负数
Txtread.Text = "-" + Txtread.Text;
}
LastInput = "NUMS";
//设置本次输入标记为正数
}

//给小数点增加操作代码,设置小数点标志
//小数点按钮的click事件过程
//如果上一次按键为运算符,初始化txtread为“0.”
//否则在显示时追加一个小数点
private void button10_Click(object sender, EventArgs e)
{
if (LastInput == "NEG")
{
//如果输入的负数
Txtread.Text = "-0.";
//按照负数格式输出
}
else if (LastInput != "NUMS")
{
//如果上一次输出的是正数
Txtread.Text = "0.";
//则按照整数格式输出
}
DecimaFlag=true;
//设置小数点标记为真
LastInput="NUMS";
//设置输入标志为正数

}

//在单击各个按钮时调用上面设计的输入函数来设置输入的操作数,在调用输入函数时,加入相应的参数,
//因为这个参数是与要输入的数字相一致的,所以只要根据按钮上的Text属性中的数字来填写参数即可。
private void Number1_Click(object sender, EventArgs e)
{
calculate(1);
}

private void Number2_Click(object sender, EventArgs e)
{
calculate(2);
}

private void Number3_Click(object sender, EventArgs e)
{
calculate(3);
}

private void Number4_Click(object sender, EventArgs e)
{
calculate(4);
}

private void Number5_Click(object sender, EventArgs e)
{
calculate(5);
}

private void Number6_Click(object sender, EventArgs e)
{
calculate(6);
}

private void Number7_Click(object sender, EventArgs e)
{
calculate(7);
}

private void Number8_Click(object sender, EventArgs e)
{
calculate(8);
}

private void Number9_Click(object sender, EventArgs e)
{
calculate(9);
}

private void Number0_Click(object sender, EventArgs e)
{
calculate(0);
}

//定义一个计算函数来实现各种计算操作,该计算函数有一个参数,这个参数用来标志是哪一种计算
//并且根据操作数的个数和菜做符号的种类,分别进行操作,最后将操作结果返回文本框,显示给用户

//运算符(+、-、*、/、=)的click事件过程
//如果接下来的按键是数字键,增加NumOps
//如果有一个操作数,则设置Op1;
//如果有两个操作数,则将Op1设置为Op1与当前输入字符串的运算结果,并显示结果
public void OperatorCal(int MyOperator)
{
//取得操作代号
int Index = MyOperator;
//取得文本框文本
TempReadout = Txtread.Text;
//设置文本框最后一次输入类型
if (LastInput == "NUMS")
{
NumOps = NumOps + 1;
//将操作数加一
}
String Myop;
Myop = NumOps.ToString();
switch (NumOps)
{
case 0:
if (MyOperator == 3 && LastInput != "NEG")
{
Txtread.Text = "-" + Txtread.Text;
LastInput = "NEG";
}
//如果有一个操作数
break;
case 1:
Op1 = Txtread.Text;
if(MyOperator == 3 && LastInput != "NUMS"&&OpFlag!=4)
{
Txtread.Text = "-";
LastInput = "NEG";
}
//如果有两个操作数
break;
case 2:
//取得第二个操作数
Op2 = TempReadout;
//根据操作标记进行不同的操作
switch (OpFlag)
{
//如果是加法操作
case 1:
Op1 = (Double.Parse(Op1) + Double.Parse(Op2)).ToString();
//将两个操作数相加然后复制给操作数1
//如果是减法
break;
case 3:
Op1 = (Double.Parse(Op1) - Double.Parse(Op2)).ToString();
//将两个操作数相减然后复制给操作数1
//如果是乘法
break;
case 2:
Op1 = (Double.Parse(Op1) * Double.Parse(Op2)).ToString();
//将两个操作数相乘然后复制给操作数1
//如果是除法
break;
case 0:
//首先判断出书是否为0
if (Double.Parse(Op2) == 0)
{
//如果为0则显示除数不能为0的提示框
MessageBox.Show("除数不能为0", "计算器");
}
else
{
Op1 = (Double.Parse(Op1) / Double.Parse(Op2)).ToString();
//将两个操作数相除然后复制给操作数1
}
break;
//如果是等号操作
case 4:
//取得当前值
Op1 = Op2;
break;
}
Txtread.Text = Op1;
//则显示计算结果
NumOps = 1;
//将操作数个数设置为一个
break;
}
if (LastInput != "NEG")
{
//如果最后一次输入是负数
LastInput = "OPS";
//设置输入类型
OpFlag = MyOperator;
//设置输入操作类型
}
}
//在各个操作按钮中调用上面函数,实现各种操作
private void Btnjian_Click(object sender, EventArgs e)
{
OperatorCal(3);//减法
}

private void Btnchu_Click(object sender, EventArgs e)
{
OperatorCal(0);//除法
}

private void Btncheng_Click(object sender, EventArgs e)
{
OperatorCal(2);//乘法
}

private void Btnjia_Click(object sender, EventArgs e)
{
OperatorCal(1);//加法
}

private void Btndy_Click(object sender, EventArgs e)
{
OperatorCal(4);//等号
}

//给百分号按钮增加操作代码,如果调用了百分号操作,只要将操作数缩小100即可
private void Btnbf_Click(object sender, EventArgs e)
{
//百分比键的click事件过程如下
//计算并显示第一个操作数的百分数
Txtread.Text = (Double.Parse(Txtread.Text) / 100).ToString();
LastInput = "Ops";
NumOps = NumOps + 1;
DecimaFlag = true;
}

//给c按钮增加实现代码,该按钮是用来清空左右操作的
//该操作的主要任务是初始化运算中用到的各个参数

//c按钮的click事件过程
//重新设置显示并初始化变量
private void Btnc_Click(object sender, EventArgs e)
{
Txtread.Text = "0.";
//格式化输出
Op1 = "";
//将操作数一清零
Op2 = "";
//将操作数二清零
Form1_Load(this, new System.EventArgs());
//调用窗体载入时的操作
}

//给ce按钮增加操作代码,该按钮左右用来清空错误输入用的
//与c的不同之处在于本按钮的操作是要保留原来的计算结果,只是清空本次输入而已
//ce按钮的click事件
private void Btnce_Click(object sender, EventArgs e)
{
//格式化文本框的输出
Txtread.Text = "0.";
//设置小数标记为假
DecimaFlag=false;
//指示上一次输入的类型
LastInput="CE";
}
}
}


狐狸天堂:http://www.
我的百度空间:http://hi.baidu.com/vfoxer
2007-04-07 11:20
yefeng01
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-4-6
收藏
得分:0 

我来小支持一把

2007-04-07 12:42
shiweifu
Rank: 1
等 级:新手上路
帖 子:193
专家分:3
注 册:2006-12-2
收藏
得分:0 
支持!~
2007-04-07 16:50
zfc21
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2007-3-30
收藏
得分:0 

谢谢分享啊
我要了

2007-04-07 17:01
zhou123456
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-4-7
收藏
得分:0 
谢谢,要了
2007-04-07 18:15
youlove13
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-8-4
收藏
得分:0 

呵呵。。。好东西啊。。。

2007-08-04 21:49
wzerolai
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-5-14
收藏
得分:0 

虽然平凡.但也是个好东西.
先顶下....

2007-08-04 21:55
反正都是自我
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-27
收藏
得分:0 
好东西,收下了。

2007-08-04 22:11
反正都是自我
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-27
收藏
得分:0 
弱弱的说一句,我用+-*/算完后,狂按=怎么没继续算下去?

2007-08-04 22:14
快速回复:[分享]初学C#的练手程序--计算器(有图,有源码)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019118 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved