【年少的风】C#小学生算式自动生成器2

测试面板对应的代码如下:

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

using System.Data.OleDb;
using System.Data.SqlClient;

namespace BriansApplication1
{
    public partial class TestPaper : Form
    {
        int nTest = 0;
        int NTEST = 0;
        int page = -1;
        int count = 0;
        string id = null;
        Login login = new Login();

        int flagcount = 0;

        int[] key = new int[1000];
        string keys = null;
        string question = null;
        string answer = null;

        Register register = new Register();
       
        public TestPaper()
        {
            InitializeComponent();
        }
        public TestPaper(string id)
        {
            InitializeComponent();
            this.id = id;
        }

        public void TestPaper_Load(object sender, EventArgs e)
        {

            #region label处理
            Label[] label = new Label[10];
            label[0] = label1;
            label[1] = label2;
            label[2] = label3;
            label[3] = label4;
            label[4] = label5;
            label[5] = label6;
            label[6] = label7;
            label[7] = label8;
            label[8] = label9;
            label[9] = label10;
            for (int i = 0; i < 10; i++)
            {
                label[i].Visible = false;
            }

            TextBox[] testbox = new TextBox[10];
            testbox[0] = textBox1;
            testbox[1] = textBox2;
            testbox[2] = textBox3;
            testbox[3] = textBox4;
            testbox[4] = textBox5;
            testbox[5] = textBox6;
            testbox[6] = textBox7;
            testbox[7] = textBox8;
            testbox[8] = textBox9;
            testbox[9] = textBox10;
            for (int i = 0; i < 10; i++)
            {
                testbox[i].Visible = false;
            }
            #endregion
           // MessageBox.Show("login.tbID.Text:" + id);
        }

        static int GetRandomSeed()
        {
            byte[] bytes = new byte[4];
            System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
            rng.GetBytes(bytes);
            return BitConverter.ToInt32(bytes, 0);
        }

        private void btExit_Click(object sender, EventArgs e)
        {
            #region label处理
            Label[] label = new Label[10];
            label[0] = label1;
            label[1] = label2;
            label[2] = label3;
            label[3] = label4;
            label[4] = label5;
            label[5] = label6;
            label[6] = label7;
            label[7] = label8;
            label[8] = label9;
            label[9] = label10;

            TextBox[] testbox = new TextBox[10];
            testbox[0] = textBox1;
            testbox[1] = textBox2;
            testbox[2] = textBox3;
            testbox[3] = textBox4;
            testbox[4] = textBox5;
            testbox[5] = textBox6;
            testbox[6] = textBox7;
            testbox[7] = textBox8;
            testbox[8] = textBox9;
            testbox[9] = textBox10;

            #endregion
            if (page >= 0)
            {
                for (int i = 0; i < 10 && i < nTest; i++)
                {
                    answer += testbox[i].Text + "#";
                }

                MessageBox.Show(answer);
            }
            string mysqltest, mystr;
            SqlConnection myconn = new SqlConnection();
            SqlCommand mycmd = new SqlCommand();
            mystr = "Data Source=.\\SQLEXPRESS;Initial Catalog=Student;Integrated Security=True";
            myconn.ConnectionString = mystr;
            myconn.Open();
            mysqltest = string.Format("update student set answer='{0}' where id='{1}'", answer, id);
            mycmd.CommandText = mysqltest;
            mycmd.Connection = myconn;
            try
            {
                mycmd.ExecuteReader();
            }
            catch
            {
                MessageBox.Show("插入失败1");
            }
            myconn.Close();
            this.Dispose();
        }

        private void btPageDown_Click(object sender, EventArgs e)
        {
            #region label处理
            Label[] label = new Label[10];
            label[0] = label1;
            label[1] = label2;
            label[2] = label3;
            label[3] = label4;
            label[4] = label5;
            label[5] = label6;
            label[6] = label7;
            label[7] = label8;
            label[8] = label9;
            label[9] = label10;
            for (int i = 0; i < 10; i++)
            {
                label[i].Visible = false;
            }

            TextBox[] testbox = new TextBox[10];
            testbox[0] = textBox1;
            testbox[1] = textBox2;
            testbox[2] = textBox3;
            testbox[3] = textBox4;
            testbox[4] = textBox5;
            testbox[5] = textBox6;
            testbox[6] = textBox7;
            testbox[7] = textBox8;
            testbox[8] = textBox9;
            testbox[9] = textBox10;
            for (int i = 0; i < 10; i++)
            {
                testbox[i].Visible = false;
            }
            #endregion
            flagcount++;
            nTest -= 10;
            if (page >= 0)
            {
                for (int i = 0; i < 10 && i < nTest; i++)
                {
                    answer += testbox[i].Text + "#";
                }

                MessageBox.Show(answer);
            }


            page++;
           
                for (int i = 0; i < 10 && i < nTest; i++)
                {
                    if (page == 0)
                    {
                        this.btPageUp.Enabled = false;
                    }
                    else
                    {
                        this.btPageUp.Enabled = true;
                    }

                    label[i].Visible = true;
                    testbox[i].Visible = true;

                    if (nTest < 10)
                    {
                        this.btPageDown.Enabled = false;
                    }
                    else
                    {
                        this.btPageDown.Enabled = true;
                    }
                }

            string testback = null;
            string answerback = null;
            SqlConnection conn = new SqlConnection();
            SqlCommand cmd = new SqlCommand();
            string str = "Data Source=.\\SQLEXPRESS;Initial Catalog=Student;Integrated Security=True";
            conn.ConnectionString = str;
            conn.Open();
            string temp = string.Format("select test from student where id='{0}'", id);
            cmd.CommandText = temp;
            cmd.Connection = conn;
            try
            {
                SqlDataReader read1 = cmd.ExecuteReader();
               // SqlDataReader read2 = cmd.ExecuteReader();
                while (read1.Read())
                {
                    try
                    {
                        testback += read1.GetString(0);
                       // answerback += read2.GetString(0);
                    }
                    catch
                    {
                        MessageBox.Show("CHUCUOWU 1");
                    }
                }
            }
            catch (SqlException ea)
            {
                MessageBox.Show(ea.Message);
            }
            conn.Close();

            MessageBox.Show("testback:" + testback);

            conn.Open();
            temp = string.Format("select answer from student where id='{0}'", id);
            cmd.CommandText = temp;
            cmd.Connection = conn;
            try
            {
                //SqlDataReader read1 = cmd.ExecuteReader();
                 SqlDataReader read2 = cmd.ExecuteReader();
                while (read2.Read())
                {
                    try
                    {
                        //testback += read1.GetString(0);
                         answerback += read2.GetString(0);
                    }
                    catch
                    {
                        MessageBox.Show("CHUCUOWU 2");
                    }
                }
            }
            catch (SqlException ea)
            {
                MessageBox.Show(ea.Message);
            }
            conn.Close();
           
            try
            {
                string[] questionback = testback.Split('#');
                string[] answer1 = answerback.Split('#');

                for (int i = 1; i <= 10 && i <= nTest; i++)
                {
                    count = page * 10 + i;
                    MessageBox.Show(count.ToString() + nTest.ToString() + i.ToString() + page.ToString());
                    label[i - 1].Text = count.ToString() + "、" + questionback[count-1];
                    testbox[i - 1].Text = answer1[count - 1];
                }
              
            }
            catch
            {
                MessageBox.Show("answerback:" + answerback);
                MessageBox.Show(count.ToString() + nTest.ToString() + page.ToString());
            }
           
           
        }

        private void btCreate_Click(object sender, EventArgs e)
        {
            //this.btCreate.Enabled = false;
                try
                {
                    nTest = Convert.ToInt32(tbCount.Text);
                    NTEST = nTest;
                    nTest += 10;
                    lbAmount.Text = tbCount.Text;
                }
                catch
                {
                    MessageBox.Show("请正确输入试题数量!");
                    return;
                }
            #region 生产试题
            string[] str = new string[NTEST];

            int[] countTest = new int[NTEST];
            for (int i = 0; i < NTEST; i++)
            {
                countTest[i] = new Random(GetRandomSeed()).Next(2, 5);
            }
            for (int k = 0; k < NTEST; k++)
            {
                int[] num = new int[countTest[k]];
                char[] ops = new char[countTest[k] - 1];
                for (int i = 0; i < countTest[k]; i++)
                {
                    num[i] = new Random(GetRandomSeed()).Next(1, 100);
                }
                for (int i = 0; i < countTest[k] - 1; i++)
                {
                    int a = new Random(GetRandomSeed()).Next(1, 100);
                    switch (a % 4)
                    {
                        case 0: ops[i] = '+'; break;
                        case 1: ops[i] = '-'; break;
                        case 2: ops[i] = '*'; break;
                        case 3: ops[i] = '/';break;
                        default: ops[i] = '+'; break;
                    }
                }
                for (int i = 0; i < countTest[k] - 1; i++)
                {
                    str[k] += num[i].ToString() + ops[i];
                }
                str[k] =str[k] + num[countTest[k] - 1];
                question += str[k] + "#";
                key[k] = Calculate(str[k]);
                keys += key[k] + "#";
            }
            #endregion
            // MessageBox.Show(question);
            #region 存入数据库
            string mysqltest, mystr;
            SqlConnection myconn = new SqlConnection();
            SqlCommand mycmd = new SqlCommand();
            mystr = "Data Source=.\\SQLEXPRESS;Initial Catalog=Student;Integrated Security=True";
            myconn.ConnectionString = mystr;
            myconn.Open();
            mysqltest = string.Format("update student set test='{0}',testcount='{1}',result='{2}' where id='{3}'", question, NTEST ,keys,ToString(), id);
            mycmd.CommandText = mysqltest;
            mycmd.Connection = myconn;
            try
            {
                mycmd.ExecuteReader();
            }
            catch
            {
                MessageBox.Show("插入失败0");
            }
            myconn.Close();
            #endregion
            btPageDown_Click(sender, e);
        }

        private void btPageUp_Click(object sender, EventArgs e)
        {
#region lable处理
            Label[] label = new Label[10];
            label[0] = label1;
            label[1] = label2;
            label[2] = label3;
            label[3] = label4;
            label[4] = label5;
            label[5] = label6;
            label[6] = label7;
            label[7] = label8;
            label[8] = label9;
            label[9] = label10;
            for (int i = 0; i < 10; i++)
            {
                label[i].Visible = false;
            }

            TextBox[] testbox = new TextBox[10];
            testbox[0] = textBox1;
            testbox[1] = textBox2;
            testbox[2] = textBox3;
            testbox[3] = textBox4;
            testbox[4] = textBox5;
            testbox[5] = textBox6;
            testbox[6] = textBox7;
            testbox[7] = textBox8;
            testbox[8] = textBox9;
            testbox[9] = textBox10;
            for (int i = 0; i < 10; i++)
            {
                testbox[i].Visible = false;
            }
#endregion
            page--;
            nTest += 10;
            for (int i = 0; i < 10 && i <= nTest; i++)
            {
                if (page == 0)
                {
                    this.btPageUp.Enabled = false;
                }
                else
                {
                    this.btPageUp.Enabled = true;
                }
                label[i].Visible = true;
                testbox[i].Visible = true;
                if (nTest < 10)
                {
                    this.btPageDown.Enabled = false;
                }
                else
                {
                    this.btPageDown.Enabled = true;
                }
            }
           
            string testback = null;
            SqlConnection conn = new SqlConnection();
            SqlCommand cmd = new SqlCommand();
            string str = "Data Source=.\\SQLEXPRESS;Initial Catalog=Student;Integrated Security=True";
            conn.ConnectionString = str;
            conn.Open();
            string temp = string.Format("select test from student where id='{0}'", id);
            cmd.CommandText = temp;
            cmd.Connection = conn;
            try
            {
                SqlDataReader read = cmd.ExecuteReader();
                while (read.Read())
                {
                    testback += read.GetString(0);
                }
            }
            catch(SqlException ea)
            {
                MessageBox.Show(ea.Message);
            }

            string[] questionback = testback.Split('#');
            for (int i = 1; i <= 10; i++)
            {
                count = page * 10 + i;
                label[i - 1].Text = count.ToString() + "、" + questionback[count-1];

            }

        }

        private void btCurrent_Click(object sender, EventArgs e)
        {

        }

        private void btContinue_Click(object sender, EventArgs e)
        {
            tbCount.Enabled = false;
            SqlConnection myconn = new SqlConnection();
            SqlCommand mycmd = new SqlCommand();
            string mystr = "Data Source=.\\SQLEXPRESS;Initial Catalog=Student;Integrated Security=True";
            myconn.ConnectionString = mystr;
            myconn.Open();
            string mysqltest = string.Format("select testcount from student where id='{0}'",id);
            mycmd.CommandText = mysqltest;
            mycmd.Connection = myconn;
            try
            {
                SqlDataReader read = mycmd.ExecuteReader();
                while (read.Read())
                {
                    nTest = read.GetInt32(0) + 10;
                    NTEST = nTest;
                    lbAmount.Text = (nTest - 10).ToString();
                }
            }
            catch
            {
                MessageBox.Show("获取失败");
            }
            myconn.Close();

            btPageDown_Click(sender, e);
        }
       
        static int Calculate(string Expression)
        {
            List<int> numList = new List<int>();//运算数字列表
            List<char> OperatorList = new List<char>();//运行符列表
            bool numState = true;//true:表示刚遇到符号
            int num = 0;
            char[] expression = Expression.ToCharArray();
            for (int i = 0; i < expression.Length; i++)
            {
                if (Convert.ToInt16(expression[i]) > 58 || Convert.ToInt16(expression[i]) < 48)
                {
                    switch (expression[i])
                    {
                        case '+':
                            numState = true;
                            numList.Add(num);
                            break;
                        case '-':
                            numState = true;
                            numList.Add(num);
                            break;
                        case '*':
                            numState = true;
                            numList.Add(num);
                            break;
                        case '/':
                            numState = true;
                            numList.Add(num);
                            break;
                        default: throw new Exception("表达式不正确,含有未知字符!");
                    }
                    OperatorList.Add(expression[i]);
                }
                else if (numState)
                {
                    num = Convert.ToInt16(expression[i].ToString());
                    if (i == expression.Length - 1)
                        numList.Add(num);
                    numState = false;
                }
                else
                {
                    num *= 10; num += Convert.ToInt16(expression[i].ToString());
                    if (i == expression.Length - 1)
                        numList.Add(num);
                }
            }
            return getResults(numList, OperatorList);
        }
        static int getResults(List<int> numList, List<char> OperatorList)
        {
            if (numList.Count == 1)
                return numList[0];
            List<int> numList1 = new List<int>();
            numList1.Add(numList[0]);
            List<char> OperatorList1 = new List<char>();
            for (int i = 0; i < OperatorList.Count; i++)
            {
                if (OperatorList[i] == '+' || OperatorList[i] == '-')
                {
                    numList1.Add(numList[i + 1]);
                    OperatorList1.Add(OperatorList[i]);
                }
                else if (OperatorList[i] == '*')
                {
                    numList1[numList1.Count - 1] *= numList[i + 1];
                }
                else if (OperatorList[i] == '/')
                {
                    if (numList[i + 1] != 0)
                    {
                        numList1[numList1.Count - 1] /= numList[i + 1];
                    }
                    else
                        break;
                }
            }
            int results = numList1[0];
            for (int i = 0; i < OperatorList1.Count; i++)
            {
                if (OperatorList1[i] == '+')
                    results += numList1[i + 1];
                else results -= numList1[i + 1];
            }
            return results;
        }
    }
}

你可能感兴趣的:(C#,自动生成,年少的风,小学生算术)