第一次机房收费颗粒归仓

写在前面

机房也是一场持久战,中途遇到自考的事,然后被自己孤立了一段时间,不过这也恰恰说明一个问题,自己的时间管理做的不好,看来自己以后努力的方向是找到了。在入手敲机房的时候,按照师哥说的那样,尽量避开之前师哥师姐使用的现成的代码,对功能的实现要自己去想,这样也是有很大的好处的,就是自己的思路很清楚,不像照着敲学生那样有种晕头转向的感觉,至少自己掌握了很大的主动权。当然,不太好的地方是,自己写的代码没有技术含量,虽然很简单,但是很繁琐,不过这都过去了,至少明确自己哪里可以做的更好。


技术学习

数据库

  • 附加数据库

    看完视频之后,自己不甘心用给的数据库,于是参照着之前的数据库,自己动手建了一个数据库,这样也发现了很多问题。数据库附加的时候会有这样的提醒:

    报错:5120,即为权限的问题,我们找到我们要附加的mdf文件,右键属性–安全,在下图中将完全控制勾上,就可以附加了:

    这样数据库附加的问题就可以解决了。

  • 标识列

    数据库中用到了标识列,我就查了查,百度是这么解释的:标识列,是SQL Server中的标识列又称标识符列,习惯上又叫自增列。标识列的创建与修改,通常在企业管理器和用Transact-SQL语句都可实现。

    那么问题来了,如何设置呢,其实很简单,右键单击你要设计的表,在右侧标识列,添加你让哪列成为标识列,就可以了!

  • 修改数据库

    有的时候数据库中的内容不允许我们修改,敲学生的时候我放弃了,师姐的话说的很对,出来混总是要还的,这时候,你想着可以省点事,之后你就摊上大事了,其实挺简单的。在数据库中单击工具–选项–打开如下图所示,去掉框中的对勾,即可完成对表的修改。


控件部分

  • Msflexgrid

    例如下面这个图中,要实现对选中的内容删除,这里的删除有两部分,第一:删除数据库中的内容,第二:删除grid中的内容,当删除grid中的内容是不能将第一行删掉。

    以下是代码的分析

‘找到选中的内容:
With MSFlexGrid1

        If .RowSel > .Row Then
            startRow = .Row
            endRow = .RowSel
        Else
            startRow = .RowSel
            endRow = .Row

        End If
‘ 删除数据库中的内容
For i = startRow To endRow

     If mRc.RecordCount <> 0 Then
          mRc.MoveFirst

          While mRc.EOF = False

             If Trim(mRc.Fields(0)) = .TextMatrix(i, 0) Then
               A(i)=i
               mRc.Delete

              End If

              mRc.MoveNext
           Wend
      End If

 Next i
‘删除grid表中的内容,有两个办法,一种是重新将数据库中的内容,传给grid,另一种就是利用一个循环,将grid中选中的内容删除,我用的就是第二种办法:
            If startRow = 0 Then
                For i = 1 To endRow
                    .RemoveItem A(i)
                Next i
            Else
                For i = startRow To endRow
                    .RemoveItem A(i)
                Next i
            End If
  • DTPicker 控件

    如果我们要让用户常常来手动输入日期的话,费事是一回事,日期输入不对的时候老是提醒,就不好了,这是多麻烦的事。于是这时候date time 控件的作用就显现出来了。这里不得不说的一个一个属性是Format属性。

属性 格式
0-dtpLongDate yyyy-mm-dd hh:mm:ss
1-dtpShortDate yyyy-mm-dd
2-dtpTime hh:mm:ss
3-dtpCustom 依据customeFormat而定

运行时的效果是这样的:是不是感觉对vb的认识又更近了一步呢!

当然如果用到这个控件的话,必不可少的一个内容,就是判断当前日期了:

‘判断选择日期是否大于当前日期,大于的话,则置为当前日期
    If DTP1.Value > Date Then

        MsgBox "所选的日期不能大于当前日期!"
        DTP1.Value = Date

        Exit Sub

    End If

导出excel

这一部分的核心内容就是excel和vb的一个联系及一个循环的使用,将grid表中的内容,从行到列添加到execel表格中的每一个单元格。当然,使用之前,要引用上 Microsoft office xx Object Library .下面我们来分析代码:

Public Function GridToExcel(flex As MSFlexGrid, g_CommonDialog As CommonDialog)

    On Error GoTo ErrHandler

    Dim xlApp As object    ‘定义一个excel对象
    Dim xlBook As object   ‘定义一个工作簿

    Dim Rows As Integer, Cols As Integer
    Dim iRow As Integer, hCol As Integer, iCol As Integer
    Dim New_Col As Boolean
    Dim New_Column     As Boolean

    g_CommonDialog.CancelError = True
    ‘On Error GoTo ErrHandler

    ‘ 设置标志
    g_CommonDialog.Flags = cdlOFNHideReadOnly
    ‘ 设置过滤器
    g_CommonDialog.Filter = "All Files (*.*)|*.*|Excel Files" & _
    "(*.xls)|*.xls|Batch Files (*.bat)|*.bat"
    ‘ 指定缺省的过滤器
    g_CommonDialog.FilterIndex = 2
    ‘ 显示“打开”对话框
    g_CommonDialog.ShowSave

    ‘没有内容的话,跳出过程
    If flex.Rows <= 1 Then
        MsgBox "没有数据!", vbInformation, g_Msgtitle
        Exit Function
    End If

    Set xlApp = CreateObject("Excel.Application") ‘新建一个excel
    Set xlBook = xlApp.Workbooks.Add    ‘添加工作簿

    xlApp.Visible = False

    With flex
        Rows = .Rows
        Cols = .Cols
        iRow = 0
        iCol = 1

‘下面添加内容用两个循环来完成的,值得注意的就是,对于grid表来说,第一个单元格坐标是(0,0)对于excel来说,是(1,1)别的应该都没有问题了。
        ‘外循环,遍及每一列的
        For iCol = 1 To Cols

            ‘内循环,遍及每一行的
            For iRow = 1 To Rows
                ‘将gri表中的内容,加给excel
                xlApp.Cells(iRow, iCol).Value = .TextMatrix(iRow - 1, iCol - 1)
            Next iRow

        Next iCol
    End With

    ‘设置excel的属性
    With xlApp
        .Rows(1).Font.Bold = True
        .Cells.Select
        .Columns.AutoFit
        .Cells(1, 1).Select
        .Application.Visible = True
    End With

    ‘选择保存的路径
    xlBook.SaveAs (g_CommonDialog.FileName)
    xlApp.Application.Visible = True

    xlApp.DisplayAlerts = False
    xlApp.Quit
    Set xlApp = Nothing  ‘"交还控制给Excel
    Set xlBook = Nothing
    flex.SetFocus
    MsgBox "数据已经导出到Excel中。", vbInformation, "成功"
    Exit Function

‘ErrHandler:
    ‘ 用户按了“取消”按钮
    ‘If Err.Number <> 32755 Then
       ‘ MsgBox "数据导出失败!", vbCritical, "警告"
    ‘End If
End Function

其他内容

  • 实例话的问题

    之前我一直不太清楚,这种先dim 然后set 的用法,后来分析了一下,dim就是用之前声明,set就好比用的时候,具体的说一下,具体。

    Dim Cnn As ADODB.Connection ‘声明

    Set Cnn = New ADODB.Connection ’实例化

    相当于:dim cnn as new adodb.connection

  • 函数
  • Instr函数

    InStr([start,]string1,string2[,compare])

    解释:InStr([起始,] 接受搜索的字符串,被搜索的字符串[,匹配模式])

    加个例子,会清楚很多,我们是这样利用的:

      If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
        ‘如果有这几个字符则
        Cnn.Execute SQL ‘执行查询语句 SQL
        MsgString = sTokens(0) & "query successful"
      End if 
  • Replace 函数

    replace(str1,str2,[str3])

    解释:用str3替换,str1中str2的字符,一般str3可以省略,即为空格

    举个例子:

    Replace(“TT好人”,“TT”) return “好人”

    这里在实现一个换行功能的时候,我用到了,这个函数,运行的效果如下:

    代码是这样写的(只展示部分),很简单:

str = "充值卡号:" & Trim(chargeMrc.Fields(2)) & "、" & "上次卡内余额:"
str = Replace(str, "、", Chr(13) & Chr(10))
  • Split函数

    变量 = Split(原字符串变量, 切割标志)

    这个函数在模块中也有用到,用以将数据库中的内容划分成数组的形式。

  • 优化

    有一种定义字符串的方法来限制字符串,感觉效果挺好用的。

Dim TT As String
      ‘这样可以随意添加自己想要加入的字符
      TT = "#$%^&‘%@*!"

      If InStr(1, TT, Chr(KeyAscii)) <> 0 Then KeyAscii = 0
  还有case语句也挺简单的,举一个限制数据数字的例子:
Select Case str(KeyAscii)
        Case str(48) To str(57)
        Case str(8)
Case Else
        KeyAscii = 0
        Beep
End Select    

思想进步

  • 流程图

    最开始的时候,自己特别懒,就是不想画流程图,不想全部的部分过一遍,这样的结果就是开始敲的时候,有点乱有的关系自己没有弄清楚,有一种敲不动的感觉。事实证明什么,偷懒还是不行的,于是后来自己在敲的时候,都是先过一遍流程,然后再敲,这样的感觉就比较好了,思路清晰,走起来就会少许多的迷茫。

  • 注释

    我写注释的三个时期,说起来我都很想笑。第一阶段:看不懂啊,这些注释都是什么意思?但是还是乖乖的把注释敲上了。第二阶段:这些注释,不都是这么回事么?有必要都写一下么,我自己懂不就好了么?第三阶段:主动写注释,而且是先写注释,我想要实现什么功能,我想按什么样的步骤来学习,把自己心里想的先用注意的形式标注出来,然后再填代码,最后功能实现,发现这个过程很轻松的。最后总结一下,为什么要写注释呢?方便自己,方便他人,实现双赢。

  • 责任心

    敲完代码,就觉得万事大吉了,是么?不是的,拉着师傅过来看了看我的系统,师傅,点了点就发现了很多问题,米老师说的不将就,我怎么就变得这么能将就,不站在用户的角度思考问题,常常以自己写代码方便为主,开始连个时间控件都不想加一下,常常是限制用户,给用户提要求,才能会使用我的系统,我想我或许就是猪了。我们忙活半天,结果就是为了别人用起来的时候很方便,这样的目的,我是不是时刻铭记于心,才能先成为一名合格的编程员。

  • 畏难心理

    不得不说,很多时候,我们常常问别人,这样做可以实现吗?别人告诉你可以,你就可以做到,同样的事,别人告诉你不知道,你在完成的路上会都一些犹豫和坎坷,别人告诉你不可以,你就放弃了。周围有很多这样的人,你做的事都需要别人来肯定,何必这样为难自己,如果你想让自己变得优秀的话,那就把一切顾虑放开,相信自己可以做的到,无论别人是否能够胜任。

  • 站在巨人的肩膀上

    开始着手机房的时候,没有参考别人的代码,也提醒自己不到万不得已的时候不要参考师哥师姐的博客。不过最后总结的时候,倒是学到他们不少的东西。我们身边有很多值得我们学习的榜样,我们应该看得见,哪怕是看到差距也是好的。

    调用数据库的内容,我从头开始都是用的,select 语句,先把内容找到,然后进行,对它们的修改,删除,添加,更新。不过,之前的数据库视频,看到东西,自己一点都没有印象了么,我之前明明学过的啊,比如从师姐的博客中拾起的东西:

    ‘我们删除用户的时候可以这么写,之前在模块中已经定义过了
    txtSQL = "delect User_Info where "
    Call ExecuteSQL(txtSQL, msgText)
   ‘添加一个新用户时
   txtSQL = "insert into User_Info values(‘" & txtUser.Text & "‘,‘" & txtPWD.Text & "‘,‘" & comboUserLevel.Text & "‘,‘" & txtName.Text & "‘,‘" & Head &  "‘)"

   Call ExecuteSQL(txtSQL, msgText)
    ‘更新某个用户信息
    txtSQL = "update User_Info set UserID =‘ ‘ where "
    Call Executesql(txtSQL, msgText)

这足以反映一个问题,平常的视频学习,自己要认真对待,做好总结,该动手的时候就不要偷懒,毕竟自己真的没有那么好的脑子,多总结,多总结,多总结。

还有一块的内容,也是从师姐那里学来的,在我们清空文本框的时候,可以使用遍历控件的一种方法:

‘声明一个控件
Dim txt As Control

‘遍历每一个控件
For Each txt In Me.Controls

    ‘如果控件的类型是 textbox
    If TypeOf txt Is TextBox Then
        txt.Text = ""
    End If

Next

这个不仅可以实现textbox控件,别的类型也是一样的,这样做的好处就是不容易出错,同时也很是方便的,多像别人学习,在自己还是个菜鸟的时候。


结束语

多了解一点,让自己多一些常识,总是没有坏处的,说不定那一天就可以帮助自己,久而久之,就会一通百通的,期待自己的成长,相信自己可以做的很好,给自己一个优秀的机会。

时间: 2024-10-12 16:01:47

第一次机房收费颗粒归仓的相关文章

第一次文档编写总结(机房收费系统)

从图中可以看出编写文档的顺序,从可行性研究报告到开发进度月报构成了机房收费系统的整体文档,贯穿了软件工程的整个生命周期. 第一次机房收费系统和软工视频的完成是编写文档的依据和基础.起初,是一种无从下手的感觉.首先我们应该清楚文档是指导我们开发的,是在代码开发之前写的,而不是开发之后写的.有了学生信息管理系统的基础,我们第一次机房收费系统只是尝试着去写代码完成要求的功能,而不是一次正规的开发.人力物力财力都没有系统正规地去考虑.开发前的分析设计.开发中的细节和开发后的维护我们都没有涉及到.因此,编

机房收费系统重构初期问题总结

进入五月份開始的三层架构的学习.那个时候,三层仅仅是理解了一些理论知识.还有在师父验收三层登陆实例的时候,仅仅知道三层是怎样建立起来的. 并且在验收的过程中,发现非常多逻辑性的错误.三层结束到机房重构,之间不知道停顿了多久.总之,真正開始重构的也就一个星期左右. 在三层结束之后,就要谋划机房重构的问题了. 可是,对于已经学习了非常多理论知识之后.发现,对于要開始重构机房一点思路都没有.不知道是先从哪里下手,文档?UML图?程序?这样的感觉真是-- 查看tgb的培养计划.从让导师指导建模開始. 也

个人版机房收费系统总结

用了一个月的时间,重构完成了个人版的机房收费系统,不来个总结心里就有点儿不踏实. 首先说说一年前第一次敲机房收费系统的事儿,那是纯面向过程,能实现功能就可以.当初完成了这个系统,可谓是在提高班学习中的又一个里程碑,纯手工制作,精心打造.我们学会了分析业务流程,消化吸收VB和数据库的学习成果,提高对代码的亲和力,培养对编程的兴趣. 一年后的现在经历了第二次机房收费系统,深刻体会到了米老师编制培养计划的良苦用心,我们其实是在攀登一座高山,一步一个台阶.在第一次机房收费系统中暴露出来的问题得以解决和完

机房收费系统——登录优化

<机房收费系统个人版>基本上完工了,我的U层代码很多很乱.基本上是D层有几个函数,B层就对应有几个函数,U层使用对应B层中的每一个函数.比如说在登录中,U层首次要使用一个函数检查用户名和用户密码是否正确,然后再使用"添加用户上机记录"的函数.下面是登录的时序图: 登录业务比较简单,但是对于复杂的上机过程呢?U层要检查卡是否注册,余额是否充足,卡的状态是否在使用中,该卡是否现在不在线,通过这一系列检验后,还要查询学生表显示学生信息等等.这样就造成U层有好多函数,和B层的耦合度

VB.NET版机房收费系统---导出Excel表格

datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,可以显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件非常简单和直观,大多数情况下,只需要设置DataSource属性即可,在绑定到包含多个列表或表的数据库源时,只需将DataMember属性设置为绑定的列表或表的字符串即可.机房收费系统多次用到数据表格的显示,并且导出为Excel表格,第一次机房收费系统是用VB版本的,她导出Excel的方法如下: 打开VB-工程-应用-勾选M

个人版机房收费——数据库设计

在做机房收费系统个人版的时候又一次的遇到了数据库设计方面的内容,还记得第一次机房收费系统的时候,数据库的设计基本上是边敲边设计的,搞得特别的乱,也不符合编程的规范.既然我们现在已经是专业人士了,那么就应该采取一些专业的手段来设计,并且一个数据库设计的好坏直接影响到后台数据,对软件的运行效率也是密切联系的.下面就分享下这次做数据库的心得. ER模型 在自学考试中,学习过有关ER模型方面的知识,这是被广泛被采用的概念模型设计方法,就是所谓的图形的方式来展示用户需求中各方面的联系,这与Use Case

总结个人版机房收费系统

个人版机房收费系统是在学习完vb.net语言和三层架构思想后的第一个系统,我们要从C/S向B/S进发过程中一个铺路石,在没开始C/S之前,虽然没有什么直接的联系.但学习就是有很多共同的地方,在这个过程中有很多知识是在巩固,有很多东西新接触或者实践.我最大的感受就是,走过了这个过程就一定会带走些什么. 个人版机房收费和第一版系统有很多相同的地方,这些相同的地方就在进行重构的过程中,帮助我们i+1. 比如: 1.开发语言:虽然一个用的是vb一个是vb.net.但不得不说有了第一版的经验,重构版用起来

机房收费.NET版个人重构——总结

机房收费系统个人重构版终于要落下帷幕了,这一个半月经历的"痛苦"和成功时喜悦恐怕也只有自己能够体会吧,现在回过头来,进行一下总结,颗粒归仓! 机房收费个人重构大概的经历应该分为四个阶段:需求分析,软件架构(UML图和软工文档),代码编写,程序调试完善. 需求分析 个人重构版的需求分析要比VB版明朗多了,其中有三点需要指出: a.软件的使用者是教师或其他教职工,而学生作为消费者不直接接触该系统. b.三种用户(一般用户,操作员,管理员)只是权限不同,而且具有继承关系. c.感觉应该有个超

机房收费系统合作版(一)——框架搭建

机房收费系统的合作版中首次尝试使用框架:三层 + Spring.NET +Nhibernet框架. 一.整体框架图如下: 二.三层架构图如下: DAL层: Adapter: 结构: 实现IRepositoryDAL接口:扩展 继承RepositoryBaseDAL父类:复用 功能: 操作类:封装基本的操作--增删改查 this.HibernateTemplate.Save(entity) this.HibernateTemplate.Delete(entity) this.HibernateTe