目录
一、实验目的:
1、了解数据库设计;
2、掌握存储过程、函数、触发器的实现。
二、实验要求:
1、安装相关软件并浏览软件自带的帮助文件和功能菜单,
2、掌握PHP构建网页以及连接数据库的方法。
3、掌握phpmyadmin创建数据库与数据表的方法;
4、了解mysql的命令以及与php衔接的语句
5、掌握存储过程、函数的实现
6、掌握触发器的实现;
三、实验设备:
计算机、数据库管理系统如php,mysql 等软件。
四、实验内容
按要求完成individual project的数据库设计,MySQL Implementation 和Interface,可以按照自己的思路拓展功能。
本系统采用springboot+mybatis+web三件套(html、css、js)开发实现。
一、数据库设计
1.新建数据库,命名为charity_db,再新建管理员表,然后插入两条数据。
2.新建慈善机构表agency_tb后插入数据。
3.新建捐赠者donor_tb表,并插入数据。
4.新建捐赠gift_tb表并插入数据。
5.新建user_tb表,并插入数据。
6.新建info_tb表,并插入数据
7.新建log_tb表。
8.实现登录接口,会根据登录账号为管理员或者用户的进行跳转不同的页面。
9.实现登陆前端界面,以及响应。
二、MySQL实现
(一)按计划费用评级的慈善机构
1.实现sql语句。
2.实现后端接口。首先实现AgencyController类。
3实现AgencyMapper代理层。
4.实现业务层接口和实现类。
5.测试接口,发现成功返回数据。
6.实现agencyOrder.html。
7.启动后端服务器,访问页面如下图所示。
(二)按请求类别分类的捐助者
1. 创建按请求类别分列的捐助者查询。
2. 调用按请求类别分列的捐助者查询。
3.发现可以正确输出结果。
4.建立实体类Donor。
5.建立DonorController类。
6.建立DonorMapper接口。
7.建立DonorService接口
8.实现业务层类DonorServiceImpl 。
9.实现前端页面DonorByCategory.html。
10.启动服务器,打开页面,如下图所示。
11.输入类别,如下图所示,若不存在类别则会提示。
(三)慈善机构的捐助者
1.分析sql语句,如下图所示。
2查看gift_tb表和donor_tb表和agency_tb表,可知结果正确。
3.实现实体类CharityDonor。
4.实现控制层方法。
5.实现代理层方法。
6.实现业务层方法。
7.测试接口,发现成功返回数据。
8.实现前端页面DonorByCharity.html。
9.启动服务器,打开页面。
10.输入慈善机构ID进行查询,若不存在会输出提示。
(四)捐赠者捐赠频率
1.实现sql语句,如下图所示。
2.查看donor_tb表和gift_tb表,可知查询结果正确。
3.实现实体类DonationFrequency。
4.实现controller层方法。
5.实现业务层方法。
6.实现数据层方法。
7.测试接口,发现成功获取数据。
8.实现前端界面donorFrequency.html。
9.启动服务器,界面如图所示。
(五)匹配礼物
1.题目是:创建一个名为“匹配礼物”的查询,显示慈善机构名称、日期和金额,然后计算匹配金额和捐赠总额。 回想一下,一位匿名捐助者愿意为“饥饿救济食品”慈善机构每捐赠 1 美元,捐出 50 美分。
我的理解是,先看gift_tb表。对于每一笔捐赠记录,捐款金额为amount,有某个好心人愿意再捐出0.5倍的amount,那么总金额就是1.5倍的amount,当然,因为题目叫“匹配礼物”,因此只对特定慈善机构进行善意的捐助,至于是哪个机构就要看用户输入了。
2.实现sql语句
3.实现实体类MatchGift。
4.实现控制层方法。
5.实现数据层方法。
6.实现业务层方法。
7.测试接口,成功获得数据。
8.实现前端页面MatchGift.html。
9.启动服务器,运行界面如下图所示。
(六)添加/更新慈善机构/捐赠者
1.这个分为两个部分,一个是管理慈善机构,一个是管理捐赠者。依据题意是,输入数据,如果数据(捐赠者或慈善机构)不存在,则将其插入表中,否则仅更新。
2.首先实现实体类AgencyAll和DonorAll。
3.实现两边的控制层方法。
4.实现两边的数据层方法。
5.实现两边的业务层方法。
6.测试管理接口,发现返回数据成功。
7.观察agency_tb,刷新后数据确实增加了。
8.观察donor_tb,刷新后数据确实增加了。
9.实现前端界面agencyChange.html。
10.启动服务器,打开网页如下图所示。
11.刷新表,发现操作成功。
(七)实现触发器+日志界面
1.实现触发器,以插入、更新和删除 agency_tb 表为例。
2.删除agecy_tb一条数据后观察log_tb表,发现log_tb表记录成功,其它表同理。
3.查看所有触发器,如下图所示。
4.确定查询的sql语句。
5.实现实体类OperationLog。
6.实现控制层方法。
7.实现数据层方法。
8.实现业务层方法。
9.测试接口,获取数据成功。
10.实现前端界面log.html。
11.启动服务器,打开网页,如图所示。
(八)异常显示消息提示
1.登录失败时提示。
2. 按请求类别分类的捐助者,查询失败时提示。
3. 慈善机构的捐助者,查询失败时提示。
4. 匹配礼物,失败时提示。
(九)实现捐赠&记录功能
1.考虑到用户有在捐赠的需求,因此再添加一个捐赠功能,用户通过输入捐赠者id和慈善机构id和金额即可成功进行捐赠,然后展现自己的所有捐款记录。
sql语句如下,先将gift_id设为自增,且幅度为1,然后插入数据:
alter table gift_tb modify gift_id int auto_increment; alter table gift_tb auto_increment = 1; INSERT INTO gift_tb (donor_id, agency_id, donation_date, amount) VALUES (4, 1006, NOW(),10000);
2.查看表格发现插入成功。
3. 展现特定人的所有捐款记录,sql语句如下:
4.实现实体类ToGift接收数据。
5.实现实体类Gift返回数据。
6.实现控制层方法。
7.实现数据层方法。
8.实现业务层方法。
9.测试接口,成功实现功能。
10.实现前端界面toGift.html。
11.启动服务器,打开页面如下所示。
(十)整合页面
1.现在有的页面包括:登录、按计划费用评级的慈善机构、按请求类别分类的捐助者、慈善机构的捐助者、捐赠者捐赠频率、匹配礼物、添加/更新慈善机构、添加/更新捐赠者、操作日志、捐赠&记录。
使用慈善管理系统的人有两种身份,一个是管理员、一个是普通用户。管理员是可以看到所有的页面的,但是普通用户能看到的页面只有如下:登录、按计划费用评级的慈善机构、匹配礼物、捐赠&记录。
因此,需要根据登录者的身份来决定其跳转的主页。然后主页再对应上各自能跳转的界面的按钮,以及退出登录的功能。
2.实现管理员主页managerHome.html。
3.实现普通用户主页userHome.html。
4.在登录时,存储使用者的账号和身份,并根据身份跳转到不同的主页。
5.更新各个页面返回主页按钮的逻辑,会根据使用者身份跳转到不同的主页。
五.问题分析
1.gift_tb插入数据失败.
分析:表的字段绑定了外键,插入的数据中,这几个的数据一定要存在,如下更改后插入成功。
2.接口测试发生错误。
分析:对应关系发生错误,因为只有一个对象,但是查到的数据有32条。按如下修改即可。
六.实验心得
通过此次试验,学会了以下几个重要的方面:
数据库设计与操作: 通过创建管理员表、慈善机构表、捐赠者表等,以及执行插入、更新、查询等数据库操作,熟悉了数据库的设计和基本操作。
Spring Boot 的使用: 在实现登录功能的过程中,使用了 Spring Boot 框架,学会了如何创建 RESTful 接口、处理请求和返回响应,以及如何与数据库交互。
MyBatis 框架: 通过使用 MyBatis 框架,了解了如何进行数据库的持久层操作,包括使用注解进行 SQL 查询、插入和更新。
前端页面设计: 在实现前端页面时,学会了如何使用 HTML 和 CSS 进行页面布局和样式设计,以及如何通过 JavaScript 处理用户交互。
身份验证与权限管理: 在实现管理员和普通用户身份的区分以及相应权限管理方面,掌握了一些基本的前后端交互和权限判断的方法。
错误处理与日志记录: 学会了如何处理可能发生的错误,包括在前端进行用户友好的提示,以及在后端通过日志记录进行问题追踪。
实际问题解决: 通过解决,提高了在实际开发中解决问题的能力,包括数据库表设计、SQL 查询语句的编写、前端页面的设计和调试等方面。
(by 归忆)