源码如下

第一次课设

package com.BigDate1421_Dduo.JavaBean;

import com.BigDate1421_Dduo.Takeout.Choose5_Order;

import java.util.stream.Collectors;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//这个JavaBean类是食品
public class Food {

    private String name;//名称
    private int price;  //价格
    private String score;//评分
    private String foodSpace;//产地
    public Food() {
    }

    public Food(String name, int price, String score, String foodSpace) {
        this.name = name;
        this.price = price;
        this.score = score;
        this.foodSpace = foodSpace;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return price
     */
    public int getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(int price) {
        this.price = price;
    }

    /**
     * 获取
     * @return score
     */
    public String getScore() {
        return score;
    }

    /**
     * 设置
     * @param score
     */
    public void setScore(String score) {
        this.score = score;
    }

    /**
     * 获取
     * @return foodSpace
     */
    public String getFoodSpace() {
        return foodSpace;
    }

    /**
     * 设置
     * @param foodSpace
     */
    public void setFoodSpace(String foodSpace) {
        this.foodSpace = foodSpace;
    }

    public String toString() {
        return "食品名称 : " + name + ", 食品价格 : " + price +"元"+", 食品评分 : " + score + "分"+", 食品产地 : " + foodSpace ;
    }

    /*------------------------------------------------------*/
    public static ArrayList<Food>foods=new ArrayList<>();
    //创建单列集合存储食品信息

    public static void addExampleFood(){
        //添加食品样例
        foods.add(new Food("炸鸡腿",10,"100","肯豆基"));
        foods.add(new Food("汉堡",15,"90","华来市"));
        foods.add(new Food("可乐",3,"85","北华超市"));
        foods.add(new Food("雪碧",4,"85","北华超市"));
    }

    public static void traversal(){
        //用迭代器,Lambda表达式遍历单列集合
        Iterator<Food> iterator = foods.iterator();
        iterator.forEachRemaining(element -> {
            System.out.println(element);
        });
    }

    public static List<Food> seek(String keyword){
        //用stream流和终结方法collect过滤元素
        List<Food>list=
                    foods
                        .stream()
                        .filter(s -> s.name.contains(keyword))
                        .collect(Collectors.toList());
        //System.out.println(list);这里一开始出现了问题所以遍历了一下·
        return list;
    }

     public static boolean check(String input){
        //检查是否存在元素
        //Lambda表达式会忽略结果,所以我选择用迭代器遍历
        Iterator<Food> iterator = foods.iterator();
        while (iterator.hasNext())
            if (iterator.next().name.equals(input))
                return true;
        return false;
    }

    public static void add(Food food){
        //添加到集合里面去
        foods.add(food);
        //添加到点餐集合里去
        Choose5_Order.add(food.name,food.price);
    }

    public static void delete(String food){
        //用迭代器遍历删除下一个元素
        Iterator<Food> iterator = foods.iterator();
        while (iterator.hasNext()) {
            String item = iterator.next().name;
            if (item.equals(food)) {
                iterator.remove();
                // 删除元素
            }
        }
        //删除点餐集合里的数据
        Choose5_Order.delete(food);
    }
}

public class User {
    private String userId;
    private String userPassword;


    public User() {
    }

    public User(String userId, String userPassword) {
        this.userId = userId;
        this.userPassword = userPassword;
    }

    /**
     * 获取
     * @return userId
     */
    public String getUserId() {
        return userId;
    }

    /**
     * 设置
     * @param userId
     */
    public void setUserId(String userId) {
        this.userId = userId;
    }

    /**
     * 获取
     * @return userPassword
     */
    public String getUserPassword() {
        return userPassword;
    }

    /**
     * 设置
     * @param userPassword
     */
    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public String toString() {
        return "User{userId = " + userId + ", userPassword = " + userPassword + "}";
    }
}


import java.util.ArrayList;
import java.util.Scanner;

//外卖管理系统
public class Main {
    //示例用户名 : Duo
    //示例密码   :123
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //创建集合放用户信息并放入范例用户
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("Duo", "123"));
        //进入主页面
        loop:
        while (true) {
            System.out.println("----------♡欢迎使用外卖系统♡----------");
            System.out.println("1.登录");
            System.out.println("2.注册");
            System.out.println("3.忘记密码");
            System.out.println("4.退出");
            System.out.println("请输入您的选择");
            String choose = sc.next();
            switch (choose) {
                //进入登录界面
                case "1" -> {
                    System.out.println("---登录---");
                    log(users);
                }
                //进入注册界面
                case "2" -> {
                    System.out.println("---注册---");
                    register(users);
                }
                case "3" -> {
                    System.out.println("---忘记密码---");
                    forget();
                }
                //停止虚拟机运行 即退出系统
                case "4" -> {
                    System.out.println("♡谢谢使用♡");
                    System.exit(0);
                }
                default -> System.out.println("没有这个选项,请重新输入");
            }
        }
    }
    //登录(已完成)
    public static void log(ArrayList<User> users) {
        Scanner sc = new Scanner(System.in);
        String judge;
        while (true) {
            //输入用户名
            System.out.println("请输入用户名");
            String UserId = sc.next();
            //输入密码
            System.out.println("请输入密码");
            String UserPassword = sc.next();
            //校验
            for (User user : users) {
                if (user.getUserId().equals(UserId) && user.getUserPassword().equals(UserPassword)) {
                    System.out.println("登录成功");
                    TakeawayManagementSystem();
                }
                //用户名输入正确,密码输入错误
                if (user.getUserId().equals(UserId) && !user.getUserPassword().equals(UserPassword)) {
                    System.out.println("用户名输入正确,密码输入错误");
                    loop:
                    while (true) {
                        //页面
                        System.out.println("1.重试");
                        System.out.println("2.退出系统");
                        System.out.println("3.返回开始界面");
                        System.out.println("请输入您的选择");
                        judge = sc.next();
                        switch (judge) {
                            case "1":
                                //跳出判断if
                                break loop;
                            case "2":
                                //结束程序
                            {
                                System.out.println("♡谢谢使用♡");
                                System.exit(0);
                            }
                            case "3":
                                //退出方法
                                return;
                            default: {
                                //重新输入
                                System.out.println("没有这个选项,请重新输入");
                            }
                        }
                    }
                }
                //用户名输入错误且密码输入错误
                if (!user.getUserId().equals(UserId) && !user.getUserPassword().equals(UserPassword)) {
                    System.out.println("用户名输入错误且密码输入错误");
                    loop:
                    while (true) {
                        //页面
                        System.out.println("1.重试");
                        System.out.println("2.退出系统");
                        System.out.println("3.返回开始界面");
                        System.out.println("请输入您的选择");
                        judge = sc.next();
                        switch (judge) {
                            case "1":
                                //跳出判断if
                                break loop;
                            case "2":
                                //结束程序
                            {
                                System.out.println("♡谢谢使用♡");
                                System.exit(0);
                            }
                            case "3":
                                //退出方法
                                return;
                            default: {
                                //重新输入
                                System.out.println("没有这个选项,请重新输入");
                            }
                        }
                    }
                }
                //用户名或密码输入错误
                if ((user.getUserId().equals(UserId) && !user.getUserPassword().equals(UserPassword)) || !(user.getUserId().equals(UserId) && user.getUserPassword().equals(UserPassword))) {
                    System.out.println("用户名输入错误或密码输入错误");
                    loop:
                    while (true) {
                        System.out.println("1.重试");
                        System.out.println("2.退出系统");
                        System.out.println("3.返回开始界面");
                        System.out.println("请输入您的选择");
                        judge = sc.next();
                        switch (judge) {
                            case "1":
                                //跳出判断if
                                break loop;
                            case "2":
                                //结束程序
                            {
                                System.out.println("♡谢谢使用♡");
                                System.exit(0);
                            }
                            case "3":
                                //退出方法
                                return;
                            default: {
                                //重新输入
                                System.out.println("没有这个选项,请重新输入");
                            }
                        }
                    }
                }
            }
        }
    }
    //注册(已完成)
    public static void register(ArrayList<User> users) {
        Scanner sc = new Scanner(System.in);
        //注册页面
        while (true) {
            String newId = new String();
            String newPassword1 = new String();
            String newPassword2 = new String();
            String judge = new String();
            //注册用户名
            while (true) {
                System.out.println("请输入新用户的名称");
                System.out.println("注意!!!用户名必须是3-15位字母和数字的混合组合且字母数字都必须大于3位");
                //输入用户名
                newId = sc.next();
                //检查用户名是否符合规范
                if (checkUserName(newId)) break;
                else {
                    loop:
                    while (true) {
                        System.out.println("用户名不符合规范");
                        System.out.println("1.重新输入用户名");
                        System.out.println("2.返回开始界面");
                        System.out.println("请输入您的选择");
                        judge = sc.next();
                        switch (judge) {
                            //重新输入用户名
                            case "1":
                                break loop;
                            //返回开始界面
                            case "2":
                                return;
                            default: {
                                System.out.println("!没有这个选项请重新输入!");
                            }
                        }
                    }
                }
            }
            //注册密码
            while (true) {
                System.out.println("请输入新用户的密码");
                System.out.println("注意输入密码必须是3-8位任意组合且两次输入密码要相同");
                //输入密码
                newPassword1 = sc.next();
                System.out.println("请再次输入密码");
                //再次输入密码
                newPassword2 = sc.next();
                //检查密码是否符合规范
                if (checkUserPassword(newPassword1, newPassword2)) break;
                    //如不规范再次进入循环
                else {
                    while (true) {
                        System.out.println("密码不符合规范,请重新输入");
                        System.out.println("1.重新输入密码");
                        System.out.println("2.返回开始界面");
                        System.out.println("请输入您的选择");
                        judge = sc.next();
                        switch (judge) {
                            //重新输入密码
                            case "1":
                                continue;
                            case "2":
                                //返回开始界面
                                return;
                            default:
                                //重新选择
                                System.out.println("!没有这个选项请重新输入!");
                        }
                    }
                }
            }
            //注册成功
            System.out.println("恭喜注册成功");
            //将用户名和密码存入User集合中
            users.add(new User(newId, newPassword1));
            //返回开始界面
            return;
        }
    }

    //忘记密码(已完成)
    public static void forget() {
        Scanner sc = new Scanner(System.in);
        while (true) {
            //界面
            System.out.println("怎么忘记了密码了?");
            System.out.println("快去注册一个新的吧!");
            System.out.println("1.返回开始界面");
            System.out.println("2.退出程序");
            System.out.println("请输入您的选择");
            String judge = sc.next();
            switch (judge) {
                case "1": {
                    //退出方法
                    return;
                }
                case "2": {
                    //退出程序
                    System.out.println("♡谢谢使用♡");
                    System.exit(0);
                }
                default: {
                    //重新输入
                    System.out.println("!没有这个选项,请重新输入!");
                }
            }
        }

    }

    //注册时用户名规范性检查(已完成)
    public static boolean checkUserName(String i) {
        //1.检查用户名长度是否在3-15位
        int length = i.length();
        if (length < 3 || length > 15) return false;
        //2.检查用户名是否为大写字母,小写字母,数字
        for (int i1 = 0; i1 < i.length(); i1++) {
            char type1 = i.charAt(i1);
            if (!((type1 >= 'a' && type1 <= 'z') || (type1 >= 'A' && type1 <= 'Z') || (type1 >= '0' && type1 <= '9')))
                return false;
        }
        //3.检查用户名是否为数字和字母混合的形式 并且 数字和字母都必须大于三位
        int letter = 0;
        int number = 0;
        for (int i1 = 0; i1 < i.length(); i1++) {
            char type2 = i.charAt(i1);
            if ((type2 >= 'A' && type2 <= 'Z') || (type2 >= 'a' && type2 <= 'z')) letter++;
            if (type2 >= '0' && type2 <= '9') number++;

        }
        if (!(number >= 3 && letter >= 3)) return false;
        //三项检查全部通过即用户名符合规范
        return true;
    }

    //注册时密码规范性检查(已完成)
    public static boolean checkUserPassword(String x, String y) {
        //1.检查两次输入密码是否相等
        if (!(x.equals(y))) return false;
        //2.检查密码是否为3-8位
        int length = x.length();
        if (!(length >= 3 && length <= 8)) return false;
        //两项检查通过,即密码符合规范
        return true;
    }

    //外卖信息管理系统(已完成)
    public static void TakeawayManagementSystem() {
        Scanner sc = new Scanner(System.in);
        //创建集合放外卖并放入示例外卖
        ArrayList<Food> foods = new ArrayList<>();
        foods.add(new Food(1, "炸鸡腿", 10, "炸鸡店", 10));
        while (true) {
            while (true) {
                //主页面
                System.out.println("----------♡欢迎使用外卖管理系统♡----------");
                System.out.println("1.查看所有外卖信息");
                System.out.println("2.添加外卖信息");
                System.out.println("3.删除外卖信息");
                System.out.println("4.查找外卖信息");
                System.out.println("5.制作者信息");
                System.out.println("6.退出系统");
                System.out.println("请输入您的选择");
                String judge = sc.next();
                switch (judge) {
                    case "1":
                        //遍历
                        FoodCheck(foods);
                        continue;
                    case "2":
                        //添加信息
                        FoodAdd(foods);
                        continue;
                    case "3":
                        //删除信息
                        FoodRemove(foods);
                        continue;
                    case "4":
                        //查找信息
                        FoodFind(foods);
                        continue;
                    case "5":
                        //打印制作着信息
                        message();
                        continue;
                    case "6":
                        //退出系统
                        System.out.println("♡谢谢使用♡");
                        System.exit(0);
                        //重新输入
                    default: {
                        System.out.println("!没有这个选项,请重新输入!");
                    }
                }
            }
        }
    }

    //查看所有外卖的信息(已完成)
    public static void FoodCheck(ArrayList<Food> foods) {
        System.out.println("---------------------------------------------------------------------");
        //眉头
        System.out.println("商品ID\t\t\t商品名称\t\t\t商品价格\t\t\t商家\t\t\t商家库存");
        Scanner sc = new Scanner(System.in);
        //遍历输出打印
        for (int i = 0; i < foods.size(); i++) {
            Food x = foods.get(i);
            System.out.println(x.getFoodId() + "\t\t\t\t" + x.getFoodName() + "\t\t\t" + x.getFoodPrice() + "元" + "\t\t\t" + x.getFoodSpace() + "\t\t" + x.getFoodNumber() + "件");
        }
        System.out.println("---------------------------------------------------------------------");
        while (true) {
            //结束
            System.out.println("1.返回外卖系统界面");
            System.out.println("2.结束运行");
            System.out.println("请输入你的选择");
            String judge = sc.next();
            switch (judge) {
                case "1": {
                    return;
                }
                case "2": {
                    System.exit(0);
                }
                default: {
                    System.out.println("!没有这个选项,请重新输入!");
                }
            }
        }
    }

    //添加外卖信息(已完成)
    public static void FoodAdd(ArrayList<Food> foods) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("当前集合中一共有" + foods.size() + "项数据");
            System.out.println("请输入新的外卖ID");
            int newId = sc.nextInt();
            //添加判断条件
            int tempJudge = 0;
            //遍历ID,防止输入的ID重复
            for (int i = 0; i < foods.size(); i++) {
                int haveFood = foods.get(i).getFoodId();
                if (haveFood == newId) {
                    System.out.println("当前ID重复,请重新输入");
                    tempJudge = 1;
                    break;
                }
            }
            //ID重复,重新输入ID
            if (tempJudge == 1) continue;
            //ID未重复,继续输入其他信息
            System.out.println("请输入外卖名称");
            String newName = sc.next();
            System.out.println("请输入外卖价格");
            int newPrice = sc.nextInt();
            System.out.println("请输入外卖商家");
            String newSpace = sc.next();
            System.out.println("请输入外卖库存");
            int newNumber = sc.nextInt();
            //将新的外卖信息添加到集合里去
            Food newFood = new Food(newId, newName, newPrice, newSpace, newNumber);
            foods.add(newFood);
            System.out.println("添加成功!!!");
            loop:
            while (true) {
                //界面
                System.out.println("1.继续添加外卖信息");
                System.out.println("2.返回外卖系统界面");
                System.out.println("3.退出系统");
                System.out.println("请输入你的选择");
                String judge = sc.next();
                switch (judge) {
                    case "1":
                        //继续添加信息
                        break loop;
                    case "2":
                        //退出方法
                        return;
                    case "3": {
                        //结束运行
                        System.exit(0);
                    }
                    default: {
                        System.out.println("!没有这个选项,请重新输入!");
                    }
                }
            }
        }
    }

    //删除外卖信息(已完成)
    public static void FoodRemove(ArrayList<Food> foods) {
        Scanner sc = new Scanner(System.in);
        //通过计数判断删除是否成功
        int judge1 = 0;
        while (true) {
            System.out.println("请输入要删除的外卖的ID");
            //首先进行判断,如果外卖集合内没有任何元素,则直接退出
            if (foods.size() == 0) {
                System.out.println("对不起,集合里无任何信息,已返回主页面");
                return;
            }
            //输入要查找的Id
            int removeId = sc.nextInt();
            for (int i = 0; i < foods.size(); i++) {
                //遍历集合中每个元素
                Food x = foods.get(i);
                if (x.getFoodId() == removeId) {
                    judge1++;
                    //根据找到的集合索引删除
                    foods.remove(i);
                    System.out.println("已成功删除ID为" + removeId + "的外卖");
                    loop:
                    while (true) {
                        //删除成功
                        System.out.println("1.继续删除");
                        System.out.println("2.返回外卖系统界面");
                        String judge = sc.next();
                        switch (judge) {
                            case "1": {
                                //再次删除
                                break loop;
                            }
                            case "2": {
                                //退出方法
                                return;
                            }
                            default: {
                                //重新输入
                                System.out.println("!没有这个选项,请重新输入!");
                            }
                        }
                    }
                }
            }
            if (judge1 == 0) {
                //删除失败,原因是遍历后为找到该ID
                System.out.println("对不起,未找到当前ID");
                loop2:
                while (true) {
                    System.out.println("1.重新删除");
                    System.out.println("2.返回外卖系统界面");
                    String judge = sc.next();
                    switch (judge) {
                        case "1": {
                            //重新删除
                            break loop2;
                        }
                        case "2": {
                            //退出方法
                            return;
                        }
                        default: {
                            //重新输入
                            System.out.println("!没有当前选项,请重新输入!");
                        }
                    }
                }
            }
        }
    }

    //查找外卖信息(已完成)
    public static void FoodFind(ArrayList<Food> foods) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            //主页面
            System.out.println("1.根据外卖名称查找");
            System.out.println("2.返回外卖系统界面");
            System.out.println("3.退出系统");
            System.out.println("请输入您的选择");
            String judge = sc.next();
            loop:
            while (true) {
                switch (judge) {
                    case "1": {
                        System.out.println("请输入外卖名称");
                        //输入需要查找的外卖名称
                        String findName = sc.next();
                        for (int i = 0; i < foods.size(); i++) {
                            //遍历集合中的每一个元素
                            Food x = foods.get(i);
                            if (x.getFoodName().equals(findName)) {
                                //查找成功,打印输出
                                System.out.println("查找成功");
                                System.out.println("商品ID\t\t\t商品名称\t\t\t商品价格\t\t\t商家\t\t\t商家库存");
                                System.out.println(x.getFoodId() + "\t\t\t\t" + x.getFoodName() + "\t\t\t" + x.getFoodPrice() + "元" + "\t\t\t" + x.getFoodSpace() + "\t\t" + x.getFoodNumber() + "件");
                                break;
                            } else {
                                //查找失败
                                System.out.println("未找到此外卖");
                            }
                        }
                        //无论查找成功失败,都进入此页面
                        System.out.println("1.继续查找");
                        System.out.println("2.返回外卖系统开始界面");
                        System.out.println("请输入您的选择");
                        String judge1 = sc.next();
                        switch (judge1) {
                            case "":
                                //继续进行查找
                                break loop;
                            case "2":
                                //退出方法
                                return;
                            default: {
                                //重新输入
                                System.out.println("!没有这个选项,请重新输入!");
                            }
                        }
                    }
                    case "2":
                        //直接退出方法
                        return;
                    case "3":
                        //结束程序运行
                        System.exit(0);
                }
            }
        }
    }

    //打印制作信息(已完成)
    public static void message() {
        //创建输入类对象
        Scanner Sc = new Scanner(System.in);
        System.out.println("-------------------------------------------");
        //打印所有信息
        System.out.println("制作者:多多");
        System.out.println("班级:软件工程23.3");
        System.out.println("制作日期:2023/11/18-2023/11/19");
        System.out.println("耗时:18号晚上六点到19号下午五点约12个小时");
        System.out.println("QQ:1732446549");
        System.out.println("VX:zdyizdy");
        System.out.println("TET:19850593532");
        System.out.println("特别感谢:北华大学");
        System.out.println("特别感谢:计算机科学与技术学院");
        System.out.println("特别感谢:大数据应用与开发工作室");
        System.out.println("-------------------------------------------");
        while (true) {
            System.out.println("1.返回外卖系统界面");
            System.out.println("2.退出程序");
            System.out.println("请输入您的选择");
            String judge = Sc.next();
            switch (judge) {
                case "1":
                    //退出方法
                    return;
                case "2":
                    //退出程序
                    System.exit(0);
                default:
                    //重新输入
                    System.out.println("!没有这个选项,请重新输入!");
            }
        }
    }
}
 /*
    目前已知的bug有
    1.登录时输错账户和密码会连续进入两次选择界面(未解决)
 */

第二次课设

结构图

alt

JavaBean类

package com.BigDate1421_Dduo.JavaBean;

import com.BigDate1421_Dduo.Takeout.Choose5_Order;

import java.util.stream.Collectors;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//这个JavaBean类是食品
public class Food {

    private String name;//名称
    private int price;  //价格
    private String score;//评分
    private String foodSpace;//产地
    public Food() {
    }

    public Food(String name, int price, String score, String foodSpace) {
        this.name = name;
        this.price = price;
        this.score = score;
        this.foodSpace = foodSpace;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return price
     */
    public int getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(int price) {
        this.price = price;
    }

    /**
     * 获取
     * @return score
     */
    public String getScore() {
        return score;
    }

    /**
     * 设置
     * @param score
     */
    public void setScore(String score) {
        this.score = score;
    }

    /**
     * 获取
     * @return foodSpace
     */
    public String getFoodSpace() {
        return foodSpace;
    }

    /**
     * 设置
     * @param foodSpace
     */
    public void setFoodSpace(String foodSpace) {
        this.foodSpace = foodSpace;
    }

    public String toString() {
        return "Food{name = " + name + ", price = " + price + ", score = " + score + ", foodSpace = " + foodSpace + "}";
    }

    /*------------------------------------------------------*/
    public static ArrayList<Food>foods=new ArrayList<>();
    //创建单列集合存储食品信息

    public static void addExampleFood(){
        //添加食品样例
        foods.add(new Food("炸鸡腿",10,"100","肯豆基"));
        foods.add(new Food("汉堡",15,"90","华来市"));
        foods.add(new Food("可乐",3,"85","北华超市"));
        foods.add(new Food("雪碧",4,"85","北华超市"));
    }


    public static void traversal(){
        //用迭代器,Lambda表达式遍历单列集合
        Iterator<Food> iterator = foods.iterator();
        iterator.forEachRemaining(element -> {
            System.out.println(element);
        });
    }

    public static List<Food> seek(String keyword){
        //用stream流和终结方法collect过滤元素
        List<Food>list=
                    foods
                        .stream()
                        .filter(s -> s.name.contains(keyword))
                        .collect(Collectors.toList());
        //System.out.println(list);这里一开始出现了问题所以遍历了一下·
        return list;
    }

     public static boolean check(String input){
        //检查是否存在元素
        //Lambda表达式会忽略结果,所以我选择用迭代器遍历
        Iterator<Food> iterator = foods.iterator();
        while (iterator.hasNext())
            if (iterator.next().name.equals(input))
                return true;
        return false;
    }

    public static void add(Food food){
        //添加元素
        foods.add(food);
        //添加到点餐集合里去
        Choose5_Order.add(food.name,food.price);
    }
    public static void delete(String food){
        //用迭代器遍历删除下一个元素
        Iterator<Food> iterator = foods.iterator();
        while (iterator.hasNext()) {
            String item = iterator.next().name;
            if (item.equals(food)) {
                iterator.remove(); // 删除元素
            }
        }
        //删除点餐集合里的数据
        Choose5_Order.delete(food);
    }
}

package com.BigDate1421_Dduo.JavaBean;

import com.BigDate1421_Dduo.Start.StartChoose;

import java.util.HashMap;

//这个JavaBean类是用户
public class User {
    //键,值都为字符串类型

    //用户名和密码
    public static HashMap<String ,String>user=new HashMap<>();
    //双列集合存储用户名和密码
    //键,值都为字符串类型·

    public static HashMap<String ,String>retrieve=new HashMap<>();
    //双列集合存储用户名和验证码
    //键,值都为字符串类型
    public static void addExample() {
        //添加用户样例
        user.put("User","123");
        retrieve.put("User","Duo");
    }

    public static boolean judgeInputUsername(String inputUsername) {
        //判断账户内是否存在
        return user.containsKey(inputUsername);
    }

    public static boolean judgeInputUserPasscode(String inputUsername, String inputUserPasscode) {
        //判断用户和密码是否对应
        //字符串直接比较的是地址值,调用equals方法比较具体值
        //这里第一次写的时候就犯了这个错误,写成了"=="
        return (inputUserPasscode.equals(user.get(inputUsername)));
    }

    public static void lockUser(String inputUsername){
        //锁定账户
        user.remove(inputUsername);
        //这里实际上是移除哈希表内的键值对
        StartChoose.choose();
        //返回开始界面
    }

    public static void  add(String newUsername,String inputUserPasscode){
        //添加用户名和密码
        user.put(newUsername,inputUserPasscode);
        //直接往哈希表里添加键值对
    }

    public static void verCode(String newUsername,String code){
        //添加用户的验证码
        //每一个用户都有一个验证码,一个长度为5的字符串
        retrieve.put(newUsername,code);
    }

    public static boolean judgeVercode(String Username,String Usercode){
        //判断验证码是否符合
        if(Usercode.equals(retrieve.get(Username)))
            return true;
        else return false;
    }

    public static String getPassage(String Username){
        //通过用户名返回密码
        return user.get(Username);
    }
}

Start包下的(和开始界面有关的)

package com.BigDate1421_Dduo.Start;

import com.BigDate1421_Dduo.Tools.NowTime;

import java.util.Scanner;


//初始界面
public class StartChoose {

    public static void choose() {
        Scanner sc=new Scanner(System.in);
        //把食品添加到这里
        //是因为每次进入外卖界面都会往集合里添加数据,
        //数据会重复,这样只会添加一次

        System.out.println("----------♡欢迎使用多多外卖系统♡----------");
        System.out.println("现在是北京时间"+NowTime.nowTime());
        System.out.println("1.登录");
        System.out.println("2.注册");
        System.out.println("3.忘记密码");
        System.out.println("4.制作信息");
        System.out.println("5.退出");
        //这里的警告是因为写了太多的打印输出代码
        System.out.println("请输入您的选择");

        int choose= sc.nextInt();

        //如果选择是1,进入登录界面
        if (choose == 1) Choose1_Enter.enter();

        //如果选择是2,进入注册界面
        else if (choose == 2) Choose2_Register.register();

        //如果选择是3,进入密码重置界面
        else if (choose == 3) Choose3_Forget.forget();

        //如果选择是4,打开制作者信息
        else if (choose == 4) Choose4_Message.message();

        //如果选择是5,终止虚拟机运行,退出程序
        else if (choose == 5) System.exit(0);

        else {
            System.out.println("没有此选择,请重新输入");
            StartChoose.choose();
        }
    }
}

package com.BigDate1421_Dduo.Start;

import com.BigDate1421_Dduo.JavaBean.User;
import com.BigDate1421_Dduo.Takeout.TakeoutChoose;
import com.BigDate1421_Dduo.Tools.NowTime;

import java.util.Scanner;
//登录
public class Choose1_Enter {
    public static void enter() {
        Scanner sc=new Scanner(System.in);
        System.out.println("----------♡登录♡----------");
        System.out.println("现在是北京时间"+NowTime.nowTime());
        //输入用户名
        System.out.println("请输入你的用户名");
        String inputUsername= sc.next();
        //判断是否存在此用户
        //将键传递给Map方法
        if(!User.judgeInputUsername(inputUsername)){
            System.out.println("不存在该用户名");
            //进行下一步选择
            System.out.println("请输入下一步选择");
            System.out.println("1.重试");
            System.out.println("2.返回开始菜单");
            switch (sc.nextInt()){
                //重新进入登录界面
                case 1: Choose1_Enter.enter();
                //进入初始界面
                case 2: StartChoose.choose();
            }
        }
        else {
            //进入用户名与密码的匹配判断
            System.out.println("用户名存在");
            System.out.println("请注意一共有三次机会输入密码");
            System.out.println("如输入次数过多将会抹除数据");
            //通过循环判断输入密码次数
            for(int i=3;i>=0;i--){
                //输入密码
                System.out.println("请输入密码");
                String inputUserPasscode= sc.next();
                if(!User.judgeInputUserPasscode(inputUsername,inputUserPasscode)){
                    //输入密码错误次数过多 锁定账户
                    if(i==1) {
                        System.out.println("对不起您的输入次数过多,账户已经锁定");
                        User.lockUser(inputUsername);
                    }
                    System.out.println("密码输入错误,您还有"+(i-1)+"次机会");
                    //进行下一步操作
                    System.out.println("请输入下一步选择");
                    System.out.println("1.重试密码");
                    System.out.println("2.重输用户名");
                    System.out.println("3.返回开始菜单");
                    switch (sc.nextInt()){
                        case 1 :  continue;
                        case 2 :  Choose1_Enter.enter();
                        case 3 :  StartChoose.choose();
                    }
                }
                else {
                    //验证通过则进入外卖界面
                    System.out.println("密码输入成功");
                    TakeoutChoose.choose();
                }
            }
        }
    }
}

package com.BigDate1421_Dduo.Start;

import com.BigDate1421_Dduo.JavaBean.User;
import com.BigDate1421_Dduo.Tools.NowTime;
import com.BigDate1421_Dduo.Tools.RandomString;

import java.util.Scanner;

//注册
public class Choose2_Register {
    public static void register() {
        Scanner sc=new Scanner(System.in);
        System.out.println("----------♡注册♡----------");
        System.out.println("现在是北京时间"+NowTime.nowTime());
        System.out.println("请输入用户名");
        System.out.println("用户名必须是数字字母大小写混合,不包含字符空格,不小于2位,不大于6位");
        String newUsername= sc.next();
        //生成用户名的正则表达式
        String usernamePattern = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{2,6}$";
        //用正则表达式判断
        if(!newUsername.matches(usernamePattern)){
            //不符合规范
            System.out.println("用户名不符合规范");
            System.out.println("1.请重新输入");
            System.out.println("2.返回开始界面");
            switch (sc.nextInt()){
                case 1:Choose2_Register.register();
                case 2:StartChoose.choose();
            }
        }
        else {
            //用户名规范判断通过 即用户名和密码都符合规范
            System.out.println("用户名符合规范");
            System.out.println("请输入密码");
            System.out.println("密码必须是数字,不包含字母字符空格,不小于3位,不大于5位");
            String newPasscoder= sc.next();
            //生成密码的正则表达式
            String userPasscoderPattern = "^\\d{3,5}$";
            //用正则表达式判断
            if(!newPasscoder.matches(userPasscoderPattern)){
                System.out.println("密码不符合规范");
                System.out.println("1.重新输入账号");
                System.out.println("2.返回开始界面");
                switch (sc.nextInt()){
                    case 1:Choose2_Register.register();
                    case 2:StartChoose.choose();
                }
            }
            else {
                //进入验证码
                System.out.println("用户名和密码都符合规范");
                //生成随机的长度为5的字符串
                //通过死循环来进行更新验证码
                while (true) {
                    String Vercode = RandomString.gencode();
                    System.out.println("请输入验证码");
                    System.out.println("验证码: " + Vercode);
                    System.out.println("如果想更新验证码请输入again,进入下一步则输入其他");
                    if (sc.next().equals("again") ) ;
                    else {
                        System.out.println("请注意你只有一次输入机会,如输入正确则注册");
                        if (sc.next().equals(Vercode)) {
                            System.out.println("输入正确,已注册");
                            System.out.println("刚刚输入的验证码可以在忘记密码时使用");
                            //添加新账号
                            User.add(newUsername, newPasscoder);
                            //添加验证码
                            User.verCode(newUsername, Vercode);
                            System.out.println("您的账号是" + newUsername);
                            System.out.println("您的密码是" + newPasscoder);
                            System.out.println("您的验证码是" + Vercode);
                            //返回开始界面
                            StartChoose.choose();
                        } else {
                            System.out.println("输入错误");
                            //返回开始界面
                            StartChoose.choose();
                        }
                    }
                }
            }
        }
    }
}

package com.BigDate1421_Dduo.Start;

import com.BigDate1421_Dduo.JavaBean.User;
import com.BigDate1421_Dduo.Tools.NowTime;

import java.util.Scanner;

public class Choose3_Forget {
    public static void forget() {
        System.out.println("----------♡忘记密码♡----------");
        System.out.println("现在是北京时间"+NowTime.nowTime());
        Scanner sc=new Scanner(System.in);
        //首先输入用户名判断其是否存在哈希表内
        System.out.println("请输入用户名");
        //与登录方法一致
        String inputUsername= sc.next();
        //判断是否存在此用户
        //将键传递给Map方法
        if(!User.judgeInputUsername(inputUsername)) {
            System.out.println("不存在该用户名");
            //返回开始界面
            StartChoose.choose();
        }
        else {
            //通过另一个哈希表,键是用户名,值是验证码验证
            System.out.println("存在该用户");
            System.out.println("请输入用户"+inputUsername+"的验证码");
            if(User.judgeVercode(inputUsername, sc.next())){
                System.out.println("验证码正确");
                System.out.println("用户名"+inputUsername+"的密码是:"+User.getPassage(inputUsername));
            }
            else System.out.println("输入错误");
            //返回开始界面
            StartChoose.choose();
        }
    }
}

package com.BigDate1421_Dduo.Start;

import javax.swing.*;
import java.awt.*;
//感谢
public class Choose4_Message extends JFrame {
    //这里使用了图形化组件Java Swing

    public void UI() {
        setTitle("感谢");

        //更改默认状态,这样才可以添加文字
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel label1 = new JLabel("我叫朱道阳");
        JLabel label2 = new JLabel("我来自北华大学大数据应用与开发工作室");
        JLabel label3 = new JLabel("这是我耗时2天写完的课程设计");
        JLabel label4 = new JLabel("现在是北京时间2024/2/22 19:12:43");
        JLabel label5 = new JLabel("此处特别感谢学长的指导");

        /*
        设置字体大小
        这里本来实现放大文本框的
        可是尝试后发现文字无法正常显示
        Font font = new Font("Arial", Font.PLAIN, 20);
        新建一个字体
        label1.setFont(font);
        label2.setFont(font);
        label3.setFont(font);
        label4.setFont(font);
        label5.setFont(font);
         */

        //使用垂直盒子布局来排列多个JLabel组件
        //因为居中显示的话无法换行只会使界面原来越宽
        Box vbox = Box.createVerticalBox();
        vbox.add(label1);
        vbox.add(label2);
        vbox.add(label3);
        vbox.add(label4);
        vbox.add(label5);

        //通过Container获取当前JFrame内容面板
        //调用方法来添加组件
        Container contentPane = getContentPane();
        contentPane.add(vbox);

        //自动调整JFrame的大小
        pack();

        /*
        居中显示但是会被现有的程序覆盖

        //获得屏幕尺寸
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

        // 计算窗口位置,使其显示在屏幕中心
        int x = (screenSize.width - getWidth()) / 2;
        int y = (screenSize.height - getHeight()) / 2;

        //设置窗口位置
        setLocation(x, y);
        */

        //没有设置界面框的大小是因为字会莫名其妙消失,不设置是默认填充状态

        //设置界面居中
        this.setLocationRelativeTo(null);
        //取消默认的居中放置
        this.setLayout(null);
        //显示窗口
        setVisible(true);

        /*
        想改变窗口图标
        但是
        这里因为没有使用JFrame所以想不到方法来改变窗口图标

        ImageIcon icon = new ImageIcon("icon.png");
        frame.setIconImage(icon.getImage());
        */
    }

    public static void message(){
        Choose4_Message choose4Message = new Choose4_Message();
        choose4Message.UI();
    }

}

Takeout包下的(和食品相关的)

package com.BigDate1421_Dduo.Takeout;

import com.BigDate1421_Dduo.Tools.NowTime;

import java.util.Scanner;

//查看食品界面
public class TakeoutChoose {
    public static void choose() {
        Scanner sc=new Scanner(System.in);
        System.out.println("----------♡欢迎使用食品管理系统♡----------");
        System.out.println("现在是北京时间"+ NowTime.nowTime());
        System.out.println("1.查看目前所有食品信息");
        System.out.println("2.添加食品信息");
        System.out.println("3.删除食品信息");
        System.out.println("4.查找食品信息");
        System.out.println("5.模拟外卖点单");
        System.out.println("6.退出系统");
        System.out.println("请输入您的选择");

        int choose= sc.nextInt();

        //如果选择是1,查看所有信息
        if(choose==1) Choose1_View.view();

        //如果选择是2,增
        else if (choose == 2) Choose2_Add.add();

        //如果选择是3,删
        else if (choose == 3) Choose3_Delete.delete();

        //如果选择是4,查
        else if (choose == 4) Choose4_Seek.seek();

        //如果选择是5,模拟外卖点单
        else if (choose == 5) Choose5_Order.order();

        //如果选择是6,终止虚拟机运行,退出程序
        else if (choose == 6) System.exit(0);

        else {
            System.out.println("没有此选择,请重新输入");
            TakeoutChoose.choose();
        }

    }
}

package com.BigDate1421_Dduo.Takeout;

import com.BigDate1421_Dduo.JavaBean.Food;
import com.BigDate1421_Dduo.Tools.NowTime;

import java.util.Scanner;

public class Choose1_View {
    //展示所有食品信息
    public static void view(){
        Scanner sc=new Scanner(System.in);
        System.out.println("----------♡查看所有食品♡----------");
        System.out.println("现在是北京时间"+ NowTime.nowTime());
        System.out.println("下面是食品所有信息");
        System.out.println("—————————————--------------------------------------------——————");
        //遍历集合
        Food.traversal();
        System.out.println("——————————————-------------------------------------—------—————");

        System.out.println("输入1返回外卖界面");
        while(true){
            if(sc.nextInt()==1)TakeoutChoose.choose();
            System.out.println("未输入1,请重新输入");
        }
    }
}

package com.BigDate1421_Dduo.Takeout;


import com.BigDate1421_Dduo.JavaBean.Food;
import com.BigDate1421_Dduo.Tools.NowTime;

import java.util.Scanner;

public class Choose2_Add {
    public static void add() {
        Scanner sc=new Scanner(System.in);
        System.out.println("----------♡添加食品♡----------");
        System.out.println("现在是北京时间"+ NowTime.nowTime());
        System.out.println("请输入要添加食品的名称");
        String input= sc.next();
        if(Food.check(input)){
            System.out.println("商品重复");
            TakeoutChoose.choose();
        }
        else{
            System.out.println("没有重复名称的食品,请继续输入");
            Food food=new Food();
            //先把名称填好
            food.setName(input);
            //接着录入三项数据
            System.out.println("请输入食品价格");
            food.setPrice(sc.nextInt());
            System.out.println("请输入食品评分");
            food.setScore(sc.next());
            System.out.println("请输入食品产地");
            food.setFoodSpace(sc.next());
            //添加到食品集合里
            Food.add(food);
            System.out.println("添加食品集合成功");
            //返回食品界面
            System.out.println("输入1返回外卖界面");
            while(true){
                if(sc.nextInt()==1)TakeoutChoose.choose();
                System.out.println("未输入1,请重新输入");
            }
        }
    }
}

package com.BigDate1421_Dduo.Takeout;

import com.BigDate1421_Dduo.JavaBean.Food;
import com.BigDate1421_Dduo.Tools.NowTime;
import com.BigDate1421_Dduo.Tools.RandomString;

import java.util.Scanner;

public class Choose3_Delete {
    public static void delete() {
        System.out.println("----------♡删除食品♡----------");
        System.out.println("现在是北京时间"+ NowTime.nowTime());
        Scanner sc = new Scanner(System.in);
        //先判断集合内是否存在
        System.out.println("请输入要删除食品的名称");
        String input = sc.next();
        if (!Food.check(input)) {
            System.out.println("未找到与该食品");
            TakeoutChoose.choose();
        }
        else {
            System.out.println("已找到该食品");
            System.out.println(Food.seek(input));
            System.out.println("请输入验证码以删除");
            //生成随机的长度为5的字符串
            //通过死循环来进行更新验证码
            while (true) {
                String Vercode = RandomString.gencode();
                System.out.println("验证码: " + Vercode);
                System.out.println("如果想更新验证码请输入again,进入下一步则输入其他");
                if (sc.next().equals("again") ) ;
                else {
                    System.out.println("请注意你只有一次输入机会,如输入正确则删除");
                    if (sc.next().equals(Vercode)) {
                        System.out.println("输入正确,已删除");
                        Food.delete(input);
                        System.out.println("输入1返回外卖界面");
                        while(true){
                            if(sc.nextInt()==1)TakeoutChoose.choose();
                            System.out.println("未输入1,请重新输入");
                        }
                    }
                    else {
                        System.out.println("输入错误!");
                        TakeoutChoose.choose();
                    }
                }
            }
        }
    }
}

package com.BigDate1421_Dduo.Takeout;

import com.BigDate1421_Dduo.JavaBean.Food;
import com.BigDate1421_Dduo.Tools.NowTime;

import java.util.Scanner;

public class Choose4_Seek {
    public static void seek() {
        System.out.println("----------♡查找食品♡----------");
        System.out.println("现在是北京时间"+ NowTime.nowTime());
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个关键字查找数据(名称)");
        String keyword= sc.next();
        if(Food.seek(keyword).isEmpty())
            System.out.println("未找到信息");
        else {
            System.out.println("找到"+Food.seek(keyword).size()+"项数据");
            //用增强for循环遍历集合
            for(Food food:Food.seek(keyword))
                System.out.println(food);
        }
        System.out.println("输入1重新查找");
        System.out.println("输入2返回上一步");
        while(true){
            int judge= sc.nextInt();
            if(judge==1) Choose4_Seek.seek();
            if(judge==2)TakeoutChoose.choose();
            System.out.println("输入错误请重新输入");
        }

    }
}

package com.BigDate1421_Dduo.Takeout;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.HashMap;
import java.util.Iterator;
public class Choose5_Order extends JFrame {
    private JList<String> menuList;
    private DefaultListModel<String> menuListModel;
    private JTextArea orderTextArea;
    private JButton orderButton;

    public static HashMap<String,Integer>foods=new HashMap();
    //这个哈希表创建是为了模拟点单时使用
    //键是食品名称,值是食品价格
    public static void addExampleOrder(){
        //添加数据
        foods.put("炸鸡腿",10);
        foods.put("汉堡",15);
        foods.put("可乐",3);
        foods.put("雪碧",4);
    }

    public static void add(String name,int price) {
        //将名称和价格放入哈希表
        foods.put(name,price);
    }
    public static void delete(String name) {
        //删除哈希表内的键值对
        foods.remove(name);
    }

    public Choose5_Order() {
        /*
        这里是添加背景图片但是添加上去会遮挡文字

        ImageIcon icon1=new ImageIcon();
        //创建一个JLabel的对象(管理容器)
        JLabel jLabel1=new JLabel(icon1);
        //把管理容器添加到界面当中
        this.add(jLabel1);
        //用坐标指定图片的位置
        jLabel1.setBounds(-15,0,600,550);
         */
        //设置界面置顶 显示在主页上不会被覆盖
        this.setAlwaysOnTop(true);
        //设置界面的宽度和高度
        this.setSize(300, 300);
        //设置界面的标题
        this.setTitle("多多模拟点餐");
        //设置界面居中
        this.setLocationRelativeTo(null);
        //这样才能添加组件
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建主面板
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout());

        // 创建菜单列表
        menuListModel = new DefaultListModel<>();
        //遍历哈希表,把哈希表的键放进去
        Iterator<String> iterator = foods.keySet().iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            menuListModel.addElement(key);
        }
        //因为哈希表是一种无序的数据结构
        //所以插入的时候顺序会乱
        //有用LinkedHashMap改写的想法

        menuList = new JList<>(menuListModel);
        JScrollPane menuScrollPane = new JScrollPane(menuList);
        mainPanel.add(menuScrollPane, BorderLayout.CENTER);

        //创建订单区域
        orderTextArea = new JTextArea();
        JScrollPane orderScrollPane = new JScrollPane(orderTextArea);
        mainPanel.add(orderScrollPane, BorderLayout.EAST);

        //创建按钮面板
        JPanel buttonPanel = new JPanel(new GridLayout(2, 1));

        //创建添加按钮
        JButton addButton = new JButton("添加购物车");
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String selectedItem = menuList.getSelectedValue();
                if (selectedItem != null && !selectedItem.isEmpty()) {
                    orderTextArea.append(selectedItem + "\n");
                }
            }
        });
        buttonPanel.add(addButton);

        //创建清空按钮
        JButton clearButton = new JButton("清空购物车");
        //匿名内部类来实现事件监听器
        clearButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                orderTextArea.setText("");
            }
        });
        buttonPanel.add(clearButton);

        mainPanel.add(buttonPanel, BorderLayout.SOUTH);

        //创建下单按钮
        orderButton = new JButton("结账");
        //这里我原本写的是匿名内部类,后来改成了Lambda表达式
        orderButton.addActionListener(e -> {
            String orderText = orderTextArea.getText();
            if (!orderText.isEmpty()) {
                double totalAmount = 0.0;

                //将菜品价格累加
                String[] orders = orderText.split("\n");
                for (String order : orders) {
                    if (foods.containsKey(order)) {
                        totalAmount += foods.get(order);
                    }
                }

                //显示总金额
                JOptionPane.showMessageDialog(Choose5_Order.this, "购物车:\n" + orderText + "\n总价格: $" + totalAmount, "结账",JOptionPane.WARNING_MESSAGE);
                orderTextArea.setText("");
            } else {
                JOptionPane.showMessageDialog(Choose5_Order.this, "购物车内无商品", "出错了", JOptionPane.ERROR_MESSAGE);
            }
        });

        //将主面板添加到窗口中
        add(mainPanel, BorderLayout.CENTER);
        add(orderButton, BorderLayout.SOUTH);
    }

    public static void order() {
        //这里我原本写的是匿名内部类,后来改成了Lambda表达式
        SwingUtilities.invokeLater(() -> {
            //启动
            Choose5_Order ui = new Choose5_Order();
            //使页面显示
            ui.setVisible(true);
        });
    }
}

工具类 (音乐,当前时间,验证码)

package com.BigDate1421_Dduo.Tools;

import javax.sound.midi.*;

public class Music {
    public static void music()
    {
        //异常 处理
        try {
            //音乐接口
            //用open方法打开对象
            //准备接收音乐序列数据准备进行播放
            Sequencer sequencer = MidiSystem.getSequencer();
            sequencer.open();

            //表示音乐序列中的时序信息
            Sequence sequence = new Sequence(Sequence.PPQ, 4);

            //表示不同乐器或声部的音轨
            Track track = sequence.createTrack();

            // 定义音符和节奏
            int[] notes = {60, 62, 64,
                    60, 60, 62,
                    64, 60, 64,
                    65, 67, 64,
                    65, 67, 67,
                    69, 67, 65,
                    64, 60, 67,
                    69, 67, 65,
                    64, 60, 60,
                    67, 60, 60,
                    67, 60};
            int[] durations = {
                    4, 4, 4,
                    4, 4, 4,
                    4, 4, 4,
                    4, 8, 4,
                    4, 8, 3,
                    1, 3, 1,
                    4, 4, 3,1, 3,1, 4, 4, 4, 4, 8, 4, 4, 8,
            };


            for (int i = 0; i < notes.length; i++) {
                ShortMessage noteOn = new ShortMessage(ShortMessage.NOTE_ON, 0, notes[i], 127);
                MidiEvent noteOnEvent = new MidiEvent(noteOn, i * 4);
                track.add(noteOnEvent);

                ShortMessage noteOff = new ShortMessage(ShortMessage.NOTE_OFF, 0, notes[i], 127);
                MidiEvent noteOffEvent = new MidiEvent(noteOff, (i + 1) * 4);
                track.add(noteOffEvent);

                //添加节奏延迟
                Thread.sleep(durations[i] * 1);
            }

            sequencer.setSequence(sequence);

            //开始播放
            sequencer.start();

            //播放完成
            //sequencer.close();

            //退出程序
            //System.exit(0);

        }
        //异常处理机制
        //当try代码出现异常时,即音乐无法播放,打印异常信息
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

package com.BigDate1421_Dduo.Tools;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
//返回系统现在的时间

public class NowTime {
    public static LocalDateTime nowTime() {
        //Instant类是JDK8新增的时间类 名为时间戳
        long timestamp = Instant.now().getEpochSecond();
        //日历类Calendar 根据输入的时区参数返回年月日时秒分
        LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.of("Asia/Shanghai"));
        //返回值为LocalDateTime类型
        return dateTime;
    }
}

package com.BigDate1421_Dduo.Tools;

import java.util.Random;
//获取随机验证码
public class RandomString {

    //把能随机出现的字符填进去
    private static final String Largestring
            = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    public static String gencode() {
        //将长度作为形参传入
        String randomString = generateRandomString(5);
        //返回随机数
        return randomString;
    }

    public static String generateRandomString(int length) {
        //播种
        Random random = new Random();
        //创建字符数组
        char[] text = new char[length];
        //随机截取字符串中的五个字符放入数组中
        for (int i = 0; i < length; i++)
            text[i] = Largestring.charAt(random.nextInt(Largestring.length()));
        //将数组拼成字符串返回
        return new String(text);
    }
}