2021山东大学软件学院JAVA高程课设-考试平台的设计与开发(二)

系列目录

2021山东大学软件学院JAVA高程课设-考试平台的设计与开发(一)
2021山东大学软件学院JAVA高程课设-考试平台的设计与开发(二)
2021山东大学软件学院JAVA高程课设-考试平台的设计与开发(三)



数据库设计

连接数据库,简单掌握SQL语句的使用方法

我使用的数据库版本是mysql-8.0.23-winx64,然后又下载了一个可视化工具SQLyog,方便后期对于数据库的操作,我新建了一个名为courses数据库,所有系统相关的数据都会存储在这个库中,目前这个库中只有两张表格,一个存储用户基本信息的userinfo(username【用户名】,telephonenum【用户的电话号码用作账户】,school【用户的学校】,password【密码】,identity【用户的身份】)

在这里插入图片描述

一个是存储题目的questionbank(题库中共有三种类型的题:选择题、阅读题和编程题;表格每一列的信息分别是id【题目的序号】,complexity【题目难度】,content【题目内容】,optiona,b,c,d【四个选项】,answer【答案】)
在这里插入图片描述
(二)中的类和方法实现的基本都是对于这两张表格储存的数据的操作
同时在安装驱动程序时,意外发现idea中有一个插件,可以直接实现对数据库的可视化操作
在这里插入图片描述
专门写了一个工具类DbConnect用于对数据库的连接
这个类中有三个方法,一个方法使用DriverManager和JDBC两个类创建与数据库的连接,然后调用函数DriverManager.getConnection(url, username, password)得到连接,将其储存在全局变量Connection conn=null中。
第二个方法是public static Connection getConnection(){return conn;}用于得到连接
第三个方法是closeAll(rs, stmt, conn);关闭连接,释放资源(由于之后的每个类所使用的PreparedStatement对象个数可能有所不同,所以我利用方法的overloading多写了几个释放资源的方法)
public static void closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn){}


提示:以下是本篇文章正文内容,下面案例可供参考

开发进度

1、
首先针对用户信息写了一个UserInfo类,里面的一些属性就是用户基本信息,也是数据库中userinfo表格要存储的信息
在这里插入图片描述
注释中对于这些属性的格式有一定的要求(计划在实现GUI的代码中,对用户所填写的这些信息进行筛选和过滤)
这个类中的方法都是一些简单的get和set方法
2、
然后是实现注册功能的Enroll类,这个类中只有一个返回值为void的构造方法直接用来进行注册,这个方法传入的参数就是userinfo的5列信息
在这里插入图片描述
这四个语句的作用分别是:与数据库建立连接,将建立的连接储存在conn中,pstmt1和pstmt2用以执行后面的SQL语句,rs用以存储查询结果的返回集。
两条SQL语句,一条用来对userinfo表格中的用户名或账号信息进行比对,返回含有相同信息的行(这个主要是为了避免在注册时出现相同用户名或账号重复注册的情况)
在这里插入图片描述
另一条用来在userinfo表中新建一个用户信息列
在这里插入图片描述
然后就是利用PreparedStatement对象pstmt1执行sql1语句,如果返回集rs不为空,则执行
在这里插入图片描述
如果返回集为空,则执行sql2语句,并将所有的参数填入,最后更新数据
在这里插入图片描述
最后使用closeAll(rs, stmt, conn);方法释放资源
以上代码全部写在try-catch语句中,方便对于异常的捕捉,对于捕捉异常全部采用的是e.printStackTrace();语句
3、
Landing是用于登陆的类,其中实现登陆的方法是findUser(String telep,String pwd),他的返回值类型是一个UserInfo对象
findUser方法的思路和注册方法的思路大致相同,只是执行的sql语句有所不同
在这里插入图片描述
只有输入的账号和密码同时与表格中的数据相符时,才会返回一个正确的UserInfo对象,否则将执行System.out.println(“账号或密码错误”);提示
写了一个演示类来演示登陆的功能,其运行结果如下
在这里插入图片描述
4、
针对题库写了一个Question类,里面的一些属性就是题库中的题的各种属性,也是数据库中questionbank表格要存储的信息
这个类管理三种类型的题,分别是选择题,程序阅读题,编程题。为了便于管理,这三种题在数据库中都在同一张表中,当题目类型为阅读题或编程题时,四个选项设置为空
该类中的属性如下
在这里插入图片描述
其中Id和Complexity的初始值设置为0是便于识别异常。Id是题目的序号,绝对不可以为null;Complexity是题目的难度,设置为double的原因是为了方便后续对于试卷难度的计算,试卷难度的计算公式是试卷难度=生成试卷的每个题目难度之和/试卷题目个数(结果为double型,保留两位小数),然后写一个枚举类将结果与难度对应起来
通过查阅资料和试验发现数据库的表格中可以存储很长的字符串,所以无需担心题目长度的问题,存储空间绝对够用
这个类中的方法都是一些简单的get和set方法
5、
DoQuestionBank类用于对题库的增删改查,简单维护,其中一共有8个方法
(a)
首先是添加题目的方法我写了两个,分别是addSelection(int id, double complexity,String type,String content,String a,String b, String c, String d, String answer)【用于添加选择题】和addReadProgram(int id, double complexity,String type,String content,String answer)方法【用于添加阅读题和编程题】,这个方法和注册功能的方法思路是相同的,其中id【题目序号】和content【题目内容】这两个信息如果有一个重复的话则添加失败
(b)
然后是queryQuestionID(int id)方法,这个方法实现的是根据题目Id查找相应的题,并将结果返回,其返回类型是一个Question类对象,如果想要得到返回的各种信息,只需要使用Question类中的方法对这个对象进行操作即可。
实现过程与登录类似,只不过要将sql语句改为
在这里插入图片描述
并且在try语句中增加了对Question类对象每一个属性的赋值
在这里插入图片描述
©
deleteQuestion(int id)根据题号对题库的题进行删除,在使用时可以结合queryQuestionID(int id)方法(用户先输入id对题目进行查询,在浏览该题的内容后再决定要不要删除该题)
要执行的sql语句是
在这里插入图片描述
(d)
然后是实现对于选择题的修改的modifySelection(int id, double complexity,String type,String content,String a,String b, String c, String d, String answer)方法,和对于阅读题和编程题的修改的modifyReadProgram(int id, double complexity, String type, String content, String answer)方法【这个方法和选择题的相同,只是少了四个选项,两个方法分开是为了便于理解和使用】,这两个方法也要结合着queryQuestionID(int id)方法来用,虽然传入的参数是questionbank表格中所有列的内容,但是用户只需要在界面输入id查询,其他参数是根据查询方法得到的
modifySelection()方法中所要执行的sql语句是
在这里插入图片描述
在这里插入图片描述
(e)
还有两个方法是根据题目类型获取题目列表的queryQuestionType(String type)方法,和根据题目难度获取题目列表queryQuestionComplexity(double complexity)方法,这两个方法原理相同
所使用的sql语句是
在这里插入图片描述
由于返回的结果集不止一个题目,所以不能使用一个Question类对象的形式来存储查询结果了。
解决的方法是构造一个Question数组对象,将结果存储在数组中
在这里插入图片描述
对查询结果集进行的操作是
在这里插入图片描述
最后使用一个while循环语句来实现对数组中每个元素的属性赋值

遇到的问题

目前我主要遇到了两个问题:
第一个就是关于异常处理,在之前的所有代码中,我对于异常的处理基本使用的都是e.printStackTrace();方法,这个方法是在命令行打印异常信息在程序中出错的位置及原因,但可能出现要产生的字符串记录的是堆栈信息,太长太多,内存被填满了的问题,所以后期要改进一下;
另一个问题就是数据库的表格中不能存储换行的字符串,但是题目内容肯定需要换行,所以这个问题也需要解决。
我下一步想要实现的功能主要是系统根据教师用户的设置自动生成一张试卷,以及根据自己的意愿对于试卷进行修改,还有对于试卷的批改。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值