娟题目二:库存物资管理.docx

上传人:牧羊曲112 文档编号:5093065 上传时间:2023-06-03 格式:DOCX 页数:28 大小:187.21KB
返回 下载 相关 举报
娟题目二:库存物资管理.docx_第1页
第1页 / 共28页
娟题目二:库存物资管理.docx_第2页
第2页 / 共28页
娟题目二:库存物资管理.docx_第3页
第3页 / 共28页
娟题目二:库存物资管理.docx_第4页
第4页 / 共28页
娟题目二:库存物资管理.docx_第5页
第5页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《娟题目二:库存物资管理.docx》由会员分享,可在线阅读,更多相关《娟题目二:库存物资管理.docx(28页珍藏版)》请在三一办公上搜索。

1、题目二:库存物资管理(10人)1、背景资料: 有一个存放商品的仓库,每天都有商品出库和入库。每种商品都有商品编号、商品名称、生产厂家、型号、规格等。 入库时必须填写入库单据,单据包括商品名称、生产厂家、型号、规格、入库数量、 入库日期、入库仓库号、入库仓库名称、送货人姓名。出库时必须填写出库单据,单据包括仓库号、仓库名称、商品编号、商品名称、型号、 规格、出库数量、出库日期、提货人姓名。 设置商品库存台帐,商品库存台帐是对仓库中目前库存的所有商品的明细记录,商品 库存台帐包括商品编号、商品名称、型号、规格、库存数量、库存日期。每当有商品入 库或商品出库时都应该自动修改该台帐,最后一次修改的是现

2、在的库存情况。2、设计要求:进行需求分析,编写数据字典。设计完整的E-R图。进行数据库的逻辑设计。 完成物理数据库的设计,包括数据库、表、索引、视图、完整性约束的物理设计。按C/S结构用某种语言开发具有下述功能要求的应用程序。3、系统功能要求: 商品入库管理子系统。至少包括:商品入库数据的录入(当商品入库时用触发器 修改商品库存台帐,以保证库存数据的准确、一致)、商品入库数据的注销(当商品入库 时数据录入错误时不能删除,只能注销,同时用触发器恢复该商品的原有的商品库存台 帐,然后再进行新的商品入库数据的录入)、商品入库数据查询(尽可能多的查询方式)、 商品入库数据的注销查询(尽可能多的查询方式

3、)。 商品出库管理子系统。至少包括:商品出库数据的录入(当商品出库时用触发器 修改该商品的商品库存台帐,以保证库存数据的准确、一致)、商品出库数据的注销(当 商品出库时数据录入错误时不能删除,只能注销,同时用触发器恢复该商品的原有的商 品库存台帐,然后再进行新的商品出库数据的录入)、商品出库数据查询(尽可能多的查 询方式)、商品出库数据的注销查询(尽可能多的查询方式)。 商品统计子系统。至少包括:按不同的时间段(月、季、年)统计各种商品的出 库、入库、库存数据。系统维护子系统。至少包括:操作者权限的设置、取消和更改;数据库数据的导入和 导出;数据库的备份拄功能。4、组员系统分工:本系统分工是根

4、据系统的功能来进行分工,分工如下:(总人数:10人)入库管理:李洋出库管理:伍桂锋仓库管理:苏琦入库子系统:杨远奋统计子系统 J出库子系统:郭淼圭库存子系统:梁永娟导入导出温礼平维护子系统 何飞鸿、曾华、J 数据库管理J备份1恢复JI 操作员管理:李通1系统开发中数据库命名规范为了规范虚拟公司开发部的数据库设计过程,特制订本规范。本规范从数据库的设计 原则、设计文档几方面规定了数据库设计的规范思想及命名规则。1. 数据库涉及字符规范约定:采用26个英文字母(区分大小写)和0 9这十个自然数,加上下划线组成,共 63个字符。不能出现其他字符(注释除外)。2. 数据库对象命名规范约定,数据库对象包

5、括表、视图(查询)、存储过程(参数查询)、函数、约束。对象名字 由前缀和实际名字组成,长度不超过30。前缀:使用字母开头实际名字:实际名字尽量描述实体的内容,由单词或单词组合,每个单词的首字母大写, 其他字母小写,不以数字和开头。如:表:Admin;存储过程:killStock因此,合法的对象名字类似:表:Ledger,outStore3. 数据库表命名规范约定,表名由前缀和实际名字组成。前缀:使用字母,代表表。实际名字中,一个系统尽量采取同一单词,两个单词直接连接 区分,第二个单词的第一个字母为大写。因此,合法的表名类似:Admin,Ledger,outStore,sslConn,stora

6、geLists,storeLocations, stores。4. 字段命名规范约定,字段由表的简称,实际名字组组成。如果此字段关联另外的字段,那么两个单词连 接关联表字段的字段名,第二个单词的第一个字母为大写。因此,合法的字段名类似:id, productName, storeLoc, createTime。5. 存储过程命名规范约定,字段由前缀和实际名字加操作名字组成,中间用下划线连接。前缀:使用小写字母开头,表示存储过程。因此,合法的存储过程名为:killStock6. 外键命名规范约定,字段由前缀和实际名字加操作名字组成,中间用下划线连接。前缀:使用小写字母fk_开头,表示存储过程。因

7、此,合法的存储过程名为:fkoutStore2需求分析数据字典以简单表格的方式列出(实际并不规范)数据项名数据类型宽度,小数位数取值范围或格式拟用字段名产品编号varchar200productNum产品名称varchar200productName产品规格varchar200spec产品单价float大于0并且是数字类型Price产品型号varchar200model产品产家varchar200factory产品总库存量int不能小于0并且是数字类型total送货人varchar50operator产品库存量int不能小于0并且是数字类型quantity入库时间datetimestoreTi

8、me库位号intstoreLocationId出仓时间datetimetime出货人varchar200operator库位号intstoreLocationId出库量int出库量=总库量并且不能小于0并 且是数字类型quantity操作员编号intid操作员名称varchar20name密码varchar15password创建时间DateTimecreatetime操作员角色varchar20取值范围为1,2,3role仓库名varchar200storeName仓库号intstoreNum仓库位置varchar100storeAddress仓库号intstoreld库位号intstore

9、LocationId3概念设计实体一属性图实体一联系图4逻辑结构设计根据上述的实体一属性图和实体一联系图,转换得到关系模式及每个关系模式的主码、 外码如下:(1)产品表(产品编号,产品名称,产品规格,产品单价,产品型号,产品产家,送货人, 库存量,库位号,入库时间)主码:产品编号(2)操作员(Id,用户名,密码,创建日期,操作员角色)主码:Id(3)仓库(id,仓库号,仓库名称,仓库位)主码:仓库号(4)出库(出库时间,出货人,出库量,产品编号,库位号)主码:产品编号,来源于: 产品表(5)sslConn表(仓库号,库位号)主码:仓库号,库位号,来源于:仓库表,库位表(6)库位表(库位号,库位

10、)主码:库位号5物理数据库设计1. 数据库设计在实际应用中,物理数据库中的数据文件和日志文件,最好不要在同一块硬盘上, 如果条件不允许,至少不能在同一个逻辑盘上。本例的数据库定义的T-SQL语句如下: create database stockon(name=stock,FILENAME = C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDATAstock.mdf, size=10MB, maxsize=500MB, filegrowth=10%) log on (name=stock_log,filename= C:Program FilesM

11、icrosoft SQL ServerMSSQL.1MSSQLDATAstock_log.ldf, size=5MB, maxsize=100MB, filegrowth=2MB)2. 数据库表的定义(1) 库位表,表名:storeLocationsCREATE TABLE storeLocations (id int, storeLoc varchar(200), PRIMARY KEY CLUSTERED (id ASC) )(2) 仓库表,表名:stores CREATE TABLE stores (id int , storeNum int, storeName varchar(200

12、), storeAddress varchar(100), PRIMARY KEY CLUSTERED (id ASC) )(3) 操作员表,表名:Admin CREATE TABLE Admin(id int , name varchar(20), password varchar(15), createTime datetime, role varchar(20), PRIMARY KEY CLUSTERED (id ASC) )-在Admin表里边添加超级管理员admin insert into admin(id,name,password,createtime,role) values

13、(1,admin,admin,getDate(),1)(4) 出库表,表名:outStore CREATE TABLE outStore(id int, operator varchar(200), quantity int , time datetime , storageListId int , PRIMARY KEY CLUSTERED (id ASC) )(5) 表名:sslConnCREATE TABLE sslConn( storeId int , storeLocationId int ,PRIMARY KEY CLUSTERED(storeld ASC,storeLocatio

14、nld ASC)(6) 产品表,表名 storageLists CREATE TABLE storageLists ( id int , productNum varchar(200), productName varchar(200), factory varchar(200), model varchar(200), spec varchar(200), Price float , quantity int, total int , operator varchar(50), storeTime datetime , storeLocationId int , PRIMARY KEY CL

15、USTERED (id ASC) )3. 外键约束的定义外键(FOREIGN KEY)约束用于与其他表(称为参照表)中的列(称为参照列)建立 连接。将参照表中的主键所在列或具有唯一性约束的列包含在另一个表中,这些列就构成了 另一个表的外键。当参照表中的参照列更新后,外键列也会自动更新,从而保证两个表之间 的一致性关系。(1)为出库表outStore的UstorageListId上定义夕卜键f k_outStore,参照表是storageLists,参照 列为idALTER TABLE outStore WITH CHECK ADD CONSTRAINT fk_outStore FOREIGNK

16、EY (storageListId)REFERENCES storageLists(id)(2 )为出库表sslConn的 UstoreId上定义夕卜键fk_sslConnId,参照表是stores,参照0为idALTER TABLE sslConn WITH CHECK ADD CONSTRAINT fk_sslConnId FOREIGN KEY(storeId REFERENCES stores(id)(3)为出库表sslConn的列storeLocationId上定义夕卜键fk_sslConnLocationId,参照表是 storeLocations,参照U为 idALTER TAB

17、LE sslConn WITH CHECK ADD CONSTRAINT fk_sslConnLocationId FOREIGN KEY (storeLocationId)REFERENCES storeLocations(id)(4 )为出库表storageLists 的UstoreLocationld上定义夕卜键f k_storageLists,参照表是 storeLocations,参照U为idALTER TABLE storageLists WITH CHECK ADD CONSTRAINT fk_storageLists FOREIGN KEY(storeLocationId) R

18、EFERENCES storeLocations(id)4. 存储过程的定义用户定义的存储过程用于实现用户自己所需要的实现的操作。用户定义的存储过程可以 调用数据定义语言(DDL)和数据操作语言(DML)语句,并且返回值或者对.NET Framework 公共语言运行时(CLR)方法的引用。-把下列存储过程加到stock系统数据库中 USE stock GO /* 对象: StoredProcedure dbo.killStock */ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create procedure dbo.killStock

19、 as declare s varchar(8000) select s=isnull(s,)+ kill +rtrim(spID) from stock.sysprocesses where dbid=db_id(stock) select s exec(s)6程序设计后台数据库的基本结构和系统的设定工作已经完成,下面采用Java语言以及使用MyEclispe集成开发环境Hibernate框架来编写该数据库管理系统的客户端应用程序。1创建主窗口1. 1创建项目1. 2创建系统总界面1. 3创建公共类1. 4创建用户登陆窗体2创建基本信息模块2.1入库信息管理模块2.2出库信息管理模块2.3仓

20、库管理模块3创建统计子系统模块3.1入库子系统3.2出库子系统3.3库存管理子系统4创建维护子系统模块4.1入库维护模块 4.2出库维护模块4.3库存维护模块4.4数据库维护模块4.5操作员管理模块本人主要实现统计子系统的库存管理子系统,也就是负责“3.3库存管理子系统”的设计。3.3.1库存管理子系统选择“商品统计”菜单项的下拉菜单项“库存信息统计”,将出现如图所示的窗体。 这个窗体时用来显示“查询库存信息”,对记录进行浏览、查询和删除操作。在选择“商品统计”菜单项的下拉菜单项“库存信息统计”中在cn.edu.dgut.linda.dialog 包中的文件LindaFrame.java文件,

21、对于这个菜单栏的初始化的代码如下: JMenuItem item3 = new JMenuItem(库存信息统计);menu4.add(item3);item3.addActionListener(new ActionListener() ( public void actionPerformed(ActionEvent e) ( count = new Count(); count.run(); );public static void main(String args) (new LindaFrame().setVisible(true);解析:这里采用ActionListener()方法

22、来接收操作事件的侦听器接口。对处理操作事件感兴趣 的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener方法向该组 件注册。在发生操作事件时,调用该对象的actionPerformed方法。这里是为“库存信息统 计”这个按钮进行事件监听,如果监听到事件的发生,就转向count.run()。new LindaFrame().setVisible(true):表示窗口框架的可见。在装载窗体时候,程序自动装入了所有的记录,在cn.edu.dgut.linda.count包中的count.java文件的代码如下:package cn.edu.dgut.linda.cou

23、nt;import java.sql.*;import .*;import org.eclipse.swt.*;import org.eclipse.jface.action.*;import org.eclipse.jface.viewers.*;import org.eclipse.jface.window.*;import org.eclipse.swt.widgets.*;import org.eclipse.jface.resource.*;import java.util.List;import org.eclipse.jface.dialogs.*;import org.ecli

24、pse.swt.layout.*;import org.eclipse.swt.custom.*;import org.eclipse.swt.events.*;import mon.ContentProvider;import mon.DbOperate;import mon.LabelProvider;import mon.Lists;import mon.Sort;public class Count extends ApplicationWindow (private Action exit;private Action about;private CTabFolder CTab;pr

25、ivate CTabItem Item;private Composite comp1;private Composite comp2;private Composite comp3;private Composite container;private TableViewer tv;private Table table;private Boolean a = true;private Text text1;private Text text2;private Text text3;public Count() (super(null);exit = new exitAction();abo

26、ut = new aboutAction();addMenuBar();addToolBar(SWT. FLAT); public void run() (setBlockOnOpen(true);open();Display.getCurrent().dispose();protected void configureShell(Shell shell) (super.configureShell(shell);/设置窗体大小shell.setSize(700, 500);shell.setText(统计子系统一库存信息统计); protected Control createContent

27、s(Composite parent) (Composite composite = new Composite(parent, SWT. NONE);composite.setLayout(new GridLayout(1, false);/调用自定义方法createSurface(composite);return composite;private void createSurface(Composite comp) (Composite composite = new Composite(comp, SWT.NONE);composite.setLayoutData(new GridD

28、ata(GridData. FILL_BOTH);composite.setLayout(new FillLayout();/定义分割窗SashForm sashForm = new SashForm(composite, SWT.NONE);/定义扩展栏ExpandBar expandbar = new ExpandBar(sashForm, SWT. V_SCROLL);( / /设置扩展项Item1comp1 = new Composite(expandbar, SWT. NONE);comp1.setLayoutData(new GridData(GridData.FILL_BOTH)

29、;comp1.setLayout( new GridLayout();ExpandItem item1 = new ExpandItem(expandbar, SWT. NONE);item1.setText(查询库存信息);item1.setHeight(40);item1.setControl(comp1);/定义linkLink link = new Link(comp1, SWT.NONE);GridData grid = new GridData();grid.horizontalIndent = 30;grid.verticalIndent = 10;link.setLayoutD

30、ata(grid);link.setText( 库存基本信息查询);link.addListener(SWT.Selection, new Listener() ( public void handleEvent(Event event) ( try ( tv.setInput(DbOperate.BasicInfor(); catch (SQLException e) ( ); ( /设置扩展项Item2comp2 = new Composite(expandbar, SWT. NONE);comp2.setLayoutData(new GridData(GridData.FILL_BOTH

31、); comp2.setLayout(new GridLayout(2, false); ExpandItem item2 = new ExpandItem(expandbar, SWT. NONE); item2.setText(分类查询库存信息); item2.setHeight(150); item2.setControl(comp2); final Label label1 = new Label(comp2, SWT.NONE); label1.setText(按月份查询:); GridData grid0 = new GridData(); grid0.horizontalSpan

32、 = 2; label1.setLayoutData(grid0); text1 = new Text(comp2, SWT.BORDER); GridData gridId = new GridData(); gridId.widthHint = 80; text1.setLayoutData(gridId); final Button button1 = new Button(comp2, SWT.PUSH); button1.setText(查询); button1.addSelectionListener(new SelectionAdapter() ( public void wid

33、getSelected(SelectionEvent e) ( try ( String Atr = text1.getText(); /检查文本项是否为空 if (Atr = null | Atr.equals() ( MessageDialog. openInformation (null, null, 查询失败! + n + n + 注意:文本项均不能为空! !); else (tv.setInput(DbOperate.SearchId(text1); catch (SQLException ee) ( );GridData grid1 = new GridData();gridl.h

34、orizontallndent =5;gridl.widthHint = 60;buttonl.setLayoutData(gridl);final Label label2 = new Label(comp2, SWT.NONE);label2.setText(按季度查询:);label2.setLayoutData(grid0);text2 = new Text(comp2, SWT.BORDER);text2.setLayoutData(gridId);final Button button2 = new Button(comp2, SWT.PUSH);button2.setText(查

35、询);button2.setLayoutData(grid1);button2.addSelectionListener(new SelectionAdapter() (public void widgetSelected(SelectionEvent e) ( try (String Btr = text2.getText();/检查文本项是否为空if (Btr = null | Btr.equals() (MessageDialog. openinformation (null, null, 查询失败! + n + n + 注意:文本项不能为空! !); else (tv.setInput

36、(DbOperate.SearchName(text2 ); catch (SQLException ee) ( );final Label label3 = new Label(comp2, SWT.NONE);label3.setText(按年份查询:);label3.setLayoutData(grid0);text3 = new Text(comp2, SWT.BORDER);text3.setLayoutData(gridId);final Button button3 = new Button(comp2, SWT.PUSH);button3.setText(查询);button3

37、.setLayoutData(grid1);button3.addSelectionListener(new SelectionAdapter() (public void widgetSelected(SelectionEvent e) ( try (String Ctr = text3.getText();/ 检查文本项是否为空if (Ctr = null | Ctr.equals() (MessageDialog. openinformation (null, null, 查询失败! + n + n + 注意:文本项不能为空! !); else (tv.setInput(DbOperat

38、e.SearchSex(text3); catch (SQLException ee) ();(/设置扩展项Item3comp3 = new Composite(expandbar, SWT. NONE);comp3.setLayoutData(new GridData(GridData.FILL_BOTH);comp3.setLayout(new GridLayout(2, false);ExpandItem item3 = new ExpandItem(expandbar, SWT. NONE);item3.setText(查询说明);item3.setHeight(100);item3.

39、setControl(comp3);container = new Composite(sashForm, SWT. NONE);container.setLayoutData(new GridData(GridData. FILL_BOTH);container.setLayout(new GridLayout();sashForm.setWeights(new int ( 2, 8 );(CTab = new CTabFolder(container, SWT.BORDER);/ 定义CTabItem对象Item1CTab.setLayoutData(new GridData(GridDa

40、ta.FILL, GridData.FILL, true, false);CTab.setSimple(false);Item = new CTabItem(CTab, SWT.NONE, 0);Item .setText( 商品信息);/设置最小化,最大化标签可见CTab.setSelection(Item);CTab.setMinimizeVisible(true);CTab.setMaximizeVisible(true);CTab.setMaximized(true);/设置选项卡的最小化,最大化和恢复功能。CTab.addCTabFolder2Listener(new CTabFol

41、der2Adapter() (/使选项卡最小化public void minimize(CTabFolderEvent event) ( CTab.setMinimized(true);container.layout(true);/是选项卡最大化public void maximize(CTabFolderEvent event) (CTab.setMaximized(true);CTab.setLayoutData(new GridData(GridData.FILL_BOTH); container.layout(true);/ 是选项卡恢复public void restore(CTa

42、bFolderEvent event) ( CTab.setMinimized(false);CTab.setMaximized(false);CTab.setLayoutData(new GridData(GridData. FILL, GridData. FILL, true, false);container.layout(true); );/调用自定义方法 createTableViewer(CTab);/设置内容提供器 tv.setContentProvider(new ContentProvider();/设置标签提供器 tv.setLabelProvider(new LabelP

43、rovider();/设置排序器 tv.setSorter(new Sort();private void createTableViewer(CTabFolder ctabFolder) ( /定义一个TableViewer对象,样式为:可以整行被选择 tv = new TableViewer(ctabFolder, SWT. FULL_SELECTION); / 设置Table table = tv.getTable();Item.setControl(table);table.setLayoutData(new GridData(GridData. FILL_BOTH); /定义表中的列

44、TableColumn Col1 = new TableColumn(table, SWT.LEFT); Col1.setText(商品编号);Col1.addSelectionListener(new SelectionAdapter() ( public void widgetSelected(SelectionEvent event) ( a = ! a; (Sort) tv.getSorter().doSort(a ? -1 : 1); tv.refresh(););/设置列宽度Col1.setWidth(70);TableColumn Col2 = new TableColumn(t

45、able, SWT.LEFT); Col2.setText(商品名称);Col2.setWidth(80);Col2.addSelectionListener(new SelectionAdapter() ( public void widgetSelected(SelectionEvent event) ( a = !a; (Sort) tv.getSorter().doSort(a ? -2 : 2); tv.refresh(););TableColumn Col3 = new TableColumn(table, SWT.LEFT);Col3.setText(型号”);Col3.setWidth(50);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号