栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自动出题评卷

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自动出题评卷

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;

        }




    }
}

 

 有不懂的私信我 ,

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/719989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号