已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题目二:库存物资管理(10人)1、背景资料: 有一个存放商品的仓库,每天都有商品出库和入库。 每种商品都有商品编号、商品名称、生产厂家、型号、规格等。 入库时必须填写入库单据,单据包括商品名称、生产厂家、型号、规格、入库数量、入库日期、入库仓库号、入库仓库名称、送货人姓名。 出库时必须填写出库单据,单据包括仓库号、仓库名称、商品编号、商品名称、型号、规格、出库数量、出库日期、提货人姓名。 设置商品库存台帐,商品库存台帐是对仓库中目前库存的所有商品的明细记录,商品库存台帐包括商品编号、商品名称、型号、规格、库存数量、库存日期。每当有商品入库或商品出库时都应该自动修改该台帐,最后一次修改的是现在的库存情况。2、设计要求: 进行需求分析,编写数据字典。 设计完整的E-R图。 进行数据库的逻辑设计。 完成物理数据库的设计,包括数据库、表、索引、视图、完整性约束的物理设计。 按C/S结构用某种语言开发具有下述功能要求的应用程序。3、系统功能要求: 商品入库管理子系统。至少包括:商品入库数据的录入(当商品入库时用触发器修改商品库存台帐,以保证库存数据的准确、一致)、商品入库数据的注销(当商品入库时数据录入错误时不能删除,只能注销,同时用触发器恢复该商品的原有的商品库存台帐,然后再进行新的商品入库数据的录入)、商品入库数据查询(尽可能多的查询方式)、商品入库数据的注销查询(尽可能多的查询方式)。 商品出库管理子系统。至少包括:商品出库数据的录入(当商品出库时用触发器修改该商品的商品库存台帐,以保证库存数据的准确、一致)、商品出库数据的注销(当商品出库时数据录入错误时不能删除,只能注销,同时用触发器恢复该商品的原有的商品库存台帐,然后再进行新的商品出库数据的录入)、商品出库数据查询(尽可能多的查询方式)、商品出库数据的注销查询(尽可能多的查询方式)。 商品统计子系统。至少包括:按不同的时间段(月、季、年)统计各种商品的出库、入库、库存数据。 系统维护子系统。至少包括:操作者权限的设置、取消和更改;数据库数据的导入和导出;数据库的备份扥功能。4、组员系统分工:本系统分工是根据系统的功能来进行分工,分工如下:(总人数:10人)入库管理:李洋出库管理:伍桂锋仓库管理:苏琦 入库子系统:杨远奋统计子系统 出库子系统:郭淼圭 库存子系统:梁永娟 导入 数据维护 导出 维护子系统 何飞鸿、曾华、温礼平数据库管理 备份 恢复 操作员管理:李通1 系统开发中数据库命名规范为了规范虚拟公司开发部的数据库设计过程,特制订本规范。本规范从数据库的设计原则、设计文档几方面规定了数据库设计的规范思想及命名规则。1. 数据库涉及字符规范约定:采用26个英文字母(区分大小写)和09这十个自然数,加上下划线_组成,共63个字符。不能出现其他字符(注释除外)。2. 数据库对象命名规范约定,数据库对象包括表、视图(查询)、存储过程(参数查询)、函数、约束。对象名字由前缀和实际名字组成,长度不超过30。前缀:使用字母开头实际名字:实际名字尽量描述实体的内容,由单词或单词组合,每个单词的首字母大写,其他字母小写,不以数字和_开头。如:表:Admin; 存储过程:killStock因此,合法的对象名字类似:表:Ledger,outStore 3. 数据库表命名规范约定,表名由前缀和实际名字组成。前缀:使用字母,代表表。实际名字中,一个系统尽量采取同一单词,两个单词直接连接区分,第二个单词的第一个字母为大写。因此,合法的表名类似:Admin,Ledger,outStore,sslConn,storageLists,storeLocations,stores。4.字段命名规范约定,字段由表的简称,实际名字组组成。如果此字段关联另外的字段,那么两个单词连接关联表字段的字段名,第二个单词的第一个字母为大写。因此,合法的字段名类似:id,productName,storeLoc,createTime。5.存储过程命名规范约定,字段由前缀和实际名字加操作名字组成,中间用下划线连接。前缀:使用小写字母开头,表示存储过程。因此,合法的存储过程名为:killStock6.外键命名规范约定,字段由前缀和实际名字加操作名字组成,中间用下划线连接。前缀:使用小写字母fk_开头,表示存储过程。因此,合法的存储过程名为:fk_outStore2 需求分析 数据字典 以简单表格的方式列出(实际并不规范)数据项名数据类型宽度,小数位数取值范围或格式拟用字段名产品编号varchar200productNum产品名称varchar200productName产品规格varchar200spec产品单价float大于0并且是数字类型Price产品型号varchar200model产品产家varchar200factory产品总库存量int不能小于0并且是数字类型total送货人varchar50operator产品库存量int不能小于0并且是数字类型quantity入库时间datetimestoreTime库位号intstoreLocationId出仓时间datetimetime 出货人varchar200operator库位号intstoreLocationId出库量int出库量=总库量并且不能小于0并且是数字类型quantity操作员编号intid操作员名称varchar20name密码varchar15password创建时间DateTimecreatetime操作员角色varchar20取值范围为1,2,3role仓库名varchar200storeName仓库号int storeNum仓库位置varchar100storeAddress仓库号intstoreId库位号intstoreLocationId3 概念设计 实体属性图 实体联系图 4 逻辑结构设计根据上述的实体属性图和实体联系图,转换得到关系模式及每个关系模式的主码、外码如下:(1) 产品表( 产品编号,产品名称,产品规格,产品单价,产品型号,产品产家,送货人,库存量,库位号,入库时间)主码:产品编号(2) 操作员(Id,用户名,密码,创建日期,操作员角色) 主码:Id(3) 仓库(id,仓库号,仓库名称,仓库位)主码:仓库号(4) 出库(出库时间,出货人,出库量,产品编号,库位号)主码:产品编号,来源于:产品表(5) sslConn表(仓库号,库位号)主码:仓库号,库位号,来源于:仓库表,库位表(6) 库位表(库位号,库位)主码:库位号5 物理数据库设计 数据库设计在实际应用中,物理数据库中的数据文件和日志文件,最好不要在同一块硬盘上,如果条件不允许,至少不能在同一个逻辑盘上。本例的数据库定义的TSQL语句如下: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 FilesMicrosoft SQL ServerMSSQL.1MSSQLDATAstock_log.ldf,size=5MB,maxsize=100MB,filegrowth=2MB) 数据库表的定义(1)库位表,表名:storeLocationsCREATE TABLE storeLocations ( id int, storeLoc varchar(200),PRIMARY KEY CLUSTERED (id ASC)(2)仓库表,表名:storesCREATE TABLE stores(id int ,storeNum int,storeName varchar(200),storeAddress varchar(100),PRIMARY KEY CLUSTERED (id ASC)(3)操作员表,表名:AdminCREATE TABLE Admin( id int ,name varchar(20),password varchar(15),createTime datetime,role varchar(20),PRIMARY KEY CLUSTERED (id ASC) -在Admin表里边添加超级管理员admininsert into admin(id,name,password,createtime,role) values(1,admin,admin,getDate(),1)(4)出库表,表名:outStoreCREATE 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 ( storeId ASC, storeLocationId ASC)(6)产品表,表名storageListsCREATE 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 CLUSTERED ( id ASC) 外键约束的定义 外键(FOREIGN KEY)约束用于与其他表(称为参照表)中的列(称为参照列)建立连接。将参照表中的主键所在列或具有唯一性约束的列包含在另一个表中,这些列就构成了另一个表的外键。当参照表中的参照列更新后,外键列也会自动更新,从而保证两个表之间的一致性关系。(1)为出库表outStore的列storageListId上定义外键fk_outStore,参照表是storageLists,参照列为idALTER TABLE outStore WITH CHECK ADD CONSTRAINT fk_outStore FOREIGN KEY(storageListId)REFERENCES storageLists(id)(2)为出库表sslConn的列storeId上定义外键fk_sslConnId,参照表是stores,参照列为idALTER TABLE sslConn WITH CHECK ADD CONSTRAINT fk_sslConnId FOREIGN KEY(storeId)REFERENCES stores(id)(3)为出库表sslConn的列storeLocationId上定义外键fk_sslConnLocationId,参照表是storeLocations,参照列为idALTER TABLE sslConn WITH CHECK ADD CONSTRAINT fk_sslConnLocationId FOREIGN KEY(storeLocationId)REFERENCES storeLocations(id)(4)为出库表storageLists的列storeLocationId上定义外键fk_storageLists,参照表是storeLocations,参照列为idALTER TABLE storageLists WITH CHECK ADD CONSTRAINT fk_storageLists FOREIGN KEY(storeLocationId)REFERENCES storeLocations(id)4. 存储过程的定义 用户定义的存储过程用于实现用户自己所需要的实现的操作。用户定义的存储过程可以调用数据定义语言(DDL)和数据操作语言(DML)语句,并且返回值或者对 . NET Framework 公共语言运行时(CLR)方法的引用。-把下列存储过程加到stock系统数据库中USE stockGO/* 对象: StoredProcedure dbo.killStock */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOcreate procedure dbo.killStockasdeclare s varchar(8000)select s=isnull(s,)+ kill +rtrim(spID) from stock.sysprocesses where dbid=db_id(stock)select sexec(s)6 程序设计后台数据库的基本结构和系统的设定工作已经完成,下面采用Java语言以及使用MyEclispe集成开发环境Hibernate框架来编写该数据库管理系统的客户端应用程序。1 创建主窗口11创建项目12 创建系统总界面13创建公共类14 创建用户登陆窗体2创建基本信息模块2.1 入库信息管理模块2.2 出库信息管理模块2.3 仓库管理模块3 创建统计子系统模块3.1 入库子系统3.2 出库子系统3.3 库存管理子系统4 创建维护子系统模块4.1 入库维护模块4.2 出库维护模块4.3 库存维护模块4.4 数据库维护模块4.5 操作员管理模块本人主要实现统计子系统的库存管理子系统,也就是负责“3.3 库存管理子系统”的设计。3.3.1 库存管理子系统选择“商品统计”菜单项的下拉菜单项“库存信息统计”,将出现如图所示的窗体。这个窗体时用来显示“查询库存信息”,对记录进行浏览、查询和删除操作。在选择“商品统计”菜单项的下拉菜单项“库存信息统计”中在.dgut.linda.dialog 包中的文件LindaFrame.java文件,对于这个菜单栏的初始化的代码如下: 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()方法来接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。这里是为“库存信息统计”这个按钮进行事件监听,如果监听到事件的发生,就转向count.run()。new LindaFrame().setVisible(true):表示窗口框架的可见。在装载窗体时候,程序自动装入了所有的记录,在.dgut.linda.count包中的count.java文件的代码如下:package .dgut.linda.count;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.eclipse.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;private 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();about = 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 createContents(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 GridData(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);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.setLayoutData(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);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 = 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 widgetSelected(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();grid1.horizontalIndent =5;grid1.widthHint = 60;button1.setLayoutData(grid1);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(查询);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(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.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(DbOperate.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.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(GridData.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 CTabFolder2Adapter() / 使选项卡最小化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(CTabFolderEvent 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 LabelProvider();/ 设置排序器tv.setSorter(new Sort();private void createTableViewer(CTabFolder ctabFolder) / 定义一个TableViewer对象,样式为:可以整行被选择tv = new TableViewer(ctabFolder, SWT.FULL_SELECTION);/ 设置Tabletable = tv.getTable();Item.setControl(table);table.setLayoutData(new GridData(GridData.FILL_BOTH);/ 定义表中的列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(table, 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);Col3.addSelectionListener(new SelectionAdapter() public void widgetSelected(SelectionEvent event) a = !a;(Sort) tv.getSorter().doSort(a ? -3 : 3);tv.refresh(););TableColumn Col4 = new TableColumn(table, SWT.LEFT);Col4.setText(规格);Col4.setWidth(50);Col4.addSelectionListener(new SelectionAdapter() public void widgetSelected(SelectionEvent event) a = !a;(Sort) tv.getSorter().doSort(a ? -4 : 4);tv.refresh(););TableColumn Col5 = new TableColumn(table, SWT.LEFT);Col5.setText(库存数量);Col5.setWidth(100);Col5.addSelectionListener(new SelectionAdapter() public void widgetSelected(SelectionEvent event) a = !a;(Sort) tv.getSorter().doSort(a ? -5 : 5);tv.refresh(););TableColumn Col6 = new TableColumn(table, SWT.LEFT);Col6.setText(库存日期);Col6.setWidth(128);Col6.addSelectionListener(new SelectionAdapter() public void widgetSelected(SelectionEvent event) a = !a;(Sort) tv.getSorter().doSort(a ? -6 : 6);tv.refresh(););/ 显示表头table.setHeaderVisible(true);/ 显示表格线table.setLinesVisible(true);/ 设置菜单protected MenuManager createMenuManager() MenuManager menuBar = new MenuManager();MenuManager fileMenu = new MenuManager(文件(&F);MenuManager helpMenu = new MenuManager(帮助(&H);fileMenu.add(exit);helpMenu.add(about);menuBar.add(fileMenu);menuBar.add(helpMenu);return menuBar;/ 设置工具栏protected ToolBarManager createToolBarManager(int style) ToolBarManager toolBarManager = new ToolBarManager(style);/ 通过Action动作来设置工具栏按钮相应的功能toolBarManager.add(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨科慢性病患者的中医护理管理
- 2026 增肌期饮品选择技巧课件
- 2026 增肌期豆类应用深化课件
- 2024年高校设备运输合同三篇
- 阴疮创面处理原则
- 2026 塑型进阶鱼豆腐课件
- 2026 塑型维持期肉片课件
- 葡萄膜炎的护理与康复
- 肿瘤化疗患者的光照疗法应用
- 食道癌术后护理与康复指导
- 城市轨道交通供电系统运行与维护课件:动力照明配电系统
- 2026年宝鸡市辛家山马头滩林业局招聘(12人)笔试备考题库及答案详解
- 检验检测机构资质认定生态环境监测机构评审补充要求(2025年)条文释义
- 市政道路工程路基施工专项方案
- 中科曙光入职测试答案
- 对外投资合作国别(地区)指南 2025 -卡塔尔
- 重复医学检查检验工作制度
- GA 991-2025爆破作业项目管理要求
- 2026年学习教育查摆问题清单及整改措施台账(四个方面16条)
- 2025年四川省成都市小升初语文试卷
- 2025 小学高年级写作竞争合作主题的探讨课件
评论
0/150
提交评论