完成四则运算登陆模块,记录用户的四则运算历史得分,实现查询历史得分,使用 Java 序列化和反序列化进行持久化存储学生信息和得分情况,完整代码
时间: 2024-03-14 09:45:26 浏览: 26
好的,以下是一个基本的实现代码,仅供参考:
User.java(用户类)
```java
import java.io.Serializable;
public class User implements Serializable {
private String username; // 用户名
private String password; // 密码
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
```
Score.java(得分类)
```java
import java.io.Serializable;
import java.util.Date;
public class Score implements Serializable {
private int id; // 序号
private int times; // 第几次得分
private int score; // 得分
private Date date; // 得分时间
public Score(int id, int times, int score, Date date) {
this.id = id;
this.times = times;
this.score = score;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getTimes() {
return times;
}
public void setTimes(int times) {
this.times = times;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
```
Main.java(主函数)
```java
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
public class Main {
private static List<User> users = new ArrayList<>(); // 用户列表
private static List<List<Score>> scores = new ArrayList<>(); // 得分列表
private static final String FILE_USER = "user.dat"; // 用户信息存储文件
private static final String FILE_SCORE = "score.dat"; // 得分信息存储文件
public static void main(String[] args) {
load(); // 加载用户信息和得分信息
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("欢迎使用四则运算系统!");
System.out.println("1. 登录");
System.out.println("2. 注册");
System.out.println("3. 退出");
int choice = scanner.nextInt();
scanner.nextLine(); // 读取换行符
switch (choice) {
case 1:
login(scanner);
break;
case 2:
register(scanner);
break;
case 3:
save(); // 保存用户信息和得分信息
System.out.println("谢谢使用!");
System.exit(0);
default:
System.out.println("输入有误,请重新输入!");
break;
}
}
}
/**
* 登录
*
* @param scanner 输入流
*/
private static void login(Scanner scanner) {
System.out.println("请输入用户名:");
String username = scanner.nextLine();
System.out.println("请输入密码:");
String password = scanner.nextLine();
boolean flag = false; // 是否登录成功的标志
for (User user : users) {
if (user.getUsername().equals(username) && user.getPassword().equals(password)) {
flag = true;
System.out.println("登录成功!");
int index = users.indexOf(user);
List<Score> userScores = scores.get(index);
while (true) {
System.out.println("请选择:");
System.out.println("1. 开始四则运算");
System.out.println("2. 查询历史得分");
System.out.println("3. 退出");
int choice = scanner.nextInt();
scanner.nextLine(); // 读取换行符
switch (choice) {
case 1:
int score = calc(scanner);
userScores.add(new Score(userScores.size() + 1, userScores.size() + 1, score, new Date()));
System.out.println("得分为:" + score);
break;
case 2:
queryScores(userScores);
break;
case 3:
System.out.println("退出成功!");
save(); // 保存用户信息和得分信息
return;
default:
System.out.println("输入有误,请重新输入!");
break;
}
}
}
}
if (!flag) {
System.out.println("用户名或密码错误!");
}
}
/**
* 注册
*
* @param scanner 输入流
*/
private static void register(Scanner scanner) {
System.out.println("请输入用户名:");
String username = scanner.nextLine();
System.out.println("请输入密码:");
String password = scanner.nextLine();
User user = new User(username, password);
users.add(user);
scores.add(new ArrayList<>());
System.out.println("注册成功!");
}
/**
* 进行四则运算
*
* @param scanner 输入流
* @return 得分
*/
private static int calc(Scanner scanner) {
// TODO: 进行四则运算
return 90;
}
/**
* 查询历史得分
*
* @param userScores 用户得分列表
*/
private static void queryScores(List<Score> userScores) {
if (userScores.size() == 0) {
System.out.println("暂无历史得分记录!");
return;
}
System.out.println("历史得分记录如下:");
for (Score score : userScores) {
System.out.println("序号:" + score.getId() + ",第几次:" + score.getTimes() + ",得分:" + score.getScore() + ",得分时间:" + score.getDate());
}
}
/**
* 加载用户信息和得分信息
*/
private static void load() {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_USER))) {
users = (List<User>) ois.readObject();
} catch (FileNotFoundException e) {
System.out.println("未找到用户信息文件,将创建新文件!");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_SCORE))) {
scores = (List<List<Score>>) ois.readObject();
} catch (FileNotFoundException e) {
System.out.println("未找到得分信息文件,将创建新文件!");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 保存用户信息和得分信息
*/
private static void save() {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_USER))) {
oos.writeObject(users);
} catch (IOException e) {
e.printStackTrace();
}
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_SCORE))) {
oos.writeObject(scores);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
需要注意的是,在这个示例代码中,我们只是简单地实现了一个模拟四则运算的过程,并没有真正进行四则运算的计算。如果需要实现具体的四则运算逻辑,请根据实际需求进行修改。