《数据库应用系统实践》2.0版本 — 5- 会员管理系统
系列文章
《数据库应用系统实践》2.0版本 — 5- 会员管理系统
👇🏻实践要求👇🏻


一个使用Java语言和SQLServer数据库设计的会员管理系统
1.对课题进行需求调研与分析,完成了系统功能图与功能模块设计;完成阶段开发。
2.给出课题的概念模型(即ER图),要求对课题ER图设计中至少5个实体;
3.根据设计的ER模型,结合DBMS(数据库管理系统)特点给出了系统的逻辑模型(关系模式);
4.给出实现数据库的SQL语句,包含创建数据库、数据表(含主键、外键定义及约束性条件设计)、插入数据(各表至少插入5条记录)、更新数据、删除数据、视图(单表或多表)等;根据需要设计了存储过程和触发器;完成阶段开发。
5.完成应用程序开发过程中的编码、调试、测试、Bug修复等工作;开发语言选用Java;开发工具可选用IDEA、Eclipse均可;程序中实现数据库连接、GUI开发、增删改查操作等内容。
包括有 Java源代码+数据库源码+实践报告+部署教程

文章目录
-
系列文章
-
一、需求分析
-
- 1、系统背景
- 2、 系统功能结构
-
二、概念模型设计
-
- 1.基本要素(符号介绍说明)
- 2.ER图
-
三、逻辑模型设计
-
- 1.ER模型向关系模型转换规则
- 2.转换后的关系模型
- 3.关系模型优化(达到3NF)
-
四、物理设计
-
- 1.创建数据库的SQL语句或截图
- 2.创建所有表的SQL语句或截图(包含完整性约束)
-
五、数据库实施
-
- 1.粘贴所创建的数据库关系图
- 2.数据录入
- 3.数据处理(包含完整十个,篇幅限制,仅列举前5个)
-
六、数据库应用系统实现
-
- 1.相关界面截图
- 2.和数据库连接的程序语句
- 3.具体实现代码
-
七、小组分工明细
-
八、开发环境说明
-
九、总结
-
十、参考文献
-
十一、获取源码
一、需求分析
1、系统背景
基于数据库设计的会员管理系统旨在有效管理普通用户、管理员、会员等级、会员信息和会员积分等关键数据。系统通过提供安全的登录和权限控制功能,确保只有授权用户可以访问和修改相关信息。会员等级模块允许管理员定义不同等级的折扣率,从而激励会员提升其消费活动。会员信息模块记录会员的基本信息和注册时间,帮助系统跟踪和分析会员的活跃度和增长趋势。积分管理模块记录会员的积分获取和使用情况,为会员提供积分换取优惠或礼品的机会,促进消费者参与和忠诚度增强。该系统的全面设计和功能集成旨在提升会员管理的效率和用户体验,支持企业提升市场竞争力和客户满意度。
2、 系统功能结构
(1)功能结构图

(2)模块说明
包含会员等级、会员信息、会员积分、普通用户信息、管理员信息。
二、概念模型设计
1.基本要素(符号介绍说明)
① 矩形:表示实体。
② 椭圆形:表示属性,即实体的属性。
③ 菱形:表示联系。
④ 连线:该连线为没有方向的线段,分为连接实体与属性(矩形与椭圆形之间的连线)和连接实体与联系名(矩形与菱形之间的连线);实体与联系名的连线旁需标注联系的类型,如1:1、1:n、m:n。
注意:在联系类型标注时请按照约定俗成的方式标注,一对多使用1:n,多对多使用m:n,如果超过两个实体请采用m:n:p:q:
2.ER图

三、逻辑模型设计
1.ER模型向关系模型转换规则
(1)实体转换为单独的关系模式。
(2)一对一联系转换为关系模式有两种方法。
①、将联系转换为单独的关系模式;
②、将其中一个实体的之间加入到另外一个实体的关系模式中,作为外键。
(3) 一对多联系转换为关系模式有两种方法。
①、将联系转换为单独的关系模式;
②、将n实体的主键合并到1实体的关系模式中,作为1实体关系模式的外键。
2.转换后的关系模型
普通用户 (用户ID, 用户名, 密码)
管理员 (管理员ID, 管理员名, 密码)
会员等级 (等级ID, 等级名称, 折扣率)
会员信息 (会员ID, 姓名, 手机号, 注册时间)
会员积分 (积分ID, 会员ID, 积分数, 更新时间)
3.关系模型优化(达到3NF)
以上要素都属于第三范式
四、物理设计
1.创建数据库的SQL语句或截图
CREATE DATABASE 会员管理系统
c
2.创建所有表的SQL语句或截图(包含完整性约束)
-- 创建普通用户表
CREATE TABLE 普通用户 (
用户ID INT PRIMARY KEY,
用户名 NVARCHAR(50) NOT NULL,
密码 NVARCHAR(50) NOT NULL
);
-- 创建管理员表
CREATE TABLE 管理员 (
管理员ID INT PRIMARY KEY,
管理员名 NVARCHAR(50) NOT NULL,
密码 NVARCHAR(50) NOT NULL
);
-- 创建会员等级表
CREATE TABLE 会员等级 (
等级ID INT PRIMARY KEY,
等级名称 NVARCHAR(50) NOT NULL,
折扣率 DECIMAL(4, 2) NOT NULL
);
-- 创建会员信息表
CREATE TABLE 会员信息 (
会员ID INT PRIMARY KEY,
姓名 NVARCHAR(50) NOT NULL,
手机号 NVARCHAR(20) NOT NULL,
注册时间 DATE NOT NULL
);
-- 创建会员积分表
CREATE TABLE 会员积分 (
积分ID INT PRIMARY KEY,
会员ID INT NOT NULL,
积分数 INT NOT NULL,
更新时间 DATETIME NOT NULL
);
c

五、数据库实施
1.粘贴所创建的数据库关系图

2.数据录入
-- 插入普通用户表数据
INSERT INTO 普通用户 (用户ID, 用户名, 密码)
VALUES
(1, N'张三', N'123456'),
(2, N'李四', N'abcdef'),
(3, N'王五', N'qwerty'),
(4, N'赵六', N'password'),
(5, N'小明', N'pass123');
-- 插入管理员表数据
INSERT INTO 管理员 (管理员ID, 管理员名, 密码)
VALUES
(1, N'管理员1', N'admin123'),
(2, N'管理员2', N'admin456'),
(3, N'超级管理员', N'superadmin'),
(4, N'系统管理员', N'sysadmin'),
(5, N'管理员3', N'admin789');
-- 插入会员等级表数据
INSERT INTO 会员等级 (等级ID, 等级名称, 折扣率)
VALUES
(1, N'普通会员', 0.95),
(2, N'白银会员', 0.90),
(3, N'黄金会员', 0.85),
(4, N'钻石会员', 0.80),
(5, N'至尊会员', 0.75);
-- 插入会员信息表数据
INSERT INTO 会员信息 (会员ID, 姓名, 手机号, 注册时间)
VALUES
(1, N'小红', N'13812345678', '2024-07-03'),
(2, N'小明', N'13987654321', '2024-06-25'),
(3, N'小华', N'13711112222', '2024-07-01'),
(4, N'小王', N'13633334444', '2024-06-30'),
(5, N'小李', N'13555556666', '2024-07-02');
-- 插入会员积分表数据
INSERT INTO 会员积分 (积分ID, 会员ID, 积分数, 更新时间)
VALUES
(1, 1, 500, '2024-07-03 10:00:00'),
(2, 2, 1000, '2024-07-03 11:30:00'),
(3, 3, 750, '2024-07-03 09:45:00'),
(4, 4, 1200, '2024-07-03 08:15:00'),
(5, 5, 300, '2024-07-03 13:00:00');
c

3.数据处理(包含完整十个,篇幅限制,仅列举前5个)
(1)至少包括2张表的等值连接语句;

(2)创建视图的语句;

(3)更新数据语句;

(4)删除数据语句;

(5)包含聚集函数的查询语句;

(6)包含条件过滤的查询语句;
(7)修改表结构语句;
(8)用T-SQL语句写出一个对数据表处理的人机交互程序;
(9)编写一个触发器;
(10)编写一个存储过程;
六、数据库应用系统实现
1.相关界面截图
用户登录:

信息查询:



管理员登录:

信息查询:



数据增加:


数据修改:


数据删除:


2.和数据库连接的程序语句
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=会员管理系统";
String userName = "sa";
String userPwd = "1";
c
3.具体实现代码
if (jr3.isSelected())//
{
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=会员管理系统";
String userName = "sa";
String userPwd = "1";
userId = null; // 管理员
try {
Class.forName(driverName);
} catch (Exception e1) {
e1.printStackTrace();
}
try {
Connection con = DriverManager.getConnection(dbURL, userName, userPwd);
Statement s = con.createStatement();
String r1 = "select * from 管理员 where 管理员ID=? and 密码=?";
PreparedStatement P = con.prepareStatement(r1);
P.setString(1, jtf1.getText());
P.setString(2, jtf2.getText());
ResultSet rs = P.executeQuery();
if (rs.next()) {
userId = rs.getString("管理员ID").trim();
new Custom(userId);
jfrm.setVisible(false);
}
else {
JOptionPane.showMessageDialog(null, "管理员ID或密码不正确!");
}
s.close();
con.close();
} catch (Exception e1) {
e1.printStackTrace();
c

七、小组分工明细
注:1-2人一组,若2人一组,请说明每位组员的具体贡献明细,要求每位组员都需要既参加数据库设计又参加Java GUI项目编码,课程报告中内容组内自行商量分工。
| 学号-姓名 | 身份 | 贡献比例 | 完成工作 |
|---|---|---|---|
| 组长 | % | ||
| 组员 | % |
八、开发环境说明
| 名录 | 内容 |
|---|---|
| 操作系统 | Win11 |
| Java GUI开发工具 | Eclipse/Idea |
| JDK版本 | 1.8 |
| 数据库及版本 | SQL Server 2014或以上均可 |
| JDBC版本 | 8.2 |
九、总结
200字左右的小结,包括
(1)完成情况和不足之处
(2)心得体会
(3)建议
这次数据库设计中,已经成功创建了普通用户、管理员、会员等级、会员信息和会员积分这五张表,并且分别完成了各自的数据插入。表结构合理,数据完整性得到了保证,但在实际应用中,还有几个不足之处需要注意和改进。对于普通用户和管理员的身份验证安全性可以进一步增强,例如考虑使用加密存储密码或者其他身份验证方式。会员信息表中姓名和手机号的唯一性限制未加入,可能会导致重复数据的插入。此外,会员积分表的更新时间没有设置默认值,应该考虑使用数据库的当前时间函数自动记录。总体而言,通过这次实践,深刻体会到了良好的数据库设计和数据管理的重要性,建议在未来的项目中,继续关注数据安全性和完整性的提升,以及利用数据库的功能和特性来简化数据处理和提高系统的性能。
十、参考文献
[1] 徐光迎.SQL Server实训项目设计中的“五要”[J].电脑知识与技术:学术交流, 2009.
[2] 戴上平,高丽.基于SQL Server的应用程序设计[J].高等继续教育学报, 1999, 000(006):45-47.DOI:CNKI:SUN:GDHS.0.1999-06-012.
[3] 苗连萍.以SQLServer为例,谈网站数据的安全传输机制[J].数码设计, 2018, 7(15):1.
十一、获取源码
大家 点赞、收藏、关注、评论 啦、查看👇🏻 获取联系方式 👇🏻
文章👇🏻下方名片👇🏻 联系我即可~
