当前位置:网站首页>GUI+SQLServer考试系统
GUI+SQLServer考试系统
2022-06-26 16:30:00 【Java学不会】
文章目录
1、概述
1.1、 目的与要求
随着科技的发展,基本上所有的具有一定数量数据的机构都开始使用计算机数据库来做管理。几乎现在每个人在学习中,都会做大量的题。该课程设计要求设计一个做题的数据管理系统,数据库中包含了用户的基本信息,题库基本信息,以及用户错题集。要方便用户进行做题整理与归纳,通过该课程设计,应该达到把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分结合起来。
1.2、设计环境
- Microsoft SQL Server 2019
- JDK 1.8
- IntelliJ IDEA 2021
2、需求分析
2.1、系统功能要求设计
- 此系统实现如下功能:
- 使得用户练习题,整理错题、条理化、自动化。
- 通过账号和密码登录系统,管理员增删改查提供以及用户。
- 设计人机交换界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制等方面的功能要求。
2.2、系统模块设计
- 习题练习系统大体可以分成两大模块如,一是管理员模块,里面包含题库和用户的基本信息;再者便是用户模块,在该模块中应该包含查询题库,与错题集的添加。
- 可以得到系统流程图:

2.3、数据字典
- 数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。利用SQL Server 2019 建立“exam”数据库,其基本表清单及表结构描述如下:
- 数据库中用到的表:

- Usertable 数据表,结构如下:

- Title 数据表,结构如下:

- Error 数据表结构如下:

3、概念模型设计
- 由需求分析的结果可知,本系统设计的实体包括:
- 用户:账号,密码,姓名,权限
- 题库:题目编号,题目,选项A,选项B,选项C,选项D,选项E,题目类型,答案
- 错题集:errorid,写错时间
- 管理员可以添加多个题,用户可以答多个题。由上述分析可得到系统的E—R图:

4、逻辑和物理结构设计
4.1、由系统E—R图转化而得到的关系模式如下
- 用户(userid,姓名,密码,权限)
- 题库(topicid,题目,选项A,选项B,选项C,选项D,选项E,题目类型,答案,userid)
- 错题集(errorid,写错时间,userid,topicid)
4.2、确定关系模型的存取方法
在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。可对该关系的屆性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。在实际设计中最常用的存取方法是紫引发,使用紫引可以大大减少数据的查询时间,在建立紫引时应遊福:在经常需要搜紫的列上建立紫引:在主关键字上建立紫升;在经常用于连接的列上建立索引,即在外键上建立索引:在经常需要根据范围进行搜索的列上创建索列,因为索引己经排序,其指定的范围是连续的等规则。才能充分利用索引的作用避免因索引引起的负面
作用。
4.3、确定数据库的存储结构
创建用户表:
CREATE TABLE [dbo].[usertable]( [userid] [varchar](10) NOT NULL, [password] [varchar](16) NOT NULL, [name] [varchar](10) NOT NULL, [power] [int] NOT NULL, CONSTRAINT [PK_user] PRIMARY KEY CLUSTERED ( [userid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[usertable] WITH CHECK ADD CONSTRAINT [CK_usertable] CHECK (([power]=(1) OR [power]=(0))) GO ALTER TABLE [dbo].[usertable] CHECK CONSTRAINT [CK_usertable] GO创建题库表:
CREATE TABLE [dbo].[title]( [topicid] [int] IDENTITY(1,1) NOT NULL, [topic] [varchar](800) NOT NULL, [A] [varchar](800) NOT NULL, [B] [varchar](800) NOT NULL, [C] [varchar](800) NOT NULL, [D] [varchar](800) NOT NULL, [E] [varchar](800) NULL, [type] [char](6) NOT NULL, [value] [varchar](5) NOT NULL, [userid] [varchar](10) NULL, CONSTRAINT [PK_title] PRIMARY KEY CLUSTERED ( [topicid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[title] WITH CHECK ADD CONSTRAINT [FK_title_title] FOREIGN KEY([topicid]) REFERENCES [dbo].[title] ([topicid]) GO ALTER TABLE [dbo].[title] CHECK CONSTRAINT [FK_title_title] GO ALTER TABLE [dbo].[title] WITH CHECK ADD CONSTRAINT [FK_title_title1] FOREIGN KEY([topicid]) REFERENCES [dbo].[title] ([topicid]) GO ALTER TABLE [dbo].[title] CHECK CONSTRAINT [FK_title_title1] GO创建错题表:
CREATE TABLE [dbo].[error]( [errorid] [int] IDENTITY(1,1) NOT NULL, [userid] [varchar](10) NOT NULL, [topicid] [int] NOT NULL, [errortime] [date] NOT NULL, CONSTRAINT [PK_error] PRIMARY KEY CLUSTERED ( [errorid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[error] WITH CHECK ADD CONSTRAINT [FK_error_title] FOREIGN KEY([topicid]) REFERENCES [dbo].[title] ([topicid]) GO ALTER TABLE [dbo].[error] CHECK CONSTRAINT [FK_error_title] GO ALTER TABLE [dbo].[error] WITH CHECK ADD CONSTRAINT [FK_error_usertable] FOREIGN KEY([userid]) REFERENCES [dbo].[usertable] ([userid]) GO ALTER TABLE [dbo].[error] CHECK CONSTRAINT [FK_error_usertable] GO
5、数据库的实施与维护
- 此阶段主要任务包括创建数据库,加载初始数据,数据库试运行,数据库的安全性和完整性控制数据库的备份与恢复,数据库性能的监督分析和改仅,数据库的重组和重构等。首先在数据库中建立一个学生成绩管理系统数据库,然后新建一个数据源。主要代码如下:
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.CopyOnWriteArrayList;
public class ConnectSQLserver {
public ConnectSQLserver( ) {
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
public User login( String userid, String password ) {
User user = new User();
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
Statement stmt = null; //用于执行静态SQL语句并返回其生成的结果的对象。
ResultSet rs = null; //数据库结果集的数据表
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
//3-创建一个Statement对象,用于将SQL语句发送到数据库
stmt = con.createStatement();
//4- SQL语句
String SQL = "SELECT name,power FROM usertable where userid="
+ "'" + userid + "'and password=" + "'" + password + "'";
//5-执行SQL,返回数据
rs = stmt.executeQuery(SQL);
//6-遍历
if (rs.next()) {
user.setUserid(rs.getString("name"));
user.setPower(rs.getString("power"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
return user;
}
}
public int addexam( String topic, String A, String B, String C, String D, String E, String type, String value ,String userid) {
User user = new User();
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
Statement stmt = null; //用于执行静态SQL语句并返回其生成的结果的对象。
int rs = 0; //数据执行结果
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
//3-创建一个Statement对象,用于将SQL语句发送到数据库
stmt = con.createStatement();
//4- SQL语句
String SQL = "insert into title values('" + topic + "','" + A + "','" + B + "','" +
C + "','" + D + "','" + E + "','" + type + "','" + value + "','" +userid+"')";
//5-执行SQL,返回数据
System.out.println(SQL);
rs = stmt.executeUpdate(SQL);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
return rs;
}
}
public Vector[] delExam( ) {
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
Statement stmt = null; //用于执行静态SQL语句并返回其生成的结果的对象。
ResultSet rs = null; //数据执行结果
Vector rowData, columnNames;
columnNames = new Vector();
columnNames.add("题目编号");
columnNames.add("题目");
rowData = new Vector();
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
//3-创建一个Statement对象,用于将SQL语句发送到数据库
stmt = con.createStatement();
//4- SQL语句
String SQL = "select topicid,topic from title";
//5-执行SQL,返回数据
rs = stmt.executeQuery(SQL);
while (rs.next()) {
Vector hang = new Vector();
hang.add(rs.getString(1));
hang.add(rs.getString(2));
rowData.add(hang.clone());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
Vector[] vectors = {
rowData, columnNames};
return vectors;
}
}
public int bDelExam( int i ) {
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
Statement stmt = null; //用于执行静态SQL语句并返回其生成的结果的对象。
int rs = 0; //数据执行结果
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
//3-创建一个Statement对象,用于将SQL语句发送到数据库
stmt = con.createStatement();
//4- SQL语句
String SQL0 = "delete from title where topicid=" + i;
String SQL1 = "delete from error where topicid=" + i;
//5-执行SQL,返回数据
System.out.println(SQL1);
stmt.executeUpdate(SQL1);
rs = stmt.executeUpdate(SQL0);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
return rs;
}
}
public int bAltExam( int i ) {
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
Statement stmt = null; //用于执行静态SQL语句并返回其生成的结果的对象。
ResultSet rs = null; //数据执行结果
int rs1 = 0;
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
//3-创建一个Statement对象,用于将SQL语句发送到数据库
stmt = con.createStatement();
//4- SQL语句
String SQL = "select topicid from title where topicid=" + i;
//5-执行SQL,返回数据
rs = stmt.executeQuery(SQL);
while (rs.next()) {
rs1 = new Integer(rs.getInt(1));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
}
}
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
return rs1;
}
}
public int setExam( int topicid, String topic, String A, String B, String C, String D, String E, String type, String value ) {
User user = new User();
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
Statement stmt = null; //用于执行静态SQL语句并返回其生成的结果的对象。
int rs = 0; //数据执行结果
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
//3-创建一个Statement对象,用于将SQL语句发送到数据库
stmt = con.createStatement();
//4- SQL语句
String SQL = "update title set topic='" + topic + "',A='" + A + "',B='" + B + "',C='" +
C + "',D='" + D + "',E='" + E + "',type='" + type + "',value='" + value + "'" + "where topicid=" + topicid;
//5-执行SQL,返回数据
System.out.println(SQL);
rs = stmt.executeUpdate(SQL);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
return rs;
}
}
public int addUser( String userid, String password, String name, int power ) {
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
Statement stmt = null; //用于执行静态SQL语句并返回其生成的结果的对象。
int rs = 0; //数据执行结果
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
//3-创建一个Statement对象,用于将SQL语句发送到数据库
stmt = con.createStatement();
//4- SQL语句
String SQL = "insert into usertable(userid,password,name,power) " +
"values('" + userid + "','" + password + "','" + name + "'," +
power + ")";
//5-执行SQL,返回数据
System.out.println(SQL);
rs = stmt.executeUpdate(SQL);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
return rs;
}
}
public Vector[] delUser( ) {
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=exam;user=sa;password=123";//sa身份连接
Connection con = null; //会话连接
Statement stmt = null; //用于执行静态SQL语句并返回其生成的结果的对象。
ResultSet rs = null; //数据执行结果
Vector rowData, columnNames;
columnNames = new Vector();
columnNames.add("用户账户");
columnNames.add("用户姓名");
columnNames.add("权限");
rowData = new Vector();
try {
//1-注册驱动器,驱动管理器类加载SQLServerDriver类的静态方法,如果没有添加这个驱动,则创建这个驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载成功!");
//2-与数据源获得连接
con = DriverManager.getConnection(url);
System.out.println("数据库连接成功!");
//3-创建一个Statement对象,用于将SQL语句发送到数据库
stmt = con.createStatement();
//4- SQL语句
String SQL = "select userid,name,power from usertable";
//5-执行SQL,返回数据
rs = stmt.executeQuery(SQL);
while (rs.next()) {
Vector hang = new Vector();
hang.add(rs.getString(1));
hang.add(rs.getString(2));
hang.add(rs.getString(3));
rowData.add(hang.clone());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
Vector[] vectors = {
rowData, columnNames};
return vectors;
}
}
5.2、部分操作截图
- 下面显示了登录系统进行查询的临时界面:

- 下面显示了添加题库插入临时界面:

- 下面显示了添加用户临时插入界面:

- 下面显示了删除题库界面:

- 下面显示了做题,查询界面:

6、源码获取地址
边栏推荐
- r329(MAIX-II-A(M2A)资料汇总
- Which position does Anxin securities rank? Is it safe to open an account?
- Knowing these commands allows you to master shell's own tools
- Dialogue with the senior management of Chang'an Mazda, new products will be released in Q4, and space and intelligence will lead the Japanese system
- C语言 头哥习题答案截图
- 108. 简易聊天室11:实现客户端群聊
- 神经网络“炼丹炉”内部构造长啥样?牛津大学博士小姐姐用论文解读
- R language generalized linear model function GLM, GLM function to build logistic regression model, analyze whether the model is over discrete, and use the ratio of residual deviation and residual degr
- JS tutorial - printing stickers / labels using the electronjs desktop application
- Développer un opérateur basé sur kubebuilder (démarrer)
猜你喜欢

10 tf. data

The first batch in the industry! Tencent cloud security and privacy computing products based on angel powerfl passed CFCA evaluation

Supplement the short board - Open Source im project openim about initialization / login / friend interface document introduction
Redis Guide (8): principle and implementation of Qianfan Jingfa distributed lock

Cuckoo filter for Chang'an chain transaction

5G未平6G再启,中国引领无线通信,6G的最大优势在哪里?

Angel 3.2.0 new version released! Figure the computing power is strengthened again

# 补齐短板-开源IM项目OpenIM关于初始化/登录/好友接口文档介绍

In a bad mood, I just write code like this

Développer un opérateur basé sur kubebuilder (démarrer)
随机推荐
SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)
TCP拥塞控制详解 | 1. 概述
JS教程之 使用 Electron.JS 构建原生桌面应用程序乒乓游戏
R language generalized linear model function GLM, GLM function to build logistic regression model, analyze whether the model is over discrete, and use the ratio of residual deviation and residual degr
【毕业季】致毕业生的一句话:天高任鸟飞,海阔凭鱼跃
Beijing University and Tencent jointly build angel4.0, and the self-developed in-depth learning framework "River map" is integrated into the ecology
首例猪心移植细节全面披露:患者体内发现人类疱疹病毒,死后心脏重量翻倍,心肌细胞纤维化丨团队最新论文...
Kept to implement redis autofailover (redisha)
R语言plotly可视化:plotly可视化归一化的直方图(historgram)并在直方图中添加密度曲线kde、并在直方图的底部边缘使用geom_rug函数添加边缘轴须图
补齐短板-开源IM项目OpenIM关于初始化/登录/好友接口文档介绍
[207] several possible causes of Apache crash
Mono 的一些实例方法
day10每日3题(1):逐步求和得到正数的最小值
6 custom layer
Redis migration (recommended operation process)
C# 读写文件从用户态切到内核态,到底是个什么流程?
R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵、行和列使用主成分分析重新排序、下三角形中使用平滑的拟合线和置信椭圆,上三角形中使用散点图、对角线最小值和最大值
I regard it as a dry product with a monthly income of more than 30000 yuan for sidelines and more than 10000 yuan for novices!
[Li Kou brush questions] 11 Container holding the most water //42 Rain water connection
R语言广义线性模型函数GLM、glm函数构建逻辑回归模型(Logistic regression)、分析模型是否过离散(Overdispersion)、使用残差偏差与二项式模型中的剩余自由度的比率评估