《数据库应用系统实践》------ 超市管理系统

news2025/5/25 12:17:52

系列文章

《数据库应用系统实践》------ 超市管理系统


文章目录

  • 系列文章
  • 一、需求分析
    • 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 超市管理系统
ON PRIMARY
(NAME=YAN,
FILENAME='E:\SQLDate\超市管理系统.mdf',
SIZE=5MB,
MAXSIZE=UNLIMITED)
LOG ON
(NAME=YAN_log,
FILENAME='E:\SQLDate\超市管理系统_log.ldf',
SIZE=5MB,
MAXSIZE=UNLIMITED)

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

CREATE TABLE 管理员(
管理员账号       CHAR(20)      PRIMARY KEY,
密码			 CHAR(20)    NOT NULL
)

CREATE TABLE 陈列(
超市号		     CHAR(20)    NOT NULL,
商品码			 CHAR(20)    NOT NULL,
PRIMARY KEY( 超市号, 商品码 )
)

CREATE TABLE 超市(
超市号        CHAR(20)      PRIMARY KEY,
超市名		  CHAR(20)      NOT NULL,
地址          CHAR(20)      NOT NULL,
管理员账号	  CHAR(20)	    NOT NULL,
FOREIGN KEY (管理员账号) REFERENCES 管理员(管理员账号)
)

CREATE TABLE 商品(
商品码         CHAR(20)     PRIMARY KEY,
商品名         NCHAR(10)    NOT NULL,
类别           NCHAR(10)    NOT NULL,
商品单价       NCHAR(10)     NOT NULL
)

五、数据库实施

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

在这里插入图片描述

2.数据录入

INSERT INTO 管理员 VALUES ('001','001')
INSERT INTO 管理员 VALUES ('002','002')
INSERT INTO 管理员 VALUES ('003','003')
INSERT INTO 管理员 VALUES ('004','004')
INSERT INTO 管理员 VALUES ('005','005')

INSERT INTO 超市 VALUES ('001','大脚超市','上海市上海建桥学院店','001')
INSERT INTO 超市 VALUES ('002','环联超市','上海市人民广场店','002')
INSERT INTO 超市 VALUES ('003','波峰超市','上海市龙阳路站','003')
INSERT INTO 超市 VALUES ('004','小二超市','上海市淞虹路站','004')
INSERT INTO 超市 VALUES ('005','贵宾超市','上海市南京东路站','005')

INSERT INTO 商品 VALUES ('001','橘子','水果','1')
INSERT INTO 商品 VALUES ('002','苹果','水果','2')
INSERT INTO 商品 VALUES ('003','薯片','零食','5')
INSERT INTO 商品 VALUES ('004','猪肉','肉类','14')
INSERT INTO 商品 VALUES ('005','橙子','水果','5')

INSERT INTO 陈列 VALUES ('001','001')
INSERT INTO 陈列 VALUES ('002','002')
INSERT INTO 陈列 VALUES ('003','003')
INSERT INTO 陈列 VALUES ('004','004')
INSERT INTO 陈列 VALUES ('005','005')

3.数据处理

(1)至少包括2张表的等值连接;
在这里插入图片描述

(2)创建视图;
在这里插入图片描述

(3)编写包含子查询的SQL语句;
在这里插入图片描述

(4)有修改语句;
在这里插入图片描述

(5)有删除语句;
在这里插入图片描述

(6)有包含聚集函数;
在这里插入图片描述

(7)有记录过滤,条件过滤语句;
在这里插入图片描述

(8)有修改表结构的SQL语句;
在这里插入图片描述

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

在这里插入图片描述

(10)编写一个触发器;
在这里插入图片描述

六、数据库应用系统实现

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

管理员登录:
在这里插入图片描述

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

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

数据增加:
在这里插入图片描述

数据删除:
在这里插入图片描述

数据修改:
在这里插入图片描述

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

	xg.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
					try{
						Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
						Connection conn =DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName =超市管理系统","sa","1");
						String sql ="update 管理员  set 管理员账号='"+d1.getText()+"',密码='"+d2.getText()+"'where 管理员账号='"+d1.getText()+"'";
						PreparedStatement pstm = conn.prepareStatement(sql);//执行查询
						pstm.executeUpdate();
						JOptionPane.showMessageDialog(frm,"修改成功");
						}catch(ClassNotFoundException cnfe) {
								JOptionPane.showMessageDialog(null, "数据源错误" ,"错误",JOptionPane.ERROR_MESSAGE);
							}
						catch(SQLException sqle) {
								JOptionPane.showMessageDialog(null, "数据操作错误" ,"错误",JOptionPane.ERROR_MESSAGE);
							}
		}});
		
			lr.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			try{
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");	
			    Connection conn =DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName =超市管理系统","sa","1");//建立查询条件
			    String sql = "insert into 管理员 (管理员账号,密码) values ('" +d1.getText()+"','"+d2.getText()+"')";
			    PreparedStatement pstm =conn.prepareStatement(sql);//执行查询
			    pstm.executeUpdate();
			    JOptionPane.showMessageDialog(frm, "添加成功");}
			catch(ClassNotFoundException cnfe) {
				JOptionPane.showMessageDialog(null,"数据源错误","错误",JOptionPane.ERROR_MESSAGE);
			}
			catch(SQLException sqle) {
				JOptionPane.showMessageDialog(null,"数据操作错误","错误",JOptionPane.ERROR_MESSAGE);
			}
		}});
			sc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){
				try{
					Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver" );
					Connection conn2 =DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=超市管理系统","sa","1");//建立查询条件
					String sql2 ="delete from 管理员  where 管理员账号 ='"+d1.getText()+"'";
					PreparedStatement pstm2 =conn2.prepareStatement(sql2);
						//执行查询

3.其它代码

		xg.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
					try{
						Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
						Connection conn =DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName =超市管理系统","sa","1");
						String sql ="update 管理员  set 管理员账号='"+d1.getText()+"',密码='"+d2.getText()+"'where 管理员账号='"+d1.getText()+"'";
						PreparedStatement pstm = conn.prepareStatement(sql);//执行查询
						pstm.executeUpdate();
						JOptionPane.showMessageDialog(frm,"修改成功");
						}catch(ClassNotFoundException cnfe) {
								JOptionPane.showMessageDialog(null, "数据源错误" ,"错误",JOptionPane.ERROR_MESSAGE);
							}
						catch(SQLException sqle) {
								JOptionPane.showMessageDialog(null, "数据操作错误" ,"错误",JOptionPane.ERROR_MESSAGE);
							}
		}});
		
			lr.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			try{
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");	
			    Connection conn =DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName =超市管理系统","sa","1");//建立查询条件
			    String sql = "insert into 管理员 (管理员账号,密码) values ('" +d1.getText()+"','"+d2.getText()+"')";
			    PreparedStatement pstm =conn.prepareStatement(sql);//执行查询
			    pstm.executeUpdate();
			    JOptionPane.showMessageDialog(frm, "添加成功");}
			catch(ClassNotFoundException cnfe) {
				JOptionPane.showMessageDialog(null,"数据源错误","错误",JOptionPane.ERROR_MESSAGE);
			}
			catch(SQLException sqle) {
				JOptionPane.showMessageDialog(null,"数据操作错误","错误",JOptionPane.ERROR_MESSAGE);
			}
		}});
			sc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){
				try{
					Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver" );
					Connection conn2 =DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=超市管理系统","sa","1");//建立查询条件
					String sql2 ="delete from 管理员  where 管理员账号 ='"+d1.getText()+"'";
					PreparedStatement pstm2 =conn2.prepareStatement(sql2);
						//执行查询

七、总结

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

在实训中,我和我的队友们各有分工,工作明了,这使我们设计的系统能够顺利的进行,在遇到一些问题,就一起讨论从各方面去倾听,去学习,去归纳出一个更加合理,更加可靠地答案。其实,从中我们可以提前去感受体验一下做软件,做系统的那种氛围,去体验一下团队之间的那种默契和合作。对未来我们以后的发展会起到意想不到道的作用。团队之间的分工更加给人一种责任感,这并不是别人的事,而是自己的事,队友之间更加的是相互理解,多去沟通,我觉得吧,这对整个项目来说也是很重要的。

参考文献:

[1]桂云秋, 满文汇, 海丽,等. SQLServer触发器及应用[J]. 电脑迷, 2016(12):1.
[2]张燕琴. 基于SQLServer数据库的查询优化[J]. 软件导刊, 2012, 11(8):3.
[3]杨立志, 乔春贵, 黄毅梅,等. SqlServer数据库的数据备份[J]. 气象与环境科学, 2006, 000(002):86-87.

八、源代码获取

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

提示:代码获取链接: 下载完整源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/581454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer 11. 旋转数组的最小数字解题思路

文章目录 题目解题思路优化 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。…

直流电机 PID 开发指南学习笔记

直流电机 PID 开发指南 (基于【平衡小车之家】直流电机 PID 学习套件 1.0) 目录 1.位置闭环控制 1.1 理论分析 1.2 控制原理图 1.3 C 语言实现 1.4 参数整定 2.速度闭环控制 2.1 理论分析 2.2 控制原理图 2.3 C 语言实现 PID 调节器出现于上世…

keepalived脑裂后,近20min不能访问虚拟IP事故分析

问题现象和说明 真实的场景比较复杂,抽象起来可以用下面的图表示, #mermaid-svg-q8mZrLctqAENT1r0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-q8mZrLctqAENT1r0 .error-icon{fill:#5522…

【经验总结】浮点数double/float精度误差问题总结

现象 最近做的项目中经常会在C环境下和高精度的double浮点类型数据打交道 这些double类型数据精度级别可能到 pico级别(10^-12) 甚至 femto级别(10^-15),用来表示集成电路的一些微观属性 但是非常诡异的是,不知道为什么在对这些高精度的浮点数进行运算时&#xff…

RK3588平台开发系列讲解(工具篇)ADB的使用

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、连接设备1.1、USB 的方式1.2、网络的方式二、常用命令沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍ADB的使用。 一、连接设备 1.1、USB 的方式 主机通过 USB 连接设备,具体如何连接。 US…

chatgpt赋能python:Python中5%-3的用法介绍

Python中5%-3的用法介绍 在Python编程中,5%-3是一个常用的运算符,其作用是对5除以3取余数。在本文中,我将介绍5%-3的用法以及如何在Python编程中使用该运算符。 什么是5%-3运算符 5%-3运算符表示对5除以3取余数,余数为2。 5%-…

chatgpt赋能python:Python中9/2的结果为4.5——一篇关于Python运算符的SEO文章

Python中9/2的结果为4.5——一篇关于Python运算符的SEO文章 如果你是一名Python开发工程师,那么你肯定熟悉运算符这个概念。作为一门计算机语言,Python中有各种各样的运算符,包括算术运算符、赋值运算符、比较运算符等等。今天,我…

WiFi 6 vs WiFi 5

在现代无线通信领域,WiFi已经成为人们日常生活中不可或缺的一部分。随着技术的不断发展,WiFi标准也在不断更新和演进。WiFi 6(802.11ax)和WiFi 5(802.11ac)是当前两个主要的WiFi标准。 本文将详细介绍WiFi …

大佬联合署名!反对 ACL 设置匿名期!

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 近日,自然语言处理领域的多位知名学者联合发起了一项反对 ACL 设置匿名期的联合署名行动,包括著名学者 William Wang 和 Yoav Goldberg 在内,还有Christopher Potts、Hal Daume、Luke Zettl…

Springboot +spring security,认证方式---HTTP基本认证的实现

一.简介 这篇文章来学习下security的认证方式其中的HTTP基本认证。 二.Spring Security的认证方式 2.1什么是认证 认证: 就是用来判断系统中是否存在某用户,并判断该用户的身份是否合法的过程,解决的其实是用户登录的问题。认证的存在,是…

2023年系统分析师案例及论文(回忆版)

2023年5月27日,全国计算机等级上半年考试如期举行,北京市软件分析师考试地点在北京市对外贸易学校,早上外面下起雨 看考场分布图,44个考场,推测有44*301320名考生,本人所在的考场,实际到场17人…

【SpringCloud组件——GateWay】

前言: 在我们之前所用的Nacos和Feign以及Eureka,这些组件都是用与系统内部之间进行互相访问的,但是当用户访问系统时,我们没有采取任何措施,举个例子:系统管理员可以访问哪些接口并具备哪些操作权限&#…

chatgpt赋能python:Python中0的SEO优化综述

Python中0的SEO优化综述 在Python编程中,数字0是一个非常重要的数值,它有许多用途和应用。在SEO优化中,合理地应用0可以帮助我们提高网站排名和用户体验。本文将介绍Python中0的一些具体应用以及如何进行合理的SEO优化。 0的应用 0作为标记…

张小飞的Java之路——第四十一章——File

写在前面: 视频是什么东西,有看文档精彩吗? 视频是什么东西,有看文档速度快吗? 视频是什么东西,有看文档效率高吗? 介绍 诸小亮:从今天开始,我们学习 IO 流 张小飞…

CAPL(vTESTStudio) - CAPL控制程控电源IT6332A

目录 为什么要使用CAPL控制程控电源? 一、程控电源的选择 二、程控电源通信协议

Junit5单元测试框架详解

前面我们学习了Selenium自动化测试框架,但是有的时候测试用例会很多,我们需要一个工具来管理这些测试用例,而Junit就是一个很好的管理工具,简单点来说,Junit就是一个针对Java的单元测试框架; 目录 一. 关于…

凸优化系列——凸集

1.最优化问题概述 最优化问题是决策问题,选择一些可以执行的策略使得目标最优;一个最优化问题包括 决策变量;一个或多个目标函数;一个由可行策略组成的集合,可由等式或者不等式刻画; 最优化问题的形式: 最优化问题的分类 无约束优化问题和…

【C++】函数 - 定义,调用,值传递,常见样式,声明,分文件编写

文章目录 1. 函数的定义2. 函数的调用3. 值传递4. 常见的样式5. 函数的声明6. 函数的分文件编写 所谓数组,就是一个集合,里边存放了相同类型的数据元素。 特点1:数组中的每个数据元素都是相同的数据类型 特点2:数组是由连续的内存…

chatgpt赋能python:Python在SEO中的作用:不简单的搜索引擎优化工具

Python在SEO中的作用:不简单的搜索引擎优化工具 Python作为一种强大的编程语言,已经在各个领域中得到了广泛的应用。在搜索引擎优化(SEO)领域,Python也发挥了重要作用。 Python在SEO中的应用 程序化爬虫 很多SEO工…

(c语言)将一句话的单词进行倒置,标点不倒置(i like beijing.)

目录 例子: 思路方法: ​编辑 (分板块)代码的实现: 一.字符串的获取(3种简单的方法) 1.用gets()函数,即使中间有空格也会读取 2.用fgets(&am…