资源描述
长 沙 学 院
课程设计说明书
题目
服装库存管理系统
系(部)
计算机科学与技术系
专业(班级)
2010软件工程(服务外包)1班
姓名
曾祥炫
学号
2010022111
指导教师
潘怡
起止日期
2012.3.12 — 2012.7.6
课程设计任务书
课程名称:基础编程能力考核
设计题目:服装库存管理系统
已知技术参数和设计要求:
1. 问题描述(功能要求):
服装库存管理系统主要包括:
(1) 系统管理
系统管理包括用户管理和货号管理,能进行增加、删除、修改和查找的操作。
(2) 库存管理
库存管理包括入库单管理和出库单管理。入库单管理包括入库单基本信息管理和入库单明细管理,并能分别对入库单和入库单明细进行增加、删除、修改和查找的操作。出库单管理包括出库单基本信息管理和出库单明细管理,并能分别对出库单和出库单明细进行增加、删除、修改和查找的操作。
(3) 辅助管理
辅助管理包括修改密码。
2. 运行环境要求:
(1)客户端:
Windows操作系统
IE浏览器
(2)服务器:
windows server 版操作系统
Tomcat web 服务器
My SQL 数据库服务器
3. 技术要求:
强调软件工程过程文档的规范化。
l 需求分析规格说明书与用例规约
l 系统数据库设计,时序图,类图,MVC架构
l 系统完整编码,采用JSP、Servlet技术
设计工作量:
40课时
工作计划:
(1) 2010级软件工程所有班级
16课时: 1609理论讲座
20课时:上机、调试。计算机系机房
4课时:答辩。计算机系机房。
(具体时间地点老师先申请,机动安排)
指导教师签名: 日期:
教研室主任签名: 日期:
系主任签名: 日期:
长沙学院课程设计鉴定表
姓名
曾祥炫
学号
2010022111
专业
软件工程
班级
10软件1班
设计题目
服装库存管理系统
指导教师
潘怡
指导教师意见:
评定等级: 教师签名: 日期:
答辩小组意见:
评定等级: 答辩小组长签名: 日期:
教研室意见:
教研室主任签名: 日期:
系(部)意见:
系主任签名: 日期:
说明
课程设计成绩分“优秀”、“良好”、“中等”、“及格”、“不及格”五类;
项目实训(四)工作计划表
周 次
实训内容
备 注
第0周
(2012.3.12~2012.4.6)
1. 实训启动
召集项目组学生开会
明确实训的内容和要求
袁伟森老师讲课
致远楼1609
第一周
(2012.5.14~2012.5.18)
1.系统需求分析设计
致远楼1409
第二周
(2012.5.21~2012.5.25)
1.组长讨论会,讨论需求分析进度情况
完善需求文档
2. 用例和用例规约设计
致远楼1409
第三周
(2012.5.28~2012.6.1)
1.系统详细设计,类模型设计
2.时序图的设计
致远楼1408
第五周
(2012.6.4~2012.6.8)
1.第一阶段任务检查—需求分析
2. 开发工具的使用
致远楼1408
第六周
(2012.6.11~2012.6.15)
1.Struts2技术讲解
2. 第二阶段任务检查—数据库的设计
致远楼1408
第七周
(2012.6.18~2012.6.22)
1. 代码实现
2. 答疑调试
致远楼1408
第八周
(2012.6.25~2012.6.29)
1. 代码实现
2. 答疑调试
致远楼1408
第九周
(2012.7.2~2012.7.6)
1.答辩
致远楼1401
目录
第1章 设计内容与要求 1
1.1 设计内容 1
1.2 设计要求 1
第2章 需求分析 3
2.1 整体用例图 3
2.2 用例规约 3
2.3 需求描述 5
第3章 系统设计 6
3.1 数据库设计 6
3.1.1数据库对象命名规则 6
3.1.2 数据项编码规则 6
3.1.3 用户信息表结构 6
3.2 类图设计 7
3.3 时序图设计 7
第4章 系统实现 9
4.1 登陆设计实现 9
4.2 修改密码设计实现 12
第5章 总结 17
参考文献 18
附录 19
第1章 设计内容与要求
1.1 设计内容
服装库存管理系统主要的设计内容包括:
(1)系统管理
系统管理包括用户管理和货号管理。在用户管理中要包括新建系统用户、删除系统用户、查看系统用户详细信息、更新系统用户、查询系统用户、系统用户登陆和修改密码。在货号管理中包括新建货号、删除货号、查看货号详细信息、更新货号、查询货号
(2)库存管理
库存管理包括入库单管理和出库单管理。入库单管理包括新建入库单、删除入库单、查看入库单详细信息、更新入库单、提交入库单、查询入库单、新增入库单明细、查看入库单明细的详细信息、更新入库单明细、删除入库单明细、查询入库单明细。
出库单管理包括新建出库单、删除出库单、查看出库单的详细信息、更新出库单、提交出库单、查询出库单、新增出库单明细、查看出库单明细的详细信息、更新出库单明细、删除出库单明细、查询出库单明细。
(3)辅助管理
辅助管理包括修改密码。
1.2 设计要求
(1)系统管理
用户管理中在新建系统用户时用户登录号、用户姓名和用户密码为必选项,如果没有填写应该要能给出提示信息。用户能够根据用户登录号和用户姓名来查询系统用户的详细信息。系统用户能够根据用户登录号和密码来成功登陆系统。用户在成功登陆后可以使用旧密码来设置新密码。
货号管理中在新建货号时货号、品名、色号、尺码、面料、里料、出厂价、零售价为必选项,若有一项没有填写应该要能给出提示信息。用户可以根据货号、色号、尺码来查看货号详细信息。
(2)库存管理
入库单管理中在新建入库单时入库日期、所入仓库、来源是必选项,如果有一项没有填写,系统要能够给出提示信息, 备注为非必选项。用户成功登陆系统后可以根据单据号来查看入库单的详细信息。用户在更新入库单时要先查询到要更新的入库单,然后再进行入库单的更新。用户在保存入库单信息后可以进行新增入库单详细信息的操作,新建时可以设定入库单明细的货号、色号、尺码和数量。
出库单管理中在新建出库单时出库日期、所出仓库、接收人、接收人电话为必选项,若有一项没有填写则给出提示信息,其中备注为非必选项。用户成功登陆系统后可以根据单据号来查看出库单的详细信息。用户在更新出库单时要先查询到要更新的出库单,然后再进行出库单的更新。用户在保存出库单信息后可以进行新增出库单详细信息的操作,新建时可以设定出库单明细的货号、色号、尺码和数量。
(3)辅助管理
用户在成功登陆系统后可以进行修改密码,修改密码时旧密码、新密码和确认密码为必选项,如果有一项没有填写,系统应该给出提示信息。旧密码必须要与登录时使用的密码一
致,否则无法修改密码,新密码和确认密码也必须保持一致方能成功修改。
第2章 需求分析
2.1 整体用例图
图1 全局用例图
2.2 用例规约
表1 用户登陆用例规约
用例名称:
用户登陆
用例ID:
CSMS-01
角色:
用户
简要说明:
用户利用登录号密码登陆系统
前置条件:
无
基本事件流:
1、用户输入登录号
2、用户输入密码
3、用户点击“登陆”按钮
其它事件流:
1、用户输入的登录号和密码为必选项,如有一项为空,系统要能给出提示信息
2、系统接收用户输入的登录号和密码并且将其与数据库中的用户信息表中的对应数据进行验证,验证成功则允许用户登陆,否则提醒用户输入正确的登录号和密码。
异常事件流:
1、登陆号或者密码为空就点击登陆。
2、登录号或者密码错误
后置条件:
系统用户信息保存到数据库中,并且页面能够将用户输入的数据传送至后台服务器中
表2修改密码用例规约
用例名称
修改密码
用例ID
CSMS-02
角色
用户。
简要说明
用户修改密码
前置条件
用户已经登录系统
基本事件流
1、用户请求修改密码。
2、系统弹出修改密码页面。
3、用户输入旧密码。
4、用户输入新密码,确认新密码。
5、点击“完成”。
其他事件流
1、旧密码、新密码、确认密码为必选项、任何一项为空系统都要发出提示信息
2、系统接收用户输入的旧密码,并且将旧密码与数据库中的密码进行验证,若新密码与确认密码一致,且验证通过,则允许用户修改密码
异常事件流
1、用户输入的旧密码与用户登陆使用的密码不一致。
2、用户输入的新密码与确认密码不一致。
后置条件
系统能够获取用户在页面上输入的旧密码、新密码和确认密码,并且对旧密码与登陆密码进行验证。
2.3 需求描述
1.用户登陆
需求编号:CODEMN-1
需求描述:用户使用登录号和密码来成功登陆系统。
CODEMN-1-1 用户输入登录号和密码
CODEMN-1-2 页面获取用户输入的登录号和密码,并且与数据库中的数据进行比较
CODEMN-1-3 证成功则允许用户登陆,否则提醒用户输入正确的登录号和密码。
2.用户修改密码
需求编号:CODEMN-2
需求描述:用户修改密码
CODEMN-2-1:用户输入旧密码、新密码、确认密码。
CODEMN-2-2:系统接收用户输入的旧密码,并且将旧密码与数据库中的密码进行验证,同时将获取到的新密码和确认密码进行比较。
CODEMN-2-3:若旧密码验证通过,且新密码与确认密码一致,则允许用户修改密码,否则给出错误提示信息,密码修改不成功。 第3章 系统设计
3.1 数据库设计
3.1.1数据库对象命名规则
表3 数据库对象命名规则
数据库对象
命名规则
备注
表
Tbl_功能描述字符串
例如:tbl_user用户表
视图
View_功能描述字符串
例如:view_userInfo用户视图
存储过程
Proc_功能描述字符串
例如:proc_draw取款存储过程
3.1.2 数据项编码规则
表4数据项编码规则
数据项
命名规则
数据类型
长度范围
备注
登录名
用户姓名开头字母
字符
10位
无
密码
6位长的任意数字
字符
10位
无
货号
2个大写字母+数字
字符
10位
无
色号
颜色开头字母+数字
字符
10位
无
删除状态
逻辑数字1或0
整数
2
无
尺码
正常人身高如170
整数
无
入库日期
年+月+日
日期
无
3.1.3 用户信息表结构
表5 用户信息表
表名
用户信息表
数据库用户
主键
userLogin
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
01
userLogin
Varchar(20)
N
Y
高
无
主键
02
username
Varchar(20)
N
Y
高
无
03
Password
Varchar(20)
N
N
高
无
04
Remark
Varchar(20)
F
N
低
无
05
flag
Int
N
N
高
无
sql脚本
create table user(
userLogin varchar(20) not null primary key,
userName varchar(20) not null,
Password int not null ,
remark varchar(20),
flag int not null
);
备注
存储用户信息
3.2 类图设计
图2 系统登陆和修改密码的类图
在登陆和修改密码中,主要运用到userImpl、UserServlet和Userinfo三个类。userImpl中实现了Userinterface中定义的方法,在userImpl中可以拼写sql语句来实现对数据库的操作,即可以修改Userinfo中的属性,BConnection起到了连接数据库的作用。UserServlet根据用户在页面上操作来决定调用什么方法,doPost()可以判断用户在页面上JS页面上选择的操作的类型,根据操作类型来决定dologin()和doUpdatePwd()方法的调用。
3.3 时序图设计
图3 用户登陆时序图
如图3所示,用户首先在登陆界面的文本框中输入登录号和密码,UserServlet获取用户输入的登录号和密码,调用userImpl中的loginUser()方法将获取的登录号和密码作为参数传送至数据库中执行,并且返回执行结果,UserServlet根据返回结果来判断是否发生页面跳转和给出用户提示信息。
图4 修改密码时序图
如图4所示,用户首先在修改密码页面内输入旧密码、新密码、确认密码,UserServlet获取用户输入的旧密码、新面貌、确认密码,并且调用userImpl中的updatePwd()函数,以获取的三个值作为参数,updatePwd()将旧密码发往数据库中进行验证,UserServlet根据验证结果来判断密码是否修改成功和传送提示信息。修改密码界面还要验证新密码与确认密码是一致。
第4章 系统实现
4.1 登陆设计实现
代码段1 声明接口:
package com.csms.dao.inter;
import java.sql.SQLException;
import com.csms.dao.model.UserInfo;
import com.mysql.jdbc.ResultSet;
public interface Userinterface {
public ResultSet loginUser(String userLogin,String password) throws SQLException;//登陆验证
}
说明:此段代码的作用是定义接口声明相关的方法,public ResultSet loginUser(String userLogin,String password) throws SQLException;定义的是登陆验证方法,此方法声名了在实现登陆的方法中需要传进的两个参数String userLogin,String password,即登录号和登陆密码。
代码段2 接口实现:
package com.csms.dao.interImpl;
import java.sql.SQLException;
import com.csms.dao.inter.Userinterface;
import com.csms.dao.model.UserInfo;
import com.csms.db.DBconnection;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement;
public class Userimpl implements Userinterface {
DBconnection db=null;
Connection conn=null;
Statement pst=null;
private String password;
public Userimpl() throws ClassNotFoundException, SQLException
{
db=new DBconnection();
conn=db.getConn();
pst=(Statement) conn.createStatement();
}
///////////////登陆验证////////////////////
public ResultSet loginUser(String userLogin, String password) throws SQLException {
// TODO Auto-generated method stub
StringBuffer strsql=new StringBuffer();
strsql.append(" select * from usertable where ");
strsql.append(" userLogin='"+userLogin+"' and ");
strsql.append(" password='"+password+"'");
ResultSet rs=(ResultSet) pst.executeQuery(strsql.toString());
return rs;
}
}
说明:此段代码是先前定义的接口的实现部分,StringBuffer strsql=new StringBuffer();
定义了一个字符串strsql。代码strsql.append(" select * from usertable where ");strsql.append(" userLogin='"+userLogin+"' and ");strsql.append(" password='"+password+"'");是拼写sql语句,意思是在数据库中查询用户的登录名和密码。ResultSet rs=(ResultSet) pst.executeQuery(strsql.toString());return rs;意思是将sql语句执行,并且将执行后的结果集合赋值给rs,最后返回rs。db=new DBconnection(); conn=db.getConn(); pst=(Statement) conn.createStatement(); 此段代码是进行数据库的连接。
代码段3 数据库连接:
public class DBconnection {
private static String url="jdbc:mysql://127.0.0.1:3306/csms"; //数据库的URL
private static String user="root"; //访问数据库的用户名
private static String pwd="123456"; //访问数据库的密码
public Connection conn;
public Connection getConn() throws ClassNotFoundException, SQLException
{
Class.forName("com.mysql.jdbc.Driver"); //装载JDBC驱动程序
conn=(Connection) DriverManager.getConnection(url,user,pwd);
return conn;
}
public void closeConn() throws SQLException
{
conn.close();//关闭数据库连接
}
}
说明:private static String url="jdbc:mysql://127.0.0.1:3306/csms";说明了数据库CSMS的地址,此段代码的主要使用是控制数据库的连接。
代码段4 检测输入域:
function doLogin()
{
if(idFrmMain.userid.value=="")
{
alert('请用户输入账号!');
return ;
}
if(idFrmMain.psword.value=="")
{
alert('请用户输入密码!');
return ;
}
idFrmMain.action="UserServlet?opt=login";
idFrmMain.submit();
}
说明:if(idFrmMain.userid.value=="")和if(idFrmMain.psword.value=="")是用于判断登陆界面用于输入登录号和登陆密码的两个文本框中的值是否为空,当用户点击“登陆”按钮时若userid和psword还为空,则提醒用户输入登录号和登陆密码。
idFrmMain.action="UserServlet?opt=login";
idFrmMain.submit();
意思是当用户点击登陆后将调用UserServlet中的方法。
代码段5 登陆验证及页面跳转:
public void dologin(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
HttpSession session=request.getSession();
String user_name=request.getParameter("userid");//获得页面输入的登录号
String user_pwd=request.getParameter("psword");//获得页面输入的登录密码
ResultSet rs=userInter.loginUser(user_name, user_pwd);
if(rs.next()){
session.setAttribute("userLogin",user_name);
response.sendRedirect("Main.htm");
}
//////////////页面的跳转,验证成功进入主页面,否则任然停留在登陆页面///////
else{
String msg="用户密码错误";
request.setAttribute("msg", msg);
RequestDispatcher rd=request.getRequestDispatcher("login.jsp");
rd.forward(request, response);
}
}
说明:String user_name=request.getParameter("userid");是用于获取登陆页面输入的登录号。String user_pwd=request.getParameter("psword");是用于获取登陆页面输入的登录密码。
ResultSet rs=userInter.loginUser(user_name, user_pwd);调用loginUser方法,将user_name, user_pwd作为参数传入到loginUser方法中,并且将结果集赋值给rs。if(rs.next())是对re.next()进行逻辑判断,若逻辑值为1则执行中间部分的方法。
session.setAttribute("userLogin",user_name);是将变量user_name以userLogin为名字保存在session中。response.sendRedirect("Main.htm");表示从当前servlet跳转到Main.htl页面。else{
String msg="用户密码错误";
request.setAttribute("msg", msg);
RequestDispatcher rd=request.getRequestDispatcher("login.jsp");
rd.forward(request, response);
}
表示当re.next()逻辑判断为0时提醒用户错误信息,并且任然停留在登陆页面,即login.jsp。
4.2 修改密码设计实现
代码段 1定义接口:
package com.csms.dao.inter;
import java.sql.SQLException;
import com.csms.dao.model.UserInfo;
import com.mysql.jdbc.ResultSet;
public interface Userinterface {
public int updatePwd(String userLogin,String oldPwd,String newPwd) throws SQLException, ClassNotFoundException;//修改密码
}
说明:此段代码的作用是定义接口声明相关的方法,public int updatePwd(String userLogin,String oldPwd,String newPwd) throws SQLException, ClassNotFoundException;定义了修改密码方法,此方法声明了在实现修改密码的方法中需要传进的三个参数String userLogin,String oldPwd,String newPwd,即登录号、旧密码和新密码。
代码段 2处理数据:
public int updatePwd(String userLogin,String oldPwd,String newPwd) throws SQLException, ClassNotFoundException{
// TODO Auto-generated method stub
StringBuffer strSql=new StringBuffer();
strSql.append("select * from usertable where");//拼写sql字符串
strSql.append(" userLogin='"+userLogin+"'and password='"+oldPwd+"'");
DBconnection db=new DBconnection();//连接数据库
Connection conn=db.getConn();
PreparedStatement pst=(PreparedStatement) conn.prepareStatement(strSql.toString());//将SQL语句传送至服务器或数据库
ResultSet rs=(ResultSet) pst.executeQuery();//执行语句,返回结果集
if(rs.next()){
StringBuffer strUpdate=new StringBuffer();
strUpdate.append("update usertable set password='"+newPwd+"' where userLogin='"+userLogin+"'");
PreparedStatement pst1=(PreparedStatement) conn.prepareStatement(strUpdate.toString());//将SQL语句传送至服务器或数据库
return pst1.executeUpdate(); //执行sql语句,并且返回结果集
}
else{
return -1;
}
}
说明:strSql.append("select * from usertable where"); strSql.append(" userLogin='"+userLogin+"'and password='"+oldPwd+"'");此段代码是在拼写sql语句。pst=(PreparedStatement)conn.prepareStatement(strSql.toString());。此段代码是将拼写好的sql语句送入mysql数据库中。ResultSet rs=(ResultSet) pst.executeQuery();此段代码是将送入数据库中sql语句执行,并且将执行后的结果集赋值给rs。if(rs.next())此代码是对rs.next()进行逻辑判断,当逻辑为真时执行strUpdate.append("update usertable set password='"+newPwd+"' where userLogin='"+userLogin+"'");PreparedStatement pst1=(PreparedStatement) conn.prepareStatement(strUpdate.toString());即系统将用户设定的新密码发送到后台服务器中,服务器在数据库的用户信息表中将用户登录密码设置成新密码。
代码段3 在页面对旧密码、新密码、确认密码进行验证:
function save(){
if(idFrmMain.oldPwd.value==""){
alert('请填写旧密码');
return;
}
if(idFrmMain.newPwd.value!=""&&idFrmMain.reNewPwd.value!=""){
if(idFrmMain.newPwd.value!=idFrmMain.reNewPwd.value){
alert('新密码和确认密码不一致');
return;
}
}
else{
alert('新密码和确认密码不能为空');
return;
}
idFrmMain.action="UserServlet?opt=updatePwd";
idFrmMain.submit();
}
说明:if(idFrmMain.oldPwd.value=="")此段代码的作用是判断oldPwd的值是否为空,若为空则弹出“请填写旧密码”的错误提醒。
if(idFrmMain.newPwd.value!=""&&idFrmMain.reNewPwd.value!=""){
if(idFrmMain.newPwd.value!=idFrmMain.reNewPwd.value){
此段代码是在判断用户输入的新密码和确认密码是否为空和是否相等,若输入域为空则提醒用户输入新密码和确认密码,若新密码和确认密码不一致则提醒用户输入一致的新密码和确认密码。
idFrmMain.action="UserServlet?opt=updatePwd";意思是用户选择修改密码后系统会调用UserServlet中的方法。
代码段4 获取页面的操作类型:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String opt=request.getParameter("opt");
System.out.println(opt);
if(opt.equals("updatePwd")){ //判断是否选择修改密码操作
try {
doUpdatePwd(request,response); //执行doUpdatePwd()方法
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
说明:opt是java里已经定义好的一种机制,用来获取页面上的一些信息,if(opt.equals(“updatePwd”))是在判断opt取到的值是否等于“updatePwd”,若等于则调用doUpdatePwd(request,response)方法。
代码段5 修改密码的主要方法:
public void doUpdatePwd(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException, ClassNotFoun
展开阅读全文