VB.NET 机房收费系统项目总结
从2013年5月3日——2013年8月20日历时三个多月的.NET机房收费系统终于完成了。项目做完了,真有一种如释重负的感觉。
下面我将从文档、UML图,代码这三个方面来进行总结,重点是前两方面内容。
一、文档
1.1可行性分析报告和项目开发计划
这两个文档主要是确定软件系统是否值得开发,搞清楚问题的性质,确定系统的目标和规模,从技术,经济和社会等方面分析论证项目的可行性。还有对此项目的开发做个总体的规划,内容有:项目的背景,项目概述,计划,人员及组织分工,交付期限。为软件的开发进行详细的计划。可行性分析报告和项目开发计划是给开发单位看的。
1.2需求分析。
是用户对项目软件系统在功能、行为、性能设计约束方面的期望。软件对软硬件的需求。需求分析是用户、分析人员和系统设计人员共同参与讨论编写,是为系统设计提出“做什么”的。一个很有用的设计文档,是系统开发的灵魂。
1.3概要设计和详细设计
1.3.1概要设计
概要设计将系统划分成模块结构形式,决定每个模块要完成的功能,每个模块之间的调用关系。概要设计主要包含:功能、处理流程、数据结构、运行等做设计。概要设计是高级设计人员和有丰富经验的开发人员一起编写。
1.3.2 详细设计
描述模块执行过程、局部数据组织、控制流和每一步具体家用要求及实现设计。为编程人员提供每一个功能的数据输入,输出、设计方法、流程逻辑、接口、存储分配、注释设计、测试计划。此文档是由每一个程序人员参与编写。
编写完一遍文档发现,整个系统已经开发了三分之一了。
二、UML图
定义:采用参与者与用例作为基本元素,以不同的视角展现系统的功能型需求。在需求分析的时候要画用例图。
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 机房收费系统项目开发完成,个人不管是在技术还是在思想上都是收益颇丰的。此次项目的完成不仅给自己打开了一扇新窗,开始拨云见日;同时也给自己打开了一片的新的天地,以后的学习将会是高屋建瓴,势不可当!
VB.NET 机房收费系统项目总结的更多相关文章
- VB.NET机房收费系统总结
总感觉这次机房收费系统非常有份量,一直没有下手总结,从2014-7-27至2014-9-29.这中间有太多故事和成长.首先说一下两次机房收费系统的不同,它是我们从面向过程向面向对象的一个转变.在.NE ...
- vb.net机房收费系统之组合查询
我个人一直认为,组合查询是机房收费系统的一个难点,尤其是用到三层之后,如果要为组合查询中的每一个查询建立一个显然是太麻烦了. 下面介绍一下我的方法,对大家起个参考作用. 我将该表中可输入的内容定义为一 ...
- VB.NET<机房收费系统个人重构版>你都学会了什么(之五)
接着上篇我们说的配置文件,今天我们来说一下接口. 1.UML图 2.三层架构 3.Sqlhelper 4.配置文件 5.接口 6.设计模式 什么是接口呢?我们可以将接口理解为用于沟通的中介的抽象化.可 ...
- 小结:VB.NET机房收费系统个人版
经过几天的缝缝补补,自己的个人版最终OK了,!或许是由于有第一次的机房收费系统的经验,这次做,感觉很亲切. 在业务逻辑方面,沿袭曾经的逻辑.做了一点升级.可是修改不大. 在数据库方面,感觉自己从一个小 ...
- vb.net机房收费系统——存储过程
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/xdd19910505/article/details/35574125 一.使用背景 ...
- 【vb.net机房收费系统】之sqlhelper 标签: 数据库 2015-05-17 10:47 819人阅读 评论(15)
在敲机房收费重构版的时候,用到了sqlhelper,当时不知道怎么开始,各种听别人说,张晗说,一定要用sqlhelper,特别好用,我当时没有用balabala~当时一听,哎哎哎,这个高级,要搞一搞, ...
- 【vb.net机房收费系统】之没有包含要从继承的组件的已生成程序集 标签: vb.net继承 2015-05-02 15:19 1012人阅读
在敲到组合查询这个功能的时候,需要用到窗体的继承,但是在新建继承窗体的时候,出现了错误(没有包含要从继承的组件的已生成程序集).如下图: 问题的产生:当时没怎么注意,也不知道怎么弄的,最后反正是继承上 ...
- vb.net机房收费系统之配置文件
总是听到说用反射+配置文件访问数据库,那配置文件到底什么东西? 1.定义: 配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置, ...
- VB.NET版机房收费系统---报表
报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之1047百马问题
题目 解决代码及点评 /* 47.马百瓦问题.有100匹马,100块瓦,大马驮3块, 小马驮2块,两个马驹驮1块.问大马.小马.马驹各多少? 要求:① 不许用for循环; ② 循环次数 ...
- Stack栈的三种含义
理解stack栈对于理解程序的执行至关重要.easy混淆的是,这个词事实上有三种含义,适用于不同的场合,必须加以区分. 含义一:数据结构 stack的第一种含义是一组数据的存放方式,特点为LIFO,即 ...
- Spring通过工厂创建实例的注意事项
假设第三方(or别的team)提供一个工厂类(此类是不能够改动的.往往以jar包形式提供的),须要供给我们项目来使用. 可是我们自己的项目使用了spring来配置,所以我们当然希望可以通过spring ...
- 如何把 excel 的数据导入到数据库里面去
1. 把 excel 另存为 .csv 格式 2. 用 Notepad 打开 .csv 文件, 第一行就是全部的字段 3. 创建表结构 create table yu_rt_01 as select ...
- Qt布局管理
原地址:http://blog.csdn.net/lastsoup/article/details/7028243 设计软件中各个部件的位置排列,有两种方法: 1.设置widget的在父窗体中的坐标和 ...
- struts2 <s:iterator/>怎样取得循环的索引
<s:iterator value="list" id="user" status="L"> <s:property va ...
- 程序实现LayoutAnimationController
在res/anim下新建anim_set.xml: <?xml version="1.0" encoding="utf-8"?> <set x ...
- Swift - 获取屏幕点击坐标下所有对象(SpriteKit游戏开发)
对于场景内对象元件的点击响应,我们可以在场景的touchesBegan()方法中内统一处理. SKScene中touchesBegan()是响应屏幕点击的方法,在这里面我们可以先获取点击位置下所有的对 ...
- Python WxPython 的安装以及使用
WxPython 网址 学习网址 http://wiki.wxpython.org/How%20to%20Learn%20wxPython 安装网址 http://wiki.wxpython.org/ ...
- hdu 4687 带花树匹配
其实吧,思路挺简单的,只不过昨天刚学,还有一些东西不太了解,然后就23333333... 吃晚饭回来就A了,我是有多傻啊,这么题都A不掉,不能忍啊... 我们可以先求出哪些边是可能存在于最大匹配中的, ...