XXX理工学院实训报告
网 上 定 餐 系 统
系别:计算机系
班级: 姓名: 学号:
网上订餐系统
一. 系统概述
本系统在开发设计中,采用B/S(Browser/Server)结构,这种结构使得数据只有结果集合在浏览器中显示,数据的处理在服务器进行,用户不用安装客户端,而且由于通过服务器端统一管理数据,易于保证数据的一致性。数据库方面,推荐业界具有领导地位的关系数据库管理系统Microsoft SQL sever2000,使系统安全性能更高。同时采用当前正在流行的JSP(Java Server Pages)编程,用户界面更友好。
在开发中选择了JSP+JavaBean+SQL2000的模式,实现了应用程序逻辑和页面显示分离,界面设计更简单。JavaBean可重用的软件组件满足小型应用,同时使编程人员投入量精力便可重用组件,在简单的应用中可以充分考虑
二.需求分析
网上订餐管理系统无论是在应用的深度还是广度都是一个逐步发展的过程。在开发一个局部系统时要充分考虑到局部系统和整个目标系统之间的相容性和完整性,以利于今后整个系统的建立。进货订单管理系统从总体上把握系统的设计,在具体的设计实现上我们围绕着三个方面的需求展开,即管理者、系统使用者、系统维护者。
0页
如有你有帮助,请购买下载,谢谢!
2.1性能需求分析
该系统在性能功能上应达到如下需求:
◆ 操作简单、界面友好: 完全控件式的页面布局,使得菜品,资讯,座位等信息的录入工作更简便,许多选项包括餐厅信息,桌位,包房信息等只需要点击鼠标就可以完成;另外,跟踪出现的提示信息也让用户随时清楚自己的操作情况。对常见的类似网站的管理的各个方面:基本信息录入、浏览、删除、修改、搜索等方面都大体实现,顾客对菜品的预定及支付方式;
◆ 即时可见:对客户预定餐饮信息的处理(包括录入、删除)将立即在主页的对应栏目显示出来,达到“即时发布、即时见效”的功能;
◆ 系统运行应该快速、稳定、高效和可靠;
◆ 在结构上应具有很好的可扩展性,便于将来的功能扩展和维护。
2.2产品质量需求分析 主要质量属性 详细要求 按照需求正确执行任务,完成各个模块的相应要求。 具有较高的容错能力和恢复能力。 故障发生率每运行1000小时低于3次 软件的输出结果更新周期应该与系统的信息更新周期相同。在网络情况良好的情况下,3秒内可响应用户请求。 易用性 易理解性:软件研制过程中形成的所有文档语言简练、前后一致、易于理解以及语句无歧义。 安全性 防止软件受到意外或蓄意的存取、使用、修改、毁坏或泄密的软件属性其数据应能集中存放于总部的数据库服务器,客户端不保存任何业务数据和数据库连接信息,也不应进行什么数据同步. 可扩展性 兼容性 可移植性 … 能方便的进行二次开发,满足对功能的扩充或提高并能提高相应的安全控制。 不易与其他软件起冲突。 可方便移植到其他系统环境中正常运行。 正确性 健壮性 可靠性 性能,效率 1页
如有你有帮助,请购买下载,谢谢!
2.3 可行性分析
随着经济的快速发展,B2C电子商务越来越受到人们的关注。网上订餐类网站,已经如雨后春笋般的出现在了个大城市。特别在公司,企业内部,团体订餐已经成为了趋势。同时,随着全国人民的精神、物质和文化生活高度的提高,人们已经不在仅仅停留在吃饱的程度,不但要吃饱,还要吃好,而且口味也越来越挑刺,正因为如此网络订餐业务的出现,正迎合了这些人的口味,他们不但省去了自己做饭的麻烦,而且也能寻找和发现新的菜品,品尝不同风格的菜品,网络订餐业务在中国有着极大的发展空间以及良好的背景。而当代大学生,白领工作人士作为社会中的重要群体,他们对饮食的要求都在不断提高,饮食在他们生活中起着重要作用。因此,面向大学生和都市白领人士的网络订餐网站的设计有着良好的现实意义。
2.4 总体设计原则
1、开放性、可扩充性、可靠性原则
开放系统是生产各种计算机产品普遍遵循的原则,遵循这种标准的产品都符合一些公共的、可以相互操作的标准,能够融洽的在一起工作。开放系统使得各种类型的网络和系统互连简单、标准统一,容易扩展升级。从而适应广大用户需求的多变性和产品的更新换代。
2、良好的用户操作界面
用户操作界面美观、方便、实用,使用户能在较短的时间内掌握其使用方法。 3、实用性原则
任何系统的设计都要考虑其实用性,系统开发的目的是为了实现业务处理自动化、规范化,提高工作效率,减轻工作人员的劳动强度,减少开支。
4、工作平台设计原则
能适应不同的操作平台,不同的网络。
三. 总体设计 3.1系统流程分析
3.1.1业务流程分析
1、 浏览与选择餐饮信息:顾客进入网站即刻自动提供购物车,不需身份确认就可以在网站上随意浏览,登录系统后则可挑选餐饮(可增加、删除、修改购物车上餐饮的类型),网站提供餐饮信息列表,最先添加的餐饮信息优先列表给顾客作为选购时的参考;
2、 判断:顾客确定所购餐饮信息后,系统将判断该顾客是否注册,如果是,则可直接填写订单;否则,提示顾客登记注册; 3、 提交订单:已选购的餐饮信息需填写订单细节。 4、 注册:顾客可在公司的网站上注册后提交申请;
5、 确认:后台管理将实时得到顾客的注册信息,通过电话及其他方式确认,
2页
如有你有帮助,请购买下载,谢谢!
当确认后,系统管理员可对该顾客提交的预定信息进行审核。
6、送货与付款:网上的每一份订单都将实时存入后台数据库,后台操作人员通过电话及其他方式确认,确认后将及时实施审核该订单:向顾客送货,货到付款,完成网上交易。
顾客 交易 浏览菜品资讯 登录系统 获得购物车 Y 浏览餐饮信息 管理员 选择餐饮信息 审核 N 结束
3.1.2数据流程分析
该系统数据流程比较简单,管理员可以添加餐厅信息(包括餐桌,包房等),餐饮信息(包括菜品名等信息),资讯信息等,然而这些信息顾客是可以浏览的,但是顾客没有权限对这些信息进行修改,这些信息对于顾客而言是单向的。对于预定信息,管理员可以查看及审核预定信息,顾客可以增删改预定信息,并将预定信息提交给管理员等待审核,因此预定信息对于顾客和管理员而言都是双向的。 3.1.2.1数据流图
数据流图简称DFD,是SA方法中用于表示系统逻辑模型的一种工具。它以图形的方式描述数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。系统的数据流图如下所示:
3页
如有你有帮助,请购买下载,谢谢!
餐厅信息餐饮信息管理员资讯信息数据库顾客餐饮预定 系统DFD图
3.2系统数据库设计
3.2.1 数据库E-R图
4页
如有你有帮助,请购买下载,谢谢!
Users(用户表) 发布 orders(订单表) 用户名 权限 地址 电话 应收款 密码 发布 订餐人 所属 备注 Seat(订座表) Shop(订单菜单表) 电话 订餐人 人数 点菜 菜名 数量 单价 时间 st(订座菜单表) 菜名 数量 单价 category (类别表) Food (菜单表) 类别名 菜名 图片 单价
5页
如有你有帮助,请购买下载,谢谢!
3.2.2数据库表设计
系统关键数据表如下:其关系见E-R图
1.用户表(users):用户登录是需要用户名和密码,所以用户数据表中必须包含用户名(uname)、密码(upass)两个信息,还有些其他的用户信息,比如power指的是用户权限(管理员还是非管理员)。从功能上数据库表设计如表3.1。
表 3.1 用户表 列名 uid uname upass power 数据类型 int varchar varchar int 长度 4 50 50 4 2.菜品信息表(food):菜品信息表主要描述菜品信息,如:菜品ID号(foodid),此ID号为系统自动生成;菜品名称(fname);菜品价格(price);所属分类ID(categoryId);图片信息(images)。商品信息表详细描述如表3.2
表3.2菜品信息表 列名 foodId price categoryId images 数据类型 int money int varchar 长度 4 8 4 50 3.订座菜单表(st):客户订餐的一些相关信息,如stId指的订餐ID号,此ID和是系统自动生成的;菜品名称(fname);订购数量(num);价格(price);座位编号(seatId)等,具体描述表3.3
表3.3供应商表 列名 stId fname num price 数据类型 int varchar int money int int 6页
长度 4 50 4 8 4 4 seatId fId 4.订单表(orders): 订单表有一下描述信息。订单ID(ordersId),订购人姓
如有你有帮助,请购买下载,谢谢!
名(name),地址(address),联系电话(tel),价格(price),备注信息(context)等,具体描述如表3.4所示:
表3.4订单表 列名 ordersId name address tel 数据类型 int varchar varchar varchar numeric int text 表3.5订单菜单表 长度 4 50 50 50 9 4 16 price uid context 5.订单菜单表(Shop)具体描述如表3.5所示:
列名 fId fname num price 数据类型 int varchar int Money int int 表3.6订座表 长度 4 50 4 8 4 4 uid sid 6.订座表(Seat)具体描述如表3.6所示:
列名 seatId uid tel riqi 数据类型 int int varchar varchar int varchar varchar 长度 4 50 50 50 4 4 50 num name xiaoshi 3.3系统结构设计
网上订餐系统的模型结构如下图所示:
7页
如有你有帮助,请购买下载,谢谢!
客户端 浏览器 Web 层 业务层 客户端 浏览器 数数据访问层 据库 客户端 浏览器 系统配置
从前面的需求分析中得知,可以将功能分为前台和后台两类,因此模块也分为两大类:前台模块和后台模块。 下图为系统模块总图:
网上订餐管理系统 后台模块 前台模块 注册登录 菜品查询 订单查询 用户订餐 用户订座 用户权限管理 菜品管理 订餐管理 订座管理 用户管理
系统模块总图
3.4 核心算法实现——分页显示算法
int i;
一页显示的记录数 = 10; 取得待显示页码 PageSet : strPage = page;
if(strPage==null)//page参数为空时,此时显示第一页数据
8页
如有你有帮助,请购买下载,谢谢!
{
待显示页码 = 1; } else{
待显示页码 = Integer.parseInt(strPage); //将字符串转换成整型 if(待显示页码<1) 待显示页码 = 1; }
执行SQL语句并获取结果集
ResultSet rs = sqlStmt.executeQuery(\"SQL”); 获取记录总数 rs.last();
记录总数 = rs.getRow(); 记算总页数
总页数 = (记录总数+设置一页显示的记录数-1) / 一页显示的记录数; 调整待显示的页码
if(待显示页码>总页数) 待显示页码 = 总页数; // 分页情况分类 //选择向上翻 if(待显示页码>1) {
选择向上翻一页传递参数pageda=待显示页码-1 goto PageSet; }
//选择向下翻
if(待显示页码<总页数) {
选择向下翻一页传递参数pageda=待显示页码+1 goto PageSet; }
If(选择到尾页) {
选择到尾页传递参数pageda=总页数 goto PageSet; }
页次=待显示页码 / 总页数页 ; if(总页数>0){
将记录指针定位到结果集的第一条记录上((待显示页码-1) * 一页显示的记录数 + 1);
9页
如有你有帮助,请购买下载,谢谢!
i = 0;
while(i<一页显示的记录数 && 数据库指针不在结果集尾部){ 输出要分页显示的数据库中的内容;
将数据库指针移动到当前行的下一行; i++; } }
3.5 数据库编程基础及语法
Java 数据库连接 (JDBC) 是一个标准 SQL(Structured Query Language,结构化查询语言)数据库访问接口, 可以为多种关系数据库提供统一访问。JDBC(Java DataBase Connection,Java 数据库连接) 也提供一种基准,据此可以构建更高级的工具和接口。 目前的 JDK(Java Development Kit,Java 开发工具包)软件捆绑包括 JDBC 和 JDBC-ODBC(Open DataBase Connection,开放式数据库连接)桥。你可以从http://java。sun。com/products/JDK/CurrentRelease 找到最新版。
1) 安装驱动程序。
装载驱动程序只需要非常简单的一行代码。例如,你想要使用 JDBC-ODBC 桥驱动程序, 可以用下列代码装载它: Class.forName(\"\");
如果是JDBC Driver装载: Class.forName(\"jdbc.driver_class_name\");各种数据库驱动见附录。
2) 建立连接
第二步就是用适当的驱动程序类与 DBMS 建立一个连接。下列代码是一般的做法:
3) Connection con = DriverManager.getConnection(url, \" myLogin \", \" myPassword \");
这个步骤也非常简单,最难的是怎么提供 url。如果你正在使用 JDBC-ODBC 桥, JDBC URL 将以 jdbc:odbc 开始:余下 URL 通常是你的数据源名字或数据库系统。因此,假设你正在使用 ODBC 存取一个叫 \"webmail\" 的 ODBC 数据源,你的 JDBC URL 是 jdbc:odbc:webmail 。把 \"sa\" 及空格替换为你登陆 DBMS 的用户名及口令。如果你登陆数据库系统的用户名为 \"webmail\" 口令为空,只需下面的 2 行代码就可以建立一个连接:
String url = \"jdbc:odbc:webmail\";
Connection con = DriverManager.getConnection(url,\"webmail\",\"\");
如果你使用的是第三方开发了的 JDBC驱动程序,文档将告诉你该使用什么 subprotocol, 就是在 JDBC URL 中放在 jdbc 后面的部分。例如, 如果驱动程序开发者注册了 acme 作为 subprotocol, JDBC URL 的第一和第二部分将是
10页
如有你有帮助,请购买下载,谢谢!
jdbc:acme。驱动程序文档也会告诉你余下 JDBC URL 的格式。JDBC URL 最后一部分提供了定位数据库的信息。如果配置了连接池则要使用下面几行代码就可以建立一个连接: Context ctx; DataSource ds;
ctx = new InitialContext();
ds = (DataSource)ctx.lookup(\"java:comp/env/jdbc/webmail\");
connection 接口是JSP数据库编程使用多的接口之一,在connection接口中经常使用到一个方法close();要注意在连接用完后必须关闭,否则连接会继续保持,直到超时。
4) 创建 JDBC Statements 对象
Statement 对象用于把 SQL 语句发送到数据库 。你只须简单地创建一个 Statement 对象并且然后执行它,使用适当的方法执行你发送的 SQL 语句。对 SELECT 语句来说,可以使用 executeQuery。要创建或修改表的语句,使用的方法是 executeUpdate。
需要一个活跃的连接的来创建 Statement 对象的实例。在下面的例子中,使用的 Connection 对象 con 创建 Statement 对象 stmt: Statement
stmt
=
con.createStatement(int
resultSetType,int
resultSetConcurrency);
ResultSet rs=Stmt.executeUpdate(SQL);SQL为数据库查询语句
Con.createStatement()方法包含两参数:resultSetType和resultSetConcurrency
1. resultSetType参数:
用来设定ResultSet对象中的光标是否能够上下自由移动,它的值只能有3种,TYPE_FORWARD_ONLY、TYPE_SCROLL_SENSITIVE或TYPE_SCROLL_INSENSITEVE。若设为第一种,表示ResultSet对象中的光标能够随心所欲的上下移动,不过他们两者最大的差别在于:当ResultSet对象中的值有变时,TYPE_SCROLL_SENSITIVE能够取得改变后的值,而TYPE_SCROLL_INSENSITIVE不能。
2. resultSetConcurrency参数:
主要设定ResultSet对象是只读(read-only)还是可以改变的(updatable),他的值有两种,CONCUR_READ_ONLY和CONCUR_UPDATABLE。若设为CONCUR_READ_ONLY,则ResultSet对象和JDBC 1.0的功能一样;若为CONCUR_UPDATABLE,那么表示ResultSet对象可以直接执行数据库的新增、修改和移除功能。
在statement执行SQL语句是,有时会返回ResultSet结果集。该结果集往往包含的是查询的记录集。通过ResultSet.next()方法把当前的指针向下移动一位,随着每次调用next导致指针向下移动,按照从上到下的次序获取ResultSe行。
11页
如有你有帮助,请购买下载,谢谢!
,其常用的的方法如下:
getString():获得数据库里的varchar、char数据类型。 getFloat():获得数据库里的Float数据类型。
getDouble():获得数据库里的Double Precision数据类型。 getBoolean():获得数据库里Boolean数据类型。
getObject():该方法用于在SQL中无对应类型,可以获得系列化对象。 getClob():获得数据库里的Clob(字符串大型对象)数据类型的对象。 getBolb():获得数据库里的Blob(二进制大型对象)数据类型的对象。
3.6 本系统中的连接方式
在本TOMCAT中配置了连接池,连接程序用JavaBean方法封装,放在WEB-INF\\ classse目录下。 import java.sql.*; import javax.sql.*; import javax.naming.*; public class Db { public Connection con; public Statement stmt; public ResultSet rs;
public PreparedStatement pstmt; public static int error=0;
public static synchronized Connection getCon()throws Exception{ Context ctx; DataSource ds; try{
ctx = new InitialContext();
ds = (DataSource)ctx.lookup(\"java:comp/env/jdbc/webmail\"); ;
\"数据连接+\"+(++error)); return ds.getConnection(); }catch(SQLException e){ ; throw e; }
catch(NamingException e){ ;
12页
throw e; } }
public Statement getStmtread(){ try{
con=getCon();
stmt=con.createStatement( ;
}catch(Exception e){ \"getStmtread\"); ; }
return stmt; }
如有你有帮助,请购买下载,谢谢!
页
13如有你有帮助,请购买下载,谢谢!
结 论
这次实训中,积累了数据库编程和网站开发的基本经验和一些基本技巧。对大型系统开发有了实质性、操作性的认识,同时对运用JSP技术有了很大的提高,对以前学到的书本知识也是个很好的巩固,同时这次设计让我意识到自己的许多的不足,锻炼了自己独立发现问题,思考问题,解决问题的能力,也掌握了一些编程的思想和技巧,使自己的编程能力也有了很大的提高。
本文讲述了Java/JSP/Struts在WEB应用的一些基本知识,并通过网上订餐的程序对JSP的运用进行了深化,从本文中可看出JSP与Struts框架结合的模式,在电子商务上应用十分灵活,不过要真正掌握好它们却并不是一件容易的事情,在实际应用的WEB开发中,还有很多关于安全方面的问题需要考虑。在这里要感谢我的同学和张老师,她在我论文及设计的定题以及修改上给予了我很多的支持和帮助,再次感谢。
14页
因篇幅问题不能全部显示,请点此查看更多更全内容