订餐系统(饿了某)java程序实现

实验项目名称公司订餐系统

使用了数据库+JDBC+面向对象知识,主要分为八个功能页面,分别为注册、登陆、订餐、查看餐袋、签收订单、删除订单、点赞、退出系统
实现这八个功能模块共创建了八个类:
1.Test.java 程序的主类
2.Login.java 登陆
3.Register.java 注册
4.Home.java 菜单类或窗口类
5.Dinner.java 功能实现类
6.ClearScreen.java 清屏类
7.Menu.java 定义属性和方法
8.JDBCUtils.java JDBC工具类
在这里插入图片描述
运行后的信息:
在这里插入图片描述
数据库建table表:

MySql创建表的操作
//创建订餐信息表
CREATE TABLE menu(

Id INT PRIMARY KEY AUTO_INCREMENT,

customer VARCHAR(32),
message VARCHAR(32),
number INT,
TIME INT,
address VARCHAR(32),
amount DOUBLE(4,1),
state VARCHAR(32)
);

//创建菜品信息表
CREATE TABLE menumassage(

Id INT PRIMARY KEY AUTO_INCREMENT,

message VARCHAR(32),
price INT,
praise INT
);


//创建点赞排行榜表
CREATE TABLE top(
dish VARCHAR(32),
price INT,
praise INT,
dept_id INT
);
//连级操作删除修改
ALTER TABLE top ADD UNIQUE (dish);
ALTER TABLE top ADD  CONSTRAINT top1 FOREIGN KEY (dept_id)  REFERENCES menumassage(Id);

Top表的更新操作
TRUNCATE TABLE top;

INSERT INTO `top`(`dish`,`price`,`praise`,`dept_id`)VALUES('红烧带鱼','38','0','1');
INSERT INTO `top`(`dish`,`price`,`praise`,`dept_id`)VALUES('鱼香肉丝','18','0','2');
 INSERT INTO `top`(`dish`,`price`,`praise`,`dept_id`)VALUES('时令鲜蔬','10','0','3');
SELECT *FROM top;


1.Test.java 程序的主类

package cn.itcast.datasource.Restaurant;

import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        /*获取连接池方法*/
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        Dinner dinner = new Dinner();
        Login l = new Login();
        Register r  = new Register();
        Boolean condition=false;//定义登陆初始状态
         Home home = new Home();
        Scanner sc = new Scanner(System.in);
         while(condition==false){
             home.load();
             int num = sc.nextInt();
             if (num == 1) {
                 r.regist();//注册
             } else if (num == 2) {
                 condition = l.login();//登录
             } else if (num == 0) {
                 return ;
             }
        }
         while (condition==true){
             dinner.function();
         }
    }
}

2.Login.java 登陆

import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Login {
    /*获取连接池方法*/
    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    Scanner sc = new Scanner(System.in);
    String name = null;
    int id ;
    /*
     * 登录检测方法,参数无,return condition
     * */
    public boolean login() {

        for ( int count=3;count>0;count--) {
            System.out.println();
            System.out.println();
            System.out.println("~~~~~~~~~~~~~~~~欢迎使用饿了么~~~~~~~~~~~~~~~~");
            System.out.println("请输入账号:");
            int  cardId = sc.nextInt();
            System.out.println("请输入密码:");
            int  passWord = sc.nextInt();

            //定义sql语句返回整个数据库中所有数据对象的list集合
            String sql = "SELECT *FROM USER;";
            List<Map<String, Object>> list = template.queryForList(sql);
            for (Map<String, Object> user : list) {//键盘输入和数据库中用户数据的比较
                if (cardId == (int) user.get("cardId") && passWord == (int) user.get("password")) {
                    name = (String) user.get("name");
                    id =(int) user.get("id");
                    System.out.println("欢迎第"+id+"位骑手"+name+"!");
                    System.out.println("登陆成功!");
                    return true;
                }
            }
            if(count==1){
                System.out.println("输入错误,登陆失败!");
                System.exit(0);
            }else{
                System.out.println("请重新验证身份信息,验证次数还有:" +(count-1)+"次!");
            }
        }
        return false;
    }

}

3.Register.java 注册

import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.Scanner;

public class Register {
    /*获取连接池方法*/
    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    Scanner sc = new Scanner(System.in);
    public void regist (){

        System.out.println("请输入账号:");
        int  cardId = sc.nextInt();
        System.out.println("请输入密码:");
        int  passWord = sc.nextInt();
        System.out.println("请输入你的真实姓名:");
        String name = sc.next();
        //数据库user表中插入数据
        String sql = "insert into USER(Id,cardId,PASSWORD,NAME) values(?,?,?,?)";
        template.update(sql,null,cardId,passWord,name);
    }
}

4.Home.java 菜单类或窗口类

public class Home {
    ClearScreen cs = new ClearScreen();
    public void load(){

        cs.clear();
        System.out.println("            欢迎使用饿了么            ");
        System.out.println("                                     ");
        System.out.println("                1.注册               ");
        System.out.println("                                     ");
        System.out.println("                2.登录               ");
        System.out.println("                                     ");
        System.out.println("                0.退出               ");
        cs.clear();
        System.out.println("………测试用账号:18480****  密码:123456………");
        System.out.println("请输入序号:");
    }

    public void functionview(){
        cs.clear();
        System.out.println("1、我要订餐");
        System.out.println("2、查看餐袋");
        System.out.println("3、签收订单");
        System.out.println("4、删除订单");
        System.out.println("5、我要点赞");
        System.out.println("6、退出系统");
        cs.clear();
        System.out.print("请选择:");
    }
    public void menu(){
        System.out.println("序号" + "\t" + "菜名"+"\t"+"单价"+"\t");
        System.out.println("1" + "\t" + "红烧带鱼"+"\t"+"38.0元"+"\t");
        System.out.println("2" + "\t" + "鱼香肉丝"+"\t"+"18.0元"+"\t");
        System.out.println("3" + "\t" + "时令鲜蔬"+"\t"+"10.0元"+"\t");
    }
}

5.Dinner.java 功能实现类


import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Dinner {
    static int s;
    int j=0;
    /*获取连接池方法*/
    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    Scanner sc = new Scanner(System.in);
    Home home = new Home();
    int num ;
    String state = "已预定";
    int sum = 1;
    int customer=3;
    Long tot;

    //查询表中总记录数
    public Long total(String str){
        String sql = "select count(?)from menu";
        Long tot = template.queryForObject(sql,Long.class,str);
        return tot;
    }
    //获取menumassage表中信息商品单价和商品名称
    public Map<String, Object> sqlSearch(int select){
        String sqlSearch = "select * from menumassage where Id = ? ";
        List<Map<String, Object>> list = template.queryForList(sqlSearch,select);
        Map<String, Object> map1 = list.get(0);
        return map1;
    }
    //获取menu表中信息
    public Map<String, Object> sqlSearch1(int select){
        String sqlSearch = "select * from menu where Id = ? ";
        List<Map<String, Object>> list = template.queryForList(sqlSearch,select);
        Map<String, Object> map1 = list.get(0);
        return map1;
    }
    //获取top表中信息
    public Map<String, Object> sqlSearch2(int select){
        String sqlSearch = "select * from top where dept_id = ? ";
        List<Map<String, Object>> list = template.queryForList(sqlSearch,select);
        Map<String, Object> map1 = list.get(0);
        return map1;
    }
    //更新表中的数据
    public  void replaceS(String str,int id){
        String sql1 = "update menu set message = ? where Id = ?";
        template.update(sql1, str, id);
    }
    public void  menu() {
        System.out.println("******************我要订餐********************");
        for (j=s; j <=customer; j++) {
            ++s;
            if (s<= customer) {  //找到第一个空位置,可以添加订单信息
        // 显示供选择的菜品信息及价格
                home.menu();
        //输入所选餐品/份数
                //添加一条记录,为每一个订餐用户增加“已预定”属性
                String sql = "insert into menu(state )values (?)";
                template.update(sql, "已预定");
                System.out.print("请选择您要点的菜品编号:");
                int select = sc.nextInt();
                //sum = ++i;
                sum=s;
                Map<String, Object> map=sqlSearch(select);
                String  message = (String) map.get("message");
                int price = (int) map.get("price");
                //修改一条记录update user set balance = ? where cardId = ?
                replaceS(message,sum);
                System.out.print("请选择您需要的份数:");
                int number = sc.nextInt();
                String sql2 = "update menu set number = ? where Id = ?";
                template.update(sql2, number, sum);
        //计算总的餐费(实际价格+配送费)
                double Price = price * number;
                //餐费满50元,免送餐费
                double fee = (Price >= 50) ? 0 : 5;
                double sumPrice = Price + fee;
                String sql3 = "update menu set amount = ? where Id = ?";
                template.update(sql3, sumPrice, sum);
                System.out.print("请输入订餐人姓名:");
                String name = sc.next();
                String sql4 = "update menu set customer = ? where Id = ?";
                template.update(sql4, name, sum);
                System.out.print("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
                int time = sc.nextInt();
        // 设置工作时间送餐
                while (time < 10 || time > 20) {
                    System.out.print("您的输入有误,请输入10~20间的整数!");
                    time = sc.nextInt();
                }
                String sql5 = "update menu set time = ? where Id = ?";
                template.update(sql5, time, sum);
                System.out.print("请输入送餐地址:");
                String address = sc.next();
                String sql6 = "update menu set address = ? where Id = ?";
                template.update(sql6,address,sum);
                //打印输出部分
                System.out.println("订餐成功!");
                System.out.println("您订的是:" + message);
                System.out.println("订了" + number + "份");
                System.out.println("订餐人:" + name);
                System.out.println("送餐时间:" + time + "点");
                System.out.println("餐费:" + Price + "元,送餐费" + fee + "元");
                System.out.println("总金额:" + (sumPrice) + "元。");
                break;
            }else {
                System.out.println("对不起,您的餐袋已满!");
                break;
            }
        }
    }
    public void  viewOrder(){
        System.out.println("****************查看实时订单******************");
        tot=total("Id");
        if(tot==0){
            System.out.println("对不起,还未建立订单,请耐心等待!!!");
            return;
        }
        String sql1 = "select * from menu";
        List<Menu> list = template.query(sql1,new BeanPropertyRowMapper<Menu>(Menu.class));
        for(Menu menu:list){
            System.out.println(menu);
        }
    }
    public void  signOrder() {//签收订单
        System.out.println("******************签收定单********************");
        System.out.print("请选择要签收的订单序号:");
        int sign = sc.nextInt();
        tot=total("Id");
        if(tot==0){
            System.out.println("对不起,还未建立订单,请耐心等待!!!");
            return;
        }
        if (sign > 0 && sign <= customer) {
            //获取订单的签收状态
            Map<String, Object> map=sqlSearch1(sign);
            String state = (String) map.get("state");
            String str = "已签收";
            if (!state.equals(str) ) {
                //修改签收状态为已签收
                String sql1 = "update menu set state = ? where Id = ?";
                template.update(sql1, "已签收", sign);
                System.out.println("订单签收成功!");
            } else {
                System.out.println("您选择的订单已完成签收,不能再次签收!");
            }
        }
        //未找到的订单序号时不能签收
        if (sign > customer) {
            System.out.println("对不起,此订单不存在!");
        }
    }
    public void deleteOrder(){//删除定单
        System.out.println("******************删除订单********************");
        System.out.print("请选择要删除的订单序号:");
        int delete = sc.nextInt();
        tot=total("Id");
        if(tot==0){
            System.out.println("对不起,还未建立订单,请耐心等待!!!");
            return;
        }
        if (delete > 0 && delete <= customer) {
            //获取订单的签收状态
            Map<String, Object> map=sqlSearch1(delete);
            String state = (String) map.get("state");
            System.out.println("你看到的状态:"+state);
            String str1 = "已签收";
            if (state.equals(str1)==true) {
                String sql9 = "delete from menu where Id = ?";
                template.update(sql9,delete);
                System.out.println("订单删除成功!");
            } else {
                System.out.println("您选择的订单未完成签收,不能完成删除!");
            }
        }
        //未找到的订单序号时不能签收
        if (delete > customer) {
            System.out.println("对不起,此订单不存在!");
        }
    }
    public  void  praise(){
        System.out.println("******************我要点赞********************");
        home.menu();
        System.out.println("请选择您要点赞的菜品序号:");
        //查询menumassage总记录数
        String sql1= "select count(Id) from menumassage";
        Long total = template.queryForObject(sql1,Long.class);
        int select=sc.nextInt();
        //判断输入是否合理
        if(select>0&&select<=total){
            System.out.println("输入正确!");
        }else {
            System.out.println("输入错误,请按餐品编号输入😄");
            //输入错误,返回功能选择页面
            return;
        }
        //menumassage表与top表的餐品、价格同步
        Map<String, Object> map=sqlSearch(select);
        String  dish = (String) map.get("message");
        String sql2 = "update top set dish = ? where dept_id = ?";
        template.update(sql2,dish,select);
        int price = (int) map.get("price");
        String sql3 = "update top set praise = ? where dept_id = ?";
        template.update(sql3,price,select);

        int praise = (int) map.get("praise");
        praise++;
        System.out.println("点赞量:"+praise);
        //修改top表中的点赞量
        String sql4 = "update top set praise = ? where dept_id = ?";
        template.update(sql4,praise,select);
        System.out.println("点赞成功👍👍👍");
        //把top表中的数据更新到menumassage中
        Map<String, Object> map1 =sqlSearch2(select);
        int p1 = (int) map1.get("praise");
        //修改menumassage表中的点赞量
        String sql5 = "update menumassage set praise = ? where Id = ?";
        template.update(sql5,p1,select);

       /* -- 根据数据库中一个字段中数据 把整个表 从大到小排列
        SELECT * FROM top ORDER BY praise DESC;*/
        String sql6 ="SELECT * FROM top ORDER BY praise DESC";
        List<Map<String,Object>> list = template.queryForList(sql6);
        for (Map<String,Object>stringObjectMap:list){
            System.out.println(stringObjectMap);
        }
    }

            public void function () {
                Scanner sc = new Scanner(System.in);
                do {
                    home.functionview();
                    int choose = sc.nextInt();
                    switch (choose) {
                        case 1:
                            menu();//我要订餐
                            break;
                        case 2:
                             viewOrder();//查看餐袋
                            break;
                        case 3:
                            signOrder();//签收订单
                            break;
                        case 4:
                             deleteOrder();//删除订单
                            break;
                        case 5:
                            praise();//我要点赞
                            break;
                        case 6:{
                            //一旦退出系统自动清空所有的订单信息
                            String sql = "TRUNCATE TABLE menu";
                            template.update(sql);
                            System.out.println("欢迎下次使用😀😀😀");
                            System.exit(0);//退出
                        }

                    }
                    //用户返回
                    if (choose < 1 || choose > 5) {
                        break;
                    } else {
                        System.out.print("输入0返回:");
                        num = sc.nextInt();
                    }
                } while (num == 0);
            }
        }

6.ClearScreen.java 清屏类

public class ClearScreen {
    public void clear(){
        System.out.println("**********************************************");
    }
}

7.Menu.java 定义属性和方法

package cn.itcast.datasource.Restaurant;

public class Menu {
    private Integer id;
    private String customer;
    private String message;
    private Integer number;
    private Integer time;
    private String address;
    private Double amount;

    @Override
    public String toString() {
        return "Menu{" +
                "id=" + id +
                ", customer='" + customer + '\'' +
                ", message='" + message + '\'' +
                ", number=" + number +
                ", time=" + time +
                ", address='" + address + '\'' +
                ", amount=" + amount +
                ", state='" + state + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCustomer() {
        return customer;
    }

    public void setCustomer(String customer) {
        this.customer = customer;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }

    public Integer getTime() {
        return time;
    }

    public void setTime(Integer time) {
        this.time = time;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Double getAmount() {
        return amount;
    }

    public void setAmount(Double amount) {
        this.amount = amount;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    private String state;
}

8.JDBCUtils.java JDBC工具类

package cn.itcast.datasource.Restaurant;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*
* Druid的工具类
* */
public class JDBCUtils {
    //1.定义成员变量
    private static DataSource ds;
    static {
        //1.加载配置文件
        Properties pro = new Properties();
        try {
            //1.加载配置文件
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //2.获取DataSource
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*获取连接*/
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
    /*释放资源*/
    public static void close (Statement stmt,Connection conn){
      /*  if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }*/
      close(null,stmt,conn);
    }
    public static void close (ResultSet rs,Statement stmt, Connection conn){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /*获取连接池方法*/
    public static DataSource getDataSource(){
        return ds;
    }
}

如需源码请访问百度网盘链接:

https://pan.baidu.com/s/1c42PvpnzGV2U0DG561QrHw
提取码:mwat

  • 8
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值