1、老师能对题库进行增、删、改、查、的操作。
2、学生进入后自动出题,评卷给出总分。
通过集合和序列化进行题目的保存。
1、题库
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class Topic implements Serializable {//不实现Serializable接口会报错
private String topic;//题目
private String options ;//选项
private String answer;//正确答案
private String answer1=null;//客户选择的答案
private int score=1;//老师可以设置该题分值分值
public Topic() {
}
public Topic(String topic, String options, String answer) {
this.topic = topic;
this.options = options;
this.answer = answer;
}
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
public String getOptions() {
return options;
}
public void setOptions(String options) {
this.options = options;
}
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
public String getAnswer1() {
return answer1;
}
public void setAnswer1(String answer1) {
this.answer1 = answer1;
}
public void setScore(int score) {
this.score = score;
}
public String toString() {//输出题目,选项。
return
topic+"n"+options+"n"+"你的答案:"+answer1;
}
public int judgement(){//判断答案是否正确
if (answer==answer1){
return score;
}else {
return 0;
}
}
}
class QuestionBank implements Serializable{//题目库
private static final long serialVersionUID = -5296599332218141642L;//防止反序列化出错
List list=new ArrayList();
public void add(Topic topic1){//添加
list.add(topic1);
}
public void Delete(int i){//删除指定的题目
list.remove(i);
}
public String toSing(int i){//输出指定的题目,选项。
return list.get(i).toString();
}
public int len(){//获取题库中有多少题目。提供后续生成试卷。
return list.size();
}
public int Marking(int[] x){//计算分数。其中x是试卷题号共100提
int x1=0;//分数
for (int s:x){
x1=x1+list.get(s).judgement();
}
return x1;
}
public void write(int i,String answer1){//保存考生的答案
list.get(i).setAnswer1(answer1);
}
}
2、一些辅助功能(文件的读取保存)
import java.io.*;
import java.util.Scanner;
public class Save {//输入题目
private QuestionBank qb=new QuestionBank();
File file = new File("F:\test\test6\test.ccc");
public QuestionBank questionBank(){
input();
return qb;
}
public void input() {//读取题目
try {
InputStream out=new FileInputStream(file);
BufferedInputStream buf=new BufferedInputStream(out);
ObjectInputStream obj=new ObjectInputStream(buf);
qb=(QuestionBank) obj.readObject();
obj.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void output(){
try {
OutputStream out=new FileOutputStream(file);
BufferedOutputStream bout=new BufferedOutputStream(out);
ObjectOutputStream oout=new ObjectOutputStream(out);
oout.writeObject(qb);
oout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void SaveTopic() {
Scanner input = new Scanner(System.in);
System.out.println("输入题目(不带题号)");
String topic1 = input.next();
System.out.println("输入选项(若判断提正确Y,错误N。)");
String options = input.next();
System.out.println("输入正确答案");
String answer = input.next();
//此方法提供随机生成题目和选项
if (topic1 != null && options != null & answer != null) {
Topic topic = new Topic(topic1, options, answer);
qb.add(topic);
}
output();
}
}
3、学生考试的具体实现
import java.util.Random;
import java.util.Scanner;
public class business {//业务
QuestionBank qb =new Save().questionBank();
Scanner input=new Scanner(System.in);
int[] i1=new int[100];//试卷随机抽取的题号
int i3=0;//当前所作题目在i1的位置
public void circulate() {//实现循环答题
while (true) {
int i4 = input.nextInt();
if (i4 != 1 && i4 != 2) {//防止乱输入
System.out.println("输入错误。请继续答题");
extract();
}
switch (i4) {
case 1:
if (i3 != 0) {
i3--;
extract();
} else {
System.out.println("这是第一题");
extract();
}
break;
case 2:
if (i3 != 100) {
i3++;
extract();
} else {
System.out.println("这是最后一题题");
LastQuestion();
}
break;
}
}
}
public void extract(){//读取题目并且保存作的答案
System.out.println("选择题输入对应的ABCD即可。判断题则正确输入Y,错误输入N。");
System.out.println("第"+i3+"题、 "+qb.toSing(i1[i3]));
System.out.println("请输入答案");
String answer1=input.next();
qb.write(i3,answer1);
System.out.println("1、上一题。2、下一题");
}
public void shuzu(){//产生题号
Random random=new Random();
for (int i=0;i<100;i++){
i1[i]= random.nextInt(qb.len());
}
//查看题目号
}
public void LastQuestion(){//交卷和试卷阅览
System.out.println("做题结束"+"n"+"1、交卷。2、总览");
int i5=input.nextInt();
if (i5!=1 && i5!=2){
System.out.println("输入错误");
LastQuestion();
}
switch (i5){
case 1:
System.out.println("你的得分是:"+qb.Marking(i1));
return;
case 2:
for (int s:i1){
System.out.println(qb.toSing(s));
}
LastQuestion();
}
}
}
4、老师操作的饿具体实现类
import java.util.Scanner;
public class TopicManagement {//题目管理
Save save=new Save();
Scanner input=new Scanner(System.in);
private void add(){//新增,新增是之前写的所以现在直接调用。
save.SaveTopic();
}
private void del(){//删除指定的
QuestionBank qb=new QuestionBank();
System.out.println("请输入需要删除的内容");
int i=input.nextInt();
int i1=qb.len();
if (i<=i1){
qb.Delete(i);
}else {
System.out.println("没有这个题目,请确认");
}
}
private void revise(){//修改指定的
del();
add();
}
private void Inquire(){//查询
QuestionBank qb=new QuestionBank();
System.out.println("请输入查找的题号");
System.out.println("请输入需要删除的内容");
int i=input.nextInt();
int i1=qb.len();
if (i<=i1){
qb.toSing(i);
}else {
System.out.println("没有这个题目,请确认");
}
}
public void choose(){
while (true){
System.out.println("请选择。新增:1、删除:2、修改:3、查询:4、退出:5、");
int i=input.nextInt();
if (!(i>0 && i<6)){
System.out.println("输入错误");
choose();
}
switch (i){
case 1:add();break;
case 2:del();break;
case 3:revise();break;
case 4:Inquire();break;
case 5:return;
}
}
}
}
5、主方法的调用
import java.util.Scanner;
public class mmm {//主方法的调用
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("老师:1。学生:2.");
int i=input.nextInt();
if (i!=1 && i!=2){
System.out.println("输入错误");
return;
}
switch (i){
case 1:
TopicManagement t=new TopicManagement();
Save save=new Save();
t.choose();
save.output();//保存题目
break;
case 2:
System.out.println("开始考试");
business business=new business();
business.shuzu();//产生题号
business.extract();//输出第一题
business.circulate();//进入循坏
break;
}
}
}
有不懂的私信我 ,



