个人项目三
需求
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 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");
}
}
SaveFileDialog sfile = new SaveFileDialog(); //实例化一个保存文本对话框sfile
sfile.Filter = "文本文件|*.txt"; //保存文件类型为txt文件
if (sfile.ShowDialog() == DialogResult.OK) //如果保存成功
{
StreamWriter sw = new StreamWriter(sfile.FileName); //实例化文本写入流sw,并用sfile.FileName初始化
sw.WriteLine(wrong);
sw.Close(); //关闭sw
MessageBox.Show("已导出成功!");
}
}
}
}
代码

浙公网安备 33010602011771号