线上点餐系统

线上点餐系统

大三课设


一、运行截图

1.1 管理员

登录界面:

在这里插入图片描述
用户管理:
在该界面中,可以对用户进行增删改以及查询,没有删除选项的用户,即为平级管理员。
不可删除的用户即平级管理员
新增用户管理界面:
在这里插入图片描述
分类管理:
在这里插入图片描述
菜品管理:
在这里插入图片描述

1.2 用户

注册
在这里插入图片描述
登录:
在这里插入图片描述

首页在这里插入图片描述
进入分类:
在这里插入图片描述
菜品详情:
在这里插入图片描述
加入购物车:
在这里插入图片描述
支付界面:
在这里插入图片描述
订单界面:
在这里插入图片描述
订单详情:
在这里插入图片描述
最近访问:
在这里插入图片描述
为你推荐:
是根据最近访问次数最多的菜品,来推荐同一分类的菜品
在这里插入图片描述

二、功能介绍

1.需求分析

用户需求:更加便捷快速的找到自己想吃的,进入餐厅时无需因点餐而等待,,用餐后可及时反馈,使餐厅人员意识到不足并及时改正,进而也可使餐厅收获更多的顾客与良好的口碑。
约束条件:管理相关界面只有管理员能登录;未登录状态时,只能查看菜品,无法加入购物车或购买。
运行环境:Eclipse,MySQL8,Tomcat7.0
图形操作界面:jsp+servlet+css
用户用例/泳道图
图1 顾客泳道图

在这里插入图片描述

2.功能简述

登录注册模块
管理界面有单独的登录入口,管理员的账号可以用于后台登录,也可以用于用户登录。若用户在管理员登录界面登录,界面会直接跳转到商品界面
管理员功能模块
用户管理:增删改,根据状态分为用户或管理员
分类管理:增,若增加父分类,则选择根分类,然后添加分类名称,若添加子分类,则先选择已有父分类,然后添加名称。删,若删除整个父分类,则其以下的子分类也都会删除。改,可修改分类名称,也可修改分类所属父级。
商品管理:增选择所属总分类,商品名称,图片,库存,备注,删改
订单管理:查看
用户功能模块
查看商品:点击进入详情页
添加购物车:点击加入购物车,留在当前页面
立即购买:点击立即购买,跳转到购物车
查看订单:在个人中心或下单后,可查看到购买记录

3.数据库设计

E-R图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);
	}

总结

以上就是我的课设内容,大体的功能较为完善,但是订单部分完成程度仍待改善。欢迎各位大佬指教~
本片文章借鉴了一些大佬的文章和代码,侵删

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值