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

2023-12-29 05:20

本文主要是介绍数据库系统原理综合实验课设(超完整详细易上手),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、需求调研

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

二、功能分析

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

在这里插入图片描述

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

2.客户角色拥有的功能

商品信息

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

个人信息

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

系统管理:

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

3.商家角色拥有的功能

商品信息

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

商家信息

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

系统管理:

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

三、数据模型设计

这是整个综合订餐系统实体间关联的ER图,商家与商品的关系是多对多;商品与订单间联系是一对一;订单与客户间的联系是多对多。
在这里插入图片描述

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

四.数据库设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是商品表、订单表、商家表、客户表相互联系的数据库关系图:
在这里插入图片描述

五、详细设计

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

1.系统登陆界面

在这里插入图片描述
通过Label角色判断用户的身份(客户或者商家),接着通过字符串拼接的身份结合TextBox用户名和TextBox密码组合成sql查询语句到客户表或者商家表进行比对,若用户存在则跳转到商家端主界面或者客户端主界面。

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

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

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

在这里插入图片描述在这里插入图片描述
在登录界面点击“客户注册”或者“商家注册”跳转到对应的界面,进行用户注册。系统具有对用户输入的内容进行合法检测,若内容不完整或格式不正确进行弹窗提醒用户进行修改。若内容合法,则在商家表或者客户表增添数据。

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

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

在这里插入图片描述

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

选择商家所在地后,选中表格中的餐点信息,输入送达地址,即可点餐。点餐时结合用户选择的餐点信息,自动获取系统时间,组合成完整的订单信息数据插入到订单表中,右侧列表显示订单信息,选中列表具体项后删除订单,从订单表删除相关订单信息,接着刷新界面重新进行数据显示。
在这里插入图片描述

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

客户选择商家地区后,联合商家表和商品表统计每个地区的商家的餐点总销量,结合商家信息进行显示,方便顾客进行权衡从而更好进行选择商家餐点订餐。
在这里插入图片描述

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

资料面板展示用户注册的所有信息,用户可以进行编辑修改,点击确定重新修改个人信息,更新客户表对应的数据。
在这里插入图片描述

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

用户在此界面可以修改密码,确认信息则更新新的密码信息到客户表对应的数据行中。
在这里插入图片描述

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

此处显示商家个人用户所有已发布的商品餐点信息,包括价格、上架时间、商品简介等等。商家可以对商品进行修改信息或者删除下架,在商品表做出对应的数据操作。右下角的销售统计表对每件商品进行销量统计,方便商家对销售计划进行决策调整,更好地经营店铺。
在这里插入图片描述

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

商家填写商品餐点名称、价格、商品简介信息后,系统自动获取当前时间作为上架时间属性,结合发布商家等信息,组成完整的商品信息,将数据插入到商品表中。在这里插入图片描述

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

此处通过对商家表、订单表、客户表进行联合查询,进而显示历史所有接单信息(商品名称、送达地址、下单时间、客户账号、客户手机号等),商家查看订单后进而可以现在安排人手进行餐点相关线下配送服务,合理分配店铺人力资源。
在这里插入图片描述

六.测试

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

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

在这里插入图片描述

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

在这里插入图片描述
具体订单信息:在这里插入图片描述

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

在这里插入图片描述
成功接受订单,可以从销售统计表看到辣炒刀豆的销售量加1。在这里插入图片描述

七.关键技术总结

下面介绍数据库主要增删查改以及统计功能的关键数据库语句和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
声明:欢迎借鉴思路以及功能实现,禁止大篇幅拷贝代码

这篇关于数据库系统原理综合实验课设(超完整详细易上手)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548453

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常