《数据库应用系统实践》------ 包包销售系统

2023-11-02 03:50

本文主要是介绍《数据库应用系统实践》------ 包包销售系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章

《数据库应用系统实践》------ 包包销售系统


文章目录

  • 系列文章
  • 一、需求分析
    • 1、系统背景
    • 2、 系统功能结构(需包含功能结构框图和模块说明)
    • 3.系统功能简介
  • 二、概念模型设计
    • 1.基本要素(符号介绍说明)
    • 2.ER图
  • 三、逻辑模型设计
    • 1.ER模型向关系模型转换规则
    • 2.转换后的关系模型
    • 3.关系模型优化(达到3NF)
  • 四、物理设计
    • 1.创建数据库的SQL语句或截图
    • 2.创建所有表的SQL语句或截图(包含完整性约束)
  • 五、数据库实施
    • 1.粘贴所创建的数据库关系图
    • 2.数据录入
    • 3.数据处理
  • 六、数据库应用系统实现
    • 1.相关界面截图(对每一张截图进行一定的文字说明)
    • 2.和数据库连接的程序语句
    • 3.其它代码
  • 七、总结
    • 参考文献:
  • 八、源代码获取


一、需求分析

1、系统背景

该系统主要为一个包包中古店铺的数据库体系,以体现其店铺的整体销售系统,其中内容包含销售员信息,管理员的信息,包包库存的信息以及顾客的一部分信息。望该数据库管理系统能够给包包销售的店铺带去更多的便捷管理。该系统主要经手人为管理员,销售员能够修改自身的信息,顾客能够修改自身的信息。管理员能够对他们的信息进行增删改等处理,对于包包的进货与库存的信息等,都能进行修改。对于这些内容的及时修改和更新,在这个竞争的年代是非常有必要的,根据顾客的购买的包包种类进行及时的调整,能够给本公司带去更大的利益,在提高效率的同时带去便捷,是该系统的初衷。

2、 系统功能结构(需包含功能结构框图和模块说明)

(1)功能结构图
在这里插入图片描述

(2)模块说明
该系统总共分为人员信息管理、包包信息管理、顾客信息管理、查询销售员信息、查询包包信息、顾客信息查询、查询顾客信息、顾客信息增删、顾客信息修改几大模块。管理员能够进入销售员信息进行管理,能够增删改销售员以及顾客人数,查询销售员以及人员信息,管理员能够进入包包库存信息进行管理,能够增删改以及查询各类包包信息。销售员进入系统能够查询销售员自身信息,以及包包库存信息和经手进货销售情况查询。顾客进入系统能够查询修改,增加或是删除自身信息

3.系统功能简介

该系统为包包销售系统,管理员能够进入系统对销售员、包包和顾客的信息进行查询,增加,删除或是修改等操作。销售员能够查询销售员自身信息、包包的信息、以及顾客的信息。顾客,能够对于自身信息进行增删改,以及查询的操作。

二、概念模型设计

1.基本要素(符号介绍说明)

.基本要素(符号介绍说明)
① 矩形:表示实体。
② 椭圆形:表示属性,即实体的属性。
③ 菱形:表示联系。
④ 连线:该连线为没有方向的线段,分为连接实体与属性(矩形与椭圆形之间的连线)和连接实体与联系名(矩形与菱形之间的连线);实体与联系名的连线旁需标注联系的类型,如1:1、1:n、m:n。
注意:在联系类型标注时请按照约定俗成的方式标注,一对多使用1:n,多对多使用m:n,如果超过两个实体请采用m:n:p:q:

2.ER图

在这里插入图片描述

三、逻辑模型设计

1.ER模型向关系模型转换规则

① 实体转换为单独的关系模式。
② 一对一联系转换为关系模式有两种方法。一、将联系转换为单独的关系模式;二、将其中一个实体的之间加入到另外一个实体的关系模式中,作为外键。
③ 一对多联系转换为关系模式有两种方法。一、将联系转换为单独的关系模式;二、将n实体的主键合并到1实体的关系模式中,作为1实体关系模式的外键。

2.转换后的关系模型

管理员表(管理员编号,姓名,电话,性别,密码)
销售员表(销售员编号,昵称,电话,性别,密码,管理员编号)
顾客表(顾客编号,姓名,电话,性别,生日,密码)
包包库存表(包包编号,数量,品牌,价格,种类,颜色)
进货表(销售员编号,包包编号,进货时间)销售员编号是引用销售员表销售员编号的外键
购买表(顾客编号,包包编号,购买时间)

3.关系模型优化(达到3NF)

以上要素都属于第三范式

四、物理设计

1.创建数据库的SQL语句或截图

create database bagsystem
on primary
(
name=bag_data1,
filename='D:\bagsystem\bag_data1.mdf',
size=10MB,
maxsize=unlimited
),
(
name=bag_data2,
filename ='D:\bagsystem\bag_data2.ndf',
size=10MB,
maxsize=unlimited
)
log on
(name=bag_log,
filename='D:\bagsystem\bag_log.ldf',
size=10MB,
maxsize=unlimited,
filegrowth=2
)

2.创建所有表的SQL语句或截图(包含完整性约束)

----------管理员表----------
create table manager
(
mno char(8) not null primary key,
mname char(50) not null,
msex char(50) check (msex='男'or msex='女'),
mphone char(50) check(mphone like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
mpassword char(6) not null
)
----------销售员表----------
create table salesman
(
sno char(8) not null primary key,
sname char(50) not null, 
ssex char(8) check (ssex='男'or ssex='女'),
sphone char(11) check(sphone like '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
spassword char(6) not null,
mno char(8) not null,
foreign key(mno) references manager(mno)
)
----------顾客表----------
create table customer
(
cno char(8) not null primary key,
cname char(50) not null, 
csex char(8) check (csex='男'or csex='女'),
cphone char(11) check (cphone like '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' ),
cbirthday char(12) not null,
cpassword  char(6) not null
)
----------包包库存表----------
create table bag
(
bno char(8) not null primary key,
bprice money not null,
bnum int not null,
bbrand char(50),
sort nvarchar(50),
bcolour nchar(50)
)
----------进货表----------
create table purchase
(
sno char(8) not null,
bno char(8) not null,
pdate datetime,
primary key(sno,bno),
foreign key(sno) references salesman(sno),
foreign key(bno) references bag (bno)
)
----------购买表----------
create table buy
(
cno char(8) not null,
bno char(8) not null,
bdate datetime,
primary key(cno,bno),
foreign key(cno) references customer(cno),
foreign key(bno) references bag(bno)
)

五、数据库实施

1.粘贴所创建的数据库关系图

在这里插入图片描述

2.数据录入

----------管理员表----------
insert into manager values('M01','刘奕','男','13022171168','123456')
insert into manager values('M02','陈迩','男','13856722387','654321')
insert into manager values('M03','张叁','男','18005789252','234567')
insert into manager values('M04','李肆','男','18118959535','765432')
insert into manager values('M05','王武','男','13812345675','345678')
insert into manager values('M06','赵琉','女','13597056843','876543')
insert into manager values('M07','孙琪','女','18017353545','456789')
insert into manager values('M08','周芭','女','13927458901','987654')
----------销售员表----------
insert into salesman values('S01','小冉','女','13812345681','121212','M01')
insert into salesman values('S02','阿炜','男','13812345682','232323','M04')
insert into salesman values('S03','梦洁','女','13812345683','454545','M03')
insert into salesman values('S04','智鑫','男','13812345684','565656','M07')
insert into salesman values('S05','慕青','女','13812345685','343434','M05')
insert into salesman values('S06','付恒','男','13812345678','565656','M02') 
----------顾客表----------
insert into customer values('C01','白亭','男','13516548977','2000-10-20','123451')
insert into customer values('C02','易玺','男','13817356679','2001-2-18','123452')
insert into customer values('C03','张甜','女','13973590025','2002-5-24','123453')
insert into customer values('C04','陆佳','女','18033559642','1999-12-25','123454')
insert into customer values('C05','胡轩','男','18113778652','1997-6-27','123455')
insert into customer values('C06','李岳','男','18113778667','1999-7-27','123456')
----------包包库存表----------
insert into bag values('B01',4700,100,'coach','Madison','棕黄色')
insert into bag values('B02',3950,200,'coach','CENTRAL托特包','粉白色')
insert into bag values('B03',1880,57,'LaurenceChico','腋下包','浅米白')
insert into bag values('B04',699,125,'JW PEI','花瓶包','老花太空银')
insert into bag values('B05',759,1008,'Amazing Song','法棍腋下包','牛奶咖啡')
----------进货表----------
insert into purchase values('S01','B01','2021-11-8')
insert into purchase values('S02','B02','2021-11-10')
insert into purchase values('S03','B03','2021-11-14')
insert into purchase values('S04','B04','2021-10-15')
insert into purchase values('S05','B05','2021-11-20')
----------购买表----------
insert into buy values('C01','B01','2021-12-2')
insert into buy values('C02','B02','2021-11-28')
insert into buy values('C03','B03','2021-12-4')
insert into buy values('C04','B04','2021-12-15')
insert into buy values('C05','B05','2021-12-6')

3.数据处理

(1)至少包括2张表的等值连接;

(2)创建视图;

create view 包包库存详情
as
select * from bag

(3)编写包含子查询的SQL语句;

查询购买了'B02'包包编号的顾客姓名以及电话
select cname as 顾客姓名,cphone as 顾客电话 from customer where cno in (select cno from buy where bno='B02')

(4)有修改语句;

修改顾客编号为C04的姓名为陆嘉
update customer set cname='陆嘉' where cno='C04' 

(5)有删除语句;

删除辞职的管理员编号为’M05’的信息
由于M05号管理员被销售员表中引用了

(6)有包含聚集函数;

查询包包库存总数
select sum(bnum) as 包包库存总数 from bag

(7)有记录过滤,条件过滤语句;

查询姓名为易玺的顾客信息
select *  from customer where cname='易玺'

(8)有修改表结构的SQL语句;

将表manager中的msex列的数据类型改为char(12)
ALTER TABLE manager
ALTER COLUMN msex char(12) NOT NULL

(9)用T-SQL语句写出一个对数据表处理的人机交互程序;

select  cname as 顾客姓名,case csex when '男' then 'M' when '女' then 'F' end as 性别 from customer

(10)编写一个触发器;

create trigger tri_sale 
on salesman 
for update 
as
if UPDATE(sphone)beginprint'销售员的电话号码被修改了!!'rollbackend

六、数据库应用系统实现

1.相关界面截图(对每一张截图进行一定的文字说明)

顾客登录
账号:C01
密码:123451

在这里插入图片描述

信息查询:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

管理员登录
账号:M01
密码:123456

在这里插入图片描述

信息查询:
在这里插入图片描述
在这里插入图片描述

信息修改:
在这里插入图片描述

增加:
在这里插入图片描述
修改:
在这里插入图片描述
删除:
在这里插入图片描述

2.和数据库连接的程序语句

	String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=bagsystem";String userName = "sa";String userPwd = "1";

3.其它代码

	scrollPan.setPreferredSize(new Dimension(300, 200));jl1 = new JLabel("购买信息查询");jl1.setFont(new Font("", 1, 30));jl1.setForeground(Color.BLUE);jb1 = new JButton("页面刷新");jb1.addActionListener(this);pan1 = new JPanel();pan1.setLayout(null);pan2 = new JPanel();pan2.setLayout(new FlowLayout(FlowLayout.CENTER));pan2.add(jb1);try {Class.forName(driverName);} catch (Exception e) {e.printStackTrace();}try {Connection con = DriverManager.getConnection(dbURL, userName, userPwd);// 连接数据库的具体路径Statement s = con.createStatement();String r1 = "select * from buy ";ResultSet rs = s.executeQuery(r1);int count = 0;while (rs.next()) {count++;}Object[][] A = new Object[count][3];count = 0;model.setRowCount(0);rs = s.executeQuery(r1);while (rs.next()) {A[count][0]=rs.getString("cno");A[count][1]=rs.getString("bno");A[count][2]=rs.getString("bdate");model.addRow(A[count]);count++;}s.close();con.close();

七、总结

(可选,200字左右的小结,包括
(1)完成情况和不足之处
(2)心得体会
(3)建议)

这次,我在数据库系统实践课程中所选的课题名称是包包销售系统,在这个系统中分为几个不同的用户角色,不同的用户角色可以完成不同的工作内容,这就是角色的划分。在整个实验的过程中,我觉得是最初实验环境的搭建比较地困,遇见的问题也是比较多的,相比而言在之后的实验过程中我是比较地轻松的。在最后写了java代码之后和数据库连接的过程中也是出现了比较多的问题,这些问题都是我之前没有遇见过的,我相信这些问题在我这阶段遇见之后,还有别的问题我就可以很轻松地解决了。

参考文献:

[1] 张华萍. 浅谈连接SQLServer数据库的几种参数存放方式[J]. 科技情报开发与经济, 2008.
[2] 徐人凤, 曾建华. SQLServer数据库及应用[M]. 高等教育出版社, 2013.
[3] 邵河山, 张小福, 王雨功,等. SQLserver数据库与第三方平台交互的方法及系统:, CN110968625A[P]. 2020.

八、源代码获取

本次的分享就到这里啦,创作不易,感谢点赞收藏👍
感兴趣的小伙伴可以在评论区留言或者私信我哦💕

这篇关于《数据库应用系统实践》------ 包包销售系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom