采购管理系统的设计与实现【文档+源码】

发布于:2024-12-22 ⋅ 阅读:(10) ⋅ 点赞:(0)

目录

 

Abstract

第一章  引言

1.1研究现状

1.2主要研究的目的及内容

1.3研究方法及设计思路

1.3.1 研究方法

1.3.2 设计思路

1.4.相关技术简介

1.4.1 JSP技术简介

1.4.2 Struts 框架

1.4.3 Hibernate数据访问框架

1.4.4  B/S模式分析

1.5 系统开发步骤

第二章 需求分析及可行性分析

2.1需求分析

2.1.2运行需求分析

2.1.3其他需求分析

2.2 可行性分析

2.2.1经济可行性

2.2.2技术可行性

2.2.3 运行可行性

2.2.4时间可行性

2.2.5 法律可行性

第三章 系统分析与设计

3.1系统实现目标

3.2 系统设计

3.2.1系统设计

3.3数据库设计

3.3.1数据库概述

3.3.2数据库实现

3.4系统体系结构

3.5系统流程图

3.6系统用例图

第四章 系统实现

4.1.系统实现

4.1.1 登录模块

4.1.2系统主界面

4.1.3用户操作

4.1.4供应商管理

4.1.5材料信息管理

4.1.6订单信息管理

4.1.7信息查询

第五章  系统测试

5.1系统调试

5.1.1 程序调试

5.2 程序测试

5.2.1 测试的重要性及目的

5.2.2 测试的步骤

5.2.3 测试的主要内容

结束语

参考文献

  

外文原文

中文翻译

第三章 系统分析与设计

3.1系统实现目标

    采购是公司生产产品及维护正常运作而必须消耗的物品及必须配置的设施的购入活动的总称,是公司成本控制的重点。无论是公司管理者还是财务部门,对采购工作存在的风险都有着非常强的敏感性,这不仅因为采购是直接影响生产成本的主要因素,而是因为采购有着很高的认为欺诈的可能。在日趋完善的现代经营管理模式中,公司管理当局越来越注重财务管理和财务运作的有效性。

合理的采购管理具有很重要的意义:

  1. 材料采购成本在企业经营中占很大比重,且在很多行业有上升趋势。
  2. 降低原材料成本是增加利润的基本途径。

    建立和实施制度化的采购管理程序,这是采购管理工作有效进行的根本保证,有法必依,违法必究,这是制度能切实贯彻执行的保证。只有制度化了,才能在公司中用法制,而不是人治。采购管理系统是为了实现企业的长远发展目标而实施的一个系统工程,也是一个企业能否取得经济效益的关键它能够为企业的发展提供科学的管理功能,减少管理费用。利用计算机的数据库技术,使得企业的采购、库存和销售能够有利的结合起来,避免和克服人工管理信息时,劳动量大,计算和统计的不准确等种种缺陷和弊端,使企业的管理规范化和自动化,从而对采购管理提供更加科学、准确的数据,实现了采购管理的系统化、规范化和自动化。通过使用采购管理系统能够降低材料采购成本在企业经营中所占的比例,能够提高企业的利润。

    企业为满足生产所需和提高生产效率,将开发企业采购管理系统。

系统实现目标:易于操作,有良好的互动性,能为员工的工作带来便易。开发出来的系统还必须是安全性高,扩展性强。能在日后不断升级优化。

3.2 系统设计

3.2.1系统设计

该系统采用B/S体系结构,在客户机上并不安装客户端,而是使用网络浏览器,这样节省一大部分开发、维护和升级报销。本系统不仅要求功能完善,而且还要界面友好,因此,对于一个成功的系统设计,功能模块的设计是关键。

本系统是一个独立的系统,用来解决企业采购信息的管理问题。采用JSP技术构建了一个有效而且实用的企业采购信息管理平台,目的是为高效地完成对企业采购信息的管理。经过对课题的深入分析,采购系统需实现以下功能模块:

各个模块实现的功能如下:

  1. 用户登录

对用户输入的用户名和密码进行匹配,只有合法的用户可以登录成功,进入主界面,进行操作。是系统安全性的第一层保护层。

  1. 供应商管理

灵活管理供货商,及时添加及修改供货商信息,为采购计划的制定提供保障。

  1. 材料管理

对材料进行管理,管理材料种类及库存,及时了解材料的库存信息,有助于做出正确的采购选择。

  1. 订单管理

系统设计了多种订单。不同权限的操作员只能对其拥有权限操作的订单进行操作。

  1. 信息查询

根据关键字快速检索信息。

3.3数据库设计

3.3.1数据库概述

数据库设计就是针对应用需求和环境,建立合理的数据库模式和存储结构,保证数据的高效存取,并满足应用的任务处理要求。数据库设计是应用系统建设的核心技术,是数据库应用领域的主要研究课题。

数据库是数据管理的最新技术。十多年来数据库管理系统已从专用的应用程序发展成为通用的系统软件。由于数据库具有数据结构化,最低冗余度,较高的程序与数据独立性,易于扩充,易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。因此不仅大型计算机及中小型计算机,甚至微型机都配有数据库管理系统。

设计数据库必须遵循一定的规则,在关系型数据库中,这种规则就是范式,范式是符合某一种级别的关系模式的集合。一般人们设计数据库遵循第三范式。即:数据库表中不包含已在其他表中包含的非主关键字信息。采用范式减少了数据冗余,节约了存储空间,同时加快了增、删、改的速度。

本系统是用SQL Server2008作为系统数据库。SQL Server是由微软公司研制和发布的分布式关系型数据库管理系统,可以支持企业、部门以及个人等各种用户完成信息系统、电子商务、决策支持、商业智能等工作。SQL Server2008系统只要由4个主要部分组成。这四个部分被称为4个服务,这些服务分别是数据库引擎、分析服务、报表服务和集成服务。这些服务之间相互存在和相互应用。SQL Server2008在易用性、可用性、可管理性、可编程性、动态开发、运行性能等方面有突出的优点。SQL Server 2008还增强了审查,使你可以审查你的数据的操作,从而提高了遵从性和安全性。审查不只包括对数据修改的所有信息,还包括关于什么时候对数据进行读取的信息。SQL Server 2008具有像服务器中加强的审查的配置和管理这样的功能,这使得公司可以满足各种规范需求。SQL Server 2008还可以定义每一个数据库的审查规范,所以审查配置可以为每一个数据库作单独的制定。为指定对象作审查配置使审查的执行性能更好,配置的灵活性也更高。提供了稀疏列,这个功能使NULL数据不占物理空间,从而提供了一个非常有效的管理数据库 中的空数据的方法。例如,稀疏列使得一般包含极多要存储在一个SQL Server 2008数据库中的空值的对象模型不会占用很大的空间。稀疏列还允许管理员创建1024列以上的表。

3.3.2数据库实现

本系统一共设计五张表,分别是t_order,t_price,t_supplier,t_user,t_product.

t_order表存放订单,t_price表存放付款单,t_supplier表存放供应商,t_user表存放用户信息,t_product存放材料信息。

t_order(id,ordername,productid,supplierid,num,status,numb,price,allprice,username);

t_price(id,pricename,productid,supplierid,price,status,username,remark,inputdate);

t_supplier(id,suppliername,phone,adrr,mun,username,web,email,remark);

t_user(id,username,password,realname,power,);

t_product(id,productname,num,inputdate,counts,remark);

3.4系统体系结构

在系统功能分析的基础上,系统功能模块图如下图3-1所示: 

系统有四个主要功能,分别是用户登录,基础信息管理,订单管理,采购查询。其中基础信息管理可以对用户信息,材料信息,供应商信息及订单信息进行管理。订单管理功能对订单进行管理,整个系统中,会有7种状态的订单。采购查询,是系统为用户提供的便捷查询方式,根据关键字,即可快速检索出需要查询的信息。

3.5系统流程图

用户输入用户名及密码,系统会进行匹配查询,如果在数据库中,有匹配的用户信息,则可以登录。且系统有4种权限的用户,分别是管理员,审批员,采购员及仓库管理员,不同权限的用户,有不同的操作权限。

仓库管理员对入库的物品进行质量检验,对质量不合格的物品申请退货,并提交退货单等待审批。审批成功的退货单,进行退货,审批不成功则重新创建退货单或者修改退货单。对于质量合格的物品,直接确认收货。

3.6系统用例图

管理员用例图如图3-5所示:

采购员用例图如图3-6所示:

审批员用例图如图3-7所示:

                        

仓库管理员用例图如图3-8所示:

第四章 系统实现

4.1.系统实现

4.1.1 登录模块

对于一个完整的企业采购管理系统,不仅要求功能强大、操作简单,还要有良好的设计风格和另人爽目的界面。登录界面对于整个系统来说是非常重要的,因为它设置了进入本系统的用户和口令,防止非法用户进入系统,破坏系统安全和所保存的数据,只有合法的管理员在输入正确的密码后方可进入系统,否则将提示密码或用户名输入错误,并询问用户是否重新输入。这样就对使用者有了限制,增加了系统的安全性和保密性,便于控制和管理,有利于系统的维护。

登陆界面如图4-1所示:

当用户没有输入用户名时,系统会弹出这样的提示框,如图4-2所示:

当用户没有输入密码时,系统会弹出这样的提示框,如图4-3所示:

登录界面代码实现:

public class LoginAction extends BaseAction{

private LoginServices loginServices;

private Integer id;

private String username;

private String password;

private String realname;

public String checkUser() throws Exception{

if (!(StringUtils.isEmpty(username)|| StringUtils.isEmpty(password))) {

TUser user = loginServices.checkUser(username,password);

if (user!=null) {

setSessionAttribute("user", user);

return SUCCESS;

}

setRequestAttribute("error", "error");

}

return ERROR;

}

public String updateUser() throws Exception{

TUser user = new TUser();

user.setId(id);

user.setPassword(password);

user.setUsername(username);

user.setRealname(realname);

loginServices.updateUser(user);

setSessionAttribute("user", user);

return "update";

}

}

}

<script type="text/javascript">

function commit() {

if(form1.username.value=="") {

alert("请您输入用户名!");

form1.username.focus();

return false;

}

if(form1.password.value=="") {

alert("请您输入密码!");

form1.password.focus();

return false;

}

return true;

}

登录界面设计代码:

</script>

<table width="100%" border="0" cellspacing="0" cellpadding="0">

      <tr>

        <td width="31%" height="35" class="login-text02">帐号   <br /></td>

        <td width="69%"><input name="username" id= "username" type="text" size="28" style="width:150px" /></td>

      </tr>

      <tr>

        <td height="35" class="login-text02">密码   <br /></td>

        <td><input name="password" id="password" type="password" size="30" style="width:150px"/></td>

      </tr>

      <tr>

        <td height="35"> </td>

        <td><input name="Submit2" type="submit" class="right-button02" value="登 录" />

            <input name="reset232" type="reset"" class="right-button02" value="重 置" />

      </tr>      

      <%

      if("error".equals((String)request.getAttribute("error"))){ %>

       <font color="red">信息错误,请重新填写!</font>

      <%}%>

</table>

4.1.2系统主界面

当使用管理员身份登录的主界面,如图4-5所示:

图4-5 管理员主界面

当用户身份为管理员时,则拥有系统的最高权限,可以创建四种权限的用户身份。分别是管理员,采购员,审批员及仓库管理员。

当使用普通用户登录时主界面,如图4-6所示:

普通用户是和管理员相对的用户身份,包括采购员,仓库管理员,审批人员三种,由管理员进行创建。每种身份有对应的操作权限。并且不能越权操作。

采购员:创建原始采购单,提交采购申请,对审批通过的采购订单进行采购。

审批人员:对提交的采购订单及退货单进行审批;

仓库管理员:对到达货物进行质量检验,产品合格则确认收货,产品不合格,则创建退货单,等待审批。

4.1.3用户操作

    使用管理员身份登录时,可以查看用户的信息,并对用户进行增、删、改、查操作:

当使用管理员身份时,可以对用户信息进行查看,如图4-7所示:

当使用管理员身份登录时,可以创建不同权限的用户,如图4-8所示:

                      

用户管理代码实现:

public class UserAction extends BaseAction{

添加:

public String addUser() throws Exception{

TUser user = new TUser();

user.setPassword(password);

user.setPower(power);

user.setRealname(realname);

user.setUsername(username);

userServices.addUser(user);

return "addUser";

}

public String preupdateUser() throws Exception{

TUser user = userServices.getUser(id);

setRequestAttribute("user",user);

return "preupdateUser";

}

修改:

public String updateUser() throws Exception{

TUser user = userServices.getUser(id);

user.setPassword(password);

user.setRealname(realname);

user.setPower(power);

userServices.updateUser(user);

return "updateUser";

}

删除:

public String delUser() throws Exception{

userServices.delUser(id);

return "delUser";

  }

}

}

4.1.4供应商管理

供应商管理模块是本系统中一个基础的部分,在本模块中包括对供应商信息的增删改查功能,确保资料的安全。增加了系统的安全性和保密性,便于控制和管理。及时的更新供应商信息,可以帮助企业做正确的采购策略。

供应商模块关键代码实现:

public class SupplierAction extends BaseAction{

添加:

public String addSupplier() throws Exception{

TSupplier supplier = new TSupplier();

supplier.setAdrr(adrr);

supplier.setPhone(phone);

supplier.setSuppliername(suppliername);

supplier.setEmail(email);

supplier.setNum(num);

supplier.setRemark(remark);

supplier.setUsername(username);

supplier.setWeb(web);

supplierServices.addSupplier(supplier);

return "addSupplier";

}

public String preupdateSupplier() throws Exception{

TSupplier supplier = supplierServices.getSupplier(id);

setRequestAttribute("supplier",supplier);

return "preupdateSupplier";

}

修改:

public String updateSupplier() throws Exception{

TSupplier supplier = supplierServices.getSupplier(id);

supplier.setAdrr(adrr);

supplier.setPhone(phone);

supplier.setSuppliername(suppliername);

supplier.setEmail(email);

supplier.setNum(num);

supplier.setRemark(remark);

supplier.setUsername(username);

supplier.setWeb(web);

supplierServices.updateSupplier(supplier);

return "updateSupplier";

}

删除:

public String delSupplier() throws Exception{

supplierServices.delSupplier(id);

return "delSupplier";

}

public SupplierServices getSupplierServices() {

return supplierServices;

}

public void setSupplierServices(SupplierServices supplierServices) {

this.supplierServices = supplierServices;

}

4.1.5材料信息管理

本模块主要实现材料信息的增加、删除、修改、浏览等操作。将以前采购过的材料、将要进行采购的材料以及正在考虑采购的材料信息录入系统,便于企业查询和管理。如下图所示:

材料信息查询,如图4-13所示:

材料信息添加,需要添加材料的名称、编号、出厂日期、数量、以及备注信息,要求必须添加完整。提供重置按钮,点击后,可以重写填写,如图4-14所示:

对材料信息进行修改,及时更新材料信息,保证所有的信息都是最新状态,如图4-15所示:

 

材料模块关键代码实现:

public class ProductAction extends BaseAction{

添加:

public String addProduct() throws Exception{

TProduct product = new TProduct();

product.setProductname(productname);

product.setInputdate(inputdate);

product.setNum(num);

product.setCounts(counts);

product.setRemark(remark);

productServices.addProduct(product);

return "addProduct";

}

public String preupdateProduct() throws Exception{

TProduct product = productServices.getProduct(id);

setRequestAttribute("product",product);

return "preupdateProduct";

}

修改:

public String updateProduct() throws Exception{

TProduct product = productServices.getProduct(id);

product.setProductname(productname);

product.setInputdate(inputdate);

product.setNum(num);

product.setCounts(counts);

product.setRemark(remark);

productServices.updateProduct(product);

return "updateProduct";

}

 删除:

public String delProduct() throws Exception{

productServices.delProduct(id);

return "delProduct";

}

public ProductServices getProductServices() {

return productServices;

}

public void setProductServices(ProductServices productServices) {

this.productServices = productServices;

}

4.1.6订单信息管理

本模块主要实现对订单进行操作。系统中共设计了多种状态的订单。分别是新建采购单,审批中的采购单,审批成功的采购单,审批失败的采购单,新建退货单,审批中的退货单,审批成功的退货单,审批失败的退换单,已完成订单。新建的如下图所示:

已完成订单信息查询:

当采购员采购完成之后,由仓库管理员进行质量检验,物品质量合格之后,由采购员确认收货,订单会变为完成状态。

订单模块关键代码实现:

    public class OrderAction extends BaseAction{

为采购员获取订单数据:

public String purchaseOrder() throws Exception{

PageInfo pageInfo0 =queryOrderByStatus("('0','3')");

PageInfo pageInfo2 =queryOrderByStatus("('2')");

setRequestAttribute("pageinfo0", pageInfo0);

setRequestAttribute("pageinfo2", pageInfo2);

setRequestAttribute("searchname", this.searchname);

return "purchaseOrder";

}

为审批员获得订单:

public String approveListOrder() throws Exception{

PageInfo pageInfo0 =queryOrderByStatus("('1')");

PageInfo pageInfo2 =queryOrderByStatus("('6')");

setRequestAttribute("pageinfo0", pageInfo0);

setRequestAttribute("pageinfo2", pageInfo2);

setRequestAttribute("searchname", this.searchname);

return "approveListOrder";

}

public String storeListOrder() throws Exception{

StringBuffer cond = new StringBuffer();

if(null!=searchname&&""!=searchname.trim()){

cond.append(" and a.ordername like '%"+searchname.trim()+"%' ");

}

if(null!=getRequestParameter("flag") &&""!=getRequestParameter("flag")){

setSessionAttribute("flag", getRequestParameter("flag"));

}

if(null!=getSessionAttribute("flag") &&""!=(String)getSessionAttribute("flag")){

cond.append(" and a.status = '"+(String)getSessionAttribute("flag")+"' ");

}

int curpage = Integer.parseInt(this.getCurrentpage(ServletActionContext.getRequest()));

int pageunit = Integer.parseInt(this.getPageunit(ServletActionContext.getRequest(), "querypageunit"));

String url = "order_storeListOrder?a=a";

PageInfo pageInfo = this.orderServices.queryOrder(curpage,

pageunit, ServletActionContext.getRequest(), url, cond.toString());

setRequestAttribute("pageinfo", pageInfo);

setRequestAttribute("searchname", this.searchname);

return "storeListOrder";

}

public String addOrderForPurchase(){

try {

TOrder order = new TOrder();

order.setNum(num);

order.setOrdername(ordername);

order.setStatus("0");

TProduct product = productServices.getProduct(productid);

order.setTProduct(product);

TSupplier supplier = supplierServices.getSupplier(supplierid);

order.setTSupplier(supplier);

order.setNumb(numb);

order.setPrice(price);

order.setRemark(remark);

order.setAllprice(allprice);

order.setUsername(username);

orderServices.addOrder(order);

} catch (RuntimeException e) {

e.printStackTrace();

}

return "addOrderForPurchase";

}

public String updateOrderForPurchase() {

try {

TOrder order = this.getOrderServices().getOrder(id);

order.setNum(num);

order.setOrdername(ordername);

TProduct product = productServices.getProduct(productid);

order.setTProduct(product);

TSupplier supplier = supplierServices.getSupplier(supplierid);

order.setTSupplier(supplier);

order.setNumb(numb);

order.setPrice(price);

order.setRemark(remark);

order.setAllprice(allprice);

order.setUsername(username);

this.getOrderServices().updateOrder(order);

} catch (RuntimeException e) {

e.printStackTrace();

}

return "updateOrderForPurchase";

}

public String approveOrder() throws Exception{

TOrder order = this.getOrderServices().getOrder(id);

order.setStatus("1");

this.getOrderServices().updateOrder(order);

return "approveOrder";

}

 采购申请:

public String applyOrder() throws Exception{

TOrder order = this.getOrderServices().getOrder(id);

order.setStatus("1");

this.getOrderServices().updateOrder(order);

return "applyOrder";

}

 采购:

public String buyOrder() throws Exception{

TOrder order = this.getOrderServices().getOrder(id);

order.setStatus("4");

this.getOrderServices().updateOrder(order);

return "buyOrder";

}

 合格检查:

public String TestOrder() throws Exception{

TOrder order = this.getOrderServices().getOrder(id);

order.setStatus("5");

this.getOrderServices().updateOrder(order);

return "TestOrder";

}

 退货检查:

public String returnOrder() throws Exception{

TOrder order = this.getOrderServices().getOrder(id);

order.setStatus("6");

this.getOrderServices().updateOrder(order);

return "returnOrder";

}

 审批:

public String approveOrderForApproveList() throws Exception{

TOrder order = this.getOrderServices().getOrder(id);

order.setRemark(remark);

order.setStatus(status);

this.getOrderServices().updateOrder(order);

return "approveOrderForApproveList";

    }

  }

}

第五章  系统测试

5.1系统调试

5.1.1 程序调试

在设计系统的过程中,存在一些错误是必然的。对于语句的语法错误,在程序运行时自动提示,并请求立即纠正,因此,这类错误比较容易发现和纠正。但另一类错误是在程序执行时由于不正确的操作或对某些数据的计算公式的逻辑错误导致的错误结果。这类错误隐蔽性强,有时会出现,有时又不出现,因此,对这一类动态发生的错误的排查是耗时费力的。

5.2 程序测试

5.2.1 测试的重要性及目的

(1)测试的重要性

对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。

在实践中,软件测试的困难常常使人望而却步或敷衍了事,这是由于对测试仍然存在一些不正确的看法和错误的态度,这包括:

① 认为测试工作不如设计和编码那样容易取得进展难以给测试人员某种成就感;

② 以发现软件错误为目标的测试是非建设性的,甚至是破坏性的,测试中发现错位是对责任者工作的一种否定;

③ 测试工作枯燥无味,不能引起人们的兴趣;

④ 测试工作是艰苦而细致的工作;

⑤ 对自己编写的程序盲目自信,在发现错误后,顾虑别人对自己的开发能力的看法。

这些观点对软件测试工作是极为不利的,必须澄清认识、端正态度,才可能提高软件产品的质量。

(2)测试的目的

如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。

① 软件测试是为了发现错误而执行程序的过程;

② 测试是为了证明程序有错,而不是证明程序无错误;

③ 一个好的测试用例是在于它能发现至今未发现的错误;

④ 一个成功的测试是发现了至今未发现的错误的测试。

这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。

首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。

5.2.2 测试的步骤

与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由若干个模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成:

(1)模块测试 在这个测试步骤中所发现的往往是编码和详细设计的错误。

(2)系统测试 在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。

(3)验收测试 在这个测试步骤中发现的往往是系统需求说明书中的错误。

5.2.3 测试的主要内容

为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。

(1)单元测试

单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。

(2)集成测试

集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。

(3)确认测试

确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。

(4)系统测试

软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。

单独对系统的测试主要从以下几方面入手:

① 功能测试:测试是否满足开发要求,是否提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准。

② 强度测试及性能测试:测试系统能力最高实际限度,即软件在一些超负荷情况下功能实现的情况。

③ 安全测试:验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。针对本系统主要是对权限系统的测试和对无效数据、错数据、和非法数据干扰的能力的测试。

(1)  测试案例的内容

周期:测试时间域。

层次:测试的层面。

类型:测试的分类。

系统:测试何系统。

分系统: 测试何分系统。

模块: 测试何模块。

平台: 测试的环境。

描述: 对测试问题说明与叙述。

目的: 测试的目标与期望。

此外,还包括测试文档号、测试设置、输入条件、测试结果和期望结果。

(2) 测试案例与脚本

1)测试案例与脚本设计主要包括以下内容:

检查集成测试策略

制定测试数据目的和性能目标

找出关键测试条件

检查已有的在线测试脚本

输入或抓取在线测试脚本

检查已有的用于测试的数据

生成测试数据

检查重要的数据

执行测试数据和测试脚本

2)本系统测试案例如下:

只有系统的测试工作在用户的协助下,不断的修改,才能达到完善的预期目标。本企业采购信息管理系统系统经过初步测试,基本上达到目标。

结束语

几个月来忙碌紧张而又有条不紊的毕业设计,使我有机会对本专业的基本理论、专业知识和基本技术有了更深入的了解和体会,使我在四年中所学到的知识得到了系统的复习和升华,真正达到了学以致用。

管理信息系统是一门融管理科学、信息科学、系统科学、计算机科学与现代通信技术为一体的一门综合性学科。它是运用系统的方法以计算机和现代通信技术为基本信息处理手段和工具的,能为管理决策提供信息服务的人—机系统.它可以实现数据处理功能、预测功能、计划功能、控制功能和辅助决策功能。管理信息系统的开发是一项复杂的系统工程,必须严格的按照系统规划、系统分析、系统设计、系统实施、系统运行与评价的开发步骤来进行。

在系统开发之前,必须了解该系统的特点、适用范围以及使用者需要一个什么样的系统,以此作为基础为开发系统准确定位,然后对使用者所需实现的功能进行分析总结,根据使用者的实际要求来给系统设计一个初步方案。系统的开发不仅是要实现对数据处理的及时与正确,而且要考虑系统是否具有控制功能,及时将数据反馈给操作者,以进行监测和协调,保证系统的正常运行;也要考虑是否具有预测功能,运用一定的数学方法利用历史的数据对未来进行预测的工作。

在设计的过程中,我掌握了很多JSP的编程知识,并对这种成熟并广泛应用的技术进行了深入的学习。设计的过程也是一个再学习的过程,在遇到问题的时候我尽量自己想办法解决,这在很大程度上激发了我们的自学能力;在没有办法解决的情况下,认真的向老师请教,从老师那里我学到了很多的知识,老师对我的指导起到了画龙点睛的作用。

以往我们曾经有过多次设计的体会,但只是设计一个模块或一个小系统,而这一次毕业设计是综合所学的管理和计算机的知识来设计一个适合运行管理的企业采购信息管理系统。要想设计使用户满意,就需要我们付出更多的努力。我在设计中经常出现一些问题不知该如何解决,在此时许多同学给予了我帮助。在设计的过程中增加了于实际接触的机会,不仅培养了我的自学和编程能力,让我在即将离开学校进入社会之前有了一定的资本,提高了我与人沟通的能力。

在我的程序设计过程中,我充分的体会到了“实践出真知”这一点,书本上的知识是不够的,只有把理论与实践相结合才能够真正的学到知识。一个管理信息系统的设计,不可能一步到位,还需要不断的完善和补充。同时,系统中还存在许多问题,有待在日后的使用中发现和解决。编程前的深思熟虑是减少程序调试工作量的重要方法,只有进行充分考虑,才会减少调试过程中的工作量。虽然在开始写程序之前我们做了多的准备工作,但在真正的写程序时仍然发现许多问题,有些问题是分析时的疏漏,有些则是如果不做无论如何也想不到的。所以我需要在日后进行更多的经验积累。

毕业设计是我人生一笔宝贵的财富。我会把它当做人生的成功基石,日后不断的进行努力,提高自己,逐步走向成功。