点菜系统设计毕业论文.doc
毕业论文-点菜系统设计第一章:系统需求与可行性分析1.1 需求分析1.1.1 项目背景 二十一世纪是信息高度交流与发展的时代,随着人类社会的进步与发展,越来越多的信息已无法通过手工记录、人工管理来实现,信息在社会经济中发挥着越来越重要的作用。餐厅点菜管理系统是一个信息化管理软件,可以实现餐厅的点菜、订餐、员工管理等各项业务的信息化管理,整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,减少了人工操作的麻烦和误差,能更好地提高企业的管理模式,实现自动化。在大多数的餐饮场所点菜、查看菜谱等是人工完成的。这就需要通过大量的手工完成,速度慢,耗费人力多,而且极易出错,导致工作效率低,造成人力物力的极大浪费。为了节省人力和时间,避免不必要的错误,通过对此作认真细致的调查研究后,决定开发本系统。本文目的在于在现行餐饮管理的基础上,建立科学的计算机餐饮管理系统数据库,用计算机工作代替以往大量的人工劳动,提高工作效率,促进餐饮自动化,适应当今科学技术飞速发展的需要。1.1.2 开发目标 酒店点菜系统(菜单:编号,名称,价格;顾客:桌号,菜单编号,份数):在饭店可以按照酒店菜单点菜,实现无服务生点菜服务。1.1.3 功能需求在酒店里有很多种菜谱,每一种菜有一个名称,对应一个唯一的编号和一个固定的单位价格。当有顾客来酒店时,顾客选择一个桌号(也是唯一的),由于每一个桌子上有一份菜谱,顾客可以按照菜谱上有的菜来点菜。顾客在结账时应付的钱为:每种菜的单位价格相加为总的付款。其基本的流程为:顾客来酒店选择桌号>按照菜谱上的菜的种类选择所需要菜的对应编号>然后统计所选择菜的价格>结帐付款为所有菜的编号所相对应的价格相加并验证自己付款是否有误。1.1.4用户界面界面应简单直观,易于操作,采用图形化界面和大家熟悉的文本框、按钮、菜单等元素。1.2可行性研究1.2.1 技术可行性采用JAVA语言程序设计的基本知识,JAVA语言程序设计的基本方法和基本思想,以及运用数据库对表的基本操作,常用查询语句的使用。ACCESS对表的数据的设计;利用图形化编程和JDBC技术,来实现系统的简单运行。1.2.2 经济可行性 本系统在现行餐饮管理的基础上,建立科学的计算机餐饮管理系统数据库,用计算机工作代替以往大量的人工劳动,提高工作效率,促进餐饮自动化,适应当今科学技术飞速发展的需要。1.2.3 操作可行性 本系统对客户端的硬件要求是使用支持Java功能ACCESS对表的数据的设计;利用图形化编程和JDBC技术,来实现系统的简单运行。根据功能需求,本系统只需要一个类,利用ACCESS建立一个表就可以了。通过JAVA与该数据表的连接关系对该表的数据进行输入,然后通过顾客对数据的随机选择来调用数据表的数据,来实现不同的功能。因此在实现上不存在困难。第二章 系统设计与编译步骤 本系统采用基本的JAVA语言编写,由于JAVA语言不同与C+语言,它具有其语言的特殊性,包含很多类,基本是每一种功能为一个类。开始有主框架类,通过按钮监听事件调用别的类,完成功能的实现。2.1 用户界面的实现 2.1.1本系统的主要功能模快为:(1)。基本框架类public class jiudian implements ActionListener,ItemListener class jiudian1 implements ActionListener class jiezhang implements ActionListener(2)。单选钮被点击时触发函数public void itemStateChanged(ItemEvent e) (3)。主程序 public static void main(String args)throws Exception new jiudian(); new jiudian1(f); 2.1.2. 根据题目的要求和功能要求语言要调用的包如下: import java.sql.*;import javax.swing.*; /各种组件import java.awt.*;import java.awt.event.*;import javax.swing.border.*;2.1.3. 部分类的代码设计public jiudian() public jiudian1(JFrame f) /构造方法 Dialog=new JDialog(); /新建一对话框 Dialog.setTitle ("酒店管理系统"); /设置标题 Container contentPane=Dialog.getContentPane(); /获得其内容面板JPanel buttonPanel = new JPanel(); /创建一中间容器JPanelJButton b=new JButton("进入系统");/创建一原子组件按钮b.addActionListener(this);/为按钮添加事件监听器对象buttonPanel.add(b);/将此按钮添加到中间容器 b=new JButton("退出系统"); /再创建一按钮b.addActionListener(this);/为按钮增加事件监听器buttonPanel.add(b);/将按钮添加到中间容器buttonPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.green,2),"欢迎光临",TitledBorder.CENTER,TitledBorder.TOP);contentPane.add(buttonPanel,BorderLayout.CENTER);/将中间容器添加到面板Dialog.setBounds(250,250,200,200);Dialog.setVisible (true); this.f=f; / Dialog = new JDialog(f,"选择您想要的桌号和您喜欢的菜",true); f=new JFrame("选择您想要的桌号和您喜欢的菜");Container dialogPane=f.getContentPane(); dialogPane.setLayout(new GridLayout(3,1); JPanel p1=new JPanel(); /新建一个Panel p1.setLayout(new GridLayout(1,5);/设置边框 p1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder( Color.green,4),"选择桌号",TitledBorder.CENTER,TitledBorder.TOP);桌号按钮为:r1=new JRadioButton("one"); r2=new JRadioButton("two"); r3=new JRadioButton("three"); r4=new JRadioButton("four"); r5=new JRadioButton("five");菜谱按钮选择项按钮为:c1=new JRadioButton(" 小鸡炖蘑菇,价格为:25元/份"); c2=new JRadioButton(" 青椒炒肉, 价格为:18元/份"); c3=new JRadioButton(" 东北火锅, 价格为:36元/份");c4=new JRadioButton(" 豆腐炖鱼头,价格为:36元/份");如下图:为单选按钮增加ItemListener事件监听器r1.addItemListener(this); r2.addItemListener(this);r3.addItemListener(this); r4.addItemListener(this);r5.addItemListener(this);c1.addItemListener(this); c2.addItemListener(this); c3.addItemListener(this); c4.addItemListener(this);数据的输入为:以选择第一桌为例:case 1:switch(i) case 1: m=1;val=25;str="小鸡炖蘑菇" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); /break; case 2: m=1;val=18;str="青椒炒肉" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); /break; case 3: m=1;val=36;str="东北火锅" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); /break; case 4: m=1;val=36;str="豆腐炖鱼头" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); /break; break;结账按钮函数为:class jiezhang implements ActionListener JDialog Dialog; JLabel L1,L2,L3,L4,L5;JTextField F1=new JTextField();jiezhang(JFrame f)Dialog = new JDialog(f,"结账",true);Container dialogPane=Dialog.getContentPane();dialogPane.setLayout(new GridLayout(4,2); L1=new JLabel("请输入您的桌号",SwingConstants.CENTER); L2=new JLabel("您总共消费了:",SwingConstants.CENTER); L4=new JLabel("您总共点了:",SwingConstants.CENTER); L3=new JLabel("",SwingConstants.CENTER); L5=new JLabel("",SwingConstants.CENTER); dialogPane.add(L1); dialogPane.add(F1); dialogPane.add(L2); dialogPane.add(L3); dialogPane.add(L4); dialogPane.add(L5); JButton b1=new JButton("确定");dialogPane.add(b1);JButton b2=new JButton("取消");dialogPane.add(b2);b1.addActionListener(this);b2.addActionListener(this);Dialog.setBounds(400,400,300,300);Dialog.show();public void actionPerformed(ActionEvent e)String cmd=e.getActionCommand();if(cmd.equals("确定")tryClass.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con=DriverManager.getConnection("jdbc:odbc:jiudian","test","1234"); Statement stmt=con.createStatement(); int sa=Integer.parseInt(F1.getText(); ResultSet rs=stmt.executeQuery("select sum(values) from jiudian where id="+sa+""); while(rs.next() L3.setText(""+rs.getInt(1)+"元"); ResultSet rr=stmt.executeQuery("select * from jiudian");int j=0;while(rr.next() j=j+1;L5.setText(""+j+" 份菜"); stmt.executeUpdate("delete from jiudian wheid="+sa+"");JOptionPane.showMessageDialog (Dialog,"谢谢惠顾!","",JOptionPane.WARNING_MESSAGE);F1.setText("");stmt.close();con.close();catch(Exception em) if(cmd.equals("取消")Dialog.dispose();如下图:上述过程所对应的数据库中的数据为:2.4 调试分析:首先是看文件是否调入数据库包,是否和数据库建立连接,这一步很关键,关系到后面数据是否插入成功,和查询正确。(1) 查询语句是否书写正确,和数据库查询语言有着密切关系。(2) 是否为每个按钮添加监听事件,产生响应(3) 在查询显示设计中,利用表格时方法,模板是否正确(4) 测试结果在设计步骤中显示。3 小结:本实验的设计是培养我们综合运用所学知识,提出,分析和解决实际问题,锻炼实践能力,提高我们用计算机JAVA语言编程来解决实际问题。的确,从理解题目到完成整个编程,从理论到实践,通过本程序的设计,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。首先接触到这个问题时,就看到了这个学期学的JAVA语言在实际问题中的应用了,更加清楚了书本上的理论知识并不是单板的,而是将其在一定的实际问题中将理论转化为解决实际问题的方法。JAVA语言作为一门高级实用的语言,在编程上具有很多独特的特点,通过本程序的设计,使我对java语言有了更进一步的理解和掌握,但是这只是学习JAVA语言的起步,要真正学好一门语言还有更深更广的知识要我去掌握,特别是JAVA语言中一些标准API接口函数。对我来说,程序是有很大难度的,但通过反复尝试,编程还是有了结果。大大激发了我的编程兴趣。 附录程序源代码:import java.sql.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.border.*;public class jiudian implements ActionListener,ItemListener static JFrame f=null; /因为要在main静态方法中被引用,所以必须设为static类型 ButtonGroup bg; /按钮组,可组合若干单选按钮 JRadioButton r1,r2,r3,r4,r5; /单选按钮 JRadioButton c1,c2,c3,c4; /单选按钮 int op=0;static int i=0; public jiudian() / Dialog = new JDialog(f,"选择您想要的桌号和您喜欢的菜",true); f=new JFrame("选择您想要的桌号和您喜欢的菜");Container dialogPane=f.getContentPane(); dialogPane.setLayout(new GridLayout(3,1); JPanel p1=new JPanel(); /新建一个Panel p1.setLayout(new GridLayout(1,5);/设置边框 p1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder( Color.green,4),"选择桌号",TitledBorder.CENTER,TitledBorder.TOP);/单选按钮 r1=new JRadioButton("one"); r2=new JRadioButton("two"); r3=new JRadioButton("three"); r4=new JRadioButton("four"); r5=new JRadioButton("five"); p1.add(r1);p1.add(r2); p1.add(r3); p1.add(r4); p1.add(r5); bg=new ButtonGroup(); /按钮组,组合5个单选按钮,使一次只能选择一个 bg.add(r1);bg.add(r2); bg.add(r3);bg.add(r4);bg.add(r5); r1.addItemListener(this); /为单选按钮增加ItemListener事件监听器 r2.addItemListener(this); r3.addItemListener(this); r4.addItemListener(this); r5.addItemListener(this); JPanel p2=new JPanel(); /新建一个Pane1 p2.setLayout(new GridLayout(4,1);/设置边框 p2.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder( Color.green,4),"选择您喜欢的菜",TitledBorder.CENTER,TitledBorder.TOP);/单选钮 c1=new JRadioButton(" 小鸡炖蘑菇,价格为:25元/份"); c2=new JRadioButton(" 青椒炒肉, 价格为:18元/份"); c3=new JRadioButton(" 东北火锅, 价格为:36元/份"); c4=new JRadioButton(" 豆腐炖鱼头,价格为:36元/份"); p2.add(c1);p2.add(c2); p2.add(c3); p2.add(c4); c1.addItemListener(this); /为单选按钮增加ItemListener事件监听器 c2.addItemListener(this); c3.addItemListener(this); c4.addItemListener(this); JPanel p3=new JPanel(); /创建一个新的Panel p3.setLayout (new GridLayout(1,2); JButton button1=new JButton("确 定"); JButton button2=new JButton("结 帐"); p3.add(button1); p3.add(button2); button1.addActionListener (this); button2.addActionListener (this); /将三个Panel加在内容面板上 dialogPane.add(p1,BorderLayout.NORTH); dialogPane.add(p2,BorderLayout.CENTER); dialogPane.add(p3,BorderLayout.SOUTH); f.getRootPane ().setDefaultButton (button1); /设置窗体回车对应按钮 f.pack(); /排版 f.setBounds(250,250,400,400); f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent evt) System.exit(0);); public void itemStateChanged(ItemEvent e) /单选钮被点击时触发 if(e.getSource()=r1) op=1; if(e.getSource()=r2) op=2; if(e.getSource()=r3) op=3; if(e.getSource()=r4) op=4; if(e.getSource()=r5) op=5; if(e.getSource()=c1) i=1; if(e.getSource()=c2) i=2;if(e.getSource()=c3) i=3; if(e.getSource()=c4) i=4; public void actionPerformed(ActionEvent e) /单选按钮被点击时触发 String cmd = e.getActionCommand(); if (cmd.equals("确 定") tryClass.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con=DriverManager.getConnection("jdbc:odbc:jiudian","test","1234"); Statement stmt=con.createStatement(); int m=0,val=0;String str=null;String SQLOrder; switch (op) case 1: switch(i) case 1: m=1;val=25;str="小鸡炖蘑菇" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 2 m=1;val=18;str="青椒炒肉" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); case 3: m=1;val=36;str="东北火锅" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); case 4:m=1;val=36;str="豆腐炖鱼头" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder) break; case 2: switch(i) case 1:m=2;val=25;str="小鸡炖蘑菇" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 2:m=2;val=18;str="青椒炒肉" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 3: m=2;val=36;str="东北火锅" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 4:m=2;val=36;str="豆腐炖鱼头" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); case 3: switch(i) case 1: m=3;val=25;str="小鸡炖蘑菇" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); case 2: m=3;val=18;str="青椒炒肉" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 3: m=3;val=36;str="东北火锅" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 4:m=3;val=36;str="豆腐炖鱼头" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); break; case 4: switch(i) case 1:m=4;val=25;str="小鸡炖蘑菇" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 2:m=4;val=18;str="青椒炒肉" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); case 3:m=4;val=36;str="东北火锅" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 4: m=4;val=36;str="豆腐炖鱼头" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); break; case 5: switch(i) case 1: m=5;val=25;str="小鸡炖蘑菇" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 2: m=5;val=18;str="青椒炒肉". SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); case 3: m=5;val=36;str="东北火锅" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")" stmt.executeUpdate(SQLOrder); case 4: m=5;val=36;str="豆腐炖鱼头" SQLOrder="Insert Into jiudian Values ("+m+",'"+str+"',"+val+")"stmt.executeUpdate(SQLOrder); break; catch(Exception em) if(cmd.equals("结 帐") new jiezhang(f); public static void main(String args)throws Exception new jiudian(); new jiudian1(f); class jiudian1 implements ActionListener JFrame f; /类属性 JDialog Dialog; public jiudian1(JFrame f) /构造方法