## 数据库课程设计-题库管理系统*

这里写我的思路及其功能展示,希望帮到你,如果想要全部的源代码及其课程设计报告,请来我的主页下载

三大界面图展示



目录
1.需求分析. 3
2.数据库设计以及E-R分析. 4
3.结构设计. 4
(1)表结构设计
(2)相关约束
(3)视图
(4)存储过程
(5)触发器
4.JAVA应用程序端. 9
(1)功能设计
(2)界面设计
5.JAVA应用程序端具体实现. 28
6.总结. 35

一、 需求分析

l  实现题型,题目等基本信息的管理l  实现章节的管理l  实现题型的管理l  能按题型或章节录入课程的习题l  能够按照题目编号删除题目l  创建存储过程查询某种题型和各章节的习题数量l  创建视图查询各题型的数量详细信息l  创建视图查询各章节的题目数量详细信息l  创建视图查看套题汇总详细信息l  习题题号由系统自动生成,从1开始编号l  可以自动抽题组成套题,习题每抽取一次,要使习题的抽取次数加1(触发器)l  当题目插入删除时,自动更改题型和各章节题目数量(触发器)l  实现学生答题系统,并为其录入成绩信息l  可以查看学生详细信息l  可以查看已经抽取的套题详细信息l  建立数据库相关表之间的参照完整性约束。

二、 数据库设计以及E-R分析(E-R图下载包里面有)

为了实现学生和老师分别登录,注册,多创建了,学生信息和老师信息表为了实现对题目、题型、章节的管理,分别创建了题目、题型、章节表为了记录已经抽取的套题信息,创建了套题表为了实现当前的抽取的为哪个套题,创建了套题抽取表用于记录当前已经为第几套题了(如:A,B,C,D卷)

JAVA应用程序端

(1)
功能设计l  学生和老师登录、注册(及其容错)设计l  教师工作服务界面设计查看学生成绩实现插入题目实现删除题目实现题目查询实现题目信息实现题型管理实现章节管理查看套题信息

l 学生答题界面设计

查看自己的成绩开始答题

l Java界面细节设计

有“<”小按钮,当鼠标进入和离开时,会发生颜色的变化并且当鼠标点击时可以返回上一级界面;各按钮当鼠标进入和离开时,会发生图片和颜色的变化;各种功能JLabel,当鼠标进入要选择和离开时会发生明显的颜色变化;当进行登录的时候,密码框用*表示,从而保护信息;每个界面都有与主题相匹配的背景图

界面

1初始程序界面:

2如果这个学生和老师从来没有进入过这个程序,需要进行注册:

进入注册界面:里面有一个下拉列表框可以进行学生和老师注册身份的选择

注册操作(这里以学生注册的为例,其中学生学号为计科1 2 班学生的,教工号为我自己随便输入的一些):像右边如图一样输入要注册的用户和密码,然后点击注册按钮或者在密码框直接回车即可

当注册成功时出现如图右一样的结果



看上面两个运行结果:

容错处理:当你输入的用户名不是数据库表student或user_teacher中提前录入的学号或者教工号时,会发生提示错误,用户名不存在(即这个学生或者老师不存在);

当你输入的用户名已经注册时,则也会提出错误信息

进入学生答题界面:

查看学生成绩:

开始答题(我们这里调用的是数据库中的抽取套题存储过程,所以有5道题):


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200710203535135.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NhaW5pYW8xXw==,size_16,color_FFFFFF,t_70教师服务工作界面

JAVA应用程序端具体实现

初始界面:在类subject_system 中,窗体JFrame

先设置整体面板为绝对布局,然后设置三个按钮:学生登录、教师登录,注册(button1,button2,button3),为他们加入颜色图片,设置布局,并添加监听(从而达到当鼠标进入时设置一种颜色图片,鼠标退出时设置一种颜色图片),当点击各自按钮时弹出对应按钮功能的弹窗(并为其传递一个信息:是哪个按钮点击我了,用于判断是学生登陆还是教师登录),最后为我们的主JFrame添加背景图片

学生教师注册:在类Rigeister中:

这里我们设置的为一个弹窗,依然也是为其设置绝对布局,其中设置一个下拉列表框用于选择学生注册和教师注册;三个label:“用户:”、“密码:”、“<”;两个文本框JTextField 用于输入用户名和密码,和一个注册JButton,然后为这个注册按钮和“<”设置监听(从而达到当鼠标进入时设置一种颜色图片,鼠标退出时设置一种颜色图片),当点击按钮时连接数据库查看这个用户名是否存在,是否已经注册,如果注册成功弹出注册成功的提示对话框,如果注册失败则弹出出错啦的提示对话框;当点击“<”时返回上一级,最后为这些组件设置布局,并为这个弹窗添加两个背景图片

应用数据库代码实现:

String type = register_JBox_type.getSelectedItem().toString();  //获取下拉列表框中选中的对象的信息String user = register_field_user.getText();String passwd = register_field_passwd.getText();String sql;if(type.equals("学生")) {sql ="select * from student";try {int flag = 0;  //用于标识判断输入的用户名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("sno").equals(user)){flag = 1;if(rs.getString("passwd") != null) {JOptionPane.showMessageDialog(register_login_button, "用户已注册","【出错啦】",JOptionPane.ERROR_MESSAGE);   }else {         String   sql2 = "update student set passwd=? where sno=?";pst = con.prepareStatement(sql2);pst.setString(2,user);pst.setString(1,passwd);pst.executeUpdate();JOptionPane.showMessageDialog(register_login_button, "注册成功","OK",JOptionPane.INFORMATION_MESSAGE);}break;}}if(flag == 0) {JOptionPane.showMessageDialog(register_login_button, "用户名不存在","【出错啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();}}if(type.equals("教师")) {sql ="select * from user_teacher";try {int flag = 0;  //用于标识判断输入的用户名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("id").equals(user)){flag = 1;if(rs.getString("passwd") != null) {JOptionPane.showMessageDialog(register_login_button, "用户已注册","【出错啦】",JOptionPane.ERROR_MESSAGE);   }else {         Stringsql2 = "update user_teacher set passwd=? where id=?";pst = con.prepareStatement(sql2);pst.setString(2,user);pst.setString(1,passwd);pst.executeUpdate();JOptionPane.showMessageDialog(register_login_button, "注册","OK",JOptionPane.INFORMATION_MESSAGE);}break;}}if(flag == 0) {JOptionPane.showMessageDialog(register_login_button, "用户名不存在","【出错啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();}                  }

学生、教师登录:在类Login中:

我们设置的为一个弹窗,依然也是为其设置绝对布局,其中设置三个label:“用户:”、“密码:”、“<”;两个文本框JTextField 用于输入用户名和密码,和一个登录JButton,然后为这个登录按钮和“<”设置监听(从而达到当鼠标进入时设置一种颜色图片,鼠标退出时设置一种颜色图片),当点击按钮时弹出对应按钮功能的弹窗(并为其传递这个用户名信息,以便为学生登录后可以查看自己的答题成绩),然后连接数据库查看这个用户名是否存在,是否注册,密码是否正确;当点击“<”时返回上一级,最后为这些组件设置布局,并为这个弹窗添加两个背景图片

应用数据库代码实现:

String user = field_user.getText();String passwd = field_passwd.getText();String sql;if(button_text.equals("学生登录")) {sql ="select * from student";try {int flag = 0;  //用于标识判断输入的用户名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("sno").equals(user)){flag = 1;if(rs.getString("passwd") == null) {JOptionPane.showOptionDialog(login_button, "用户未注册","警告",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,null,"OK");}else if(!rs.getString("passwd").equals(passwd)) {JOptionPane.showMessageDialog(login_button, "用户名密码错误","【出错啦】",JOptionPane.ERROR_MESSAGE);}else {JOptionPane.showMessageDialog(login_button, "登录成功","OK",JOptionPane.INFORMATION_MESSAGE);new student(field_user.getText()).init();}break;}}if(flag == 0) {JOptionPane.showMessageDialog(login_button, "用户名不存在","【出错啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();}          }if(button_text.equals("教师登录")) {sql ="select * from user_teacher";try {int flag = 0;  //用于标识判断输入的用户名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("id").equals(user)){flag = 1;if(rs.getString("passwd") == null) {JOptionPane.showOptionDialog(login_button, "用户未注册","警告",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,null,"OK");}else if(!rs.getString("passwd").equals(passwd)) {JOptionPane.showMessageDialog(login_button, "用户名密码错误","【出错啦】",JOptionPane.ERROR_MESSAGE);}else{JOptionPane.showMessageDialog(login_button, "登录成功","OK",JOptionPane.INFORMATION_MESSAGE);new
teacher().init();}break;}}if(flag == 0) {JOptionPane.showMessageDialog(login_button, "【出错啦】","用户名不存在",JOptionPane.ERROR_MESSAGE);      }} catch (SQLException e1) {e1.printStackTrace();}          }

以下代码太多就不一一放出来了,用文字逻辑代理

学生答题界面:在类student中:

这里也是弹窗、同理的布局;

其中当点击学生成绩的时候查看学生成绩,也就是把从登录传递过来的学号连接数据库表student查询该学生的成绩;

这里最重要的就是那个学生然后进行答题的,我先在该弹窗,也就是类student中定义了几个静态常量

public static String []content;  //题目内容public static String []type;    //题目类型public static String []answer;  //题目答案public static String []answer_; //因为选择题只需要填A B C D 所以这个为 将选中的单选框的内容的第一个字符作为该选择题的答案public static float []g;   //该题的分值

处理方法:当我们点击开始答题的按钮标签时,给它添加一个监听事件(里面连接数据库,并调用抽取套题的存储过程,然后将得到的套题储存在上面的5个静态数组中,然后初始值传入参数为第1题,并在此时new出第一个题目)

如果此时是选择题,则把数组content[n]中的内容按照空格进行分割(因为为了得出A B C D选项我提前在数据库表中录入内容的时候特意在其中设置了空格),第一个为题目,其余四个为单选框中的文本

如果是判断题,直接在单选框中设置两个选项,对、错

如果是计算题或者填空题,则直接设置一个文本框,让学生把答案填入其中即可

接着在点击下一题时,我们先连接数据库,把学生选择的答案与正确答案想比较,如果正确就为学生加相应的分值,否则则不做操作,接着我们再new 出下一道题

如果是已经到了第五题,则判断完正确后,直接退出

数据库代码实现:

if(student.type[n].equals("判断题")||student.type[n].equals("选择题")) {String a = group.getSelectedCheckbox().getLabel().substring(0,1);if(a.equals(student.answer_[n])) {sql = "update student set total_score = total_score + ? where sno = ?";try {pst = con.prepareStatement(sql);pst.setFloat(1,student.g[n]);pst.setString(2,student_user);pst.executeUpdate();           }
catch (SQLException e1) {e1.printStackTrace();}   }}if(student.type[n].equals("计算题")||student.type[n].equals("填空题")) {String
a = huida.getText();if(a.equals(student.answer[n])) {sql = "update student set total_score = total_score + ?  where sno = ?";try {pst = con.prepareStatement(sql);pst.setFloat(1,student.g[n]);pst.setString(2,student_user);pst.executeUpdate();           }
catch (SQLException e1) {e1.printStackTrace();}   }   }if(n<4)
new start_promble(student_user,n+1).init();

教师工作服务界面在:teacher类中:

一样这里也是弹窗、同样的布局,只是实现的功能不一样而已:

查看学生成绩 :这个我就是自己用JTabel、DefaultTableModel,然后连接数据库查询student表,最后把信息用弹窗显示出来

插入题目:这个我设置了四个输入框:题目内容、题目答案、题目类型、题目章节。而题目编号因为为自增列,所以不用教师输入;题目被抽取的次数用默认值0,因为他还没有被抽取。当点击确定时insert into进problem表中

删除题目:这个我直接设置了一个输入题目编号的输入框,因为题目编号在problem表中为主键。当点击确定时delete这个problem表中这条数据

题目查询:这里分为题型查询和章节查询,这次连接数据库后分别调用的两个存储过程find_type_promble、find_chapter_promble,当回车时,信息显示在题目数量那个文本框中

题型管理:这里分为题型信息表查询和插入题型,题型查询直接select promble_type表;插入题型有两个数输入框分别为:题目类型、题目分数,然后insert into promble_type表

章节管理:这里分为章节信息表查询和插入题型,题型查询直接select chapter表;插入题型有两个数输入框分别为:题目类型、题目分数,然后insert into chapter表

套题信息:这里分为套题信息表查询和套题汇总查询,套题汇总查询是直接select question表 ; 套题汇总查询是直接 select question_view 视图

数据库课程设计-题库管理系统相关推荐

  1. 数据库课程设计————学生考试系统

    1.敲代码前的准备工作 1.1准备开发工具 1.1.1 开发工具的说明 本系统利用了xampp 集成环境,利用PHP写后端,html.css.js写前端(其实笔者也是现学现卖) 1.1.2 xampp ...

  2. oracle学生考勤,Oracle数据库课程设计――学生考勤系统的Oracle实现1

    Oracle数据库课程设计――学生考勤系统的Oracle实现1 辽宁工程技术大学 Oracle数据库课程设计报告 学生考勤系统 姓 名: XXXXX 班 级: 计SJ08-1班 学 号: 完成日期: ...

  3. c语言作业制作仓库管理系统,C语言课程设计 仓库管理系统

    <C语言课程设计 仓库管理系统>由会员分享,可在线阅读,更多相关<C语言课程设计 仓库管理系统(22页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计实训报告实训题目: 仓 ...

  4. 数据库课程设计——火车票售票系统

    摘要 数据库课程设计的题目,设计了一个火车票售票系统,实现了列车信息查询,车票查询及购买,订单查询,个人信息管理等功能,数据是从12306爬取的真实数据. 项目链接 前端项目链接:https://gi ...

  5. 寝室报修系统设计c语言,数据库课程设计-宿舍报修系统.doc

    读万卷书 行万里路 <数据库系统原理> 课程设计报告 课题名称: 宿舍报修系统 专业班级: 学 号: 姓 名: 指导老师: 成 绩: 2014年6月 一.课题名称 宿舍报修系统 二.需求分 ...

  6. python飞机票预定系统_数据库课程设计 - 机票预订系统

    一.机票预定系统 1.1 题目要求 要求具备如下基本功能 班机基本信息的管理: 航班信息的管理: 旅客预定机票.取消预约.付款取票.退票的管理: 查询航班信息.航班预定情况.旅客信息,计算航班满座率. ...

  7. Java课程设计-仓库管理系统

  8. 数据库课程设计——MySQL火车票售票系统

    数据库课程设计--火车票售票系统 很烦数据库课程设计?阅读本篇文章会让你不那么烦躁~ 话不多说先放源代码: https://github.com/shadowings-zy/TrainTicketsS ...

  9. 关于书籍管理系统数据库课程设计

    关于书籍管理系统数据库课程设计 系统概述 该系统用以收集.存储书籍信息.人员(读者.图书管理员)信息.图书借阅信息以及意外处理信息,并及时记录存储各个环节信息的变更,以便管理.查询.显示.输出,以节约 ...

  10. Spring MVC 题库管理系统 课程设计作业

    前言:这个系统原本是为了(强国答题)学习而做的.后台感觉这样提交的话,交到学校里感觉不太好,故改名题库管理系统. 先说下本系统的功能: 1.用户的登陆,注册,修改密码,退出等操作. 2.对题的增删改查 ...

最新文章

  1. selenium之简单使用
  2. Linux修改用户密码有效期
  3. git指令快捷 idea_IDEA+Git+Gitlab使用详细教程
  4. 数据库函数..........
  5. 语音 识别_语音识别_qq语音识别 - 云+社区 - 腾讯云
  6. Javascript特效:电商商品展示放大镜
  7. php 匹配标签内的文本内容 preg_match_all strip_tags
  8. SaltStack Runners
  9. 第一篇 你好,我叫Flask
  10. synopsys软件介绍
  11. [置顶] 我也来学习nodejs 没有就自己来 色色实现迷你 MVC
  12. 如何利用python3创建数据表_大数据分析如何利用Python创建数据透视表
  13. Python实现简单自动升级exe程序版本并自动运行
  14. python word 公式转png图片处理方式
  15. ctfshow web入门(一) 已完结
  16. 你有哪些“相见恨晚”的UE4学习资料?
  17. 你可能不知道微软悄悄关闭Win10分页显示程序的Sets功能
  18. 树莓派4正式发布!TYPE-C,USB3.0,支持4K双屏,售价35美金起
  19. QCC514x-QCC304x(headset)系列(实战篇)之3.1-按键模块详解
  20. codeblocks下载及安装包括程序示例

热门文章

  1. 计算机ascii码表
  2. 经典C语言程序设计100例
  3. 网站上部署Live2D模型(moc3格式)
  4. matlab的小波分析,matlab小波分析步骤是什么 - 全文
  5. Eclipse的版本、下载网址和安装
  6. [转]史上最全Eclipse优化
  7. 一个双线性配对(双线性映射)的例子
  8. python简单的计算方法_用python实现简单的有限元方法(二)
  9. 【Rust日报】 2019-05-22:Mozilla图像团队发布WebRender MVP
  10. php dht爬虫,利用DHT网络,爬取bt种子。