基于java企业进销存管理系统毕业设计含源文件Word文档下载推荐.docx
《基于java企业进销存管理系统毕业设计含源文件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于java企业进销存管理系统毕业设计含源文件Word文档下载推荐.docx(50页珍藏版)》请在冰豆网上搜索。
![基于java企业进销存管理系统毕业设计含源文件Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/23/b2f87de1-34b9-4fbc-8d19-121c3b84b41c/b2f87de1-34b9-4fbc-8d19-121c3b84b41c1.gif)
5用户登录模块设计15
6系统首页设计16
7基础信息管理主要功能模块设计18
7.1客户信息管理设计18
7.2客户信息查询设计19
8库存管理主要功能模块设计22
8.1商品入库信息设计23
8.2商品价格调整设计26
附录A参考文献
附录B数据表
附录C文件架构图
0引言
随着中国电子商务、互联网业务的迅猛发展,国内许多企业已跨入电脑网络管理时代,并因此提高了管理效率和市场竞争力。
但目前仍有部分企业还停留在原始计账管理阶段。
而随着全球经济信息化的进程和WTO的成功实现,企业面临着前所未有的机遇和挑战,在如此激变的社会形势和激烈的市场竞争下,愈来愈多的企业管理者意识到效率管理和科学管理的重要性,以及增强市场竞争力的迫切性,因此建立科学、规范、高效的管理制度和秉承富有竞争力的经营理念是每一个企业管理者的渴望,企业采用电脑管理进货、库存、销售等诸多环节也已成为趋势及必然。
在进货、库存、销售环节中,由于商品种类繁多、业务量大、库存管理复杂,使用手工操作的工作量很大,在操作过程中也很容易出现各种错误。
而采用计算机管理则可以大大提高日常工作的效率,不仅将原来由手工操作的进货、出货及销售这一整套流程用计算机进行全程管理,而且消除了手工操作中可能存在的不确定因素,达到进销存管理流程清晰,从而能够比较彻底地贯彻经营者的管理模式。
1系统分析
1.1需求分析
通过调查研究,要求系统满足以下功能:
❑由于操作人员的计算机知识水平有限,因此要求系统具有良好的人机界面。
❑如果系统的使用对象较多,则要求有较好的权限管理。
❑方便的数据查询功能,并支持多条件查询。
❑在各种单据中根据输入的基础数据自动计算金额,尽量减少人工干预。
❑对客户或供应商的往来账目进行有效管理,绝不存在假账、漏账、差账等情况。
❑通过计算机,能够直接“透视”仓库存储情况。
❑对某一时间段内的某种商品的销售情况按数量或金额进行升序或降序排行。
❑图表分析年销售额。
1.2可行性分析
通过计算机网络系统对企业进行全面的管理,满足了企业的现代化管理的要求。
❑经济性
当前许多中小型企业都使用人工管理方式(即纸和笔)来管理企业的进销存,这样的管理方式既困难又浪费时间和成本,并且容易出现漏账、差账的情况,因此中小企业应该向大型企业那样采用先进的管理方式,提高企业效率、降低企业运营成本。
❑技术性
企业进销存管理系统从中小企业的实际出发,可有效地管理企业的进销存情况,并降低企业运营成本、及时调整营销策略、提高库房的利用率。
2总体设计
2.1项目规划
企业进销存管理系统是一个典型的数据库开发应用程序,由基础信息管理、库存管理、商品销售、查询统计、往来管理、系统设置6部分组成。
❑基础信息管理
该模块主要是对企业的客户信息、商品信息、供应商信息进行有效管理,并可实现按不同条件对这些数据进行查询。
❑库存管理
该模块主要是对商品的入库及入库退货信息进行有效管理,对商品的价格进行调整,同时可按不同条件查询库存商品。
❑商品销售
该模块主要是对商品的销售及销售退货信息进行有效管理。
❑查询统计
该模块主要实现按不同条件查询商品的入库信息及销售信息,并可对某一时间段内某种商品的销售情况按数量或金额进行升序或降序排行,同时可对某一年度的销售额进行图表分析。
❑往来管理
该模块主要实现对商品的入库结账、入库退货结账、销售结账、销售退货结账信息进行有效管理,同时可实现销售结账信息及入库结账信息的查询操作。
❑系统设置
访模块主要实现对操作员及操作员密码进行有效管理。
2.2系统功能结构图
企业进销存管理系统的功能结构如图1所示。
图1系统功能结构图
3系统设计
3.1设计目标
本系统针对中小型企业进销存管理现状,通过网络对企业的进销存进行有效管理。
本系统主要实现如下目标:
❑系统采用人机对话方式,界面美观友好,信息查询灵活、方便、快捷、准确,数据存储安全可靠。
❑实现企业内一些基础信息的设置及查询。
❑商品的入库、入库退货、销售、销售退货流程清晰。
❑数据计算自动完成,提高工作效率。
❑与供应商和客户之间的账目清晰。
❑以图表形式对年销售额进行分析。
❑实现多条件查询。
❑可方便快捷地查询库存信息,并可对商品价格进行调整。
❑对某一时间段内的某种商品按照销售数量或销售金额进行销售升序排行或降序排行。
❑操作员可以随时修改自己的口令。
❑对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。
❑系统最大限度地实现了易维护性和易操作性。
❑系统运行稳定、安全可靠。
3.2开发及运行环境
硬件平台:
❑CPU:
P41.8GHz。
❑内存:
256MB以上。
软件平台:
❑操作系统:
Windows2000。
❑数据库:
SQLServer2000。
❑开发工具包:
JDKVersion1.4.2。
❑JSP服务器:
Tomcat。
❑浏览器:
IE5.0,推荐使用IE6.0。
❑分辨率:
最佳效果1024×
768像素。
3.3数据库设计
本系统采用SQLServer2000数据库,系统数据库名称为db_shopping。
数据库db_shopping中包含17张表。
关于数据库中的数据表请参见附录B。
4JavaBean的编写
根据系统的需求编写需要的JavaBean。
下面将给出企业进销存管理系统中所需要的JavaBean的编写过程。
4.1数据库操作的JavaBean的编写
数据库连接的JavaBean的编写代码如下:
packagecom.mingri.dbconn;
importjava.sql.*;
importjavax.naming.*;
importjavax.sql.DataSource;
publicclassDBConn
{
publicstaticsynchronizedConnectiongetConnection()throwsException{
try{
ContextinitCtx=newjavax.naming.InitialContext();
//获得JNDI初始上下文对象
//在JNDI命名空间java:
comp/env段里获得上下文对象
ContextenvCtx=(Context)initCtx.lookup("
java:
comp/env"
);
DataSourceds=(DataSource)envCtx.lookup("
jdbc/mingri"
//通过JNDI名获得数据源对象
returnds.getConnection();
}
catch(SQLExceptione){
throwe;
catch(NamingExceptione){
}
数据库操作的JavaBean的编写代码如下:
importcom.mingri.dbconn.DBConn;
publicclassDBResult
privateConnectioncon;
publicDBResult(){
this.con=DBConn.getConnection();
/**
*用于获得执行SQL语句的ResultSet对象
*/
publicResultSetgetResult(Stringsql){
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery(sql);
returnrs;
catch(Exceptione){}
returnnull;
*用于执行SQL语句没有返回值
publicvoiddoExecute(Stringsql){
stmt.executeQuery(sql);
}catch(Exceptione){}
*用于获得执行SQL语句的PreparedStatement(预处理)对象
publicPreparedStatementgetPreparedStatement(Stringsql){
PreparedStatementpstmt=con.prepareStatement(sql);
returnpstmt;
*关闭连接
publicvoidcloseCon(){
this.con.close();
}catch(Exceptione){
e.printStackTrace();
}}
4.2中文乱码处理的JavaBean的编写
在JSP开发中,经常出现乱码问题,我们可以指定编码方式,以消除乱码。
packagecom.mingri.chinese;
importjava.io.*;
publicclassToChinese
publicStringtrans(Stringchi){
Stringresult=null;
bytetemp[];
temp=chi.getBytes("
iso-8859-1"
result=newString(temp);
catch(UnsupportedEncodingExceptione){
System.out.println(e.toString());
returnresult;
4.3客户基本信息的JavaBean的编写
这段代码用来封装客户的基本信息,并对每个属性提供setXXX()和getXXX()方法,来对其进行操作。
packagecom.mingri.info;
publicclassKhinfoBean
privateStringkhname;
//客户全称
privateStringkhjc;
//客户简称
privateStringaddress;
//地址
privateStringpostcode;
//邮政编码
privateStringtel;
//电话
privateStringfax;
//传真
privateStringlxr;
//联系人
privateStringlxrtel;
//联系人电话
privateStringemail;
//电子邮箱
privateStringkhyh;
//开户银行
privateStringyhzh;
//银行账号
publicStringgetKhname(){
returnkhname;
publicvoidsetKhname(Stringkhname){
this.khname=khname;
……//省略部分代码
4.4提交客户信息的JavaBean的编写
在填写完客户基本信息后,就应该向数据库中执行插入操作。
这个类中有两个方法setKhinfo()和Regist()。
其中setKhinfo(KhinfoBeankhinfo)方法是用来设置该类中的属性khinfo,其值为参数传递来的KhinfoBean的对象。
然后执行预处理语句,并通过预处理对象pstmt的setString()方法来设置准备要插入数据库的内容,最后通过execute()来执行插入的操作。
具体代码如下:
importcom.mingri.dbconn.DBResult;
publicclassKhRegist
privateKhinfoBeankhinfo;
DBResultrst=newDBResult();
publicvoidsetKhinfo(KhinfoBeankhinfo){
this.khinfo=khinfo;
publicvoidregist()throwsException{
Stringreg="
insertintotb_customervalues(?
?
)"
;
PreparedStatementpstmt=rst.getPreparedStatement(reg);
//创建一个预处理语句,然后设置他们的参数
pstmt.setString(1,khinfo.getKhname());
pstmt.setString(2,khinfo.getKhjc());
pstmt.setString(3,khinfo.getAddress());
pstmt.setString(4,khinfo.getPostcode());
pstmt.setString(5,khinfo.getTel());
pstmt.setString(6,khinfo.getFax());
pstmt.setString(7,khinfo.getLxr());
pstmt.setString(8,khinfo.getLxrtel());
pstmt.setString(9,khinfo.getEmail());
pstmt.setString(10,khinfo.getKhyh());
pstmt.setString(11,khinfo.getYhzh());
//执行更新操作
pstmt.executeUpdate();
catch(Exceptione){
4.5查询、分页JavaBean的编写(QuestString.java)
该系统中主要的方法分为两部分:
一部分是根据用户提交的不同请求调用不用的方法来获取SQL语句;
另一部分是用于分页显示。
用于完成分页显示的方法有:
❑voidsetQuerySql(Stringhttpfile,Stringpages,StringstrCount):
通过参数传递来设置Bean中的属性。
❑voidquerySql(StringcountSql):
执行SQL语句,获得分页显示时的各个属性。
❑StringpageFooter():
用来动态的给出一个表单该表单用来进行分页和统计页面间的跳转。
这部分代码是本系统中查询部分的骨架,所有涉及到查询操作的代码部分全都调用了该Bean中相应的方法,并完成了分页显示。
代码如下:
publicclassQuestString
privateintcurPage;
//当前页数
privateintmaxPage;
//最大页数
privateintmaxRowCount;
//总记录数(即从数据库中查出的所有记录)
privateintpageSize=2;
//每页要显示的记录数
privateDBResultdb;
//记录集对象
privateStringhttpFile;
//当前地址栏的文件,即具体的JSP文件
privateStringcif;
//选择的查询字段
privateStringccif;
//选择的查询运算符
privateStringqvalue;
//查询关键字
privateStringcountSql=null;
//用来存储selectcount(*)……语句
privateStringtopSql=null;
//用来存储selecttop2……语句
privateStringnowPage=null;
//初始化当前页curPage变量,即获取当前页的具体页号
privateStringstr_parameter;
//在做翻页时,传递除pages以外的其他参数
privateStringandor;
//查询的与/或条件
privateStringsdate;
//查询起始时间,即从什么日期开始查询
privateStringedate;
//查询结束时间,即到什么日期结束
privateStringorderby;
//排序条件,即按什么排序
privateStringpaixu;
//排序方法,即升序或降序
publicQuestString(){//构造方法,用来设置db为一个DBResult()对象
db=newDBResult();
publicintgetCurPage(){
returncurPage;
publicvoidsetCurPage(intcurPage){
this.curPage=curPage;
//省略了对Bean中其他属性设置的部分代码
……
/**
*通过参数传递来设置Bean中的属性
publicvoidsetQuerySql(Stringhttpfile,Stringpages,StringstrCount){
this.nowPage=pages;
//将表单提交过来的参数pages(第几页)的值传递给变量nowPage保存
this.httpFile=httpfile;
//用来动态设置处理表单请求的JSP文件
this.countSql=strCount;
//用来设置执行selectcount(*)……的SQL语句
querySql(countSql);
//调用querySql方法,并将参数countSql传递到该方法中
*执行SQL语句,获得分页显示时的各个属性
publicvoidquerySql(StringcountSql)throwsSQLException{
//在setQuerySql方法中已经设置了nowPage的值,其值就是pages
if(this.nowPage==null){//如果nowPage的值为空,也就是传递pages的值为空
this.curPage=1;
//那么就将当前页的值设为1;
else{
this.curPage=Integer.parseInt(this.nowPage);
if(this.curPage<
1){//如果当前页小于1,那么就将当前页的值设为1
this.curPage=1;
ResultSetrsCount=db.getResult(countSql);
//执行SQL语句获得记录总数
if(rsCount.next()){
this.maxRowCount=rsCount.getInt
(1);
//获取记录总数,即所要查询记录的总行数
//获取总页数,即如果当总记录数除以每页显示的记录的余数为0时,总页数就等于两数整除的结果
//如果余数不等于0,那么总页数就等于两数整除的结果加1
this.maxPage=(this.maxRowCount%this.pageSize==0)?
(this.maxRowCount/this.pageSize):
(this.maxRowCount/this.pageSize+1);
if(this.curPage>
this.maxPage){//如果当前页大于总页数,则当前页等于总页数
this.curPage=this.maxPage;
//那么当前页就是最大页
rsCount.close();
//关闭总记录数的结果集
*一个字符串,用来动态的给出一个表单
*该表单用来进行分页和统计页面间的跳转
publicStringpageFooter()
{
//创建一个表单
Stringstr="
<
formaction="
+this.httpFile+"
name=formBeanmethord=post>
"
intprev=this.curPage-1;
//向前翻页,即当前页减1
intnext=this.curPage+1;
//向后翻页,即当前页加1
str=str+"
fontstyle='
font-size:
10pt'
>
总计<
fontcolor='
red'
+this.getMaxRowCount()+