Java使用三层架构、JDBC连接数据库完成《试题信息管理系统》

开发基于控制台的试题信息管理系统。具体要求如下:
(1)显示试题信息管理系统主菜单,如图-1所示,包括:
1)列出所有试题信息
2)按科目查询
3)按题干模糊查询
4)添加试题
5)删除试题
6)退出系统
(2)列出所有试题信息:查询出所有试题的信息,内容包括:题干,A、B、C、D四个选项,答案。如图-2所示。
(3)按科目查询:输入科目,查询出属于此科目的所有试题。如图-3所示。
(4)按题干模糊查询:输入题干,按题干模糊查询出相关试题。如图-4所示。
(5)添加试题:输入试题的各个属性信息,并将试题保存至数据库。如图-5所示。
(6)删除试题:删除指定编号的试题,如果输入的试题编号不存在,给出提示信息。如图-6所示。
(7)退出系统。

系统运行界面如图所示:
查看试题
在这里插入图片描述
根据科目查看试题
在这里插入图片描述
模糊查询试题
在这里插入图片描述
新增试题
在这里插入图片描述
删除试题
在这里插入图片描述
数据库表结构
在这里插入图片描述
需要创建的工具类、实体类、接口、
采用三层架构搭建系统框架
数据访问层、业务逻辑层、表示层
采用数据访问层采用DAO模式设计和开发
设计步骤
第一步:根据数据库表创建实体类
第二步:创建DAO接口和实现类
第三步:创建业务接口和实现类
第四步:优化业务接口设计
第五步:根据分析结果,给出伪代码,完成设计

在这里插入图片描述
1、创建实体类QuestionInfo

public class QuestionInfo {
    private int QuestionId;
    private String Question;
    private String optionA;
    private String optionB;
    private String optionC;
    private String optionD;
    private int subject;
    public int getQuestionId() {
        return QuestionId;
    }
    public void setQuestionId(int questionId) {
        QuestionId = questionId;
    }
    public String getQuestion() {
        return Question;
    }
    public void setQuestion(String question) {
        Question = question;
    }
    public String getOptionA() {
        return optionA;
    }
    public void setOptionA(String optionA) {
        this.optionA = optionA;
    }
    public String getOptionB() {
        return optionB;
    }
    public void setOptionB(String optionB) {
        this.optionB = optionB;
    }
    public String getOptionC() {
        return optionC;
    }
    public void setOptionC(String optionC) {
        this.optionC = optionC;
    }
    public String getOptionD() {
        return optionD;
    }
    public void setOptionD(String optionD) {
        this.optionD = optionD;
    }
    public int getSubject() {
        return subject;
    }
    public void setSubject(int subject) {
        this.subject = subject;
    }
    public String getAnswer() {
        return answer;
    }
    public void setAnswer(String answer) {
        this.answer = answer;
    }
    private String answer;
}

2、创建dao层接口QuestionInfoDao

import Question.entity.QuestionInfo;
import java.util.List;
public interface QuestionInfoDao{
    //查询所有试题
    List<QuestionInfo> showInfo();
    //按科目查询试题
    List<QuestionInfo> showSubject(int num);
    //按题干模糊查询试题
    List<QuestionInfo> showDim(String question);
    //添加试题
    int add(QuestionInfo questionInfo);
    //删除试题
    int delete(int id);
    //按试题编号查询试题
    List<QuestionInfo> showId(int id);
}

3、导入BaseDao类 切记:更改数据库名 填对用户名和密码

public class BaseDao {
    Connection conn=null;
    public BaseDao(){
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/question","root","root");
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
    public int executeUpdate(String sql,Object... O){
        int i = 0;
        try {
            PreparedStatement st = conn.prepareStatement(sql);
            if (O != null) {
                for (int j = 0; j <O.length ; j++) {
                    st.setObject(j+1,O[j]);
                }
            }
            i = st.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return i;
    }
    public ResultSet executeQuery(String sql,Object... o){
        ResultSet rs = null;
        try {
            PreparedStatement st = conn.prepareStatement(sql);
            if (o!= null) {
                for (int j = 0; j <o.length ; j++) {
                    st.setObject(j+1,o[j]);
                }
            }
            rs = st.executeQuery();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return rs;
    }
}

4、创建dao层下的impl包 并创建QuestionInfoDaoImpl 类继承BaseDao类实现QuestionInfoDao接口中的所有方法。

import Question.dao.BaseDao;
import Question.dao.QuestionInfoDao;
import Question.entity.QuestionInfo;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class QuestionInfoDaoImpl extends BaseDao implements QuestionInfoDao {
    ResultSet rs=null;
    public List<QuestionInfo> show(){
        List<QuestionInfo> list=new ArrayList<>();
        try {
            while (rs.next()) {
                QuestionInfo qs=new QuestionInfo();
                qs.setQuestionId(rs.getInt("questionId"));
                qs.setQuestion(rs.getString("question"));
                qs.setOptionA(rs.getString("optionA"));
                qs.setOptionB(rs.getString("optionB"));
                qs.setOptionC(rs.getString("optionC"));
                qs.setOptionD(rs.getString("optionD"));
                qs.setSubject(rs.getInt("subjectID"));
                qs.setAnswer(rs.getString("answer"));
                list.add(qs);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return list;
    }
    //查询所有试题
    @Override
    public List<QuestionInfo> showInfo() {
         rs=executeQuery("select * from question_info");
        return show();
    }
    //按科目查询试题
    @Override
    public List<QuestionInfo> showSubject(int num) {
        rs = executeQuery("select * from question_info where subjectID=?",num);
        return show();
    }
    //按题干模糊查询试题
    @Override
    public List<QuestionInfo> showDim(String question) {
        rs = executeQuery("select * from question_info where question like ?","%"+question+"%");
        return show();
    }
    //添加试题
    @Override
    public int add(QuestionInfo qs) {
        int i = executeUpdate("INSERT INTO `question`.`question_info`(`question`, `optionA`, `optionB`, `optionC`, `optionD`, `subjectID`, `answer`) VALUES (?, ?, ?, ?, ?, ?, ?);"
                ,qs.getQuestion(),qs.getOptionA(),qs.getOptionB(),qs.getOptionC(),qs.getOptionD(),qs.getSubject(),qs.getAnswer());
        return i;
    }
    //删除试题
    @Override
    public int delete(int id) {
        int i = executeUpdate("delete from `question`.`question_info` where questionId=?",id);
        return i;
    }
    //按试题编号查询试题
    @Override
    public List<QuestionInfo> showId(int id) {
        rs = executeQuery("select * from question_info where subjectID=?",id);
        return show();
    }
}

5、创建service包下业务逻辑层 QuestionManager类

import Question.dao.impl.QuestionInfoDaoImpl;
import Question.entity.QuestionInfo;
import java.util.List;
import java.util.Scanner;
public class QuestionManager {
    Scanner input=new Scanner(System.in);
    public int getInput(){
        while (!input.hasNextInt()) {
            System.out.print("输入错误,请重新输入:");
            input.next();
        }
        return input.nextInt();
    }
    QuestionInfoDaoImpl questionDaoImpl=new QuestionInfoDaoImpl();
    public void menu(){
        String sum=null;
        do {
            System.out.println("***************欢迎使用试题管理系统*********************");
            System.out.println("请选择操作(1、列出所有试题 2、按科目查询 3、按题干模糊查询 4、添加试题 5、删除试题 6、退出系统)");
            int num = input.nextInt();
            switch (num) {
                case 1:
                    showInfo();
                    break;
                case 2:
                    showId();
                    break;
                case 3:
                    showDim();
                    break;
                case 4:
                    add();
                    break;
                case 5:
                    delete();
                    break;
                case 6:
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入错误!");
                    break;
            }
            System.out.println("请问是否继续?");
            sum=input.next();
        }while (sum.equals("y"));
    }
    public void lists(List<QuestionInfo> list){
        for (QuestionInfo item:list) {
            System.out.println(item.getQuestionId()+"、"+item.getQuestion()+"\n"+item.getOptionA()
                    +"\n"+item.getOptionB()+"\n"+item.getOptionC()+"\n"+item.getOptionD()+"\n"+item.getAnswer());
        }
    }
    public void showInfo(){
        lists(new QuestionInfoDaoImpl().showInfo());
    }
    public void showSubject(){
        System.out.println("请输入科目:");
        int num=input.nextInt();
        lists(new QuestionInfoDaoImpl().showSubject(num));
    }
     public void showDim(){
         System.out.println("请输入题干:");
         String question=input.next();
         lists(new QuestionInfoDaoImpl().showDim(question));
     }
     public void add(){
         QuestionInfo qs=new QuestionInfo();
         System.out.println("请输入科目(1、Java 2、C# 3、JSP):");
         qs.setSubject(input.nextInt());
         System.out.println("请输入新的题干:");
         qs.setQuestion(input.next());
         System.out.println("请输入新的选项A:");
         qs.setOptionA(input.next());
         System.out.println("请输入新的选项B:");
         qs.setOptionB(input.next());
         System.out.println("请输入新的选项C:");
         qs.setOptionC(input.next());
         System.out.println("请输入新的选项D:");
         qs.setOptionD(input.next());
         System.out.println("请输入新的答案:");
         qs.setAnswer(input.next());
         if (new QuestionInfoDaoImpl().add(qs)>0) {
             System.out.println("新增成功!");
         }
     }
    public void delete(){
        System.out.println("请输入需要删除的试题编号:");
        int id=input.nextInt();
        if (new QuestionInfoDaoImpl().delete(id)>0) {
            System.out.println("删除成功!");
        }
    }
    public void showId(){
        System.out.println("请输入要查询的数据编号");
        int id=input.nextInt();
        lists(new QuestionInfoDaoImpl().showId(id));
    }
}

6、创建ui包 表示层 Main类

import Question.service.QuestionManager;

public class Main {
    public static void main(String[] args) {
        QuestionManager questionManager=new QuestionManager();
        questionManager.menu();
    }
}

最后运行Main方法即可完成试题管理系统啦~

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值