数据库系统原理综合实验课设(超完整详细易上手)

一、需求调研

随着社会的发展,生活工作节奏的加快,人们对餐饮消费的数量、质量以及消费习惯等许多方面也发生了巨大的变化。快餐的社会需求随之不断扩大,并且快餐样式也逐步演化升级,不仅注重营养的平衡,其样式也更加丰富多彩,市场消费大众性和基本需求性特点表现的更加充分。因此,一个好用的网上订餐系统对于餐饮品牌开展外卖接单业务是可以带来极大的积极作用的,如今人为的电话接单模式已经被淘汰,取而代之的利用以数字化技术为支撑的订餐系统接单。引进订餐管理系统,可以有效杜绝跑单、漏单等失误的出现,另外后台可以对于订单进行清算和统计,有利于经营者根据经营情况调整营销策略。

二、功能分析

根据调研需求,本系统目前包括两类用户:客户、商家。系统首界面提供注册和登录功能。客户登录系统后可查看各个地区的在售餐点信息、浏览周边商家店铺信息,提供订餐和取消订单功能,修改个人信息和密码等。而商家登录系统后可以发布、删除和查看餐点商品信息,统计各类商品销售量,以及查看客户订单内容等。

数据库系统原理综合实验课设(超完整详细易上手)_第1张图片

1.注册功能:注册客户和商家两类用户

2.客户角色拥有的功能

商品信息

  • 查看餐点:按商家所在地或者商品名称查找餐点,支持关键字模糊查询和精准查询,显示餐点列表和对应的商品简介。
  • 商家好店:以列表下拉框的形式查看不同地区的商家店铺信息,统计商家销售餐点总数量。
  • 在线订餐:按商家所在地查找餐点选中预下单的餐点,补充送达地址信息进行下单,提供删除订单的功能。

个人信息

  • 我的订单:查看历史所有订单的详细信息,包括商品价格、下单时间、送达地址等。
  • 我的资料:显示客户账号、姓名、性别、居住地、手机号信息,支持编辑进行修改。

系统管理:

  • 修改密码:客户可以修改自己账号的密码信息。
  • 退出系统:点击退出综合订餐管理系统。

3.商家角色拥有的功能

商品信息

  • 我的商品:查看商家已经发布的餐点商品信息(商品名称、价格、上架时间、商品简介等),支持修改和删除商品信息功能,销售统计表显示各类餐点商品出售的总销量。
  • 周边商品:按商家所在地或者商品名称查找餐点,支持关键字模糊查询和精准查询,显示餐点列表和对应的商品简介。
  • 发布商品:商家输入商品名称、价格、商品简介信息,即可发布新的餐点商品。

商家信息

  • 我的接单:查看历史所有接单的详细信息,包括商品名称、客户手机号、送达地址等。
  • 商家资料:显示商家账号、店铺名称、店铺地址、联系电话,支持编辑进行修改。

系统管理:

  • 修改密码:商家可以修改自己账号的密码信息。
  • 退出系统:点击退出综合订餐管理系统。

三、数据模型设计

这是整个综合订餐系统实体间关联的ER图,商家与商品的关系是多对多;商品与订单间联系是一对一;订单与客户间的联系是多对多。
数据库系统原理综合实验课设(超完整详细易上手)_第2张图片

  • 商品属性包括商品编号、商品名称、上架时间、价格、发布商家、商品简介。
  • 订单属性包括订单编号、商品编号、客户账号、下单时间、送达地址。
  • 商家属性包括商家账号、登录密码、店铺地址、店铺名称、联系电话。
  • 客户属性包括客户账号、客户姓名、登录密码、居住地、性别、手机号码。

四.数据库设计

数据库系统原理综合实验课设(超完整详细易上手)_第3张图片
数据库系统原理综合实验课设(超完整详细易上手)_第4张图片
数据库系统原理综合实验课设(超完整详细易上手)_第5张图片
数据库系统原理综合实验课设(超完整详细易上手)_第6张图片
这是商品表、订单表、商家表、客户表相互联系的数据库关系图:
数据库系统原理综合实验课设(超完整详细易上手)_第7张图片

五、详细设计

系统图形化界面基于visual Studio的Windows窗体应用(.NET Framework)进行设计,多窗口之间的相互跳转通过TreeView控件和Button控件进行实现。下面对主要关键的界面信息进行展示和说明。

1.系统登陆界面

数据库系统原理综合实验课设(超完整详细易上手)_第8张图片
通过Label角色判断用户的身份(客户或者商家),接着通过字符串拼接的身份结合TextBox用户名和TextBox密码组合成sql查询语句到客户表或者商家表进行比对,若用户存在则跳转到商家端主界面或者客户端主界面。

例如用户角色选择客户,相关sql查询语句为:

string sql = "select 客户账号,登录密码 from 客户 where 客户账号='" + name +
                     "' and 登录密码='" + textBoxpasswd.Text.Trim() + "'"; 

2. 系统商家端和客户端注册界面

数据库系统原理综合实验课设(超完整详细易上手)_第9张图片数据库系统原理综合实验课设(超完整详细易上手)_第10张图片
在登录界面点击“客户注册”或者“商家注册”跳转到对应的界面,进行用户注册。系统具有对用户输入的内容进行合法检测,若内容不完整或格式不正确进行弹窗提醒用户进行修改。若内容合法,则在商家表或者客户表增添数据。

3. 客户角色查看餐点界面

列表下拉框选择商家所在地区或者输入餐点名称,实现关键字模糊查询,查询功能支持按照地区和餐点名称两种方式(可组合),系统调用sql语句对商品表和商家表进行联合查询,查询结果显示在表格和富文本编辑控件中。比如地区下拉框选择“东山区”,点击查询则表格显示商家店铺所在地字样带有东山区的所有在售餐点信息。选中表格某一列餐点,下方富文本框显示该餐点的详细商品简介。

数据库系统原理综合实验课设(超完整详细易上手)_第11张图片

4. 客户角色在线订餐界面

选择商家所在地后,选中表格中的餐点信息,输入送达地址,即可点餐。点餐时结合用户选择的餐点信息,自动获取系统时间,组合成完整的订单信息数据插入到订单表中,右侧列表显示订单信息,选中列表具体项后删除订单,从订单表删除相关订单信息,接着刷新界面重新进行数据显示。
数据库系统原理综合实验课设(超完整详细易上手)_第12张图片

5. 客户角色商家好店界面

客户选择商家地区后,联合商家表和商品表统计每个地区的商家的餐点总销量,结合商家信息进行显示,方便顾客进行权衡从而更好进行选择商家餐点订餐。
数据库系统原理综合实验课设(超完整详细易上手)_第13张图片

6. 客户角色我的资料界面

资料面板展示用户注册的所有信息,用户可以进行编辑修改,点击确定重新修改个人信息,更新客户表对应的数据。
数据库系统原理综合实验课设(超完整详细易上手)_第14张图片

7. 客户角色修改密码界面

用户在此界面可以修改密码,确认信息则更新新的密码信息到客户表对应的数据行中。
数据库系统原理综合实验课设(超完整详细易上手)_第15张图片

8. 商家角色我的商品界面

此处显示商家个人用户所有已发布的商品餐点信息,包括价格、上架时间、商品简介等等。商家可以对商品进行修改信息或者删除下架,在商品表做出对应的数据操作。右下角的销售统计表对每件商品进行销量统计,方便商家对销售计划进行决策调整,更好地经营店铺。
数据库系统原理综合实验课设(超完整详细易上手)_第16张图片

9. 商家角色发布商品界面

商家填写商品餐点名称、价格、商品简介信息后,系统自动获取当前时间作为上架时间属性,结合发布商家等信息,组成完整的商品信息,将数据插入到商品表中。数据库系统原理综合实验课设(超完整详细易上手)_第17张图片

10. 商家角色我的接单界面

此处通过对商家表、订单表、客户表进行联合查询,进而显示历史所有接单信息(商品名称、送达地址、下单时间、客户账号、客户手机号等),商家查看订单后进而可以现在安排人手进行餐点相关线下配送服务,合理分配店铺人力资源。
数据库系统原理综合实验课设(超完整详细易上手)_第18张图片

六.测试

下面进行系统软件的主要功能的测试,商家发布餐点–>客户订餐–>商家查看接单以及销售统计表。

1.商家登陆 发布餐点(以发布辣炒刀豆为例)

数据库系统原理综合实验课设(超完整详细易上手)_第19张图片

2. 客户登陆 进行订餐(选择餐点->填写送达地址–>点餐–>查看订单信息)

数据库系统原理综合实验课设(超完整详细易上手)_第20张图片
具体订单信息:数据库系统原理综合实验课设(超完整详细易上手)_第21张图片

3. 商家端查看接单和销售统计量

数据库系统原理综合实验课设(超完整详细易上手)_第22张图片
成功接受订单,可以从销售统计表看到辣炒刀豆的销售量加1。数据库系统原理综合实验课设(超完整详细易上手)_第23张图片

七.关键技术总结

下面介绍数据库主要增删查改以及统计功能的关键数据库语句和TreeView控件结合多Form窗口的交互实现关键代码。除了对数据的基本CURD语句之外,按需灵活调用select CONVERT(varchar(30), getdate(), 120)获取系统时间等内置函数,对数据进行分组进行信息统计,以及多个关系表连接进行嵌套查询所需信息等。

  • 数据库增删查改、统计语句
  1. 客户按地区和餐点名称进行模糊查询代码
private void button1_Click(object sender, EventArgs e)
{
    if (textBoxclass.Text != "" && comboBoxterm.Text != "")
        {
           SqlConnection conn = new SqlConnection(loginForm.connectionString);
           conn.Open();
            string sql = "select 商品编号 as 餐点编号,商品名称 as 餐点名称, 上架时间, 价格, 发布商家 from 商品, 商家 where 商家.商家账号 = 商品.发布商家 and 商品.商品名称 like '%" + textBoxclass.Text + "%'and 商家.店铺地址 like '%" + comboBoxterm.SelectedItem.ToString() + "%'";
                SqlDataAdapter adp1 = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                adp1.Fill(ds);
                //载入基本信息
                dataGridView1.DataSource = ds.Tables[0].DefaultView;
                conn.Close();
            }
}
  1. 客户按地区和餐点名称进行模糊查询代码
private void button1_Click(object sender, EventArgs e)
        {
            string kehuid = textBox1.Text;
            SqlConnection conn = new SqlConnection(loginForm.connectionString);
            conn.Open();
            if(textBoxAddR.Text==""||textBox1.Text==""||textBoxid.Text=="")
            {
                MessageBox.Show("信息不完整,点餐失败");
            }
            else
            {
                string sql = "insert into 订单(送达地址, 下单时间, 客户账号, 商品编号) values('" + textBoxAddR.Text + "', (select CONVERT(varchar(30), getdate(), 120)),'" + textBox1.Text + "'," + textBoxid.Text + ")";
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.CommandText = sql;

                if (cmd.ExecuteNonQuery() > 0)
                {
                    MessageBox.Show("点餐成功");

                }
            }
            conn.Close();
        }

  1. 客户取消订单的数据删除代码
 private void button4_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(loginForm.connectionString);
            conn.Open();
            string sql = "delete from 订单 where 订单编号 = " + (listBox1.SelectedItem.ToString())
                          .Split(' ')[0];
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.CommandText = sql;
            if (cmd.ExecuteNonQuery() > 0)
            { MessageBox.Show("删除成功!");}
            conn.Close();
        }

  1. 商家修改商品信息的数据更新代码
private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(loginForm.connectionString);
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            string sql = "update 商品 set 商品名称 = '" + textName.Text + "',上架时间= '" + textTime.Text + "',价格= " + textPrice.Text + ",商品简介= '" + richTextBox.Text + " 'where 商品编号 = '" + dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "'";
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery();
            MessageBox.Show("修改信息成功!");
            conn.Close();
        }

  1. 商家统计各类餐点销售量代码
string sql = " select 商品名称,count(*)销售量 from 订单,商品 where 商品.发布商家='" 
             +loginForm.getName()+"'and 订单.商品编号 = 商品.商品编号 group by 商品.商品名称";
          SqlConnection conn = new SqlConnection(loginForm.connectionString);
            conn.Open();
          SqlDataAdapter adp1 = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            adp1.Fill(ds);
            //载入基本信息
        dataGridView2.DataSource = ds.Tables[0].DefaultView;
         conn.Close();
  1. 对商家表和商品表进行嵌套查询商家信息以及商家总销量的sql语句
string sql = "select 商家账号,店铺名称,店铺地址,联系电话,出售餐点数量 from 商家,(select count(*) as 出售餐点数量 ,发布商家 from 商品 group by 发布商家) as shopdetail where 商家账号 = shopdetail.发布商家 ";
  1. TreeView控件结合多窗体交互代码
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            switch (this.treeView1.SelectedNode.Text)
            {
                case "我的商品":
                    myshop f2 = new myshop();
                    f2.TopLevel = false;
                    f2.FormBorderStyle = FormBorderStyle.None;
                    f2.WindowState = FormWindowState.Maximized;
                    panel1.Controls.Add(f2);
                    f2.Show();
                    break;
                case "发布商品":
                    createShop f6 = new createShop();
                    f6.TopLevel = false;
                    f6.FormBorderStyle = FormBorderStyle.None;
                    f6.WindowState = FormWindowState.Maximized;
                    panel1.Controls.Add(f6);
                    f6.Show();
                    break;
                case "退出系统":
                    Application.Exit();
                    break;
                //类似结构继续添加
            }
        }

八、存在的问题及改进思路

本综合订餐管理系统提供商家和客户两类用户入口,实现了用户从查看商品到订餐下单、商家从发布商品到查看接单的较为完整的功能流程。系统关系表相互间联系,界面控件与数据库进行联系,以及实现了对用户操作行为进行合法判断检测等。经过思考,目前系统还有一些地方可以进一步优化。

  1. 登陆入口添加系统管理员角色功能,系统管理员可以管理客户表和商家表的相关账号信息,后台管理和统计所有商品以及流水订单信息。
  2. 客户的订单信息如果包含多个商品信息,订单和商品间是一对多联系,则还可以通过建立中间表实现订单数据和商品数据间的数据关联处理。

九、完整项目文件及声明

代码链接:https://github.com/diadestiny/Integrated-order-management-system(觉得有用的可以给个star~)
作者:GUET_diadestiny
声明:欢迎借鉴思路以及功能实现,禁止大篇幅拷贝代码

你可能感兴趣的:(个人日记)