Java点餐系统

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值