首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java文件數據關聯實現:User與Order文本文件讀取、登錄查詢、狀態更新完整方案

     編輯:程式設計綜合問答

需求分析

user.txt 存儲用戶信息 (ID 姓名 密碼),order.txt 存儲訂單信息 (ID 商品 狀態)。登錄用戶後查詢其訂單,購買操作更新狀態並持久化。

核心實現方案

1. 實體類設計


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
}

2. 數據訪問層 (DAO)


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);
    }
}

3. 業務邏輯層


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());
        }
    }
}

4. 主程序入口


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

擴展建議

  • 引入資源池管理文件句柄
  • 使用數據庫 (SQLite/H2) 替代文本文件
  • 添加事務機制保證數據一致性
  • 實現緩存失效策略 (文件修改時間檢查)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved