目录
一、 系统简介
1.1需求分析
餐厅管理系统是一个基于Javaweb的系统,旨在为音乐餐厅、情侣餐厅和中餐厅提供全面的管理和服务功能。系统主要包括餐厅详情管理、价格管理和加入购物车功能。
1.2 编程环境与工具
二、 系统总体设计
2.1 系统的功能模块图。
2.2 各功能模块简介。
三、 主要业务流程
(1)用户及管理员登录流程图
(2)信息添加流程
(3)信息删除流程
四、 数据库的设计
五、 系统功能详细实现及效果图
(1) 首页
(2) 管理页面
(3) 餐厅页面
(4) 登录与退出
六、 总结
餐厅管理系统是一个基于Javaweb的系统,旨在为音乐餐厅、情侣餐厅和中餐厅提供全面的管理和服务功能。系统主要包括餐厅详情管理、价格管理和加入购物车功能。
1.系统架构:采用 B/S 架构,基于 JavaWeb 技术实现。
2.数据库设计:使用关系型数据库,如 MySQL 或 Oracle 等。
3.技术框架:Servlet JDBC Java JSP 等。
1.2 编程环境与工具
根据本系统体系结构特点和使用本系统的用户特点,编程环境与工具的配置如表1-1所示:
表1-1 开发环境表
Tab. 1-1 Development environment table
类别 | 标准配置 |
开发语言 | Java |
开发工具 | IDEA |
开发环境 | JDK 8.0 |
服务器 | Tomcat 8.0 |
数据库 | MySql 5.6 |
按照系统的分析,本系统采用基于B/S架构的系统,系统分为管理员和普通用户两种身份,其中普通用户可以管理个人用户信息,也可以对数据库进行修改操作;需要先登录,然后才能使用系统的各项功能,会涉及相应的信息。
- 提供餐厅的基本信息,如名称、展示餐厅的图片,包括环境、菜品等;
- 支持对餐厅进行分类,如音乐餐厅、情侣餐厅、中餐厅等。
对于系统的安全性的第一关,就是用户想要进入系统,必须通过登录窗口,输入自己的登录信息才可以进行登录,用户输入的信息准确无误后才可以进入到操作系统界面,进行功能模块的相对应操作,如果用户输入的信息不正确,则窗口出现提示框,用户登录失败,返回到第一步进行重新输入,如图3-1所示。
图3-1登录流程图
Figure 3-1 Login Flowchart
对于系统,需要随时添加所需要的数据信息,对于用户添加信息,需要根据添加界面,根据选框的内容进行填写所要添加的数据信息,信息输入完成后判断数据信息是否符合要求,符合要求则添加完成,用户所添加的信息不符合要求,则需要返回到第一步,重新输入数据信息,再进行判断操作,如图3-2所示。
图3-2信息添加流程图
Figure 3-2 Information is added to the Flowchart
不管是哪个用户角色进入到不通的系统操作界面,都可以进行不同的信息内容的操作功能,对用系统数据信息的删除,用户一旦将信息删除,那么该删除的数据信息将无法恢复,所以用户在对数据删除事,一定判断删除的内容是否是确定要删除的,确定无误后选择确定删除操作,如图3-3所示。
Figure 3-3 Information Deletion Flowchart
用表格列出表的结构及说明表中主要列的作用。
ID | 名称 | 类型 | 是否主键 | 空 | 解释 |
1 | id | int | 是 | 不能 | 编号 |
2 | username | varchar | 不是主键 | 不能 | 用户名 |
3 | password | varchar | 不是主键 | 不能 | 密码 |
4 | xingming | varchar | 不是主键 | 不能 | 姓名 |
5 | role | int | 不是主键 | 不能 | 职责 |
6 | dianhua | varchar | 不是主键 | 不能 | 电话 |
7 | dizhi | varchar | 不是主键 | 不能 | 地址 |
此为用户表,包括用户名、密码。
ID | 名称 | 类型 | 是否主键 | 空 | 解释 |
1 | id | int | 是 | 不能 | 编号 |
2 | biaoti | varchar | 不是主键 | 不能 | 标题 |
3 | neirong | text | 不是主键 | 不能 | 内容 |
4 | shijian | varchar | 不是主键 | 不能 | 时间 |
此为公告表,包括标题、内容。
ID | 名称 | 类型 | 是否主键 | 空 | 解释 |
1 | id | int | 是 | 不能 | 编号 |
2 | pname | varchar | 不是主键 | 不能 | 名称 |
3 | imgpath | varchar | 不是主键 | 不能 | 图片 |
4 | createtime | varchar | 不是主键 | 不能 | 姓名 |
5 | fenleiid | varchar | 不是主键 | 不能 | 分类id |
6 | fname | varchar | 不是主键 | 不能 | 类型名 |
7 | jiage | float | 不是主键 | 不能 | 价格 |
8 | tuijian | varchar | 不是主键 | 不能 | 推荐 |
9 | dianjishu | int | 不是主键 | 不能 | 点击数 |
10 | xiaoliang | int | 不是主键 | 不能 | 销量 |
11 | miaoshu | text | 不是主键 | 不能 | 描述 |
此为餐厅表,包括餐厅名,图片。
此为餐厅封面界面,点击进入即可跳转到餐厅页面。
public static String getPagerNormal(int total, int pagesize, int pagenum,String pageurl,String info) {
int count = total / pagesize;
if (total % pagesize > 0) {
count++;
}
if(pageurl.indexOf("?")>-1){
pageurl = pageurl + "&";
}else{
pageurl = pageurl + "?";
}
StringBuffer buf = new StringBuffer();
buf.append(info+" ");
buf.append(pagenum+"/"+ count +" ");
if (pagenum == 1) {
// buf.append("<SPAN style='color:#CCCCCC'>【首页】</SPAN><SPAN style='color:#CCCCCC'>【上一页】</SPAN> ");
} else {
// buf.append("【<a href='" + pageurl + "pagenum=1'>首页</a>】【<a href='" + pageurl + "pagenum=" + (pagenum - 1)
// + "' >上一页</a>】");
}
int bound1 = ((pagenum - 2) <= 0) ? 1 : (pagenum - 2);
int bound2 = ((pagenum + 2) >= count) ? count : (pagenum + 2);
// for (int i = bound1; i <= bound2; i++) {
// if (i == pagenum) {
// buf.append("<SPAN style='color:#FF0000'>" + i
// + "</SPAN> ");
// } else {
// buf.append("<a href='" + pageurl + "pagenum=" + i + "'>" + i
// + "</a> ");
// }
// }
if (bound2 < count) {
buf.append("<SPAN>...</SPAN>");
}
if (pagenum == count||count==0) {
// buf.append("<SPAN style='color:#CCCCCC'>【下一页】</SPAN><SPAN style='color:#CCCCCC'>【尾页】</SPAN>");
} else {
// buf.append("【<a href='" + pageurl + "pagenum=" + (pagenum + 1)
// + "'>下一页</a>】【<a href='" + pageurl + "pagenum=" + count
// + "'>尾页</a>】");
}
return buf.toString();
}
}
这是餐厅管理界面包括用户的信息,包括查找和删除方法。
public void insertBean(User bean){
Connection conn = null;
PreparedStatement ps = null;
try{
String sql = "insert into t_User(username,password,xingming,role,dianhua,dizhi) values(?,?,?,?,?,?)";
conn = DBConn.getConn();
ps = conn.prepareStatement(sql);
ps.setString(1, bean.getUsername());
ps.setString(2, bean.getPassword());
ps.setString(3, bean.getXingming());
ps.setInt(4, bean.getRole());
ps.setString(5, bean.getDianhua());
ps.setString(6, bean.getDizhi());
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
DBConn.close(conn, ps, null);
}
}
//更新记录
public void updateBean(User bean){
Connection conn = null;
PreparedStatement ps = null;
try{
String sql = "update t_User set username=?,password=?,xingming=?,role=?,dianhua=?,dizhi=? where id= "+bean.getId();
conn = DBConn.getConn();
ps = conn.prepareStatement(sql);
ps.setString(1, bean.getUsername());
ps.setString(2, bean.getPassword());
ps.setString(3, bean.getXingming());
ps.setInt(4, bean.getRole());
ps.setString(5, bean.getDianhua());
ps.setString(6, bean.getDizhi());
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
DBConn.close(conn, ps, null);
}}
这是餐厅分类页面,包括上传图片、查找和删除的方法。
public void insertBean(Product bean){
Connection conn = null;
PreparedStatement ps = null;
try{
String sql = "insert into t_Product(pname,imgpath,createtime,fenleiid,fname,jiage,tuijian,dianjishu,xiaoliang,miaoshu) " +
"values(?,?,?,?,?,?,?,?,?,?)";
conn = DBConn.getConn();
ps = conn.prepareStatement(sql);
ps.setString(1, bean.getPname());
ps.setString(2, bean.getImgpath());
ps.setString(3, bean.getCreatetime());
ps.setString(4, bean.getFenleiid());
ps.setString(5, bean.getFname());
ps.setDouble(6, bean.getJiage());
ps.setString(7, bean.getTuijian());
ps.setInt(8, bean.getDianjishu());
ps.setInt(9, bean.getXiaoliang());
ps.setString(10, bean.getMiaoshu());
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
DBConn.close(conn, ps, null);
}
}
//更新记录
public void updateBean(Product bean){
Connection conn = null;
PreparedStatement ps = null;
try{
String sql = "update t_Product set pname=?,imgpath=?,createtime=?,fenleiid=?,fname=?,jiage=?,tuijian=?,dianjishu=?,xiaoliang=?,miaoshu=? where id= "+bean.getId();
conn = DBConn.getConn();
ps = conn.prepareStatement(sql);
ps.setString(1, bean.getPname());
ps.setString(2, bean.getImgpath());
ps.setString(3, bean.getCreatetime());
ps.setString(4, bean.getFenleiid());
ps.setString(5, bean.getFname());
ps.setDouble(6, bean.getJiage());
ps.setString(7, bean.getTuijian());
ps.setInt(8, bean.getDianjishu());
ps.setInt(9, bean.getXiaoliang());
ps.setString(10, bean.getMiaoshu());
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
DBConn.close(conn, ps, null);
}
}
- 餐厅页面
餐厅主页面展示了餐厅的各种重要信息,页面的顶部将显示一个导航栏,方便用户快速访问不同的页面。
在页面的中心位置,将会有一个明显的区域用于展示餐厅的类别。这里将列出餐厅所提供的各种菜品类型,如中餐、西餐等。
public class Product {
private int id;//主键
private String pname;//餐厅名称
private String imgpath;//餐厅图片
private String createtime;//上架时间
private String fenleiid;//分类ID,外键
private String fname;//分类名
private double jiage;//餐厅价格
private String tuijian;//是否查看 未查看 已推荐
private int dianjishu;//餐厅点击数
private int xiaoliang;//处理数
private String miaoshu;//餐厅介绍
public int getId() {
return id;
}
这是一个登录界面,它提供了用户登录的功能。通过输入正确的用户名和密码,用户可以成功登录并进入餐厅管理界面。
在 Java 中,我们可以使用UI 框架来创建这样的登录界面。
//用户登录
if("login".equals(method)){
//从jsp页面获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//查询用户名和密码是否匹配
User bean = userDao.selectBean(" where username='"+username+"' and password ='"+password+"' and role=1 ");
if(bean!=null){
HttpSession session = request.getSession();
session.setAttribute("manage", bean);
writer.print("<script language='javascript'>alert('登录成功');window.location.href='"+basePath+"manage/index.jsp'; </script>");
}else{
writer.print("<script language='javascript'>alert('用户名或者密码错误');window.location.href='"+basePath+"manage/login.jsp';</script>");
}
}
//退出操作
else if("loginout".equals(method)){
HttpSession session =request.getSession();
session.removeAttribute("manage");
writer.print("<script language='javascript'>alert('退出成功');window.location.href='"+basePath+"manage/login.jsp';</script>");
}
//跳转到修改密码页面
else if("passwordupdate".equals(method)){
request.setAttribute("biaoti", "修改密码");
request.setAttribute("url", "manageServlet/passwordupdate2");
RequestDispatcher dispatcher = request.getRequestDispatcher("/manage/passwordupdate.jsp");
dispatcher.forward(request, response);
}
//修改密码操作
else if("passwordupdate2".equals(method)){
//从JSP获取信息
String password1 = request.getParameter("password1");
String password2 = request.getParameter("password2");
HttpSession session = request.getSession();
User user = (User)session.getAttribute("manage");
User u = userDao.selectBean(" where username='"+user.getUsername()+"' and password='"+password1+"' ");
if(u!=null){
u.setPassword(password2);
userDao.updateBean(u);
writer.print("<script language='javascript'>alert('操作成功');window.location.href='"+basePath+"manageServlet/passwordupdate'; </script>");
}else{
writer.print("<script language='javascript'>alert('操作失败,原密码错误!');window.location.href='"+basePath+"manageServlet/passwordupdate'; </script>");
}
- 总结归纳
基于 Java Web 的餐厅管理系统是一个功能齐全、易于使用的解决方案。总的来说,基于 Java Web 的餐厅管理系统提高了餐厅的运营效率和管理水平,为顾客提供了更好的服务体验。
1. 技术选择:JavaWeb 学习过程中 我们主要使用的技术是Java Servlet Tomcat JSP EL表达式等,使开发过程更加高效和规范化。
2. 数据库设计:系统使用 MySQL 数据库进行数据存储,数据表设计合理,符合第三范式,保证了数据的完整性和一致性。
3. 界面设计:系统的界面设计简洁、美观,用户操作方便,提高了用户体验。
4. 安全性设计:系统采用了权限控制和密码加密等安全性措施,保证了系统的安全性。
- 不足
1. 性能问题:在高并发情况下,系统的响应速度可能会受到影响,需要进一步优化数据库查询和页面渲染。
2. 移动端适配:系统目前主要针对桌面浏览器进行设计,在移动端的适配性方面还有待改进。
3. 数据备份与恢复:系统缺乏完善的数据备份与恢复功能,需要进一步加强以防止数据丢失。
4. 用户体验:尽管界面设计简洁,但在一些用户交互细节上还可以进一步优化,提升用户体验。
综上所述,基于 Java Web 的餐厅管理系统在功能实现和技术运用上相对成熟,但在性能、移动端适配、数据备份以及用户体验等方面仍有提升的空间。通过持续改进和优化,该系统可以更好地满足餐厅管理的实际需求。
完整源码: