当前位置: 首页 > news >正文

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

目录

 

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

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

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

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

相关文章:

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

目录 摘 要 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 系统开发步骤 第二…...

Overleaf编译运行时间太长,国内如何支付升级Overleaf高级账户?

大家好&#xff0c;我是『扑扑特桔』 最近为了赶论文&#xff0c;我一直在 Overleaf 上忙活。 但是因为论文里面图片比较多&#xff0c;因此在某一次编译的时候&#xff0c;突然就提示编译超时。 主要是因为用的是免费版本的Overleaf&#xff0c;对编译时长有限制&#xff0c…...

UE5喷涂功能

许多FPS/TPS 游戏都有喷涂、涂鸦功能 其实原理很简单&#xff0c;就是利用了延迟贴花实现的 我们从网上随便找一张图 创建一个材质&#xff0c;材质域选择延迟贴花 混合模式选择半透明&#xff0c;自发光强度可以看感觉调整 材质做好之后编译保存&#xff0c;新建一个Actor…...

Unity局部和世界坐标系相互转换的实现原理

注&#xff1a;本篇是基于唐老师的学习视频做的一些理论实践&#xff0c;需要提前知道一些线性代数的基础知识&#xff0c;原视频链接&#xff1a; 8.数学基础知识学习说明_哔哩哔哩_bilibili 前期准备&#xff1a; 知识点①&#xff1a; Unity中需要遵守的设定&#xff1a;…...

MySQL通用语法 -DDL、DML、DQL、DCL

SQL 全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了 一套操作关系型数据库统一标准 。 SQL通用语法 MySQL语言的通用语法。 SQL语句可以单行或多行书写&#xff0c;以分号结尾。SQL语句可以使用空格/缩进来增强…...

C# 6.0 连接elasticsearch数据库

在 C# 6.0 中连接 Elasticsearch 数据库,您可以使用官方的 Elasticsearch 客户端库 NEST。NEST 是一个高性能的 .NET 客户端,用于与 Elasticsearch 进行交互。以下是一个详细的步骤指南,帮助您在 C# 6.0 项目中连接和操作 Elasticsearch。 1. 安装 NEST 包 首先,您需要在您…...

占个坑:利用工作以外的时间,用numpy实现MLP-手写识别

背景 随着近半年的正式工作&#xff0c;一直在做的都是模型后处理相关的&#xff0c;逐渐意识到技术的自我迭代陷入了瓶颈。组里都是搞模型的&#xff0c;对于缺少模型背景的我&#xff0c;很难深刻理解同事将模型和业务结合时好的idear&#xff0c;这使得我难以掌握组里最核心…...

抽象之诗:C++模板的灵魂与边界

引言 在计算机科学的浩瀚长河中&#xff0c;C模板如同一颗璀璨的星辰&#xff0c;以其独特的泛型编程方式为程序设计注入了灵魂。它是抽象的艺术&#xff0c;是类型的舞蹈&#xff0c;是效率与灵活性的交响乐。模板不仅是一种技术工具&#xff0c;更是一种哲学思考&#xff0c…...

后端统一接口返回状态【初步模板】

后端统一接口返回状态【模板】 文章目录 后端统一接口返回状态【模板】1 .Result类编写2 .Constants类编写3 .更改Controller层下的类return格式 开发过程中&#xff0c;每个接口的返回格式设计都是一样的&#xff0c;这样可以大大提高开发效率。 项目结构如下图&#xff1a;分…...

呼入机器人:24小时客户服务的未来趋势

呼入机器人&#xff1a;24小时客户服务的未来趋势 作者&#xff1a;开源大模型智能呼叫中心系统FreeAICC&#xff0c;Github&#xff1a;https://github.com/FreeIPCC/FreeAICC 在当今快节奏的商业环境中&#xff0c;客户服务已成为企业竞争的核心要素之一。随着人工智能技术…...

whisper.cpp: PC端测试 -- 电脑端部署音频大模型

whisper.cpp: PC端测试 1.环境需要2.构建项目3.PC测试 1.环境需要 以下是经实验验证可行的环境参考&#xff0c;也可尝试其他版本。 &#xff08;1&#xff09;PC&#xff1a;Ubuntu 22.04.4 &#xff08;2&#xff09;软件环境&#xff1a;如下表所示 工具版本安装Anacond…...

WPF ControlTemplate 控件模板

区别于 DataTemplate 数据模板&#xff0c;ControlTemplate 是控件模板&#xff0c;是为自定义控件的 Template 属性服务的&#xff0c;Template 属性类型就是 ControlTemplate。 演示&#xff0c; 自定义一个控件 MyControl&#xff0c;包含一个字符串类型的依赖属性。 pub…...

序列化和反序列化(一)

因为通过这段时间的学习&#xff0c;发现&#xff0c;序列化和反序列化的考点和漏洞在平时遇到的还是比较多的&#xff0c;而且自己也没有特别去学习过这个知识点&#xff0c;所以在这里写一篇关于这里序列化和反序列话的博客&#xff0c;废话就停止在这里了。 在介绍具体的序列…...

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版) 文章目录 Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)一.环境准备1.服务器准备2.环境配置3.设置主机名4.修改国内镜像源地址5.配置时间同步6.配置内核转发及网桥过滤二.容器运行时Containerd安装(所有节点)…...

取子串(指针)

#include <stdio.h> #include <string.h>char* substr(char *s, int startloc, int len) {static char result[51]; // 定义一个足够大的静态数组来存储结果static char result1[] {N,U,L,L,\0};int i, j;// 检查startloc是否在字符串的范围内if (startloc < 1…...

Linux系列之如何更换Centos yum源?

系列博客专栏&#xff1a; JVM系列博客专栏SpringBoot系列博客 环境 Centos7Xshell7 问题描述 最近安装了一个虚拟机&#xff0c;准备用来学习&#xff0c;不过使用yum命令安装一些软件&#xff0c;不过使用这个命令时候&#xff0c;提示 Cannot find a valid baseurl fo…...

过滤器和拦截器的区别详解

文章目录 过滤器和拦截器的区别详解1. 来源不同2. 触发时机不同3. 实现原理不同4. 支持的项目类型不同5. 使用场景不同6. 核心区别总结**总结** 过滤器和拦截器的区别详解 在 Web 开发中&#xff0c;过滤器&#xff08;Filter&#xff09; 和 拦截器&#xff08;Interceptor&a…...

centos使用mkisofs构建无人值守镜像(附官方学习文档)

安装mkisofs yum install -y mkisofs 挂载镜像并确认 并拷贝文件(/mnt 为我们的工作目录) 1.3 准备自动应答文件(保存为 ins.ks) 修改系统引导 实际上就是添加inst.ks 这个引导参数 传递应答文件 传统模式引导 UEFI模式引导 打包镜像 通用选项 -v&#xff1a;启用详细模式&a…...

Pyside6+qml+Qtcreator项目实战

Pyside6+qml+Qtcreator项目实战 B站视频教程,进去后记得点赞。最终运行效果: PYTHON and QT QUICK - Custom Buttons With QML And JavaScript - [MODERN GUI]-#012 开发环境: 1、Qt 6.7.2 2、Pyside6 3、Python 3.11.4 4、Windows 10 原视频是用的Qt5,我这里采用Qt6重新…...

秒鲨后端之MyBatis【1】环境的搭建和核心配置文件详解

​ 别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! Mybatis简介 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff…...

编译原理复习---目标代码生成

适用于电子科技大学编译原理期末考试复习。 1. 目标代码 是目标机器的汇编代码或机器码&#xff0c;在本课程中指的是类似于汇编代码的一种形式&#xff0c;由一条条的指令构成目标代码。 抽象机指令格式&#xff1a;OP 目的操作数&#xff0c;源操作数。 我们要做的&…...

Winnows基础(2)

Target 了解常见端口及服务&#xff0c;熟练cmd命令&#xff0c;编写简单的 .bat 病毒程序。 Trail 常见服务及端口 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主机管理系统登陆&#xff08;国外用的…...

酒蒙子骰子小程序系统

酒蒙子流量变现小程序小游戏 后端tp8 前端uniapp 会员变现 分销推广 流量主 …...

网络安全防范

实践内容 学习总结 PDR&#xff0c;$$P^2$$DR安全模型。 防火墙&#xff08;Firewall&#xff09;&#xff1a; 网络访问控制机制&#xff0c;布置在网际间通信的唯一通道上。 不足&#xff1a;无法防护内部威胁&#xff0c;无法阻止非网络传播形式的病毒&#xff0c;安全策略…...

重拾设计模式--组合模式

文章目录 1 、组合模式&#xff08;Composite Pattern&#xff09;概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式&#xff08;Composite Pattern&#xff09;概述 定义&#xff1a;组合模式是一种结构型设计模式&#xff0c;它允许你将对象组合成…...

红米Note 9 Pro5G刷小米官方系统

前言 刷机有2种方式&#xff1a;线刷 和 卡刷。 线刷 线刷&#xff1a;需要用电脑刷机工具&#xff0c;例如&#xff1a;XiaoMiFlash.exe&#xff0c;通过电脑和数据线对设备进行刷机。 适用场景&#xff1a; 系统损坏无法开机。恢复官方出厂固件。刷机失败导致软砖、硬砖的…...

渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)

本文是高级前端加解密与验签实战的第6篇文章&#xff0c;本系列文章实验靶场为Yakit里自带的Vulinbox靶场&#xff0c;本文讲述的是绕过RSA加密来爆破登录。 分析 这里的代码跟上文的类似&#xff0c;但是加密的公钥是通过请求服务端获取的 http://127.0.0.1:8787/crypto/js/…...

踩准智能汽车+机器人两大风口,速腾聚创AI+机器人应用双线爆发

日前&#xff0c;RoboSense速腾聚创交出了一份亮眼的Q3财报。受到多重利好消息影响&#xff0c;其股价也应势连续大涨。截止12月9日发稿前&#xff0c;速腾聚创股价近一个月内累计涨幅已超88%。 财务数据方面&#xff0c;速腾聚创在今年前三季度实现总收入约11.3亿元&#xff0…...

YOLOv8全解析:高效、精准的目标检测新时代——创新架构与性能提升

目录 前言 一、模型介绍 二、网络结构 Backbone改进 特征增强网络(neck) 检测头(head) 其它部分 三、Loss计算 四、性能表现 五、YOLOv8使用详解 添加模型 其它部分 创建数据集 数据标注 模型训练 模型预测 六、YOLOv8总结 前言 YOLO&#xff08;You Only Lo…...

【Python】使用Selenium 操作浏览器 自动化测试 记录

【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等-CSDN博客文章浏览阅读389次。【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691?spm1001.2014.3001.5501【学习记录】浏览器指纹相关学习记录&am…...