任务描述
本关任务:实现模拟数学考试,并计算数学成绩的功能。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现模拟数学考试,并计算数学成绩的功能,具体要求如下:
当用户选择考试科目时,获取键盘输入,实现 2 的功能;
当键盘输入的值为 2,首先输出:“欢迎参加数学考试,开始答卷”,然后输出 /root/math.txt 文件的内容;
之后输出:“请输入答案,答案之间用英文逗号分开”,获取用户输入的答案,调用 ExamManage 类的 mathExam(answers,name,pwd,users),将所需参数传入该方法中;
mathExam 方法携带 4 个参数,分别为:用户考试答案、用户名称、用户密码、用户数组,该方法实现了计算学生成绩的功能;
mathExam 方法中将用户所给答案按逗号切分,每道题为 5 分,总共有两道(题目答案分别为:C,A,注意忽略大小写),最后将该用户的数学成绩设置为本次考试所得值,存入用户数组中,并输出:“本次考试的分数为:xx”,保留 1 位小数。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧“测试结果”区查看具体的测试集详情。
测试输入:
1
sunfeng
123456
2
sunfeng
123456
2
a,a
3
3
预期输出:
线上考试系统
**********
1. 新用户注册
2. 用户登录
3. 退出系统
**********
请输入选择的操作:
请输入你要注册的用户名:
请输入你要注册的密码:
线上考试系统
**********
1. 新用户注册
2. 用户登录
3. 退出系统
**********
请输入选择的操作:
请输入你的用户名:
请输入你的密码:
选择考试科目
**********
1. 英语
2. 数学
3. 返回上一级菜单
4. 退出系统
5. 查询考试成绩
**********
请输入选择的操作:
欢迎参加数学考试,开始答卷
1. 求1+1的结果为:
A. 1 B. 0 C. 2 D. 以上都不正确
2. 下列选项中,哪个不属于偶数?
A. 1 B. 2 C. 0 D. 4
请输入答案,答案之间用英文逗号分开
本次考试的分数为:5.0
选择考试科目
**********
1. 英语
2. 数学
3. 返回上一级菜单
4. 退出系统
5. 查询考试成绩
**********
请输入选择的操作:
线上考试系统
**********
1. 新用户注册
2. 用户登录
3. 退出系统
**********
请输入选择的操作:
退出成功!
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
class User {
private String name;
private String pwd;
private double mathScore;
private double englishScore;
public User(String name, String pwd) {
this.name = name;
this.pwd = pwd;
this.mathScore = 0;
this.englishScore = 0;
}
public String getName() {
return name;
}
public String getPwd() {
return pwd;
}
public double getMathScore() {
return mathScore;
}
public double getEnglishScore() {
return englishScore;
}
public void setMathScore(double mathScore) {
this.mathScore = mathScore;
}
public void setEnglishScore(double englishScore) {
this.englishScore = englishScore;
}
}
class ExamManage {
// 注册用户
public void register(String name, String pwd, User[] users) {
for (int i = 0; i < users.length; i++) {
if (users[i] == null) {
users[i] = new User(name, pwd);
//System.out.println("注册成功!");
break;
}
}
}
// 用户登录
public boolean login(String name, String pwd, User[] users) {
for (User user : users) {
if (user!= null && user.getName().equals(name) && user.getPwd().equals(pwd)) {
return true;
}
}
return false;
}
// 英语考试
public void engExam(String answers, String name, String pwd, User[] users) {
String[] answerArray = answers.split(",");
double score = 0;
// 假设英语考试有两道题,正确答案分别为 A,B
String correctAnswer1 = "A";
String correctAnswer2 = "B";
if (answerArray.length >= 1 && answerArray[0].equals(correctAnswer1)) {
score += 5;
}
if (answerArray.length >= 2 && answerArray[1].equals(correctAnswer2)) {
score += 5;
}
for (User user : users) {
if (user!= null && user.getName().equals(name) && user.getPwd().equals(pwd)) {
user.setEnglishScore(score);
System.out.printf("本次考试的分数为:%.1f\n", score);
break;
}
}
}
// 数学考试
public void mathExam(String answers, String name, String pwd, User[] users) {
String[] answerArray = answers.split(",");
double score = 0;
// 假设数学考试有两道题,正确答案分别为 C,A
String correctAnswer1 = "C";
String correctAnswer2 = "A";
if (answerArray.length >= 1 && answerArray[0].equals(correctAnswer1)) {
score += 5;
}
if (answerArray.length >= 2 && answerArray[1].equals(correctAnswer2)) {
score += 5;
}
for (User user : users) {
if (user!= null && user.getName().equals(name) && user.getPwd().equals(pwd)) {
user.setMathScore(score);
System.out.printf("本次考试的分数为:%.1f\n", score);
break;
}
}
}
}
// 此类为整个通讯录的总控制,负责启动
public class MenuExam {
public static void main(String[] args) {
User[] users = new User[50]; // 创建一个对象数组,用于存放所有的用户信息
// 实例化 Scanner 对象
Scanner sc = new Scanner(System.in);
// 实例化 ExamManage 对象
ExamManage examManage = new ExamManage();
while (true) {
System.out.println("线上考试系统");
System.out.println("**********");
System.out.println("1. 新用户注册");
System.out.println("2. 用户登录");
System.out.println("3. 退出系统");
System.out.println("**********");
System.out.println("请输入选择的操作:");
// 获取键盘输入
String str = sc.next();
// 实现注册功能
if ("1".equals(str)) {
// 获取键盘输入的用户名
System.out.println("请输入你要注册的用户名:");
String name = sc.next();
// 获取键盘输入的密码
System.out.println("请输入你要注册的密码:");
String pwd = sc.next();
// 将参数传入 register 方法中
examManage.register(name, pwd, users);
} else if ("2".equals(str)) {
System.out.println("请输入你的用户名:");
String name = sc.next();
System.out.println("请输入你的密码:");
String pwd = sc.next();
boolean flag = examManage.login(name, pwd, users);
if (flag) {
while (true) {
System.out.println("选择考试科目");
System.out.println("**********");
System.out.println("1. 英语");
System.out.println("2. 数学");
System.out.println("3. 返回上一级菜单");
System.out.println("4. 退出系统");
System.out.println("5. 查询考试成绩");
System.out.println("**********");
System.out.println("请输入选择的操作:");
// 获取键盘输入
String s = sc.next();
if ("1".equals(s)) {
System.out.println("欢迎参加英语考试,开始答卷");
// 读取文件内容并打印出来
try {
BufferedReader in = new BufferedReader(new FileReader("/root/english.txt"));
String text;
while ((text = in.readLine())!= null) {
System.out.println(text);
}
System.out.println("请输入答案,答案之间用英文逗号分开");
// 获取键盘输入的答案,并将其转化为大写字母
String answers = sc.next().toUpperCase();
examManage.engExam(answers, name, pwd, users);
} catch (IOException e) {
e.printStackTrace();
}
} else if ("2".equals(s)) {
// 请在下面的 Begin-End 之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
System.out.println("欢迎参加数学考试,开始答卷");
// 读取文件内容并打印出来
try {
BufferedReader in = new BufferedReader(new FileReader("/root/math.txt"));
String text;
while ((text = in.readLine())!= null) {
System.out.println(text);
}
System.out.println("请输入答案,答案之间用英文逗号分开");
// 获取键盘输入的答案,并将其转化为大写字母
String answers = sc.next().toUpperCase();
examManage.mathExam(answers, name, pwd, users);
} catch (IOException e) {
e.printStackTrace();
}
/********** End **********/
} else if ("3".equals(s)) {
break;
} else if ("4".equals(s)) {
System.exit(0);
} else if ("5".equals(s)) {
// 查询考试成绩
for (User user : users) {
if (user!= null && user.getName().equals(name) && user.getPwd().equals(pwd)) {
System.out.printf("你的成绩为:%.1f,你的成绩为:%.1f\n", user.getMathScore(), user.getEnglishScore());
break;
}
}
}
}
} else {
System.out.println("用户名或密码错误,登录失败!");
}
} else if ("3".equals(str)) {
// 退出操作
System.out.println("退出成功!");
break;
} else {
System.out.println("选择错误!");
}
}
}
}