NET 实战:30 天搞定企业级 Web 订餐系统(附完整源码 + 数据库设计)

前言

在互联网渗透率持续飙升的今天,传统餐饮业的数字化转型已成必然趋势。电话订餐效率低、订单易出错、用户体验差,而基于 Web 的订餐系统能完美解决这些痛点 —— 既帮企业降本增效,又让用户足不出户轻松点餐。

本文将带大家从零搭建一套企业级 Web 订餐系统,基于.NET 平台 + SQL Server 实现,涵盖用户注册登录、菜品浏览、在线订餐、留言评分、后台管理全流程。不仅有详细的技术选型、数据库设计、模块实现,还附上完整源码和避坑指南,新手也能直接上手!

一、项目背景与价值

1. 行业痛点

传统电话订餐:占线、漏单、信息传达错误频发人工管理低效:菜单更新、订单统计、用户维护全靠手动用户体验不足:无法提前查看菜品详情、评价,订餐流程繁琐

2. 系统核心价值

对企业:降低人工成本(减少接线员)、提升订单处理效率、数据化管理用户与菜品对用户:24 小时在线订餐、可视化菜品信息、支持留言评价、订单状态可追踪技术层面:采用 B/S 架构,无需客户端安装;基于.NET 平台,安全稳定易扩展

二、技术栈选型(新手友好 + 企业常用)

1. 开发环境与框架

技术类型 具体选型 核心优势
开发平台 .NET Framework 微软官方支持,生态完善,工具链成熟
开发语言 VB.NET 语法简洁,面向对象,适合快速开发 Web 应用
Web 框架 ASP.NET 编译型框架,性能强,支持前后端分离(逻辑与视图解耦)
数据库 SQL Server 2000 关系型数据库,事务稳定,适合存储结构化订单 / 用户数据
加密算法 MD5 不可逆加密,保障用户密码安全

2. 核心技术亮点

B/S 架构:浏览器直接访问,跨设备兼容(电脑 / 手机均可使用)数据加密:用户密码 MD5 加密存储,防止隐私泄露组件化开发:模块化设计,用户模块、管理员模块独立,便于维护数据绑定:使用 DataGrid 控件快速实现数据展示,减少重复编码

三、数据库设计(附完整表结构)

数据库是系统的核心,本项目设计 6 张核心数据表,覆盖用户、菜品、订单、留言全场景,遵循三大范式,避免数据冗余。

1. 核心数据表结构

(1)用户表(shopper)- 存储用户注册与登录信息
列名 中文名称 数据类型 长度 是否允许空 备注
cshopperid 用户名 Char 10 Not null 主键,用户唯一标识
cpassword 密码 Char 50 Not null MD5 加密后存储
vemail 电子邮箱 Varchar 50 Not null 用于找回密码
cphone 电话 Char 15 Null 可选填写
vaddress 地址 Varchar 50 Null 默认送餐地址
dregistertime 注册时间 Datetime 8 Not null 自动记录注册时间
(2)菜单表(dish)- 存储菜品信息
列名 中文名称 数据类型 长度 是否允许空 备注
cdishid 菜品编号 Char 10 Not null 主键
vdishname 菜名 Varchar 60 Not null 菜品名称
vdishdescription 简介 Varchar 300 Not null 口味、食材等
cdishrate 价格 Char 10 Not null 菜品单价
(3)订单相关表

新订单表(neworder):存储订单编号、用户 ID、菜品 ID、数量、订餐时间等添加订单表(orderadd):存储订单对应的送餐地址留言信息表(message):存储用户留言内容、评分、留言时间管理员表(manager):存储管理员 ID、密码、权限信息

2. 表关系说明

订单表(neworder)通过 userid 关联用户表(shopper),通过 dishid 关联菜单表(dish)留言表(message)通过 cshopperid 关联用户表(shopper)所有表集中在 dishsale 数据库,便于统一管理和维护

四、系统核心模块实现(附关键代码)

系统分为两大核心模块:用户模块(面向消费者)和管理员模块(面向商家),模块间独立运行,数据通过数据库同步。

1. 用户模块(核心功能:注册 + 登录 + 订餐 + 留言)

(1)新用户注册 – 密码 MD5 加密

注册流程:填写信息 → 校验用户名唯一性 → 密码加密 → 存入数据库

vb



' 数据库连接字符串
conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"
cmd.Connection = conn
conn.Open()

' 校验用户名是否已存在
Dim strsql As String = "select * from shopper where cshopperid='" & Trim(txtName.Text) & "'"
cmd = New SqlCommand(strsql, conn)
Dim reader As SqlDataReader = cmd.ExecuteReader()
 
If reader.Read() = True Then
    namewrong.Text = "已有此用户名"
    conn.Close()
Else
    conn.Close()
    ' MD5加密密码
    Dim str1 As String = Password1.Text
    Dim str2 As String = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str1, "MD5")
    
    ' 插入用户信息到数据库
    Dim sqlstr As String = "insert shopper([cshopperid],[cpassword],[csex],[vemail],[dregistertime]) values('" & Trim(txtName.Text) & "','" & str2 & "','" & IIf(man.Checked, "男", "女") & "','" & Trim(txtEmail.Text) & "','" & System.DateTime.Now & "')"
    ' 执行SQL语句(略)
    Response.Write("<script>alert('注册成功!');</script>")
End If

关键亮点:密码采用 MD5 不可逆加密,即使数据库泄露,用户密码也不会被破解。

(2)在线订餐 – 多菜品选择 + 数量自定义

订餐流程:浏览菜品 → 选择菜品及数量 → 填写送餐地址 → 提交订单 → 数据库记录核心代码(绑定菜品列表):

vb



' 绑定菜单表到DataGrid控件,展示菜品信息
Private Sub BindGrid()
    Dim conn As New SqlConnection
    Dim cmd As New SqlCommand
    Dim DS As New DataSet
    conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"
    
    conn.Open()
    cmd.Connection = conn
    ' 查询菜品名称、价格、口味
    Dim adpt1 As New SqlDataAdapter("select cdishid,vdishname 菜品名称,cdishrate 价格,vdishdescription 口味 from dish", conn)
    adpt1.Fill(DS, "OUTER")
    DataGrid1.DataSource = DS
    DataGrid1.DataBind()
    conn.Close()
End Sub

用户体验优化:支持多菜品同时选择,下拉框自定义数量,实时展示菜品价格和口味。

(3)留言评分 – 实时同步展示

用户可对服务评分(1-5 星)并留言,提交后实时更新到页面:

vb



' 校验留言内容非空
If Request("word") = "" Then
    Response.Write("<SCRIPT language=JavaScript>alert('留言信息不能为空!');this.location.href='message.aspx';</SCRIPT>")
End If

' 插入留言数据到数据库
sqlstr = "insert message([cmessageid],[cshopperid],[dmessagetime],[cscore],[vmessage]) values('" & NewID() & "','" & Session("cshopperid") & "','" & System.DateTime.Now & "','" & IIf(s5.Checked, "5", IIf(s4.Checked, "4", "3")) & "','" & Request("word") & "')"
' 执行SQL语句(略)
Response.Write("<SCRIPT language=JavaScript>alert('留言成功!');</SCRIPT>")
BindGrid() ' 重新绑定留言列表

2. 管理员模块(核心功能:订单 + 菜单 + 用户 + 留言管理)

(1)订单管理 – 确认 / 删除订单

管理员可查看所有订单,对未确认订单进行 “确认送餐” 操作,或删除无效订单:

vb



' 订单确认/删除操作
Sub PickArt(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
    If e.CommandName = "Delete" Then
        ' 删除订单
        Dim Selected_Id As Integer = CInt(e.Item.Cells(2).Text)
        Dim conn As New SqlConnection
        conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial Catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"
        conn.Open()
        Dim cmd As New SqlCommand("delete from neworder where dishid =" & Selected_Id, conn)
        cmd.ExecuteNonQuery()
        conn.Close()
    ElseIf e.CommandName = "Select" Then
        ' 确认订单(更新status状态)
        Dim Selected_Id As Integer = CInt(e.Item.Cells(2).Text)
        Dim conn As New SqlConnection
        conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial Catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"
        conn.Open()
        Dim cmd As New SqlCommand("update neworder set status= status+1 where dishid =" & Selected_Id, conn)
        cmd.ExecuteNonQuery()
        conn.Close()
    End If
    BindGrid() ' 刷新订单列表
End Sub
(2)菜单管理 – 添加 / 修改 / 删除菜品

支持添加新菜品、修改现有菜品信息(名称、价格、简介)、删除下架菜品:

vb



' 添加新菜品
Dim x As Integer
cmd1.CommandText = "select max(cdishid) maxcdishid from dish" ' 获取最大菜品ID
objReader = cmd1.ExecuteReader()
If objReader.Read Then
    x = CInt(objReader("maxcdishid")) + 1 ' 新菜品ID自增
End If
objReader.Close()

' 插入新菜品信息
Dim strsql As String = "Insert Into dish (cdishid,vdishname,vdishdescription,cdishrate) Values('" & x & "','" & Trim(name.Text) & "','" & Trim(description.Text) & "','" & Trim(dishrate.Text) & "')"
' 执行SQL语句(略)
Response.Write("<SCRIPT language=JavaScript>alert('添加成功!');this.location.href='menumanage.aspx';</SCRIPT>")

五、系统测试与优化

1. 关键测试场景

用户名重复注册:提示 “已有此用户名”,无法重复注册密码错误登录:提示 “用户名或密码错误”,防止暴力破解空订单提交:未选择菜品或未填写地址时,提示 “请选择菜品”“请输入地址”管理员权限校验:非管理员无法访问后台管理页面

2. 性能优化建议

数据库索引:在 userid、dishid、orderid 等常用查询字段添加索引,提升查询速度数据缓存:使用ASP.NET缓存机制,缓存菜单列表等高频访问数据,减少数据库压力代码优化:提取公共方法(如数据库连接、数据绑定),减少重复代码,提升维护效率

六、项目扩展方向(从 demo 到商用)

本系统已实现核心功能,若要商用,可扩展以下模块:

在线支付:集成微信支付 / 支付宝支付接口,实现线上付款订单追踪:添加订单状态实时更新(已接单→配送中→已送达)优惠券模块:添加满减、折扣券,提升用户复购率数据分析:统计热销菜品、用户消费频次,为商家决策提供数据支持移动端适配:优化页面响应式布局,适配手机端浏览和操作

七、完整源码获取

私信作者,回复 “订餐系统” 即可获取:

完整项目源码(VB.NET+ASP.NET)数据库脚本(直接执行即可创建表和测试数据)环境配置教程(新手快速搭建开发环境)常见问题排查手册

总结

本项目基于.NET 平台开发,实现了一套功能完善、易于维护的 Web 订餐系统,既适合新手作为.NET 实战练手项目,也可用于小型餐饮商家的数字化转型。

通过本文的学习,你不仅能掌握ASP.NET开发、SQL Server 数据库设计、B/S 架构应用等核心技能,还能理解企业级应用的模块化设计思想和安全防护要点。

如果在开发过程中遇到问题,欢迎在评论区留言交流,我会第一时间回复!喜欢本文的话,别忘了点赞 + 收藏 + 关注,后续会分享更多.NET 实战项目~

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容