基于C#和SQL SERVER的汽车配件仓储管理系统

magipige

发布日期: 2018-09-26 18:38:29 浏览量: 572
评分:
star star star star star star star_border star_border star_border star_border
*转载请注明来自write-bug.com

摘 要

汽车配件信息管理网站建设是汽车配件信息进行有效管理的重要工具。本次设计以建设汽车配件信息管理网站为目标,同时结合现今对信息管理相关网站建设方面的需求,建设相关后台数据库及相应的交互性界面。

为了实现有效率的对汽车配件信息进行管理,本论文以网站建设为主体架构,详细的介绍了汽车配件信息管理网站的需求,具体描述了整个网站的开发过程,分析了汽车配件信息管理网站的功能。并以业务流程图的形式详细的介绍了系统的各个功能的模块及各个模块的数据库表,并详细的记录了各个功能测试的情况信息。对于汽车配件管理系统迅速发展的信息化时代,通过规范、统一的网站式管理对相关信息进行整合,不仅方便了管理,而且提高了工作效率。

本毕业设计的内容是设计并且实现一个汽车配件信息管理网站设计,用Microsoft Visual Studio作为开发工具,以SQLServer作为数据库,使用C#语言开发。该系统界面友好、操作简单,容易维护,适合公司管理者以及员工使用。

关键词:汽车配件信息;网站式管理;MicrosoftVisual Studio;SQL Server

Abstract

The construction site is automobile fittings information management of autoparts information to efficient management. The design of the construction ofauto parts information management website as the goal, combined with thecurrent information management related to website construction needs, theconstruction of relevant background database and the corresponding interactiveinterface.

In order to realize the efficient management of auto parts information, thewebsite construction as the main structure, detailed introduces the auto partsinformation management needs of the site, the specific description of thedevelopment process of the entire site, analysis of the auto parts information managementfunctions of the website. And the business process diagram in the form ofdetailed description of the module and each module of the system each functionof the database table, and detailed records of each function test information.In the information age, the rapid development of auto parts management systemthrough the website management standard, unified integration of relevantinformation, not only convenient management, but also improve the workEfficiency at

The content of this graduation design is to design and implement an autoparts information management website design, using Microsoft Visual Studio as adevelopment tool, using SQL as the database Server, using C# languagedevelopment. The system has a friendly interface, simple operation, easymaintenance, suitable for company managers and employees.

Key words: auto partsinformation; Web site management; Microsoft Visual Studio; SQL Server

引言

随着计算机技术的快速发展,许多企业事业单位的管理都实现了办公自动化,这种自动化管理方式不仅管理简单,而且效率非常高。为了能够高效而且有效地管理汽车配件的管理信息,汽车配件经营者提出使用计算机进行汽车配件信息的管理,使汽车配件管理科学化,最大限度地减少信息损失,提高汽车配件的利益。

使用计算机管理汽车配件相对人工记录,有很多的有点。首先,用计算机进行金额计算时速度快,可信度高。而且查询时不必要逐个查找,只需要输入相关信息就可快速得到结果。然后,汽车配件信息存储在计算机,可以作到数据的永久保存,安全可靠。最重要的是,汽车配件数据存储在计算机中,由于计算机存储容量非常大,所以清单的内容在输入电脑后,对数据的操作是非常方便的,而且避免了频繁的使用清单。

汽车部件仓储管理已经渐渐的走向稳定发展的趋势,更加具有企业化的概念,在体制上,汽车部件仓储管理已经开始慢慢的健全它的体制,对公司人员进行培训,将业务进行熟练化,这样大大的提高了汽车部件管理在世界中的发展,并且使它的地位明显的上升,也进一步的满足了大家的需求。为了更好的发展,企业渐渐的从整体中分离开来建立自己的发展模块,不断的寻求发展模式,扩大自己的经营模式。

本网站使用.net+Microsoft Visual Studio+SQL Server的组合,使用计算机浏览器实现了网站的基本功能,网站对汽车配件的信息进行管理,不但可以使用工程的、规范的管理过程,而且可以有效的提高了工作人员的工作效率,直观的、科学的管理汽车配件信息,进而完成公司的业务,这对汽车配件信息的管理的发展及信息化的管理具有极其重要的意义。

第1章 绪 论

1.1 论文背景

1.基于汽车配件管理的相关背景

汽车配件管理系统的目的是为企业提供一个计算机化的管理平台,实践企业内部科学有效的管理,促进企业管理信息化,规范化,将能使管理人员从繁琐的杂务工作中解脱出来,真正从事管理工作。

目前汽车配件销售企业大多数在其连锁店的管理还是手工进行,随着汽车配件行业的迅速发展,手工管理的种种弊端暴露无疑,给销售企业的发展带来了不必要的麻烦。为了规范企业内部管理,提高企业业务管理水平,更好的为客户服务,应采用计算机来管理汽车配件的进销存业务。

汽车部件仓储管理已经渐渐的走向稳定发展的趋势,更加具有企业化的概念,在体制上,汽车部件仓储管理已经开始慢慢的健全它的体制,对公司人员进行培训,将业务进行熟练化,这样大大的提高了汽车部件管理在世界中的发展,并且使它的地位明显的上升,也进一步的满足了大家的需求。为了更好的发展,企业渐渐的从整体中分离开来建立自己的发展模块,不断的寻求发展模式,扩大自己的经营模式。

2.数据管理技术

随着互联网发展进程的加快, 信息资源网络化成为一大潮流。与传统信息资源相比, 网络信息资源在 数量、结构、内涵、类型、载体形态、分布和传播范围、控制机制、传递手段等方面都与传统信息资源有显著的差异, 呈现出许多新的特点。这些新的特点赋予网 络环境下信息资源管理许多新的内涵。网络信息资 源管理建立在新的社会基础结构即信息网络的基础之上, 适应了信息化社会信息组织和管理的需要是一个新的生长点。

数据管理技术就是指人们对数据进行收集、组织、存储、加工、传播和利用的一系列活动的总和,经历了人工管理、文件管理、数据库管理三个阶段[4]。每一阶段的发展以数据存储冗余不断减小、数据独立性不断增强、数据操作更加方便和简单为标志,各有各的特点。其中现今就处于数据库管理为主流的阶段,节省的大量的人力资源,对于信息化网络化的现在数据库管理技术的共享性、大量数据存储显示、数据处理快速而且具有很高的安全性和完整性,其并发控制和恢复性都不会让数据轻易丢失

3..NET技术

ASP.NET是由微软在.NET Framework框架中所提供,开发Web应用程序的类库,封装在System.Web.dll文件中,显露出System.Web名字空间,并提供ASP.NET网页处理、扩充以及HTTP通道的应用程序与通信处理等工作,以及Web Service的基础架构。ASP.NET是ASP技术的后继者,但它的发展性要比ASP技术要强大许多。

ASP.NET可以运行在安装了.NET Framework的IIS服务器上,若要在非微软的平台上运行,则需要使用Mono平台[2],ASP.NET在2.0版本已经定型,在.NET Framework 3.5上则加上了许多功能,像是ASP.NET AJAX、ASP.NET MVC Framework、ASP.NET Dynamic Data与Microsoft Silverlight的服务器控件等。

很多人都把 ASP.NET 当做是一种编程语言,但它实际上只是一个由 .NET Framework提供的一种开发平台 (development platform),并非编程语言。也可认为ASP.NET是.NET组件,任何.NET语言,例如C#,可以引用该组件,创建网页或Web服务。

为了因应云化所诱发的多作业平台集成与开发能力,微软特别开发一个新一代的 ASP.NET,称为 ASP.NET vNext,并于 2014 年命名为 ASP.NET 5,但随后于 2016 年将它更名为 ASP.NET Core,由于架构上的差异颇大,因此未来 ASP.NET 与 ASP.NET Core 将是分别发展与维护,Windows 平台的 ASP.NET 4.6 以上版本仍维持 Windows Only,但 ASP.NET Core 则是具有跨平台 (Windows, Mac OSX 与 Linux) 的能力。

1.2 系统开发的意义

随着计算机技术的快速发展,许多企业事业单位的管理都实现了办公自动化,这种自动化管理方式不仅管理简单,而且效率非常高。为了能够高效而且有效地管理汽车配件的管理信息,汽车配件经营者提出使用计算机进行汽车配件信息的管理,使汽车配件管理科学化,最大限度地减少信息损失,提高汽车配件的利益。

使用计算机管理汽车配件相对人工记录,有很多的优点。首先,用计算机进行金额计算时速度快,可信度高。而且查询时不必要逐个查找,只需要输入相关信息就可快速得到结果。然后,汽车配件信息存储在计算机,可以作到数据的永久保存,安全可靠。最重要的是,汽车配件数据存储在计算机中,由于计算机存储容量非常大,所以清单的内容在输入电脑后,对数据的操作是非常方便的,而且避免了频繁的使用清单。

1.3 研究现状和发展趋势

1.研究现状

现在我国的企业特别是汽车配件企业的管理水平还停留在纸介质或半自动(由电脑处理一部分数据,由人工处理一部分数据)的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方式必然会被以计算机为基础的信息管理所取代。软件作为一项有力的工具,只能当此种工具,与我们的实践相结合起来的时候,才具有重大的社会价值及使用价值。因此根据企业目前实际的汽车配件管理系统情况开发一套汽车配件管理系统是十分有必要的。

2.发展趋势

汽车部件仓储管理已经渐渐的走向稳定发展的趋势,更加具有企业化的概念,在体制上,汽车部件仓储管理已经开始慢慢的健全它的体制,对公司人员进行培训,将业务进行熟练化,这样大大的提高了汽车部件管理在世界中的发展,并且使它的地位明显的上升,也进一步的满足了大家的需求。为了更好的发展,企业渐渐的从整体中分离开来建立自己的发展模块,不断的寻求发展模式,扩大自己的经营模式。

通过计算机进行货物的进入和销售数量的统计,使管理者不必再为统计数量而感到烦恼,可以利用节省出来的时间全身心的投入到其他事情当中,也对管理制度进行了优化和改良,集中对零部件进行统计和分配,这样不仅减少我们使用的资源,也大大的降低了我们的劳动成本,节省了财力,使管理人员更加专心的从事管理工作,使管理制度更加合理化和规范化。

1.4 论文的基本结构

此次论文详细的介绍了汽车配件信息管理网站设计及实现的过程以及相关功能解说、研究思路、思想总结等部分。着重介绍了这个网站的设计思想、技术路线、开发平台的选择、总体框架、程序流程、本网站应实现的功能以及具体的实现方法和步骤,并且讨论类似网站存在的局限性和解决的思路。其主要基本结构如下:

  • 绪论,用来详细解说该系统的背景、研究意义及研究前景。

  • 系统开发平台的介绍,用来详细介绍该系统用到的开发工具,如Microsoft VisualStudio,SQLServer。

  • 第1章是需求分析,用来分析经济、技术、操作上的可行性,重点介绍系统的功能分析、业务流程图以及ER图等。

  • 第2章是系统设计,用来详细介绍各个模块的功能,并设计数据库,展示系统界面。

  • 第3章是实现部分功能的主要代码及系统的整体及相关功能测试,用来展示系统的核心代码以及展示系统测试的效果。

第2章 系统开发工具及相关技术

本章将对本次汽车配件信息管理网站的开发平台进行简要的介绍,同时介绍在开发过程中采用的一些Ajax技术。

2.1 开发工具简介

本次网站设计主要采用的是学校中通用的软件,操作系统是Windows,主要Web端和后端的开发都是在Microsoft Visual Studio中操作实现,数据库采用的是Sql Server数据库。下面将对两个软件简要介绍:

1.Microsoft Visual Studio

Microsoft Visual Studio(简称VS)是微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括MicrosoftWindows、Windows Phone、WindowsCE、.NET Framework、.NET CompactFramework和Microsoft Silverlight。

而Visual Studio .NET是用于快速生成企业级ASP.NET Web应用程序和高性能桌面应用程序的工具。Visual Studio包含基于组件的开发工具(如Visual C#、Visual J#、VisualBasic和Visual C++),以及许多用于简化基于小组的解决方案的设计、开发和部署的其他技术。

2.Sql Server

SQL Server一开始并不是微软自己研发的产品,而是当时为了要和IBM竞争时,与Sybase合作所产生的,其最早的发展者是Sybase[1],同时微软也和Sybase合作过SQL Server 4.2版本的研发,微软亦将SQL Server 4.2移植到Windows NT(当时为3.1版),在与Sybase终止合作关系后,自力开发出SQL Server 6.0版,往后的SQL Server即均由微软自行研发。

Sql Server是一个关系数据库管理系统。具有易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。

维基百科给的解释是这样的,Microsoft SQL Server是由美国微软公司所推出关系数据库解决方案,最新的版本是SQL Server 2016,已经在2016年6月1日发布。 数据库的内置语言原本是采用美国标准局(ANSI)和国际标准组织(ISO)所定义的SQL语言,但是微软公司对它进行了部分扩充而成为作业用SQL(Transact-SQL)。几个初始版本适用于中小企业数据库管理,但是近年来它的应用范围有所扩展,已经触及到大型、跨国企业的数据库管理。

2.2 .net 平台介绍

.NET就是微软用来实现XML,Web Services,SOA(面向服务的体系结构service-oriented architecture)和敏捷性的技术。对技术人员,想真正了解什么是.NET,必须先了解.NET技术出现的原因和它想解决的问题,必须先了解为什么他们需要XML,Web Services 和 SOA。技术人员一般将微软看成一个平台厂商。微软搭建技术平台,而技术人员在这个技术平台之上创建应用系统。从这个角度,.NET也可以如下来定义:.NET是微软的新一代技术平台,为敏捷商务构建互联互通的应用系统,这些系统是基于标准的,联通的,适应变化的,稳定的和高性能的。从技术的角度,一个.NET应用是一个运行于.NET Framework之上的应用程序。(更精确的说,一个.NET应用是一个使用.NET Framework类库来编写,并运行于公共语言运行时Common Language Runtime之上的应用程序。)如果一个应用程序跟.NETFramework无关,它就不能叫做.NET程序。比如,仅仅使用了XML并不就是.NET应用,仅仅使用SOAPSDK调用一个Web Service也不是.NET应用。.NET是基于Windows操作系统运行的操作平台,应用于互联网的分布式。

2.3 相关技术

1.B/S结构

B/S结构是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。

根据实际开发的需要,位置信息管理网站设计的开发中选择了B/S结构开发web应用程序,通过浏览器访问服务器的的方式实现远程操作和数据共享。

2.Ajax技术

AJAX即“AsynchronousJavaScript and XML”(异步JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。Ajax的概念由杰西·詹姆士·贾瑞特所提出[1]。

传统的Web应用允许用户端填写表单(form),当提交表单时就向网页服务器发送一个请求。服务器接收并处理传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML码往往是相同的。由于每次应用的沟通都需要向服务器发送请求,应用的回应时间依赖于服务器的回应时间。这导致了用户界面的回应比本机应用慢得多。

与此不同,AJAX应用可以仅向服务器发送并取回必须的数据,并在客户端采用JavaScript处理来自服务器的回应。因为在服务器和浏览器之间交换的数据大量减少(大约只有原来的5%)来源请求,服务器回应更快了。同时,很多的处理工作可以在发出请求的客户端机器上完成,因此Web服务器的负荷也减少了。

类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。虽然其名称包含XML,但实际上数据格式可以由JSON代替,进一步减少数据量,形成所谓的AJAJ。而客户端与服务器也并不需要异步。一些基于AJAX的“派生/合成”式(derivative/composite)的技术也正在出现,如AFLAX。

第3章 系统需求分析

3.1 系统业务描述

根据相应的需求及对应功能的完善实现,汽车配件仓储管理网站设计业务流程主要包括以下几个方面:

  • 一级管理,通过登录界面,判定是一级管理员后,进入一级管理界面。可以查看配件信息,供应商信息,需求商信息,二管理员信息以及二级管理员的操作日志。并且可以通过切换不同的界面,可以对相应的信息进行添加,删除,修改各个部分的信息。在汽车配件信息界面,可以通过链接查看该零件的生产单位等多种操作。

  • 二级管理员管理,通过登录界面,判定是二级管理员后,进入二级管理界面。二级管理界面可以查询配件信息以及需求商的基本信息。主要进行入库/出库操作而且额外可以添加需求商户。

至此,本系统业务流程结束。

3.2 可行性分析

可行性分析应从经济可行性,技术可行性和操作可行性三个方面考虑,以下是对本系统具体的可行性分析。

1.经济可行性

利用本校现有的校园网、计算机及配套设备就可使用本系统进行配件的信息管理;对系统的使用都是简单的操作;软件系统由本人在指导老师的帮助下完成的,不要任何费用。

2.技术可行性

系统采用B/S架构,前台采用html+css+js编码实现页面的可视化与交互性,后端使用C#实现对SQL Server数据库进行数据的存储、修改、删除等操作,该数据库具有方便、灵活的特点,适应该系统的开发。本系统要求的硬件标准不高,一般的硬件设备足够运行系统。

3.操作可行性

使用汽车配件仓储管理系统网站,只需要输入网址就能进入登录界面。然后就是管理首页,主要的管理功能是一级管理员对配件信息,供应商信息,需求商信息,二级管理员信息的增、删、改、查以及对操作日志的查看。其次功能是二级管理员的查询,入库、出库操作以及添加新的需求商功能,实用简单。

综上所述,开发汽车配件仓储管理网站设计在经济上、技术上、操作上都是可行的。

3.3 功能需求分析

汽车配件仓储信息管理网站设计的使用和相关者有:

  • 一级管理员:一级管理员对配件信息,供应商信息,需求商信息,二级管理员信息的增、删、改、查以及对操作日志的查看。

  • 二级管理员:二级管理员能够对配件信息进行查询所搜,主要进行入库、出库操作。同时,可以对需求商的信息进行查询,得到是否有需求商正等待发货而进行出库,也可以添加新的需求商用户。

汽车配件仓储信息管理网站设计应该满足如下功能需求:

管理员登陆:能让管理员方便的使用密码登陆系统,从而进行一系列的操作。

  • 一级管理员可以对配件信息进行增、删、改、查,并且由该配件信息获取其生产单位的相关信息。

  • 一级管理员对供应商的信息管理。

  • 一级管理员对二级管理员的信息管理。

  • 一级管理员对需求商的信息管理。

  • 一级管理员对日志的查看。

  • 二级管理员进行出库、入库操作。

  • 二级管理员添加新的需求商。

3.4 分析模型

3.4.1 业务流程图

业务流程图(Transaction Flow Diagram, TFD)就是用一些规定的符号及连线来表示某个具体业务处理过程。是一种物理模型。业务流程图主要是描述业务走向,比如说去ATM机取款,首先得打开自助银行的门走进去,然后找到 一台ATM机,再插入卡输入相应的密码,最后钱才能出来被你取走(当然需要余额充足)。利用它可以帮助分析人员找出业务流程中的不合理流向,业务流程图描述的是完整的业务流程,以业务处理过程为中心,一般没有数据的概念。

1.数据管理

数据管理业务流程图如图3-1所示:

2.设备管理

设备管理业务流程图如图3-2所示:

3.汽车配件信息查看

汽车配件信息查看业务流程图如图3-3所示:

3.4.2 实体模型图(ER图)

E-R图也称实体-联系图(EntityRelationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

系统总ER图如图3-4所示:

管理员实体用来存储管理员的基本信息,其ER图如图3-5所示:

供应单位实体用来存储供应单位的相关信息,其ER图如图3-6所示:

需求单位实体用来存储需求单位的相关信息,其ER图如图3-7所示:

汽车配件实体存储汽车配件的相关信息,其ER图如图3-8所示:

操作日志实体存储相关操作的信息,其ER图如图3-9所示:

3.4.3 系统用例图

1.总用例图

总用例图如图3-10所示:

2.子用例图

一级管理员配件信息管理如图3-11所示:

二级管理员配件信息管理如图3-12所示:

第4章 系统设计

4.1概要设计

系统的各部分功能模块独立开发、调试,然后利用系统集成的方法将各个模块信息传入数据库。各个功能模块采用事件驱动的方式 与应用程序进行交互,系统部分程序的应用执行是在后台进行的。汽车配件仓储管理网站设计的系统总体结构设计如图4-1所示。

各模块的结构:

1.二级管理员管理模块:

该模块有如下功能:二级管理员可添加需求商信息,并且可以对汽车配件进行出库入库操作。其模块功能图如图4-2所示:

2.一级管理员管理模块:

该模块有如下功能:一级管理员可对该模块进行管理,可以查看所有汽车配件,供应商,需求商,管理员的信息,并且可以对信息进行添加,修改,删除,而且可以查看日志信息。其模块功能图如图4-3所示:

4.2 数据库设计

通过以上的对网站的综合分析,本网站选择SQL Server作为网站的数据库,数据库中包括管理员信息、供应商基本信息、需求商基本信息、二级管理员信息、操作日志信息。

管理员信息表

表名:Users 备注:管理员信息表
字段名称 数据类型 自增主键 允许为空 默认值
UserId int
UserName nvarchar(50)
Password nvarchar(50)
Type nvarchar(50)
LoginTime Datetime
Department nvarchar(50)

汽车配件信息表

表名:CarParts 备注:汽车配件信息表
字段名称 数据类型 自增主键 允许为空 默认值
PartId int
PartName nvarchar(50)
FromDepartId nvarchar(50)
Num nvarchar(50)
InTime Datetime
UnitPrice decimal(18, 2)
Quantity int

供应单位信息表

表名: Supplies 备注:供应商信息表
字段名称 数据类型 自增主键 允许为空 默认值
Id int
Name nvarchar(50)
Principal nvarchar(50)
Address nvarchar(50)
Phone nvarchar(50)
Ways nvarchar(50)
Num nvarchar(50)

供应单位信息表

表名: NeedMerchant 备注:需求商信息表
字段名称 数据类型 自增主键 允许为空 默认值
Id int
Num nvarchar(50)
Name nvarchar(50)
Principal nvarchar(50)
Phone nvarchar(50)
IsDeliver bit
Address nvarchar(50)
NeedPartName nvarchar(50)
NeedNum int

操作日志信息表

表名: Log 备注:操作日志信息表
字段名称 数据类型 自增主键 允许为空 默认值
Id int
Operator nvarchar(50)
Time Datetime
Details Nverchar(1000)
Type nvarchar(50)
IP nvarchar(50)

4.3 功能模块设计流程图

位置信息管理网站设计其功能已详细介绍,本节将详细介绍各个功能模块的设计流程图。其中登录界面程序流程图,如图4-9所示:

网站中很多功能都涉及到修改数据,修改数据信息主要是实现前端数据与后台数据库的交互,以ID为判断条件将修改后的信息用SQL语句调用数据库修改相应的数据,刷新数据库及相应页面,显示数据库的信息。修改数据流程图如图4-11所示,

删除数据信息,实现主要是根据删除按钮或是全选删除按钮的点击事件获取相应的要删除信息的ID,然后根据ID利用SQL语句删除数据库中的数据,更新数据库。删除程序主要流程图,如图4-12所示:

增加数据信息的功能主要是将表单中的数据提交到后台数据库中,在由后台对数据做相应的判断,若不符合要求,则显示增加不成功,不保存到数据库,否则将数据保存到相应数据库。增加数据信息的程序流程图,如图4-14所示:

4.4 软件界面设计

本节将系统展示位置信息管理网站设计完成后页面的完成情况,及大致的布局。其中登录界面如图4-16所示:









第5章 系统编码与测试

5.1 系统编码

1.数据库连接代码

  1. <add name="MainConn"connectionString="server=.;database=CarParts;user=sa;pwd=0301;Max Pool Size=512;" provider Name="System.Data.SqlClient"/>

2.登录界面核心代码

  1. <form>
  2. <label for="username">用户名</label>
  3. <input name="username" type="text" placeholder="请输入用户名" id="name"/>
  4. <label for="pass">密码</label>
  5. <input name="pass" type="password" placeholder="请输入密码" id="password"/>
  6. <input value="登录" id="submit" />
  7. </form>

3.登录后台核心代码

  1. using System.Data;
  2. using System.Data.SqlClient;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Web;
  6. using System.Web.SessionState;
  7. namespace WebApp
  8. {
  9. /// <summary>
  10. /// LoginHandler 的摘要说明
  11. /// </summary>
  12. public class LoginHandler : IHttpHandler, IRequiresSessionState
  13. {
  14. public void ProcessRequest(HttpContext context)
  15. {
  16. context.Response.ContentType = "text/plain";
  17. //获取用户名和密码
  18. string name = context.Request["name"];
  19. string password = context.Request["password"];
  20. //获取数据库数据,放置在ds中
  21. StringBuilder sb = new StringBuilder();
  22. sb.AppendLine("SELECT TOP 1 UserId,UserName,Password,Type,LoginTime,Department ");
  23. sb.AppendLine("FROM Users");
  24. sb.AppendLine("WHERE UserName = @UserName AND Password = @Password; ");
  25. SqlParameter[] pms = {
  26. new SqlParameter("@UserName",SqlDbType.NVarChar,50),
  27. new SqlParameter("@Password",SqlDbType.NVarChar,50)
  28. };
  29. pms[0].Value = name;
  30. pms[1].Value = password;
  31. DataSet ds = DbHelperSQL.Query(sb.ToString(),pms);
  32. //判断表中是否存在数据,如果有数据则登录成功,如果没有数据,则登录失败
  33. if (ds.Tables[0].Rows.Count > 0)
  34. {
  35. //根据判断选择进入哪个主页,无论进来的管理员或者是普通用户都记录下操作者的ID,方便记录日志
  36. if (ds.Tables[0].Rows[0]["Type"].ToString() == "1")
  37. {
  38. context.Session["Id"] = ds.Tables[0].Rows[0]["UserId"].ToString();
  39. context.Session["LoginTime"] = DateTime.Now.ToString();
  40. context.Response.Write("ok1:登录成功");
  41. }
  42. else
  43. {
  44. context.Session["Id"] = ds.Tables[0].Rows[0]["UserId"].ToString();
  45. context.Session["LoginTime"] = DateTime.Now.ToString();
  46. context.Response.Write("ok2:登录成功");
  47. }
  48. }
  49. //验证失败弹出提示框
  50. else
  51. {
  52. context.Response.Write("用户名或密码错误,请重新登录");
  53. }
  54. }
  55. public bool IsReusable
  56. {
  57. get
  58. {
  59. return false;
  60. }
  61. }
  62. }
  63. }

4.一级管理员首页界面前端核心代码

  1. <div class="easyui-layout" style="width:960px; height:800px;margin:50px auto;">
  2. <%--采用easy-ui布局--%>
  3. <%--头部导航--%>
  4. <div data-options="region:'north',border:false" class="top_bar">
  5. <h1>汽车仓储管理系统</h1>
  6. </div>
  7. <%--头部导航结束--%>
  8. <%--左侧的切换选择--%>
  9. <div data-options="region:'west',split:true,title:'信息总览'" class="left_nav">
  10. <ul class="main_nv">
  11. <li class="nv_item"><a href="javascript:void(0)" class="linkToPage" url="InfoPage/PartsInfo.aspx">配件信息</a></li>
  12. <li class="nv_item"><a href="javascript:void(0)" class="linkToPage" url="InfoPage/Supplies.aspx">供应商信息</a></li>
  13. <li class="nv_item"><a href="javascript:void(0)" class="linkToPage" url="InfoPage/NeedMerchant.aspx">需求商信息</a></li>
  14. <li class="nv_item"><a href="javascript:void(0)" class="linkToPage" url="InfoPage/Manager.aspx">管理员信息</a></li>
  15. <li class="nv_item"><a href="javascript:void(0)" class="linkToPage" url="InfoPage/Log.aspx">操作日志</a></li>
  16. </ul>
  17. </div>
  18. <%--左侧的切换选择结束--%>
  19. <%--底部标注信息--%>
  20. <div data-options="region:'south',border:false" class="bottom_bar">
  21. <h3>此系统仅供本公司人员使用</h3>
  22. </div>
  23. <%--底部标注信息结束--%>
  24. <%--核心内容展示区域--%>
  25. <div data-options="region:'center',title:'信息管理'" class="right">
  26. <div class="easyui-tabs" style="width:700px;height:250px;" class="right" fit="true" id="tt">
  27. <div title="配件信息" style="padding:10px;overflow:hidden;"class="right">
  28. <iframe src="InfoPage/PartsInfo.aspx" scrolling="no" width="100%" height="100%" frameborder="0"></iframe>
  29. </div>
  30. </div>
  31. </div>
  32. <%--核心内容展示区域结束--%>
  33. </div>

5.二级管理员首页界面核心代码

  1. <h1 class="top_title" style="margin-bottom:100px;text-align:center;">汽车配件的出库/入库</h1>
  2. <form id="form1" runat="server">
  3. <div>
  4. <%--<asp:Button ID="btnAdd" runat="server" Text="添加" />--%>
  5. <%---------------------------------需求商信息--------------------------------------------------%>
  6. <asp:GridView ID="gvNeedMer" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" AllowPaging="True" OnPageIndexChanging="gvParts_PageIndexChanging">
  7. <Columns>
  8. <asp:CheckBoxField DataField="IsDeliver" HeaderText="已发货" />
  9. <asp:BoundField DataField="Num" HeaderText="编号" />
  10. <asp:TemplateField HeaderText="单位名称">
  11. <ItemTemplate>
  12. <a id="linkToPartInfoEdit" target="_blank" href="javascript:linkToPart(<%# Eval("Id") %>)">
  13. <%#Eval("Name") %>
  14. </a>
  15. </ItemTemplate>
  16. </asp:TemplateField>
  17. <asp:BoundField DataField="Principal" HeaderText="负责人" />
  18. <asp:BoundField DataField="Address" HeaderText="地址" />
  19. <asp:BoundField DataField="Phone" HeaderText="联系电话" />
  20. <asp:TemplateField HeaderText="添加">
  21. <ItemTemplate>
  22. <input type="button" id="btnAdd" value="添加"/>
  23. </ItemTemplate>
  24. </asp:TemplateField>
  25. </Columns>
  26. <%--添加分页--%>
  27. <PagerTemplate>
  28. 当前第:
  29. <%--//((GridView)Container.NamingContainer)就是为了得到当前的控件--%>
  30. <asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"></asp:Label>
  31. 页/共:
  32. <%-- //得到分页页面的总数--%>
  33. <asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label>
  34. <%--//如果该分页是首分页,那么该连接就不会显示了.同时对应了自带识别的命令参数CommandArgument--%>
  35. <asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page"
  36. Visible='<%#((GridView)Container.NamingContainer).PageIndex != 0 %>'>首页</asp:LinkButton>
  37. <asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev"
  38. CommandName="Page" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'>上一页</asp:LinkButton>
  39. <%--//如果该分页是尾页,那么该连接就不会显示了--%>
  40. <asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page"
  41. Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>下一页</asp:LinkButton>
  42. <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page"
  43. Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>尾页</asp:LinkButton>
  44. 转到第
  45. <asp:TextBox ID="txtNewPageIndex" runat="server" Width="20px" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>'/>页
  46. <%--//这里将CommandArgument即使点击该按钮e.newIndex 值为3--%>
  47. <asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-2"
  48. CommandName="Page" Text="Go"/>
  49. </PagerTemplate>
  50. </asp:GridView>
  51. <%---------------------------------需求商信息结束--------------------------------------------------%>
  52. <%---------------------------------配件信息表--------------------------------------------------%>
  53. <div class="input_info" style="width:620px;margin:15px auto;color:white;">
  54. <span>操作类型:</span>
  55. <asp:DropDownList ID="ddlType" runat="server">
  56. <asp:ListItem>入库</asp:ListItem>
  57. <asp:ListItem>出库</asp:ListItem>
  58. </asp:DropDownList>
  59. <span>编号:</span>
  60. <asp:TextBox runat="server" ID="txtNum"></asp:TextBox>
  61. <span>数量:</span>
  62. <asp:TextBox runat="server" ID="txtQuantity"></asp:TextBox>
  63. <div class="direction">
  64. <span>需求商编号:</span>
  65. <asp:TextBox runat="server" ID="txtNeedMerchant"></asp:TextBox>
  66. </div>
  67. <asp:Button runat="server" Text="确认" ID="btnConfirm" OnClick="btnConfirm_Click"></asp:Button>
  68. </div>
  69. <asp:GridView ID="gvParts" runat="server" DataKeyNames="PartId" AutoGenerateColumns="False" AllowPaging="True" OnPageIndexChanging="gvParts_PageIndexChanging">
  70. <Columns>
  71. <asp:BoundField DataField="Num" HeaderText="编号" />
  72. <asp:BoundField DataField="PartName" HeaderText="名称" />
  73. <asp:BoundField DataField="Name" HeaderText="生产单位" />
  74. <asp:BoundField DataField="InTime" HeaderText="入库时间" />
  75. <asp:BoundField DataField="Quantity" HeaderText="数量" />
  76. <asp:BoundField DataField="UnitPrice" HeaderText="单价" />
  77. </Columns>
  78. <%--添加分页--%>
  79. <PagerTemplate>
  80. 当前第:
  81. <%--//((GridView)Container.NamingContainer)就是为了得到当前的控件--%>
  82. <asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"></asp:Label>
  83. 页/共:
  84. <%-- //得到分页页面的总数--%>
  85. <asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label>
  86. <%--//如果该分页是首分页,那么该连接就不会显示了.同时对应了自带识别的命令参数CommandArgument--%>
  87. <asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page"
  88. Visible='<%#((GridView)Container.NamingContainer).PageIndex != 0 %>'>首页</asp:LinkButton>
  89. <asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev"
  90. CommandName="Page" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'>上一页</asp:LinkButton>
  91. <%--//如果该分页是尾页,那么该连接就不会显示了--%>
  92. <asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page"
  93. Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>下一页</asp:LinkButton>
  94. <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page"
  95. Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>尾页</asp:LinkButton>
  96. 转到第
  97. <asp:TextBox ID="txtNewPageIndex" runat="server" Width="20px" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>'/>页
  98. <%--//这里将CommandArgument即使点击该按钮e.newIndex 值为3--%>
  99. <asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-2"
  100. CommandName="Page" Text="Go"/>
  101. </PagerTemplate>
  102. </asp:GridView>
  103. </div>
  104. </form>

6.二级管理员首页后台核心代码

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (!IsPostBack)
  4. {
  5. BindData();
  6. }
  7. }
  8. //绑定gvParts和gvNeed
  9. public void BindData()
  10. {
  11. //查询数据
  12. StringBuilder sb = new StringBuilder();
  13. sb.AppendLine("SELECT C.PartId,C.Num,C.PartName,S.Name,C.InTime,C.Quantity,C.UnitPrice");
  14. sb.AppendLine("FROM CarParts AS C INNER JOIN Supplies AS S");
  15. sb.AppendLine("ON C.FromDepartId = S.Id;");
  16. DataSet ds = DbHelperSQL.Query(sb.ToString());
  17. //将数据绑定到gvParts上展示
  18. gvParts.DataSource = ds.Tables[0];
  19. gvParts.DataBind();
  20. //查询数据并绑定显示,绑定需求商表
  21. string sql = "SELECT Id,IsDeliver,Num,Name,Principal,Address,Phone FROM NeedMerchant;";
  22. DataSet dsNeed = DbHelperSQL.Query(sql);
  23. gvNeedMer.DataSource = dsNeed;
  24. gvNeedMer.DataBind();
  25. }
  26. //分页
  27. protected void gvParts_PageIndexChanging(object sender, GridViewPageEventArgs e)
  28. {
  29. // 得到该控件
  30. GridView theGrid = sender as GridView;
  31. int newPageIndex = 0;
  32. if (e.NewPageIndex == -3)
  33. {
  34. //点击了Go按钮
  35. TextBox txtNewPageIndex = null;
  36. //GridView较DataGrid提供了更多的API,获取分页块可以使用BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRow
  37. GridViewRow pagerRow = theGrid.BottomPagerRow;
  38. if (pagerRow != null)
  39. {
  40. //得到text控件
  41. txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox;
  42. }
  43. if (txtNewPageIndex != null)
  44. {
  45. //得到索引
  46. newPageIndex = int.Parse(txtNewPageIndex.Text) - 1;
  47. }
  48. }
  49. else
  50. {
  51. //点击了其他的按钮
  52. newPageIndex = e.NewPageIndex;
  53. }
  54. //防止新索引溢出
  55. newPageIndex = newPageIndex < 0 ? 0 : newPageIndex;
  56. newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount - 1 : newPageIndex;
  57. //得到新的值
  58. theGrid.PageIndex = newPageIndex;
  59. //重新绑定
  60. BindData();
  61. }
  62. protected void btnConfirm_Click(object sender, EventArgs e)
  63. {
  64. //为操作日志做好准备
  65. //获取输入编号数量和出库方向
  66. string Num = txtNum.Text;
  67. int Quantity = Convert.ToInt32(txtQuantity.Text);
  68. string NeederNum = txtNeedMerchant.Text;
  69. //根据写入的编号获取配件的名称
  70. string sqlGetPName = "Select PartName from CarParts where Num = @Num;";
  71. SqlParameter[] pmsGetPName = {
  72. new SqlParameter("@Num",SqlDbType.NVarChar,50),
  73. };
  74. pmsGetPName[0].Value = Num;
  75. DataSet dsGetPName = DbHelperSQL.Query(sqlGetPName, pmsGetPName);
  76. string pName = dsGetPName.Tables[0].Rows[0]["PartName"].ToString();
  77. //根据写入的编号获取需求商的名称
  78. string nName = "";
  79. if (NeederNum != "")
  80. {
  81. string sqlGetNName = "Select Name from NeedMerchant where Num = @Num;";
  82. SqlParameter[] pmsGetNName = {
  83. new SqlParameter("@Num",SqlDbType.NVarChar,50),
  84. };
  85. pmsGetNName[0].Value = NeederNum;
  86. DataSet dsGetNName = DbHelperSQL.Query(sqlGetNName, pmsGetNName);
  87. nName = dsGetNName.Tables[0].Rows[0]["Name"].ToString();
  88. }
  89. //获取用户登录的Id,并获取登录用户的相关信息
  90. int id = Convert.ToInt32(Session["Id"]);
  91. DateTime date = Convert.ToDateTime(Session["LoginTime"]);
  92. if (id == 0)
  93. {
  94. id = 2;
  95. }
  96. string sqlUsers = "Select UserName,Department from Users where UserId = @id;";
  97. SqlParameter[] pms = {
  98. new SqlParameter("@id",SqlDbType.Int),
  99. };
  100. pms[0].Value = id;
  101. DataSet ds = DbHelperSQL.Query(sqlUsers,pms);
  102. string type = ddlType.SelectedValue;
  103. //插入日志列表
  104. string sqlInsertLog = "insert into Log(Operator,Department,Type,Details,Time,IP)" +
  105. " Values(@Operator,@Department,@Type,@Details,getDate(),@IP)";
  106. SqlParameter[] pmsInsertLog = {
  107. new SqlParameter("@Operator",SqlDbType.NVarChar,50),
  108. new SqlParameter("@Department",SqlDbType.NVarChar,50),
  109. new SqlParameter("@Type",SqlDbType.NVarChar,50),
  110. new SqlParameter("@Details",SqlDbType.NVarChar,50),
  111. new SqlParameter("@IP",SqlDbType.NVarChar,50)
  112. };
  113. pmsInsertLog[0].Value = ds.Tables[0].Rows[0]["UserName"];
  114. pmsInsertLog[1].Value = ds.Tables[0].Rows[0]["Department"];
  115. pmsInsertLog[2].Value = type;
  116. if (type == "入库")
  117. {
  118. pmsInsertLog[3].Value = Num + pName + type + Quantity + "件";
  119. }
  120. else
  121. {
  122. pmsInsertLog[3].Value = Num + pName + type + "至" + nName + Quantity + "件";
  123. }
  124. pmsInsertLog[4].Value = GetIP();
  125. DbHelperSQL.ExecuteSql(sqlInsertLog,pmsInsertLog);
  126. //根据下拉选择不同,有出库和入库两个选择,然后进行不同的操作
  127. //入库操作
  128. if (ddlType.SelectedValue == "入库")
  129. {
  130. //更改数据库数据
  131. string sql = "update CarParts set Quantity = Quantity + @Quantity where Num = @Num";
  132. SqlParameter[] pms2 = {
  133. new SqlParameter("@Quantity",SqlDbType.Int),
  134. new SqlParameter("@Num",SqlDbType.NVarChar,50)
  135. };
  136. pms2[0].Value = Quantity;
  137. pms2[1].Value = Num;
  138. DbHelperSQL.ExecuteSql(sql,pms2);
  139. //插入操作日志
  140. Response.Redirect("Index2.aspx");
  141. }
  142. //出库操作
  143. else
  144. {
  145. string sql = "update CarParts set Quantity = Quantity - @Quantity where Num = @Num";
  146. SqlParameter[] pms1 = {
  147. new SqlParameter("@Quantity",SqlDbType.Int),
  148. new SqlParameter("@Num",SqlDbType.NVarChar,50)
  149. };
  150. pms1[0].Value = Quantity;
  151. pms1[1].Value = Num;
  152. DbHelperSQL.ExecuteSql(sql, pms1);
  153. //更改需求商的是否发货状态
  154. string sqlUpdate = "update NeedMerchant set IsDeliver = 'True' where Num = @NeedNum;";
  155. SqlParameter[] pars = {
  156. new SqlParameter("@NeedNum",SqlDbType.NVarChar,50)
  157. };
  158. pars[0].Value = NeederNum;
  159. DbHelperSQL.ExecuteSql(sqlUpdate,pars);
  160. Response.Redirect("Index2.aspx");
  161. }
  162. }
  163. //获取Ip
  164. public string GetIP()
  165. {
  166. string result = String.Empty;
  167. result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  168. if (string.IsNullOrEmpty(result))
  169. {
  170. result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  171. }
  172. if (string.IsNullOrEmpty(result))
  173. {
  174. result = HttpContext.Current.Request.UserHostAddress;
  175. }
  176. if (string.IsNullOrEmpty(result))
  177. {
  178. return "127.0.0.1";
  179. }
  180. return result;
  181. }

5.2 系统测试

为了保证设计完成后的软件是有效的,健壮的,在软件开发的生命周期中要对软件进行测试,测试工作可以验证软件的需求是否都得以实现,软件是否正确地提供了需要的功能,以及软件是否能健壮稳定地运行。所以,本网站的测试主要以如下几方面为切入点:

  • 一、功能验收测试:对应软件的需求分析和详细设计文档,检查系统所应该实现的功能是否已经实现。对于一个软件,完成并能够使用的最基本条件是所有的功能都能覆盖,并且功能能够成功执行。
  • 二、集成验收测试:在保证了每个功能都实现并可用之后,需要验证系统的每个功能的正确性,于是进一步的测试则要保证每一个功能的每种可能执行方式 都能得到正确的结果。这样我们才可以说,对外发布的系统是一个正确的系统。
  • 三、健壮性、稳定性及性能测试:为了让系统能够稳定的高效运行,需要对系统进行以下的测试。如,选择一些非正常的输入,这时系统需要能继续稳定运 行,或者很容易从错误中自动恢复;当长时间的进行持续的操作时,系统对资源 的消耗应该处于稳定的,可接受的范围内,尤其要避免内存泄露等问题带来的风险;系统还要达到需求分析文档中所规定的性能指标,所以还要针对实际情况进 行性能测试;最后系统还要根据需要对不同平台、不同环境的兼容性进行测试。 整个系统需要测试的模块主要有登录模块,一级管理员的管理模块,二级管理员的管理模块。

系统测试:功能测试、性能测试、验收测试。目的是为了保证所实现的系统确实是用户所需要的。

登录验证,当用户名或密码不输入时提示用户重新输入,以及当用户输入的用户名和密码不匹配时,提示重新输入。当输入的是一级管理员则进入一级管理员首页,当输入的是二级管理员进入二级管理员首页。




添加配件

点击配件名称,弹出编辑界面

勾选点击删除按钮便可以对信息进行删除

填写入库信息后点击确定,该汽车配件数量增加

参考文献

[1] Karli Watson著,齐立波译,C#入门经典(第6版),2014-8

[2] (美)内格尔(Nagel.C)等所著,C#高级编程,2008-10-1

[3] 明日科技 著,ASP.NET从入门到精通,2012-09

[4] 王珊,萨师煊.数据库系统概论(第四版).高等教育出版社,2006.5

[5] ASP.NET 入门经典(第9版),2016-11

[6] Baron Scbwartz.高性能MySQL(第3版)[M].电子工业出版社,2013

[7] (美)加洛韦 等著,ASP.NET MVC5高级编程(第5版),2015-02

[8] 构建之法 现代软件工程(第二版),2015-07

[9] 王国辉,王毅.数据库系统开发案例精选[M].人民邮电出版社,2006

[10] 软件工程:实践者的研究方法(原书第8版),2016-11

上传的附件 cloud_download 毕设-汽车配件仓储管理系统.7z ( 16.28mb, 5次下载 )
error_outline 下载需要21点积分

发送私信

生活不会因为你是女孩子就善待你

9
文章数
15
评论数
最近文章
eject