精华内容
下载资源
问答
  • 学生考试系统数据流程图
    千次阅读
    2020-12-14 10:56:51

    概述

    系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程。

    尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流程图。

    基本图形说明
    在这里插入图片描述

    例子

    考试业务流程:命题人员依据大纲在试题库中抽取考题,形成试卷;教务部门印制试卷,安排日程及监考人员,根据日程安排学生考试,完成答卷;教师批改答卷,成绩提交给成绩管理子系统处理。

    在这里插入图片描述
    扩展图形
    侯老师

    更多相关内容
  • 在线考试系统 数据 层次
  • 学生成绩管理系统 实现学生信息,课程信息,课程类别,成绩信息的集中化电子化处理;实现学生成绩管理工作制度化、标准化、规范化;建立关于学生(成绩)数据比较全面详细的数据库
  • 3.3学生成绩管理的数据流程调查 18 4学生成绩管理系统设计 21 4.1信息系统设计原则 21 4.2学生成绩管理系统功能设计 22 4.3学生成绩管理系统数据库设计 22 4.3.1数据库中的概念结构设计 23 4.3.2数据库中的逻辑结构...
  • 3.3系统需求用例描述 10 3.4 本章小结 11 第四章 详细设计 12 4.1系统整体架构 12 4.2 数据库设计 13 4.3 系统模块设计 16 4.4 数据库表格设计 17 4.5核心代码详细设计 20 4.6 本章小结 27 第五章 测试 28 5.1 测试...
  • 在线考试系统的需求分析及数据,简单易懂
  • 主要介绍了SpringBoot +Vue开发考试系统,支持多种题型:选择题、多选题、判断题、填空题、综合题以及数学公式。支持在线考试,教师在线批改试卷。本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
  • 根据学生考试的特点和学校的实际情况,网上考试系统中设置两种用户,分别是学生和教师。学生进入考试界面抽取试卷、网上考试、交卷、查看成绩。教师进入后台可以设置试卷科目和考试的试题、查看学生的考试成绩和各题...
  • 数 据 库 修改功能添加功能允许修改数据 修改功能 添加功能 返回更新 删除功能 输入删除数据 删除功能 学籍管理系统流程图全文共5页,当前为第1页。 返回已删除 学籍管理系统流程图全文共5页,当前为第1页。 学生...
  • 这是一个数据库设计字典,希望他能帮助大家学习,和了解数据库的设计。 (我看过这个文档觉得很有用就上传上来了,对这个文档 的来历我记不清了,如果你发现与本站资源重复 请勿下载,还请请管理员删除此资源。...
  • HJ在线考试系统源码是一款以.net进行开发的在线考试系统软件。 功能介绍: 背景: 每学期都会有技能考试,以前用PHP开发过基于学校目前情况的在线考试系统,和传统的在线考试系统需求差不多,唯一不一样的是我们不...
  • 在线考试系统论文

    2019-04-23 15:26:55
    4.1 系统流程图 4 4.2系统菜单模块 5 4.2.1 考试安排 5 4.2.2 考试记录 6 4.2.3 考试成绩 7 4.2.4 修改密码 7 4.3 系统管理模块 8 4.3.1 系统介绍 8 4.3.2 部门管理 8 4.3.3 人员管理 9 4.4 数据设计 10 4.4.1 管理...
  • 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下:  1. 每门课程都有3到6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的平时成绩。课程...
  • 学生成绩管理系统数据结构》课程设计.doc
  • 学习成绩管理系统开发的流程图
  • 3.4 业务流程图 7 3.4.1 业务概述 7 3.5 明德学院学生信息系统数据流图 8 3.5.1 明德学院学生信息数据流图简述 8 3.5.2 主要功能模块数据流图 9 3.6 明德学院学生管理系统用例图 10 3.6.1 系统用户用例图 10 3.7 ...
  • 学生管理系统流程分析

    万次阅读 多人点赞 2012-08-25 09:51:11
    学生管理系统基本完成,上一篇我的博客写了关于我在写学生管理系统的一些常见错误的总结 ...这篇博客主要写写关于学生管理系统的一些流程分析等信息      整个学生管理系统包含六大模块


    学生管理系统基本完成,上一篇我的博客写了关于我在写学生管理系统的一些常见错误的总结


    这是原文链接http://blog.csdn.net/yudandan10/article/details/7905428    


    这篇博客主要写写关于学生管理系统的一些流程分析图等信息

     

     

     整个学生管理系统包含六大模块   


     

    1.系统用户 :这里面包含添加用户,修改密码,退出系统三个小部分


    2.学籍管理 :添加学籍信息,修改学籍信息,查询学籍信息

     

    3.班级管理  :添加班级信息,修改班级信息


    4.课程设置:添加课程信息,修改课程信息,设置课程信息

     

    5,成绩管理:添加成绩信息,修改成绩 信息,查询成绩信息

     

    6.帮助: 关于  ,使用说明

     

    据图的流程图如下:


    对于每个模块都有自己相应的功能,但大体上都差不多    

    整个系统的流程图 判断大概如下:


    除了这些模块的设置以外, 我们还需要创建数据库 和表  

    首先分析需求


    1学生基本信息:学号 ,姓名,性别, 出生日期,班号,电话,入校日期,家庭住址,备注等。

     

    2班级信息:班号,所在年级,班主任姓名,所在教室

     

    3课程基本信息:课程号,课程名称,课程类别,课程描述

     

    4课程设置信息:年级信息,所学课程等。

     

    5学生成绩信息:考试编号,所在班级,学生学号,学生姓名,所学课程,考试分数



    根据分析创建相应的数据库和表,在这个系统中一共需要六个表   


    1创建系统用户表格 user-Info


    2创建学生基本信息表格 student_Info


    3创建课程基本信息表course_Info


    5创建年级课程设置信息表gradecourse_Info


    6创建学生成绩信息表 result_Info


    通过这六个表的连接,我们就可以实现数据的存储和调用了,各个窗体代码的实现和一些细节以及可能出现的问题,大概都在上一篇博客中了. 这就是一个完整的学生管理系统分析图  .   

    展开全文
  • 文章目录数据库设计(结构化设计方法)——学生考试管理系统作业要求一、需求分析1.1、需求说明1.2、数据1.2.1、系统的顶层数据1.2.2、系统的第0层数据1.3、数据字典1.3.1、数据流1.3.2、数据存储1.3.3...

    作业要求

    登录管理模块:

    1. 权限控制:学生不能访问系统管理模块。
    2. 登录错误信息提示。

    系统管理模块:

    1. 系统管理员登录系统后,可以维护课程基础信息,如课程名字、开课时间(学期)等,对课程信息进行增、删、改、查。
    2. 以设定课程的考试成绩的计算方法:能够在页面上对某课程动态增加考核点,并填入该考核点的分值比例。(**如:**对J2EE课程,可新增3个考核点,考核点1为到课情况,分值比例为20%;考核点2为作业,分值比例为20%;考核点3为考试,分值比例为60%。能够验证分值比例之和是否等于100%。)
    3. 维护某门课程每次开课的信息,包括开课时间(具体的学年度)、任课教师、选修人数统计等。
    4. 对学生基础信息进行管理,学生信息的增、删、改、查。
    5. 以列表的方式填入选修某门课程的每个学生的成绩,需要针对每个考核点填写,并计算出总成绩。只有选修了该门课的学生才显示。
    6. 能够对管理帐号进行管理,如增、删、改、查,修改密码等。

    学生模块:

    1. 可以修改自己的基本信息。
    2. 可以察看每个学年度每个学期开的课程,并选修。
    3. 可查询自己选修的所有课程的成绩。

    注意:不考虑学生年级因素。

    一、需求分析

    本阶段的成果的内容形式主要包括数据流图(Data Flow Diagram)和数据字典(DataDictionary)。

    数据流图和数据字典是描述用户需求的重要工具以及阶段成果表达形式。它作为需求分析的成果和用户交流的主要手段和依据,是后续数据库设计的前提。

    设计人员从数据流图中可以比较充分地了解软件的结构,所以也是软件设计的重要依据。

    1.1、需求说明

    作业要求中,把系统分为了三个模块,即登入管理模块、系统管理模块、学生模块。

    对这三个模块的内容进行分析之后,可以得知学生考试管理系统主要满足来自三方面的需求,这三个方面分别是学生用户、教师用户和管理员用户。

    因此,从原先的三个模块分解为如下四个模块:

    1. 登入管理模块(权限控制以及登入错误信息提示等)
    2. 管理员模块(对教师信息、学生信息、课程信息进行管理等)
    3. 教师模块(对课程考核点进行管理、录入学生成绩以及修改个人信息等)
    4. 学生模块(选课以及退选、查看个人成绩以及修改个人信息等)

    1.2、数据流图

    1.2.1、系统的顶层数据流图

    系统的全局数据流图,也称为顶层数据流图,主要是从整体上描述系统的数据流,反映系统中数据的整体流向,是设计者针对用户和开发者表达出的一个总体描述。

    在这里插入图片描述

    1.2.2、系统的第0层数据流图

    第0层数据流图是对顶层数据流图的细化,它的每一处理还可能继续细化,形成子图。

    根据需求可将顶层数据流程图作细化,画出第0层数据流程图,如下图所示。

    在这里插入图片描述

    根据需求分析结果,明确了该系统的主要功能,分别为:

    1. 管理员设置课程并指定任课教师。
    2. 任课老师设置课程的考核点以及各考核点期末占分。
    3. 学生根据自己的兴趣选择课程。
    4. 任课老师录入学生的各考核点成绩。

    1.3、数据字典

    数据流图表达了数据与处理的关系,数据流图作为直观的了解系统运行机理的手段,并没有具体描述各类数据的细节,只有通过数据字典进一步细化才能对系统的需求得到具体而确切的了解。数据字典用来说明数据流图中出现的所有元素的详细的定义和描述,包括数据流、加工处理、数据存储、数据的起点和终点或外部实体等。
    数据字典包括的项目有:数据项、数据结构、数据流、数据存储、加工逻辑和外部实体。

    1.3.1、数据流

    序号数据流名来源流向组成备注
    F1课程信息管理员P2课程信息处理课程号+课程名称+任课老师工号+开课时间
    F2教师信息管理员P3教师信息处理工号+姓名+性别+登入密码+电子邮箱+电话号码
    F3学生信息管理员P4学生信息处理学号+姓名+性别+登入密码+电子邮箱+电话号码
    F4登入信息管理员P1登入系统账号+密码+账户类别
    F5管理员信息P5显示个人信息管理员账号+姓名+性别+登入密码+电子邮箱+电话号码
    F6登入信息学生P1登入系统账号(学号)+密码+账户类别
    F7账户信息P1登入系统P5显示个人信息账号(学、工号)+姓名+性别+登入密码+电子邮箱+电话号码
    F8已处理的课程信息P2课程信息处理S1课程信息课程号+课程名称+开课时间
    F9任课教师P2课程信息处理S6教师任课信息课程号+教师工号
    F10已处理的教师信息P3教师信息处理S2教师信息工号+姓名+性别+登入密码+电子邮箱+电话号码
    F11已处理的学生信息P4学生信息处理S3学生信息学号+姓名+性别+登入密码+电子邮箱+电话号码
    F12课程信息P6显示课程信息学生课程号+课程名称+任课老师工号+任课老师名称+开课时间
    F13选课信息学生P7选课学号
    F14退课信息学生P8退课学号
    F15成绩信息P11显示学生成绩学生学号+课程号+考核点名称+考核点分数+总成绩
    F16学生个人信息P5显示个人信息学生学号+姓名+性别+登入密码+电子邮箱+电话号码
    F17登入信息教师P1登入系统账号(工号)+密码+账号类别
    F18教师个人信息P5显示个人信息教师工号+姓名+性别+登入密码+电子邮箱+电话号码
    F19考核点信息教师P9设置考核点信息考核点名称+考核点占分
    F20选课结果P7选课S7学生选课信息课程号+学号
    F21退课结果P8退课S7学生选课信息课程号+学号
    F22学生考核点成绩教师P10计算学生成绩考核点分数
    F23学生成绩P10计算学生成绩S8学生成绩学号+课程号+考核点名称+考核点分数
    F24任课课程信息P12显示任课信息教师课程号+课程名称+任课老师工号+开课时间
    F25课程考核点信息P9设置课程考核点S5课程考核点信息课程号+考核点名称+考核点占分
    F26选课学生信息P13显示选课学生信息教师学号+姓名+性别+登入密码+电子邮箱+电话号码

    1.3.2、数据存储

    序号数据文件文件组成关键标识
    S1课程信息课程号+课程名称+开课时间课程号
    S2教师信息工号+姓名+性别+登入密码+电子邮箱+电话号码工号
    S3学生信息学号+姓名+性别+登入密码+电子邮箱+电话号码学号
    S4登入账户信息账号(学、工号)+密码全部
    S5课程考核点信息课程号+考核点名称+考核点占分全部
    S6教师任课信息课程号+教师工号全部
    S7学生选课信息课程号+学号全部
    S8学生成绩学号+课程号+考核点名称+考核点分数全部

    1.3.3、处理过程逻辑

    序号处理过程输入输出处理逻辑
    P1登入系统账号和密码以及用户类型账户信息检验登入账户的正确性
    P2课程信息处理课程信息处理之后的课程信息检验课程信息的正确性以及增删改查操作
    P3教师信息处理教师信息处理后的教师信息检验教师信息的正确性以及增删改查操作
    P4学生信息处理学生信息处理后的学生信息检验学生信息的正确性以及增删改查操作
    P5显示个人信息账户信息用户的个人信息根据登入账户不同显示不同的用户个人信息
    P6显示课程信息教师任课信息和课程信息详细的课程信息显示课程信息以及任课教师
    P7选课学生选课信息和课程信息选课结果处理学生选课
    P8退课退课信息和学生选课信息退课结果处理学生退课
    P9设置考核点信息考核点信息和课程信息课程考核点信息对课程设置考核点信息
    P10录入学生成绩学生考核点成绩、课程考核点信息和学生选课信息学生成绩对学生所选的课程的考核点进行评分
    P11显示学生成绩学生成绩成绩信息计算总成绩并显示学生考核点成绩以及总成绩
    P12显示任课信息教师任课信息和课程信息任课课程信息显示老师所任课程的详细信息
    P13显示选课学生信息学生选课信息、教师任课信息、学生信息选课学生信息显示选择某门课程的所有学生信息

    二、概念设计

    上述的数据流图和数据字典共同构成了对用户需求的表达,它们是系统分析员(数据库管理员)在需求调查过程中和用户反复交互得到的。

    建设系统实际要处理的数据基本上已经在数据流图中得到体现,整个设计过程的后续步骤提供基础和依据。

    在概念设计阶段,主要采用的设计手段目前还是实体联系模型(E-R Model)。绘制E-R图的关键是确定E-R图的各种结构,包括实体、属性和联系。

    2.1、实体

    要建立系统的E-R模型的描述,需进一步从数据流图和数据字典中提取系统所有的实体及其属性。为了简化E-R图的处置,现实世界的事物能作为属性对待的尽量作为属性对待,实体的指导原则如下:

    1. 属性必须是不可分的数据项,即属性中不能包含其它的属性或实体。
    2. E-R图中的关联必须是实体之间的关联,属性不能和其它实体之间有关联。

    由前面分析得到的数据流图和数据字典,可以抽象得到实体主要有3个:管理员、教师、学生、课程、考核点。其中,

    • 管理员实体属性有:账号、姓名、性别、登入密码、电子邮箱、电话号码。
    • 教师实体属性有:工号、姓名、性别、登入密码、电子邮箱、电话号码。
    • 学生实体属性有:学号、姓名、性别、登入密码、电子邮箱、电话号码。
    • 课程实体属性有:课程号、课程名称、开课时间。
    • 考核点实体属性有:考核点名称、考核点占分。

    2.2、系统局部E-R图

    在需求分析阶段我们采用的是自上而下的分析方法,那么要在其基础上进一步作概念设计我们面临的是细化的分析数据流图以及数据字典,分析得到实体及其属性后,进一步可分析各实体之间的联系。

    2.2.1、教师实体、课程实体和考核点实体的联系

    一名教师可以讲授多门课程,而每门课只能被一名教师讲授,所以它们之间是一对多的联系(1:n)。

    每门课程可以包含多个考核点,而一个考核点只能属于一门课程,所以它们之间的联系是一对多的(1:n)。

    在这里插入图片描述

    2.2.2、学生实体与课程实体的联系

    一个学生可以选修多个课程,而每一个课程都能够被多个学生选修,因此,它们之间也属于一对多的关系。当学生实体与课程实体联系之后,产生考核点成绩属性。

    在这里插入图片描述

    2.3、系统全局E-R图

    系统的局部E-R图,仅反映系统局部实体之间的联系,但无法反映系统在整体上实体间的相互联系。而对于一个比较复杂的应用系统来说,这些局部的E-R图往往有多人各自分析完成的,只反映局部的独立应用的状况,在系统整体的运作需要时,他们之间有可能存在重复的部分或冲突的情况,如实体的划分、实体或属性的命名不一致等,属性的具体含义(包括数据类型以及取值范围等不一致)问题,都可能造成上述提到的现象。
    为解决这些问题,必须理清系统在应用环境中的具体语义,进行综合统一,通过调整消除那些问题,得到系统的全局E-R图。

    在这里插入图片描述

    三、逻辑结构设计

    逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。

    3.1、ER图到关系模式的转换

    首先,课程实体以及它们的联系。任课教师与课程之间是一对多的联系类型,因此,将任课教师和课程分别设计成如下的关系模式:

    • 教师(工号,姓名,性别,登入密码,电子邮箱,电话号码)
    • 课程(课程号,课程名称,开课时间,工号)

    学生与课程之间是多对多的联系类型,所以将学生和选修分别设计成如下的关系模式:

    • 学生(学号,姓名,性别,登入密码,电子邮箱,电话号码)
    • 选修(学号,课程号)

    将管理员的关系模式设计为:

    • 管理员(账号,姓名,性别,登入密码,电子邮箱,电话号码)

    对于考核点、课程和学生,由于课程与考核点是一对多的关系,学生选修课程之后能够拥有考核点成绩。

    • 考核点(课程号,考核点名称,考核点占比)
    • 考核点成绩(学号,课程号,考核点名称,分数)

    3.2、关系模式的规范及调整

    首先,需要我们确定上面建立的关系模式中的函数依赖,一般在作需求分析时就了解到一些数据项的依赖关系,如教师的编号决定了教师的姓名和其它的数据项信息,而实体间的联系本身也是反映了一种函数依赖关系,但是这不是研究的对象,我们针对的是在一个关系模式中的函数依赖对象。

    其次,对上一步确立的所有函数依赖进行检查,判别是否存在部分函数依赖以及传递函数依赖,针对有的依赖通过投影分解,消除在一个关系模式中存在的部分函数依赖和传递函数依赖。

    对以上八个关系模式进行检查发现,在“课程”中存在部分函数依赖,即工号不依赖于主键课程号,因此对此进行投影分解,增加新的关系模式“授课”。

    最终得到的关系模式如下,均已符合第三范式:

    • 教师(工号,姓名,性别,登入密码,电子邮箱,电话号码)
    • 课程(课程号,课程名称,开课时间)
    • 授课(工号,课程号)
    • 学生(学号,姓名,性别,登入密码,电子邮箱,电话号码)
    • 选修(学号,课程号)
    • 管理员(账号,姓名,性别,登入密码,电子邮箱,电话号码)
    • 考核点(课程号,考核点名称,考核点占比)
    • 考核点成绩(学号,课程号,考核点名称,分数)

    3.3、各数据表的表结构设计

    在上述经由E-R模型得到关系模式并且得到适当的调整后,我们可以结合在需求表述中数据字典包含的数据项信息,得到数据库的表结构。

    我们应该根据3.1节的内容,具体设计各个数据表的表结构,包括表名,表中各列的字段名、数据类型、数据长度和表的主键和外键;还要考虑应该建立哪些索引以及索引的类型。

    3.3.1、数据库中的表清单

    数据库表名关系模式名称备注
    Admin管理员管理员信息表
    Teacher教师教师信息表
    Student学生学生信息表
    Course课程课程信息表
    TeaCourse授课教师授课表
    StuCourse选修学生选课表
    ScorePoint考核点考核点信息表
    Score考核点成绩考核点成绩信息

    3.3.2、教师信息表Teacher字段信息

    字段名称含义属性类型长度备注
    teacherid工号char10主键,也可作为登录标识
    tname姓名varchar6非空
    tsex性别varchar2男、女
    tpassword登入密码varchar20可以是数字、英文以及符号等
    temail电子邮箱varchar40
    tphone电话号码varchar15

    3.3.3、管理员信息表Admin字段信息

    字段名称含义属性类型长度备注
    aid账号char10主键,也可作为登录标识
    aname姓名varchar6非空
    asex性别varchar2男、女
    apassword登入密码varchar20可以是数字、英文以及符号等
    aemail电子邮箱varchar40
    aphone电话号码varchar15

    3.3.4、学生信息表Student字段信息

    字段名称含义属性类型长度备注
    studentid学号varchar10主键,也可作为登录标识
    sname姓名varchar6非空
    ssex性别varchar2男、女
    spassword登入密码varchar20可以是数字、英文以及符号等
    semail电子邮箱varchar40
    sphone电话号码varchar15

    3.3.5、课程信息表Course字段信息

    字段名称含义属性类型长度备注
    courseid课程号varchar10主键
    cname课程名称varchar20非空
    ctime课程时间int5如20201

    3.3.6、教师授课表TeaCourse字段信息

    字段名称含义属性类型长度备注
    teacherid工号varchar10外键(Teacher.teacherid)
    courseid课程号varchar10外键(Course.courseid)

    3.3.7、学生选课表StuCourse字段信息

    字段名称含义属性类型长度备注
    studentid学号varchar10外键(Student.studentid)
    courseid课程号varchar10外键(Course.courseid)

    3.3.8、考核点信息表ScorePoint字段信息

    字段名称含义属性类型长度备注
    courseid课程号varchar10外键(Course.courseid)
    pname考核点名称varchar20非空
    ppercent考核点占比int3(1…100)表示所占百分比

    3.3.9、考核点成绩Score字段信息

    字段名称含义属性类型长度备注
    studentid学号varchar10外键(Student.studentid)
    courseid课程号varchar10外键(Course.courseid)
    pname考核点名称varchar20非空
    pscore分数int3(1…100)表示分值
    展开全文
  • 5.1 系统功能 5.2 功能模块设计 5.2.1 学生模块 5.2.2 老师模块 5.2.3 管理员模块 5.3 功能流程设计 5.3.1 登录流程 5.3.2 批量导入信息流程 5.3.3 组卷流程 5.3.4 在线考试流程 6 系统的实现 6.1 登录模块 6.2 ...
  • ASP.NET在线考试系统需求分析,本人还上传了在线考试系统的详细设计以及在线考试系统的小论文。 目录 1 引言 3 1.1 编写目的 3 1.2 背景 3 2 系统概述 4 2.1 项目目标 4 2.2用户特点 4 3 需求规定 4 3.1功能模块 4 ...
  • 主要为大家详细介绍了python实现学生成绩测评系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 设计目的:建立高效利用的学生信息管理系统,实现大量信息的规范管理、科学统计和快速查询,从而更好的减少管理方面的工作量。 学生信息管理系统提供了强大的学生信息管理功能,方便管理员对学生信息进行添加、修改...
  • python 课程设计期末大作业 学生管理系统 含登录页面程序ppt可私聊
  • 数据结构课程设计报告-学生成绩管理系统
  • 2021《CDGA数据治理工程师》和《CDGP数据治理专家》考试模块和内容大纲.pdf
  • c#单机考试系统

    千次阅读 2021-12-27 10:08:38
    大三上学期c#课设单机考试系统


    1. 课设要求

    1.1课设题目

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

    1.2 课设背景

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

    1.3功能说明

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

    2. 需求分析

    2.1功能性需求

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

    2.2非功能性需求

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

    3. 系统概要设计

    3.1功能概要设计

    登陆模块功能如图3-1所示
    图3-1 登陆模块功能图

    管理员功能如图3-2所示
    图3-2 管理员功能图

    用户功能如图3-3所示
    图3-3 用户功能图

    3.2 数据库概要设计

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

    管理员账号表如图3-4所示。
    图3-4	管理员账号表
    用户账号表如图3-5所示。
    图3-5	用户账号表
    题库表如图3-6所示。
    图3-6	题库表
    考试情况表如图3-7所示。
    图3-7	 考试情况表
    用户留言表如图3-8所示。
    图3-8 用户留言表

    3.3 数据库详细设计

    数据库的详细设计,即利用数据模型进行概念数据库的模式设计。根据考试系统的需求,设计出数据库设计图如图3-9所示。
    图3-9 数据库设计图
    数据库表结构
    表3-1	管理员账号表
    表3-2	用户账号表
    表3-3	题库表
    表3-4 考试情况表
    表3-5	用户留言表

    4. 详细设计

    4.1功能设计

    系统功能流程图如图4-1所示。
    图4-1 系统功能流程图

    4.1 运行与调试

    程序登陆界面如图4-2所示,可以下拉选项框选择用户登陆、管理员登陆或游客登录。
    图4-2 登陆界面

    管理员菜单如图4-3所示。
    图4-3 管理员菜单

    用户菜单如图4-4所示
    图4-4 用户菜单

    试题管理界面如图4-4所示,可以查看题库、修改计时时间、修改题目。
    图4-4 试题管理界面

    用户管理界面如图4-5,4-6所示,可以查看用户考试情况、查看修改用户信息。
    图4-5用户管理界面
    图4-6 修改用户信息

    查看留言界面如图4-7所示,可以查看用户的反馈。
    图4-7 查看留言

    用户考试界面如图4-8,4-9所示,进行考试。
    图4-8 用户考试界面
    图4-9 用户考试界面

    背题模式界面如图4-10所示
    图4-10 背题模式界面

    查看错题如图4-11所示
    图4-11 查看错题

    查看成绩界面如图4-12所示
    图4-12 查看成绩

    用户查看资料如图4-13所示,可以修改用户名。
    图4-13 用户查看资料

    用户反馈如图4-14所示,将反馈信息存入数据库中。
    图4-11 用户反馈

    软件信息界面如图4-15所示,显示软件信息。
    图4-15 软件信息界面

    游客试用界面如图4-16所示。
    图4-16 游客试用界面

    注册账号界面如图4-17所示,身份证号使用正则表达式,需输入正确的身份证号。图4-17 注册账号界面

    重置密码界面如图4-18所示
    图4-18 重置密码界面

    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
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [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);
                }
            }
        }
    }
    
    
    展开全文
  • 数据结构课程设计【考试报名管理系统

    万次阅读 多人点赞 2017-12-20 20:35:15
    //向系统请求分配内存空间来装LinkList这种类型的指针数据的内存大小 L->next=NULL; //创建头结点,其next域置为NULL } /**************************************************************** *功能描述:销毁...
  • Springboot+vue前后端分离考试系统

    千次阅读 多人点赞 2022-03-20 17:52:32
    指南针考试系统是一个多角色在线培训考试系统系统集成了用户管理、角色管理、题库管理、试题管理、考试管理、在线考试等功能,考试流程完善。实现一整套完整体系的考试系统,方便用户在此系统中进行练习并不断提升...
  • 查询成绩信息流程图: 查询成绩信息代码部分 一、myflesgrid数据加载 With myflexgrid .CellAlignment = 4 '对齐方式中中对齐 .TextMatrix(1, 0) = &quot;考试编号&quot; .TextMatrix(1, 1) = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,159
精华内容 5,263
关键字:

学生考试系统数据流程图

友情链接: MyFreeLife.rar