线上点餐系统
大三课设
一、运行截图
1.1 管理员
登录界面:
用户管理:
在该界面中,可以对用户进行增删改以及查询,没有删除选项的用户,即为平级管理员。
新增用户管理界面:
分类管理:
菜品管理:
1.2 用户
注册
登录:
首页
进入分类:
菜品详情:
加入购物车:
支付界面:
订单界面:
订单详情:
最近访问:
为你推荐:
是根据最近访问次数最多的菜品,来推荐同一分类的菜品
二、功能介绍
1.需求分析
用户需求:更加便捷快速的找到自己想吃的,进入餐厅时无需因点餐而等待,,用餐后可及时反馈,使餐厅人员意识到不足并及时改正,进而也可使餐厅收获更多的顾客与良好的口碑。
约束条件:管理相关界面只有管理员能登录;未登录状态时,只能查看菜品,无法加入购物车或购买。
运行环境:Eclipse,MySQL8,Tomcat7.0
图形操作界面:jsp+servlet+css
用户用例/泳道图:
2.功能简述
登录注册模块:
管理界面有单独的登录入口,管理员的账号可以用于后台登录,也可以用于用户登录。若用户在管理员登录界面登录,界面会直接跳转到商品界面
管理员功能模块:
用户管理:增删改,根据状态分为用户或管理员
分类管理:增,若增加父分类,则选择根分类,然后添加分类名称,若添加子分类,则先选择已有父分类,然后添加名称。删,若删除整个父分类,则其以下的子分类也都会删除。改,可修改分类名称,也可修改分类所属父级。
商品管理:增选择所属总分类,商品名称,图片,库存,备注,删改
订单管理:查看
用户功能模块:
查看商品:点击进入详情页
添加购物车:点击加入购物车,留在当前页面
立即购买:点击立即购买,跳转到购物车
查看订单:在个人中心或下单后,可查看到购买记录
3.数据库设计
E-R图
逻辑结构设计
4.数据库截图
购物车数据库:
分类数据库:
商品数据库:
用户数据库:
订单数据库:
系统功能模块图:
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
三.部分代码
代码如下:
数据库部分:
package com.res.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Basedao {
static{
//加载驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getconn(){
//创建连接对象
Connection conn=null;
try {
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/myrestaurant?useSSL=false&serverTimezone=UTC","root","199992321a");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static int exectuIUD(String sql, Object[] params){
int count=0;
Connection conn = Basedao.getconn();
//准备SQL
PreparedStatement ps=null;
//insert int user()value(?,?,?);
try {
//
ps= conn.prepareStatement(sql);
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
count=ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Basedao.closeall(null, ps, conn);
}
return count;
}
public static void closeall(ResultSet rs, PreparedStatement ps, Connection conn){
try {
if(rs!=null)
rs.close();
if(ps!=null)
ps.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注册功能:
function CheckItem(obj){
var msgBox=$(obj).next('span');
switch($(obj).attr('name')){
case"userName":
if(obj.value==""){
msgBox.html('用户名不能为空!');
msgBox.addClass('error');
flag=false;
}else{
var url="usernamecheck?name="+encodeURI($(obj).val())+"&"+new Date().getTime();
//"false""true"
$.get(url,function(data){
if(data=="false"){
msgBox.html('用户名已被占用!');
msgBox.addClass('error');
flag=false;
}else{
msgBox.html().removeClass('error');
flag=true;
}
});
}
break;
case"passWord":
if(obj.value==""){
msgBox.html('密码不能为空!');
msgBox.addClass('error');
flag=false;
}else{
flag=true;
}
break;
case"rePassWord":
if(obj.value==""){
msgBox.html('确认密码不能为空!');
msgBox.addClass('error');
flag=false;
}else if($(obj).val()!=$('input[name="passWord"]').val() ){
msgBox.html('两次密码不一致!');
msgBox.addClass('error');
}else{
flag=true;
}
break;
case"veryCode":
var numshow = $(obj).next().next();
if(obj.value==""){
numshow.html('验证码不能为空!');
numshow.addClass('error');
flag=false;
}else{
var url="checkusernum?num="+encodeURI($(obj).val())+"&"+new Date().getTime();
$.get(url,function(numdata){
if(numdata=='false'){
numshow.html('验证码输入错误!');
numshow.addClass('error');
flag=false;
}else{
numshow.html().removeClass('error');
flag=true;
}
});
}
break;
}
}
String sql="insert into user value(?,?,?,?,DATE_FORMAT(?,'%Y-%m-%d'),?,?,?,?,?)";
//管理员登录:
if(uri.contains("admin_")){
if(flag!=null && flag.equals("1")){
chain.doFilter(req, resp);
}else{
PrintWriter out=resp.getWriter();
out.write("<script>");
out.write("alert('请先登录!');");
out.write("location.href='login.jsp';");
out.write("</script>");
out.close();
return;
}
}else{
chain.doFilter(req, resp);
}
//普通用户登录:
user users=RES_USERDao.selectAdmin(userName,passWord);
session.setAttribute("name",users);
session.setAttribute("isLogin", "1");
response.sendRedirect("indexselect");
//登录检验:
public static int selectByName(String id){
int count=0;
Connection conn=Basedao.getconn();
PreparedStatement ps=null;
ResultSet rs=null;
try {
String sql="select count(*) from user where USER_ID = ?";
ps=conn.prepareStatement(sql);
ps.setString(1, id);
rs=ps.executeQuery();
while(rs.next()){
count=rs.getInt(1);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Basedao.closeall(rs, ps, conn);
}
return count;
}
首页显示:
```java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ArrayList<RES_CATEGORY> flist = RES_CATEGORYDao.selectCate("father");
request.setAttribute("flist", flist);
ArrayList<RES_CATEGORY> clist = RES_CATEGORYDao.selectCate("child");
request.setAttribute("clist", clist);
HttpSession session=request.getSession();
String fid=request.getParameter("fid");
String cid=request.getParameter("cid");
int id=0;
ArrayList<RES_PRODUCT> list=null;
if(fid!=null){
id=Integer.parseInt(fid);
list=RES_PRODUCTDao.selectAllByFid(id);
}
if(cid!=null){
id=Integer.parseInt(cid);
list=RES_PRODUCTDao.selectAllByCid(id);
}
//request.setAttribute("title", RES_CATEGORYDao.selectById(id).getCATE_NAME());
request.setAttribute("list", list);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
//显示全部商品:
public static ArrayList<RES_PRODUCT> selectAll(){
ArrayList<RES_PRODUCT> list=new ArrayList<RES_PRODUCT>();
//声明结果集
ResultSet rs=null;
//获取连接对象
Connection conn=Basedao.getconn();
PreparedStatement ps=null;
try {
String sql="select * from RES_PRODUCT ";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
RES_PRODUCT p=new RES_PRODUCT(
rs.getInt("PRODUCT_ID"),
rs.getString("PRODUCT_NAME"),
rs.getString("PRODUCT_DESCRIPTION"),
rs.getInt("PRODUCT_PRICE"),
rs.getInt("PRODUCT_STOCK"),
rs.getInt("PRODUCT_FID"),
rs.getInt("PRODUCT_CID"),
rs.getString("PRODUCT_FILENAME")
);
list.add(p);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Basedao.closeall(rs, ps, conn);
}
return list;
}
首页用户功能:
//通过父分类选择商品:
public static ArrayList<RES_PRODUCT> selectAllByFid(int fid){
ArrayList<RES_PRODUCT> list=new ArrayList<RES_PRODUCT>();
//声明结果集
ResultSet rs=null;
//获取连接对象
Connection conn=Basedao.getconn();
PreparedStatement ps=null;
try {
String sql="select * from RES_PRODUCT where PRODUCT_FID=?";
ps=conn.prepareStatement(sql);
ps.setInt(1, fid);
rs=ps.executeQuery();
while(rs.next()){
RES_PRODUCT p=new RES_PRODUCT(
rs.getInt("PRODUCT_ID"),
rs.getString("PRODUCT_NAME"),
rs.getString("PRODUCT_DESCRIPTION"),
rs.getInt("PRODUCT_PRICE"),
rs.getInt("PRODUCT_STOCK"),
rs.getInt("PRODUCT_FID"),
rs.getInt("PRODUCT_CID"),
rs.getString("PRODUCT_FILENAME")
);
list.add(p);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Basedao.closeall(rs, ps, conn);
}
return list;
}
//分类:
public static ArrayList<RES_CATEGORY> selectAll(){
ArrayList<RES_CATEGORY> list=new ArrayList<RES_CATEGORY>();
//声明结果集
ResultSet rs=null;
//获取连接对象
Connection conn=Basedao.getconn();
PreparedStatement ps=null;
try {
String sql="select * from RES_CATEGORY ";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
RES_CATEGORY cate=new RES_CATEGORY(
rs.getInt("CATE_ID"),
rs.getString("CATE_NAME"),
rs.getInt("CATE_PARENT_ID")
);
list.add(cate);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Basedao.closeall(rs, ps, conn);
}
return list;
}
//选择分类:
public static ArrayList<RES_CATEGORY> selectCate(String flag){
ArrayList<RES_CATEGORY> list=new ArrayList<RES_CATEGORY>();
//声明结果集
ResultSet rs=null;
//获取连接对象
Connection conn=Basedao.getconn();
PreparedStatement ps=null;
try {
String sql=null;
if(flag!=null && flag.equals("father")){
sql="select * from RES_CATEGORY where CATE_PARENT_ID=0 ";
}else{
sql="select * from RES_CATEGORY where CATE_PARENT_ID!=0";
}
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
RES_CATEGORY cate=new RES_CATEGORY(
rs.getInt("CATE_ID"),
rs.getString("CATE_NAME"),
rs.getInt("CATE_PARENT_ID")
);
list.add(cate);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Basedao.closeall(rs, ps, conn);
}
return list;
}
//增删改分类:
public static int insert(RES_CATEGORY cate){
String sql="insert into res_category values(null,?,?)";
Object[] params={
cate.getCATE_NAME(),
cate.getCATE_PARENT_ID()
};
return Basedao.exectuIUD(sql, params);
}
public static RES_CATEGORY selectById(int id){
RES_CATEGORY cate=null;
//声明结果集
ResultSet rs=null;
//获取连接对象
Connection conn=Basedao.getconn();
PreparedStatement ps=null;
try {
String sql="select * from RES_CATEGORY where CATE_ID=?";
ps=conn.prepareStatement(sql);
ps.setInt(1, id);
rs=ps.executeQuery();
while(rs.next()){
cate=new RES_CATEGORY(
rs.getInt("CATE_ID"),
rs.getString("CATE_NAME"),
rs.getInt("CATE_PARENT_ID")
);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Basedao.closeall(rs, ps, conn);
}
return cate;
}
public static int update(RES_CATEGORY cate){
String sql="update RES_CATEGORY set CATE_NAME=?, CATE_PARENT_ID=? where CATE_ID=?";
System.out.print(sql);
Object[] params={
cate.getCATE_NAME(),
cate.getCATE_PARENT_ID(),
cate.getCATE_ID()
};
return Basedao.exectuIUD(sql, params);
}
public static int del(int id){
String sql="delete from RES_CATEGORY where CATE_ID=?";
Object[] params={id};
return Basedao.exectuIUD(sql, params);
}
购物车:
//新增购物车:
public static int insert(RES_CART cart){
String sql="insert into res_cart values(null,?,?,?,?,?,?,?,1)";
Object[] params={
cart.getCart_p_filename(),
cart.getCart_p_name(),
cart.getCart_p_price(),
cart.getCart_quantity(),
cart.getCart_p_stock(),
cart.getCart_p_id(),
cart.getCart_u_id()
};
return Basedao.exectuIUD(sql, params);
}
//显示购物车:
public static RES_CART getCartShop(String uid,String pid){
RES_CART es=null;
//声明结果集
ResultSet rs=null;
//获取连接对象
Connection conn=Basedao.getconn();
PreparedStatement ps=null;
try {
String sql="select * from RES_CART where CART_U_ID=? and CART_P_ID=? and CART_VALID=1 order by CART_ID desc";
ps=conn.prepareStatement(sql);
ps.setString(1, uid);
ps.setInt(2, Integer.parseInt(pid));
rs=ps.executeQuery();
while(rs.next()){
es=new RES_CART(
rs.getInt("cart_id"),
rs.getString("cart_p_filename"),
rs.getString("cart_p_name"),
rs.getInt("cart_p_price"),
rs.getInt("cart_quantity"),
rs.getInt("cart_p_stock"),
rs.getInt("cart_p_id"),
rs.getString("cart_u_id"),
rs.getInt("cart_valid")
);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Basedao.closeall(rs, ps, conn);
}
return es;
}
//更新购物车数量:
public static int updatenum(int esid,int count){
String sql="update RES_CART set cart_quantity=? where cart_id=?";
Object[] params = {count,esid};
return Basedao.exectuIUD(sql, params);
}
//删除购物车中商品:
public static int getDeleteDD(int id){
String sql = "delete from RES_CART where cart_id=?";
Object[] params={id};
return Basedao.exectuIUD(sql, params);
}
订单部分:
//新增订单:
public static int insert(RES_ORDER o){
String sql="insert into RES_ORDER value(?,?,?,?,?,?,?)";
Object[] params={
o.getORDER_ID(),
o.getPAYMENT(),
o.getPAYMENT_TYPE(),
o.getORDER_STATUS(),
o.getCREATE_TIME(),
o.getORDER_U_ID(),
o.getMESSAGE_STATUS()
};
return Basedao.exectuIUD(sql, params);
}
总结
以上就是我的课设内容,大体的功能较为完善,但是订单部分完成程度仍待改善。欢迎各位大佬指教~
本片文章借鉴了一些大佬的文章和代码,侵删