开发基于控制台的试题信息管理系统。具体要求如下:
(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方法即可完成试题管理系统啦~