物资管理系统
发布时间:2020-04-03 11:50:24
发布时间:2020-04-03 11:50:24
《JAVA程序设计》
课程设计报告
设计题目: 物资管理系统设计与实现
学院名称: 信息工程学院
专业班级:
姓 名:
学 号: 13122102
一 需求分析 2
二 概要设计 2
2.1 概要设计的原则 2
2.2 将用户需求模块化 3
2.3 确定系统最终模块 3
2.4 UML用例图 3
2.5 模块设计 4
三 详细设计 5
3.1 数据库设计 5
3.2 模块及窗体设计 6
3.2.1 数据库模块设计 6
本系统的主要目的就是对物资管理的快捷管理以及对数据信息的显示,存放的日期显示所有者等。
概要设计阶段主要是粗略描述整个软件的框架,并从业务的角度描述软件的模块、工作流程等。项目的成功取决于设计的好坏,而概要设计则是整个设计的关键部分。概要设计的主要任务是将用户的需求划分为不同的功能,然后将这些功能细分成模块,并给模块一些规则约束,以达到各个模块之间可以相互交流的目的。概要设计关乎到系统的整体架构,因此想做好一个概要设计,不仅仅要熟悉用户的业务流程,还要具备相当丰富的设计经验。
2.1 概要设计的原则
概要设计是根据系统分析的需求和工作环境的情况对整个软件的总体结构进行大致的设计。概要设计要坚持以下几个原则。
(1)细分原则:软件系统都是由很多不同的模块组成,当设计一套软件时,要先将所有的功能分解。解决复杂问题的方法是将其分解成几个小问题,一个个来解决。
(2)提高代码重用性:在面向对象设计中,首先考虑的就是代码的重用,一个好的设计,将来在升级换代时不需要太大的改动,节省了人力物力。
(3)从上而下层层分析:概要设计要从整体出发,逐个剖析软件的功能,从上而下,先分析系统总的功能,然后一步步细分,直到最小的功能模块。
(4)一致性原则:概要设计要求所有功能模块在定义时使用统一的规范。
(5)提高独立性,减少耦合:各个模块与模块之间尽量减少关联,否则修改一个地方就会引起其他多处的变动,不符合面向对象的原则。一般情况下,对类封装后,只允许对类进行扩展,而不能修改,而封装的类必须具有单一职责,既理论情况下不允许两个类共同完成一个功能。
(6)模块的大小要尽量适中:不是结构算法越复杂的模块越好,模块的大小要根据实际工作目标和其他类的耦合紧密程度来决定。经验表明,一个模块的规模不应过大,模块的总行数应控制在10~100行的范围内,最好为30~60行,这样理解和阅读都较方便。过长的模块往往是分解不充分的表现,会增加阅读理解的难度;但小规模太多也会使模块之间联系变得复杂,增大系统在模块调用时传递信息所花费的开销。
由于概要设计是整个设计的重中之重,牵一发而动全身,所以要努力做一个好的概要设计,才能在今后软件开发过程中不再反复。现在软件行业流行模式化驱动设计,将一些市场上比较成功的模式拿来用在自己的设计中。
2.2 将用户需求模块化
根据概要设计的原则来分析一下本项目的用户需求,并最终转化成用程序语言描述的模块。什么样的需求才是一个模块?模块应该具备如下3个特征。
(1)输入和输出:模块必须能被调用并且正确的返回调用,而且调用都是相对一个对象而言,这是模块独立性的一个体现。
(2)处理功能:模块必须可以对调用的输入数据进行灵活的处理,并为输出准备好处理结果。
(3)程序代码:用来实现模块功能的源代码。
2.3 确定系统最终模块
概要设计中最重要的就是确定此项目包括哪些模块。根据上两节讲述的设计原则和模块特征,将用户需求转化为下面的模块。
**************************************************************************/
2.4 UML用例图
1 用户登录信息管理
2 用户信息管理
2.5 模块设计
1) 物资信息的添加、修改、删除;
2) 物资信息的查询;
3) 用户的添加、查询、修改;
4) 数据存储数据库中;
3.1 数据库设计
数据库名称:obj
表adm:存放登陆用户的用户名和密码
表wuliu:
管理员(adm)
物资信息表(wuliu)
3.2 模块及窗体设计
3.2.1 数据库模块设计
将数据库的连接包装在一个connect类中,以便其他模块能够轻松调用,避免每次重写数据库连接代码。
代码如下:
public class connect {
private Connection connection;
public connect() {
}
public Connection sql() {
String url = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=obj";
String username = "ma";
String password = "123456";
// Connection ct=null;
// 加载驱动程序以连接数据库
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection = DriverManager.getConnection(url, username, password);
}
// 捕获加载驱动程序异常
catch (Exception e) {
System.err.println("装载 JDBC/ODBC 驱动程序失败。");
e.printStackTrace();
System.exit(1); // terminate program
}
return connection;
}
public void closeAll(Connection conn, Statement stat, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
}
}
}
}
3.2.2 数据的查询删除功能的封装在Mode和Stable类中
代码如下:
public class Mode {
private Connection connection; // 连接信息定义
private Statement statement;
private ResultSet resultSet;
public SQLException zeng(String a){
SQLException s = null;
String query=a;
try {
connect t = new connect();
connection=t.sql();
statement=connection.createStatement();
statement.executeUpdate(query);
t.closeAll(connection, statement, resultSet);
} catch (SQLException e) {
s=e;
}
return s;
}
public SQLException change(String a){
SQLException s = null;
String query=a;
connect t = new connect();
connection=t.sql();
try {
statement=connection.createStatement();
statement.executeUpdate(query);
} catch (SQLException e) {
s=e;
}
return s;
}
public SQLException dele(String a){
SQLException s=null;
String query=a;
connect t = new connect();
connection=t.sql();
try {
statement=connection.createStatement();
statement.executeUpdate(query);
t.closeAll(connection, statement, resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
s=e;
}
return s;
}
}
Stable类的代码如下:
public class Stable {
private Connection connection; // 连接信息定义
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData rsMetaData;
connect t = new connect();
public Stable() {
}
public Vector getable(String a) {
Vector re=new Vector();
connection= t.sql();//封装起来的函数
try {
// 执行SQL语句
String query = a;
statement = connection.createStatement();//创建一个 Statement 对象来将 SQL 语句发送到数据库
resultSet = statement.executeQuery(query);//数据库表的结果集 返回resultset
// 在表格中显示查询结果
re=displayResultSet(resultSet);//****************调用查找表的函数
t.closeAll(connection, statement, resultSet);
} catch (SQLException sqlex) {
sqlex.printStackTrace();
}
return re;
}
private Vector displayResultSet(ResultSet rs) throws SQLException {
// 定位到达第一条记录 此时查询结果已经返回到了结果集中
boolean moreRecords = rs.next();
// 如果没有记录,则提示一条消息
Vector re=new Vector();
Vector columnHeads = new Vector();// 列 向量类 对象
Vector rows = new Vector();
// 在数据库查询的时候是以一行一行查询,带在同一行是是以列查询的拼成一行。
try {
// 获取字段的名称
ResultSetMetaData rsmd = rs.getMetaData();//获取此 ResultSet 对象的列的编号、类型和属性。
for (int i = 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);
return re;
//****************************************
} catch (SQLException sqlex) {
sqlex.printStackTrace();
}
return rows;
}
private Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd)
throws SQLException {
Vector currentRow = new Vector();// 行
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
currentRow.addElement(rs.getString(i));
// 返回一条记录
return currentRow;
}
}
3.2.3 用户登录识别模块
代码封装在类Land里,所用到的信息保存在表adm里
下表是他的基本属性
判断用户名和密码是否正确的成员方法代码:
public class J1 extends JFrame {
JLabel J0 = new JLabel("物流管理系统", JLabel.CENTER);
JLabel J1 = new JLabel("账户:");
JTextField t1 = new JTextField(10);
JLabel J2 = new JLabel("密码:");
JPasswordField t2 = new JPasswordField(10);
JButton JB0 = new JButton("登陆");
JButton JB1 = new JButton("重填");
JPanel p[] = new JPanel[4];
JPanel top = new JPanel();
//数据库变量
private Connection connection;
private Statement statement;
private ResultSet resultSet;
connect t = new connect();
J1() {
connection= t.sql(); //封装函数
//*******************************************************************************************
// new connect();//连接数据库
this.setTitle("物流管理系统");
this.setSize(500, 400);
this.setLocationRelativeTo(null);// 设置窗口启动位置
this.setVisible(true);
this.setLayout(new GridLayout(6, 1));// 网格布局
Container con = this.getContentPane(); // 返回一个conterPanel的对象
for (int i = 0; i < 4; i++) {