1. 程式人生 > >個人專案3:加強版四則運算

個人專案3:加強版四則運算

需求

1.實現線上答題

2.答題結束後,可以判斷對錯

3.並將錯題的結果儲存起來

設計思想

1.設計視窗:使用了dataGridView表格控制元件,4個textBox控制元件,5個button控制元件和若干Label視窗控制元件

2.程式編輯:(1)在上次的四則運算的基礎上,將四則運算的式子顯示在“顯示”按鈕的程式裡

                              並且計算式子的正確值,並將正確結果的那一列的屬性顯示不可見

                     (2)編寫“驗證”控制元件的程式,判斷輸入的結果和正確結果是否一致,並將結果正

                              確性顯示在dataGridView表格中。

                      (3)編寫“儲存“控制元件的程式,將錯題儲存到桌面上,並自動生成一個名稱為“錯題本”

                               的txt檔案

3.除錯和執行程式

出現的問題

1.四則運算的式子不能正確輸入到dataGridView表格中

2.點選“顯示“按鈕時,正確結果也會出現在表格中

3.判斷結果正確性時,結果全部顯示的是錯誤

4.儲存出來的只出現四則運算的最後一個式子

解決方法

1.定義一個字串型別的變數,將四則運算的中數字和符號賦值到字串中,將字串輸入到表格中

2.將正確結果和結果正確性這兩列的屬性在剛開始顯示為不可見,點選“驗證“按鈕時,將這兩列改為可見

3.將表格中的資料轉化為double型別再比較

4.將錯誤的式子求和再輸出

執行結果

 

程式碼

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 個人專案3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button5_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();   //清空資料的行和列
            dataGridView1.Columns.Clear();
            dataGridView1.ColumnCount = 4;     //定義表格列數,並賦表頭名稱
            dataGridView1.Columns[0].Name = "四則運算";
            dataGridView1.Columns[1].Name = "結果";
            dataGridView1.Columns[2].Name = "正確結果";
            dataGridView1.Columns[3].Name = "結果正確性";
            textBox3.Text = "";    //清空正確率的值
        }

        private void button1_Click(object sender, EventArgs e)
        {
            double m = Convert.ToDouble(textBox1.Text);   //取textBox控制元件的值
            double n = Convert.ToDouble(textBox2.Text);
            double q = Convert.ToDouble(textBox4.Text);
            dataGridView1.RowCount = (int)q;      //定義表格的行數
            Random r = new Random();              //取隨機數的函式
            for (int i = 0; i < q; i++)
            {
                double num1 = r.Next((int)m, (int)n);    //取隨機數
                double num2 = r.Next((int)m, (int)n);
                int a = r.Next(0, 3);
                double c = 1;
                char signal = '+';
                if(a%3==0)             //隨機取四則運算的符號
                {
                    signal = '+';
                    c = num1 + num2;
                }
                else if(a%3==1)
                {
                    signal = '-';
                    if (num1 < num2)
                        {
                            double temp;
                            temp = num1;
                            num1 = num2;
                            num2 = temp;
                        }
                        c = num1 - num2;
                }
                else if(a%3==2)
                {
                    signal = '*';
                    c = num1 * num2;
                }
                else if (num1 / num2 == 0 && num1 != 0 && num2 != 0)
                {
                    signal = '/';
                    c = num1 / num2;
                }
                dataGridView1.Rows[i].Cells[2].Value = c;   //四則運算的正確結果
                string s = Convert.ToString(num1) + signal + Convert.ToString(num2)+'=';
                dataGridView1.Rows[i].Cells[0].Value = s;   //顯示四則運算
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            double q = Convert.ToDouble(textBox4.Text);
            dataGridView1.RowCount = (int)q;
            dataGridView1.Columns[2].Visible=true;     //將列“正確結果”和“結果正確性”變為可見
            dataGridView1.Columns[3].Visible=true;
            int a=0;
            for (int i = 0; i < q; i++)     //判斷結果正確性
            {
                if (Convert.ToDouble(dataGridView1.Rows[i].Cells[1].Value) == Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value))
                {
                    dataGridView1.Rows[i].Cells[3].Value = "正確";
                    a += 1;
                }
                else
                {
                    dataGridView1.Rows[i].Cells[3].Value = "錯誤";
                }
            }
            double b;     //計算並輸出正確率
            b = a / q;
            b = Math.Round(b, 2)*100;
            string c = Convert.ToString(b) + '%';
            textBox3.Text = c;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string path = @"C:\Users\destiny\Desktop\錯題本.txt";
            if (File.Exists(path))
            {
                File.Delete(path);
            }
            string wrrong = "";
            double q = Convert.ToDouble(textBox4.Text);
            dataGridView1.RowCount = (int)q;
            for (int i = 0; i < q; i++)
            {
                if (Convert.ToDouble(dataGridView1.Rows[i].Cells[1].Value) != Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value))
                {
                    wrrong += Convert.ToString(dataGridView1.Rows[i].Cells[0].Value + "\r\n");
                }
            }
            StreamWriter sw = new StreamWriter(path);
            sw.WriteLine(wrrong);
            sw.Close();
        }
    }
}

時間記錄日誌