实验项目名称公司订餐系统
使用了数据库+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