顾客点餐系统(1)-------整体项目目标+用户数据表的操作
項目初心:我們可以讓用戶更方便的進行使用手機進行在線點菜
一:針對用戶自主點餐:
基本功能:
1)注冊登錄,退出登錄
2)主頁面中可以看到當前店家的菜品列表(菜名,價格,是否要進行選餐),
3)點擊要選擇的菜品,進行下單,多選勾中,進行進行點擊就會選擇下單
4)用戶可以自己看到自己歷史訂單,只能看到自己下的單(序號,用戶,狀態(tài)就是顯示訂單是否完成,下單時間,還有一個按鈕展示詳情信息),每一個訂單都是一行,表示一個訂單
5)當我們進行點擊這個詳情按鈕的時候,就會彈出一個輸入框,顯示各種菜單名字,菜單價格
6)注冊功能,彈出一個框,顯示注冊名字和密碼
二:針對管理員
基本功能:
1)只能進行登錄
2)針對菜品列表進行管理(新增菜品(設(shè)置菜名和價錢),刪除菜品)-------查看菜品頁里面有的
3)針對所有訂單進行管理(看到所有用戶下的單,并且可以看到訂單詳情(菜品的名字,菜品的價格,菜品的總價格)
4)修改訂單的完成情況(完成還是未完成,通過修改一個輸入按鈕))
5)查看訂單頁,菜品以及信息
一:商家可以可以通過系統(tǒng)來進行管理菜品信息(針對菜品進行增刪改查)
二:商家可以通過系統(tǒng)來管理訂單信息(查看所有訂單,修改訂單狀態(tài))
三:顧客可以進行查看菜品列表
四:顧客選中菜品之后,可以點擊下單
模塊:為了解決這個問題,分成了幾個部分,這個項目分成了三個模塊
需求分析:模塊的細節(jié),用到了什么技術(shù),針對初心進行進一步的闡釋
如何介紹項目?建議先按照總分式介紹----先介紹總體(基本的需求,基本的功能點,要解決什么問題),在介紹各個模塊(為了解決這個問題,你分成了幾個部分),在介紹一些實現(xiàn)的技術(shù)細節(jié)
項目初心:讓用戶更好地完成點菜操作,讓商家可以更好的對菜品進行管理,以及管理訂單
1)用戶管理模塊:
注冊,登錄,注銷,我們要分成兩種角色:
消費者用戶(普通的用戶顧客),管理員用戶(商家)
2)菜品管理模塊:系統(tǒng)中可以對菜品進行新增,查看,刪除
不同的用戶角色是由不同的操作的
針對普通用戶只能查看菜品
針對管理員,可以新增,查看,刪除菜品
3)訂單管理模塊:
支持新增訂單,查看所有訂單,查看我的訂單,修改訂單的完成狀態(tài)
針對普通用戶,可以新增訂單,查看我的訂單
針對管理員,可以查看所有訂單,修改訂單狀態(tài)
二維碼:本質(zhì)上就是一個字符串,我們可以把一個url包裝到一個二維碼里面,有很多的工具可以完成,所以要把簡歷寫到二維碼
1.數(shù)據(jù)庫設(shè)計?
基本方法:
1)根據(jù)需求找出實體=>名詞,一般來說每一個實體對應著一張表
用戶(用戶+管理員),菜品,訂單
2)分析實體之間的關(guān)系
1:1
1:多
多:多
用戶和菜品沒有直接關(guān)系
用戶和訂單,每一個用戶可以下多個訂單,一個訂單無法對應多個用戶(1:多)
訂單和菜品,一個訂單會包含多種菜品,一個菜品可以被多個訂單所包含
5)但是我們在這個項目里面,我們主要關(guān)心的是一個訂單里面有多少菜,而不是關(guān)心某一個菜在多少個訂單里面出現(xiàn)
這里面有一些方法來進行區(qū)分一對一還是多對多的關(guān)系:
1)咱們之前寫的博客系統(tǒng):實體類是博客和作者
一篇博客可以對應多篇作者嗎?不行
一個作者可以有多篇博客嗎?可以呀
所以用戶和博客之間的關(guān)系是一對多
2)現(xiàn)在咱們寫的顧客點餐系統(tǒng),我們還可以用11的方法來解決.
先造句:
一:1個用戶只能有1個訂單嗎?不是呀,1個訂單只能對應一個用戶嗎?對的,一個用戶是可以有多個訂單的,所以是1對多的關(guān)系;
二:一個訂單只能有一個菜品嗎?不是呀,一個訂單可以有多個菜品;
那么一個菜品只能對應一個訂單嗎?不是呀,一個菜品可以出現(xiàn)在多個訂單里面;
1.創(chuàng)建數(shù)據(jù)庫中的表?
先找出實體,在分析實體和實體之間的關(guān)系
一:菜品表:
1)菜品的身份標識:DishID
2)菜的名稱:DishTitle(不可以重復)
3)菜的錢:DishMoney(decimal或者是int),使用int進行精確到分,還是不建議使用小數(shù)double和float計算是存在誤差
二:用戶表:
1)用戶的唯一身份標識:UserID
2)用戶名:username(不可以重復)
3)密碼:password
4)是否是管理員:isAdmin ,int 1表示管理員,0表示普通用戶
三:訂單表:(多對多的關(guān)系一般是通過一張中間表來進行連接的),但此時是訂單和菜品用戶都有關(guān)聯(lián)關(guān)系,所以我們要拆成兩部分,我們把訂單分成兩張表:
c1)訂單----用戶表
訂單ID(是自增主鍵):
用戶ID(這個屬性要和User表中的UserID有關(guān)聯(lián)關(guān)系)
下單時間:
是否完結(jié)(1表示訂單完結(jié),0表示訂單沒有完結(jié))
比如說在這里面有一條記錄:100,1,2002-08-01,false;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?101,2,2002-08-02,false;
c2)訂單-----菜品表(一個訂單中包含多個菜品,就需要用額外的一張表來進行表示,這一張表的每一條記錄就對應著一個訂單和菜品之間的關(guān)聯(lián)關(guān)系)
訂單ID:菜品ID(他們倆都不是自增主鍵)
100,1001
100,1002
100,1003
101,1001
101,1004
在Java里面:Timestamp time對應的包是import java.sql.Timestamp
還有在數(shù)據(jù)庫類型里面:time datetime
create database if not exists OrderSystem; use OrderSystem; drop table if exists User; create table User( UserID int primary key auto_increment, UserName varchar(400), PassWord varchar(400), IsAdmin int ); drop table if exists Dish; create table Dish( DishID int primary key auto_increment, DishName varchar(800), DishMoney int ); drop table if exists Order_User; create table Order_User( OrderID int primary key auto_increment, UserID int, IsDown int, --1表示訂單完結(jié),0表示訂單未完結(jié) OrderTime TIMESTAMP, foreign key(UserID) references User(UserID) --這張訂單用戶表中的UserID必須和User中的UserID是相同的 ); drop table if exists Order_Dish; create table OrderDish( OrderID int, --這里面的OrderID也和我們的Order_User表中的OrderID是有外鍵關(guān)系的 DishID int, --這里面的DishID是和我們的Dish表中的DishID是有一定的關(guān)聯(lián)外健關(guān)系的 foreign key(OrderID) references Order_User(OrderID), foreign key(DishID) references Dish(DishID) ); //刪除數(shù)據(jù)庫中的表的列: alter table 表名 drop 表的列 //新增數(shù)據(jù)庫表的列: alter table 表名 add name varchar(50) unique;注意著里面誰應該加外健,誰不應該加外健,哪個字段應該加主鍵,哪一個不應該加主鍵
2.創(chuàng)建實體類:在實體類中的每一個字段和數(shù)據(jù)中的每一張表的對應的字段是相同的
用戶類: public class User{private int UserID;private String UserName;private String PassWord;private int IsAdmin; } 創(chuàng)建菜品類: public class Dish{private int DishID;private String DishName;private int DishMoney; } 創(chuàng)建訂單類: public class Order {private int OrderID;//訂單IDprivate int UserID;//訂單誰下的private int IsDone;//訂單是否完結(jié)private Timestamp OrderTime;//訂單下單時間private List<Dish> list;//訂單里面包含哪些菜 } public class ConnectionMYSQL {private static volatile DataSource dataSource=null;private static final String User="root";private static final String url="jdbc:mysql://127.0.0.1:3306/OrderSystem?characterEncoding=utf-8&useSSL=true";private static final String password="12503487";public static DataSource GetDataSource(){if(dataSource==null){synchronized(Object.class){if(dataSource==null){dataSource=new MysqlDataSource();((MysqlDataSource)dataSource).setPassword(password);((MysqlDataSource)dataSource).setUser(User);((MysqlDataSource)dataSource).setURL(url);}}}return dataSource;}public static Connection GetConnection() throws SQLException {return dataSource.getConnection();}public static void Close(Connection connection, PreparedStatement statement, ResultSet resultSet) throws SQLException {if(resultSet!=null){resultSet.close();;}if(statement!=null){statement.close();}if(connection!=null){connection.close();}} } 修改數(shù)據(jù)庫表名: rename table 舊表名 to 新表名;?3.創(chuàng)建接口:創(chuàng)建對應的DAO類(操作三組數(shù)據(jù)),封裝數(shù)據(jù)訪問接口:UserDAO,DishDAO,OrderDAO:無非就是增刪改查
1)針對User類來說,我們主要實現(xiàn)三個功能:(自己介紹一下JDBC)
一:新增用戶,在注冊的時候進行使用
二:按照名字來進行查找用戶,登陸的時候進行使用(按照名字查找,只能查找到一條記錄)
三:我們根據(jù)用戶ID來進行查找,我們在展示所有用戶信息的狀態(tài)時候進行使用
JDBC編程的基本流程:通過DataSource和數(shù)據(jù)庫建立連接,在建立連接的時候通過創(chuàng)建MysqlDataSource實例1.先要和數(shù)據(jù)庫建立連接:(DataSource),通過Connnection建立連接的時候,如果連接失敗,就會拋出java.sql.exception2.拼裝SQL語句(PrepareStatement)3.執(zhí)行SQL語句(executeQuery,executeUpdate)4.關(guān)閉連接(如果是查詢語句,還需要進行遍歷結(jié)果集合)(關(guān)鍵詞叫做close) //新增用戶 public void addUser(User user) throws SQLException {//1.與數(shù)據(jù)庫建立連接Connection connection=ConnectionMYSQL.GetConnection();//2.拼裝SQL語句String SQL="insert into User values(null,?,?,?)";//3.執(zhí)行SQL語句PreparedStatement statement= connection.prepareStatement(SQL);statement.setString(1, user.getUserName());statement.setString(2, user.getPassWord());statement.setInt(3,user.getIsAdmin());int len= statement.executeUpdate();if(len==1){System.out.println("新增用戶成功");}else{System.out.println("新增用戶失敗");}} //根據(jù)名字查找用戶public User SelectUserByUserName(String UserName) throws SQLException {//1.與數(shù)據(jù)庫建立連接Connection connection=ConnectionMYSQL.GetConnection();//2.拼裝SQL語句String SQL="select * from User where UserName=?";//3.執(zhí)行SQL語句PreparedStatement statement= connection.prepareStatement(SQL);statement.setString(1,UserName);ResultSet resultSet= statement.executeQuery();while(resultSet.next()){User user=new User();user.setUserID(resultSet.getInt("UserID"));user.setUserName(resultSet.getString("UserName"));user.setIsAdmin(resultSet.getInt("IsAdmin"));user.setPassWord(resultSet.getString("PassWord"));return user;}return null;} //根據(jù)ID來進行查找用戶public User SelectUserByID(int UserID) throws SQLException {//1.與數(shù)據(jù)庫建立連接Connection connection=ConnectionMYSQL.GetConnection();//2.拼裝SQL語句String SQL="select * from User where UserID=?";//3.執(zhí)行SQL語句PreparedStatement statement= connection.prepareStatement(SQL);statement.setInt(1,UserID);//4.執(zhí)行SQL語句ResultSet resultSet=statement.executeQuery();while(resultSet.next()){User user=new User();user.setUserID(resultSet.getInt("UserID"));user.setUserName(resultSet.getString("UserName"));user.setIsAdmin(resultSet.getInt("IsAdmin"));user.setPassWord(resultSet.getString("PassWord"));return user;}return null;} 測試代碼:UserDAO userDAO=new UserDAO();1.新增用戶驗證 User user=new User();user.setUserName("李佳偉");user.setPassWord("12503487");user.setIsAdmin(0);userDAO.addUser(user); 2.根據(jù)名字查詢用戶驗證 User user=userDAO.SelectUserByUserName("李佳偉");System.out.println(user); 3.根據(jù)ID查詢用戶驗證User user= userDAO.SelectUserByID(1);System.out.println(user);總結(jié)
以上是生活随笔為你收集整理的顾客点餐系统(1)-------整体项目目标+用户数据表的操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海居住证 居转户条件
- 下一篇: 计算机程序无法启动,应用程序无法正常启动