實驗項目名稱公司訂餐系統
使用了數據庫+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