码迷,mamicode.com
首页 > 数据库 > 详细

计算器软件的代码实现 (windowform窗体+SQL+策略模式)

时间:2015-12-08 23:45:08      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:

一 整体概述

   这个计算器软件的功能和以前的功能基本上一样,只不过是数据的保存形式发生了变化,,以前用的是txt文件保存,现在更正用SQL数据库,现在更改了以前的文件保存形式,是三层架构中数据层的更换,但是仍然采用了设计模式中的策略模式,对于在wpf中实现的要求,会在今后中进一步实现的!

二 数据库代码的封装 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Data;

namespace shuxuefudao
{
    class shujuku
    {
       
        string str = "Data Source=.;Initial Catalog=jisuan;Integrated Security=True"; //连接数据库的字符串
        SqlConnection sqlcon = new SqlConnection(); //声明相关语句的设置
        SqlDataAdapter sda = new SqlDataAdapter();
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        public int i = 0;   //相关变量的声明
        public string number1, number2, fuhao1,shu1,fuhao2,shu2,ti;
        public void lianjie()  //数据库连接的方法
        {
            try
            {
                sqlcon = new SqlConnection(str);

            }
            catch (Exception ex)
            {
                MessageBox.Show("数据连接不成功" + ex.Message);
            }
        }
        public void bianji()  //数据库中编辑试题的方法
        {
            lianjie();
            sqlcon.Open();
            try
            {
                string sqlstr = "insert into shuju(第一个数字,符号,第二个数字) values(‘" + number1 + "‘,‘" + fuhao1 + "‘,‘" + number2 + "‘)";
                SqlCommand comm = new SqlCommand(sqlstr, sqlcon);
                comm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show("出题失败" + ex.ToString());
            }
            sqlcon.Close();
        }
        public void qingkong() //清空后台数据库的数据
        {
            lianjie();
            sqlcon.Open();
            try
            {
                string sqltr = "delete  from shuju";
                SqlCommand comm = new SqlCommand(sqltr, sqlcon);
                comm.ExecuteNonQuery();
                SqlDataReader reder = comm.ExecuteReader();
                MessageBox.Show("删除成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show("删除失败" + ex.ToString());
            }
            sqlcon.Close();

        }
        public void JiSuan()  //在第一次计算后的计算方法
        {
                i++;
                lianjie();
                sqlcon.Open();
                string sqltr = "select * from shuju ";
                SqlCommand comm = new SqlCommand(sqltr, sqlcon);
                SqlDataAdapter da = new SqlDataAdapter(comm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                DataTable dt = ds.Tables[0];
                shu1 = dt.Rows[i][0].ToString();
                fuhao2 = dt.Rows[i][1].ToString();
                shu2 = dt.Rows[i][2].ToString();
                sqlcon.Close();
            
        }
        public void JiSuan1()  //初次单击计时开始时调用的方法,即第一个运算式子的调用
        {
            lianjie();
            sqlcon.Open();
            string sqltr = "select * from shuju ";
            SqlCommand comm = new SqlCommand(sqltr, sqlcon);
            SqlDataAdapter da = new SqlDataAdapter(comm);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            shu1 = dt.Rows[0][0].ToString();
            fuhao2 = dt.Rows[0][1].ToString();
            shu2 = dt.Rows[0][2].ToString();
            sqlcon.Close();
        }
        public void DaoRu()  //把数据库里面的式子全部导入到文本框中的方法
        {
            lianjie();
            sqlcon.Open();
            string sqltr = "select * from shuju ";
            SqlCommand comm = new SqlCommand(sqltr, sqlcon);
            SqlDataAdapter da = new SqlDataAdapter(comm);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dt.Rows[i][0].ToString();
                dt.Rows[i][1].ToString();
                dt.Rows[i][2].ToString();
                ti += dt.Rows[i][0].ToString().Trim() + dt.Rows[i][1].ToString().Trim() + dt.Rows[i][2].ToString().Trim() + "="+"\n";
            }
            sqlcon.Close();
        }
    }
}

三 策略模式的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace shuxuefudao
{
    class qita
    {

       
    }
    public interface Calculator //声明一个计算的接口
    {
        double Cal(double a,double  b);
    }
   public class Add : Calculator   //接口实现加法运算
   {
     public double Cal(double a, double b)
     {
         double result = 0;
         result = a + b;
         return result;
     }
   }
   public class Sub : Calculator //接口实现减法运算
 {
     public double Cal(double a, double b)
     {
         double result = 0;
         result = a - b;
         return result;
     }
 }
   public class Mul : Calculator  //接口实现乘法运算
 {
     public double Cal(double a, double b)
     {
         double result = 0;
         result = a * b;
        return result;
    }
 }
   public class Div : Calculator  //接口实现除法运算
 {
    public  double Cal(double a, double b)
    {
        double result = 0;
        result = a / b;
        return result;
     }
 }
 public class  Environment        //定义那个需要动态改变算法的对象   
 {
     private Calculator calculate;
     public Environment(Calculator calculate)
     {
        this.calculate = calculate;    
     }
     public double Cal(double a, double b, String m) //返回运算结果
     {
         return this.calculate.Cal(a, b);
    }
 }
 }
 

四 运算主体的代码

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

namespace shuxuefudao
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        shujuku bbb = new shujuku();
        string path = "E:\rtf";
        public static int Count = 0; // 题目出的数量
        public static int zuode = 0; //做的题目数量
        public static int zhengque = 0;
        public static int lefttime;
        public static int time;
        public static int sum;
        private void Form1_Load(object sender, EventArgs e)
        {
          
        }
        private void open_Click(object sender, EventArgs e) //打开文件的方法
        {
            OpenFileDialog TxTOpenDialog = new OpenFileDialog();
            TxTOpenDialog.Filter = "RTF文件(*.RTF)|*.RTF";
            if (TxTOpenDialog.ShowDialog() == DialogResult.OK)
            {
                path = TxTOpenDialog.FileName;
                this.richTextBox1.LoadFile(TxTOpenDialog.FileName, RichTextBoxStreamType.RichText);
                save.Enabled = false;
                open.Enabled = false;
                MessageBox.Show("读取成功", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

        private void save_Click(object sender, EventArgs e) //保存文件的方法
        {
            SaveFileDialog TxtSaveDialog = new SaveFileDialog();
            TxtSaveDialog.Filter = "RTF文件(*.RTF)|*.RTF";
            if (File.Exists(path))
            {

                this.richTextBox1.LoadFile(path, RichTextBoxStreamType.RichText);
                MessageBox.Show("保存成功", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.richTextBox1.Clear();
                save.Enabled = false;
            }
            else
            {
                if (TxtSaveDialog.ShowDialog() == DialogResult.OK)
                {

                    this.richTextBox1.SaveFile(TxtSaveDialog.FileName, RichTextBoxStreamType.RichText);
                    MessageBox.Show("保存成功", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.richTextBox1.Clear();
                    save.Enabled = false;
                }
            }
        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            save.Enabled = true;
            if (this.richTextBox1.Text == "" || this.richTextBox1.Text == null)
            {
                open.Enabled = true;
            }
        }
        private void open2_Click(object sender, EventArgs e) //打开试题的方法
        {
            OpenFileDialog TxTOpenDialog = new OpenFileDialog();
            TxTOpenDialog.Filter = "RTF文件(*.RTF)|*.RTF";
            if (TxTOpenDialog.ShowDialog() == DialogResult.OK)
            {
                path = TxTOpenDialog.FileName;
                this.richTextBox2.LoadFile(TxTOpenDialog.FileName, RichTextBoxStreamType.RichText);
                save.Enabled = false;
                open.Enabled = false;
                MessageBox.Show("打开成功", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

        private void daoru_Click(object sender, EventArgs e) //导入试题的方法
        {
            bbb.DaoRu();
            richTextBox2.Text = bbb.ti;
           
        }

        private void daan1_Click(object sender, EventArgs e)
        {
            if (daan1.Text == "显示答案")
            {
                daan.PasswordChar = Convert.ToChar(0);
                daan1.Text = "隐藏答案";
            }
            else if (daan1.Text == "隐藏答案")
            {
                daan.PasswordChar = .;
                daan1.Text = "显示答案";

            }
        }

        private void kaishi_Click(object sender, EventArgs e)
        {

            bbb.JiSuan1();
            textBox1.Text = bbb.shu1;
            textBox2.Text = bbb.fuhao2;
            textBox3.Text = bbb.shu2; 
            int minute;
             try
             {
                 minute = int.Parse(this.shijian.Text);
             }
             catch (System.Exception ex)
             {
                 this.shijian1.Text = "输入错误";
                 return;
             }
             lefttime = minute;
             this.timer1.Interval = 1000;
             this.timer1.Enabled = true;
             this.timer1.Start();

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            time = Convert.ToInt32(shijian.Text);
            if (lefttime <= 0)
            {
                timer1.Enabled = false;
                MessageBox.Show("答题时间到!");
                textBox4.Enabled = false;
                Form2 frm2 = new Form2();
                frm2.ShowDialog();
            }
            this.shijian1.Text = "剩余时间" + lefttime.ToString() + "";
            lefttime--;  
        }

        private void jieshu_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.ShowDialog();
        }

        private void button1_Click(object sender, EventArgs e) //请编辑下道题的事件
        {
            Count++;
            ti.Text = Count.ToString();
            bbb.number1=left.Text;
            bbb.fuhao1=fuhao.Text;
            bbb.number2=right.Text;
            bbb.bianji();
            richTextBox1.Text += left.Text + fuhao.Text + right.Text+"="+"\n";
            left.Clear();
            fuhao.Clear();
            right.Clear();
        }
        private void textBox4_KeyDown(object sender, KeyEventArgs e)
        {
            try //异常处理机制,预防数组发生越界
            {
                Environment environment = null;
                double a = Convert.ToDouble(textBox1.Text.Trim()); //为相关的变量赋值
                double b = Convert.ToDouble(textBox3.Text.Trim());
                string m = textBox2.Text.Trim();
                int result;
                switch (m)
                {
                    case "+":
                        environment = new Environment(new Add()); //策略模式的引用
                        break;
                    case "-":
                        environment = new Environment(new Sub());

                        break;
                    case "*":
                        environment = new Environment(new Mul());

                        break;
                    case "/":
                        environment = new Environment(new Div());

                        break;
                    default:
                        break;
                }

                if (e.KeyCode == Keys.Enter)
                {

                    if (int.TryParse(textBox4.Text, out result) == false)
                    {
                        MessageBox.Show("请输入数字");
                    }
                    string answer = environment.Cal(a, b, m).ToString();
                    daan.Text += answer + "\r\n";
                    if (textBox4.Text == answer.ToString())
                    {
                        MessageBox.Show("回答正确");
                        zuode++;
                        zhengque++;
                    }
                    else
                    {
                        MessageBox.Show("回答错误");
                        zuode++;
                    }
                bbb.JiSuan();
                textBox1.Text = bbb.shu1;
                textBox2.Text = bbb.fuhao2;
                textBox3.Text = bbb.shu2;
                textBox4.Text = "";  
                    }

                }


                catch (Exception ex)
                {
                    Form2 frm = new Form2();
                    frm.ShowDialog();
                }
               
        
        }

       
        private void button2_Click(object sender, EventArgs e) //清空上次编辑试题的方法
        {
            bbb.qingkong();
        }
        private void button3_Click(object sender, EventArgs e) //退出程序的方法
        {
            Application.Exit();
        }
    }
}

 

五  运行界面的展示

1 试题的编辑

技术分享

 技术分享

2 进行计算,并且判断正误

技术分享技术分享

3 统计做题情况

技术分享

计算器软件的代码实现 (windowform窗体+SQL+策略模式)

标签:

原文地址:http://www.cnblogs.com/wyh19941210/p/5025745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!