试题管理系统java控制台版

总的就是这样

代码如下 

package com.pojo;

/*
1	questionId	试题编号 int          主键	  自增列
2	question	题干	nvarchar	300	非空
3	optionA	选项A	nvarchar	300	非空
4	optionB	选项B	nvarchar	300	非空
5	optionC	选项C	nvarchar	300	非空
6	optionD	选项D	nvarchar	300	非空
7	subject	科目	int		非空	1代表Java、2代表C#、3代表JSP
8	answer	正确答案	nvarchar	10	非空

使用工厂方法
 */

public class QuestionInfo {

    private int questionId;
    private String question;
    private String optionA;
    private String optionB;
    private String optionC;
    private String optionD;
    private int subject;
    private String answer;

    public QuestionInfo() {
    }

    public QuestionInfo(String question, String optionA, String optionB, String optionC, String optionD, int subject, String answer) {
        this.question = question;
        this.optionA = optionA;
        this.optionB = optionB;
        this.optionC = optionC;
        this.optionD = optionD;
        this.subject = subject;
        this.answer = answer;
    }

    public int getQuestionId() {
        return questionId;
    }

    public void setQuestionId(int questionId) {
        this.questionId = questionId;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.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;
    }


}
package com.Dao;

import com.pojo.QuestionInfo;

import java.util.List;

public interface QuestionInfoDao {

    boolean insert(QuestionInfo q);

    boolean deleteById(int id);

    List<QuestionInfo> getQuestionBySub(int sub);

    List<QuestionInfo> getAll();

    List<QuestionInfo> getQuestoinByQ(String s);

}
package com.Dao.impl;

import com.Dao.QuestionInfoDao;
import com.Util.JDBCUtil;
import com.pojo.QuestionInfo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class QuestionInfoDaoImpl implements QuestionInfoDao {
    private Connection conn= JDBCUtil.getCt();
    private PreparedStatement pst = null;

    @Override
    public boolean insert(QuestionInfo q) {
        String sql = "insert into tb_question(question,optionA,optionB,optionC,optionD,subject,answer) values(?,?,?,?,?,?,?)";
        try {
            pst=conn.prepareStatement(sql);
            pst.setString(1,q.getQuestion());
            pst.setString(2,q.getOptionA());
            pst.setString(3,q.getOptionB());
            pst.setString(4,q.getOptionC());
            pst.setString(5,q.getOptionD());
            pst.setInt(6,q.getSubject());
            pst.setString(7,q.getAnswer());
            int i = pst.executeUpdate();
            if (i>0){
                return true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean deleteById(int id) {
        String sql ="delete from tb_question where questionId = ?";
        try {
            pst=conn.prepareStatement(sql);
            pst.setInt(1,id);
            int i = pst.executeUpdate();
            if (i>0){
                return true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return false;
    }

    @Override
    public List<QuestionInfo> getQuestionBySub(int sub) {
        String sql = "select * from tb_question where subject=?";
        try {
            pst=conn.prepareStatement(sql);
            pst.setInt(1,sub);
            ResultSet rs = pst.executeQuery();
            List<QuestionInfo> list = new ArrayList<>();
            while (rs.next()){
                QuestionInfo q = new QuestionInfo();
                q.setQuestionId(rs.getInt("questionId"));
                q.setQuestion(rs.getString("question"));
                q.setOptionA(rs.getString("optionA"));
                q.setOptionB(rs.getString("optionB"));
                q.setOptionC(rs.getString("optionC"));
                q.setOptionD(rs.getString("optionD"));
                q.setSubject(rs.getInt("subject"));
                q.setAnswer(rs.getString("answer"));
                list.add(q);
            }
            return list;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public List<QuestionInfo> getAll() {
        String sql = "select * from tb_question";
        List<QuestionInfo> list = new ArrayList<>();
        try {
            pst=conn.prepareStatement(sql);
            ResultSet rs = pst.executeQuery();
            while (rs.next()){
                QuestionInfo q = new QuestionInfo();
                q.setQuestionId(rs.getInt("questionId"));
                q.setQuestion(rs.getString("question"));
                q.setOptionA(rs.getString("optionA"));
                q.setOptionB(rs.getString("optionB"));
                q.setOptionC(rs.getString("optionC"));
                q.setOptionD(rs.getString("optionD"));
                q.setSubject(rs.getInt("subject"));
                q.setAnswer(rs.getString("answer"));
                list.add(q);
            }
            return list;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public  List<QuestionInfo> getQuestoinByQ(String s) {
        String sql = "select * from tb_question where question like '%"+s+"%'";
        try {
            pst=conn.prepareStatement(sql);
            ResultSet rs = pst.executeQuery();
            List<QuestionInfo> list = new ArrayList<>();
            while (rs.next()){
                QuestionInfo q = new QuestionInfo();
                q.setQuestionId(rs.getInt("questionId"));
                q.setQuestion(rs.getString("question"));
                q.setOptionA(rs.getString("optionA"));
                q.setOptionB(rs.getString("optionB"));
                q.setOptionC(rs.getString("optionC"));
                q.setOptionD(rs.getString("optionD"));
                q.setSubject(rs.getInt("subject"));
                q.setAnswer(rs.getString("answer"));
                list.add(q);
            }
            return list;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}
package com.Factorty;

import com.Dao.QuestionInfoDao;
import com.Dao.impl.QuestionInfoDaoImpl;
import com.Service.QuestionService;
import com.Service.impl.QuestionServiceImpl;

public class Factory {
    public static QuestionService getQS(){
        return new QuestionServiceImpl();
    }

    public static QuestionInfoDao getQD(){
        return new QuestionInfoDaoImpl();
    }
}

 

package com.Service;

import com.pojo.QuestionInfo;

import java.util.List;

public interface QuestionService {

    void getAll();

    void insert();

    void getQuesByQues();

    void getQuesBySub();

    void deleteQById();

}
package com.Service.impl;

import com.Dao.QuestionInfoDao;
import com.Factorty.Factory;
import com.Service.QuestionService;
import com.pojo.QuestionInfo;

import java.util.List;
import java.util.Scanner;

public class QuestionServiceImpl implements QuestionService {
    Scanner input = new Scanner(System.in);
    QuestionInfoDao dao= Factory.getQD();

    //列出所有试题
    @Override
    public void getAll() {
        List<QuestionInfo> all = dao.getAll();
        for (QuestionInfo q : all) {
            showQues(q);
        }
    }

    //显示试题的格式
    public void showQues(QuestionInfo q){
        System.out.println(q.getQuestionId()+"、"+q.getQuestion());
        System.out.println("\t选项A:"+q.getOptionA());
        System.out.println("\t选项B:"+q.getOptionB());
        System.out.println("\t选项C:"+q.getOptionC());
        System.out.println("\t选项D:"+q.getOptionD());
        System.out.println("\t答案:"+q.getAnswer());
    }

    //插入试题
    @Override
    public void insert() {
        System.out.print("请选择科目:(1.Java   2.C#    3.JSP)");
        int sub = input.nextInt();
        System.out.print("请输入新的题干:");
        String question = input.next();
        System.out.print("请输入新的选项A:");
        String a = input.next();
        System.out.print("请输入新的选项B:");
        String b = input.next();
        System.out.print("请输入新的选项C:");
        String c = input.next();
        System.out.print("请输入新的选项D:");
        String d = input.next();
        System.out.print("请输入新的答案:");
        String answer = input.next();
        if (dao.insert(new QuestionInfo(question,a,b,c,d,sub,answer))){
            System.out.println("添加成功!");
        }else {
            System.out.println("添加失败!");
        }
    }

    //通过题干查询
    @Override
    public void getQuesByQues() {
        System.out.print("请输入题干:");
        String ques = input.next();
        List<QuestionInfo> questoinByQ = dao.getQuestoinByQ(ques);
        if (questoinByQ == null||questoinByQ.isEmpty()){
            System.out.println("暂无数据!");
            return;
        }
        for (QuestionInfo q : questoinByQ) {
            showQues(q);
        }
    }

    //通过科目显示试题
    @Override
    public void getQuesBySub() {
        System.out.print("请选择科目:(1.Java   2.C#    3.JSP)");
        int sub = input.nextInt();
        List<QuestionInfo> questionBySub = dao.getQuestionBySub(sub);
        if (questionBySub == null||questionBySub.isEmpty()){
            System.out.println("暂无数据!");
            return;
        }
        for (QuestionInfo questionInfo : questionBySub) {
            showQues(questionInfo);
        }
    }

    //通过试题编号删除试题
    @Override
    public void deleteQById() {
        System.out.print("请输入要删除的试题编号:");
        int id = input.nextInt();
        while (!dao.deleteById(id)){
            System.out.println("对不起,没有要删除的编号,请重新输入!");
            System.out.print("请输入要删除的试题编号:");
            id = input.nextInt();
        }
        System.out.println("删除成功!");
        }
    }

package com.Util;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class JDBCUtil {
    private static final String DRIVER="com.mysql.cj.jdbc.Driver";
    private static final String URL="jdbc:mysql://localhost:3306/sys?serverTimezone=GMT%2B8";
    private static final String USER="root";
    private static final String PASSWORD="654321";

    private static Connection ct =null;
    private static PreparedStatement ps;
    private static ResultSet rs;

    public static Connection getCt(){
        try {
            Class.forName(DRIVER);
            ct= DriverManager.getConnection(URL,USER,PASSWORD);
            return ct;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

}
package com;

import com.Factorty.Factory;

import java.util.Scanner;

public class Main {
    Scanner input = new Scanner(System.in);

    static {
        System.out.println("****************欢迎使用试题管理系统***************\n");
    }
    public void ShowMenu(){
        System.out.print("请选择操作(1.列出所有试题 2.按科目查询  3.按题干模糊查询   4.添加试题  5.删除试题  6.退出系统)");
        int choose = input.nextInt();
        switch (choose){
            case 1:
                Factory.getQS().getAll();
                ShowMenu();
                break;
            case 2:
                Factory.getQS().getQuesBySub();
                ShowMenu();
                break;
            case 3:
                Factory.getQS().getQuesByQues();
                ShowMenu();
                break;
            case 4:
                Factory.getQS().insert();
                ShowMenu();
                break;
            case 5:
                Factory.getQS().deleteQById();
                ShowMenu();
                break;
            case 6:
                Exit();
            default:
                System.out.println("没有这个操作!");
                ShowMenu();
        }
    }

    public void Exit(){
        System.out.println("感谢使用!");
        System.exit(0);
    }

    public static void main(String[] args) {
        new Main().ShowMenu();
    }


}

数据库语句那里可以写简便点的,但是我JDBCUtil嫌麻烦没写就只能这样了,如果JDBCUtil写了会少些很多,比如像这样

 一个方法写三行

JDBCUti代码

package Util;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

    public class JDBCUtil {
        static Properties properties = new Properties();
        //加载驱动
        static {
            InputStream resourceAsStream = JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties");
            try {
                properties.load(resourceAsStream);
                Class.forName(properties.getProperty("driverClass"));

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //获取连接对象
        public static Connection getConnection() throws SQLException {
            return DriverManager.getConnection(properties.getProperty("url"),properties.getProperty("username"),properties.getProperty("password"));
        }



        public static void close(ResultSet rs, Connection con, PreparedStatement ps){
            try {
                if (rs!=null){
                    rs.close();
                }
                if (con!=null){
                    con.close();
                }
                if (ps!=null){
                    ps.close();
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    //增删改的方法
    public static int executeUpdate(String sql,Object... par){
        Connection con=null;
        PreparedStatement ps=null;
        try {
            con=JDBCUtil.getConnection();
            ps=con.prepareStatement(sql);
            if (par !=null && par.length>0){
                for (int i = 0; i < par.length; i++) {
                    ps.setObject(i+1,par[i]);
                }
            }
            return ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.close(null,con,ps);
        }
        return 0;
    }


    //解析Resultset的数据
    public static <T> List<T> parseResult(ResultSet rs,Class<T> tClass) throws SQLException, IllegalAccessException, InstantiationException {
        List<T> list = new ArrayList<>();

        if (rs == null){
            return null;
        }
        //获取到了T类型的数据
        while (rs.next()){
            //存储获取到的一行数据的对象
            T t = tClass.newInstance();
            //获取到这个类的所有属性
            Field[] fields = tClass.getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                //通过rs.getObject里填field.getName获取列名(前提是属性名和数据库的列名一致)
                field.set(t,rs.getObject(field.getName()));
            }
            list.add(t);
        }
        return list;
    }

    /*
    查询
    通过主键查询,传入的参数有多个,不确定,数组类型。然后返回的是一个数组对象
     */

    public static  <T> List<T> executeQuery(String sql , Class<T> tClass,Object... params){
        Connection con=null;
        PreparedStatement ps=null;

        ResultSet rs = null;
        try {
            con=JDBCUtil.getConnection();
            ps=con.prepareStatement(sql);
            if (params !=null && params.length>0){
                for (int i = 0; i < params.length; i++) {
                    ps.setObject(i+1,params[i]);
                }
            }
            rs=ps.executeQuery();
            return JDBCUtil.parseResult(rs,tClass);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(rs,con,ps);
        }
        return null;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值