VB.NET机房收费系统项目总结

从2013年5月3日——2013年8月20日历时三个多月的.NET机房收费系统终于完成了。项目做完了,真有一种如释重负的感觉。

下面我将从文档、UML图,代码这三个方面来进行总结,重点是前两方面内容。

一、文档

1.1可行性分析报告和项目开发计划

这两个文档主要是确定软件系统是否值得开发,搞清楚问题的性质,确定系统的目标和规模,从技术,经济和社会等方面分析论证项目的可行性。还有对此项目的开发做个总体的规划,内容有:项目的背景,项目概述,计划,人员及组织分工,交付期限。为软件的开发进行详细的计划。可行性分析报告和项目开发计划是给开发单位看的。

1.2需求分析。

是用户对项目软件系统在功能、行为、性能设计约束方面的期望。软件对软硬件的需求。需求分析是用户、分析人员和系统设计人员共同参与讨论编写,是为系统设计提出“做什么”的。一个很有用的设计文档,是系统开发的灵魂。

1.3概要设计和详细设计

1.3.1概要设计

概要设计将系统划分成模块结构形式,决定每个模块要完成的功能,每个模块之间的调用关系。概要设计主要包含:功能、处理流程、数据结构、运行等做设计。概要设计是高级设计人员和有丰富经验的开发人员一起编写。

1.3.2 详细设计

描述模块执行过程、局部数据组织、控制流和每一步具体家用要求及实现设计。为编程人员提供每一个功能的数据输入,输出、设计方法、流程逻辑、接口、存储分配、注释设计、测试计划。此文档是由每一个程序人员参与编写。

编写完一遍文档发现,整个系统已经开发了三分之一了。

二、UML图

1、用例图

定义:采用参与者与用例作为基本元素,以不同的视角展现系统的功能型需求。在需求分析的时候要画用例图。

2、类图

定义描述现实世界中问题的概念理解,类之间的关系有依赖、关联、继承,多态。每个类里面有方法和属性,方法要写参数和返回值。

3、包图

包图是在 UML 中用类似于文件夹的符号表示的模型元素的组合。系统中的每个元素都只能为一个包所有,一个包可嵌套在另一个包中。使用包图可以将相关元素归入一个系统。

4、时序图。

这个显现了各个类之间各个层之间的逻辑关系。

5、部署图。

显现了系统编码打包交付给用户之后的部署。

6、状态图。

描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应的。

7、行为图。

和状态图差不多基本上差不多,在这里不做多余赘述。

8、构件图。

构件图从软件架构的角度来描述一个系统的主要功能,如系统分成几个子系统,每个子系统包括哪些类、包和构件,它们之间的关系以及它们分配到哪些节点上等。使用构件图可以清楚地看出系统的结构和功能。方便项目组的成员制定工作目标和了解工作情况,同时,最重要的一点是有利于软件的复用。

三、代码

开始编写代码的时候很迷茫,看了好多人的博客但是还是不知道怎样写,登录的实例也实现了,但是一到真正的敲系统怎么就特别的费劲。我就不断反复研究这个登录的例子,很是迷惑不解。最后还是在青峰师哥的指导下打通了我的任督二脉,一语惊醒梦中人。问题解开了,就开始了真正编写代码的历程。说实话最难写的是DAL层,BLL层UI层很简单就是把得到的参数传到BLL层中,BLL层在通过一些逻辑判断,把想要查的数据赋给实体类然后传到DAL层让DAL层来进行数据库的操作。下面我就写下在.NET机房收费系统开发中学习到的一些简单知识。

1、连接数据库。

要想进行数据库的操作就要连接数据库,下面是在D层中敲写的连接数据库的代码:

 '连接字符
Privatestr_SqlConnection As String = "DataSource=192.168.24.196;Initial Catalog=Charge_sys;UserID=sa;Password=123456" '声明一个的实体
Public FunctionBasicD(ByVal enMoney As BasicDataE) AsEntity.BasicDataE ‘选取连接的数据库
DimstrSqlstring2 As String
strSqlstring2 = "select* from BasicData_Info" 'SqlConnection表示一个到 SQL Server 数据库的打开的连接。
Dimseting As String
seting = str_SqlConnection
DimMyConn As SqlConnection
MyConn = New SqlConnection(seting) 'SqlCommand表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程
DimMyCmd As SqlCommand
MyCmd = New SqlCommand(strSqlstring2,MyConn) '打开读取()
MyConn.Open()
DimMyReader As SqlDataReader
MyReader = MyCmd.ExecuteReader

说到D层还用了一个抽象类SQLHelper,具体内容见博客。

然后在DAL的每一类中调用一下就行了。

2、增、删、改。

前面博客也有写过以上三个内容,实现的形式是一样的,但是具体代码却不同,下面就简单的贴一下代码吧!

增加记录:

''' 添加在线记录
''' </summary>
''' <param name="OnLineInfo"></param>
''' <returns></returns>
''' <remarks></remarks>
Function AddOnLineInfo(ByVal OnLineInfo AsEntity.OnComputerInfo) As Entity.OnComputerInfo
Dim strSQL As String = "insert into OnComputer_Info values(@StudentCardNumber,@StudentNumber,@StudentName,@StudentMajor,@StudentSex,@OnLineDate,@OnLineTime,@OperatorUseComputer)"
Dim cmd As SqlCommand = New SqlCommand(strSQL, conn)
'传参数
cmd.Parameters.Add(New SqlParameter("@StudentCardNumber",OnLineInfo.StudentCardNumber))
cmd.Parameters.Add(New SqlParameter("@StudentNumber",OnLineInfo.StudentNumber))
cmd.Parameters.Add(New SqlParameter("@StudentName",OnLineInfo.StudentName))
cmd.Parameters.Add(NewSqlParameter("@StudentMajor", OnLineInfo.StudentMajor))
cmd.Parameters.Add(New SqlParameter("@StudentSex",OnLineInfo.StudentSex))
cmd.Parameters.Add(New SqlParameter("@OnLineDate",OnLineInfo.OnLineDate))
cmd.Parameters.Add(New SqlParameter("@OnLineTime",OnLineInfo.OnLineTime))
cmd.Parameters.Add(New SqlParameter("@OperatorUseComputer",OnLineInfo.OperatorUserComputer))
Try
conn.Open()
If (cmd.ExecuteNonQuery > 0)Then
OnLineInfo.Success = True
Else
OnLineInfo.Success = False
End If
Return OnLineInfo
Catch ex As Exception
OnLineInfo.Success = False
Return OnLineInfo
Finally
cmd.Dispose()
conn.Close()
End Try
End Function

删除记录:

 ''' 删除上机记录
''' </summary>
''' <paramname="OnLineInfo"></param>
''' <returns></returns>
''' <remarks></remarks>
Function DeleteOnLineInfo(ByVal OnLineInfo AsEntity.OnComputerInfo) As Entity.OnComputerInfo
'删除记录的语句
Dim strSQL As String = "delete from OnComputer_Info whereStudentCardNumber=@StudentCardNumber"
Dim cmd As SqlCommand = New SqlCommand(strSQL, conn)
cmd.Parameters.Add(New SqlParameter("StudentCardNumber",OnLineInfo.StudentCardNumber)) Try
. conn.Open()
If (cmd.ExecuteNonQuery > 0)Then
OnLineInfo.Success = True
Else
OnLineInfo.Success = False
End If
Catch ex As Exception
OnLineInfo.Success = False
Finally
cmd.Dispose()
conn.Close() End Try
Return OnLineInfo
End Function

更改记录:

''' <summary>
''' 更新工作记录
''' </summary>
''' <param name="WorkLogInfo"></param>
''' <returns></returns>
''' <remarks></remarks>
Function UpdateWorkLogInfo(ByVal WorkLogInfo As Entity.WorkLogInfo) AsEntity.WorkLogInfo
Dim strSql As String = "update WorkLog_Info set LogOutDate=@LogoutDate,LogoutTime =@LogoutTime,OperatorStatus =@OperatorStatus whereOperatorID =@OperatorID"
Dim cmd As SqlCommand = New SqlCommand(strSql, conn)
cmd.Parameters.Add(New SqlParameter("@OperatorID", WorkLogInfo.OperatorID))
cmd.Parameters.Add(New SqlParameter("@LogoutDate",WorkLogInfo.LogoutDate))
cmd.Parameters.Add(New SqlParameter("@LogoutTime",WorkLogInfo.LogoutTime))
cmd.Parameters.Add(New SqlParameter("@OperatorStatus", WorkLogInfo.OperatorStatus))
Try
conn.Open()
If (cmd.ExecuteNonQuery > 0)Then
WorkLogInfo.Success = True
Else
WorkLogInfo.Success =False
End If
Return WorkLogInfo
Catch ex As Exception
Return WorkLogInfo
Finally
conn.Close()
End Try
. EndFunction

3、所用到的查询的SQL语句

①简单的SQL语句

update 表名 set 所要更新字段 where 查询的条件

insert into 表名values(所要添加的字段(按照SQL表的顺序排列))

select * from 表名 where 条件

②内容扩展

select OperatorIDas 教师,OperatorLevel  as 用户级别,LogonDate as 登录日期,LogonTime as 登录时间,OperatorUseComputer as机器名 fromWorkLog_Info where OperatorStatus=@OperatorStatus

这样查出的记录可以让英文名字段显现出中文名字。

③select count(*) as count from 表名 where 记录条件

查出符合条件的记录个数。

④select SUM(所要求和的字段) as 所要求和的字段 from 表名 where 条件

查询出符合条件的记录并且所要求和的字段进行求和。

⑤select top 1 * from 表名 order by 字段名 fields

查出最近符合字段条件的一行记录。

4、DataSet DataTable   DataReader  DataGridView

DataSet DataTable DataReaderDataGridView的一些知识,前面博客有介绍,在这里不加以介绍,具体内容建博客。

5、错误处理

Try..catch..finally...end try
Try
<所要测试的代码>
Catch ex As Exception
<如果出现异常则执行这个语句>
Finally
<最后执行的代码>
end try

四、其他博客链接

浅析VB.NET方法创建:                                  http://blog.csdn.net/xjc1278003262/article/details/9056085
运行程序VS2012弹出的不伦不类的问题     :http://blog.csdn.net/xjc1278003262/article/details/9395843
.Net 中DataTable和 DataRow的 区别与联系:http://blog.csdn.net/xjc1278003262/article/details/9817249
DataGridView控件的使用和Excel表格的导出:   http://blog.csdn.net/xjc1278003262/article/details/9934221

图解机房收费系统报表制作的全过程:              http://blog.csdn.net/xjc1278003262/article/details/10077633


五、总结

VB.NET 机房收费系统项目开发完成,个人不管是在技术还是在思想上都是收益颇丰的。此次项目的完成不仅给自己打开了一扇新窗,开始拨云见日;同时也给自己打开了一片的新的天地,以后的学习将会是高屋建瓴,势不可当!

VB.NET 机房收费系统项目总结的更多相关文章

  1. VB.NET机房收费系统总结

    总感觉这次机房收费系统非常有份量,一直没有下手总结,从2014-7-27至2014-9-29.这中间有太多故事和成长.首先说一下两次机房收费系统的不同,它是我们从面向过程向面向对象的一个转变.在.NE ...

  2. vb.net机房收费系统之组合查询

    我个人一直认为,组合查询是机房收费系统的一个难点,尤其是用到三层之后,如果要为组合查询中的每一个查询建立一个显然是太麻烦了. 下面介绍一下我的方法,对大家起个参考作用. 我将该表中可输入的内容定义为一 ...

  3. VB.NET<机房收费系统个人重构版>你都学会了什么(之五)

    接着上篇我们说的配置文件,今天我们来说一下接口. 1.UML图 2.三层架构 3.Sqlhelper 4.配置文件 5.接口 6.设计模式 什么是接口呢?我们可以将接口理解为用于沟通的中介的抽象化.可 ...

  4. 小结:VB.NET机房收费系统个人版

    经过几天的缝缝补补,自己的个人版最终OK了,!或许是由于有第一次的机房收费系统的经验,这次做,感觉很亲切. 在业务逻辑方面,沿袭曾经的逻辑.做了一点升级.可是修改不大. 在数据库方面,感觉自己从一个小 ...

  5. vb.net机房收费系统——存储过程

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/xdd19910505/article/details/35574125 一.使用背景         ...

  6. 【vb.net机房收费系统】之sqlhelper 标签: 数据库 2015-05-17 10:47 819人阅读 评论(15)

    在敲机房收费重构版的时候,用到了sqlhelper,当时不知道怎么开始,各种听别人说,张晗说,一定要用sqlhelper,特别好用,我当时没有用balabala~当时一听,哎哎哎,这个高级,要搞一搞, ...

  7. 【vb.net机房收费系统】之没有包含要从继承的组件的已生成程序集 标签: vb.net继承 2015-05-02 15:19 1012人阅读

    在敲到组合查询这个功能的时候,需要用到窗体的继承,但是在新建继承窗体的时候,出现了错误(没有包含要从继承的组件的已生成程序集).如下图: 问题的产生:当时没怎么注意,也不知道怎么弄的,最后反正是继承上 ...

  8. vb.net机房收费系统之配置文件

    总是听到说用反射+配置文件访问数据库,那配置文件到底什么东西? 1.定义: 配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置, ...

  9. VB.NET版机房收费系统---报表

    报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...

随机推荐

  1. document.body的一些用法以及js中的常见问题

    document.body的一些用法以及js中的常见问题 网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight ...

  2. [Boost基础]并发编程——asio网络库——异步socket处理

    异步服务器端 #include <conio.h> #include <iostream> using namespace std; #include <boost/as ...

  3. c# 调用外部exe程序

    c#调用外部exe程序,首先要 using System.Diagnostics; 然后开启一个新process System.Diagnostics.ProcessStartInfo p=null; ...

  4. Delphi中拖动无边框窗口的5种方法

    1.MouseMove事件中加入: // ReleaseCapture;// Perform(WM_SYSCOMMAND, $F017 , 0); 2.MouseDown事件中加入: // POSTM ...

  5. Windows Azure入门教学系列 (二):部署第一个Web Role程序

    本文是Windows Azure入门教学的第二篇文章. 在第一篇教学中,我们已经创建了第一个Web Role程序.在这篇教学中,我们将学习如何把该Web Role程序部署到云端. 注意:您需要购买Wi ...

  6. cocos2d-x游戏开发系列教程-坦克大战游戏启动界面的编写

    用前面介绍的方法,创建一个cocos2d-x项目,可以看到新项目内容如下图:

  7. UIGestureRecognizer在多层视图中的触发问题

    在一个superview中,添加了一个subview.tap一下superview,将subview隐藏起来. 在视图superview添加一个UITapGestureRecognizer对象,在UI ...

  8. JS - 全屏滚动

    下载地址:http://www.lanrentuku.com/js/quanping-1141.html

  9. uva 140

    思路:暴力+剪枝 uva140 wa了好多次……数组开小了……!!! #include <iostream> #include <cstdio> #include <cm ...

  10. FOJ 1607 Greedy division 数学题

    题目地址: http://acm.fzu.edu.cn/problem.php?pid=1607 给定一个n,将n平均分成m份,问有几种方法,每种方法中找出最大的数.思路:就是求n的因子数.先将每个数 ...