深 圳 大 学
实 验 报 告
课程名称: 系统设计与数据库系统
实验序号: 实验4
实验名称: System Design
学 号: 2020124041
姓名: 汤梓昊
实验完成日期: 21 年 01 月 08 日
一、实验目的:
- 了解数据库设计;
2、掌握存储过程、函数、触发器的实现。
二、实验要求:
1、安装相关软件并浏览软件自带的帮助文件和功能菜单,
2、掌握PHP构建网页以及连接数据库的方法。
3、掌握phpmyadmin创建数据库与数据表的方法;
4、了解mysql的命令以及与php衔接的语句
5、掌握存储过程、函数的实现
6、掌握触发器的实现;
三、实验设备:
计算机、数据库管理系统如php,mysql 等软件。
四、实验内容
- 按要求完成individual project的数据库设计,MySQL Implementation 和Interface,可以按照自己的思路拓展功能。
本实验拥有前台(供客户使用)和后台(供工作人员使用)两大界面,其中:
- 前台(img.php)功能包括:
- 商品展示页面:功能比较完善,界面美观,本实验亮点之一
- 对不同产商的商品进行分类筛选功能
- 租赁奢侈品的功能
- 后台(b_management.php)功能包括
- 所有用户情况的展示
- 用户消费总额以及租期长度的展示
- 对最佳用户进行排序
- 向前台上架商品
数据库的构建:
本次实验一共创建了5张表:
- customers 表记录了所有顾客的信息
- products 表记录了所有产品的信息
- rent 表记录了用户租赁的记录
- bagurl表存放了所有商品的图片url
- cus_rent_return 将会在trigger中被使用到结构和rent表一样
due是距离截止日期的天数
- 附上相关问题的解决方案,以及运行结果, 运行屏幕截图。
- 商品展示页面
我们提供了两种不同的界面供用户选择
第一个页面鼠标悬浮的情况下提供了更多细节
第二个页面时橱窗展示
我们可以左右滑动橱窗看到更多内容
商品展示页面——实现代码
由于本实验重点不是css,因此只会提及使用php进行的商品的渲染
首先页面结构代码如下
整个页面用grid格子包裹,其中每一个小卡片都是一个grid-item
我们首先从products表中获取所有需要渲染的数据
再使用mysqli_fetch_array方法获取对应信息
继续从bagurls中拿商品图片的url
接下来开始渲染
每一个小卡片都有自己的价格
自己的颜色
自己的图片,名字,生产商
橱窗的图片
至此,我们的界面就渲染完成了
- 筛选指定的产商(对应要求第一点)
由于我认为我的前端的这个功能并不需要procedure实现,我使用了另一种方法,当然为了完成作业,我也写了一个procedure,并且使用后台的第四个界面进行展示,如下
但是在这里我将重点讲解游标的使用以及数据解析以及渲染的方法,在后文中会有很多利用到这个的方法,后面就不会详细解释了
首先创建procedure,
创建接收Name,Color,Manufacturer的三个变量v_email,v_color,v_manu
定义not found handler 找不到时方便退出循环
使用mu_cursor游标不断的将结果fetch进入v_emali,v_color,v_manu
最后使用concat将所有的结果拼接起来,用分号分隔
使用php调用这段代码 call myproc
并且进行解析和渲染
我们使用token,将字符串一个一个的分割(strtok)出来,渲染的时候注意数学逻辑,控制好每一行即可
结果
我的另一种方法的实现
首先前端拥有一个表单可以给我们选择提交
表单的代码
接下来重写sql语句,重新定义渲染条件
重新定义条件之后执行渲染
我们以选择LV和prada为例子
整个界面只剩下他们了
- 租赁奢侈品的功能(对应要求第四点第一部分)
点击rent it now
输入名字,地址,租期到的日期
这里还设置了检查(对应要求第六点)
当然也有相应的价格计算
租赁商品——代码实现
创建存储过程rent_dialog,向表中插入数据
后台查看
- 所有用户情况的展示
注意到我们的表格是可以展开的噢
用户情况展示——代码实现
这里和渲染商品的原理是差不多
都是先从数据库拿到数据
然后再按照行解析
最后渲染
- RentalCost的展示(对应要求3)
点击用户表对应的rental_cost,跳转到该页面
Rentalcost——代码展示
存储过程:rental_cost,和筛选厂商类似
在php中调用
- 最佳用户(对应要求2)
最佳用户——代码实现
存储过程best_customer
关键语句是select
Php调用
- 增加新的商品(对应要求4的后半部分)
代码实现:
存储程序add_bag
需要给products插入商品,给bagurls插入图片
Php中使用表单传递数据
调用存储程序
- 到期提醒以及自动延期(对应要求6)
若用户到期,我们将在前端输出信息,并且在后台自动增加新的租用记录(从当前日期到七天之后)并且在前端提示新的到期时间
本来13号到期
到期
归还日期变为20号
前台变为20
代码实现:
创建trigger,在插入rent后,在cur_rent_date中插入数据以便显示到期时间还有多久
创建event,用来进行日期衰减,每隔一秒等于过了一天
创建trigger检查是否到期,即due<0时,在rent中插入新的数据
Php 调用
3)(可选)录一小段视频,3分钟左右,对自己的亮点进行解说展示。
五.问题分析(碰到什么问题,如何解决)
六.实验心得
整体实验下来使用了很多procedure
对于动态渲染的掌握有了很大的提升
对于数据库的创建规则有了更多的了解和技巧