基于java的小型超市管理系统系统(含源文件)

欢迎添加微信互相交流学习哦!

二维码

项目源码:https://gitee.com/oklongmm/biye

    1. 系统目标

根据需求分析的描述,现在制定系统实现目标如下:

  • 界面设计简洁、友好、美观大方
  • 操作简单、快捷方便
  • 数据存储安全、可靠
  • 信息分类清晰、准确
  • 强大的查询功能、保证数据查询的灵活性
  • 提供销售排行,为管理员提供真实的数据信息
  • 提供灵活、方便的权限设置功能,使整个系统的管理分工明确
  • 对用户的输入的数据,系统进行严格的数据检验,尽可能排人为错误
  1. 3.小型超市管理系统系统概念设计文档

  1. 系统E-R图说明:
  1. 超市中用户可以销售多种商品,商品可以被多个用户销售
  2. 超市中商品可由多个供应商供应,供应商可供应多种商品
  3. 超市中合格的商品入库,不合格的商品被回收即被退回
  1. 视图设计

(4)逻辑设计文档

a.系统关系模型

1)用户登录表(用户编号,用户名称,用户密码,用户类型,用户状态)

2)商品信息表(商品编号,供应商编号,商品名称,入库日期,生产日期,进货价格,销售价格,有效期,数量下限,单位)

3)供应商信息表(供应商编号,供应商名称,供应商地址,供应商电话)

4)销售表(销售编号,销售日期,商品名称,商品数量,商品金额,商品编号,操作员)

5)进货入库表(入库编号,入库日期,商品编号,供应商编号,商品数量,操作员)

6)退货销售表(退票编号,商品编号,商品数量,商品金额,退货时间,操作员)

7)退货商品表(退货编号,商品编号,商品名称,退货时间,供应商编号,操作员,数量)

8)库存信息表(库存编号,商品编号,用户编号,统计,总价)

 

  1. 系统数据库表结构

数据库表索引

表名

中文名

account

用户登录表

manager

用户信息表

commodity

商品信息表

provider

供应商信息表

returncommodity

退货商品表

returnsale

退货销售表

sale

销售表

storage

进货入库表

storageinfo

库存信息表

 

用户登录表(account)

字段名

类型

长度

主/外键

字段约束

中文名

Accountnumber

Integer

 

primary

 

登录号

Accountname

varchar

30

 

Not null

登录名

Accountpassword

varchar

20

 

Not null

登录密码

accountType

smallint

6

 

Not null

登录类型

accountState

smallint

6

 

Not null

登录状态

managerID

Integer

 

foreign

Not null

用户ID

 

用户信息表(manager)

字段名

类型

长度

主/外键

字段约束

中文名

managerID

Integer

 

primary

 

用户编号

managername

varchar

20

 

Not null

用户姓名

mobilephone

varchar

15

 

 

手机号码

phone

varchar

15

 

 

固定电话

manageremail

varchar

30

 

 

电子邮件

 

商品信息表(commodity)

 

字段名

类型

长度

主/外键

字段约束

中文名

commodityID

Integer

 

primary

 

商品编号

Commodityname

varchar

40

 

Not null

商品名称

producedate

datatime

 

 

not null

生产日期

Inprice

numeric

2

 

Not null

进货价格

saleprice

numeric

2

 

Not null

销售价格

storagetime

int

 

 

Not null

有效期

downlimit

int

 

 

Not null

数量下限

unit

varchar

8

 

Not null

单位

providernumber

int

 

外键

 

供应商编号

indate

date

 

 

 

进货日期

 

供应商表(provider)

字段名

类型

长度

P/F

约束

中文名

providernumber

int

 

P

 

供应商编号

providername

varchar

40

 

Not null

供应商名称

provideraddress

varchar

60

 

Not null

供应商地址

phone

varchar

20

 

Not null

供应商电话

 

销售表(sale)

字段名

类型

长度

P/F

约束

中文名

saleid

int

 

P

 

销售票号

commodityid

int

 

F

Not null

商品编号

selltime

date

 

 

Not null

销售日期

number

int

 

 

Not null

销售数量

money

float

 

 

Not null

收入

operator

varchar

45

 

Not null

销售员

commodityname

varchar

45

 

Not null

商品名称

 

销售退货(returnsale)

字段名

类型

长度

P/F

约束

中文名

Rsaleid

int

 

P

 

退货票号

commodityid

int

 

 

Not null

商品编号

commodityname

varchar

 

 

 

商品名称

number

Int

 

 

Not null

商品数量

moeny

folat

 

 

Not null

金额

returntime

date

 

 

Not null

退货时间

operator

varchar

45

 

Not null

操作员

 

入库退货表(returncommodity)

字段名

类型

长度

P/F

约束

中文名

Rid

int

 

P

 

退货编号

commodityname

varcgar

45

 

Not null

商品名称

commodityid

int

 

 

Not

商品编号

price

float

 

 

Not null

价格

outdate

date

 

 

Not null

退货时间

provider

varchar

45

 

Not null

供应商名称

operator

varchar

45

 

Not null

销售员

number

int

 

 

Not null

退货数量

unit

varchar

8

 

Not null

单位

 

库存信息表(storage)

字段名

类型

长度

P/F

约束

中文名

storageid

int

 

P

 

入库编号

commodityname

varchar

45

 

Not null

商品名称

commodityid

varchar

 

 

Not null

商品编号

unit

vachar

45

 

Not null

单位

price

float

45

 

Not null

单价

outdate

date

 

 

Not null

退货时间

provider

varchar

45

 

Not null

供应商

operator

varchar

45

 

Not null

操作员

number

int

 

 

Not null

数量

 

6. 物理设计文档

/*----------创建数据库----------*/

本系统使用mysql数据库,首先我们在Navicat for MySQL的Host: localhost下创建数据库limitedmarket,选择数据库编码为utf8 -- UTF-8 Unicode。

或使用sql语句create database limitedmarket创建数据库。

 

/*----------创建基本表----------*/

/*

    创建account表

*/

DROP TABLE IF EXISTS `account`;

CREATE TABLE `account` (

 `accountNumber` Integer NOT NULL auto_increment,

  `accountName` varchar(30) NOT NULL,

  `accountPassword` varchar(20) NOT NULL,

  `accountType` smallint(6) NOT NULL,

 

  `managerID` Integer default NULL,

  `accountState` smallint(6) NOT NULL,

  PRIMARY KEY  (`accountNumber`),

  KEY `FK_manage` (`managerID`),

  CONSTRAINT `FK_manage` FOREIGN KEY (`managerID`) REFERENCES `manager` (`managerID`)

)  ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*

创建manage表

*/

DROP TABLE IF EXISTS `manager`;

CREATE TABLE `manager` (

  `managerID` Integer  NOT NULL  auto_increment,

  `managerName` varchar(20) NOT NULL,

  `managerMobilephone` varchar(15) ,

  `managerRegionNumber` varchar(4) ,

  `managerEMail` varchar(30) default NULL,

  `managerPhone` varchar(10) ,

PRIMARY KEY  (`managerID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*

创建commodity表

*/

DROP TABLE IF EXISTS `commodity`;

CREATE TABLE `commodity` (

  `commodityID` integer NOT NULL auto_increment,

  `providernumber` int(11) default NULL,

  `commodityname` varchar(45) NOT NULL,

  `inDate` datetime NOT NULL,

  `producedate` datetime NOT NULL,

  `inprice` float NOT NULL,

  `saleprice` float NOT NULL,

  `storagetime` int(11) NOT NULL,

  `downlimit` int(11) NOT NULL,

  `unit` varchar(8) default NULL,

  PRIMARY KEY  (`commodityID`),

  KEY `FK_supply` (`providernumber`),

  CONSTRAINT `FK_supply` FOREIGN KEY (`providernumber`) REFERENCES `provider` (`providernumber`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*

创建returncommodity

*/

DROP TABLE IF EXISTS `returncommodity`;

CREATE TABLE `returncommodity` (

  `RCid` int  unsigned NOT NULL auto_increment,

  `commodityname` varchar(45) NOT NULL,

  `commodityid` varchar(45) NOT NULL,

  `unit` varchar(45) NOT NULL,

  `price` float NOT NULL,

  `outdate` datetime NOT NULL,

  `provider` varchar(45) NOT NULL,

  `operator` varchar(45) NOT NULL,

  `number` int  unsigned NOT NULL,

  PRIMARY KEY  (`RCid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*

创建sale表

*/

DROP TABLE IF EXISTS `sale`;

CREATE TABLE `sale` (

  `commodityname` varchar(45) NOT NULL,

  `commodityid` int  unsigned NOT NULL,

  `sellTime` datetime NOT NULL,

  `number` varchar(45) NOT NULL,

  `money` double NOT NULL,

  `operator` varchar(45) NOT NULL,

  `saleid` int  NOT NULL auto_increment,

  PRIMARY KEY  (`saleid`)

) ENGINE=InnoDB DEFAULT CHARSET=gb2312 PACK_KEYS=1;

 

/*

创建returnsale表

*/

DROP TABLE IF EXISTS `returnsale`;

CREATE TABLE `returnsale` (

  `Rsaleid` int  unsigned NOT NULL auto_increment,

  `commodityid` int  unsigned NOT NULL,

  `commodityname` varchar(45) NOT NULL,

  `number` int  unsigned NOT NULL,

  `money` double NOT NULL,

  `returnTime` datetime NOT NULL,

  `operator` varchar(45) NOT NULL,

  PRIMARY KEY  (`Rsaleid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*

创建provider表

*/

DROP TABLE IF EXISTS `provider`;

CREATE TABLE `provider` (

  `providernumber` int(11) NOT NULL auto_increment,

  `phone` varchar(20) NOT NULL,

  `provideraddress` varchar(60) NOT NULL,

  `providername` varchar(40) NOT NULL,

  PRIMARY KEY  (`providernumber`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*

创建stroge表

*/

DROP TABLE IF EXISTS `storage`;

CREATE TABLE `storage` (

  `storageid` int unsigned NOT NULL auto_increment,

  `commodityname` varchar(45) NOT NULL,

  `commodityid` int  unsigned NOT NULL,

  `unit` varchar(45) NOT NULL,

  `price` float NOT NULL,

  `indate` datetime NOT NULL,

  `provider` varchar(45) NOT NULL,

  `operators` varchar(45) NOT NULL,

  `number` int unsigned NOT NULL,

  PRIMARY KEY  (`storageid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

/*

        创建storageinfo表

*/

DROP TABLE IF EXISTS `storageinfo`;

CREATE TABLE `storageinfo` (

  `commoditynumber` int  unsigned NOT NULL,

  `accountid` int unsigned NOT NULL,

  `amount` int  unsigned NOT NULL,

  `storageid` int  unsigned NOT NULL auto_increment,

  `money` double NOT NULL,

  PRIMARY KEY  (`storageid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

由于本系统设计较复杂,很多需要用到数据冗余性,所以部复杂功能借助‘存储功能‘ 和 ’触发器‘,本系统需要用到的存储过程和触发器的代码,如下:

 

-----------------------存储过程操作数据--------------------------

/*

向commodity插入值

*/

 

drop procedure if exists insertcommodity;

delimiter /

create procedure insertcommodity(IN providernumber int, commodityname varchar(45), inprice float,saleprice float, storagetime int, downlimit int, unit varchar(8) , indate date, producedate date)

begin

insert into commodity(providernumber, commodityname, inprice, saleprice, storagetime, downlimit, unit,indate, producedate)

values(providernumber, commodityname, inprice, saleprice, storagetime, downlimit, unit, indate, producedate);

end

/

delimiter ;

 

/*

更新commodity的值

*/

drop procedure if exists updatecommodity;

delimiter /

create procedure updatecommodity(IN providernumber int, commodityname varchar(45), inprice float,saleprice float, storagetime int, downlimit int, unit varchar(8) , indate date, producedate date, id int(11))

begin

update commodity set providernumber = providernumber, commodityname=commodityname, inprice = inprice, saleprice=saleprice, storagetime=storagetime, downlimit=downlimit,unit=unit, indate=indate, producedate = producedate where commodityid= id ;

end

/

delimiter ;

 

/* 向表storageinfo插入数据*/

drop procedure if exists insertstorageinfo;

delimiter /

create procedure insertstorageinfo(IN commoditynumber int(10),accountid int(10), amount int(10), money double)

begin

insert into storageinfo( commoditynumber,accountid, amount,money)  values(commoditynumber,accountid ,  amount, money);

end

/

delimiter ;

 

/*

向resale表插入数据

*/

 

drop procedure if exists insertreturnsale;

delimiter /

create procedure insertreturnsale(IN commodityname varchar(45), commodityid int(10),returnTime varchar(45),  number int(10) ,money double,operator varchar(45))

begin

insert into returnsale(commodityname , commodityid, returnTime, number,money, operator)

values(commodityname , commodityid, returnTime, number,money,operator);

end

/

delimiter ;

 

/*

向storage表插入数据

*/

drop procedure if exists ruku;

delimiter /

create procedure ruku(IN commodityname varchar(45), commodityid int, unit varchar(45), price float,indate varchar(45), provider varchar(45), operators varchar(45), number int)

begin

insert into storage (commodityname , commodityid, unit, price,indate, provider, operators, number)

values(commodityname , commodityid, unit, price,indate, provider, operators, number);

end

/

delimiter ;

/*

向sale插入数据

*/

drop procedure if exists insertsale;

delimiter /

create procedure insertsale(IN commodityname varchar(45), commodityid int,sellTime varchar(45),  number int ,money double,operator varchar(45))

begin

insert into sale(commodityname , commodityid, sellTime, number,money, operator)

values(commodityname , commodityid, sellTime, number,money,operator);

end

/

delimiter ;

 

/*

查询storageinfo的值

*/

drop procedure if exists storageQuery;

delimiter /

create procedure storageQuery(IN  commodityid int)

begin

select * from storageinfo where commoditynumber=commodityid;

end

/

delimiter ;

 

/*

更新storageinfo数据

*/

drop procedure if exists storageupdate;

delimiter /

create procedure  storageupdate(IN amount int, commodityid int)

begin

update storageinfo set amount=amount  where commoditynumber=commodityid;

end

/

delimiter ;

 

/*

向returncommodity插入数据

*/

drop procedure if exists tuihuo;

delimiter /

create procedure tuihuo(IN commodityname varchar(45), commodityid int, unit varchar(45), price float,outdate varchar(45), provider varchar(45), operator varchar(45), number int)

begin

insert into returncommodity(commodityname , commodityid, unit, price,outdate, provider, operator, number)

values(commodityname , commodityid, unit, price,outdate, provider, operator, number);

end

/

delimiter ;

-------------------触发器更新数据----------------------------

/*

更新storageinfo的数据(销售时库存的添加情况)

*/

delimiter /

create trigger tuihuo before insert on returnsale

for each row begin

update storageinfo set amount= amount + new.number where commoditynumber = new.commodityid;

end/

delimiter ;

 

/*

更新storageinfo的数据(退货时库存的减少情况)

*/

delimiter /

create trigger storageupdate before insert on sale

for each row begin

update storageinfo set amount= amount - new.number where commoditynumber = new.commodityid;

end/

delimiter ;

 

小结

本系统完成了超市系统的基本功能模块,由于时间上的仓促,没有完成系统的数据备份和数据恢复,这是遗憾之处。同时系统没有优化,还存在很多细节上的缺陷。本系统采用mysql数据库,swing布局,使用的IDE是netbeans6.7。

猜你喜欢

转载自blog.csdn.net/weixin_55459367/article/details/114182751