c#单机考试系统

文章目录

  • 1. 课设要求
    • 1.1课设题目
    • 1.2 课设背景
    • 1.3功能说明
  • 2. 需求分析
    • 2.1功能性需求
    • 2.2非功能性需求
  • 3. 系统设计
    • 3.1功能概要设计
    • 3.2 数据库概要设计
    • 3.3 数据库详细设计
  • 4. 详细设计
    • 4.1功能设计
    • 4.1 运行与调试
  • 5. 总结
  • 6. 参考文献
  • 7. 附录


1. 课设要求

1.1课设题目

单机考试系统:本系统为单机系统,以窗体软件形式展示,管理员在考试前对本系统进行设置,导入试题、查看考试情况、查看考生留言等。角色有两类,即管理员和考试用户,将系统功能按角色来区分。

1.2 课设背景

近年来,随着网络技术与信息技术的迅猛发展,计算机的应用已经深入到我们生活的方方面面中。尤其是对教育行业来说,如现在远程教育和在线考试系统的普及。传统的办学提出了全新的模式。如今绝大部分大学和学院都已接入互联网并建成校园网,各校的硬件设施已经比较完善。虽然在我国学校还是以传统的考试方式为主,但面对现在这个高速发展的社会,显然,这种传统的模式满足不了这个要求,故而出现了考试系统。考试系统可以从题库中抽取题目给考生答题,答题后自动批改试卷生成分数,阅卷效率极大地提高。为教师提供了极大的方便,也杜绝了考生抄袭他人试卷的可能性,另外,也减少了纸质试卷的制造,减少了大量纸张,墨水的消耗,为环境保护做出了极大的贡献。
所以单机考试系统具有着极大的现实意义,本系统可以使使用者从考试做题中发现自己的问题,检查自己的学习效果,有效的提高使用者的学习成绩。适合于学习中的测试。

1.3功能说明

登陆模块功能:
① 登陆(判断账号密码正确后跳转到管理员或用户界面)
② 注册账号(用户输入个人信息创建账号)
③ 重置密码(用户输入个人信息和账号重置密码)
④ 查看软件信息
管理员功能:
① 试题导入(将Excel格式的试题导入数据库中)
② 试题管理(查看题库,包括修改试题和答案,设定考试时间)
③ 用户管理(查看用户信息,查看用户考试情况,修改或删除用户信息)
④ 查看用户反馈
用户功能:
① 进行考试(从题库中随机抽取题目开始考试)
② 背题模式(从题库中顺序刷题)
③ 查看错题(查看上次考试的错题)
④ 查看成绩
⑤ 查看资料(查看个人信息,修改资料)
⑥ 反馈(反馈存入数据库)
⑦ 查看软件信息

2. 需求分析

2.1功能性需求

用户需求:
用户登陆:凭借用户账号密码登陆。
注册账号:凭借用户个人信息注册账号。
重置密码:凭借用户个人信息和账号重置密码。
进行考试:系统从题库中抽取题目,用户需在规定时间内完成题目。
背题模式:系统从题库中按顺序取题,用户按顺序刷题。
查看成绩:用户可查看上次成绩以及总成绩,平均分等。
查看资料:用户可以查看个人资料并修改用户名。
用户反馈:用户输入反馈,存入数据库中。
软件信息:查看软件信息。
管理员需求:
试题导入:将Excel格式的题库导入数据库中。
试题管理:查看题库,修改题目,修改计时时间。
用户管理:查看用户信息,查看用户考试情况,修改用户信息。
用户反馈:查看用户反馈。
系统性能需求:
系统安全可靠,凭用户或管理员账号密码登陆。
用户菜单等功能界面友好,体现界面功能要点,同时也方便用户操作。
易于修改查询信息,登陆界面简单且不繁琐。
程序运行快速高效,界面切换自然。

2.2非功能性需求

安全性分析:本系统管理的数据对学生的考试产生影响,数据量较大且是基础性数据。本程序简洁明了,无赘余语句,增加了程序运行的安全性。
稳定性分析:只要是用户的合理操作,系统都会给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃;若系统出现不合理操作,系统也会有一些应对措施,防止系统错误或崩溃。
可靠性分析:容错率较高,易恢复性较好,若用户出现输入错误的情况,体统具有一系列的应对措施,让用户可以返回重新操作。
易用性分析:本系统具有易操作性,方便用户操作,哪怕没有什么网络购票经验也可以正常方便购票。用户登录界面也进行了美观,可以保持用户对系统的良好感官。

3. 系统设计

3.1功能概要设计

登陆模块功能如图3-1所示
c#单机考试系统_第1张图片

管理员功能如图3-2所示
c#单机考试系统_第2张图片

用户功能如图3-3所示
c#单机考试系统_第3张图片

3.2 数据库概要设计

考试系统主要针对学生和教师的使用,所以数据库的设计应该包括考题设计表、学生答案表、学生信息表、教师信息表、学生详细成绩表5个数据表,每个表与表之间有一定的联系。

管理员账号表如图3-4所示。
c#单机考试系统_第4张图片
用户账号表如图3-5所示。
c#单机考试系统_第5张图片
题库表如图3-6所示。
c#单机考试系统_第6张图片
考试情况表如图3-7所示。
c#单机考试系统_第7张图片
用户留言表如图3-8所示。
c#单机考试系统_第8张图片

3.3 数据库详细设计

数据库的详细设计,即利用数据模型进行概念数据库的模式设计。根据考试系统的需求,设计出数据库设计图如图3-9所示。
c#单机考试系统_第9张图片
数据库表结构
c#单机考试系统_第10张图片
c#单机考试系统_第11张图片
c#单机考试系统_第12张图片
c#单机考试系统_第13张图片
c#单机考试系统_第14张图片

4. 详细设计

4.1功能设计

系统功能流程图如图4-1所示。
c#单机考试系统_第15张图片

4.1 运行与调试

程序登陆界面如图4-2所示,可以下拉选项框选择用户登陆、管理员登陆或游客登录。
c#单机考试系统_第16张图片

管理员菜单如图4-3所示。
c#单机考试系统_第17张图片

用户菜单如图4-4所示
c#单机考试系统_第18张图片

试题管理界面如图4-4所示,可以查看题库、修改计时时间、修改题目。
c#单机考试系统_第19张图片

用户管理界面如图4-5,4-6所示,可以查看用户考试情况、查看修改用户信息。
c#单机考试系统_第20张图片
c#单机考试系统_第21张图片

查看留言界面如图4-7所示,可以查看用户的反馈。
c#单机考试系统_第22张图片

用户考试界面如图4-8,4-9所示,进行考试。
c#单机考试系统_第23张图片
c#单机考试系统_第24张图片

背题模式界面如图4-10所示
c#单机考试系统_第25张图片

查看错题如图4-11所示
c#单机考试系统_第26张图片

查看成绩界面如图4-12所示
c#单机考试系统_第27张图片

用户查看资料如图4-13所示,可以修改用户名。
c#单机考试系统_第28张图片

用户反馈如图4-14所示,将反馈信息存入数据库中。
c#单机考试系统_第29张图片

软件信息界面如图4-15所示,显示软件信息。
c#单机考试系统_第30张图片

游客试用界面如图4-16所示。
c#单机考试系统_第31张图片

注册账号界面如图4-17所示,身份证号使用正则表达式,需输入正确的身份证号。c#单机考试系统_第32张图片

重置密码界面如图4-18所示
c#单机考试系统_第33张图片

5. 总结

通过这次的课程设计,我们对C#语言有更多的了解,全面总结本学期C#课程学习的知识,掌握使用方法。锻炼学生的实践能力以及运用本课程的知识、方法解决更为复杂的实际问题有较好的启发和指导作用,从而为后续课程的学习、毕业设计环节以及将来的实际工作打好坚实的基础。本次课程设计使我们对自己所学的知识有了进一步的了解,同时通过实践发现自己的不足,对知识的掌握和运用仍有许多不完善。虽然本系统也存在着很多不足,如系统十分简单,实现功能也不够完善,安全性问题也没有很好的解决,但是我们会继续完善自己,争取让自己进步,提高自己的编程能力和解决实际问题的能力。

6. 参考文献

[1] 王珊,萨师煊.数据库系统概论[M].高等教育出版社,2012
[2] Visual Basic 程序设计应用教程[M].清华大学出版社
[3] 江红,余青松.C#程序设计教程[M].2版

7. 附录

本人完成答题功能模块设计,这里仅呈现部分代码,总代码上传资源里。

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 单机考试系统
{
    public static class UserId//用户行为记录
    {
        public static string userid="";
        public static int usert=0;//用户正在做的题号
        public static int tnum = 100;//单次考试总题数
        public static int score = 5;//单个单选题分数
        public static int rnum = 0;//单次考试正确题数
        public static int totalSecond = 7200;//总秒数
        public static int[] rtitle = new int[tnum+2];//存考试随机题目序号
        public static string[] click = new string[tnum+2];//存用户答案
        public static string[] right = new string[1000];//存正确答案
        public static int[] check_false = new int[tnum+2];//保存错题号
        public static string select = "进行考试";//选择考试还是查看错题
    }
    class Randoms
    {
        /* num 要产生的随机数个数 randoms(1,a[200],1,200);
         * all 存储生产的随机数的数组
         * begin 随机数最小值
         * end 随机数最大值
         *  using System.Threading;
         */
        public int[] randoms(int num, int[] all, int begin, int end)//随机数
        {
            int[] nums = new int[1000];
            for (int i = 0; i < num; i++)
            {
                Random rd = new Random();
                int rds = rd.Next(begin, end);
                while (nums[rds] != 0)
                {
                    rds = rd.Next(begin, end);
                    Thread.Sleep(2);//防止时间种子重复
                }
                nums[rds]++;
                all[i] = rds;
            }
            Array.Sort(all);
            return all;
        }
    }
    static class Program
    {
        /// 
        /// 应用程序的主入口点。
        /// 
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Land());

        }
    }
}

Land.cs

using System;
using System.Data.SqlClient;
using System.Drawing;
using System.Net.NetworkInformation;
using System.Windows.Forms;

namespace 单机考试系统
{
    //登陆窗口
    public partial class Land : Form
    {
        KillMessageBox kill = new KillMessageBox();
        public Land()
        {
            InitializeComponent();
            try
            {
                //声明一个用于存储连接数据库的字符串
                string ConStr = "server=.;database=单机考试;Trusted_Connection=SSPI";
                //创建一个SqlConnection对象
                SqlConnection conn = new SqlConnection(ConStr);
                //连接指定的数据库
                conn.Open();
                if (conn.State == System.Data.ConnectionState.Open)     //判断连接数据库是否成功
                {
                    kill.StartKiller();
                    MessageBox.Show("连接数据库成功", "你很幸运");

                }
                else
                {
                    MessageBox.Show("连接数据库失败", "你很遗憾");
                    System.Environment.Exit(0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error:" + ex.Message);
            }
            string url = "www.baidu.com";
            Ping ping = new Ping();
            try
            {
                PingReply reply = ping.Send(url);
                if (reply.Status == IPStatus.Success)
                {
                    kill.StartKiller();
                    MessageBox.Show("网络已连接!", "你很幸运");
                }
                if (reply.Status == IPStatus.TimedOut)
                {
                    MessageBox.Show("网络超时!");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("网络未连接!");
            }
            this.cbx1.Items.Add("管理员登录");
            this.cbx1.Items.Add("用户登录");
            this.cbx1.Items.Add("游客试用");
            this.cbx1.SelectedIndex = 1;    //默认选项为用户登录
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
        //登录按钮判断并确定身份登录
        private void button1_Click(object sender, EventArgs e)
        {
            if (cbx1.Text == "管理员登录")
            {
                //管理员登录弹出确认窗口
                if (MessageBox.Show("您选择的是管理员登录,确定登陆吗?", "管理员登录确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                {
                    //从数据库中判断账号与密码是否正确
                    string connString = "server=.;database=单机考试;Trusted_Connection=SSPI";
                    String commandTextQuery = string.Format("select count(*) from 管理员账号 where 账号='{0}' and 密码='{1}'", IdBox.Text, PasswordBox.Text);
                    using (SqlConnection connection = new SqlConnection(connString))
                    {
                        connection.Open();
                        SqlCommand cmdQuery = new SqlCommand(commandTextQuery, connection);
                        int j = Convert.ToInt32(cmdQuery.ExecuteScalar());   //直接进入开发模式//1;
                        if (j == 1)
                        {
                            this.Visible = false;    //隐藏登陆窗体
                            new AdminMenu().ShowDialog();    //打开管理员菜单窗口
                            this.Visible = true;
                        }
                        else
                        {
                            MessageBox.Show("账号或密码错误!");
                        }
                        connection.Close();
                        connection.Dispose();
                    }
                }
            }
            //用户登陆
            else if (cbx1.Text == "用户登录")
            {
                UserId.userid = IdBox.Text;
                //连接数据库判断账号与密码是否正确
                string connString = "server=.;database=单机考试;Trusted_Connection=SSPI";
                String commandTextQuery = string.Format("select count(*) from 用户账号 where 账号='{0}' and 密码='{1}'", IdBox.Text, PasswordBox.Text);
                using (SqlConnection connection = new SqlConnection(connString))
                {
                    connection.Open();
                    SqlCommand cmdQuery = new SqlCommand(commandTextQuery, connection);
                    int i = Convert.ToInt32(cmdQuery.ExecuteScalar());
                    connection.Close();
                    connection.Dispose();
                    if (i == 1)     //若账号密码匹配
                    {
                        if (UserId.userid[0] == '#' && PasswordBox.Text == "123456")
                        {
                            MessageBox.Show("您是第一次登陆,将前往修改信息。");
                            new ChangeInformation().ShowDialog(this);
                        }
                        else
                        {
                            this.Visible = false;    //隐藏登陆窗体
                            new UserMenu().ShowDialog();    //打开用户菜单窗口
                            this.Visible = true;    //显现登陆窗体
                        }
                    }
                    else
                    {       //账号密码不匹配
                        MessageBox.Show("账号或密码错误!");       //弹出错误窗口
                    }
                    connection.Close();
                }
            }
        }
        //退出弹确认窗口
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (See.Checked)    //点击显示密码
            {
                PasswordBox.PasswordChar = new char();
            }
            else
            {
                PasswordBox.PasswordChar = '*';
            }
        }
        //添加下拉选项
        private void Form1_Load(object sender, EventArgs e)
        {
            //窗体居中
            int x = (System.Windows.Forms.SystemInformation.WorkingArea.Width - this.Size.Width) / 2;
            int y = (System.Windows.Forms.SystemInformation.WorkingArea.Height - this.Size.Height) / 2;
            this.StartPosition = FormStartPosition.Manual; //窗体的位置由Location属性决定
            this.Location = (Point)new Size(x, y);         //窗体的起始位置为(x,y)
        }
        private void IdBox_TextChanged(object sender, EventArgs e)
        {
            
        }
        private void cbx1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbx1.Text == "管理员登录")
            {
                newID.Visible = false;
                Forget.Visible = false;
            }
            else if (cbx1.Text == "用户登录")
            {
                newID.Visible = true;
                Forget.Visible = true;
            }
            else if(cbx1.Text == "游客试用")
            {
                this.Visible = false;    //隐藏登陆窗体
                new UserMenu().ShowDialog();    //打开用户菜单窗口
                this.cbx1.SelectedIndex = 1;    //默认选项为用户登录
                this.Visible = true;
            }
            Form1_Load(sender, e);
        }
        private void newID_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            new Register().ShowDialog();    //打开注册账号窗口
        }
        private void Forget_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            new ForgetForm().ShowDialog();    //打开重置密码窗口
        }
        private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            new Information().ShowDialog(); //打开软件信息窗口
        }
        private void checkBox1_CheckedChanged_1(object sender, EventArgs e)
        {

        }
    }
}

Select.cs

using System;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;

namespace 单机考试系统
{
    //考试窗口
    public partial class Select : Form
    {
        public int tenthSecond = 9;//毫秒记录时间
        public int totalSecond = UserId.totalSecond;//设定单次考试时间
        public Select()//构造函数判断模式是进行考试还是查看错题或背题
        {
            InitializeComponent();
            if (UserId.select == "进行考试")
            {
                title.Text = "欢迎进入答题系统,本次答题倒计时:";
                title.Text += UserId.totalSecond / 3600 + "小时" + (UserId.totalSecond % 3600) / 60 + "分钟" + UserId.totalSecond % 60 + "秒";
                groupBox1.Visible = false;
                button2.Visible = false;
                button1.Text = "开始考试";
                button3.Visible = false;
                button4.Visible = false;
                Array.Clear(UserId.click, '\0', UserId.click.Length);
            }
            else if (UserId.select == "查看错题" || UserId.select == "背题模式")
            {
                title.Text = "欢迎查看您的错题!";
                groupBox1.Visible = true;
                button1.Visible = false;
                button2.Visible = false;
                button3.Visible = true;
                button4.Visible = false;
                label1.Visible = false;
                timer1.Enabled = false;
                if (UserId.select == "背题模式")
                {
                    for (int j = 0; j < 850 / 5; ++j)//按题目数量,生成题号按钮
                    {
                        for (int k = 0; k < 5; k++)
                        {
                            System.Drawing.Point p = new Point(10 + k * 55, 10 + j * 45);//创建一个坐标,用来给新的按钮定位
                            Button bt = new Button()//创建按钮对象
                            {
                                Text = UserId.usert.ToString(),//设置按钮的文本信息
                                Location = p,//把按钮的位置与刚创建的坐标绑定在一起
                            };
                            UserId.usert++;
                            bt.Height = 35;
                            bt.Width = 45;
                            panel1.Controls.Add(bt);//将按钮加入控件集合
                            bt.Click += new System.EventHandler(button_Click);
                        }
                    }
                    UserId.usert = 1;
                }
            }
        }
        public void Form2_Load(object sender, EventArgs e)//页面加载题目
        {
            //窗体居中
            int x = (System.Windows.Forms.SystemInformation.WorkingArea.Width - this.Size.Width) / 2;
            int y = (System.Windows.Forms.SystemInformation.WorkingArea.Height - this.Size.Height) / 2;
            this.StartPosition = FormStartPosition.Manual; //窗体的位置由Location属性决定
            this.Location = (Point)new Size(x, y);         //窗体的起始位置为(x,y)
            string connString = "server=.;database=单机考试;Trusted_Connection=SSPI";
            //显示题目
            if ((UserId.usert > 0 && UserId.usert <= UserId.tnum) || UserId.select == "查看错题" || UserId.select == "背题模式")
            {
                //连接数据库
                String commandTextQuery = string.Format("select F3,F4,F5,F6,F7,F8 from 题库1 where F1=@t");
                using (SqlConnection connection = new SqlConnection(connString))
                {
                    connection.Open();
                    SqlCommand cmdQuery = new SqlCommand(commandTextQuery, connection);
                    //不是查看错题就选UserId.rtitle
                    if (UserId.select == "进行考试")
                        cmdQuery.Parameters.AddWithValue("@t", UserId.rtitle[UserId.usert]);
                    else if (UserId.select == "背题模式")
                    {
                        cmdQuery.Parameters.AddWithValue("@t", UserId.usert);
                    }
                    else//查看错题
                    {
                        cmdQuery.Parameters.AddWithValue("@t", UserId.check_false[UserId.usert]);
                    }
                    SqlDataReader reader = cmdQuery.ExecuteReader();
                    if (reader.Read())
                    {
                        title.Text = UserId.usert + "." + reader[0].ToString();
                        radioButton1.Text = reader[1].ToString();
                        radioButton2.Text = reader[2].ToString();
                        radioButton3.Text = reader[3].ToString();
                        radioButton4.Text = reader[4].ToString();
                        UserId.right[UserId.usert] = reader[5].ToString();//存正确答案
                        if (UserId.select == "查看错题" || UserId.select == "背题模式")
                        {
                            if (UserId.right[UserId.usert] == "A")
                            {
                                radioButton1.ForeColor = Color.Red;
                            }
                            else if (UserId.right[UserId.usert] == "B")
                            {
                                radioButton2.ForeColor = Color.Red;
                            }
                            else if (UserId.right[UserId.usert] == "C")
                            {
                                radioButton3.ForeColor = Color.Red;
                            }
                            else
                            {
                                radioButton4.ForeColor = Color.Red;
                            }
                        }
                    }
                    connection.Close();
                    connection.Dispose();
                }

            }
            //考试模式没选等于错题,交卷等于结束
            if (UserId.select == "进行考试")
            {
                //用户点击交卷
                if (UserId.usert == UserId.tnum + 1)
                {
                    for (int i = 1; i <= UserId.tnum; ++i)
                    {
                        Button ap = (Button)panel1.Controls[i - 1];//找到对应当前题目的自动生成按钮
                        if (UserId.check_false[i] == 0 && ap.BackColor == Color.LightGreen)
                        {
                            UserId.rnum++;
                        }
                        else
                        {
                            UserId.check_false[i] = UserId.rtitle[i];
                        }
                    }
                    int score1 = UserId.rnum * UserId.score;
                    MessageBox.Show("您本次答题分数为:" + score1 + "\n答对:" + UserId.rnum + "\n答错:" + (UserId.tnum - UserId.rnum));
                    String command = string.Format("Update 考试情况 Set 上一次分数={0},对题数+={1},错题数+={2},考试总数+=1,考试总分+={3} where 账号=@id", UserId.rnum * UserId.score, UserId.rnum, UserId.tnum - UserId.rnum, UserId.rnum * UserId.score);
                    using (SqlConnection connection2 = new SqlConnection(connString))
                    {
                        connection2.Open();
                        SqlCommand cmdInsert = new SqlCommand(command, connection2);
                        cmdInsert.Parameters.AddWithValue("@id", UserId.userid);
                        int result = cmdInsert.ExecuteNonQuery();
                        if (result == 1)
                        {
                            MessageBox.Show("成绩信息录入数据库!");
                        }
                        else
                        {
                            MessageBox.Show("您还未注册账号!成绩信息无法录入数据库!");
                        }
                        connection2.Close();
                        connection2.Dispose();
                    }
                    this.Close();
                }
                //
                if (radioButton1.Checked || radioButton2.Checked || radioButton3.Checked || radioButton4.Checked) { }
                else
                {
                    UserId.check_false[UserId.usert] = UserId.rtitle[UserId.usert];
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)//下一题按钮
        {
            //清理按钮选项
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            radioButton4.Checked = false;
            //下一题
            UserId.usert++;
            if (UserId.usert == 1)
            {
                groupBox1.Visible = true;
                for (int j = 0; j < UserId.tnum / 5; ++j)//按题目数量,生成题号按钮
                {
                    for (int k = 0; k < 5; k++)
                    {
                        System.Drawing.Point p = new Point(10 + k * 55, 10 + j * 45);//创建一个坐标,用来给新的按钮定位
                        Button bt = new Button()//创建按钮对象
                        {
                            Text = UserId.usert.ToString(),//设置按钮的文本信息
                            Location = p,//把按钮的位置与刚创建的坐标绑定在一起
                        };
                        UserId.usert++;
                        bt.Height = 35;
                        bt.Width = 45;
                        panel1.Controls.Add(bt);//将按钮加入控件集合
                        bt.Click += new System.EventHandler(button_Click);
                    }
                }
                timer1.Enabled = true;
                button1.Text = "下一题";
                UserId.usert = 1;
            }
            else if (UserId.usert > 1)
            {
                button2.Visible = true;
            }
            if (UserId.usert == UserId.tnum)//用户到达题目数量显示交卷按钮
            {
                button1.Text = "交卷";
            }
            else if (UserId.usert == UserId.tnum + 1)//当前题数大于设计题数就退出
            {
                this.Close();
            }
            record();//显示用户选项
            Form2_Load(sender, e);
        }
        private void button2_Click_1(object sender, EventArgs e)//上一题按钮
        {
            //清理按钮选项
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            radioButton4.Checked = false;
            UserId.usert--;//当前题目向前移一位
            if (UserId.usert == 1)
            {
                button2.Visible = false;
            }
            else if (UserId.usert == UserId.tnum - 1)
            {
                button1.Text = "下一题";
            }
            record();//显示用户选项
            Form2_Load(sender, e);

        }
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            groupBox1_Enter(sender, e);
        }
        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            groupBox1_Enter(sender, e);
        }
        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            groupBox1_Enter(sender, e);
        }
        private void radioButton4_CheckedChanged(object sender, EventArgs e)
        {
            groupBox1_Enter(sender, e);
        }
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)//取消考试
        {
            if (button1.Text == "开始考试")
            {
                this.Close();
            }
            else if (MessageBox.Show("您确定退出吗?退出将不记录本次成绩!", "退出确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                this.Close();
        }
        private void groupBox1_Enter(object sender, EventArgs e)//选项点击开始算分,正确清零错误记录
        {
            if (UserId.select == "进行考试")
            {
                Button ap = (Button)panel1.Controls[UserId.usert - 1];//找到对应当前题目的自动生成按钮
                ap.BackColor = Color.LightGreen;

                if (radioButton1.Checked)
                {
                    UserId.click[UserId.usert] = "A";
                    if (UserId.right[UserId.usert] == "A")
                    {
                        UserId.check_false[UserId.usert] = 0;
                    }
                    else
                    {
                        UserId.check_false[UserId.usert] = UserId.rtitle[UserId.usert];
                    }

                }
                else if (radioButton2.Checked)
                {
                    UserId.click[UserId.usert] = "B";
                    if (UserId.right[UserId.usert] == "B")
                    {
                        UserId.check_false[UserId.usert] = 0;
                    }
                    else
                    {
                        UserId.check_false[UserId.usert] = UserId.rtitle[UserId.usert];
                    }
                }
                else if (radioButton3.Checked)
                {
                    UserId.click[UserId.usert] = "C";
                    if (UserId.right[UserId.usert] == "C")
                    {
                        UserId.check_false[UserId.usert] = 0;
                    }
                    else
                    {
                        UserId.check_false[UserId.usert] = UserId.rtitle[UserId.usert];
                    }
                }
                else if (radioButton4.Checked)
                {
                    UserId.click[UserId.usert] = "D";
                    if (UserId.right[UserId.usert] == "D")
                    {
                        UserId.check_false[UserId.usert] = 0;
                    }
                    else
                    {
                        UserId.check_false[UserId.usert] = UserId.rtitle[UserId.usert];
                    }
                }
            }
        }
        private void button3_Click(object sender, EventArgs e)//查看错题,背题下一题按钮
        {
            UserId.usert++;
            if (UserId.select == "查看错题")
            {
                while (UserId.check_false[UserId.usert] == 0 && UserId.usert <= UserId.tnum)
                {
                    ++UserId.usert;
                }
                if (UserId.usert > UserId.tnum)
                {
                    this.Close();
                }
            }
            if (UserId.usert > 1)
            {
                button4.Visible = true;
            }
            //清理按钮选项
            radioButton1.ForeColor = Color.Black;
            radioButton2.ForeColor = Color.Black;
            radioButton3.ForeColor = Color.Black;
            radioButton4.ForeColor = Color.Black;
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            radioButton4.Checked = false;
            Form2_Load(sender, e);
        }
        private void button4_Click(object sender, EventArgs e)//查看错题,背题上一题按钮
        {
            if (UserId.usert > 1)
            {
                UserId.usert--;
            }
            if (UserId.select == "查看错题")
            {
                while (UserId.check_false[UserId.usert] == 0 && UserId.usert > 1)
                {
                    --UserId.usert;
                }
            }
            if (UserId.usert == 1)
            {
                button4.Visible = false;
            }

            //清理按钮选项
            radioButton1.ForeColor = Color.Black;
            radioButton2.ForeColor = Color.Black;
            radioButton3.ForeColor = Color.Black;
            radioButton4.ForeColor = Color.Black;
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            radioButton4.Checked = false;
            Form2_Load(sender, e);
        }
        private void record()//显示用户选过的项
        {
            if (UserId.select == "进行考试")
            {
                if (UserId.click[UserId.usert] == "A")
                {
                    radioButton1.Checked = true;
                }
                else if (UserId.click[UserId.usert] == "B")
                {
                    radioButton2.Checked = true;
                }
                else if (UserId.click[UserId.usert] == "C")
                {
                    radioButton3.Checked = true;
                }
                else if (UserId.click[UserId.usert] == "D")
                {
                    radioButton4.Checked = true;
                }
            }
        }
        private void button_Click(object sender, EventArgs e)//题号按钮事件处理
        {
            radioButton1.ForeColor = Color.Black;
            radioButton2.ForeColor = Color.Black;
            radioButton3.ForeColor = Color.Black;
            radioButton4.ForeColor = Color.Black;
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            radioButton4.Checked = false;
            Button b1 = (Button)sender;//将触发此事件的对象转换为该Button对象
            UserId.usert = Convert.ToInt32(b1.Text);
            if (UserId.usert != UserId.tnum)
            {
                button1.Text = "下一题";
                if (UserId.usert > 1)
                {
                    button2.Visible = true;
                }
                else
                {
                    button2.Visible = false;
                }
            }
            else
            {
                button2.Visible = true;
                button1.Text = "交卷";
            }
            record();//显示用户选项
            Form2_Load(sender, e);
        }
        private void timer1_Tick(object sender, EventArgs e)//计时器
        {

            //---窗体添加一个Label,一个Button,一个Timer--------
            int hour = totalSecond / 3600;
            int minute = (totalSecond - hour * 3600) / 60;
            int second = (totalSecond - hour * 3600) % 60;
            String str = hour.ToString() + "小时" + minute.ToString() + "分钟" + second.ToString() + "秒";
            if (UserId.usert <= UserId.tnum)
            {
                label1.Text = str;
                tenthSecond--;
                if (tenthSecond == -1)
                {
                    tenthSecond = 9;
                    totalSecond--;
                    if (totalSecond == -1)
                    {
                        timer1.Enabled = false;
                        label1.Text = "时间到!";
                        label1.ForeColor = Color.FromArgb(255, 0, 0);
                        UserId.usert = UserId.tnum + 1;
                        Form2_Load(sender, e);
                    }
                }
            }
        }
        private void label1_Click_1(object sender, EventArgs e)
        {

        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }
        private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)//问题反馈
        {
            new UserSay().ShowDialog();
        }

        private void CopyInhibit(object sender, MouseEventArgs e)//禁止鼠标复制
        {
            if(UserId.select=="进行考试")
                ((TextBox)sender).SelectionLength = 0; //只要按键就设置将选择长度为0
        }

        private void CopyInhibit(object sender, KeyEventArgs e)//禁止按键复制
        {
            if (UserId.select == "进行考试")
                ((TextBox)sender).SelectionLength = 0; //只要按键就设置将选择长度为0
        }
        protected override void WndProc(ref Message m)//禁止窗体移动
        {
            //拦截双击标题栏、移动窗体的系统消息  
            if (m.Msg != 0xA3 && m.Msg != 0x0003 && m.WParam != (IntPtr)0xF012)
            {
                base.WndProc(ref m);
            }
        }
    }
}

你可能感兴趣的:(c#课设,c#)