• 4.26 MB
  • 2022-05-16 18:34:42 发布

《数据库实用技术》课程设计--仓库管理系统

  • 30页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
《数据库实用技术》课程设计项目名称:仓库管理系统课程名称:数据库实用技术专业班级:信息与计算科学110班姓名:曾黎任课教师:陈云新 一、系统定义随着各个公司经营的范围慢慢扩大,业务流量比较大,需要处理的数据比较多,为了能对公司的业务进行有效的管理,减少手工操作的繁琐,同时可以根据公司业务的运营情况,分析出公司发展的潜在信息,顺应时代的发展变化,使管理更加简单化。二、需求分析1、最终仓库管理系统功能如下:(1)资料管理功能人员信息:用于登记公司的员工信息资料、客户信息资料、和供应商信息资料,对员工信息资料支持员工信息的录入、修改和删除。最高权限的管理员能录入和删除工作人员,普通权限的工作人员只能修改自己的密码产品信息:支持产品信息的录入、修改和删除,可以对各个产品进行查询。(2)业务管理功能进出仓库明细:用于查看进货明细、进货退货、销售明细、销售退货、实现录入、修改和删除。退货时,需要指定相应的退货单,可以查询进出仓库明细。盘库:通过人工清点当前库存物品,与理论上仓库内物品数量对比,分析盘盈、盘亏问题(3)统计分析功能物品分析:用于对物品进行分析,主要是销售分析,包括对利润、进货、退货、库存等进行分析,可以通过报表显示。 人员分析:由于需求加大,需要各种职务的工作人员,分析职务需求,可供人才参考利润分析:对产品销售的利润进行分析,可以看出货物的供求关系2、给出系统的逻辑模型:数据流程图、数据字典数据流图例子(可根据需要用多层数据流图表示):采购货物数据流图:数据字典:数据项:仓库:{仓库编号,仓库名,仓库类型,管理员,员工编号};供应商:{供应商编号,姓名,联系方式,地址};供应商供应的货物存入仓库数据结构:供应商提供货物,存入相应的仓库数据流:需求的货物进入相应的仓库数据存储: 产品描述,应付款处理过程:需求货物->送订单号->订单处理->付款->货物入库管理数据流图:数据字典:数据项:员工:{员工编号,姓名,登录密码,性别,生日,联系方式,职称,家庭住址};货物:{货物编号 ,名称,类型,数量,单位,进价,售价,订单号};管理员管理仓库和资料库数据结构:管理员进行相关的操作,显示相应的信息,或存储相应的物品、资料数据流:操作信息,操作数据,相关信息表数据存储:查询时将数据信息显示出来,入出库数据进行存储处理等等处理过程:管理员操作->获得操作信息->实行相应的处理三、系统设计1、概念结构设计画出系统E-R图。 2、逻辑结构设计将E-R图(或其他概念设计图)转换为具体的DBMS对应的关系模式。员工:{员工编号,姓名,登录密码,性别,生日,联系方式,职称,家庭住址};货物:{货物编号,名称,类型,单位,进价,售价};仓库:{仓库编号,仓库名,仓库类型,员工编号};供应商:{供应商编号,姓名,联系方式,地址};客户:{客户编号,货物编号,姓名,联系方式,地址,订单号};库存:{仓库编号,货物编号,数量}进仓:{入单号,进仓时间,入库数量,所付金额}出仓:{出单号,出仓时间,出库数量,所付金额}盘库:{盘库号,盘库时间,盘库数量}数据库设计:员工表序号字段名称数据类型大小可否为空主键说明1staff_no可变字符10否是员工编号2staff_password可变字符10否否登录密码3staff_name可变字符10否否员工姓名4staff_sex字符2否否性别5staff_birthday日期 可否出生日期6staff_phone字符15否否联系方式7staff_rank字符10否否职称8staff_family_address可变字符50可否家庭住址仓库表序号字段名称数据类型大小可否为空主键说明1cangku_no可变字符10否是仓库编号2cangku_name可变字符10否否仓库名3cangku_type可变字符10否否仓库类型4staff_no可变字符10否否员工编号货物表序号字段名称数据类型大小可否为空主键说明1material_no可变字符10否是货物编号2material_name可变字符10否否货物名3material_type可变字符10否否货物类型4material_in_price可变字符10否否进价5material_out_price可变字符10否否出价6material_unit字符4否否单位 供应商表序号字段名称数据类型大小可否为空主键说明1supplier_no可变字符10否是供应商编号2material_no可变字符10否是货物编号3supplier_name可变字符10否否供应商姓名4supplier_phone字符15否否联系方式5supplier_address可变字符50可否住址客户表序号字段名称数据类型大小可否为空主键说明1kehu_no可变字符10否是客户编号2kehu_name可变字符10否否客户姓名3kehu_password可变字符10否否登录密码4kehu_phone字符15否否联系方式5kehu_address可变字符50可否住址进仓表序号字段名称数据类型大小可否为空主键说明1rudan_no整形 否否入单号2supplier_no可变字符10否否供应商编号3material_no可变字符10否否货物编号4in_data日期 否否进仓时间5ru_qty长整形 否否进仓数量6supp_pay长整形 否否所付金额7staff_no员工编号10否否员工编号出仓表序号字段名称数据类型大小可否为空主键说明1chudan_no整形 否否出单号2kehu_no可变字符10否否客户编号3material_no可变字符10否否货物编号4out_data日期 否否出仓时间5chu_qty长整形 否否出仓数量6kehu_pay长整形 否否所付金额7staff_no员工编号10否否员工编号库存表序号字段名称数据类型大小可否为空主键说明1cangku_no可变字符10否是仓库号2material_no可变字符10否是货物编号3qty长整形 否否数量 盘库表序号字段名称数据类型大小可否为空主键说明1panku_no可变字符10否否盘库号2staff_no可变字符10否否员工编号3panku_date日期 否否盘库日期4material_no可变字符10否否货物编号5panku_qty长整形 否否盘库数量3、系统功能模块图画出系统功能模块图,并对子模块功能进行详细说明。四、详细设计主要的SQL语句--数据库的建立CREATEDATABASEckglONPRIMARY(NAME="ckgl_data",FILENAME="D:心语ckgl_data.mdf",SIZE=3, FILEGROWTH=15%)LOGON(NAME="ckgl_log",FILENAME="D:心语ckgl_log.ldf",SIZE=1,MAXSIZE=100,FILEGROWTH=1)GO--员工表createtablestaff(staff_novarchar(10)primarykeyNOTNULL,staff_passwordvarchar(10)NOTNULL,staff_namevarchar(10)NOTNULL,staff_sexchar(2)NOTNULL,staff_birthdaydatetimeNOTNULL,staff_phonechar(15)NOTNULL,staff_rankchar(10)NOTNULL,staff_family_addressvarchar(50)NOTNULL,)GO--货物表createtablematerial(material_novarchar(10)primarykeyNOTNULL,material_namevarchar(10)NOTNULL,material_typevarchar(10)NOTNULL,material_in_pricevarchar(10)NOTNULL,material_out_pricevarchar(10)NOTNULL,material_unitchar(4)NOTNULL,)GO--仓库表createtablecangku(cangku_novarchar(10)primarykeyNOTNULL,cangku_namevarchar(10)NOTNULL,cangku_typevarchar(10)NOTNULL,staff_novarchar(10)NOTNULL,foreignkey(staff_no)referencesstaff(staff_no),) Go--库存表createtablecunhuo(cangku_novarchar(10),material_novarchar(10),qtybigint,primarykey(cangku_no,material_no),foreignkey(cangku_no)referencescangku(cangku_no),foreignkey(material_no)referencesmaterial(material_no),)GO--供应商表createtablesupplier(supplier_novarchar(10),material_novarchar(10),supplier_namevarchar(10)NOTNULL,supplier_phonechar(15)NOTNULL,supplier_addressvarchar(50)NOTNULL,primarykey(supplier_no,material_no),foreignkey(material_no)referencesmaterial(material_no),)GO--进仓表createtablematerial_in(rudan_nointNOTNULL,supplier_novarchar(10)NOTNULL,material_novarchar(10)NOTNULL,in_datadatetimeNOTNULL,ru_qtybigintNOTNULL,supp_paybigintNOTNULL,staff_novarchar(10)NOTNULL,foreignkey(supplier_no,material_no)referencessupplier(supplier_no,material_no),foreignkey(staff_no)referencesstaff(staff_no),)GO--客户表createtablekehu(kehu_novarchar(10)primarykeyNOTNULL, kehu_namevarchar(10)NOTNULL,kehu_passwordvarchar(10)NULL,kehu_phonechar(15)NULL,kehu_addressvarchar(50),)GO--出仓表createtablematerial_out(chudan_nointNOTNULL,kehu_novarchar(10)NOTNULL,material_novarchar(10)NOTNULL,out_datadatetimeNOTNULL,chu_qtybigintNOTNULL,kehu_paybigintNOTNULL,staff_novarchar(10)NOTNULL,foreignkey(kehu_no)referenceskehu(kehu_no),foreignkey(material_no)referencesmaterial(material_no),foreignkey(staff_no)referencesstaff(staff_no),)GO--盘库表createtablepanku(panku_novarchar(10)NOTNULL,staff_novarchar(10)NOTNULL,panku_datedatetime,material_novarchar(10)NOTNULL,panku_qtybigint,foreignkey(material_no)referencesmaterial(material_no),foreignkey(staff_no)referencesstaff(staff_no),)Go建立进出仓的存储过程入仓:createprocedurematerial_in_pro@rudan_noint,@supplier_novarchar(10),@material_novarchar(10),@in_datadatetime,@ru_qtybigint,@supp_paybigint,@staff_novarchar(10),@outvarchar(20)="0"output asDECLARE@n1intselect@n1=count(material_no)frommaterialwherematerial_no=@material_noif(@n1=0)beginselect@out="此物料不存在,如果要进仓,请先登记新物料信息!!"returnendelsebegininsertintomaterial_invalues(@rudan_no,@supplier_no,@material_no,@in_data,@ru_qty,@supp_pay,@staff_no)updatecunhuosetqty=qty+@ru_qtywherematerial_no=@material_noselect@out="操作成功!!"returnendgo出仓:createprocedurematerial_out_pro@chudan_noint,@kehu_novarchar(10),@material_novarchar(10),@out_datadatetime,@chu_qtybigint,@kehu_paybigint,@staff_novarchar(10),@outvarchar(20)="0"outputasDECLARE@n1intselect@n1=count(material_no)frommaterialwherematerial_no=@material_noif(@n1=0)beginselect@out="此物料不存在!"returnendelse beginif@chu_qty>(selectqtyfromcunhuowherematerial_no=@material_no)beginselect@out="库存数量不足!!"returnendelsebegininsertintomaterial_outvalues(@chudan_no,@kehu_no,@material_no,@out_data,@chu_qty,@kehu_pay,@staff_no)updatecunhuosetqty=qty-@chu_qtywherematerial_no=@material_noselect@out="操作成功!!"returnendendgo触发器:1.入库触发器创建:要求:在添加入库记录时,必须修改库存表,分两种情况,一是(material_no,cangku_no)在库存表中有记录,修改库存数量即可,二是没有记录时,要添加相关记录。createtriggerWHENRKonRUKUforinsertasDECLARE@material_noCHAR(5),@cangku_nochar(5),@N_umintSELECT@material_no=material_no,@cangku_no=cangku_no,@N_um=RKnumFROMINSERTEDif(EXists(selectmaterial_nofromSTOREWHEREmaterial_no=@material_noANDcangku_no=@cangku_no))beginupdateSTOREsetNUM=NUM+@N_umwherematerial_no=@material_noANDcangku_no=@cangku_noendif(notEXists(selectmaterial_nofromSTOREWHEREmaterial_no=@material_noANDcangku_no=@cangku_no))begininsertintoSTORE values(@material_no,@cangku_no,@N_um)end1.出库触发器创建:要求:在添加出库记录时,必须满足(material_no,Cno)外码约束,也就是无法添加(material_no,cangku_no)不在库存表中的记录。满足外码约束后,如果出库数量不大于库存数量,修改库存数量即可,但当出库数量大于库存数量,将无法添加相关记录。createtriggerWHENCKonCUKUforinsertasDECLARE@material_noCHAR(5),@cangku_nochar(5),@N_umint,@material_outCHAR(5)SELECT@material_no=material_no,@cangku_no=cangku_no,@N_um=CKnum,@material_out=material_outFROMINSERTEDif(EXists(selectmaterial_nofromSTOREWHEREmaterial_no=@material_noANDcangku_no=@cangku_noandNUM>=@N_um))beginupdateSTOREsetNUM=NUM-@N_umwherematerial_no=@material_noANDcangku_no=@cangku_noendif(EXists(selectmaterial_nofromSTOREWHEREmaterial_no=@material_noANDcangku_no=@cangku_noandNUM<@N_um))begindeletefromCUKUwherematerial_out=@material_outend2.完整性设计实体完整性:在商品表中定义商品号material_no为主码;在仓库表中定义仓库号cangku_no为主码;在库存表中定义商品号和仓库号(material_no,cangku_no)为主码;在管理员表中定义管理员编号staff_no为主码;在客户表中定义客户编号kehu_no为主码;在入库表中定义入库号rudan_no为主码;在出库表中定义出库号material_out为主码;在密码表中定义管理员编号Mno为主码;实体完整性检查和违约处理:1.检查主码值是否唯一,如果不唯一则拒绝插入或修改2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改;参照完整性:在库存表中定义商品号和仓库号为建立在商品表和仓库表上的外码;在入库表中定义商品号为建立在商品表上的外码,仓库号为建立在仓库表上的外码,客户号为建立在客户表上的外码,管理员编号为建立在管理员表上的外码;在出库表中定义商品号为建立在商品表上的外码,仓库号为建立在仓库表上的外码,客户号为建立在客户表上的外码,管理员编号为建立在管理员表上的外码;在密码表中定义管理员编号为建立在管理员表上的外码。参照完整性的检查和违约处理: 1.拒绝执行:不允许该操作执行。该策略一般设置为默认策略;2.级联操作:当删除或修改被参照表的一个元组造成了与参照表的不一致,则删除或修改参照表中的所有造成不一致的元组;3.设置为空值:当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值;用户自定义完整性:在管理员表中,添加完整性约束条件,年龄在18—60之间;性别只能在‘男’‘女’两个选项中取值;姓名不能为空;否则,无法插入;主要模块的程序流程图。1、 2、 3、 4、五、简单查询示例USEckglGOSELECTstaff_no,staff_password,staff_name,staff_sex,staff_birthday,staff_phone,staff_rank,staff_family_addressFROMstaffGO增加一条员工信息INSERTINTOstaffVALUES("01","123456","心语","女","1993-1-15","15232456457","仓库管理员","湖南衡阳")GO修改员工数据UPDATAstaffSETstaff_phone="15567899765"WHEREstaff_no="01"GO六、数据库的安全性管理 数据库的安全很重要,如果你的数据库没有安全管理机制,那就意味着任何人都可以进入你的数据库,很可能会给公司造成巨大的损失,因此仓库管理系统的安全是一个十分重要的方面。创建两个SQLServer身份证的登录,一个为工作人员登录,一个为客户登录。USEckglcreatelogingzrywithpassword="123452"createloginkhwithpassword="888888"更改登录账号gzry的密码。alterlogingzrywithpassword="asdfg"禁止登录账号Kh的登录alterloginkhdisable启动登录账号kh的登录alterloginkhenable给登录账户gzry赋予owner角色sp_addsrvrolemember"gzry","owner"给登录账户kh赋予datareader角色sp_addsrvrolemember"kh","datareader"用户:权限七、系统实现与测试1、开发平台和工具选择Deiphi7SQL20052、系统测试登录界面: 可以看到字体为动态形式,下面的诗为闪烁状态主界面:业务管理: 进仓开单后单号自动加1 盘库:信息管理: 其中添加员工和删除员工只有人事管理员才能操作,如果是其他员工,则 客户资料: 供应商: 员工需求分析: 客户登录进来购买:客户改密: 八、课程设计总结学了一个学期的数据库,对数据库有了一个初步的了解,但是还不算十分熟悉,经过这才数据库课程设计发现了自己还有很多不足,还有很大的提升空间,学习不仅要学好理论知识,更重要的一点要能把理论运用到实践中去。九、参考文献1、Delphi开发经典模块大全/梁水,赛奎春.--北京:人民邮电出版社,2009.42、ADO.NET数据库应用开发张骏主编.--北京:机械工业出版社,2008.13、Delphi管理信息系统项目方案精解/亚林等编著.北京:航空工业出版社,