Menu
package Food; import java.util.Objects; public class Menu implements Comparable<Menu> { private int id; private String foodName; private double price; public int getId() { return id; } public void setId(int num) { this.id = num; } public String getFoodName() { return foodName; } public void setFoodName(String foodName) { this.foodName = foodName; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public Menu(int num, String foodName, double price) { this.id = num; this.foodName = foodName; this.price = price; } @Override public String toString() { return id + "号:" + foodName + " " + price + "元"; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Menu menu = (Menu) o; return id == menu.id && Double.compare(menu.price, price) == 0 && Objects.equals(foodName, menu.foodName); } @Override public int hashCode() { return Objects.hash(id, foodName, price); } @Override public int compareTo(Menu o) { return this.getId() - o.getId(); } }
OrderFood
package Food; import java.io.*; import java.util.*; public class OrderFood { public static void main(String[] args) { List<Menu> menuList = new ArrayList<>(); Set<User> set = new HashSet<>(); List<HistoryMenu> historyMenus = new ArrayList<>(); BufferedReader bufferedReader = null; BufferedWriter bufferedWriter = null; readUsers(bufferedReader, set); readMenu(bufferedReader, menuList); Scanner scanner = new Scanner(System.in); while (true) { System.out.println("选择您需要的功能:"); System.out.println("1.登录 2.注册 3.退出"); set.clear(); readUsers(bufferedReader, set); menuList.clear(); readMenu(bufferedReader, menuList); int choice = scanner.nextInt(); switch (choice) { case 1: int count = 0; boolean flag1 = true; boolean flag2 = true; boolean n = true; boolean n1 = false; while (flag1) { System.out.println("请输入账号:"); String account = scanner.next(); System.out.println("请输入密码:"); String password = scanner.next(); for (User user3 : set) { if (user3.getAccount().equals(account) && user3.getPassword().equals(password)) { System.out.println("登录成功!"); n = false; if (user3.getAccount().equals("123") && user3.getPassword().equals("123")) { n1 = true; } break; } } if (n1) { System.out.println("您是管理员,选择您需要的功能:"); while (flag2) { System.out.println("1.添加用户 2.删除用户 3.添加菜品 4.查看用户" + " 5.修改密码 6.修改菜价 7.退出"); int index = scanner.nextInt(); switch (index) { case 1: System.out.println("请添加用户"); addUser(scanner, set, bufferedWriter); break; case 2: System.out.println("请输入要删除的账户名称"); String name = scanner.next(); for (User user1 : set) { if (user1.getAccount().equals(name)) { set.remove(user1); break; } } reWriteUser(bufferedWriter, set); System.out.println("删除成功"); break; case 3: int id = menuList.get(0).getId(); for (int i = 1; i < menuList.size(); i++) { int a = menuList.get(i).getId(); if (id < a) id = a; } System.out.println("请输入菜名"); String foodName = scanner.next(); System.out.println("请输入价格"); double price = scanner.nextDouble(); menuList.add(new Menu(++id, foodName, price)); reWriteMenu(bufferedWriter, menuList); System.out.println("添加菜品成功"); break; case 4: System.out.println("请输入要查看的用户名"); String name2 = scanner.next(); double price2 = 0; double price3 = 0; boolean q1 = true; boolean q2 = false; for (User user : set) { if (user.getAccount().equals(name2)) { q1 = false; break; } } for (HistoryMenu menu : historyMenus) { if (menu.getName().equals(name2)) { q2 = true; break; } } if (!q1) { if (!q2) System.out.println("该用户未曾点餐"); else { System.out.println(name2 + "点了"); for (HistoryMenu menu : historyMenus) { if (menu.getName().equals(name2)) { price2 = menu.getPrice() * menu.getCount(); if (menu.getFlag().equals("未结账")) { price3 += price2; } System.out.println(menu.getId() + "号菜" + menu.getCount() + "份共" + price2 + "元 " + menu.getFlag()); } } System.out.println("未结账的共" + price3 + "元"); } } else { System.out.println("不存在该用户"); } break; case 5: System.out.println("请输入用户名"); String name1 = scanner.next(); boolean b = true; String pwd1 = null; for (User user1 : set) { if (name1.equals(user1.getAccount())) { System.out.println("请输入要修改的密码"); pwd1 = scanner.next(); b = false; set.remove(user1); break; } } if (b) { System.out.println("不存在该用户"); } if (!b) { set.add(new User(name1, pwd1)); } reWriteUser(bufferedWriter, set); System.out.println("修改密码成功"); break; case 6: System.out.println("请输入要修改菜品的编号"); int num = scanner.nextInt(); String str = null; double price1 = 0; boolean b1 = true; for (Menu menu : menuList) { if (num == menu.getId()) { System.out.println("请输入要修改的价格"); price1 = scanner.nextDouble(); str = menu.getFoodName(); menuList.remove(num - 1); b1 = false; break; } } if (!b1) { menuList.add(new Menu(num, str, price1)); int count1 = menuList.size(); ArrayList<Menu> menuList1 = new ArrayList<>(); for (int i = 0; i < count1; i++) { for (Menu menu : menuList) { if (menu.getId() == i + 1) { menuList1.add(menu); break; } } } menuList.clear(); menuList = menuList1; System.out.println("修改成功"); } if (b1) { System.out.println("不存在该编号的菜品"); } reWriteMenu(bufferedWriter, menuList); break; case 7: flag1 = false; flag2 = false; break; } } } if (!n && !n1) { Map<Menu, Integer> orderFoodMap = new HashMap<>(); for (HistoryMenu menu : historyMenus) { if (menu.getName().equals(account) && menu.getFlag().equals("未结账")) { orderFoodMap.put(new Menu(menu.getId(), menu.getFoodName(), menu.getPrice()), menu.getCount()); } } boolean flag3 = true; while (flag3) { System.out.println("选择您需要的功能:"); System.out.println("1.点餐 2.查看账单 3.结账 4.退出"); int choice1 = scanner.nextInt(); switch (choice1) { case 1: foodMenu(menuList); while (true) { int num = scanner.nextInt(); if (num == 0) { break; } else { if (orderFoodMap.containsKey(menuList.get(num - 1))) { int m = orderFoodMap.get(menuList.get(num - 1)) + 1; orderFoodMap.put(menuList.get(num - 1), m); } else { orderFoodMap.put(menuList.get(num - 1), 1); } } } Set<Map.Entry<Menu, Integer>> set1 = orderFoodMap.entrySet(); for (Map.Entry<Menu, Integer> entry : set1) { String f = "未结账"; historyMenus.add(new HistoryMenu(account, entry.getKey().getId(), entry.getKey().getPrice(), entry.getValue(), f, entry.getKey().getFoodName())); } break; case 2: select(orderFoodMap); break; case 3: select(orderFoodMap); Set<Map.Entry<Menu, Integer>> set2 = orderFoodMap.entrySet(); for (Map.Entry<Menu, Integer> entry : set2) { for (HistoryMenu menu : historyMenus) { if (entry.getKey().getId() == menu.getId()) { menu.setFlag("已结账"); } } } orderFoodMap.clear(); System.out.println("已结账"); break; case 4: System.out.println("欢迎下次光临!"); flag3 = false; flag1 = false; break; } } } if (n) { System.out.println("登录失败!"); count++; if (count % 3 == 0) { System.out.println("请10秒钟后重试。"); long time = System.currentTimeMillis(); long now = 0; while ((now - time) / 1000 < 10) { now = System.currentTimeMillis(); } } } } break; case 2: addUser(scanner, set, bufferedWriter); break; case 3: return; } } } public static void foodMenu(List<Menu> menuList) { System.out.println("请输入编号确定您要点的菜品,输入0结束点餐。"); System.out.println("菜品信息如下:"); for (Menu menu : menuList) { System.out.println(menu.toString()); } } public static void select(Map<Menu, Integer> map) { System.out.println("您的账单如下"); double price = 0; Set<Map.Entry<Menu, Integer>> entrySet = map.entrySet(); for (Map.Entry<Menu, Integer> menuIntegerEntry : entrySet) { double price1 = menuIntegerEntry.getValue() * menuIntegerEntry.getKey().getPrice(); System.out.println(menuIntegerEntry.getValue() + "份" + menuIntegerEntry.getKey().getFoodName() + " 共" + price1 + "元。"); price += price1; } System.out.println("共" + price + "元。"); } public static void addUser(Scanner scanner, Set<User> set, BufferedWriter bufferedWriter) { System.out.println("请输入新账号:"); String account1 = scanner.next(); System.out.println("请输入新密码:"); String password1 = scanner.next(); User user1 = new User(account1, password1); boolean b = true; for (User user2 : set) { if (user2.getAccount().equals(user1.getAccount())) { System.out.println("该账号已存在。"); b = false; break; } } if (b) { set.add(user1); System.out.println("注册成功"); try { Writer writer = new FileWriter("src\\Food\\User.txt", true); bufferedWriter = new BufferedWriter(writer); bufferedWriter.write(user1.getAccount() + " " + user1.getPassword() + "\n"); } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedWriter != null) { try { bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public static void bufferedReaderClose(BufferedReader bufferedReader) { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void readUsers(BufferedReader bufferedReader, Set<User> set) { try { Reader reader = new FileReader("src\\Food\\User.txt"); bufferedReader = new BufferedReader(reader); String str; while ((str = bufferedReader.readLine()) != null) { int index = str.lastIndexOf(" "); set.add(new User(str.substring(0, index), str.substring(index + 1))); } } catch (Exception e) { e.printStackTrace(); } finally { bufferedReaderClose(bufferedReader); } } public static void readMenu(BufferedReader bufferedReader, List<Menu> menuList) { try { Reader reader = new FileReader("src\\Food\\Menu.txt"); bufferedReader = new BufferedReader(reader); String string; while ((string = bufferedReader.readLine()) != null) { int index1 = string.indexOf(" "); int index2 = string.lastIndexOf(" "); int id = Integer.parseInt(string.substring(0, index1)); double price = Double.parseDouble(string.substring(index2 + 1)); menuList.add(new Menu(id, string.substring(index1 + 1, index2), price)); } } catch (Exception e) { e.printStackTrace(); } finally { bufferedReaderClose(bufferedReader); } } public static void reWriteUser(BufferedWriter bufferedWriter, Set<User> set) { try { Writer writer = new FileWriter("src\\Food\\User.txt"); bufferedWriter = new BufferedWriter(writer); for (User user : set) { bufferedWriter.write(user.getAccount() + " " + user.getPassword()); bufferedWriter.newLine(); } } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedWriter != null) { try { bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void reWriteMenu(BufferedWriter bufferedWriter, List<Menu> menuList) { try { Writer writer = new FileWriter("src\\Food\\Menu.txt"); bufferedWriter = new BufferedWriter(writer); for (Menu menu : menuList) { bufferedWriter.write(menu.getId() + " " + menu.getFoodName() + " " + menu.getPrice()); bufferedWriter.newLine(); } } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedWriter != null) { try { bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
User
package Food; import java.util.Objects; public class User { private String account; private String password; public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User(String account, String password) { this.account = account; this.password = password; } public User() { } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(account, user.account) && Objects.equals(password, user.password); } @Override public int hashCode() { return Objects.hash(account, password); } @Override public String toString() { return "User{" + "account='" + account + '\'' + ", password='" + password + '\'' + '}'; } }
HistoryMenu
package Food; public class HistoryMenu { private String name; private int id; private double price; private int count; private String flag; private String foodName; public String getFoodName() { return foodName; } public void setFoodName(String foodName) { this.foodName = foodName; } public String getFlag() { return flag; } public void setFlag(String flag) { this.flag = flag; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public HistoryMenu(String name, int id, double price, int count, String flag, String foodName) { this.name = name; this.id = id; this.price = price; this.count = count; this.flag = flag; this.foodName = foodName; } public HistoryMenu() { } @Override public String toString() { return "HistoryMenu{" + "name='" + name + '\'' + ", id=" + id + ", price=" + price + '}'; } }
Menu.txt
1 甜甜花酿鸡 30.0 2 松鼠鱼 50.0 3 红烧排骨 40.0 4 溜肉段 35.0 5 咖喱鸡 35.0 6 小葱拌豆腐 20.0 7 四方和平 30.0
User.txt
123 123 zhangsan zhangsan 456 123 678 678 789 789