四则运算3程序

一、设计思路

  第三版程序在第二版上增加了用户填写答案和自动批改答案功能,并且还能显示一共答对了多少题。

  在这里我引入的是datagridview控件来控制用户答题的变量,以及提取运算数和运算符号。在C#中这是一款功能很强大的控件,使用起来也相当方便。

二、程序源代码

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; namespace suanshu { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { shuliang.Text = "10"; chengchu.Text = ""; amout1.Text = "0"; amout2.Text = "100"; fushu.Text = ""; yushu.Text = ""; hangju.Text = "0"; dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None; dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; } Random ra = new Random(System.DateTime.Now.Millisecond);//时间毫秒数,取得随机数
        int rand(int num1, int num2) { int x; // Random ra = new Random(System.DateTime.Now.Millisecond);//时间毫秒数,取得随机数
            x = ra.Next(num1,num2); return x; } bool chongfu(int [] zu,int i,int num) { if(i==0) { return true; } else { int x=0,biaoji=1; while(x<i) { if (zu[x] == num) { biaoji = 0; break; } x++; } if (biaoji == 0) { return false; } else { return true; } } } bool cefushu(int num1, int num2,int ifushu) { if (ifushu ==0) { if (num1 >= num2) { return true; } else { return false; } } else { return true; } } bool ceyushu(int num1, int num2, int iyushu) { if (iyushu == 0) { if (num1%num2==0) { return true; } else { return false; } } else { return true; } } bool sushu(int num,int iyushu)  //检测是否是素数
 { if (iyushu == 1) { return false; } else { int i = 2, j = num / 2,biaoji=0; while (i <= j) { if (num % i == 0) { biaoji = 1; break; } i++; } if (biaoji == 1) { return false; } else { return true; } } } private void button1_Click(object sender, EventArgs e) { int ishuliang = Convert.ToInt16( shuliang.Text.Trim()); int ichengchu,iamout1,iamout2,ifushu,iyushu,ihangju;//获取变量参数
            iamout1 = Convert.ToInt16(amout1.Text.Trim()); iamout2 = Convert.ToInt16(amout2.Text.Trim()); ihangju = Convert.ToInt16(hangju.Text.Trim()); if (iamout1 > iamout2) { MessageBox.Show("您输入的范围错误,第一个数应该小于等于第二个数,现默认范围为1~100"); iamout1 = 1; iamout2 = 100; amout1.Text="1"; amout2.Text ="100"; } if (chengchu.Text.Trim() == "") { ichengchu = 1; } else { ichengchu = 0; } if (fushu.Text.Trim() == "") { ifushu = 1; } else { ifushu = 0; } if (yushu.Text.Trim() == "") { iyushu = 1; } else { iyushu = 0; } //生成一个表
            DataTable dt = new DataTable(); dt.Columns.Add("num1", Type.GetType("System.Int16")); dt.Columns.Add("sign", Type.GetType("System.String")); dt.Columns.Add("num2", Type.GetType("System.Int16")); dt.Columns.Add("=", Type.GetType("System.String")); dt.Columns.Add("write", Type.GetType("System.Int16")); dt.Columns.Add("T/F", Type.GetType("System.String")); dt.Columns.Add("answer", Type.GetType("System.Int16")); //结束
            int i = 0,j=0; int num1, num2; int [] zu; string [] zufu={"+","-","*","/"}; string[] zufu1 = { "+", "-" }; zu=new int[ishuliang]; while (i < ishuliang) { j = 0; num1 = rand(iamout1, iamout2);   //rand函数是生成一个随机数
                    while (true) { if (j >= ishuliang) { break; } if (chongfu(zu, i, num1))                //chongfu函数是检测产生的数与前面有木有重复
 { zu[i] = num1; break; } num1 = rand(iamout1, iamout2);   //rand函数是生成一个随机数
                        j++; } string sign; if (ichengchu == 1) { sign = zufu[rand(0, 4)]; } else { sign = zufu1[rand(0, 2)]; } if (sign == "/") { if (sushu(num1, iyushu))  //排除素数因素,否则会导致死循环
 { num2 = 1; } else { j = 0; while (true) { num2 = rand(iamout1, iamout2); if (j >= ishuliang*5)  //为了防止有些数找不到能被整除的数而陷入死循环
 { break; } if (num2 == num1) //为了排除出现同一个数相除这种简单的题目
 { continue; } if (num2 != 0 && cefushu(num1, num2, ifushu) && ceyushu(num1, num2, iyushu))//num2!=0要放在最前面,防止ceyushu函数中除数为0
 { break; } j++; } } } else if (sign == "-") { while (true) { num2 = rand(iamout1, iamout2); if (cefushu(num1, num2, ifushu)) { break; } } } else { num2 = rand(iamout1, iamout2); } DataRow dr = dt.NewRow(); dr["num1"] = num1; dr["sign"] = sign; dr["num2"] = num2; dr["="] = "="; // dr["write"] = "0";
                    dr["T/F"] = "(在前面填写答案)"; // dr["answer"] = 0;
 dt.Rows.Add(dr); i++; } dataGridView1.DataSource = dt; } private void button2_Click(object sender, EventArgs e) //清空
 { dataGridView1.DataSource = null; /* DataTable dt = (DataTable)dataGridView1.DataSource; dt.Rows.Clear(); dataGridView1.DataSource = dt;*/ textBox1.Text = " "; } private void button3_Click(object sender, EventArgs e) { if (dataGridView1.DataSource != null) { int ishuliang = Convert.ToInt16(shuliang.Text.Trim()); int i, num1, num2, num3, write, biaoji = 0; String sgin; if (true) { for (i = 0; i < ishuliang; i++) { num1 = Convert.ToInt16(dataGridView1.Rows[i].Cells[0].Value); sgin = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value); num2 = Convert.ToInt16(dataGridView1.Rows[i].Cells[2].Value); //write = Convert.ToInt16(dataGridView1.Rows[i].Cells[4].Value);
                        write = 0; if (dataGridView1.Rows[i].Cells[4].Value == DBNull.Value) { write = -156887; } else { write = Convert.ToInt16(dataGridView1.Rows[i].Cells[4].Value); } if (sgin == "+") { num3 = num1 + num2; } else if (sgin == "-") { num3 = num1 - num2; } else if (sgin == "/") { num3 = num1 / num2; } else { num3 = num1 * num2; } dataGridView1.Rows[i].Cells[6].Value = num3; if (num3 == write) { dataGridView1.Rows[i].Cells[5].Value = "正确"; } else { dataGridView1.Rows[i].Cells[5].Value = "错误"; biaoji++; } textBox1.Text = "本次作业一共" + ishuliang + "道\r\n" + "正确" + (ishuliang - biaoji) + "道\r\n" + "错误" + biaoji + ""; } } else { MessageBox.Show("错误,请先填写答案再批改"); } } else { MessageBox.Show("错误,没有数据,请先生成题目再批改"); } } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { }
} }

三、程序截图

四则运算3程序_第1张图片四则运算3程序_第2张图片四则运算3程序_第3张图片四则运算3程序_第4张图片

四、活动记录表

一、项目计划总结:

 

                                        周活动总结表

姓名:柴珏辉                                       日期:2015.3.16

日期       任务

听课

编写程序

阅读课本

准备考试

 

 

日总计

周日

 

 

 

 

 

 

 

周一

 

 

 

 

 

 

 

周二

 2

 1

 

 

 

 

 3

周三

 

 1.5

 

 

 

 

 1.5

周四

 

 

 

 

 

 

 

周五

 2

 0.5

 

 

 

 

 2.5

周六

 

 

 

 

 

 

 

周总结

 4

 3

 

 

 

 

 7

 

 

                                           二、时间记录表:

学生        柴珏辉                                             日期         3.16             

教师        王建民                                             课程           PSP       

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3.17

 8:00

 10:00

 

 2

 上课

 软件工程课

 3.17

 6:00

 7:00

 

 1

 编程

 完成结队开发

 3.18

 19:30

 21:00

 

 1.5

 编程

编写四则运算3

 3.20

 8:00

 10:00

 

 2

 上课

 软件工程课

 3.20

 19:30

 20:00

 

 0.5

 编程

 四则运算3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                            三、缺陷记录日志:

学生       柴珏辉    

日期      3.16   

教员       王建民   

程序号                

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

 3.18

 1

 

 编译

 编译

 10min

 

 Datetable的行数据添加过程中数据类型引发的问题

 3.18

 2

 

 编译

编译 

20min 

 

Datagridview控件中空元素的判断出现错误

 3.20

 3

 

 设计

 编译

 1min

 

输入数据范围不规范引发的错误

五、实验体会总结

  这次的程序可以说在第二个的基础上稍加改动,不过一开始却并不顺利。我不知道如何在没有数据库的情况下使用datagridview,于是我就上网查询,并且用网上的方法进行了不断的尝试,在几经波折之后还是运行成功了,这次的程序虽然实现了题目的要求,但是一些对错误处理上还是显得很不完善。

  这次实验让我明白了在编程中不会做不要紧,只要知道正确的途径去寻找答案就好

你可能感兴趣的:(四则运算)