zoukankan      html  css  js  c++  java
  • 四则运算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 + "" + "正确" + (ishuliang - biaoji) + "" + "错误" + biaoji + "";
                        }
                    }
                    else
                    {
                        MessageBox.Show("错误,请先填写答案再批改");
                    }
                }
                else
                {
                    MessageBox.Show("错误,没有数据,请先生成题目再批改");
                }
            }
    
            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
    
            }
    } }

    三、程序截图

    四、活动记录表

    一、项目计划总结:

     

                                            周活动总结表

    姓名:柴珏辉                                       日期: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,于是我就上网查询,并且用网上的方法进行了不断的尝试,在几经波折之后还是运行成功了,这次的程序虽然实现了题目的要求,但是一些对错误处理上还是显得很不完善。

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

  • 相关阅读:
    android 多渠道打包
    第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
    Android:支持不同分辨率的屏幕设计 .
    动画效果编程基础--AnimationAndroid
    Android使用尺寸资源 dimens .
    android手机分辨率整理
    线程和进程
    js和html的结合方式
    成员变量和局部变量
    MySQL基础知识
  • 原文地址:https://www.cnblogs.com/boluoland/p/4356829.html
Copyright © 2011-2022 走看看