[摘要] 传统的就餐方式往往会出现人们到餐厅就餐,排队或没有位置的现象。
因此,开发出图文并茂,信息能够及时更新与查看的网上订餐的系统就成为了解
决上述问题的主要途径。
网上订餐是近年来随着网络技术的发展而产生的一种新型的就餐方式。它与
传统就餐方式相比,网上订餐拥有很多优势,这样的订餐方式效果很好,既让顾
客觉得方便、快捷,又对每个订单的信息保管妥善、处理及时,实现了高度智能
化管理。网络订餐方式将成为餐饮业销售的新模式与新的增长点。
在开发网上订餐管理系统中,采用了 MySQL 数据库管理系统及 Java 主流开
发技术进行了实现流程规范化,数据灵活化配置一套网上订餐管理系统。
[关键词] 数据库管理系统 餐饮管理系统 系统设计 Java MySQL
[Abstract] Traditional dining way will often present people to restaurants, waiting in
line or no position phenomenon. Therefore, developed with pictures, information can
update and view online order system becomes the main ways of solving these
problems.
Online order is in recent years with the development of network technology and
produces a new dining way. Compared with the traditional it dining way, online order
has many advantages, such order way effect very good, already make customers feel
convenient, quick, and for each order information properly, the timely handling,
realize the highly intelligent management. The network will become the restaurant
industry sales order way of new pattern and new growth point.
In the development of online order management system, using the MySQL
database management system and Java development technology realize mainstream
realization of process standardization, the data included a catering management
system configuration.
[Key Words] Database Management System Catering Management System System Design
Java MySQL
1.综述
概述
近年来,随着人民的生活水平的不断提高,餐饮业的消费持续增长,竞争愈
来愈激烈。然而,传统餐饮企业的日常运作还是靠人工管理,从原材料入库到客
人点单,再到结账,基本上由人工完成记录,这样做不仅耗费人力资源而且容易
导致记录丢失或重复等错误,造成管理水平低下。这就迫切需要标准的、高效率
的计算机管理方式引导其发展,通过计算机管理该企业的日常运作,给管理者以
决策参考的模型,来不断完善管理水平,提高工作效率。
当今世界已进入了在计算机信息管理领域中激烈竞争的时代,应用计算机已
经变得十分普遍了,如同人们现在离不开的自行车、汽车一样。大家都应该承认,
谁掌握的知识多,信息量大,信息处理速度快,批量大,谁的效率就高,谁就能
够在各种竞争中立于不败之地。随着科学技术的不断提高,计算机科学日渐成熟,
其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越
重要的作用。越来越多的管理人员意识到信息管理的重要性。
作为计算机应用的一部分,使用计算机对餐饮企业信息进行管理,具有手工管
理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密
性好、寿命长、成本低等。这些优点能够极大地提高信息管理的效率,也是企业
的科学化、正规化管理与世界接轨的重要条件。
本系统选用 MySQL 数据库及配套的平台 Win 7。开发工具采用了 Java 编程
语言,设计出一个简单易操作的后台应用程序,实现对菜品、购物车的添加、查
询、结算、修改及删除功能。
使用本系统,员工可以方便快捷地添加菜品,并在购物车内进行快速结算。
选题背景和研究意义
面对餐饮业多元化的经营现状,经营的特色、规模、出品这些因素的不同,
带给餐饮企业的则是不同的标准和工作流程和方法,面对着这解决方法不一的情
况,对人才的专业化程度的要求也相应地提高了,然而在国内市场上,餐饮业人
才供应不足,在这样的两难情况下,网上订餐系统的出现暂缓了这一紧张局面。
首先,网上订餐管理系统不是单纯的用于结账计算的工具,它有着科学的、
标准的管理体系,它是通过对目前餐饮市场的具体情况科学的调研分析后设计而
成的,它能够针对中餐因其菜品的多样化和特色化的服务很难实现标准化管理,
使中餐企业的成本控制很难实现这些问题得到有效的解决。
其次,网上订餐管理系统能够给出具体的相应的符合企业自身要求的较科学
的标准化管理流程,这暂时缓解了专业人才的需求,通过使用该系统就能完成专
业人员所要做的事。
最后,网上订餐管理系统可以针对企业的经营现状而做出科学的分析,使得
企业对市场的应变能力得到了提高,从而通过餐饮管理系统来实现强化管理、降
低成本、堵漏节流等作用。更好的完善企业的经营管理,提高企业自身的竞争实
力。
现状
随着我国市场经济的快速发展,各行业都呈现出生机勃勃的发展景象,其中
餐饮业的发展尤为突出。近两年来已呈现出高速发展的态势。但在快速发展的同
时,餐饮业在日常经营管理中仍普遍采用手工管理方式,整体科技含量低。随着
餐饮企业规模和数量的不断增长,手工管理模式无论是在工作效率、人员成本,
还是提供决策信息方面都已难以适应现代化经营管理的要求,因此制约了整个餐
饮业的规模化发展和整体服务水平的提升。
这就要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要求客
户机的界面要简单明了,易于操作,服务器程序利于维护。目前市场上大多数餐
饮软件是基于 Windows 操作系统的,也有部分餐饮软件考虑到版权的问题,采
用 Linux 操作系统;又比如,系统数据库,有 Access、Sybase、MySQL、SQLServer
等,对于餐饮系统来说,采用什么数据库与餐厅的规模比较相关,较小的餐厅可
以采用比较简单的数据库如 Access,这样使用维护都可以做的比较简单,而规模
大的餐厅就应该用 SQLServer 这样的数据库,可以保障数据比较安全、系统比较
稳定,但同时也要求有专门的系统管理员来维护。还有,数据的录入通常有三种
方式,一是基于普通电脑,二是基于触摸屏,三是采用无线点菜系统,而无线技
术又有基于红外技术和基于无线网络的技术。从目前的发展趋势看,餐饮系统越
来越多的采用触摸屏,而无线技术正在逐步成熟起来。
在国内,餐饮软件的发展也正处于蓬勃发展的时期,如北京天良软件,它是
一家以软件开发、销售为主营方向的技术开发型企业。天良软件立足于餐饮及酒
店客房管理市场,致力于为客户提供一流的产品及服务,企业下设市场拓展部、
产品研发部、公关策划部、客户服务部等主要职能部门。
在国外发展比较成熟的软件还有龙腾触摸屏点菜系统,“龙腾餐饮管理系统”
软件采用了独特的组网技术,以 Window 为操作平台,全 32 为应用软件系统,
功能在国内处于领先地位。网络系统是以 Windows 搭成的对等网络,简单实用、
稳定可靠,保证企业非常迅速地把信息传递到各个点。这个系统适用于快餐企业、
西餐、火锅有勾划式菜单的餐饮企业,中高档中餐可以配合其他点菜设备一起使
用这个系统。
2.系统技术概述
java 程序开发技术
学习 java 方面的知识,最好应配合运用 java 语言设计出切实可行的软件。
Java 不仅是编程语言,还是一个开发平台,Java 技术给程序员提供了许多工具:
编译器、解释器、文档生成器和文件打包工具等等。同时 Java 还是一个程序发
布平台,有两种主要的“发布环境”,首先 Java 运行时环境(Java Runtime
Environment,简称 JRE)包含了完整的类文件包,其次许多主要的浏览器都提
供了 Java 解释器和运行时环境。目前 Sun 公司把 java 平台划分成 J2EE、J2SE、
J2ME 三个平台,针对不同的市场目标和设备进行定位。J2EE 是 Java2 Enterprise
Edition,主要目的是为企业计算提供一个应用服务器的运行和开发平台。J2EE
本身是一个开放的标准,任何软件厂商都可以推出自己的符合 J2EE 标准的产品,
使用户可以有多种选择。
Java 主要有以下特性:
1.Java 语言是简单的。Java 语言的语法与 C 语言和 C++语言很接近,使得
大多数程序员很容易学习和使用 Java。另一方面,Java 丢弃了 C++ 中很少使用
的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类
型转换。特别地,Java 语言不使用指针,并提供了自动的废料收集,使得程序员
不必为内存管理而担忧。
2.Java 语言是面向对象的。Java 语言提供类、接口和继承等原语,为了简
单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之
间的实现机制(关键字为 Implements)。Java 语言全面支持动态绑定,而 C++ 语
言只对虚函数使用动态绑定。总之,Java 语言是一个纯的面向对象程序设计语言。
3.Java 语言是分布式的。Java 语言支持 Internet 应用的开发,在基本的 Java
应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编
程的类库,包括 URL、URL Connection、Socket、Server Socket 等。Java 的 RMI(远
程方法激活)机制也是开发分布式应用的重要手段。
4.Java 语言是健壮的。Java 的强类型机制、异常处理、废料的自动收集等
是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全
检查机制使得 Java 更具健壮性。
5.Java 语言是安全的。Java 通常被用在网络环境中,为此,Java 提供了一
个安全机制以防恶意代码的攻击。除了 Java 语言具有的许多安全特性以外,Java
对通过网络下载的类具有一个安全防范机制(类 Class Loader),如分配不同的名
字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 Security
Manager)让 Java 应用设置安全哨兵。
6.Java 语言是体系结构中立的。Java 程序(后缀为.java 的文件)在 Java 平
台上被编译为体系结构中立的字节码格式(后缀为.class 的文件), 然后可以在
实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件
的分发。
7.Java 语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java
还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,
Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。
8.Java 语言是解释型的。如前所述,Java 程序在 Java 平台上被编译为字节
码格式, 然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平
台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶
段被载入到运行环境中。
9.Java 是高性能的。与那些解释型的高级脚本语言相比,Java 的确是高性
能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越
接近于 C++[4]。
MySQL 数据库系统技术
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前
属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存
在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高
了灵活性。MySQL 的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL
软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体
拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL
作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的
开发环境。
与其他的大型数据库例如 Oracle、DB2、SQL Server 等相比,MySQL 自有
它的不足之处,如规模小、功能有限(MySQLCluster 的功能和效率都相对比较
差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小
型企业来说,MySQL 提供的功能已经绰绰有余,而且由于 MySQL 是开放源码
软件,因此可以大大降低总体拥有成本。目前 Internet 上流行的网站构架方式是
LAMP(Linux+Apache+MySQL+PHP/Perl/Python)和 LNMP
(Linux+Nginx+MySQL+php/perl/Python),即使用 Linux 作为操作系统,Apache
和 Nginx 作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python 作为服务器端
脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这
种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统。
MySQL 系统主要有以下特性:
1.使用 C 和 C++编写,并使用了多种编译器进行测试,保证源代码的可移
植性
2.支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、
OpenBSD、OS/2 Wrap、Solaris、Windows 等多种操作系统
3.为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、
Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
4.支持多线程,充分利用 CPU 资源
5.优化的 SQL 查询算法,有效地提高查询速度
6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能
够作为一个库而嵌入到其他的软件中。
7.提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS
等都可以用作数据表名和数据列名。
8.提供 TCP/IP、ODBC 和 JDBC 等多种数据库连接途径。
9.提供用于管理、检查、优化数据库操作的管理工具。
10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
11.支持多种存储引擎。
系统数据库连接
JDBC 技术是 Java DataBase Connectivity 的缩写,它是 SUN 公司提供的一种
支持基本 SQL 功能的通用的应用程序接口(Application Programming Interface)。
它由一组用 Java 语言编写的类和接口组成。通过这些类和接口,程序开发人员
可以在 Java 语言中方便地建立与数据库的链接,通过执行相应 SQL 语句,完成
对不同数据库的访问。因此,开发人员使用 JDBC API 可以不必编写一个应用程
序来访问 Sybase 数据库,又另外编写一个应用程序去访问 Oracle 数据库,再写
一个应用程序访问的 MYSQL。不但如此,使用 Java 语言编写的应用程序可以在
任何支持 Java 的平台上运行,不必在不同的平台上开发不同的应用程序。
简单地说,JDBC 能完成下列三件事:
同一个数据库建立连接;
向数据库建立连接;
处理数据库返回的结果。
JDBC 是一种通用低层的应用程序编程接口,它在不同的数据库功能模块的
层次上提供一个统一的用户界面。说 JDBC 是一处低级的 API,是指它直接调用
SQL 命令,它比其他的一些数据库连接 API 要容易使用些,但它有同样可以作
为更高级的,用户办面更友好的 API 或开发工具基础。
很多可视化的 Java 开发工具,如 Visual Age For Java、Visual Café、J++等都
提供了基于 JDBC 的更面向用户的类和包,直接将关系数据库的表或视图映射
为 Java 类,程序员通过可视化工具直接对 Java 对象进行操作,而真正需要的
SQL 调用则根据程序员发出的对对象的各种属性、方法的操作来自动产生。另
一种使用 JDBC API 的方式为,用户程序可以提供一个界面(如菜单等)让用户
选择对数据库进行的操作,选中一个任务后,提示用户输入一些必要的信息,然
后根据用户的输入产生相应的 SQL 命令以及 Java 程序。通过这处方式,用户可
以完成对数据库的操作,即使他并不了解 SQL 语法以及 JDBC 编程。
数据库访问的三层结构如图 所示,浏览器端程序要访问数据库,首先通
过中间件,然后由中间件对数据库操作权限进行认证,认证通过才能对数据库进
行操作。
图 使用中间件的数据库访问三层结构
用户对数据库的存取权限认证是中间件中完成,对数据库的查询、插入、更
新和删除操作等都封装在中间件中,该中间件位于服务器端,中间件对数据库进
行操作后,再将处理结果通过 Web 服务器返回到浏览器端用户。这样,在用户
端输入的用户名和密码,可以通过加密算法进行加密后在网络上传输,在中间件
中进行解密认证,然后再进行数据库的存取操作,数据库存取权限的用户名和密
码出现在位于服务器端的中间件中,这样就更加安全。本系统采用的正是这样的
三层结构的数据库访问模式。
在三层模型中,命令将被发送到服务的”中间层”,而”中间层”将 SQL 语句
发送到数据库。数据库处理 SQL 语句并将结果返回”中间层”,然后”中间层”将
它们返回用户。其模型如图 所示。
图 JDBC 的三层模型
因为”中间层”可以进行对访问的控制并协同数据库的更新,并且可以使用一
个易用的高层 API,这个 API 可以由“中间层”进行转换,转换成低层的调用。所
以在许多种情况下,三层模型可以提供更好的性能,本系统中所采用的就是此种
模型。
JDBC 是 JAVA 应用程序与数据库的沟通桥梁。它提供了三项服务功能:一、
与数据库建立连接。二、将 SQL 语句传递给数据库。三、从数据库取得 SQL 语
句的执行结果。当 JDBC 要与数据库建立连接前,首先,它必须先取得连接此数
据库的 JDBC 驱动程序,()即是在执行此项工作。建立数据库连接
的第一步骤就是将 JDBC 驱动程序的类载入至 JVM(Java VirtualL Machine)中,
本系统中利用 类内的 forName()静态函数依据指定的类名称,
将 JDBC 驱动程序载入进来。完成载入驱动程序的步骤后,必须使用
类所提供的 getConnection()静态函数,取得与数据库间
的连接对象。此连接对象的类类型为 ,必须通过它才能将 SQL
指令传递给数据库,而执行结果也需要通过连接对象来取得。当取得连接对象后,
还必须取得 Statement 对象才能对数据库执行 SQL 指令。Statement 主要实现两
个功能:执行 SQL 语句以及取得执行结果。在 的 sql 对象中执
行查询或修改命令的函数后传回的是一个 ResultSet 对象,这个对象提供了一个
存取 SQL 执行结果的管道,以便通过它将表格数据从数据库中取出。每个
Statement 对象只能产生一个 ResultSet 对象。
数据库连接如图 所示:
图 数据库的连接处理
数据库的连接处理具体实现如下:
//建立 JDBC——ODBC 桥
;
//桥 建 立 不 成 功 时 的 错 误 处 理
catch(ClassNotFoundException event){}
//建立与数据库的连接,并发送 SQL 查询语句,将结果保存到 rs 对象中
Con=建立 JDBC——ODBC 桥
Sql=SQL 查 询 语 句
执 行 查 询
Rs=返 回 结 果
//SQL 出 错 处 理
catch(SQLException e1){}
有了 JDBC,向各种关系数据发送 SQL 语句就是一件很容易的事。换言之,
有了 JDBC API,就不必为访问 Sybase 数据库专门写一个程序,为访问 Oracle 数
据库又专门写一个程序,或为访问 Informix 数据库又编写另一个程序等等,程序
员只需用 JDBC API 写一个程序就够了,它可向相应数据库发送 SQL 调用。同
时,将 Java 语言和 JDBC 结合起来使程序员不必为不同的平台编写不同的应用
程序,只须写一遍程序就可以让它在任何平台上运行,这也是 Java 语言“编写一
次,处处运行”的优势。
Java 数据库连接体系结构是用于 Java 应用程序连接数据库的标准方法。
JDBC 对 Java 程序员而言是 API,对实现与数据库连接的服务提供商而言是接口
建立JDBC--ODBC桥
建立数据库连接
建立是否成功 出错处理
否
是
执行SQL操作
SQL是否出错 返回错误信息
返回执行结果
是
否
模型。作为 API,JDBC 为程序开发提供标准的接口,并为数据库厂商及第三方
中间件厂商实现与数据库的连接提供了标准方法。JDBC 使用已有的 SQL 标准并
支持与其它数据库连接标准,如 ODBC 之间的桥接。JDBC 实现了所有这些面向
标准的目标并且具有简单、严格类型定义且高性能实现的接口。
Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,
是编写数据库应用程序的杰出语言。所需要的只是 Java 应用程序与各种不同数
据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。
JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet
的网页,而该 applet 使用的信息可能来自远程数据库企业也可以用 JDBC 通过
Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机
有 Windows、 Macintosh 和 UNIX 等各种不同的操作系统)。随着越来越多的
程序员开始使用 Java 编程语言,对从 Java 中便捷地访问数据库的要求也在日
益增加。
MIS 管理员们都喜欢 Java 和 JDBC 的结合,因为它使信息传播变得容易
和经济。企业可继续使用它们安装好的数据库,并能便捷地存取信息,即使这些
信息是储存在不同数据库管理系统上。新程序的开发期很短。安装和版本控制将
大为简化。程序员可只编写一遍应用程序或只更新一次,然后将它放到服务器上,
随后任何人就都可得到最新版本的应用程序。对于商务上的销售信息服务, Java
和 JDBC 可为外部客户提供获取信息更新的更好方法。
简单地说,JDBC 可做三件事:与数据库建立连接、发送 SQL 语句并处理
结果。下列代码段给出了以上三步的基本示例:
Connection con = ("jdbc:odbc:wombat",
"login",
"password");
Statement stmt = ();
ResultSet rs = ("SELECT a, b, c FROM Table1");
while (()) {
int x = ("a");
String s = ("b");
float f = ("c");
}
上述代码对基于 JDBC 的数据库访问做了经典的总结。
3.需求分析
主要分为系统可行性分析、用户需求分析;系统分析要求必须了解系统所实
现的功能,这个设计的好坏直接影响的后面的开发。用户需求分析主要是了解用
户的有哪些需求,本系统主要是用户的购餐需求以及管理的需求。只有了解了需
求分析才能进行系统的开发,否则就会事倍功半,达不到我们预期的效果,因此
需求分析是至关重要的。
系统的可行性分析
可行性,是指在当前情况下,设计开发这个系统是否有必要,是否具备必要
的条件,它不仅包括必要性,还包括合理性。系统的可行性分析,是针对要设计
的系统,研究其设计是否存在内外部的必要条件,包括技术上、资金上、经济上、
人力资源以及组织管理上的必要条件,同时要分析在目前条件下是否有必要设计
这样一个系统。
技术可行性
1.硬件、软件
要求不高,目前市场上的一般计算机软硬件资源均能满足系统开发要求。其
中运用的主要软件工具有 , 等,数据库开发采用
。
2. 技术支持
主要运用 java 技术和 MySQL 数据库技术。
3. 维护操作
工作方便,后台操作快捷明了,操作人员可以在短时间内完全掌握维护技术。
本系统自主网上订餐管理,系统具有的菜品管理、购物车、订单统计等功能,系
统操作简单。
社会可行性
1.网络订餐将传统的交易流程信息化、数字化,一方面以信息流代替了面
对面的交易,可以大量减少人力、物力,降低了成本;另一方面突破了时间和空
间的限制,使得交易活动可以在任何时间、任何地点进行,从而大大提高了效率。
2.网络订餐使餐饮业以较低的成本进入信息化市场,使得中小企业有可能
拥有和大企业一样的信息资源。它开放性的特点,为企业创造了更多的交易机会,
提高了中小企业的竞争能力。
3.网络订餐重新定义了传统的流通模式,减少了中间环节,使得生产者和
消费者的直接交易成为可能,从而在一定程度上改变了整个社会经济运行的方式。
经济可行性
1. 资金可行性:由于系统开发环境配置以及其开发并不复杂,只需一些基
本的开发工具。而且开发出的系统操作起来也比较简单,另外具备网络中的一些
资源优势,因此开发费用较低。
2.经济合理性:由于通过网络进行商务活动,信息成本低,足不出户,可
节省交通费,且减少了中介费用,因此整个交易活动会降低成本。
可行性研究结论
依据以上因素,本系统开发项目不仅方便快捷、高效,而且社会效益比较好,
从而使本系统开发者相信该系统开发出来之后将取得的成功。
综上所述,此项目在技术、经济和社会效益上是完全可行的。
系统功能要求
作为一个网上订餐系统。首先为了保证客户能够很方便的进行菜品订购,
系统应该具有分类查看餐品,系统应该实现“购物车”的功能,用户可以把选中的
商品放入“购物订单”中,在选购完毕后再一起结帐。功能包括如下几部分:
1、登陆订餐系统
2、查看菜品
3、将菜品放入购物车
4、对购物车内的菜品进行结算
系统界面要求
本系统向用户提供命令行使用界面。要求使用简单方便,有足够的提示信息,
符合用户的操作习惯。同时将每个命令的命令字和参数分开,以利于有效引导用
户进行合法操作。
4.系统设计与实现
4.1 系统功能设计目标
理论系统功能设计目标如下:
(1) 实用性强:我们努力使系统符合实际操作流程的习惯,并尽量减少用户
的输入,易学易用的友好的用户界面,满足各层次的用户使用的需求;
(2) 先进的程序结构:使用当代前卫的软件编程,能延长其生命周期,易于
维护与管理;
(3) 安全可靠性高:后台维护功能齐全,根据平台在各个阶段不同的使用情
况,管理人员可以设置相应的操作权限,增加系统注册,分配各个栏目的管理权
限,实现系统的维护,保证系统的安全、可靠;
(4) 使用模块化设计的方法:使系统具有良好的可扩充性,以适应其不同阶
段的发展需要,便于后来者分析、维护;
(5) 操作简单,维护方便:每个子系统都具有相对独立的系统维护功能
对可变化的项目可自行维护;
(6) 查询功能强大:可以对菜品的基本情况、用户基本情况,菜品评信息,
用户留言等按各种方式查询,可形成各种表单,同时还可对其进行汇总,使管理
人员能及时准确地掌握用户和菜品等的基本情况。
4.2 网络订餐系统功能模块划分:
根据需求分析与系统功能设计目标,结合实际情况本系统功能模块设计分为
如下几个模块:
1.主页:在这里我们可以看见本系统的主要功能和信息。
2.用户登陆:用户在登陆界面输入登录名、密码即可登陆网站。
3.菜品浏览:成功登陆后的用户可以分别浏览菜品,并将想要的菜品提交
到购物车页面。
4.订购菜品:成功登陆的用户可以在该页面定购所需要的菜品。
5.查看购物车:成功登陆的用户可以在购物车界面查看已经添加的菜品。
6.修改订单:成功登陆的用户可以在购物车中修改或删除已经订购的菜品。
7. 菜品结算:成功登陆的用户可以在购物车中进行所有菜品价格的加总。
算出此次订购菜品所需的付款金额。
4.3 网络便民服务的体系结构:
三 层 结 构 :
即 : JSP 技 术 + J avaBeans + MYSQL 数 据 库
数据库系统概述:
数据库系统是在文件系统的基础上发展而来的,经历了层次数据库、网状数
据库、关系数据库三个阶段。由于关系数据库采用人们比较容易理解和接受的二
维表格来组织数据,发展迅速,已成为数据库产品的主流。
视 图 逻辑处理 数 据 库
本系统的前端开发是使用 JSP 技术,通过 JavaBeans 进行逻辑控制和数据库
连接,而后台数据库采用的是 MYSQ L 。MYSQL 数据库管理系统是一项全
面完整的数据库与分析产品。MYSQ L 非常容易学习、使用,介绍、学习资料
比较多,MYSQ L 全面支持 Web 功能的数据库解决方案,与此同时,MYSQ L
还在可伸缩性与可靠性方面保持着多项基准测试纪录,而这两方面特性又都是企
业数据库系统在激烈市场竞争中克敌致胜的关键所在。无论以应用程序开发速度
还是以事务处理运行速度来衡量,MYSQ L 都堪称最为快捷的数据库系统。
对比 MYSQ L 和其他的大型数据库管理系统,M YSQL 具有可靠的安
全性,较快的存储速度,高度的兼容性,简单易用,应用 MYSQ L 作为后台数
据库为系统的开发提供了强有力的支持,并对以后软件的运行提供了坚实的基础,
因此,我们采用了 MYSQ L 作为后台数据库。
4.5 数据库表:
本系统的数据库其中包括七个表,分别为菜品菜品表 list1,菜品类型表 tscc、
lc、zs、yl、ts, ,定单详细信息表 cai。详情请见下面的数据库表:
菜品菜品表 tscc
lc:
zs:
ts:
2、菜品类型表 list1
3、定单详细信息表 cai
5.测试
系统运行环境的搭建
1.安装 JDK
要编译和调试运行 Java 程序,首先需要安装 JDK,可以从 Sun 公司的站点
下载,当然需要根据使用的平台的不同来下载不同的版本。
下载并安装好以后,需要配置环境变量,其作用是让应用程序可以方便快捷地找
到所需要的路径。配置 Java 运行环境主要用到的环境变量有 3 个:
JAVA_HOME:就是 Java 的安装路径。
PATH:PATH 是 Windows 固有的。要加上 JAVA_HOME\bin 目录,这样在
运行 javac、java 等命令时就不用输入很长的路径了。
CLASSPATH:CLASSPATH 是运行 Java 非常重要的一个环境变量,Java 在
编译和运行应用程序时都要通过它去找到需要的类文件。放在 CLASSPATH 里
的一般是路径或 jar 文件,如果是路径的话就是说这个路径下的类可以使用。还
要考虑到 Java 文件的包(package)和文件夹之间的对应关系。
2. 的安装
在安装数据库管理软件 成功后,还应安装 Sqlyog 来作为
的可视化运行界面。
3. JDBC 驱动的安装
下载 MySQL 链接 Java 的压缩包 ,并将它
放置在安装 Java 的目录 C:\Program Files\Java\_19\jre\lib\ext 下。同时,
编写程序 来测试 Java 与 MySQL 是否连通。
系统测试
软件测试是保证软件可靠性的手段,测试阶段的任务就是发现并改正软件中
的错误。软件测试是软件开发过程中最繁重的任务。通过编码和调试只能保证程
序能够正常的运行起来,不出现编译上的错误,但是这并不意味着程序没有潜藏
的错误和逻辑上的错误,而要排除这样的错误就要通过测试来完成。测试在本系
统中包括界面的测试和对程序执行结果是否正确的测试。
本系统的测试如图 所示。
图 系统中所涉及的测试
在编写完代码之后,要把程序执行过程中所有可能走到的点记下来,这些点
是可能导致程序出现错误的点,并且把对走到相应的点的处理也要记录下来,把
这些组成的文件称为测试点文件,通过测试点文件可以生成各种合理的测试方案,
使得测试尽量能够走遍程序中的所有点,只有这样才能表示测试的成功。这个记
录文件就相当于画面设计书一样,测试是交互进行的,并不是各自测试自己的程
序,尽管如此,通过测试点文件对方仍能够知道程序执行的具体流程,所以在这
个测试中仍然是白盒测试。在单元测试都完成之后,再进行系统的集成测试。集
成测试包括两种方法,一是先测试每个模块,再把所有模块按照设计的要求组合
成所要的程序,这种方法成为非渐增式测试方法,另一个是把下一个要测试的模
块同已测试好的那些模块结合起来进行测试,测试完成之后再把下一个要测试的
模块结合起来进行测试。这种每次增加一个模块的方法为渐增式测试。
常见错误
编完程序后,最后一步就是对系统进行测试。本网上订餐系统主要是用 Java
语言编写的,最常见的错误是出现异常。
1)语法错误:它是由错误的脚本语法引起的,如:命令的拼写错误或传递函
数的参数值错误。
2)运行时错误:运行时错误是发生在程序开始执行之后,它是由试图执行不
可能操作的程序所引起的。
3)逻辑错误:逻辑错误是最难发现的错误。通常逻辑错误是由输入错误或程
序逻辑上的缺陷引起的,程序运行没有问题,但运行的结果却不正确。
测试的方法
依据前面所说的测试对象,我们把测试划分为几个方面来进行测试。
1)界面测试
界面测试是测试过程中比较简单直观的一种测试方法,只要细心地按界面要
求核对就行了。可这一块内容往往是程序开发人员最容易忽视和遗漏的地方,也
是常常出 Bug 的地方。下面是界面测试中经常出现的几种 Bug:
错别字,即界面中的标题或者文本内容中出现了错别字。这种 Bug 如果测
试人员不细心,很难找出来,可能会出现在提示信息或界面中。
出现了一些根本读不懂的内容,一般多出现在程序的提示信息和一些较长的
文本中。这种情况基本上出现在拼起来显示的提示中,页面的简单陈述是通过变
量拼组起来的,通过程序将字一个一个地输出来。通常是因为程序中的控制错误
或是程序开发人员对程序没有进行认真的自测,导致出现这种 Bug。
页面类似的内容中,明显有字体,字号不同的情况,使界面整体风格看上去
不一致,这种情况只出现在没有 CSS 定义的情况下,或是已经定义的 CSS,在
开发过程中没有调用。
标题相近的程序及模块,把标题弄混。这种情况多是因为业务方面的定义名
称很相似或很类似,并且业务实体方面也很类似,开发人员在开发过程中忽略了
开发名称和模块,只单独地实现其功能。
2)功能测试
顾名思义,功能测试主要是测试程序模块是否实现了设计中所有要求的功能。
功能测试中需要注意的有:
订餐功能中,有关于订餐时间有一些常识性的问题,比如:闰年中二月的天
数。
关于后台修改各种信息功能的测试,主要是看修改确认后是否数据真正已被
修改了。这是最基本的功能,需要注意的是是否把不应该修改的数据也被修改成
功了。
3)需求测试
需求测试是测试中很重要的一个环节。因为需求是软件设计,开发乃至软件
测试中最重要的依据。要针对需求测试,首先就要对项目的需求和业务有一定的
了解。这些需求很多时候是在实现增、删、查、改,这些基本功能之上,结合项
目和相关业务所作的一些逻辑上的控制,这就要求程序员在设计和编码的时候要
去充分理解考虑需求。
4)性能测试
性能测试在软件的质量保证中起着重要的作用。通常我们把性能指标全部归
结到硬件,操作系统和开发环境上,而忽略了代码本身性能上的考虑。性能需求
指标中,稳定性,并行访问支撑能力以及安全性都很重要,作为程序员需要评估
该模块在系统运行中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶
意攻击的可能性。
界面测试
千百味订餐系统提供了用户登录、忘记密码、查看菜品、加入购物车、购物
车结算等功能。
用户登陆模块测试
忘记密码模块测试
如果用户忘记了登陆密码可以直接点击忘记密码,出现如下界面:
查看菜品模块测试
在登陆成功后我们会看见如下界面:
界面上显示出各个菜品的分类,分别点击各个菜品分类,会弹出对话框显示
出各个分类里的菜品名称。如下图所示:
加入购物车模块测试
用户在选中自己喜欢的菜品以后可以用鼠标单击选中,单击确定后出现如下
界面:
单击确定后退出,订购的菜品便放入到购物车中,单击总价,便出现如下界
面:
单击确定后返回主界面,订餐过程完成。
测试结论
系统测试和系统设计是同步的,下面是我的一些测试的经验教训。首先,我
们可以运行,如果运行没有问题的话,就会有页面出现。但是,如果代码有错误
的话,页面会出现错误的提示。并会告诉你在哪一行出错及出错的原因。这样的
话,我们根据它的提示,可以更改。其次,我们在打开的页面是正常的,但是不
能达到预期的效果,这个就需要我们认真看代码了,并根据我们功能要求对其实
现的代码进行分析,通过查阅书籍和网上搜寻资料来解决问题。这个是最难处理
的,但是也是锻炼我们编程能力的捷径。
结束语
毕业设计是对我们每名学生智力、毅力的一次艰巨考验,是对我们每名学生
知识体系的一次丰富升华,是对我们每名学生整个大学的学习成果的一次检验。
在毕业设计过程中,既有成功的喜悦,也有失败的苦恼;既学习了大量新知
识,又对很多旧知识进行了提炼升华;既有个人努力,又有团队协作;既得到了
同学们的帮助,又得到了老师的指导。这种经历弥足珍贵。
由于是第一次开发这种 Java 应用系统,可能还有很多不足之处。所以只有
匆匆忙忙地从图书管理借来大量基于 Java 系统设计方面的书籍,希望通过参阅
各种关于系统设计的书籍充分了解系统开发的基本流程、总体布局设计以及系统
开发前所需的一些准备工作,做到心中有数。然而,由于实在是经验有限,虽然
书本上介绍了许多这方面的知识和操作方法,但是毕竟还是限于理论方面的,所
以理解起来比较困难,一切都是按自己的摸索来构建。
这次经历之后希望之后再设计其他类型软件的时候能够推陈出新,在这次的
基础上有所改善,做得更好。
致 谢
非常感谢我的指导老师:谭征老师。他平易近人还很幽默,在毕业设计的开
始阶段,谭征老师给我指明了设计的方向及规范。在设计出系统后,又及时的给
我检测提出指导意见。他认真细心地评阅了我的论文初稿,并给出了具体修改建
议。
非常感谢负责热心的孙曦老师,她是一名对学生负责的好老师,时时刻刻为
学生着想,努力帮助我们协调二专业和本专业之间的各项事务,让我们能够合理
地分配自己的时间精力。
非常感谢和蔼可亲的李凯里老师,他给我设计的系统提出了建设性的建议,
指出了该系统存在的不足,并向作为二专业学生的我耐心的解释了毕业论文的规
范。
非常感谢在设计的过程中帮助过我的同学和朋友,在他们的帮助下我才成功
地连接了数据库。
有些功能是借鉴从网上下载的论文后经过一定的修改而成的,在此向网上帮
助我的朋友说声谢谢。
现在马上就要离开生活四年的大学校园了,我应该感谢大学四年曾给我们带
过课程的各位老师,谢谢你们。没有你们大学这几年的教导,我是不能适应社会
的激烈竞争的,再次谢谢你们。
参考文献
[1] 张峰.JAVA 进阶诀窍.清华大学出版社.2009-01.
[2] MySQL 公司. MySql 中文帮助文档[M].页面文档.2006-02-11.
[3] 吴其东.JAVA 模块设计实例经典.北京:冶金工业出版社.2004-06.
[4] 李世祥.Struts 框架应用与开发[M].东软电子出版社.2002-06-09.
[5] 陈天河.Hibernate 项目开发宝典[M].电子工业出版社.2004-03-23.
[6] 刘升华等.Java 从入门到实践.北京:清华大学出版社.2009-09-01.
[7] 良葛格.Java 学习笔记(第一版).北京:清华大学出版社.2006-08.
[8] 叶志军等.由浅入深--Java2 自学教程.北京:人民邮电出版社.2004-10.
附录
本系统共包含 9 个源文件,程序代码如下:
文件一:
package ;
import ;
import ;
import ;
import ;
import ;
public class DBM {
public static DBM instance=null;
Connection con=null;
private DBM()
{
try {
("");
con=("jdbc:mysql://localhost:3306/list1","root","1
23");
} catch (ClassNotFoundException e) {
("找不到驱动类");
();
} catch (SQLException e) {
("建立链接异常");
();
}
}
public static DBM getDBM()
{
if(null==instance)
{
instance=new DBM();
}
return instance;
}
public int executeUpdate(String sql)
{
int re=0;
try {
Statement state=();
re=(sql);
} catch (SQLException e) {
("更新数据出错");
();
}
return re;
}
public ResultSet executeQuery(String sql)
{
ResultSet rs=null;
try {
rs= ().executeQuery(sql);
} catch (SQLException e) {
("查询数据出错");
();
}
return rs;
}
}
文件二:food
package ;
import .*;
import .*;
import .*;
import .*;
public class Food extends JFrame {
int price=0;
Box h1 = ();
Box h2 = ();
Box h3 = ();
JButton ok = new JButton("确定");
JButton re = new JButton("返回主界面");
JButton delete = new JButton("删除");
JLabel huan = new JLabel("欢迎进入汤食系统!");
JScrollPane jp;
JTable jt;
Object[] title = new Object[] { "序号", "菜名", "单价" };
Object[][] datas;
public Food() {
super("汤食系统");
(500, 500);
(200, 200);
((200));
(huan);
((100));
(ok);
((50));
(delete);
((50));
(re);
(h1, );
(h2, );
(h3, );
initTable();
(true);
(_ON_CLOSE);
proc();
}
public void initTable() {
int count = -1;
String sql = "select count(id) from ts";
ResultSet rs2 = ().executeQuery(sql);
try {
if (())
count = (1);
datas = new Object[count][];
} catch (SQLException e1) {
();
}
ResultSet rs = ().executeQuery("select * from ts");
try {
for (int i = 0; i < count; i++) {
Object[] tem = new Object[3];
if (()) {
tem[0] = ("id");
tem[1] = ("name");
tem[2] = ("price");
datas[i] = tem;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
();
}
jt = new JTable(datas, title);
jp = new JScrollPane(jt);
(jp, "Center");
}
/**
* @param args
*/
public void proc()
{
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row=-1;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="delete from cai where id="+id;
int fan=().executeUpdate(sql);
if(fan>0)
(null, "该菜已被
成功删除");
else
(null, "该菜未被
成功删除");
}
}
});
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="select * from ts where id="+id;
ResultSet rs=().executeQuery(sql);
try {
while(())
{
namenew=("name");
prinew=("price");
price=price+prinew;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
();
}
String sqll="insert into cai(name,price)
values('"+namenew+"','"+prinew+"')";
int fan=().executeUpdate(sqll);
if(fan>0)
(null, "该菜已成
功加入到购物车,您此次的费用为"+price);
else
(null, "该菜加入
到购物车失败");
}
}
});
(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new Frame();
}
});
}
}
文件三:frame
package ;
import ;
import ;
import .*;
import ;
import ;
import ;
//import ;
import ;
//import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
//import ;
//import ;
//import ;
//import ;
import ;
public class Frame extends JFrame
{
/**
* @param args
*/
Box con=();
Box h1=();
Box h2=();
JLabel tex=new JLabel("欢迎朋友们选购");
JButton tscc=new JButton("特色炒菜");
JButton lc=new JButton("凉 菜 ");
JButton ts=new JButton("汤 类 ");
JButton zs=new JButton("主 食 ");
JButton yl=new JButton("饮 料 ");
JButton che=new JButton("查看购物车 ");
JLabel jlb=new JLabel();
JMenuBar w = new JMenuBar();
JMenu z1 = new JMenu("操作");
JMenu z3 = new JMenu("关于我们");
JMenu z4 = new JMenu("留言");
JMenu z5 = new JMenu("帮助");
JMenuItem zp1 = new JMenuItem("开始点餐");
JMenuItem zp2 = new JMenuItem("退出点餐");
JMenuItem zp3 = new JMenuItem("本店地址");
JMenuItem zp4 = new JMenuItem("进入留言板");
// 构造显示指定文本的新的 TextArea。
public Frame()
{
super("您现在所在的位置是 :千百味快餐店订餐系统
欢迎您的光顾");
(new FlowLayout());
(1028, 1000);
(0,0);
();
((JLabel) jlb).setIcon(new
ImageIcon(("/res/")));
(0, 0, 300, 400);
((100));
(tscc);//放左边的项目
((80));
(lc);
((80));
(ts);
((80));
(zs);
((80));
(yl);
((80));
(che);
((120));
(tex);
((0));
((50));
(jlb);
(h1);
((100));
(h2);
(z3);//菜单栏
(z4);
(z5);
(zp1);//分别把每个项目的选项加入
(zp2);
(zp3);
(zp4);
(w);//在窗体中设置菜单栏
(con);
(true);
(_ON_CLOSE);
processer();
}
public void processer()
{
(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// new Food();
new Tscc();
}
});
(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new lc();
}
});
(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new Food();
}
});
(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new zs();
}
});
(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new yl();
}
});
(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new dingdan();
}
});
}
}
文件四:lc
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class lc extends JFrame {
//定义
int price=0;
Box h1 = ();
Box h2 = ();
Box h3 = ();
JButton ok = new JButton("确定");
JButton re = new JButton("返回主界面");
JButton delete = new JButton("删除");
JLabel huan = new JLabel("欢迎进入凉菜系统!");
JScrollPane jp;
JTable jt;
Object[] title = new Object[] { "序号", "菜名", "单价" };
Object[][] datas;
public lc() {
super("凉菜系统");
(500, 500);
(200, 200);
((200));
(huan);
((100));
(ok);
((50));
(delete);
((50));
(re);
(h1, );
(h2, );
(h3, );
initTable();
(true);
(_ON_CLOSE);
proc();
}
public void initTable() {
int count = -1;
String sql = "select count(id) from lc";
ResultSet rs2 = ().executeQuery(sql);
try {
if (())
count = (1);
datas = new Object[count][];
} catch (SQLException e1) {
();
}
ResultSet rs = ().executeQuery("select * from lc");
try {
for (int i = 0; i < count; i++) {
Object[] tem = new Object[3];
if (()) {
tem[0] = ("id");
tem[1] = ("name");
tem[2] = ("price");
datas[i] = tem;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
();
}
jt = new JTable(datas, title);
jp = new JScrollPane(jt);
(jp, "Center");
}
/**
* @param args
*/
public void proc()
{
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row=-1;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="delete from cai where id="+id;
int fan=().executeUpdate(sql);
if(fan>0)
(null, "该菜已被
成功删除");
else
(null, "该菜未被
成功删除");
}
}
});
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="select * from lc where id="+id;
ResultSet rs=().executeQuery(sql);
try {
while(())
{
namenew=("name");
prinew=("price");
price=price+prinew;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
();
}
String sqll="insert into cai(name,price)
values('"+namenew+"','"+prinew+"')";
int fan=().executeUpdate(sqll);
if(fan>0)
(null, "该菜已成
功加入到购物车,您此次的费用为"+price);
else
(null, "该菜加入
到购物车失败");
}
}
});
(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new Frame();
}
});
}
}
文件五:login
package ;
//导入包
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class login extends JFrame implements ItemListener{
private static final long serialVersionUID = 1L;
Box con=();//定义盒子
Box h1=();
Box h2=();
Box h3=();
Box h4=();
Box h5=();
Box h6=();
Box h7=();
JLabel luser=new JLabel("用户名:");
JLabel lpwd=new JLabel("密 码:");
JTextField user=new JTextField(10);//用于输入用户名的文本框
JPasswordField pwd=new JPasswordField(10);//用于输入密码的文本框
JLabel tel=new JLabel("订餐热线:15153511688");
JLabel tex=new JLabel("本店餐饮种类齐全,价格优惠,送货及时,欢
迎朋友们选购");
JButton ok=new JButton("登陆");
JButton cancel=new JButton("取消");
JRadioButton ja=new JRadioButton("忘记密码?", true);
ButtonGroup bg=new ButtonGroup();
JPanel jp=new JPanel();
JLabel jb=new JLabel();
JLabel jc=new JLabel();
public login()
{
super("您现在所在的位置是 :千百味快餐店订餐系统
欢迎您的光顾");
(1028, 1000);
(0, 0);
();
(new
ImageIcon(("/res/")));
(10, 10, 0, 0);
(new
ImageIcon(("/res/")));
(30, 30, 0, 0);
(luser);
(user);
(lpwd);
(pwd);
(ok);
((20));
(cancel);
(ja);
(ja);
(jp);
(tel);
(tex);
((100));
(h1);
((20));
(h2);
((20));
(h3);
((20));
(h4);
((2));
(h5);
((100));
(h6);
(h7);
(new FlowLayout());
(con);
(jb);
(jc);
(true);
(_ON_CLOSE);
proccesser();
}
public void proccesser()
{
(new ActionListener()//密码监听
{
public void actionPerformed(ActionEvent e)
{
checkLogin();
}
});
//取消按钮监听
(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
("");
("");
}
});
//登陆按钮监听
(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
checkLogin();
}
});
//密码错误框监听
(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
(null, "顾客您好,我们的
密码是 336,请输入正确密码");
}
});
}
public void checkLogin()
{
String userName =();
String password=new String(());
if("admin".equals(userName)&&"336".equals(password))
{
(null, "恭喜您,登陆成功");
new Frame();
//new Demo();
//();
}else
{
(null, "用户名或密码错误,
请重新输入");
}
}
public static void main(String[] args)
{
new login();
}
public void itemStateChanged(ItemEvent e) {
}
}
文件六:tscc
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
//import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class Tscc extends JFrame {
//定义
//Box a1 = ();
int price=0;
Box h1 = ();
Box h2 = ();
Box h3 = ();
JButton ok = new JButton("确定");
JButton re = new JButton("返回主界面");
JButton delete = new JButton("删除");
JLabel huan = new JLabel("欢迎进入特色炒菜系统!");
JScrollPane jp;
JTable jt;
Object[] title = new Object[] { "序号", "菜名", "单价" };
Object[][] datas;
public Tscc() {
super("特色炒菜系统");
(500, 500);
(200, 200);
((200));
(huan);
((100));
(ok);
((50));
(delete);
((50));
(re);
(h1, );
(h2, );
(h3, );
initTable();
(true);
(_ON_CLOSE);
proc();
}
public void initTable() {
int count = -1;
String sql = "select count(id) from tscc";
ResultSet rs2 = ().executeQuery(sql);
try {
if (())
count = (1);
datas = new Object[count][];
} catch (SQLException e1) {
();
}
ResultSet rs = ().executeQuery("select * from tscc");
try {
for (int i = 0; i < count; i++) {
Object[] tem = new Object[3];
if (()) {
tem[0] = ("id");
tem[1] = ("name");
tem[2] = ("price");
datas[i] = tem;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
();
}
jt = new JTable(datas, title);
jp = new JScrollPane(jt);
(jp, "Center");
}
/**
* @param args
*/
public void proc()
{
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row=-1;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="delete from cai where id="+id;
int fan=().executeUpdate(sql);
if(fan>0)
(null, "该菜已被
成功删除");
else
(null, "该菜未被
成功删除");
}
}
});
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="select * from tscc where id="+id;
ResultSet rs=().executeQuery(sql);
try {
while(())
{
namenew=("name");
prinew=("price");
price=price+prinew;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
();
}
String sqll="insert into cai(name,price)
values('"+namenew+"','"+prinew+"')";
int fan=().executeUpdate(sqll);
if(fan>0)
(null, "该菜已成
功加入到购物车,您此次的费用为"+price);
else
(null, "该菜加入
到购物车失败");
}
}
});
(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new Frame();
}
});
}
}
文件七:YL
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
//import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class yl extends JFrame {
//定义
int price=0;
Box h1 = ();
Box h2 = ();
Box h3 = ();
JButton ok = new JButton("确定");
JButton re = new JButton("返回主界面");
JButton delete = new JButton("删除");
JLabel huan = new JLabel("欢迎进入饮料系统!");
JScrollPane jp;
JTable jt;
Object[] title = new Object[] { "序号", "菜名", "单价" };
Object[][] datas;
public yl() {
super("饮料系统");
(500, 500);
(200, 200);
((200));
(huan);
((100));
(ok);
((50));
(delete);
((50));
(re);
(h1, );
(h2, );
(h3, );
initTable();
(true);
(_ON_CLOSE);
proc();
}
public void initTable() {
int count = -1;
String sql = "select count(id) from yl";
ResultSet rs2 = ().executeQuery(sql);
try {
if (())
count = (1);
datas = new Object[count][];
} catch (SQLException e1) {
();
}
ResultSet rs = ().executeQuery("select * from yl");
try {
for (int i = 0; i < count; i++) {
Object[] tem = new Object[3];
if (()) {
tem[0] = ("id");
tem[1] = ("name");
tem[2] = ("price");
datas[i] = tem;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
();
}
jt = new JTable(datas, title);
jp = new JScrollPane(jt);
(jp, "Center");
}
/**
* @param args
*/
public void proc()
{
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row=-1;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="delete from cai where id="+id;
int fan=().executeUpdate(sql);
if(fan>0)
(null, "该菜已被
成功删除");
else
(null, "该菜未被
成功删除");
}
}
});
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="select * from yl where id="+id;
ResultSet rs=().executeQuery(sql);
try {
while(())
{
namenew=("name");
prinew=("price");
price=price+prinew;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
();
}
String sqll="insert into cai(name,price)
values('"+namenew+"','"+prinew+"')";
int fan=().executeUpdate(sqll);
if(fan>0)
(null, "该菜已成
功加入到购物车,您此次的费用为"+price);
else
(null, "该菜加入
到购物车失败");
}
}
});
(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new Frame();
}
});
}
}
文件八:ZS
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class zs extends JFrame {
//定义
int price=0;
Box h1 = ();
Box h2 = ();
Box h3 = ();
JButton ok = new JButton("确定");
JButton re = new JButton("返回主界面");
JButton delete = new JButton("删除");
JLabel huan = new JLabel("欢迎进入主食系统!");
JScrollPane jp;
JTable jt;
Object[] title = new Object[] { "序号", "菜名", "单价" };
Object[][] datas;
public zs() {
super("主食系统");
(500, 500);
(200, 200);
((200));
(huan);
((100));
(ok);
((50));
(delete);
((50));
(re);
(h1, );
(h2, );
(h3, );
initTable();
(true);
(_ON_CLOSE);
proc();
}
public void initTable() {
int count = -1;
String sql = "select count(id) from zs";
ResultSet rs2 = ().executeQuery(sql);
try {
if (())
count = (1);
datas = new Object[count][];
} catch (SQLException e1) {
();
}
ResultSet rs = ().executeQuery("select * from zs");
try {
for (int i = 0; i < count; i++) {
Object[] tem = new Object[3];
if (()) {
tem[0] = ("id");
tem[1] = ("name");
tem[2] = ("price");
datas[i] = tem;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
();
}
jt = new JTable(datas, title);
jp = new JScrollPane(jt);
(jp, "Center");
}
/**
* @param args
*/
public void proc()
{
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row=-1;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="delete from cai where id="+id;
int fan=().executeUpdate(sql);
if(fan>0)
(null, "该菜已被
成功删除");
else
(null, "该菜未被
成功删除");
}
}
});
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String namenew=new String();
int prinew=0;
int row;
row=();
if(-1==row)
{
(null, "请先选中菜
");
}
else
{
int id=row+1;
String sql="select * from zs where id="+id;
ResultSet rs=().executeQuery(sql);
try {
while(())
{
namenew=("name");
prinew=("price");
price=price+prinew;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
();
}
String sqll="insert into cai(name,price)
values('"+namenew+"','"+prinew+"')";
int fan=().executeUpdate(sqll);
if(fan>0)
(null, "该菜已成
功加入到购物车,您此次的费用为"+price);
else
(null, "该菜加入
到购物车失败");
}
}
});
(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new Frame();
}
});
}
}
文件九:dingdan
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class dingdan extends JFrame {
int price=0;
Box h1 = ();
Box h2 = ();
Box h3 = ();
//JButton ok = new JButton("确定");
JButton re = new JButton("返回主界面");
JButton zong = new JButton("总价");
//JButton clear = new JButton("清空");
//JButton delete = new JButton("删除");
JLabel huan = new JLabel("您的订单是:");
JScrollPane jp;
JTable jt;
Object[] title = new Object[] { "序号", "菜名", "单价" };
Object[][] datas;
public dingdan() {
super("购物车");
(500, 500);
(200, 200);
((200));
(huan);
//((100));
//(ok);
//((50));
//(delete);
//((50));
(re);
((50));
(zong);
((50));
// (clear);
(h1, );
(h2, );
(h3, );
initTable();
(true);
(_ON_CLOSE);
proc();
}
public void initTable() {
int count = -1;
String sql = "select count(id) from cai";
ResultSet rs2 = ().executeQuery(sql);
try {
if (())
count = (1);
datas = new Object[count][];
} catch (SQLException e1) {
();
}
ResultSet rs = ().executeQuery("select * from cai");
try {
for (int i = 0; i < count; i++) {
Object[] tem = new Object[3];
if (()) {
tem[0] = ("id");
tem[1] = ("name");
tem[2] = ("price");
datas[i] = tem;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
();
}
jt = new JTable(datas, title);
jp = new JScrollPane(jt);
(jp, "Center");
}
/**
* @param args
*/
public void proc()
{
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
new Frame();
}
});
(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int prinew=0;
String sqll="select * from cai";
ResultSet rs=().executeQuery(sqll);
try {
while(())
{
prinew=("price");
price=price+prinew;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
();
}
(null,"您此次的费用为,请您
付款:"+price);
int id=0;
String sql="delete from cai where id>"+id;
int fan=().executeUpdate(sql);
}
});
/*(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int id=0;
String sql="delete from cai where id>"+id;
int fan=().executeUpdate(sql);
if(fan>0)
(null, "购物车内已被清
空!");
else
(null, "购物车内清空失
败");
}
});*/
}
}
/////////////////////////////////////////////////////////////////////
/////////////////////////////////结束////////////////////////////////