Java餐厅点餐系统【附源码报告】
時間太久了,數(shù)據(jù)庫之類的不在了,沒法打包資源上傳,有粉絲想要完整代碼,故更新一下。有資源需求之類的可以直接私信或者在評論區(qū)留言,博主會進(jìn)行更改。
目錄
1. 緒論
1.1?課題目標(biāo)
1.2?課題背景
1.3?開發(fā)意義? ? ? ??
2. 需求分析
2.1?需求描述
2.2?數(shù)據(jù)流圖
2.3 數(shù)據(jù)字典
2.4?概念結(jié)構(gòu)設(shè)計(jì)E-R圖
3. 系統(tǒng)設(shè)計(jì)
3.1 軟件功能總體設(shè)計(jì)
3.2?軟件功能詳細(xì)設(shè)計(jì)
4. 數(shù)據(jù)庫設(shè)計(jì)
4.1 邏輯結(jié)構(gòu)設(shè)計(jì)
5?系統(tǒng)實(shí)現(xiàn)交互圖
5.1 下單功能實(shí)現(xiàn)
6. 完整源碼
7. 項(xiàng)目課題總結(jié)
1. 緒論
1.1?課題目標(biāo)
????????設(shè)計(jì)一個能夠保證信息的準(zhǔn)確性和時效性,隨時通過計(jì)算機(jī)對系統(tǒng)進(jìn)行管理,使得餐廳點(diǎn)餐各項(xiàng)信息合理傳達(dá)給顧客和餐廳人員,保證具有選擇就餐人數(shù)和餐桌、點(diǎn)餐、下單、加單、結(jié)賬等功能的系統(tǒng),并為餐廳點(diǎn)餐相關(guān)信息管理提供一種更加高效實(shí)用的管理手段,為餐廳點(diǎn)餐信息交流提供一種更加安全快捷的信息平臺。
1.2?課題背景
????????隨著當(dāng)代科學(xué)社會的不斷發(fā)展,我們所需要接收和處理的信息越來越多,很多東西逐漸難以通過單純的人力勞動來解決。在信息過載的時代,由于計(jì)算機(jī)網(wǎng)絡(luò)和人工智能的迅猛發(fā)展,越來越多的智能化設(shè)備、操作系統(tǒng)完成了對單調(diào)重復(fù)的勞動力的替代,使得眾多行業(yè)領(lǐng)域的工作效率大大提高。
????????現(xiàn)在人們的社會需求越來越大,小型餐廳的規(guī)模不斷的發(fā)展擴(kuò)大,菜品數(shù)量和種類也在不斷地增加,和點(diǎn)餐有關(guān)的信息也在不斷地變多。餐廳員工每天通過手寫記錄大量點(diǎn)餐信息,工作量非常的大,容錯率也不高。
????????傳統(tǒng)的餐飲系統(tǒng)尤其是學(xué)生食堂的餐飲系統(tǒng)還是學(xué)生打菜的模式,依舊還是排隊(duì)打菜的模式,對于消費(fèi)者來說多了排隊(duì)的時間,對于賣家來說過長的隊(duì)伍可能會導(dǎo)致很多隱藏客戶的流失,還有排在后面的人可能對于今天的菜品不是很了解,卻又沒有充足的時間挑選自己喜歡的。
????????餐飲行業(yè)最終要的就是一個買家賣家相互促進(jìn)的良性循環(huán),買家付出了金錢,得到了好的服務(wù)和消費(fèi)體驗(yàn),才會有回購的欲望,賣家的付出得到了收獲,更容易有一個良好的心態(tài)來服務(wù)客戶。很多問題會出現(xiàn)在點(diǎn)餐的這個過程,那么將這個人工過程交由系統(tǒng)來完成,會大大提高精準(zhǔn)度和容錯率。
1.3?開發(fā)意義? ? ? ??
????????客戶進(jìn)入餐廳不再需要排隊(duì)等待,只需要找到自己的位置,就可以進(jìn)行點(diǎn)餐,所有菜品盡情翻閱,極大方便了客戶的點(diǎn)餐環(huán)節(jié),節(jié)省了人工服務(wù)過程,避免客戶過長的等待時間產(chǎn)生的不耐。極大提升了客戶的體驗(yàn),對于賣家也就避免了可能產(chǎn)生的損失,省去了面對面服務(wù)的環(huán)節(jié),只需要專心提高產(chǎn)品品質(zhì)即可。
????????①減輕勞動強(qiáng)度、提高工作效率、增加餐廳點(diǎn)餐管理的透明度。餐廳點(diǎn)餐系統(tǒng)可以發(fā)揮計(jì)算機(jī)的強(qiáng)大功能,讓餐廳員工從大量繁瑣的手工勞動中解放出來,將單調(diào)枯燥的紙張涂寫變成靈活的電子信息操作。并充分利用網(wǎng)絡(luò)優(yōu)勢,加快餐廳內(nèi)部各項(xiàng)信息的獲取和傳達(dá),改善和優(yōu)化餐廳各類人員的工作,使各個類群之間的工作聯(lián)系緊密、井然有序、清楚明晰,大大減輕工作負(fù)擔(dān),提高工作效率,增加學(xué)生管理的透明度。
????????②降低管理成本,由于采用本系統(tǒng)的原因,使餐廳管理工作一改往日埋在各種表格中的被動局面,基本實(shí)現(xiàn)了無紙化辦公,根除了很多日常管理中的浪費(fèi)現(xiàn)象,體現(xiàn)出現(xiàn)代化餐廳點(diǎn)餐管理的優(yōu)勢。
????????③規(guī)范化管理,由于采用了計(jì)算機(jī)統(tǒng)計(jì)分析餐廳點(diǎn)餐信息,可以將錯誤降到最低,提高系統(tǒng)工作的準(zhǔn)確率,從而餐廳點(diǎn)餐相關(guān)管理工作規(guī)范化。
2. 需求分析
2.1?需求描述
????????需求分析首先要確定研究分析的對象,這里的需求分析對象有兩方:買家和賣家。
????????對于買家,需求是能夠進(jìn)行線上點(diǎn)餐,具體可以細(xì)化為:能夠在線上獲得餐品信息和進(jìn)行點(diǎn)餐行為。買家作為消費(fèi)者,都想得到更為優(yōu)質(zhì)的服務(wù)體驗(yàn),希望能夠通過較為簡單順利的操作就可以吃到滿足自己口味的菜肴。這就要求系統(tǒng)界面能夠生動形象地有效呈現(xiàn)出點(diǎn)餐的各項(xiàng)信息,菜品的價格、菜品的品相、可以選擇就坐的餐桌的數(shù)目等情況以及加餐時簡潔的操作界面。
????????對于賣家,需求是能夠獲得買家的訂單,具體可以細(xì)化為,能夠線上獲得買家的下單餐品,用餐桌號等訂單信息。賣家即為商家,商家要能夠高效地獲取顧客的信息,當(dāng)然是圖形化界面和幾何形式的信息呈現(xiàn)最為直接明了,通過這些,自然能夠合理把控消費(fèi)者的消費(fèi)訴求,從而能夠給出更好的服務(wù),讓顧客有更好的體驗(yàn)。??
2.2?數(shù)據(jù)流圖
2.3 數(shù)據(jù)字典
數(shù)據(jù)項(xiàng)
表2-1數(shù)據(jù)項(xiàng)表
| 數(shù)據(jù)項(xiàng)名 | 數(shù)據(jù)項(xiàng)含義 | 數(shù)據(jù)類型 |
| nu | 點(diǎn)餐桌號 | Char(10) |
| name | 點(diǎn)餐菜名 | Char(10) |
| 桌號 | 桌號 | Char(10) |
| 人數(shù) | 人數(shù) | Char(10) |
| 總金額 | 總金額 | Char(10) |
數(shù)據(jù)結(jié)構(gòu)
表2-2數(shù)據(jù)結(jié)構(gòu)表
| 數(shù)據(jù)結(jié)構(gòu)名 | 含義 | 組成 |
| fo | 尚未完成的訂單 | nu,name |
| zo | 歷史訂單 | 桌號,人數(shù),總金額 |
數(shù)據(jù)流
表2-3數(shù)據(jù)流表
| 數(shù)據(jù)流名 | 說明 | 數(shù)據(jù)流來源 | 數(shù)據(jù)流去向 | 組成 |
| 訂單 | 餐品訂單 | 顧客 | 賣家 | 桌號,人數(shù),菜品,金額,總金額 |
2.4?概念結(jié)構(gòu)設(shè)計(jì)E-R圖
3. 系統(tǒng)設(shè)計(jì)
3.1 軟件功能總體設(shè)計(jì)
3.2?軟件功能詳細(xì)設(shè)計(jì)
3.2.1 登錄功能
????????在JAVA控制臺運(yùn)行源代碼,首先會彈出登錄界面,在此界面中輸入創(chuàng)建好的賬號和密碼即可登錄進(jìn)入服務(wù)系統(tǒng),若輸入的賬號和密碼與數(shù)據(jù)庫中用戶表內(nèi)所存的賬號和密碼清單不匹配,則會提示是否注冊該賬號,注冊完后系統(tǒng)會將賬號和密碼存儲到數(shù)據(jù)庫中,此時再登錄即可進(jìn)入系統(tǒng)界面。
3.2.2 界面修改
????????在進(jìn)入服務(wù)系統(tǒng)后,圖形界面中有“界面樣式設(shè)置”和“修改界面字體”兩個按鈕,這兩個按鈕分別負(fù)責(zé)其對應(yīng)的功能,選擇點(diǎn)擊“界面樣式設(shè)置”按鈕后會彈出各種各樣的界面樣式以供選擇,選擇點(diǎn)擊并確認(rèn)后即可完成切換界面樣式。選擇點(diǎn)擊“修改界面字體”按鈕后會彈出各式各樣的字體樣式,選擇點(diǎn)擊并確認(rèn)后即可完成修改界面字體。
3.2.3 點(diǎn)餐界面
????????點(diǎn)擊選擇服務(wù)界面中的“點(diǎn)餐”按鈕后進(jìn)入點(diǎn)餐界面,瀏覽到心儀菜品即可點(diǎn)擊“加單”按鈕將點(diǎn)餐數(shù)量暫存到系統(tǒng)內(nèi)部的數(shù)組中,再點(diǎn)擊“下單”按鈕即可完成對餐品數(shù)量的存入,之后系統(tǒng)會統(tǒng)計(jì)菜品的總價,完成結(jié)賬后即可退出。
3.2.4 結(jié)賬界面
????????在服務(wù)界面中選擇點(diǎn)擊“菜單”按鈕,找到“支付”按鈕并選擇點(diǎn)擊,如果菜單中有存入的菜品及其相應(yīng)數(shù)量,則會顯示賬單并完成支付;如果菜單為空,則跳轉(zhuǎn)到添加菜品界面,方便顧客進(jìn)行點(diǎn)餐等一系列操作。
4. 數(shù)據(jù)庫設(shè)計(jì)
4.1 邏輯結(jié)構(gòu)設(shè)計(jì)
zo(桌號,人數(shù),總金額)
fo(nu,name,bool)
表3-1 zo屬性表
| 屬性名 | 數(shù)據(jù)類型 | 說明 |
| 桌號 | Char(10) | 訂單桌號 |
| 人數(shù) | Char(10) | 訂單人數(shù) |
| 總金額 | Char(10) | 消費(fèi)金額 |
表3-2 fo屬性表
| 屬性名 | 數(shù)據(jù)類型 | 說明 |
| nu | Char(10) | 桌號 |
| name | Char(10) | 菜名 |
| bool | Char(10) | 是否完成訂單 |
5?系統(tǒng)實(shí)現(xiàn)交互圖
5.1 下單功能實(shí)現(xiàn)
登錄界面:用戶輸入正確信息進(jìn)入系統(tǒng)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
圖4-1登錄界面
圖4-2錯誤登錄(1)
圖4-3錯誤登錄(2)
下單界面:用戶選擇產(chǎn)品下單
結(jié)賬界面:用戶選擇完畢進(jìn)行結(jié)賬
界面定制:用戶自定義界面形式
退出功能:用戶根據(jù)選擇退出登錄
6. 完整源碼
package 餐廳點(diǎn)餐系統(tǒng); import javax.swing.*; import java.awt.*; import java.awt.event.*;public class Land {private JFrame jf;private JPanel jp1;private JPanel jp2;private JPanel jp3;private JPanel jp4;private JTextField jtf1;private JPasswordField jpf1;private JLabel jl1;private JLabel jl2;private JButton jb1;private JButton jb2;public void init() {jf = new JFrame("登陸");jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jp4 = new JPanel();jtf1 = new JTextField(15);jpf1 = new JPasswordField (15);jpf1.setEchoChar('*');jl1 = new JLabel("用戶");jl2 = new JLabel("密碼");jb1 = new JButton("登陸");jb2 = new JButton("重置");jf.setLayout(new GridLayout(3,1));jf.add(jp2);jf.add(jp3);jf.add(jp4);jp2.add(jl1);jp2.add(jtf1);jp3.add(jl2);jp3.add(jpf1);jp4.add(jb1);jp4.add(jb2);jb1.addActionListener(new ButtonListener());jb2.addActionListener(new ButtonListener());jf.pack();jf.setLocation(400, 300);jf.setLocationRelativeTo(null);jf.setVisible(true);jf.setAlwaysOnTop(false);}private class ButtonListener implements ActionListener {public void actionPerformed(ActionEvent event) {String command = event.getActionCommand();if("登陸".equals(command) && jtf1.getText().equals("123") && jpf1.getText().equals("123")) {new System1().init(jtf1.getText());jf.setVisible(false);}else if("登陸".equals(command) && jtf1.getText().equals("") && jpf1.getText().equals("")) { JOptionPane.showMessageDialog(null,"請輸入用戶名和密碼","提示",1); }else if("重置".equals(command)) {jtf1.setText("");jpf1.setText("");}else {JOptionPane.showMessageDialog(null,"用戶名或密碼錯誤!","錯誤 ",0);jtf1.setText("");jpf1.setText("");}}}public static void showMessageDialog(Component parentComponent,Object message,String title,int messageType,Icon icon) { }public static void main(String[] args) {new Land().init();} } package 餐廳點(diǎn)餐系統(tǒng); import java.awt.*;import javax.sql.rowset.WebRowSet; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.util.ArrayList; import java.util.Vector; import java.util.Calendar; import java.util.Date; import java.io.*; import java.net.NoRouteToHostException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.text.SimpleDateFormat; //事件處理包 import java.awt.event.*;public class System1 implements ActionListener{ //北部區(qū)域JMenuBar jm1=new JMenuBar();private JLabel jl1;//南部區(qū)域private JButton jb1, jb2, jb3, jb4 , jb5;private JPanel jp1; //西部區(qū)域private JTabbedPane jtp2;private JPanel jp8;private JButton jb6, jb7, jb8, jb9, jb10, jb11;//東部區(qū)域 private JPanel jp9;private JComboBox jcb11;private JLabel jl20, jl21, jl22;private JTextField jtf2;private JTable jt;private JScrollPane jsp;String[] jg = { "桌1", "桌2", "桌3", "桌4", "桌5", "桌6" };private DefaultTableModel model;private Vector data;private Vector names;//中部區(qū)域private JTabbedPane jtp;// 選項(xiàng)卡窗格private ImageIcon img;private JPanel jp2, jp3, jp4, jp5, jp6, jp7; private JLabel jl2, jl3, jl4, jl5, jl6, jl7, jl8, jl9, jl10, jl11, jl12, jl13, jl14, jl15, jl16, jl17, jl18, jl19;private JCheckBox jcb1, jcb2, jcb3, jcb4, jcb5, jcb6, jcb7, jcb8, jcb9; //判斷boolean B = true; //文件輸出BufferedWriter out; //主框架JFrame jf;public void init(String username) {//北部區(qū)域jl1 = new JLabel("*****課設(shè)餐廳歡迎您*****",JLabel.CENTER);jl1.setOpaque(true);//設(shè)置背景顏色必須先將它設(shè)置為不透明的,因?yàn)槟J(rèn)是透明的。jl1.setBackground(Color.pink);Font f = new Font("楷體",Font.PLAIN,45); jl1.setFont(f);jl1.setForeground(Color.BLUE);JMenu menu1=new JMenu("系統(tǒng)設(shè)置"); jm1.add(menu1);JMenu menu2=new JMenu("餐廳名稱字體"); JMenu menu3=new JMenu("餐廳名稱顏色"); JMenuItem item9=new JMenuItem("退出登錄"); menu1.add(menu2);menu1.add(menu3);menu1.addSeparator();menu1.add(item9);//設(shè)置監(jiān)聽退出登錄item9.addActionListener(new ActionListener() { @Overridepublic void actionPerformed( ActionEvent e) {int i=JOptionPane.showConfirmDialog(null, "是否退出登錄","退出登錄",JOptionPane.YES_NO_OPTION); if(i == JOptionPane.YES_OPTION) { jf.setVisible(false);new Land().init();}}});//菜單欄設(shè)置標(biāo)題字體JMenuItem item1=new JMenuItem("楷體"); JMenuItem item2=new JMenuItem("宋體"); JMenuItem item3=new JMenuItem("黑體"); JMenuItem item4=new JMenuItem("正文");menu2.add(item1);menu2.add(item2);menu2.add(item3); menu2.add(item4);item1.addActionListener(new ActionListener() { public void actionPerformed( ActionEvent e) {Font f = new Font("楷體",Font.PLAIN,45);jl1.setFont(f);} });item2.addActionListener(new ActionListener() { public void actionPerformed( ActionEvent e) {Font f = new Font("宋體",Font.PLAIN,45);jl1.setFont(f);} });item3.addActionListener(new ActionListener() { public void actionPerformed( ActionEvent e) {Font f = new Font("黑體",Font.PLAIN,45);jl1.setFont(f);} });item4.addActionListener(new ActionListener() { public void actionPerformed( ActionEvent e) {Font f = new Font("正文",Font.PLAIN,45);jl1.setFont(f);} });//菜單欄設(shè)置標(biāo)題顏色 JMenuItem item5=new JMenuItem("藍(lán)色"); JMenuItem item6=new JMenuItem("紅色"); JMenuItem item7=new JMenuItem("黑色"); JMenuItem item8=new JMenuItem("綠色");menu3.add(item5);menu3.add(item6);menu3.add(item7); menu3.add(item8);item5.addActionListener(new ActionListener() { public void actionPerformed( ActionEvent e) {jl1.setForeground(Color.BLUE);} });item6.addActionListener(new ActionListener() { public void actionPerformed( ActionEvent e) {jl1.setForeground(Color.RED);} });item7.addActionListener(new ActionListener() { public void actionPerformed( ActionEvent e) {jl1.setForeground(Color.BLACK);} });item8.addActionListener(new ActionListener() { public void actionPerformed( ActionEvent e) {jl1.setForeground(Color.green);} });//南部區(qū)域jp1 = new JPanel();jb1 = new JButton("取消");jb2 = new JButton("下單");jb3 = new JButton("加單");jb4 = new JButton("結(jié)賬");//西部區(qū)域jtp2 = new JTabbedPane();jp8 = new JPanel(); jb6 = new JButton("熱銷菜式");jb7 = new JButton("小炒類"); jb8 = new JButton("蔬菜類"); jb9 = new JButton("主食類"); jb10 = new JButton("甜品類"); jb11 = new JButton("飲品類");//東部區(qū)域jp9 = new JPanel();jl20 = new JLabel("請選擇桌號:"); jcb11 = new JComboBox(jg);jl21 = new JLabel("請輸入用餐人數(shù):");jtf2 = new JTextField();jl22 = new JLabel("已點(diǎn)菜式列表:"); model = new DefaultTableModel(); // 新建一個默認(rèn)數(shù)據(jù)模型data = new Vector(); // 數(shù)據(jù)行向量集,因?yàn)榱斜聿恢挂恍?#xff0c;往里面添加數(shù)據(jù)行向量,添加方法add(row)names = new Vector();// 列名向量,使用它的add()方法添加列名names.add("菜名"); names.add("價格(元)"); model.setDataVector(data,names); // 設(shè)置模型中的元素,它會自動顯示在列表中jt = new JTable(model); // 用數(shù)據(jù)模型創(chuàng)建JTable,JTable會自動監(jiān)聽到數(shù)據(jù)模型中的數(shù)據(jù)改變并顯示出來jsp = new JScrollPane(jt); // 用列表創(chuàng)建可滾動的Panel,把這個Panel添加到窗口中 //中部區(qū)域jtp = new JTabbedPane();img=new ImageIcon("主食類//紅燒肉.jpg");//創(chuàng)建一個圖標(biāo) jl2 = new JLabel(img); img=new ImageIcon("主食類//紅燒豬蹄.jpg"); jl3 = new JLabel(img);img=new ImageIcon("主食類//家常炒面.jpg"); jl4 = new JLabel(img);img=new ImageIcon("小炒類//家常小炒.jpg"); jl5 = new JLabel(img);img=new ImageIcon("小炒類//木須肉.jpg"); jl6 = new JLabel(img);img=new ImageIcon("小炒類//小炒圓白菜.jpg"); jl7 = new JLabel(img);img=new ImageIcon("蔬菜類//苦瓜炒蛋.jpg"); jl8 = new JLabel(img);img=new ImageIcon("蔬菜類//炒四季豆.jpg"); jl9 = new JLabel(img);img=new ImageIcon("蔬菜類//涼拌土豆絲.jpg"); jl10 = new JLabel(img);jl11 = new JLabel("39",JLabel.CENTER);jl12 = new JLabel("39",JLabel.CENTER);jl13 = new JLabel("39",JLabel.CENTER);jl14 = new JLabel("28",JLabel.CENTER);jl15 = new JLabel("28",JLabel.CENTER);jl16 = new JLabel("28",JLabel.CENTER);jl17 = new JLabel("18",JLabel.CENTER);jl18 = new JLabel("18",JLabel.CENTER);jl19 = new JLabel("18",JLabel.CENTER);jcb1 = new JCheckBox("紅燒肉");jcb2 = new JCheckBox("紅燒豬蹄");jcb3 = new JCheckBox("家常炒面");jcb4 = new JCheckBox("家常小炒");jcb5 = new JCheckBox("木須肉");jcb6 = new JCheckBox("小炒圓白菜");jcb7 = new JCheckBox("苦瓜炒蛋");jcb8 = new JCheckBox("炒四季豆");jcb9 = new JCheckBox("涼拌土豆絲");jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp5 = new JPanel();jp6 = new JPanel();jp7 = new JPanel();//將面板添加到選項(xiàng)卡窗格上jtp.add("熱銷菜式", jp2);jtp.add("小炒類", jp3);jtp.add("蔬菜類", jp4);jtp.add("主食類", jp5);jtp.add("甜品類", jp6);jtp.add("飲品類", jp7);jtp2.add("菜式導(dǎo)航", jp8);//設(shè)置布局 jp2.setLayout(new GridLayout(9,3));jp3.setLayout(new GridLayout(9,3));jp4.setLayout(new GridLayout(9,3));jp5.setLayout(new GridLayout(9,3));jp6.setLayout(new GridLayout(9,3));jp7.setLayout(new GridLayout(9,3));jp8.setLayout(new GridLayout(15,1));jp9.setLayout(new GridLayout(6,1)); jp9.setPreferredSize(new Dimension(250, 0)); //指定action 命令 jb1.addActionListener(this);jb1.setActionCommand("取消");jb2.addActionListener(this);jb2.setActionCommand("下單");jb3.addActionListener(this);jb3.setActionCommand("加單");jb4.addActionListener(this);jb4.setActionCommand("結(jié)賬"); jb6.addActionListener(this);jb6.setActionCommand("熱銷菜式");jb7.addActionListener(this);jb7.setActionCommand("小炒類");jb8.addActionListener(this);jb8.setActionCommand("蔬菜類");jb9.addActionListener(this);jb9.setActionCommand("主食類");jb10.addActionListener(this);jb10.setActionCommand("甜品類");jb11.addActionListener(this);jb11.setActionCommand("飲品類");//添加組件jp1.add(jb1);jp1.add(jb2);jp1.add(jb3);jp1.add(jb4);jp2.add(jl2);jp2.add(jl3);jp2.add(jl4);jp2.add(jl11);jp2.add(jl12);jp2.add(jl13); jp2.add(jcb1); jp2.add(jcb2); jp2.add(jcb3); jp2.add(jl5);jp2.add(jl6);jp2.add(jl7);jp2.add(jl14);jp2.add(jl15);jp2.add(jl16);jp2.add(jcb4); jp2.add(jcb5); jp2.add(jcb6);jp2.add(jl8);jp2.add(jl9);jp2.add(jl10);jp2.add(jl17);jp2.add(jl18);jp2.add(jl19);jp2.add(jcb7); jp2.add(jcb8); jp2.add(jcb9);jp8.add(jb6);jp8.add(jb7);jp8.add(jb8);jp8.add(jb9);jp8.add(jb10);jp8.add(jb11);jp9.add(jl20);jp9.add(jcb11);jp9.add(jl21);jp9.add(jtf2);jp9.add(jl22);jp9.add(jsp);//續(xù)中部區(qū)域//小炒類img=new ImageIcon("小炒類//豆角炒臘肉.jpg"); jl2 = new JLabel(img); img=new ImageIcon("小炒類//家常小炒.jpg"); jl3 = new JLabel(img);img=new ImageIcon("小炒類//木須肉.jpg"); jl4 = new JLabel(img);img=new ImageIcon("小炒類//農(nóng)家小炒肉.jpg"); jl5 = new JLabel(img);img=new ImageIcon("小炒類//四季豆小炒肉.jpg"); jl6 = new JLabel(img);img=new ImageIcon("小炒類//小炒牛肉.jpg"); jl7 = new JLabel(img);img=new ImageIcon("小炒類//小炒香菇黃瓜條.jpg"); jl8 = new JLabel(img);img=new ImageIcon("小炒類//小炒圓白菜.jpg"); jl9 = new JLabel(img);img=new ImageIcon(); jl10 = new JLabel(img); jl11 = new JLabel("28",JLabel.CENTER);jl12 = new JLabel("28",JLabel.CENTER);jl13 = new JLabel("28",JLabel.CENTER);jl14 = new JLabel("28",JLabel.CENTER);jl15 = new JLabel("28",JLabel.CENTER);jl16 = new JLabel("28",JLabel.CENTER);jl17 = new JLabel("28",JLabel.CENTER);jl18 = new JLabel("28",JLabel.CENTER);jl19 = new JLabel("",JLabel.CENTER);jcb1 = new JCheckBox("豆角炒臘肉");jcb2 = new JCheckBox("家常小炒");jcb3 = new JCheckBox("木須肉");jcb4 = new JCheckBox("農(nóng)家小炒肉");jcb5 = new JCheckBox("四季豆小炒肉");jcb6 = new JCheckBox("小炒牛肉");jcb7 = new JCheckBox("小炒香菇黃瓜條");jcb8 = new JCheckBox("小炒圓白菜"); jp3.add(jl2);jp3.add(jl3);jp3.add(jl4);jp3.add(jl11);jp3.add(jl12);jp3.add(jl13);jp3.add(jcb1); jp3.add(jcb2); jp3.add(jcb3);jp3.add(jl5);jp3.add(jl6);jp3.add(jl7);jp3.add(jl14);jp3.add(jl15);jp3.add(jl16);jp3.add(jcb4); jp3.add(jcb5); jp3.add(jcb6);jp3.add(jl8); jp3.add(jl9);jp3.add(jl10);jp3.add(jl17);jp3.add(jl18);jp3.add(jl19);jp3.add(jcb7); jp3.add(jcb8);//蔬菜類img=new ImageIcon("蔬菜類//炒四季豆.jpg"); jl2 = new JLabel(img); img=new ImageIcon("蔬菜類//苦瓜炒蛋.jpg"); jl3 = new JLabel(img);img=new ImageIcon("蔬菜類//涼拌土豆絲.jpg"); jl4 = new JLabel(img);img=new ImageIcon("蔬菜類//茄子肉末.jpg"); jl5 = new JLabel(img);img=new ImageIcon("蔬菜類//豌豆炒雞米.jpg"); jl6 = new JLabel(img);img=new ImageIcon("蔬菜類//蝦醬荷蘭豆.jpg"); jl7 = new JLabel(img);img=new ImageIcon("蔬菜類//腰果玉米.jpg"); jl8 = new JLabel(img);img=new ImageIcon(); jl9 = new JLabel(img);img=new ImageIcon(); jl10 = new JLabel(img); jl11 = new JLabel("18",JLabel.CENTER);jl12 = new JLabel("18",JLabel.CENTER);jl13 = new JLabel("18",JLabel.CENTER);jl14 = new JLabel("18",JLabel.CENTER);jl15 = new JLabel("18",JLabel.CENTER);jl16 = new JLabel("18",JLabel.CENTER);jl17 = new JLabel("18",JLabel.CENTER);jl18 = new JLabel("",JLabel.CENTER);jl19 = new JLabel("",JLabel.CENTER); jcb1 = new JCheckBox("炒四季豆");jcb2 = new JCheckBox("苦瓜炒蛋");jcb3 = new JCheckBox("涼拌土豆絲");jcb4 = new JCheckBox("茄子肉末");jcb5 = new JCheckBox("豌豆炒雞米");jcb6 = new JCheckBox("蝦醬荷蘭豆");jcb7 = new JCheckBox("腰果玉米"); jp4.add(jl2);jp4.add(jl3);jp4.add(jl4);jp4.add(jl11);jp4.add(jl12);jp4.add(jl13);jp4.add(jcb1); jp4.add(jcb2); jp4.add(jcb3);jp4.add(jl5);jp4.add(jl6);jp4.add(jl7);jp4.add(jl14);jp4.add(jl15);jp4.add(jl16);jp4.add(jcb4); jp4.add(jcb5); jp4.add(jcb6);jp4.add(jl8); jp4.add(jl9);jp4.add(jl10);jp4.add(jl17);jp4.add(jl18);jp4.add(jl19);jp4.add(jcb7); //主食類img=new ImageIcon("主食類//紅燒肉.jpg"); jl2 = new JLabel(img); img=new ImageIcon("主食類//紅燒豬蹄.jpg"); jl3 = new JLabel(img);img=new ImageIcon("主食類//家常炒面.jpg"); jl4 = new JLabel(img);img=new ImageIcon("主食類//金牌海鮮炒飯.jpg"); jl5 = new JLabel(img);img=new ImageIcon("主食類//糖醋排骨.jpg"); jl6 = new JLabel(img);img=new ImageIcon("主食類//新奧爾良烤翅.jpg"); jl7 = new JLabel(img);img=new ImageIcon("主食類//照燒雞腿.jpg"); jl8 = new JLabel(img);img=new ImageIcon(); jl9 = new JLabel(img);img=new ImageIcon(); jl10 = new JLabel(img); jl11 = new JLabel("39",JLabel.CENTER);jl12 = new JLabel("39",JLabel.CENTER);jl13 = new JLabel("39",JLabel.CENTER);jl14 = new JLabel("39",JLabel.CENTER);jl15 = new JLabel("39",JLabel.CENTER);jl16 = new JLabel("39",JLabel.CENTER);jl17 = new JLabel("39",JLabel.CENTER);jl18 = new JLabel("",JLabel.CENTER);jl19 = new JLabel("",JLabel.CENTER);jcb1 = new JCheckBox("紅燒肉");jcb2 = new JCheckBox("紅燒豬蹄");jcb3 = new JCheckBox("家常炒面");jcb4 = new JCheckBox("金牌海鮮炒飯");jcb5 = new JCheckBox("糖醋排骨");jcb6 = new JCheckBox("新奧爾良烤翅");jcb7 = new JCheckBox("照燒雞腿"); jp5.add(jl2);jp5.add(jl3);jp5.add(jl4);jp5.add(jl11);jp5.add(jl12);jp5.add(jl13);jp5.add(jcb1); jp5.add(jcb2); jp5.add(jcb3);jp5.add(jl5);jp5.add(jl6);jp5.add(jl7);jp5.add(jl14);jp5.add(jl15);jp5.add(jl16);jp5.add(jcb4); jp5.add(jcb5); jp5.add(jcb6);jp5.add(jl8); jp5.add(jl9);jp5.add(jl10);jp5.add(jl17);jp5.add(jl18);jp5.add(jl19);jp5.add(jcb7); //甜品類img=new ImageIcon("甜品類//紅豆馬蹄糕.jpg"); jl2 = new JLabel(img); img=new ImageIcon("甜品類//紅糖雞蛋.jpg"); jl3 = new JLabel(img);img=new ImageIcon("甜品類//榴蓮酥.jpg"); jl4 = new JLabel(img);img=new ImageIcon("甜品類//芒果糯米糍.jpg"); jl5 = new JLabel(img);img=new ImageIcon("甜品類//全麥小餐包.jpg"); jl6 = new JLabel(img);img=new ImageIcon("甜品類//雜果榴蓮冰.jpg"); jl7 = new JLabel(img);img=new ImageIcon("甜品類//紫薯湯圓.jpg"); jl8 = new JLabel(img);img=new ImageIcon(); jl9 = new JLabel(img);img=new ImageIcon(); jl10 = new JLabel(img); jl11 = new JLabel("12",JLabel.CENTER);jl12 = new JLabel("12",JLabel.CENTER);jl13 = new JLabel("12",JLabel.CENTER);jl14 = new JLabel("12",JLabel.CENTER);jl15 = new JLabel("12",JLabel.CENTER);jl16 = new JLabel("12",JLabel.CENTER);jl17 = new JLabel("12",JLabel.CENTER);jl18 = new JLabel("",JLabel.CENTER);jl19 = new JLabel("",JLabel.CENTER);jcb1 = new JCheckBox("紅豆馬蹄糕");jcb2 = new JCheckBox("紅糖雞蛋");jcb3 = new JCheckBox("榴蓮酥");jcb4 = new JCheckBox("芒果糯米糍");jcb5 = new JCheckBox("全麥小餐包");jcb6 = new JCheckBox("雜果榴蓮冰");jcb7 = new JCheckBox("紫薯湯圓"); jp6.add(jl2);jp6.add(jl3);jp6.add(jl4);jp6.add(jl11);jp6.add(jl12);jp6.add(jl13);jp6.add(jcb1); jp6.add(jcb2); jp6.add(jcb3);jp6.add(jl5);jp6.add(jl6);jp6.add(jl7);jp6.add(jl14);jp6.add(jl15);jp6.add(jl16);jp6.add(jcb4); jp6.add(jcb5); jp6.add(jcb6);jp6.add(jl8); jp6.add(jl9);jp6.add(jl10);jp6.add(jl17);jp6.add(jl18);jp6.add(jl19);jp6.add(jcb7); //飲品類img=new ImageIcon("飲品類//補(bǔ)氣養(yǎng)顏飲.jpg"); jl2 = new JLabel(img); img=new ImageIcon("飲品類//玫瑰陳皮飲.jpg"); jl3 = new JLabel(img);img=new ImageIcon("飲品類//梅子冬瓜飲.jpg"); jl4 = new JLabel(img);img=new ImageIcon("飲品類//木瓜紅棗飲.jpg"); jl5 = new JLabel(img);img=new ImageIcon("飲品類//蘋果牛奶飲.jpg"); jl6 = new JLabel(img);img=new ImageIcon("飲品類//蘋果雪梨飲.jpg"); jl7 = new JLabel(img);img=new ImageIcon("飲品類//肉桂姜糖飲.jpg"); jl8 = new JLabel(img);img=new ImageIcon(); jl9 = new JLabel(img);img=new ImageIcon(); jl10 = new JLabel(img); jl11 = new JLabel("28",JLabel.CENTER);jl12 = new JLabel("28",JLabel.CENTER);jl13 = new JLabel("28",JLabel.CENTER);jl14 = new JLabel("28",JLabel.CENTER);jl15 = new JLabel("28",JLabel.CENTER);jl16 = new JLabel("28",JLabel.CENTER);jl17 = new JLabel("28",JLabel.CENTER);jl18 = new JLabel("",JLabel.CENTER);jl19 = new JLabel("",JLabel.CENTER);jcb1 = new JCheckBox("補(bǔ)氣養(yǎng)顏飲");jcb2 = new JCheckBox("玫瑰陳皮飲");jcb3 = new JCheckBox("梅子冬瓜飲");jcb4 = new JCheckBox("木瓜紅棗飲");jcb5 = new JCheckBox("蘋果牛奶飲");jcb6 = new JCheckBox("蘋果雪梨飲");jcb7 = new JCheckBox("肉桂姜糖飲"); jp7.add(jl2);jp7.add(jl3);jp7.add(jl4);jp7.add(jl11);jp7.add(jl12);jp7.add(jl13);jp7.add(jcb1); jp7.add(jcb2); jp7.add(jcb3);jp7.add(jl5);jp7.add(jl6);jp7.add(jl7);jp7.add(jl14);jp7.add(jl15);jp7.add(jl16);jp7.add(jcb4); jp7.add(jcb5); jp7.add(jcb6);jp7.add(jl8); jp7.add(jl9);jp7.add(jl10);jp7.add(jl17);jp7.add(jl18);jp7.add(jl19);jp7.add(jcb7); // 展示組件 jf = new JFrame("點(diǎn)菜系統(tǒng)");jf.setSize(860, 635);jf.setJMenuBar(jm1);jf.setLayout(new BorderLayout(10,0)); //組件間距 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setLocationRelativeTo(null);jf.setVisible(true);jf.add(jp1,BorderLayout.SOUTH);jf.add(jl1,BorderLayout.NORTH); jf.add(jtp,BorderLayout.CENTER);jf.add(jtp2,BorderLayout.WEST);jf.add(jp9,BorderLayout.EAST);}//監(jiān)聽器public void actionPerformed(ActionEvent e) { //判斷哪個按鈕被點(diǎn)擊switch(e.getActionCommand()) {case "取消":ForJCheckBox(jp2);ForJCheckBox(jp3);ForJCheckBox(jp4);ForJCheckBox(jp5);ForJCheckBox(jp6);ForJCheckBox(jp7);break;case "下單":if(B && ForJCheckBoxnum(jp9)) { ForJCheckBoxStr(jp2,data,names,model,jt);ForJCheckBoxStr(jp3,data,names,model,jt);ForJCheckBoxStr(jp4,data,names,model,jt);ForJCheckBoxStr(jp5,data,names,model,jt);ForJCheckBoxStr(jp6,data,names,model,jt);ForJCheckBoxStr(jp7,data,names,model,jt); jp9.add(jsp);B = false;}else if(ForJCheckBoxnum(jp9) == false) {JOptionPane.showMessageDialog(null, "請輸入用餐人數(shù)", "下單錯誤", JOptionPane.ERROR_MESSAGE);}else {JOptionPane.showMessageDialog(null, "您已下單,若需要點(diǎn)菜請點(diǎn)擊加單按鈕", "下單錯誤", JOptionPane.ERROR_MESSAGE);ForJCheckBox(jp2);ForJCheckBox(jp3);ForJCheckBox(jp4);ForJCheckBox(jp5);ForJCheckBox(jp6);ForJCheckBox(jp7);}break;case "加單": if(B == false) { ForJCheckBoxStr(jp2,data,names,model,jt);ForJCheckBoxStr(jp3,data,names,model,jt);ForJCheckBoxStr(jp4,data,names,model,jt);ForJCheckBoxStr(jp5,data,names,model,jt);ForJCheckBoxStr(jp6,data,names,model,jt);ForJCheckBoxStr(jp7,data,names,model,jt);jp9.add(jsp);}else {JOptionPane.showMessageDialog(null, "您還未下單,請先點(diǎn)擊下單按鈕", "加單錯誤", JOptionPane.ERROR_MESSAGE);ForJCheckBox(jp2);ForJCheckBox(jp3);ForJCheckBox(jp4);ForJCheckBox(jp5);ForJCheckBox(jp6);ForJCheckBox(jp7);} break;case "結(jié)賬":if(jt.getRowCount() != 0) {int res = JOptionPane.showConfirmDialog(null, "是否繼續(xù)操作", "結(jié)賬提示", JOptionPane.YES_NO_OPTION);if (res == JOptionPane.YES_OPTION) {JDialog FRAME = new JDialog();//構(gòu)造一個新的JFrame,作為新窗口。FRAME.setSize(1000, 400);FRAME.setLocation(300, 200);FRAME.setBounds(new Rectangle((int) jf.getBounds().getX() + 50,(int) jf.getBounds().getY() + 50, (int) jf.getBounds().getWidth(), (int) jf.getBounds().getHeight())); FRAME.add(jsp,BorderLayout.NORTH);JButton button = new JButton("結(jié)賬");FRAME.add(button,BorderLayout.WEST);button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){FRAME.dispose();}});try {ForJCheckBoxnum(jp9,FRAME);} catch (IOException e1) {e1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} FRAME.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);// 設(shè)置模式類型。 FRAME.setVisible(true);B = true;((DefaultTableModel)jt.getModel()).getDataVector().clear();// 清空前一人的菜單 break;} else {break;}}else {JOptionPane.showMessageDialog(null, "您還未下單,不能進(jìn)行結(jié)賬", "結(jié)賬錯誤", JOptionPane.ERROR_MESSAGE);ForJCheckBox(jp2);ForJCheckBox(jp3);ForJCheckBox(jp4);ForJCheckBox(jp5);ForJCheckBox(jp6);ForJCheckBox(jp7);}case "熱銷菜式":jtp.setSelectedIndex(0);//切換卡片break;case "小炒類":jtp.setSelectedIndex(1);break;case "蔬菜類":jtp.setSelectedIndex(2);break;case "主食類":jtp.setSelectedIndex(3);break;case "甜品類":jtp.setSelectedIndex(4);break;case "飲品類":jtp.setSelectedIndex(5);break;}}//將已勾選的取消void ForJCheckBox(JPanel p) {int count = p.getComponentCount();for (int i = 0; i < count; i++) {Component comp = p.getComponent(i);if(comp instanceof JCheckBox){JCheckBox jcb = (JCheckBox)comp;if(jcb.isSelected()) {jcb.setSelected(false); }}}}//記錄餐桌號、用餐人數(shù)、時間、菜名、價格、總金額void ForJCheckBoxnum(JPanel p,JDialog FRAME) throws SQLException, IOException {String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=shop";String userName="sa";String userPwd="123456";Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);Statement state=dbConn.createStatement();PreparedStatement ps=dbConn.prepareStatement("insert into fo1(nu,name,bool) values(?,?,?)");for(int i=0; i<jt.getRowCount(); i++){String str = (String)jt.getValueAt(i, 0);ps.setString(1,jg[jcb11.getSelectedIndex()]);ps.setString(2,str);ps.setInt(3,0);ps.executeUpdate();}int rowCount=jt.getRowCount();int sum = 0;String b = null;for(int i=0; i<rowCount; i++) {String str = (String)jt.getValueAt(i, 0);//取得第i行第一列的數(shù)據(jù)str = ((String)jt.getValueAt(i, 1));//取得第i行第二列的數(shù)據(jù)try {int a = Integer.parseInt(str);sum = sum+a;b = Integer.toString(sum);} catch (NumberFormatException e) {e.printStackTrace();}}PreparedStatement ps2=dbConn.prepareStatement("insert into zo(桌號,人數(shù),總金額) values(?,?,?)");ps2.setString(1,jg[jcb11.getSelectedIndex()]);ps2.setString(2,jtf2.getText());ps2.setString(3,b);ps2.executeUpdate();JLabel JL = new JLabel("總金額:"+b,JLabel.CENTER);FRAME.add(JL,BorderLayout.SOUTH);}//判斷是否輸入用餐人數(shù)boolean ForJCheckBoxnum(JPanel p) {int count = p.getComponentCount();for(int i=0; i<count; i++) {Component comp = p.getComponent(i);if(comp instanceof JTextField) {JTextField jtf = (JTextField)comp;if(jtf.getText().equals(""))return false;}}return true;}//向JTable添加已點(diǎn)菜式及價格void ForJCheckBoxStr(JPanel p,Vector data,Vector names,DefaultTableModel model,JTable jt) { int count = p.getComponentCount();for(int i=0; i<count; i++) {Component comp = p.getComponent(i);if(comp instanceof JCheckBox) {JCheckBox jcb = (JCheckBox)comp;if(jcb.isSelected()) {jcb.setSelected(false); Component Comp = p.getComponent(i-3);JLabel jl = (JLabel)Comp; Vector Row = new Vector();Row.add(jcb.getText());Row.add(jl.getText());data.add(Row.clone());model = new DefaultTableModel(data, names); jt.setModel(model);}}}} }7. 項(xiàng)目課題總結(jié)
本課題使用面向?qū)ο筌浖こ谭椒?#xff0c;進(jìn)行的分析與設(shè)計(jì),使用面向java編程技術(shù),進(jìn)行的系統(tǒng)實(shí)現(xiàn),有如下優(yōu)點(diǎn):
(1)本課題采用面向?qū)ο蠓治雠c設(shè)計(jì)方法,對同類型軟件開發(fā)的分析設(shè)計(jì)過程提供一定的參考。
(2)極大增強(qiáng)程序的擴(kuò)展性。對某一對象單獨(dú)修改,會反映整個體系。
(3)提高了開發(fā)效率,更加符合人類的思維。
(4)java語言可以“一次編譯,到處運(yùn)行”。
本課題還有如下需要改進(jìn)的地方:
(1)配套的接單功能
(2)數(shù)據(jù)的存儲不夠合理
(3)數(shù)據(jù)關(guān)系設(shè)計(jì)不夠合理
(4)可以根據(jù)產(chǎn)品銷量對產(chǎn)品進(jìn)行排序,向客戶進(jìn)行推薦
(5)可以添加評論區(qū)以供用戶對產(chǎn)品進(jìn)行評價
(6)可以添加預(yù)購功能方便個性化訂餐
(7)可以添加用戶注冊功能配合用戶管理系統(tǒng)方便用戶管理
總結(jié)
以上是生活随笔為你收集整理的Java餐厅点餐系统【附源码报告】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搞定Linux Shell文本处理工具,
- 下一篇: 餐厅扫码点餐系统源码 外卖订餐小程序源码