| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 947 人关注过本帖
标题:关于简易计算器的一个小问题
只看楼主 加入收藏
shengshm1989
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-15
结帖率:16.67%
收藏
 问题点数:0 回复次数:6 
关于简易计算器的一个小问题
程序代码:
using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace caculator
{
    public partial class Form1 : Form
    {
        bool DataFlag = false;
        bool OperFlag = false;
        double dataNum1 = 0;
        double dataNum2 = 0;
        int Oper_Num = 0;
        public Form1()
        {
            InitializeComponent();
            txt_show.KeyPress += new KeyPressEventHandler(txt_show_KeyPress);
          
        }
        //检验数字键
        void txt_show_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar < 47 || e.KeyChar > 58)
                e.Handled = true;
            else
                e.Handled = false;

        }

       

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        //backspace按键工作
        private void btn_backsapce_Click(object sender, EventArgs e)
        {
            try
            {
                this.txt_show.Text = txt_show.Text.Substring(0, txt_show.Text.Length - 1);
                dataNum1 = 0;
                dataNum2 = 0;
            }
            catch (SystemException)
            { 
            }
        }
        //C按键工作
        private void btn_C_Click(object sender, EventArgs e)
        {
            txt_show.Text = txt_show.Text.Substring(0, 0);
            dataNum1 = 0;
            dataNum2 = 0;
        }
        //数字按键
        private void btn_0_Click(object sender, EventArgs e)
        {
            DataNum_Click(0);
        }

        private void btn_1_Click(object sender, EventArgs e)
        {
            DataNum_Click(1);
        }

        private void btn_2_Click(object sender, EventArgs e)
        {
            DataNum_Click(2);
        }

        private void btn_3_Click(object sender, EventArgs e)
        {
            DataNum_Click(3);
        }

        private void btn_4_Click(object sender, EventArgs e)
        {
            DataNum_Click(4);
        }

        private void btn_5_Click(object sender, EventArgs e)
        {
            DataNum_Click(5);
        }

        private void btn_6_Click(object sender, EventArgs e)
        {
            DataNum_Click(6);
        }

        private void btn_7_Click(object sender, EventArgs e)
        {
            DataNum_Click(7);
        }

        private void btn_8_Click(object sender, EventArgs e)
        {
            DataNum_Click(8);
        }

        private void button9_Click(object sender, EventArgs e)
        {
            DataNum_Click(9);
        }
        //组合数字
        private void DataNum_Click(int temp)
        {
            DataFlag = true;
            if (DataFlag)
            {
                if (!OperFlag)
                {
                    dataNum1 = double.Parse(txt_show.Text + temp.ToString());
                    txt_show.Text = dataNum1.ToString();
                }
                else
                {
                    dataNum2 = double.Parse(txt_show.Text+temp.ToString());
                    txt_show.Text = dataNum2.ToString();
                }
            }
        }
        //操作符处理
        private void btn_add_Click(object sender, EventArgs e)
        {   
            Oper_Num = 1;
            DataFlag = false;
            OperFlag = true;

        }

        private void btn_substract_Click(object sender, EventArgs e)
        {
            Oper_Num = 2;
            DataFlag = false;
            OperFlag = true;
        }

        private void btn_multiply_Click(object sender, EventArgs e)
        {
            Oper_Num = 3;
            DataFlag = false;
            OperFlag = true;
        }

        private void btn_divid_Click(object sender, EventArgs e)
        {
            Oper_Num = 4;
            DataFlag = false;
            OperFlag = true;
        }
        //等号求结果
        private void btn_equal_Click(object sender, EventArgs e)
        {
            if (OperFlag)
            {
                calculate(dataNum1, dataNum2, Oper_Num);
                txt_show.Text = dataNum1.ToString();
                dataNum2 = 0;
                OperFlag = false;
            }
            else
            {
                txt_show.Text = dataNum1.ToString(); 
            }
        }
        private void calculate(double data1, double data2, int oper)
        {
            int oper_num = oper;
            switch(oper_num)
            {   case 1:dataNum1=data1+data2;break;
                case 2:dataNum1=data1-data2;break;
                case 3:dataNum1=data1*data2;break;
                case 4:dataNum1=data1/data2;break;
             }

        }

        private void btn_dot_Click(object sender, EventArgs e)
        {
            char[] ch = txt_show.Text.ToCharArray();
            for (int i = 0; i < ch.Length; i++)//这里数组的长度改成字符串的长度运行的时候就会报错
            {
                if (ch[i] == '.')
                {
                    txt_show.Text = "#####";
                    this.Close();
                }
              txt_show.Text = txt_show.Text+ btn_dot.Text;//如果是输入1个数显示正确,但是输入两个以上就会输出两个点
            }
        }
    }
}

代码不完整,只有一小部分功能,现在有奇怪的是,我是输入小数点的时候,会出现两个小数点。希望大家指点下。
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 计算器 
2014-07-09 16:08
步向巅峰
Rank: 5Rank: 5
来 自:河南
等 级:贵宾
威 望:17
帖 子:110
专家分:371
注 册:2013-4-26
收藏
得分:0 
for (int i = 0; i < ch.Length; i++)//这里数组的长度改成字符串的长度运行的时候就会报错
目测判断条件长度不能为动态变换的,应为固定长度,而从文本框中读出的字符串长度会因为输入或计算发生变化的可能,所以不能用字符串长度作为循环判断
txt_show.Text = txt_show.Text+ btn_dot.Text;//如果是输入1个数显示正确,但是输入两个以上就会输出两个点
表示不懂btn_dot.Text在这里是想干嘛,小数点不带这样加的
另外楼主是否限制txt_show不能接受小数点,否则你来个41.(txt_show.Text)+.(btn_dot.Text)不就出问题了,建议给小数点的权限为最小权限,让小数点在一定范围内只能输出一次,多次输出无效
你可以试试你多按几次小数点会不会出现txt_show.Text="........"的情况
以上均为目测,在网吧看的,没法测试,仅供参考
2014-07-10 13:03
shengshm1989
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-15
收藏
得分:0 
txt_show.Text = txt_show.Text+ btn_dot.Text这个不是将两个字符串连接起来的么,怎么不对了啊?
2014-07-10 17:36
步向巅峰
Rank: 5Rank: 5
来 自:河南
等 级:贵宾
威 望:17
帖 子:110
专家分:371
注 册:2013-4-26
收藏
得分:0 
没什么不对,不过我在网吧,不能对你的代码进行测试,我只是根据以前我做过的计算器给的建议,让你对小数点的输入次数进行限制,比如一个数中不能有两个小数点,两个小数点不能在一起,如果有这些情况,该会有什么处理
2014-07-11 09:55
步向巅峰
Rank: 5Rank: 5
来 自:河南
等 级:贵宾
威 望:17
帖 子:110
专家分:371
注 册:2013-4-26
收藏
得分:0 
操作符也应该有这些限制,另外你的代码中注释太少,我水平一般,读着太难
2014-07-11 09:57
shengshm1989
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-15
收藏
得分:0 
恩恩,我知道,可是我是点了一次小数点,文本中会出现两个小数点,如果是输入多个数字,会出现更多的小数点。不懂。
2014-07-11 13:44
fluentgz
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-7-17
收藏
得分:0 
来个简单点的方法,每次清空的时候,给个全局变量,设定小数点当为1次时,先判断 a 是否等于1。不等于则int a=1,a++;如果超过1时,则什么都不做。还要在加减乘除符号前后判断是否有小数点。没有就清空 变量a 好了。
2014-07-17 23:40
快速回复:关于简易计算器的一个小问题
数据加载中...
 
   



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

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