您的当前位置:首页正文

用数据库实现仓库管理

2023-12-10 来源:独旅网
 目录

1 引 言 ............................................ 2

1.1课程设计的目的和意义 ......................................... 2 1.2 课题开发的相关技术介绍 ...................................... 2

2 系统需求分析 ..................................... 4

2.1 可行性分析 .................................................. 4 2.2 功能需求分析 ................................................ 4 2.3环境需求分析 ................................................. 4

3 仓库管理系统设计 .................................. 5

3.1系统总体结构设计 ............................................. 5 3.2数据库概念结构设计(E-R图) ................................. 6

4 系统数据库详细设计 ............................... 7

4.1视图定义如下: ............................................... 7 4.2 关系模型设计 ................................................ 8

5主要界面设计与代码 ................................ 12

5.1 用户界面设计: ............................................. 12

结束语 ............................................. 21 参考文献 ........................................... 22

《用数据库实现仓库管理》 刘艺媚 第 1 页 共 22 页

用数据库实现仓库管理

学生姓名:刘艺媚 指导老师:颜宏文

摘要 仓库管理信息系统主要是为公司的经营活动提供信息服务,它涵盖了仓库的各项管理工作,涉及多方面的职能。系统能够对客户信息管理、订单管理、报价单管理、供应商管理、出货管理等信息提供存储、更新、查询、统计的功能,实现管理的高效性、实时性、安全性、科学化、现代化和智能化。按照管理信息系统的原理和方法,采用成熟的信息技术和手段,支持公司管理工作的全过程,加强各种信息资源的管理和运用,提高企业管理工作的现代化水平。

关键字:仓库管理系统;MYSQL;

Abstract This thesis is founded on the development of army material management system. The author takes charge of the designing and implement of planar bar code using in storehouse management.

This Thesis mainly introduces the progress of analyzing, design and implement..This thesis expounds the system research, system analysis and the foundation of new system logical model in the development of system. In addition, this thesis expounds the detailed designing of system. In the end, this thesis expounds all kinds of idiographic technology problems and corresponding resolvents.

KEYWORDS: Storehouse management system ,MYSQL,

《用数据库实现仓库管理》 刘艺媚 第 2 页 共 22 页

1 引 言

为方便公司对仓库入库、出库等情况等进行高效的管理,编写该程序以提高管理员的管理效率。使用该程序之后,工作人员可以方便的查询仓库货物管理情况,还可以对当前工作情况进行一些统计,给出统计表格,以便全面掌握仓库的情况。

1.1课程设计的目的和意义

现代企业都需要仓库管理,特别是进行商品销售活动的企业,仓库的管理工作更是不可缺少。电脑管理也成为企业管理必不可小的一个方面,而现在很多企业单位虽然使有电脑,但大多数都是人工记帐与电脑统计相结合,由于顾客、供货商很多,为此总是产生大量的单据,而一般企业又往往是从事业务的人员很多,而作统计工作的只有一到两人,所以经常出现单据丢失现象,以至造成一些不必要的损失,例如库存有账目不对应,发货不及时等等问题,且查对时需要相当长的时间,因此而白白耗费了大量的人力与时间,为管理上带来了诸多的困难与不便。

本课程设计的主要目的是学习和练习SQL Server数据库的实际应用,所以

选择SQL Server 2000作为数据库服务器。

1.2 课题开发的相关技术介绍

MYSQL是最受欢迎的开源SQL数据库管理系统,它由MYSQL AB开发、发布和支持。MYSQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MYSQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。

Borland C++ Builder(以下简称BCB)是Borland公司(现更名为Inprise)继Delphi之后推出的又一个优秀的可视化编程环境,它在32位Windows环境下为我们提供了一种极具吸引力的快速Windows应用程序开发系统(RAD)。它基于最

《用数据库实现仓库管理》 刘艺媚 第 3 页 共 22 页

流行的面向对象程序设计语言C++,采用领先的数据库技术,并结合使用了图形用户界面(GUI)的许多先进特性和设计思想。

VCL是可视化组件库的简称,它是一个面向对象的函数库,完全支持所有面向对象编程的标准概念如继承、多态和封装等。C++ Builder的集成开发环境提供了120多个VCL组件,使开发人员不需太多编码,就能够实现很多复杂的功能,体现了软件的“重用性”原则。C++ Builder的用户界面也非常友好,易于使用,并且采用了停驻式(docking)工具条,可以自由组合集成开发环境窗口和工具条的排放方式。在编码过程中,还可以使用CodeExplorer技术对源代码进行管理。CodeCompletion技术使编译器能够自动列出VCL组件的可用属性和方法供程序员选择,而不必手工输入冗长的代码。

C++Builder率先引入了多层数据库应用模型,通过C++Builder提供的多层分布式应用服务(MIDAS)可以轻松开发出高可靠性、高效率、高负载的分布式数据处理系统。此外,还可以通过ActiveForm或InterBaseExpress为多层数据库应用程序创建基于Web的客户端,这样用户通过普通的浏览器就可以与远程数据库系统进行交互。在C++cBuilder 6中,MIDAS更名为DataSnap、DataSnap强化了MIDAS原有的功能,并改善了MIDAS的执行效率,更方便使用。

《用数据库实现仓库管理》 刘艺媚 第 4 页 共 22 页

2 系统需求分析

2.1 可行性分析

(1)技术可行性分析

技术上的可行性分析主要分析现有技术条件能否顺利完成开发工作,硬件、软件配置能否满足开发者的需要,各类技术人员的数量,水平,来源等。企业仓库管理系统的工作主要是为了方便管理员对仓库的管理,能快速了解和处理仓库里物资的信息。这一特点非常适合计算机特点,通过网络Internet技术,发挥计算机的信息传输速度快、准确度高的优势。计算机硬件和软件技术的飞速发展,为系统的建设提供了技术条件[6]。

(2)社会可行性分析

社会可行性有时也称为操作可行性,主要论证新系统在企业或机构开发和运行的可能性以及运行后可能一起的对企业或机构的影响,即组织内外是否具备接受和使用新系统的条件[7]。在当前信息技术飞速发展的大环境下,计算机技术和软件技术的更新使企业仓库管理完全有可能也有能力采用这样先进的管理技术。

2.2 功能需求分析

本课题拟开发一个仓库管理系统,包含以下主要功能: 1、登录模块功能:连接数据库;登陆注册;设置权限访问; 2 登记仓库资料;连接数据库。

3、仓库管理模块:管理仓库内存的货物信息的查询、修改和删除等 4、仓库运作模块:管理货物入库、出库等情况。 5、仓库供应商模块:基本信息、供货情况等。

2.3环境需求分析

 操作系统:Windows 2003或WindowsXP,以上

 数据库系统:5.1.29-rc-community-log MySQL Community Server (GPL)

《用数据库实现仓库管理》 刘艺媚 第 5 页 共 22 页

3 仓库管理系统设计

3.1系统总体结构设计

系统主要实现对企业仓库的管理功能。主要分为查询操作和库存操作两大功能块。其中包含了:入库信息管理,出库信息管理等主要模块。

系统总体设计图如下:

图3.1系统总体结构设计图

《用数据库实现仓库管理》 刘艺媚 第 6 页 共 22 页

3.2数据库概念结构设计(E-R图)

图3.2仓库管理E-R图

图3.3仓库管理E-R图

《用数据库实现仓库管理》 刘艺媚 第 7 页 共 22 页

4 系统数据库详细设计

4.1视图定义如下:

1)report2(报表视图) CREATE VIEW Report2 AS

SELECT SiType, Pid, Pprice, Pnum, (Pprice * Pnum) As Amount, Cid, Sid, EmpName, OptDate FROM StoreIn UNION

SELECT Ttype, Pid, Pprice, Pnum, (Pprice * Pnum) As Amount, Cid, Sid, EmpName, OptDate FROM TakeOut

2) 库存统计视图

CREATE VIEW Total_Num AS

SELECT dbo.ProInStore.Pid, SUM(dbo.ProInStore.Pnum) AS Total FROM dbo.ProInStore INNER JOIN

dbo.Product ON dbo.ProInStore.Pid = dbo.Product.Pid GROUP BY dbo.ProInStore.Pid

3)库存视图

CREATE VIEW dbo.v_ProInStore AS

SELECT p.Pid, SUM(s.Pnum) AS SumNum FROM dbo.Product p INNER JOIN

dbo.ProInStore s ON p.Pid = s.Pid GROUP BY p.Pid

4)入库视图

CREATE VIEW dbo.v_storein AS

SELECT p.Pid, SUM(i.Pnum) AS SumNum, SUM(i.Pnum * i.Pprice) AS SumPrice

FROM dbo.Product p INNER JOIN

dbo.StoreIn i ON p.Pid = i.Pid GROUP BY p.Pid

5)出库视图

CREATE VIEW dbo.v_takeout AS

SELECT p.Pid, SUM(t.Pnum) AS SumNum, SUM(t.Pnum * t.Pprice)

《用数据库实现仓库管理》 刘艺媚 第 8 页 共 22 页

AS SumPrice

FROM dbo.Product p INNER JOIN

dbo.TakeOut t ON p.Pid = t.Pid GROUP BY p.Pid

4.2 关系模型设计

表4-1 库存表 storage

NO. 1 字段名 仓库号 代码 stoID 类型 Char(3) 约束 主键,与storehouse表中的stoID外键关联,级联删除、更新 2 零件号 parID Char(7) 主键,与parts表中的parID外键关联,级联删除、更新 3 4 5 现有存量 最小存量 最大存量 Now_volume Min_volume Max_volume Smallint Smallint Smallint 非空,默认0,>=Min_volume,<=Max_volume 非空,默认0,unsigned 非空,默认0,unsigned 表4-2 出库表stockout

NO. 0 1 字段名 编号 仓库号 代码 outID stoID 类型 smallint Char(3) 约束 主键,,AUTO_INCREMENT 主键,与storehouse表中的stoID外键关联,级联删除、更新 2 零件号 parID Char(7) 主键,与parts表中的parID外键关联,级联更新、删除 3 4 5 6 7 出库数量 使用者 经手人 领取人 出库时间 outVolume user cmaker receiptor outDate Smallint Varchar(20) Varchar(20) Varchar(20) Timestamp 非空,默认0,unsigned 非空 非空 非空 非空,默认当前时间 《用数据库实现仓库管理》 刘艺媚 第 9 页 共 22 页

表4-3 入库表warehousing

NO. 0 1 字段名 编号 仓库号 代码 inID stoID 类型 Smallint Char(3) 约束 主键,AUTO_INCREMENT 主键,与storehouse表中的stoID外键关联,级联删除、更新 2 3 供应商号 零件号 supID parID Char(3) Char(7) 非空,与supplier表中的supID外键关联 主键,与parts表中的parID外键关联,级联更新、删除 4 5 6 入库数量 经手人 入库时间 inVolume cmaker inDate Smallint Varchar(20) Timestamp 非空,默认0,unsigned 非空 非空,默认当前时间

表4-4 供应商表 supply

NO. 1 字段名 供应商号 代码 supID 类型 Char(3) 约束 主键,与supplier表中的supID外键关联,级联删除、更新 2 零件号 parID Char(7) 主键,与parts表中的parID外键关联,级联删除、更新 3 4 供应量 供应时间 supVolume supDate Smallint Timestamp 非空,默认0,unsigned 非空

《用数据库实现仓库管理》 刘艺媚 第 10 页 共 22 页

表4-5 关系图warehousing_view

NO. 1 字段名 零件号 代码 parID 类型 Char(7) 备注 连parts表,更新warehousing表的parID项 2 3 4 5 供应商 零件名 计量单位 入库数量 supName part mensuration inVolume Varchar(20) Varchar(20) Char(4) Smallint 连supplier表 连parts表 连parts表 连warehousing表,更新parts_storage_view视图的Now_volume项 6 7 8 描述 经手人 入库时间 description cmaker inDate Text Varchar(20) Timestamp 连parts表 连warehousing表 连warehousing表

表4-6 仓库信息视图storehouse_view

NO. 1 2 3 4 6 字段名 仓库号 已用库存 库存总量 负责人 电话号码 代码 stoID 类型 Char(3) 连storehouse表 连storehouse表 连storehouse表 连storehouse表 连storehouse表 备注 Used_volume Int All_volume principal stoTEL Int Varchar(20) Varchar(15)

《用数据库实现仓库管理》 刘艺媚 第 11 页 共 22 页

表4-7 零部件计划采购视图stock_view

NO. 1 2 3 4 5 6 7 8 9 字段名 零件号 采购量 供应商号 电话 价格 计量单位 规格 采购时间 采购员 代码 parID stoVolume supID supTEL price mensuration spec stoDate buyer 类型 Char(7) Smallint Char(3) Varchar(15) 连stock表 连stock表 连supplier表,更新stock表的supName 连supplier表 备注 Decimal(6,2) 连parts表 Char(4) Char(10) Timestamp Varchar(20) 连parts表 连parts表 连stock表 连stock表

《用数据库实现仓库管理》 刘艺媚 第 12 页 共 22 页

5主要界面设计与代码

5.1 用户界面设计:

1)用户登陆:

图5.1 登入界面

实现代码如下:

class CLoginDlg : public CDialog {

// Construction public:

CLoginDlg(CWnd* pParent = NULL); // standard constructor ~CLoginDlg(); // Dialog Data

//{{AFX_DATA(CLoginDlg)

enum { IDD = IDD_LOGIN_DIALOG }; CEdit m_control_username; CEdit m_control_password; int count; int seconds;

CSMButton m_ok; CSMButton m_cancel; CString m_Pwd;

CString m_UserName; COLORREF m_clrText; COLORREF m_clrBkgnd; CBrush m_brBkgnd;

CBrush m_brControlBkgnd1; CBrush m_brControlBkgnd2; protected:

《用数据库实现仓库管理》 刘艺媚 第 13 页 共 22 页

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

virtual void OnOK();

afx_msg BOOL OnEraseBkgnd(CDC* pDC);

afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

afx_msg void OnTimer(UINT nIDEvent); virtual BOOL OnInitDialog(); //}}AFX_MSG

DECLARE_MESSAGE_MAP() };

void CLoginDlg::OnOK() {UpdateData(TRUE); if (m_UserName == \"\"){

MessageBox(\"请输入用户名\"); return;} if (m_Pwd == \"\"){ MessageBox(\"请输入密码\"); return;}

//定义CUsers对象,用于从表Users中读取数据 CUsers user;

user.GetData(m_UserName);

//如果读取的数据与用户输入数据不同,则返回 if (user.GetPwd() != m_Pwd) { if (count<3) {MessageBox(\"用户信息不正确,无法登录!\"); count++;

m_Pwd.Empty(); m_control_password.SetFocus(); UpdateData(FALSE);} else { MessageBox(\"你可能是非法用户!\警告\

exit(0); }}else{KillTimer(0);CDialog::OnOK();}}

《用数据库实现仓库管理》 刘艺媚 第 14 页 共 22 页

输入用户名和密码,进入系统的主界面,如下图所示:

图5.2 系统主界面

《用数据库实现仓库管理》 刘艺媚 第 15 页 共 22 页

2)供应商的实现代码

实现代码如下:

void CClientManDlg::Refresh_Data() {

UpdateData(TRUE); //将控件的值读取到成员变量中 CString cSource;

CString cCtype; //读取客户类型值

cCtype.Format(\"%d\ //设置SELECT语句,按客户单位排序

cSource = \"SELECT Cid, Cname AS 客户单位, Contact AS 联系人, Address AS 通信地址,\";

cSource += \" Postcode AS 邮政编码, Phone AS 联系电话, Fax AS 传真电话, Memo AS 备注\";

cSource += \" FROM Client WHERE Ctype=\" + cCtype + \" ORDER BY Cname\"; m_adodc.SetRecordSource(cSource); m_adodc.Refresh(); //设置表格列宽度 _variant_t vIndex; vIndex = long(0);

m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0); }

BOOL CClientManDlg::OnInitDialog() {

CDialog::OnInitDialog();

《用数据库实现仓库管理》 刘艺媚 第 16 页 共 22 页

// TODO: Add extra initialization here m_Ctype.SetCurSel(0); //设置客户类型 Refresh_Data(); //刷新表格中的记录集

return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE

}

void CClientManDlg::OnAddButton() {

// TODO: Add your control notification handler code here UpdateData(TRUE); //打开编辑对话框 CClientEditDlg dlg; dlg.cCid = \"\";

dlg.iCtype = m_Ctype.GetCurSel() + 1; if (dlg.DoModal() == IDOK) Refresh_Data(); }

void CClientManDlg::OnSelchangeCtypeCombo() {

// TODO: Add your control notification handler code here Refresh_Data(); }

void CClientManDlg::OnModiButton() {

// TODO: Add your control notification handler code here if (m_adodc.GetRecordset().GetEof()) {

MessageBox(\"请选择要修改的记录\"); return; }

UpdateData(TRUE); CClientEditDlg dlg;

dlg.cCid = m_datagrid.GetItem(0); //记录编号

dlg.iCtype = m_Ctype.GetCurSel() + 1; //客户类型 dlg.m_Cname = m_datagrid.GetItem(1); //单位名称 dlg.cCname = m_datagrid.GetItem(1);

dlg.m_Contact = m_datagrid.GetItem(2); //联系人 dlg.m_Address = m_datagrid.GetItem(3); //通信地址

《用数据库实现仓库管理》 刘艺媚 第 17 页 共 22 页

dlg.m_Postcode = m_datagrid.GetItem(4); //邮政编码 dlg.m_Phone = m_datagrid.GetItem(5); //联系电话 dlg.m_Fax = m_datagrid.GetItem(6); //传真

dlg.m_Memo = m_datagrid.GetItem(7); //备注信息

if (dlg.DoModal() == IDOK) Refresh_Data(); }

void CClientManDlg::OnDelButton() {

// TODO: Add your control notification handler code here if (m_adodc.GetRecordset().GetEof()) {

MessageBox(\"请选择要删除的记录\"); return; }

CString Cid;

Cid = m_datagrid.GetItem(0); CStoreIn obj;

if (obj.HaveClient(Cid) == 1) {

MessageBox(\"客户出现在入库单中,不能删除\"); return; }

CTakeOut obj1;

if (obj1.HaveClient(Cid) == 1) {

MessageBox(\"客户出现在出库单中,不能删除\"); return; }

if (MessageBox(\"是否删除当前记录\请确定\ {

CClient clt;

clt.sql_delete(m_datagrid.GetItem(0)); Refresh_Data(); } }

《用数据库实现仓库管理》 刘艺媚 第 18 页 共 22 页

3)仓库信息管理

实现代码如下:

void CStoreHouseManDlg::Refresh_Data() {

UpdateData(TRUE); CString cSource;

cSource = \"SELECT Sid, Sname AS 仓库单位, Memo AS 备注\"; cSource += \" FROM Storehouse ORDER BY Sname\"; m_adodc.SetRecordSource(cSource); m_adodc.Refresh(); //设置表格列宽度 _variant_t vIndex; vIndex = long(0);

m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0); vIndex = long(1);

m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex = long(2);

m_datagrid.GetColumns().GetItem(vIndex).SetWidth(420); }

void CStoreHouseManDlg::OnAddButton() {

// TODO: Add your control notification handler code here UpdateData(TRUE); //打开编辑对话框

CStoreHouseEditDlg dlg;

《用数据库实现仓库管理》 刘艺媚 第 19 页 共 22 页

dlg.cSid = \"\";

if (dlg.DoModal() == IDOK) Refresh_Data(); }

void CStoreHouseManDlg::OnModiButton() {

// TODO: Add your control notification handler code here if (m_adodc.GetRecordset().GetEof()) {

MessageBox(\"请选择要修改的记录\"); return; }

UpdateData(TRUE);

CStoreHouseEditDlg dlg;

dlg.cSid = m_datagrid.GetItem(0); //记录编号 dlg.m_Sname = m_datagrid.GetItem(1); //仓库名称 dlg.m_Memo = m_datagrid.GetItem(2); //备注信息

if (dlg.DoModal() == IDOK) Refresh_Data(); }

void CStoreHouseManDlg::OnDelButton() {

// TODO: Add your control notification handler code here if (m_adodc.GetRecordset().GetEof()) {

MessageBox(\"请选择要删除的记录\"); return; }

CString Sid;

Sid = m_datagrid.GetItem(0); CStoreIn obj;

if (obj.HaveStore(Sid) == 1) {

MessageBox(\"此仓库信息出现在入库单中,不能删除\"); return; }

CTakeOut obj1;

if (obj1.HaveStore(Sid) == 1) {

MessageBox(\"此仓库信息出现在出库单中,不能删除\"); return; }

《用数据库实现仓库管理》 刘艺媚 第 20 页 共 22 页

CProInStore obj2;

if (obj2.HaveStore(Sid) == 1) {

MessageBox(\"此仓库信息出现在库存产品信息中,不能删除\"); return; }

if (MessageBox(\"是否删除当前记录\请确定\ {

CStorehouse sh; sh.sql_delete(Sid); Refresh_Data(); } }

BOOL CStoreHouseManDlg::OnInitDialog() {

CDialog::OnInitDialog();

// TODO: Add extra initialization here Refresh_Data();

return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE

}

《用数据库实现仓库管理》 刘艺媚 第 21 页 共 22 页

结束语

在这次数据库课程设计中,我花了3周的时间做需求分析和数据库设计,只用了不到一周的时间编写程序。开始时真的不知道该怎么做,仓库管理系统到底要创建哪些表,表里到底要有哪些数据项,这些都很模糊。于是就找别人的设计作参考,按着设计要求一步一步的设计。需求分析真的很重要,也不容易,比编程还难。在需求设计阶段,把系统的功能勾画出来,分析系统的数据字典、数据流向,画出E-R图,根据E-R图数据库设计关系模型,这样一步步下来,自己对仓库管理系统有更多的了解,对后面的程序编程也明朗了。在数据库设计的时候也花了不少的时间,多次的在数据库关系模型、E-R图和数据字典之间循环修改,重复的修改完整性定义,优化表格。在定义check完整时发现MySQL的check完整性定义失效,翻书发现原来MySQL对check的完整性定义还没有强化。等数据关系模型最终确定了,才开始设计索引和触发子。之后的编程就简单多了。在数据库设计期间,我是在设计的过程中就去创建数据库,建表,所以当修改完整性定义和数据项时现得相当麻烦,因为有主键外键的完整性定义在修改时就不好做了。最终结论,我该把数据库设计完后才去创建数据库创建完整性定义等等,还有一点是创建表时最好也把后面程序功能的需要考虑进来。在这次数据库课程设计中真的学到不少。

《用数据库实现仓库管理》 刘艺媚 第 22 页 共 22 页

参考文献

[1] 王珊,萨师煊。数据库系统概论.第四版.高等教育出版社,2006.5 [2] 李代平等编著.软件工程.第二版. 清华大学出版社, 2008.1

[3] Rick F.van der Lans 著.许杰星, 李强等译. MySQL开发者SQL权威指南. 机械工业出版社, 2008.1

[4] Seyed, M.M.\"Saied\" Tabagbogbi , Hugb E.Williams 著.学习MySQL. 南京:东南大学出版社, 2007.6

[5] 蒙祖强 ,龚涛等编著.C++Builder程序员成长攻略.北京:中国水利水电出版社, 2007.1

因篇幅问题不能全部显示,请点此查看更多更全内容