基于java的餐厅点菜系统.docx
《基于java的餐厅点菜系统.docx》由会员分享,可在线阅读,更多相关《基于java的餐厅点菜系统.docx(22页珍藏版)》请在冰豆网上搜索。
![基于java的餐厅点菜系统.docx](https://file1.bdocx.com/fileroot1/2023-2/6/36c13987-079b-4814-9738-152cbb0d99c6/36c13987-079b-4814-9738-152cbb0d99c61.gif)
基于java的餐厅点菜系统
课程名称:
计算机科学与技术
设计名称:
基于java的餐厅点菜系统
姓名:
邱琼琼
学号:
28
班级:
12计科2
指导教师:
浮盼盼
起止日期:
20164-20165
信息工程学院制
方向设计任务书
学生班级:
通信0901学生姓名:
**学号*********
设计名称:
基于java的餐厅点菜系统
起止日期:
2012.11.20——2012.12.15指导教师:
江虹、罗智
设计要求:
1、利用java设计一个餐厅点菜系统
2、有桌位号供顾客选择
3、在菜单显示中,可以浏览菜品及对应的价格
4、顾客可以随意选择自己喜欢的菜
5、可以增删选菜记录
6、生成账单
7、在账单界面显示消费总额、所选菜品及菜品总数
8、结账后清空数据库中的信息
9、独立完成整个设计
方向设计学生日志
时间
设计内容
2012.11.21—2012.11.25
熟悉餐厅点菜系统的原理
2012.11.02—2012.11.30
分析系统需要实现的功能,并针对每个功能做相应的准备
2012.11.27—2012.12.01
设计一个简单的界面,在此基础上增添基本功能
2012.12.02—2012.12.10
在实现功能的基础上进行调试、修改
2012.12.10—2012.12.15
增添功能,完善系统设计
2012.12.15—2012.12.18
在实现功能的基础上对系统的界面进行美化
2012.12.16—2012.12.20
整理文档,撰写报告
2012.12.23
答辩
方向设计评语表
指导教师评语:
成绩:
指导教师:
年月日
基于java的餐厅点菜系统
摘要
餐厅点菜系统是为了实现餐厅点菜自动化而设计的,不用人工服务员客人就可以自行完成点菜这一过程,从而避免了由于服务员的疏忽或者态度等问题为客人造成不必要的麻烦。
利用点菜系统可以及时、准确、高效的为客人提供服务,减少了很多繁琐的过程。
在开发餐厅点菜系统中,采用JAVA语言程序设计的基本知识,JAVA语言程序设计的基本方法和基本思想,运用数据库对表的基本操作,常用查询语句的使用以及ACCESS对表的数据的设计,利用图形化编程和JDBC技术来实现餐厅点菜系统的设计。
通过系统的开发掌握软件的基本的开发流程,了解系统的功能,从而掌握软件开发整体过程,把知识运用到实际生产中。
关键词点菜系统、高效、Access2003数据库、java
ABSTRACT
Restaurantordersystemisinordertorealizetheautomationandthedesignoftherestaurantorder,withoutartificialwaiterguestscanautomaticallycompletethisorderprocess,therebyavoidingthewaiter'scarelessnessorattitudestosuchissuesasgueststocauseunnecessarytrouble.Useordersystemcanoffertimely,accuratelyandeffectivelyservicefortheguestandreducealotofcumbersomeprocess.Inthedevelopmentoftherestaurantordersystem,usingthebasicknowledgeofJAVAprogramminglanguage,thebasicmethodandbasicidea,theuseofthebasicoperationonthedatabasetable,theuseofcommonqueriesandACCESStothedesignofthedatainthetable,theuseofgraphicalprogrammingandJDBCtechnology,toachievetherestaurantordersystemdesign.Throughthedevelopmentofthesystemtomasterthebasicsoftwaredevelopmentprocess,understandingthefunctionofthesystem,soastograspthewholeprocessofsoftwaredevelopment,usingtheknowledgetopracticalproduction
1、设计目的和意义
餐厅点菜系统所要完成的基本功能就是实现无服务生点菜,客人可以通过点菜系统自行点菜。
在餐厅里有很多种菜谱,每一种菜有一个名称,对应一个唯一的编号和一个固定的单位价格。
当有顾客来酒店时,顾客首先选择一个桌位号(也是唯一的),当顾客进入餐厅点菜系统后,就可以按照菜谱上有的菜来点菜。
顾客在结账时应付的钱为:
每种菜的单位价格相加为总的付款。
编程语言为java,利用Access2003作为后台数据库,该系统主要面向中小型餐饮企业提供餐饮点菜功能,系统后台数据库只有一张表,用于保存菜品名称、价格和桌位号。
通过本次课程设计可以加深对java语言程序设计基本知识的理解,掌握java语言程序编写和调试的基本技能,了解有关程序设计、程序开发的思路方法,提高利用软件程序解决实际问题的能力。
在设计过程中,可以培养我们分析问题、解决问题的能力,把理论与实际结合在一起,可以更好的掌握好一门语言,同时因为需要用到数据库,所以可以通过此次课程设计自学一下数据库,以及利用JDBC访问数据库。
二、设计原理
本设计主要用到java语言程序设计、SQL语言以及Access数据库。
这是一个JavaApplication,没有浏览器提供的现成的图形界面可以直接使用,所以需要首先创建自己的图形界面。
首先创建一个对话框,在其内容面板内添加两个组件按钮,当进入系统后,即可进入主菜单界面,此部分主要是要实现对按钮的监听事件,即使用addActionListener(this)事件监听器,事件处理接口的方法为actionPerformed(ActionEvente)。
在主界面,首先是完成窗体整体布局,在java的GUI界面设计中,布局控制是通过为容器设置布局管理器来实现的。
布局管理器负责确定组件在容器中的位置和大小。
当容器需要定位组件和确定组件大小时,就会给布局管理器对象法消息,让它完成该项工作。
Java.awt包中定义了5种布局管理器类,每个布局管理器类对应一种布局策略。
在此系统中,用到最多的布局管理器类有BorderLayout(组件按北、南、东、西、中几个位置排列)和GridLayout(以行和列的网络形式安排组件)。
然后因为要显示桌位号和菜品,利用单选按钮组来实现顾客的选菜功能,创建一个单选按钮组,提供选中/不选中两种状态,ButtonGroup是由一组互斥的按钮组成,同一时刻只能有一个按钮被选中,将桌位号的按钮组加入到此按钮组中。
菜品的显示也以单选按钮的方式显示在窗体界面中,这样顾客就可以选择自己喜欢的菜品,然后点击确定后就可将数据存入数据库中。
在java的编程中,需要用到Access数据库,启动进入Access后,创建一个数据库,然后定义表的列名与列的数据类型,分别用于存放桌位号、菜品名称及菜品价格。
为了实现在java程序中访问Access数据库,需要利用windows提供的工具创建指向数据库的数据源,这样在程序中通过数据源名即可访问Access中的数据库。
在对数据进行操作之前,首先要建立程序与一个具体数据库的连接,而在连接数据库以前,必须注册该数据库的驱动程序。
完成此项工作的是DriverManager类,它被称为驱动程序管理器,其基本功能是管理JDBC驱动程序。
Driver是java定义的一个接口,每一个驱动程序类都必须实现这个接口。
装载数据库驱动程序可以采用Class类的forName()方法,当对数据库的操作告一段落时,可通过调用Connection的close()方法结束会话,释放连接的数据库及JDBC资源。
JDBC是一种用于访问数据库和执行SQL语句的java编程接口,由一组用java语言编写的类和接口组成。
JDBC是用于java应用程序连接数据库的标准方法。
JDBC对java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。
JDBC使用已有的SQL标准并支持其他数据库连接标准,JDBC实现了所有这些面向标准的、简单且高性能的接口。
利用JDBC访问数据库大致包含以下三个步骤:
①建立与数据库的连接
②通过发送SQL语句对数据库进行读写
③处理语句的执行结果,特别是查询语句的返回数据
三、详细设计步骤
本系统采用基本的JAVA语言编写,由于JAVA语言不同与C++语言,它具有其语言的特殊性,包含很多类,基本是每一种功能为一个类。
开始有主框架类,通过按钮监听事件调用别的类,完成功能的实现。
其基本的流程为:
顾客来酒店选择桌号——>按照菜谱上的菜的种类选择所需要的菜——>然后按下确认键确定要选择的菜品——>统计所选择菜的价格——>结帐付款为所有菜的编号所相对应的价格相加并验证自己付款是否有误。
系统主要流程图如图1所示:
图1总体结构框图
根据功能需求,本系统包含有5个类,利用ACCESS建立一个表就可以了。
通过JAVA与该数据表的连接关系对该表的数据进行输入,然后通过顾客对数据的随机选择来调用数据表的数据,实现不同的功能。
系统的主要功能模块
首先进入系统初始界面,此界面由一个对话框构成,由
publicclassorderimplementsActionListener{}完成这个功能。
通过ContainercontentPane=Dialog.getContentPane()获得其内容面板,然后新建一个中间容器,在容器内添加两个按钮,分别表示进入系统和退出系统,点击按钮时,就可触发相应的ActionEvent事件,通过getActionCommand()获得按钮标签,当点击进入系统时关闭对话框,进入点菜系统主界面,否则即可退出系统。
当点击进入系统时,系统就进入点菜界面,用户可以在此窗口中选择自己喜欢的桌号和喜欢的菜品,要实现这个功能,需要用到的框架类为:
publicclassMenuimplementsActionListener,ItemListener{}
这部分的功能实现,首先是定义两个数组,分别用于存放餐桌号和菜品名单,创建两个单选按钮组,并指明其文本说明标签,即用于显示桌号和菜品名单及价格,然后将单选按钮组分别极加入到两个中间容器中,这样就可以看到桌位号和菜品名称及价格。
然后设置三个按钮,分别是确定、结账和取消按钮。
当顾客点击确定后,就将顾客所选择的桌号和菜品名单及价格存入数据库中,当顾客点击结账后,就可进入结账界面,当顾客点击取消按钮,就可将当前所选择的菜品删除掉,然后可以再重新选择顾客喜欢的菜品。
其主要流程图如图2所示:
图2点菜功能流程图
这部分主要是要实现将顾客所选择的桌号和菜品等数据存进数据库,调用DriverManaget类的静态方法getConnection建立一个数据库连接,并定义一个remark标志,当顾客选择了哪号桌或者哪个菜时,就可以向数据库中写入语句,这样,当用户点击确定后就保存数据。
这里主要是通过执行SQL语句访问数据库,然后执行查询返回的结果。
当点击一个单选按钮后,返回一个remark[i],当建立与数据库的连接后,执行SQL语句的写语句,向数据库中写入语句,当点击确定后,就保存数据。
当点击取消按钮时,执行SQL语句的删除语句,这样就可以将所点的菜清空,然后重新选择自己喜欢的菜品。
当在菜单窗口中按下结账按钮后,就会进入结账的界面,此时需要跳转到另一个类中运行,这个类为:
publicclassjiezhangimplementsActionListener{}
这部分主要是要从数据库中读取数据,然后顾客才能在结账界面看到自己点了几道菜以及都是些什么菜,总共花费是多少钱等。
向数据库发送SOL查询语句,利用executeQuery()方法就可返回一个ResultSet对象,最后通过while语句,就可实现其功能,通过sum(valuess)可以将顾客所点菜品总的价格统计相加起来,这样顾客就可以看到自己总共的消费了。
因为菜名在数据库中是以cname表示的,所以要在结账界面显示点了些什么菜,就需要向数据库执行查询语句,然后通过getString()获得其内容,然后显示在结账界面的文本域中。
总共点了多少道菜是通过while循环,得出数据库中总共写了几个数据,然后统计出总共点了多少菜。
结账后,将数据库中的数据删除,关闭数据库连接。
其主要流程图如图3所示:
图3结账功能流程图
当然,当顾客不止需要一个桌位时,可以先选择一个桌号,选好菜后点击确定按钮,保存数据,然后再选择一个桌号,选择菜品,点击确定,最后点击结账时,只需输入其中的一个桌号,就可看到自己总共的花费,这样既让顾客觉得方便,也省去了许多麻烦。
主程序在名为startSystemHere的类中运行,为
publicstaticvoidmain(Stringargs[])throwsException{neworder();}
5、设计结果及分析
各个模块功能的实现
打开餐厅点菜系统程序,会出现一个对话框,通过点击相应的按钮,就可进入或者退出系统。
界面如图4所示:
图4初始界面图
当用户点击进入系统按钮后,对话框关闭,进入主窗口界面,如图5所示:
图5主界面图
在主界面可以看到,有三个部分,第一部分显示的是桌位号,顾客可以选择一个自己喜欢的桌位号,然后第二部分显示的是菜品,那是一组单选按钮,不仅显示了菜的名称,而且还显示了菜的价格,这样顾客就可以很直观的选择菜品,最后第三部分是提示语,当客人点完菜后,再点击确定按钮,就可以将数据存入数据库中,比如说客人选择了桌位号2,所点的菜为澳洲小龙虾、重庆辣子鸡和尖椒腊肉,主界面的显示如图6:
图6顾客所点的菜示意图
那么在数据库中就可以看到如图7中的内容:
图7对应数据库中的数据
从图中可以看出,顾客在点菜界面所选择的菜品已经成功的存入了数据库,那么在结账时,就可将数据库中数据显示出来了。
在结账界面,会显示一个文本框,顾客需要输入自己之前所选择的桌号,然后点击确认按钮,会弹出一个对话框,顾客可以看到“谢谢惠顾!
”几个字,如图8所示:
图8对话框提示
再次点击确定后,就可以看到自己总共点了几道菜,一共花费了多少钱以及都点了哪些菜,便于顾客核对是否正确。
点击取消按钮,即可退出对话框,返回到点菜界面。
比如说上面顾客选择了2号桌,并且点了三个菜,在结账界面,输入桌位号2后,点击确定按钮后,就可以清楚的看到自己总的消费、都点了那些菜以及总共点了几道菜,如图9所示:
图59结账时所看到的结果图
从图中可以看出,客人所点的才与刚刚在点菜界面所点的菜品相同,总共的消费也是三个菜价格的总数,正好也是三道菜,所以,这个功能是实现了的。
从上面的截图中可以看出,此系统已经基本实现了餐厅点菜系统的功能。
在设计这个系统时,首先是看文件是否调入数据库包,是否和数据库建立连接,这一步很关键,因为之前就是因为这个问题浪费了很多时间,这一步关系到后面数据是否插入成功,和查询正确等。
然后检查查询语句是否书写正确,和数据库查询语言有着密切关系。
因为在写这个程序时在这方面遇到了很多问题,总是无法访问数据库中的数据,后来检查到数据库根本没有配置好,因为是初次接触,所以只是在Access创建了一个名为jiudian的数据库,却没有创建一个指向Access数据库的数据源,所以之前做的许多都无法实现其功能,后来通过查询有关资料,让问题得到了解决。
调试时主要是看是否为每个按钮添加监听事件,以让其产生响应。
在查询显示设计中,利用表格时方法,模板是否正确等。
在调试过程中,遇到了很多问题,比如说在向数据库中插入语句时,由于没有建立好数据源而导致无法再数据库中看到插入的数据,最后通过查阅资料使问题得到了解决。
当实现了与数据库的连接后,却发现无法将数据库中的内容读取出来,或者说能够通过查询语句将数据库中内容读出,然后通过一定的方法显示了出来,但是,却不能将顾客所点的菜品总数与消费多少相对应。
最后通过不断的修改代码,查阅资料,问老师同学等,很顺利的将问题解决了。
六、总结
这是一个基于java的餐厅点菜系统,通过对此系统的实现,对java的应用更加深化,不过要真正掌握好Java+JDBC+MySQL却并不是一件容易的事情,需要在不断的学习与应用中了解其中的精髓。
利用餐厅点菜系统对于餐厅以及人们的生活带来了很大的方便。
所以在这过程中,我只能利用自己有限的技术制作出一个比较实用的系统,由于时间仓促以及技术的不足,本系统实现的有一些功能还不是很完善,有的功能也并未真正实现。
由于是第一次利用Java写这种系统,之前也没有学过java,所以可能还有很多不足之处。
由于经验有限以及知识的不足,虽然书本上介绍了许多关于系统设计方面的知识和操作方法,但是毕竟还是限于理论方面的,所以理解起来比较困难,一切都是按自己的摸索来构建。
点菜系统要实现的功能模块比较少,所以在总体布局与页面设计方面理解与实现起来也比较容易,不是那么繁琐,都是java中最基本的东西。
然而,在对系统的各个功能模块的分析和设计中,因为没有接触过类似的情况,而至于系统的一些功能模块分析无从下手。
在实际设计当中也发现了很多问题。
由于对整个系统的设计理解不够深刻,加上分析做的不够深入、不够透彻就急于进入系统设计阶段,才导致了后来设计过程中出现的大量漏洞,不得不回头来重新分析和弥补漏洞。
比如起先认为很好的整个页面布局,然而由于没有考虑到设计软件等各方面的原因,使得原来设计好的布局不得不重新调整,有时又会由于忘了某个功能忘了放进去而又要重新调整,这样弄来弄去以致浪费了大量的时间。
另外,在涉及到各功能模块的链接时,往往由于事先没有一个总体的安排和考虑,以至于部分功能链接过程中出现了混乱的状态。
还有,由于自己平时在做数据库设计时不是非常细心,也没有做大量的数据分析,以至导致了后来在系统调试时出现了数据的乱码和错误。
所以,经过这次的设计,我更加深刻地认识到分析的重要性,它对于下阶段工作开展的顺利与否具有决定性的意义。
在整个系统的设计过程中,由于时间和各方面的原因,在设计过程中所使用的技术要求难度不高,代码只采用纯Java来实现;另外由于有些想好的功能限于本人技术有限,所以有些地方做得不是很好,还存在一些漏洞。
七、体会
本实验的设计是培养我们综合运用所学知识,提出,分析和解决实际问题,锻炼实践能力,提高我们用计算机JAVA语言编程来解决实际问题。
的确,从理解题目到完成整个编程,从理论到实践,通过本程序的设计,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
首先接触到这个问题时,就开始看java方面的书,首先得掌握好理论知识,然后才好将其在一定的实际问题中将理论转化为解决实际问题的方法。
JAVA语言作为一门高级实用的语言,在编程上具有很多独特的特点,通过本程序的设计,使我对java语言有了更进一步的理解和掌握,但是这只是学习JAVA语言的起步,要真正学好一门语言还有更深更广的知识要我去掌握,特别是JAVA语言中一些标准API接口函数。
对我来说,程序是有很大难度的,但通过反复尝试,编程还是有了结果。
8、参考文献
[1]王行言、印旻著.Java语言与面向对象程序设计(第二版):
清华大学出版社,2012年
[2]王珊、萨师煊著.数据库系统概论(第四版):
高等教育出版社,2011年
附源程序代码:
主程序:
publicclassstartSystemHere{
publicstaticvoidmain(Stringargs[])throwsException{
neworder();//进入初始对话框
}
}
初始界面:
publicclassorderimplementsActionListener{
privateJDialogDialog;
publicorder(){
Dialog=newJDialog();//新建一个对话框
Dialog.setTitle("餐厅点菜系统");//为该对话框设置标题
ContainercontentPane=Dialog.getContentPane();//获得其内容面板
JPanelbuttonPanel=newJPanel();//创建一个中间容器JPanel
JButtonb=newJButton("进入系统");//创建一个组件按钮
b.addActionListener(this);//为按钮添加事件监听器对象
buttonPanel.add(b);//将此按钮添加到中间容器
b=newJButton("退出系统");//再创建一个按钮
b.addActionListener(this);//为按钮增加事件监听器
buttonPanel.add(b);//将按钮添加到中间容器
buttonPanel.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.pink,2),"欢迎光临",
TitledBorder.CENTER,TitledBorder.TOP));
//将中间容器添加到内容面板
contentPane.add(buttonPanel,BorderLayout.CENTER);buttonPanel.setBackground(Color.pink);
Dialog.setBounds(230,230,200,200);
Dialog.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
Stringcmd=e.getActionCommand();
if(cmd.equals("进入系统")){
Dialog.dispose();//关闭对话框
newMenu().setVisible(true);//创建Frame窗口
}
if(cmd.equals("退出系统"))
System.exit(0);}}
主程序界面:
publicclassMenuimplementsActionListener,ItemListener{
//餐桌数
publicstaticfinalintC