摘 要:随着信息处理技术的飞速发展,基于计算机网络的信息处理已成为人们日常工作,学习和生活必备系统。在Internet飞速发展的今天,互联网已成为人们快速获取,发布和传递信息的重要渠道,它已成为社会生活的一部分。学生信息 处理的电脑化、网络化,是实现学校管理现代化和信息化的重要内容,也是方便用户快捷查询相关充足信息的重要工具。与传统学生信息处理模式相比,基于网络的学生管理系统具有无可比拟的优越性。
本系统的开发是基于B/S结构,使用 ASP.net程序设计语言及SQL Server 2000数据库进行设计与开发。本文首先对学生信息管理系统进行较详细的需求分析,并给出系统总体架构及详细设计步骤。系统主要包含普通用户和管理员两大模块,主要功能包括学生信息的查询,统计,添加,修改,删除,用户管理和用户注册验证等功能。通过测试分析说明,本系统的开发基本达到预定目标,并具有一定的应用价值。
关键词:学生管理系统;数据库;B/S结构;系统构架;信息查询
Design and Development of Students Management System
Abstract
Along with the rapid development of information processing technology, information management system, which is based on computer network, has become a necessity system in routine work, study and life. With the rapid development of the Internet, today the Internet has become an important channel for fast gaining, issuing and transmitting information, and obviously it has been an essential part of our social life. Computerization and network station of student information processing are important for realizing modernization and information of school administration, and it also is an important way for searching sufficient information of users. Compared with the traditional pattern, student management system based on the Internet has incomparable superiority.
This system is based on the B/S structure, designed and developed by adopting the ASP+VBScript programming language and the Access2000 database. This paper first carries on a detailed demand analysis to the student information management system, and then gives the overall construction and the detailed design procedure. The system consists of two main modules: ordinary users and managers. Its main functions include student information inquiry, statistics, adding, modifying and deletion as well as the functions of user management, user registration authorization and so on. Through test and analysis, it shows development of the system basically achieves the predetermined goal and has the certain application value.
Keywords: Student Management System; Database; B/S Structure; System Structure; Information Inquiry
引言
目前我国的经济日趋发达,货物流通至关重要,运输行业为我国的经济发展起到了极大的推进作用。随着货物运输行业的不断发展,对于工作效率以及运输效率都又了更高的要求,因此,应用计算机管理成为运输行业管理的趋势。
只有运用先进的科学管理手段,利用计算机管理系统才能更好实现这一管理模式。我为东顺货物运输公司开发一套货物运输管理系统,从而提高该公司的管理效率,提高管理的准确性。为我国货物运输行业计算机管理做出自己的贡献。
(一)课题研究的背景及意义
近年来,货物运输行业迅猛发展,市场的竞争日趋激烈,客户对运输公司的要求逐渐提高。尤其是对于规模较大的货物运输公司,既要完成客户的运输要求,还需要对车辆的调度进行优化,对人员的使用进行精简,并且运输要准确、迅速,从而提高工作效率、提高企业的经济效益。
然而,传统的人工管理模式已经远远不能满足有效、快捷地处理经营中产生的大量信息数据的需要,从而无法及时、快捷的处理客户要求,继而影响运输货物的效率。据统计,目前80%以上的货物运输公司规模较小,运输路线比较单一,货物流通量较小。对于东顺货物运输公司来说,公司规模比较大,运输路线比较多,如果单纯的使用人工管理模式,很难完成大量订单,或是需要耗费大量的人力资源,办公效率也不足以让客户满意。因此提高运输管理效率,才能吸引更多的客户。因此需要一套计算机管理软件对公司业务进行管理,从而提高运输管理效率。
在飞速发展的信息时代,信息技术已经被政府机关、企业单位等机构广泛使用。货物运输管理系统是用来填写订单、计算运输费用、调度车辆完成订单的综合管理系统。该系统对客户的要求进行准确的存储,及时、准确的调度车辆,对存在问题的数据可以随时进行修改,提高了运输的准确性和及时性,增强企业的竞争力,同时适应信息时代管理数字化的要求,提高货物运输公司的服务水平与质量,从而赢得高信誉、强实力、好效益!
(二)本次设计(论文)的主要工作
建立一套功能完善的运输管理系统,既能满足业务人员日常处理的需要,增强企业经营全过程的数字化管理水平;又能满足客户日益提高的要求,提高实施管理的准确性、科学性,使担负管理的工作人员从繁杂的手工劳作中解脱出来。
运输管理系统包括基本信息模块(即设置用户、车辆、路线等基本信息)、订单模块(即添加订单、查看订单、修改订单、删除订单)、调度模块(即调度车辆、查看历史调度单),基本满足东顺货物运输公司日常办公的需要。 /
(三)本系统的开发方法
本系统采用VS可视化面向对象的快速开发工具开发,采用ADO 对象数据技术来提高系统的安全及稳定性。由于本系统设计成网络版,即C/S体系。后台数据库采用SQL SERVER2000。
Visual Studio 是微软公司推出的开发环境。是目前最流行的 Windows 平台应用程序开发环境。目前已经开发到 9.0 版本,也就是 Visual Studio 2008。
Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。
2002 年,随着 .NET 口号的提出与 Windows XP / Office XP 的发布,微软发布了 Visual Studio .NET(内部版本号为 7.0)。在这个版本的 Visual Studio 中,微软剥离了 Visual FoxPro 作为一个单独的开发环境以 Visual FoxPro 7.0 单独销售,同时取消了 Visual InterDev。与此同时,微软引入了建立在 .NET 框架上(版本1.0)的托管代码机制以及一门新的语言 C# (读作 C Sharp,意为 C++++)。C# 是一门建立在 C++和 Java 基础上的现代语言,是编写 .NET 框架的语言。
.NET 的通用语言框架机制(Common Language Runtime, CLR),其目的是在同一个项目中支持不同的语言所开发的组件。所有 CLR 支持的代码都会被解释成为 CLR 可执行的机器代码然后运行。
2005 年,微软发布了 Visual Studio 2005。.NET 字眼从各种语言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向 .NET 框架的(版本2.0)。
这个版本的 Visual Studio 包含有众多版本,分别面向不同的开发角色。同时还永久提供免费的 Visual Studio Express 版本。
SQL Server2000是微软公司推出的基于RDBMS(关系数据库管理系统)技术的数据库。它与ORACLE、SYBASE相比,有着安装方便、使用简单的优点,而且在性价比上有着其它数据库无法企及的优势。在我国,采用WINDOWS NT作为局域网操作系统的占不小比例,而从技术角度来说,同DB2结合大型机一样,SQL Server同WINDOWS NT紧密的结合在一起。能很好的处理部门级的数据。作为SQL Server 系列中的新版本,SQL Server2000增强了很多功能,服务器性能主要有:新数据类型、数据仓库、分布式查询和更新、动态锁定、通过MICROSOFT代理服务器访问SQL Server、新的安全模型、XML支持等;管理性能增强有:数据转换服务工具(DTS)、管理控制台(企业管理器)、WEB助手向导等。SQL Server 2000所具有的将关系数据库管理系统(RDBMS)扩展为虚拟的对象数据库管理系统(ODBMS)的能力,使SQL Server2000成为当今应用于Intranet、Internet及其extrnet中最具综合性的数据库开发环境。这就是我们采用SQL Server2000作为支持数据库的主要原因。
开发工具:Microsoft Visual Studio 2005 SQL Server2000
运行环境:Windows 系统,Microsoft .NET Framework v2.0环境, SQL Server2000数据库
二、 系统分析
系统分析是采用系统的思想和方法,把复杂的对象分解成简单的组成部分,找出这些部分的基本属性和彼此之间的联系。
针对现行货物运输管理系统中存在的问题,为了提高调度车辆的迅速性和准确性,利用计算机所具有的特殊功能处理车辆调度过程,为工作人员减轻了工作负担,提高调度车辆的准确性,提高了工作效率和经济效益,在全面调查的基础上提出了系统的总体逻辑描述。
(一) 系统的初步调查
在信息高度发达的今天,货物运输行业从客户填写顶带开始,直到货物准确送到目的地,整个过程都应该能体现以客户为中心,提供快捷、方便、准确的服务,给客户一种“顾客至上”的感受,提高货物运输管理的效率,简化各种复杂操作,在最后合理最短的时间内,达到客户的要求,这样才能令客户满意,从而增加客户的回头率。面对运输行业的激烈竞争形式,各运输公司均在努力拓展其服务领域的广度和深度。虽然计算机并不是货运运输公司走向成功的关键因素,但它可以帮助那些真正影响成败的因素发挥更大的效用。因此,采用全心的计算机管理系统,将成为提高货物运输公司的管理效率,改善服务水平的重要手段之一。
据我国货物运输业的统计分析表明:
在现代的货物运输行业中,由于客户流量增长,货物流量增多,传统的管理方法使得工作人员每天要处理的事物繁多,重复性的工作使其效率较低、遗漏订单指示货物不能按时送到等问题。
一般规模较大的运输公司拥有大量的车辆、运输路线比较繁多。针对这种情况,东顺运输公司的工作人员已意识到使用计算机管理系统的重要性,因此他们迫切需要开发一个“货物运输管理系统”来进行管理工作。
(二) 系统的可行性分析
从宾馆的具体情况出发,经过多方面调研、讨论,东顺货物运输公司的圆熟管理系统,从技术上,经济上,管理上均已具备实施的基本条件。
从技术可行性上来分析:操作系统的稳定性,安全性可满足用户的要求。后台的数据库使用SQL Server,开发工具微软公司的Visual Studio 2005, 具有良好的升级潜力和可维护性。这些软件在大型MIS开发中已被大量应用,技术上都比较成熟,可根据用户需要,十分方便的增减模块,直观的图形用户界面,简洁的操作流程,无须专业电脑知识即可迅速上手。因此技术上是可行的。
从经济可行性上来分析:东顺货物运输公司使用本系统后,将提高了订单的准确性和安全性,调度车辆变的科学、快速。大大节省了工作时间,从而提高了工作效率。同时还提高了工作人员的素质,有利于管理方式与体制的合理改革,保证货物运输公里的可持续发展。因而在经济上是可行的。
从管理可行性上来分析:建立货物运输管理系统是行业发展的必然要求,东顺运输公司的总经理对此非常重视,员工对此更是表现出极大的热情和期望。因为该系统的实施将很大程度上降低他们的手工作业量,还会减少他们在工作上的失误,提高工作效率。因此,本系统在管理上是可行的。
(三) 详细调查
开发本系统的要求来自对原传统管理模式的不满,不管是手工系统还是正在运行的计算机系统。由于存在的问题充斥各个方面,内容分散,甚至含糊不清,这就要求我们进行详细分析,并在原管理模式的基础上提出系统开发方案。
1. 组织结构图
据调查分析,货物叙述管理系统需要有对基本信息的操作,对客户订单的操作,以及调度车辆完成订单的操作。即组织结构图如图2.1所示:
图2.1组织结构图
2. 业务流程分析
业务流程分析是对业务功能分析的进一步细化,业务流程分析的结果是给出业务流程图。业务流程图反映了实际的业务活动。它不仅是系统分析人员进行更深入系统分析的依据,而且也是系统分析人员,管理人员,业务操作人员,系统设计人员进行沟通的工具。可以直接在业务流程图上拟出能够由计算机实现的部分,明确系统的边界,使计算机处理与人工业务处理的接口清晰,分析组织的业务流程是否合理,删除重复的,不合理的环节,明确整个业务流程,为以后的分析与设计打下良好的基础。
因此,为了反映,运输管理的业务流程图如图2.2所示:
图2.2业务流程图
三、 系统的总体结构设计
(一) 系统设计目标
系统开发的总体任务是实现运输管理的系统化、自动化、快速化,从而达到提高货物运输公司管理效率目的。而这套货物运输管理系统的设计目标也是为了使设计出来的系统能够基本甚至较好的完成东顺货物运输公司的需要。能够使货物运输管理模式从传统的人工管理模式转变为由计算机来管理系统的这一管理模式。由以前的人工手工操作转变为计算机智能操作,提高系统的自动化管理,节省时间,节约管理开支,提高货物运输管理效率。这也就是我们开发这套货物运输管理程序的最初想法以及最终目的。
(二) 系统功能模块设计
宾馆信息管理系统需要完成的功能主要有:
1.添加员工相关信息,可以设置员工的登陆名、密码、姓名、权限。可以对员工信息进行修改和删除。
2.添加车辆信息,可以设置车辆的型号、车牌号、吨位、司机、当前状态等。可以对车辆信息进行修改和删除。
3.添加运输路线信息,可以设置路线起始地点、路线的距离、运输天数、运输费用等。可以对运输路线信息进行修改和删除。
4.添加新订单功能。
5.按“全部”、“已调度”、“未调度”查询订单信息,可以对“未调度”订单进行修改或删除。
6.选中未调度的订单,执行“调度”,有程序自动安排车辆进行最优化的调度车辆完成订单。
7.按“全部”、“已完成”、“未完成”查询调度单。
8.对“未完成”的调度单,可以设置其是否完成。
对上述各项功能进行集中,分块,按照结构化程序设计的要求
(三) 数据库设计
数据库的设计是货物运输管理系统。设计数据库系统是首先应该充分了解用户各方面的要求,包括现有的以及将来可能增加的要求。数据库设计一般包括如下几个步骤:
数据库需求分析
数据库概念结构设计
数据库逻辑结构设计
1.数据库需求分析
用户的需要具体体现在各种信息的提供,保存,更新和查询等方面,这就要求数据库结构能充分满足各种信息的输入和输出。收集基本数据,数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的具体设计打下基础。
2. 数据库概念结构分析
得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。本实例根据上面的设计规划出的实体有:员工信息实体,车辆信息实体,路线信息实体,订单信息实体,调度单信息实体。各个实体具体的 描述E-R图如下。
3. 数据库逻辑结构设计
物理数据模型
本系统物理数据模型使用SQL Server 2000来实现,根据实体的关系模型转换的物理数据模型所对应的表结构如下:
(1)员工表
员工表用来存放公司各位员工的基本信息,表名为employee,表结构如下表(表4)所示。
表4 员工表(employee)
栏目名称 列名 类型 可否为空 说明
员工编号 empID char(10) N 主键 作为员工登录名
员工姓名 Name varchar(8) N
口令 Password varchar(16) N
工作岗位 Post varchar(16) N
(2)车辆表
车辆表用来存放公司所有营运车辆的基本信息,表名为vehicle,表结构如下表(表5)所示。
表5 车辆表(Vehicle)
栏目名称 列名 类型 可否为空 说明
车辆编号 VehID int N 主键 自动增长,不能重复
车辆型号 Model varchar(30) N
车牌号码 Veh_num varchar(16) N
司机编号 DriverID char(10) Y 司机的员工编号
车辆吨位 tonnage numeric(6) N
车辆状况 Status Smallint N 选项:1—故障 0—适用
备注 Memory varchar(100) Y
(3)路线表
路线表用来存放各运输线路的费率等信息,表名为route,表结构如下表(表6)所示。
表6 路线表(route)
栏目名称 列名 类型 可否为空 说明
路线编号 RouteID Int N 主键 自动增长,不能重复
路线名称 Name varchar(8) N
发货城市 Scity varchar(16) N 填城市名称
卸货城市 Dcity varchar(16) N 填城市名称
里程 distance numeric(6) N
运输单价 price Money N 每吨货物的运价
理想运期 duration numeric(3) Y 天数
备注 Memory varchar(50) Y
(4)订单表
订单是客户向公司进行运输预约的单据,由客户在网上创建。由业务部员工审核后驱动后续的营运业务。订单表用来记录客户一次货物运输预约以及业务员处理订单的信息,表名为order,表结构如下表(表7)所示。
表7 订单表(order)
栏目名称 列名 类型 可否为空 说明
订单编号 OrderID Int N 主键 自动增长,不能重复
提交时间 submitDate datetime N 客户提交订单的时间
托送方 SName Varchar(50) N
装货地址 SAddress Varchar(50) N
托送联系人 SPname varchar(8) N
托送方电话 Sphone varchar(12) N
预期装货日期 sendDate datetime Y
收货方 RName Varchar(50) N
卸货地址 RAddress Varchar(50) N
收货联系人 RPname varchar(8) N
收货方电话 Rphone varchar(12) N
预期卸货日期 Receivedate datetime Y
货物名 Goodsname varchar(12) N
货物重量 Weight numeric(6) N
运输路线 RouteID int Y
订单总金额 SOTotal Money Y 本张订单所有费用的总和
业务员 empID char(10) Y 负责此单的业务员
订单状态 SOStatus Smallint N 选项:0--待审批 1—已调度
备注 SOMemory Varchar(100) Y
(5)调度单表
调度单表记录订单审核后的调度详情,表名为dispatch,表结构如下表(表8)所示。
表8 调度单表(dispatch)
栏目名称 列名 类型 可否为空 说明
调度单编号 dispatchID Int N 主键 自动增长,不能重复
车辆编号 VehID int N 外键1--引用车辆表主键
订单编号 OrderID int N 外键2--引用订单表主键
开始时间 sendDate datetime N
预计完成时间 receivedate datetime N
承载重量 Weight numeric(6) N
调度员编号 empID char(10) N 负责此单的调度员
是否完成运输 [over] Int N 0-未运输完成,1-运输完成
四、系统的详细设计和实现
上面的SQL语句在SQL Server2000中查询分析器的执行,将自动产生需要的所有表格。有关数据库结构的所有后台工作已经完成。现在将通过宾馆管理信息系统中各个功能模块的实现,讲解如何使用Visual Basic来编写数据库系统的客户端程序。
(一)创建工程项目――trans
启动Microsoft Visual Studio 2005后,单击“文件”-“新建”-“项目”,选择Visual C# -Windows应用程序,名称为trans。
建立类库项目:Model(实体层)、DAL(数据访问层)、BLL(业务逻辑层)
三层架构关系如下图:
(二)创建货物运输管理系统的主窗体的设计
添加Windows 窗体,名称为MainFrm.cs。
(三)创建主窗体的菜单的设计
添加menuStrip控件,设计菜单栏。
(四) 创建Model实体层
根据数据库模型,建立Model实体层,以Order表为例,在Model类库项目中建立Order.cs文件,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace Model
{
public class order
{
/// <summary>
/// 构造函数
/// </summary>
public order()
{
}
private int OrderID;
/// <summary>
/// 订单编号
/// </summary>
public int _OrderID
{
get { return OrderID; }
set { OrderID = value; }
}
private DateTime submitDate;
/// <summary>
/// 提交时间
/// </summary>
public DateTime _submitDate
{
get { return submitDate; }
set { submitDate = value; }
}
private string SName;
/// <summary>
/// 托送方
/// </summary>
public string _SName
{
get { return SName; }
set { SName = value; }
}
private string SAddress;
/// <summary>
/// 装货地址
/// </summary>
public string _SAddress
{
get { return SAddress; }
set { SAddress = value; }
}
private string SPname;
/// <summary>
/// 托送联系人
/// </summary>
public string _SPname
{
get { return SPname; }
set { SPname = value; }
}
private string Sphone;
/// <summary>
/// 托送方电话
/// </summary>
public string _Sphone
{
get { return Sphone; }
set { Sphone = value; }
}
private DateTime sendDate;
/// <summary>
/// 预期装货日期
/// </summary>
public DateTime _sendDate
{
get { return sendDate; }
set { sendDate = value; }
}
private string RName;
/// <summary>
/// 收货方
/// </summary>
public string _RName
{
get { return RName; }
set { RName = value; }
}
private string RAddress;
/// <summary>
/// 卸货地址
/// </summary>
public string _RAddress
{
get { return RAddress; }
set { RAddress = value; }
}
private string RPname;
/// <summary>
/// 收货联系人
/// </summary>
public string _RPname
{
get { return RPname; }
set { RPname = value; }
}
private string Rphone;
/// <summary>
/// 收货方电话
/// </summary>
public string _Rphone
{
get { return Rphone; }
set { Rphone = value; }
}
private DateTime Receivedate;
/// <summary>
/// 预期卸货日期
/// </summary>
public DateTime _Receivedate
{
get { return Receivedate; }
set { Receivedate = value; }
}
private string Goodsname;
/// <summary>
/// 货物名
/// </summary>
public string _Goodsname
{
get { return Goodsname; }
set { Goodsname = value; }
}
private float Weight;
/// <summary>
/// 货物重量
/// </summary>
public float _Weight
{
get { return Weight; }
set { Weight = value; }
}
private string RouteID;
/// <summary>
/// 运输路线
/// </summary>
public string _RouteID
{
get { return RouteID; }
set { RouteID = value; }
}
private float SOTotal;
/// <summary>
/// 订单总金额
/// </summary>
public float _SOTotal
{
get { return SOTotal; }
set { SOTotal = value; }
}
private string empID;
/// <summary>
/// 业务员
/// </summary>
public string _empID
{
get { return empID; }
set { empID = value; }
}
private int SOStatus;
/// <summary>
/// 订单状态
/// </summary>
public int _SOStatus
{
get { return SOStatus; }
set { SOStatus = value; }
}
private string SOMemory;
/// <summary>
/// 备注
/// </summary>
public string _SOMemory
{
get { return SOMemory; }
set { SOMemory = value; }
}
}
}
(五) 创建DAL数据访问层
建立DAL数据访问层,以对Order表的数据访问为例,在DAL类库项目中建立Order.cs文件,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace DAL
{
public class order
{
/// <summary>
/// 得到一个对象实体
/// </summary>
/// <param name="OrderID">主键OrderID</param>
/// <returns></returns>
public Model.order GetModel(int OrderID)
{
string sql = "select * from [order] where OrderID=" + OrderID + "";
Model.order model = new Model.order();
DataSet ds = DBHelper.Query(sql);
if (ds.Tables[0].Rows.Count > 0)
{
model._OrderID = int.Parse(ds.Tables[0].Rows[0]["OrderID"].ToString());
model._submitDate = DateTime.Parse(ds.Tables[0].Rows[0]["submitDate"].ToString());
model._SName = ds.Tables[0].Rows[0]["Sname"].ToString();
model._SAddress = ds.Tables[0].Rows[0]["SAddress"].ToString();
model._SPname = ds.Tables[0].Rows[0]["Spname"].ToString();
model._Sphone = ds.Tables[0].Rows[0]["Sphone"].ToString();
if (ds.Tables[0].Rows[0]["sendDate"].ToString()!="")
{
model._sendDate = DateTime.Parse(ds.Tables[0].Rows[0]["sendDate"].ToString());
}
model._RName = ds.Tables[0].Rows[0]["RName"].ToString();
model._RAddress = ds.Tables[0].Rows[0]["RAddress"].ToString();
model._RPname = ds.Tables[0].Rows[0]["RPname"].ToString();
model._Rphone = ds.Tables[0].Rows[0]["Rphone"].ToString();
if (ds.Tables[0].Rows[0]["Receivedate"].ToString()!="")
{
model._Receivedate = DateTime.Parse(ds.Tables[0].Rows[0]["Receivedate"].ToString());
}
model._Goodsname = ds.Tables[0].Rows[0]["Goodsname"].ToString();
model._Weight = float.Parse(ds.Tables[0].Rows[0]["Weight"].ToString());
model._RouteID = ds.Tables[0].Rows[0]["RouteID"].ToString();
if (ds.Tables[0].Rows[0]["SOTotal"].ToString()!="")
{
model._SOTotal = float.Parse(ds.Tables[0].Rows[0]["SOTotal"].ToString());
}
model._empID = ds.Tables[0].Rows[0]["empID"].ToString();
model._SOStatus = int.Parse(ds.Tables[0].Rows[0]["SOStatus"].ToString());
model._SOMemory = ds.Tables[0].Rows[0]["SOMemory"].ToString();
return model;
}
else
{
return null;
}
}
/// <summary>
/// 增加一条数据
/// </summary>
/// <param name="model">order表的Model对象</param>
/// <returns></returns>
public int Add(Model.order model)
{
string sql = "insert into [order](submitDate,SName,SAddress,SPname,";
sql += "Sphone,sendDate,RName,RAddress,RPname,Rphone,Receivedate,Goodsname,";
sql += "Weight,RouteID,SOTotal,empID,SOStatus,SOMemory) values (";
sql += "'" + model._submitDate.ToString() + "',";
sql += "'" + model._SName + "',";
sql += "'" + model._SAddress + "',";
sql += "'" + model._SPname + "',";
sql += "'" + model._Sphone + "',";
sql += "'" + model._sendDate.ToString() + "',";
sql += "'" + model._RName + "',";
sql += "'" + model._RAddress + "',";
sql += "'" + model._RPname + "',";
sql += "'" + model._Rphone + "',";
sql += "'" + model._Receivedate.ToString() + "',";
sql += "'" + model._Goodsname + "',";
sql += " " + model._Weight.ToString() + " ,";
sql += "'" + model._RouteID.ToString() + "',";
sql += " " + model._SOTotal.ToString() + " ,";
sql += "'" + model._empID + "',";
sql += " " + model._SOStatus.ToString() + ",";
sql += "'" + model._SOMemory + "')";
return DBHelper.ExecuteSql(sql);
}
/// <summary>
/// 更新一条数据
/// </summary>
/// <param name="model">order表的Model对象</param>
public int Update(Model.order model)
{
string sql = "";
sql += "update [order] set ";
sql += "submitDate='" + model._submitDate.ToString() + "',";
sql += "Sname='" + model._SName + "',";
sql += "SAddress='" + model._SAddress + "',";
sql += "Spname='" + model._SPname + "',";
sql += "Sphone='" + model._Sphone + "',";
sql += "sendDate='" + model._sendDate.ToString() + "',";
sql += "Rname='" + model._RName + "',";
sql += "RAddress='" + model._RAddress + "',";
sql += "Rpname='" + model._RPname + "',";
sql += "Rphone='" + model._Rphone + "',";
sql += "Receivedate='" + model._Receivedate.ToString() + "',";
sql += "Goodsname='" + model._Goodsname + "',";
sql += "Weight= " + model._Weight.ToString() + " ,";
sql += "RouteID= '" + model._RouteID.ToString() + "',";
sql += "SOTotal= " + model._SOTotal.ToString() + " ,";
sql += "empID='" + model._empID + "',";
sql += "SOStatus= " + model._SOStatus.ToString() + " ,";
sql += "SOMemory='" + model._SOMemory.ToString() + "' ";
sql += " where OrderID= " + model._OrderID.ToString() + " ";
return DBHelper.ExecuteSql(sql);
}
/// <summary>
/// 删除一条数据
/// </summary>
/// <param name="OrderID">删除数据的主键OrderID</param>
/// <returns></returns>
public int Delete(int OrderID)
{
string sql = "";
sql += "delete from [order] ";
sql += "where OrderID=" + OrderID + "";
return DBHelper.ExecuteSql(sql);
}
/// <summary>
/// 获得数据列表
/// </summary>
/// <param name="strWhere">查询条件</param>
/// <returns></returns>
public DataSet GetList(string strWhere)
{
string sql = "";
sql += "Select * from [order]";
if (strWhere.Trim() != "")
{
sql += " where " + strWhere;
}
return DBHelper.Query(sql);
}
}
}
(六)建立BLL业务逻辑层
业务逻辑层是整个项目的核心,良好的业务逻辑层使的整个项目开发更加轻松,更加规范。建立BLL数据访问层,以对Order表的操作为例,在BLL类库项目中建立Order.cs文件,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace BLL
{
public class order
{
DAL.order dal = new DAL.order();
/// <summary>
/// 添加一条订单信息
/// </summary>
/// <param name="model">订单信息的Model对象</param>
/// <returns></returns>
public int Add(Model.order model)
{
return dal.Add(model);
}
/// <summary>
/// 修改一条订单信息
/// </summary>
/// <param name="model">订单信息的Model对象</param>
/// <returns></returns>
public int Update(Model.order model)
{
return dal.Update(model);
}
/// <summary>
/// 删除一条订单信息
/// </summary>
/// <param name="orderID">订单信息的主键orderID</param>
/// <returns></returns>
public int Delete(int orderID)
{
return dal.Delete(orderID);
}
/// <summary>
/// 返回所有数据列表
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public DataSet GetList(string where)
{
return dal.GetList(where);
}
/// <summary>
/// 获取model对象
/// </summary>
/// <param name="OrderID">要获取的MODEL对象的主键</param>
/// <returns></returns>
public Model.order GetModel(int OrderID)
{
return dal.GetModel(OrderID);
}
}
}
(七) 核心代码:
本项目的核心在于调度车辆完成订单,为使调度车辆达到最优,因此对于车辆的调度算法花费了大量时间进行攻克,其代码如下(dispatchorderviewfrm.cs文件中button1_Click()事件方法):
private void button1_Click(object sender, EventArgs e)
{
bool success = false;
BLL.Vehicle bllVeh = new BLL.Vehicle();
float WeightSum = 0;
DataSet dsVeh = bllVeh.GetList("Status=1 and used=0 and routeID='" + route.Text + "'");
//循环运行此条线路,并且未出发、可以使用的车辆
for (int i = 0; i < dsVeh.Tables[0].Rows.Count; i++)
{
BLL.dispatch bllDis = new BLL.dispatch();
DataSet dsDis = bllDis.GetList(" VehID=" + dsVeh.Tables[0].Rows[i]["VehID"]);
//计算此车辆货物总重量
for (int j = 0; j < dsDis.Tables[0].Rows.Count; j++)
{
WeightSum += float.Parse(dsDis.Tables[0].Rows[j]["Weight"].ToString());
}
//如果此车辆可以装新订单的货物, 则进行调度。
if (WeightSum + float.Parse(txb10.Text) <= float.Parse(dsVeh.Tables[0].Rows[i]["tonnage"].ToString()))
{
//添加调度单
Model.dispatch model = new Model.dispatch();
model._VehID = int.Parse(dsVeh.Tables[0].Rows[i]["VehID"].ToString());
model._OrderID = OrderID;
model._sendDate = DateTime.Parse(dateTimePicker1.Text);
model._receivedate = DateTime.Parse(dateTimePicker2.Text);
model._Weight = float.Parse(txb10.Text);
model._empID = BLL.UserHelper.Name;
bllDis.Add(model);
//更新车辆信息
Model.Vehicle modelVeh = bllVeh.GetModel(model._VehID.ToString());
modelVeh._routeID = route.Text;
bllVeh.Update(modelVeh);
//更新订单信息
BLL.order bllorder = new BLL.order();
Model.order modelorder = bllorder.GetModel(OrderID);
modelorder._SOStatus = 1;
bllorder.Update(modelorder);
success = true;
MessageBox.Show("调度成功");
break;
}
}
if (!success)
{
BLL.dispatch bllDis = new BLL.dispatch();
Model.dispatch model = new Model.dispatch();
model._VehID = int.Parse(bllVeh.GetList("Status=1 and used=0 and routeID=''").Tables[0].Rows[0]["VehID"].ToString());
model._OrderID = OrderID;
model._sendDate = DateTime.Parse(dateTimePicker1.Text);
model._receivedate = DateTime.Parse(dateTimePicker2.Text);
model._Weight = float.Parse(txb10.Text);
model._empID = BLL.UserHelper.Name;
bllDis.Add(model);
Model.Vehicle modelVeh = bllVeh.GetModel(model._VehID.ToString());
modelVeh._routeID = route.Text;
bllVeh.Update(modelVeh);
//更新订单信息
BLL.order bllorder = new BLL.order();
Model.order modelorder = bllorder.GetModel(OrderID);
modelorder._SOStatus = 1;
bllorder.Update(modelorder);
MessageBox.Show("调度成功");
}
}
五、系统的编译和发布
完成整个项目的开发,最后进行的就是编译和发布。
在“解决方案资源管理器”中,“解决方案trans”上,单击右键,选择“生成解决方案”,完成生成工作。
项目的相关文件在\trans\trans\bin\debug\目录下。
参考文献
《Visual C#程序设计教程》,王昊亮等编著,清华大学出版社
《Visual C# 2005从入门到精通》,(英)John Sharp著,周靖译,清华大学出版社
《C# 项目开发全程实录》,唐政,房大伟 等编著,清华大学出版社