user.txt 存儲用戶信息 (ID 姓名 密碼),order.txt 存儲訂單信息 (ID 商品 狀態)。登錄用戶後查詢其訂單,購買操作更新狀態並持久化。
public class User {
private int id;
private String name;
private String password;
// getter/setter/toString
}
public class Order {
private int id;
private String item;
private char status; // 'A' 未購買, 'B' 已購買
// getter/setter/toString
}
public class DataManager {
private List userList = new ArrayList<>();
private List orderList = new ArrayList<>();
private final String USER_FILE = "user.txt";
private final String ORDER_FILE = "order.txt";
// 初始化加載
public void loadData() {
loadUsers();
loadOrders();
}
private void loadUsers() {
try (BufferedReader br = new BufferedReader(new FileReader(USER_FILE))) {
String line;
while ((line = br.readLine()) != null) {
String[] parts = line.split("\\s+");
if (parts.length >= 3) {
User u = new User();
u.setId(Integer.parseInt(parts[0]));
u.setName(parts[1]);
u.setPassword(parts[2]);
userList.add(u);
}
}
} catch (IOException e) { e.printStackTrace(); }
}
private void loadOrders() {
try (BufferedReader br = new BufferedReader(new FileReader(ORDER_FILE))) {
String line;
while ((line = br.readLine()) != null) {
String[] parts = line.split("\\s+");
if (parts.length >= 3) {
Order o = new Order();
o.setId(Integer.parseInt(parts[0]));
o.setItem(parts[1]);
o.setStatus(parts[2].charAt(0));
orderList.add(o);
}
}
} catch (IOException e) { e.printStackTrace(); }
}
// 查詢用戶訂單
public List getOrdersByUserId(int userId) {
return orderList.stream()
.filter(o -> o.getId() == userId)
.collect(Collectors.toList());
}
// 更新訂單狀態
public void updateOrderStatus(int orderId, char newStatus) {
for (Order o : orderList) {
if (o.getId() == orderId) {
o.setStatus(newStatus);
break;
}
}
saveOrders(); // 即時持久化
}
// 持久化訂單
private void saveOrders() {
try (PrintWriter pw = new PrintWriter(new FileWriter(ORDER_FILE))) {
for (Order o : orderList) {
pw.println(o.getId() + " " + o.getItem() + " " + o.getStatus());
}
} catch (IOException e) { e.printStackTrace(); }
}
// 用戶登錄驗證
public User login(int id, String password) {
return userList.stream()
.filter(u -> u.getId() == id && u.getPassword().equals(password))
.findFirst().orElse(null);
}
}
public class OrderService {
private DataManager dataManager = new DataManager();
public void init() { dataManager.loadData(); }
public User login(int userId, String password) {
return dataManager.login(userId, password);
}
public List getUserOrders(int userId) {
return dataManager.getOrdersByUserId(userId);
}
public void purchaseOrder(int orderId) {
dataManager.updateOrderStatus(orderId, 'B'); // 'B' 表示已購買
}
public void displayOrders(List orders) {
for (Order o : orders) {
System.out.println(o.getItem() + " " + o.getStatus());
}
}
}
public class Main {
public static void main(String[] args) {
OrderService service = new OrderService();
service.init();
Scanner scanner = new Scanner(System.in);
System.out.print("用戶ID: ");
int id = scanner.nextInt();
System.out.print("密碼: ");
String pwd = scanner.next();
User user = service.login(id, pwd);
if (user == null) {
System.out.println("登錄失敗");
return;
}
System.out.println("歡迎 " + user.getName());
List orders = service.getUserOrders(id);
service.displayOrders(orders);
System.out.print("輸入要購買的訂單ID (0退出): ");
while (scanner.hasNextInt()) {
int orderId = scanner.nextInt();
if (orderId == 0) break;
service.purchaseOrder(orderId);
System.out.println("購買成功,狀態已更新");
service.displayOrders(service.getUserOrders(id));
System.out.print("繼續購買訂單ID (0退出): ");
}
}
}
| 層次 | 職責 | 核心類 |
|---|---|---|
| 實體層 | 數據結構定義 | User, Order |
| 數據層 | 文件讀寫、緩存管理 | DataManager |
| 業務層 | 邏輯協調、狀態流轉 | OrderService |
| 表現層 | 用戶交互、輸入輸出 | Main |