物资管理系统Word格式.docx
- 文档编号:18051049
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:46
- 大小:328.16KB
物资管理系统Word格式.docx
《物资管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《物资管理系统Word格式.docx(46页珍藏版)》请在冰豆网上搜索。
解决复杂问题的方法是将其分解成几个小问题,一个个来解决。
(2)提高代码重用性:
在面向对象设计中,首先考虑的就是代码的重用,一个好的设计,将来在升级换代时不需要太大的改动,节省了人力物力。
(3)从上而下层层分析:
概要设计要从整体出发,逐个剖析软件的功能,从上而下,先分析系统总的功能,然后一步步细分,直到最小的功能模块。
(4)一致性原则:
概要设计要求所有功能模块在定义时使用统一的规范。
(5)提高独立性,减少耦合:
各个模块与模块之间尽量减少关联,否则修改一个地方就会引起其他多处的变动,不符合面向对象的原则。
一般情况下,对类封装后,只允许对类进行扩展,而不能修改,而封装的类必须具有单一职责,既理论情况下不允许两个类共同完成一个功能。
(6)模块的大小要尽量适中:
不是结构算法越复杂的模块越好,模块的大小要根据实际工作目标和其他类的耦合紧密程度来决定。
经验表明,一个模块的规模不应过大,模块的总行数应控制在10~100行的范围内,最好为30~60行,这样理解和阅读都较方便。
过长的模块往往是分解不充分的表现,会增加阅读理解的难度;
但小规模太多也会使模块之间联系变得复杂,增大系统在模块调用时传递信息所花费的开销。
由于概要设计是整个设计的重中之重,牵一发而动全身,所以要努力做一个好的概要设计,才能在今后软件开发过程中不再反复。
现在软件行业流行模式化驱动设计,将一些市场上比较成功的模式拿来用在自己的设计中。
2.2将用户需求模块化
根据概要设计的原则来分析一下本项目的用户需求,并最终转化成用程序语言描述的模块。
什么样的需求才是一个模块?
模块应该具备如下3个特征。
(1)输入和输出:
模块必须能被调用并且正确的返回调用,而且调用都是相对一个对象而言,这是模块独立性的一个体现。
(2)处理功能:
模块必须可以对调用的输入数据进行灵活的处理,并为输出准备好处理结果。
(3)程序代码:
用来实现模块功能的源代码。
2.3确定系统最终模块
概要设计中最重要的就是确定此项目包括哪些模块。
根据上两节讲述的设计原则和模块特征,将用户需求转化为下面的模块。
**************************************************************************/
2.4UML用例图
1用户登录信息管理
2用户信息管理
2.5模块设计
1)物资信息的添加、修改、删除;
2)物资信息的查询;
3)用户的添加、查询、修改;
4)数据存储数据库中;
三详细设计
3.1数据库设计
数据库名称:
obj
表adm:
存放登陆用户的用户名和密码
表wuliu:
管理员(adm)
字段名
类型
备注
Yid
Varchar(30)
员工id
Yname
Nvarchar(50)
员工姓名
Ysex
Nchar
(1)
性别
'
男'
或者'
女'
Yage
int
年龄
>
Ym
员工密码
物资信息表(wuliu)
物资的名称字段名
类型·
OleiNvchar(20)
Oname
Nvchar(20)
物资的类别
Bid
Date
存放日期
Oid
物资的id
Os
存放者
3.2模块及窗体设计
3.2.1数据库模块设计
将数据库的连接包装在一个connect类中,以便其他模块能够轻松调用,避免每次重写数据库连接代码。
代码如下:
publicclassconnect{
privateConnectionconnection;
publicconnect(){
}
publicConnectionsql(){
Stringurl="
jdbc:
sqlserver:
//127.0.0.1:
1433;
DatabaseName=obj"
;
Stringusername="
ma"
Stringpassword="
123456"
//Connectionct=null;
//加载驱动程序以连接数据库
try{
Class.forName("
com.microsoft.sqlserver.jdbc.SQLServerDriver"
);
connection=DriverManager.getConnection(url,username,password);
}
//捕获加载驱动程序异常
catch(Exceptione){
System.err.println("
装载JDBC/ODBC驱动程序失败。
"
e.printStackTrace();
System.exit
(1);
//terminateprogram
returnconnection;
publicvoidcloseAll(Connectionconn,Statementstat,ResultSetrs){
if(rs!
=null){
try{
rs.close();
}catch(SQLExceptione){
//TODO:
handleexception
e.printStackTrace();
}finally{
if(stat!
try{
stat.close();
}catch(SQLExceptione){
//TODO:
e.printStackTrace();
}finally{
if(conn!
try{
conn.close();
}catch(SQLExceptione){
//TODO:
e.printStackTrace();
}
}
}
}
}
}
3.2.2数据的查询删除功能的封装在Mode和Stable类中
publicclassMode{
//连接信息定义
privateStatementstatement;
privateResultSetresultSet;
publicSQLExceptionzeng(Stringa){
SQLExceptions=null;
Stringquery=a;
connectt=newconnect();
connection=t.sql();
statement=connection.createStatement();
statement.executeUpdate(query);
t.closeAll(connection,statement,resultSet);
}catch(SQLExceptione){
s=e;
returns;
publicSQLExceptionchange(Stringa){
connectt=newconnect();
connection=t.sql();
publicSQLExceptiondele(Stringa){
SQLExceptions=null;
//TODOAuto-generatedcatchblock
Stable类的代码如下:
publicclassStable{
privateResultSetMetaDatarsMetaData;
connectt=newconnect();
publicStable(){
}
publicVectorgetable(Stringa){
Vectorre=newVector();
connection=t.sql();
//封装起来的函数
//执行SQL语句
Stringquery=a;
statement=connection.createStatement();
//创建一个Statement对象来将SQL语句发送到数据库
resultSet=statement.executeQuery(query);
//数据库表的结果集返回resultset
//在表格中显示查询结果
re=displayResultSet(resultSet);
//****************调用查找表的函数
}catch(SQLExceptionsqlex){
sqlex.printStackTrace();
returnre;
privateVectordisplayResultSet(ResultSetrs)throwsSQLException{
//定位到达第一条记录此时查询结果已经返回到了结果集中
booleanmoreRecords=rs.next();
//如果没有记录,则提示一条消息
VectorcolumnHeads=newVector();
//列向量类对象
Vectorrows=newVector();
//在数据库查询的时候是以一行一行查询,带在同一行是是以列查询的拼成一行。
//获取字段的名称
ResultSetMetaDatarsmd=rs.getMetaData();
//获取此ResultSet对象的列的编号、类型和属性。
for(inti=1;
i<
=rsmd.getColumnCount();
++i)
columnHeads.addElement(rsmd.getColumnName(i));
//获取记录集
do{
rows.addElement(getNextRow(rs,rsmd));
//调用函数
}while(rs.next());
re.addElement(rows);
re.addElement(columnHeads);
returnre;
//****************************************
returnrows;
privateVectorgetNextRow(ResultSetrs,ResultSetMetaDatarsmd)
throwsSQLException{
VectorcurrentRow=newVector();
//行
for(inti=1;
currentRow.addElement(rs.getString(i));
//返回一条记录
returncurrentRow;
3.2.3用户登录识别模块
代码封装在类Land里,所用到的信息保存在表adm里
下表是他的基本属性
判断用户名和密码是否正确的成员方法代码:
publicclassJ1extendsJFrame{
JLabelJ0=newJLabel("
物流管理系统"
JLabel.CENTER);
JLabelJ1=newJLabel("
账户:
JTextFieldt1=newJTextField(10);
JLabelJ2=newJLabel("
密码:
JPasswordFieldt2=newJPasswordField(10);
JButtonJB0=newJButton("
登陆"
JButtonJB1=newJButton("
重填"
JPanelp[]=newJPanel[4];
JPaneltop=newJPanel();
//数据库变量
J1(){
//封装函数
//*******************************************************************************************
//newconnect();
//连接数据库
this.setTitle("
this.setSize(500,400);
this.setLocationRelativeTo(null);
//设置窗口启动位置
this.setVisible(true);
this.setLayout(newGridLayout(6,1));
//网格布局
Containercon=this.getContentPane();
//返回一个conterPanel的对象
for(inti=0;
4;
i++){
p[i]=newJPanel();
con.add(p[i]);
J0.setFont(newFont("
宋体"
Font.BOLD,20));
p[0].add(J0);
J0.setBounds(15,15,50,20);
p[1].add(J1);
J1.setBounds(15,20,50,20);
p[1].add(t1);
t1.setBounds(80,20,120,20);
p[2].add(J2);
J2.setBounds(15,30,50,20);
p[2].add(t2);
t2.setBounds(80,30,120,20);
p[3].add(JB0);
JB0.setBounds(20,40,80,20);
p[3].add(JB1);
JB1.setBounds(140,40,80,20);
//事件监听
JB0.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
//获取文本框的数据
Stringa=t1.getText();
@SuppressWarnings("
deprecation"
)
Stringb=t2.getText();
getDate(a,b);
});
JB1.addActionListener(newActionListener(){
t1.setText("
t2.setText("
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit
(1);
privatevoidgetDate(Stringa,Stringb){
Stringquery="
select*fromadmwhereYname='
+a+"
andYpassword="
+b;
//拼接查询语句
//System.out.print(query);
测试拼接语
ResultSetrs=resultSet;
//返回相应的对象
booleanmoreRecords=rs.next();
//查询标志
//如果没有记录,则提示一条消息
if(!
moreRecords){
JOptionPane.showMessageDialog(this,"
没有该账户"
setTitle("
登陆错误"
return;
}else{
newzhu();
JOptionPane.showMessageDialog(this,"
setTitle("
return;
publicstaticvoidmain(Stringargs[]){
newJ1();
3.2.4用户信息管理模块
(1)用户增加
用户名将自动从表adm里检索出来,供用户选择
以下是它的基本属性
packagecn.GUI;
publicclassadminsertextendsJFrame{
privateJLabelbiaoti;
privateJLabelOid;
privateJLabelCunfang;
privateJLabelleibie;
privateJLabelmingcheng;
privateJTextFieldTOid;
privateJTextFieldTCunfang;
privateJTextFieldTleibie;
privateJTextFieldTmingcheng;
privateJButtonadd;
privateJButtoncho;
privateContainercon;
adminsert(){
//TODOAuto-generatedconstructorstub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 物资 管理 系统