Java中的封装和继承思想,模拟考试阅卷系统

Java中的封装思想,模拟考试批卷系统


首先我们看一下题目要求:


定义考题类(Question)及其子类
完成考题类(Question),单选题(SingleChoice)和多选题(MultiChoice)是其子类
要求:
1)Question包含题干属性(text)
2)Question包含检测标准答案的方法 boolean check(int[] answers)
参数answers:用户提供的答案(注意:单选题只有一个答案)
3)单选题(SingleChoice)和多选题(MultiChoice)是Question的子类
MultiChoice包含属性:
选项:String[] options
多选标准答案:int[] answers
SingleChoice包含属性:
选项:String[] options
单选标准答案:int answers
4)在MultiChoice实现参数为(String text,String[] options,int[] answers)的构造方法:
参数text:题干
参数options:选项
参数answers:多选标准答案(正确选项的序号)
5)在SingleChoice实现参数为(String text,String[] options,int answers)的构造方法:
参数text:题干
参数options:选项
参数answers:单选标准答案(正确选项的序号)
6)在SingleChoice和MultiChoice类中重写Question类中的check方法
方法中提供具体的检查用户答案的逻辑

根据要求,我们用代码来实现它:

定义考题类(Question)包含检测标准答案的方法 boolean check(int[] answers)和题干属性(text):

public class Question {
	// 标题
		private String text;

		// 构造方法
		public Question() {

		}

		public Question(String text) {
			this.text = text;
		}

		public boolean check(int[] answers) {
			return false;
		}

		public boolean check(int answers) {
			return false;
		}

		// set方法
		public void setText(String text) {
			this.text = text;
		}

		// get方法
		public String getText() {
			return this.text;
		}


}

定义单选题(SingleChoice)类继承Question类,实现参数为(String text,String[] options,int answers)的构造方法:

/**
 * 单选题
 *
 */
public class SingleChoice extends Question {
	//选项
	private String[] options;
	//单选标准答案
	private int answers;

	//构造方法
	public SingleChoice() {
		
	}
	
	public SingleChoice(String text,String[] options, int answers) {
		super.setText(text);
		this.options = options;
		this.answers = answers;
	}

	//单选的check
	@Override
	public boolean check(int answers) {
		if(this.answers == answers) {
			return true;
		}
		return false;
	}
	
	//get方法
	public String[] getOptions() {
		return this.options;
	}

	public int getAnswers() {
		return this.answers;
	}
	
	//set方法
	public void setOptions(String[] options) {
		this.options = options;
	}
	
	public void setAnswers(int answers) {
		this.answers = answers;
	}
	
	
}

定义多选题 (MultiChoice)类继承Question类,并实现参数为(String text,String[] options,int[] answers)的构造方法:

/**
 * 多选类
 *
 */
public class MultiChoice extends Question {
	//选项
	private String[] options;
	//答案
	private int[] answers;

	//构造方法
	public MultiChoice() {
		
	}
	
	public MultiChoice(String text,String[] options, int[] multiAnswers) {
		super.setText(text);
		this.options = options;
		this.answers = multiAnswers;
	}

	//多选题的check
	@Override
	public boolean check(int[] answers) {//定义返回值为boolean类型的检查方法
				
		System.out.println(Arrays.toString(answers));
		int temp = 0;//定义一个标记
		//for循环遍历数组
		for(int i = 0;i < answers.length;i++) {
			//判断找到的值是否为正确答案
			if(answers[i] == this.answers[i]) {
				//计数器加一
				
				temp++;
			}
		}
		//如果是正确答案,返回true
		if(temp == this.answers.length) {
			return true;
		}//否则返回false
		return false;
	}
	
	public String[] getOptions() {
		return options;
	}

	public void setOptions(String[] options) {
		this.options = options;
	}

	public int[] getAnswers() {
		return answers;
	}

	public void setAnswers(int[] answers) {
		this.answers = answers;
	}
	
	
}

最后定义一个QuestionTest类,测试所述功能是否实现:

public class QuestionTest {
	public static void main(String[] args) {
		// 键盘扫面器
		Scanner key = new Scanner(System.in);
		// 单选题的题目,
		String singleText = "(单选题)草帽大船团最厉害的人物是:";
		// 单选题的选项
		String[] singleOptions = { "1.娜美酱", "2.索隆", "3.路飞", "4.山治", "5.罗宾酱" };
		// 单选题的答案
		int singleAnswers = 3;
		// 创建一个单选题的对象
		SingleChoice sc = new SingleChoice(singleText, singleOptions, singleAnswers);
		// 打印出题目
		System.out.println(singleText);
		// 打印出选项
		System.out.println(
				singleOptions[0] + "\t" + singleOptions[1] + "\t" + singleOptions[2] + "\t" + singleOptions[3]);
		// 让用户做答
		System.out.println("请作答:");
		// 判断用户的答案
		if (sc.check(key.nextInt())) {
			System.out.println("恭喜你回答正确!");
		} else {
			System.out.println("很遗憾,回答错误!单选题的正确答案为:" + singleAnswers);
		}

		System.out.println("========================================================================================");

		/*
		 * 创建一个多选题
		 */

		// 多选题的题目,定义一个多选题题干
		String multiText = "(多选题)下列人物属于草帽大船团队长的是:";
		// 多选题的选项,定义一个多选题选项
		String[] multiOptions = { "1.雷诺", "	2.巴托洛米奥", "3.卡文迪许", "4.特拉法尔加•D•瓦铁尔•罗", "	5.鹰眼米霍克" };
		// 多选题的答案
		int[] multiAnswers = {123};
		// 创建一个多选题对象
		MultiChoice mc = new MultiChoice(multiText, multiOptions, multiAnswers);
		// 打印题目
		System.out.println(multiText);
		// 打印选项
		System.out.println(multiOptions[0] + "\t" + multiOptions[1] + "\t" + multiOptions[2] + "\t" + multiOptions[3]
				+ "\t" + multiOptions[4] + "\t");
		// 让用户做答
		System.out.println("请作答:");	
		//接收用户的答案
		int[] ans= new int[1];
		ans[0]=key.nextInt();
		// 判断用户的答案
	
		if(ans[0]==multiAnswers[0]) {
			System.out.println("恭喜你回答正确!");
			
		}else {
			System.out.println("很遗憾,回答错误!多选题的正确答案为:" + Arrays.toString(multiAnswers));
		}

		System.out.println("========================================================================================");
	}
}


我们来看看最终效果图:


在这里插入图片描述
今日分享就到这儿了,希望对正在学习Java的你有所帮助!喜欢的朋友们可以私信我,咱们一起探讨Java的学习方法!
在这里插入图片描述

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值