我的任务是使用 I/O 流和数据结构在 Java 中创建一个小型的、菜单驱动的银行系统。系统将为用户提供查看所有帐户、删除帐户和退出程序的选项。
主要功能涉及使用序列化的 Account 类通过 ObjectOutputStream 将帐户信息存储在文件中。当应用程序关闭时,所有帐户都存储在该文件中。重新启动后,所有帐户都会重新加载到 HashMap 中。
我担心的是,在Account类中使用静态变量自动生成帐号可能会导致程序重新加载时出现帐号冲突。我正在寻求有关如何避免此问题并管理 ObjectOutputStream 以正确处理文件的建议。
我的账户类别:
class Account implements Serializable{
private String Name;
private String Type;
private String sex;
private String DOB;
private String accNo="ACC1025";
static int id=0;
Account(String n,String t,String s,String dob){
Name=n;
Type=t;
sex=s;
DOB=dob;
accNo=acc+id;
id++;
}
public String getAccNo() {
return accNo;
}
public String toString(){
return "\n"+accNo+"\n"+Name+"\n"+Type+"\n"+sex+"\n"+DOB;
}
}
您可以实现以下代码。
public class IDManager implements Serializable {
private int lastAccountID = -1;
public int createAccountID() {
lastAccountID++;
File serializedManager = new File("idManager.ser");
try {
serializedManager.createNewFile(); // Creates idManager.ser if it doesn't exist
new ObjectOutputStream(new FileOutputStream(serializedManager)).writeObject(idManager); // Save the current state of iDManager
}
catch (IOException e) {
e.printStackTrace();
}
return lastAccountID;
}
}
这是一个非常基本的代码文件,但我们所做的只是保存最后的AccountID,每当您创建新帐户时,您都可以使用
createAccountID
来检索帐户ID。
这是一个简单的程序来演示。
public class Main {
static IDManager idManager = new IDManager();
public static void main(String[] args) {
File serializedManager = new File("idManager.ser");
if(serializedManager.exists()) {
try {
idManager = (Main.IDManager) new ObjectInputStream(new FileInputStream(serializedManager)).readObject();
}
catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
Scanner sc = new Scanner(System.in);
System.out.println("Use (C) to create an account");
String input = sc.nextLine();
do {
if(input.equalsIgnoreCase("c")) {
System.out.println("Created Account - " + new Account("Lobster Man", "Savings", "Male", "30/2/1900"));
}
input = sc.nextLine();
} while(!input.equalsIgnoreCase("quit"));
}
static class IDManager implements Serializable {
private int lastAccountID = -1;
public int createAccountID() {
lastAccountID++;
File serializedManager = new File("idManager.ser");
try {
serializedManager.createNewFile();
new ObjectOutputStream(new FileOutputStream(serializedManager)).writeObject(idManager);
}
catch (IOException e) {
e.printStackTrace();
}
return lastAccountID;
}
}
static class Account implements Serializable {
private String name;
private String type;
private String sex;
private String DOB;
private String accNo;
Account(String n, String t, String s, String dob) {
name = n;
type = t;
sex = s;
DOB = dob;
accNo = "ACC" + Main.idManager.createAccountID();
}
public String getAccNo() {
return accNo;
}
public String toString() {
return "\n" + accNo + "\n" + name + "\n" + type + "\n" + sex + "\n" + DOB;
}
}
}