机房收费整体思路

实话说这个系统直到敲了一大半才有点明白了,不过也走了很多的弯路,现在就把现在稍好一点的思路拿出来跟大家分享一下。

记得原先以为师傅说过当你不知道从哪里入手的时候,就随便找一个自己拿手的着手点,把简单的一点点的实现,稍微复杂的功能的思路也越来越清晰,这样既不浪费太多的时间梳理思路,也能让自己的学习进度不是那么慢。下面是我对里面的一些过程的自己的一点看法,希望大家发现问题积极提出。

一、主窗体的菜单设置

这个问题不是新问题,编辑菜单我们已经遇到过很多次了,但是这次是自己设计菜单,怎样设计菜单是我们知得研究的问题。

注意:1、首先分析这个菜单的功能,每个菜单的区别于联系

        2、利用好英文缩写,实在不行拼音也行(不建议)最好让别人也能看懂

         专业解答:[作用范围域前缀] + [前缀] + 基本类型 + 变量名

         其中前缀是可选项,以小写字母表示 

基本类型是必选项,以小写字母表示 
变量名是必选项,可多个单词(或缩写)合在一起,每个单词首字母大写

机房举例:主窗体上菜单名称就可以设置为:mnu_admin_**

优点:1、方便阅读和调用

     2、在修改和完善功能的时候更加节省时间

延伸:窗体、菜单、控件、函数等都可以参考这种命名来提高效率

二、功能与数据库的分析

仔细研究了一下这个机房收费系统,里面除了帮助菜单没有用到数据库其余都有数据库的调用,所以分析好每一个功能所用到的表是值得我们下功夫研究的。

分析方法:要从头开始分析,从登录窗体到点击关闭按钮都要认真的查看这个功能会用到那个表,用到哪个字段,这样也有利于数据库的设计

红利:

登录窗体:user_info,onwork_info,worklog_info

学生查看余额:student_info

学生查看上机记录:line_info

学生充值记录查询:recharge_info

学生上机状态查看:student_info,basicdata_info,online_info,line_info

修改密码:user_info

注册:student_info

充值:recharge_info,student_info

退卡:cancelcard_info,student_info

收取金额查询:recharge_info

金额返还信息查询:cancelcard_info

学生基本信息维护:student_info

学生上机统计信息查询:line_info

操作员工作记录:worklog_info

结账:user_info,student_info,recharge_info,cancelcard_info

删除添加用户:user_info

基本数据设定:basicdate_info

正在值班的教师:onwork_info

日结账单:checkday_info

周结账单:checkweek_info

上机:student_info ,basicdate_info,line_info,online_info

下机:student_info,basicdate_info,online_info,line_info

三、功能与逻辑

每个功能都对应着一种逻辑关系,理清楚每个功能的逻辑才能更好的去用代码实现功能表达想法。

红利:

最简单的逻辑(直接调用数据库中某个表或已知某个字段的值调用表的某一条记录将其显示在窗体上,或将记录更新到数据库里):

例如:学生查看余额,学生查看上机记录,学生充值记录查询,上机状态查看,密码修改,注册,充值,退卡,收取金额查询,金额返还信息查询,添加删除用     户,基本信息设定,正在值班教师,结账。(百分之八十的都是简单的逻辑类型)

上机逻辑:判断是否输入卡号——>卡号是否为空——>卡号是否注册——>卡号是否正在使用——>卡里的余额是否充足——>更新数据库——>上机成功

下机逻辑:输入卡号——>是否为空——>是否注册——>是否上机——>计算上机时间——>判断用户类型确定单位时间的金钱——>计算金钱——>修改记录——>下机

组合查询逻辑:确定bombobox与textbox在点击查询之前不为空——>简单的数据库调用——>把查询到的内容直接添加到msflexgrid控件上

例如:学生基本信息维护,学生上机统计信息查询,操作员工作记录

报表逻辑:这个逻辑比较简单,主要是学习报表的设计调用。刷新主要是报表参数与vb的交互的学习。

温馨提示:逻辑功能相同的窗体,可以着重研究一个,把代码尽量优化,完成这个之后别的都是复制修改代码的体力劳动了。

四、功能与代码

下面的功能主要与上面的逻辑对应

逻辑一:

txtsql = "select * from XX_info where XX='" & Trim(XX.Text) & "'"   '调用你所需要的表
Set mrc = executesql(txtsql, msgtext) '执行sql语句,把执行结果赋值给mrc
    If mrc.EOF Then '没有你想要的信息时
        MsgBox "提示信息!", vbOKOnly + vbExclamation, "提示"
        Exit Sub
    Else
        xx.xx = mrc.Fields(n) '把所查询到的数据对应的字段赋值给某个控件
        mrc.Delete '删除你所查询到的数据
        mrc.AddNew '更新你窗体上的数据到数据库
        mrc.Fields(x) = xx.xx
        mrc.Update
    End If
上机逻辑:

'上机先判断是为空号,是否注册,是否符合上机条件—余额充足
Private Sub cmdsj_Click()
    Dim mrc As ADODB.Recordset
    Dim txtsql As String
    Dim msgtext As String
    Dim txtsql1 As String
    Dim mrc1 As ADODB.Recordset
    Dim txtsql2 As String
    Dim mrc2 As ADODB.Recordset
    Dim txtsql3 As String
    Dim mrc3 As ADODB.Recordset
    
    If Not testtxt(txtcardno.Text) Then '防止输入框为空
        MsgBox "卡号为空!", vbOKOnly + vbExclamation, "警告"
        txtcardno.SetFocus
        Exit Sub
    End If
    
     If Not IsNumeric(Trim(txtcardno.Text)) Then '防止输入框为空
        MsgBox "请输入数字!", vbOKOnly + vbExclamation, "警告"
        txtcardno.SetFocus
        Exit Sub
    End If
    '判断卡号是否存在,判断此卡是否正在上机
    txtsql = "select * from student_info where cardno='" & Trim(txtcardno.Text) & "'" 'And "status= '" & 使用 & "'"""
    Set mrc = executesql(txtsql, msgtext)
    
    '寻找基本数据里面最少上机金额
    txtsql3 = "select * from basicdata_info "
    Set mrc3 = executesql(txtsql3, msgtext)
    
    If mrc.EOF Then
        MsgBox "此卡号尚未注册"
        txtcardno.Text = ""
        txtcardno.SetFocus
    Else
        '判断余额是否充足,如果充足执行下面的语句,如果不充足提示充值
        If mrc.Fields(7) < mrc3.Fields(5) Then
            MsgBox "余额不太多了,请先充值再上机!", vbOKOnly + vbExclamation, "温馨提示"
            frmchargecard.Show
            Exit Sub
        End If
            
        txtsql1 = "select * from online_info where cardno='" & Trim(txtcardno.Text) & "'" 'And "status= '" & 使用 & "'"""
        Set mrc1 = executesql(txtsql1, msgtext)
        '往line表里更新数据
        txtsql2 = "select * from line_info"
        Set mrc2 = executesql(txtsql2, msgtext)
        
        
        If mrc1.EOF Then
            If mrc1.Fields(11) = "未结账" Then
                MsgBox "该用户正在上机!", vbOKOnly + vbExclamation, "提示"
                Exit Sub
            Else
                '调用的学生信息表给文本框,然后在把文本框里的文本更新到onwork_info表
                txttype.Text = mrc.Fields(14)
                txtstudentno.Text = mrc.Fields(1)
                txtname.Text = mrc.Fields(2)
                txtsex.Text = mrc.Fields(3)
                txtdepartment.Text = mrc.Fields(5)
                txtsjdate.Text = mrc.Fields(12)
                txtsjtime.Text = mrc.Fields(13)
                mrc1.AddNew
                mrc1.Fields(0) = txtcardno.Text
                mrc1.Fields(1) = txttype.Text
                mrc1.Fields(2) = txtstudentno.Text
                mrc1.Fields(3) = txtname.Text
                mrc1.Fields(4) = txtdepartment.Text
                mrc1.Fields(5) = txtsex.Text
                mrc1.Fields(6) = txtsjdate.Text
                mrc1.Fields(7) = txtsjtime.Text
                mrc1.Fields(8) = Winsock1.LocalHostName
                mrc1.Fields(9) = Now '数据库里面既包含日期有包含时间那就是now了
                mrc1.Update
                mrc2.AddNew
                mrc2.Fields(1) = txtcardno.Text
                mrc2.Fields(2) = txtstudentno.Text
                mrc2.Fields(3) = txtname.Text
                mrc2.Fields(4) = txtdepartment.Text
                mrc2.Fields(5) = txtsex.Text
                mrc2.Fields(6) = txtsjdate.Text
                mrc2.Fields(7) = txtsjtime.Text
                mrc2.Fields(11) = "0"
                mrc2.Fields(12) = mrc.Fields(7) '把student_info表里面的信息放到line表里面
                mrc2.Fields(13) = "正常上机"
                mrc2.Fields(14) = Winsock1.LocalHostName
                mrc2.Update
            End If
        Else
            MsgBox "此卡正在上机!"
            txttype.Text = mrc1.Fields(1)
            txtstudentno.Text = mrc1.Fields(2)
            txtname.Text = mrc1.Fields(3)
            txtdepartment.Text = mrc1.Fields(4)
            txtsex.Text = mrc1.Fields(5)
            txtsjdate.Text = mrc1.Fields(6)
            txtsjtime.Text = mrc1.Fields(7)
        End If
        
    End If
     
End Sub
下机逻辑:

Private Sub cmdxj_Click()
    Dim mrc1 As ADODB.Recordset
    Dim mrc2 As ADODB.Recordset
    Dim mrc3 As ADODB.Recordset
    Dim mrc4 As ADODB.Recordset
    Dim txtsql1 As String
    Dim txtsql2 As String
    Dim txtsql3 As String
    Dim txtsql4 As String
    Dim msgtext1 As String
    Dim msgtext2 As String
    Dim msgtext3 As String
    Dim msgtext4 As String
    Dim t
    Dim t1
    Dim mrate As Long
    Dim mtmprate As Long
    Dim tleasttime
    Dim tprepare
    Dim money As Integer
    Dim cash As Integer
    Dim mlimitcash As Integer
    
    '对四个表的分别调用
    txtsql1 = "select * from student_info where cardno='" & Trim(txtcardno.Text) & "'"
    txtsql2 = "select * from basicdata_info "
    txtsql3 = "select * from OnLine_info where cardno='" & Trim(txtcardno.Text) & "'"
    txtsql4 = "select * from line_info where cardno='" & Trim(txtcardno.Text) & "'"
    
    Set mrc1 = executesql(txtsql1, msgtext1)
    Set mrc2 = executesql(txtsql2, msgtext2)
    Set mrc3 = executesql(txtsql3, msgtext3)
    Set mrc4 = executesql(txtsql4, msgtext4)
    
    
    '判断是否为空
    If Not testtxt(txtcardno.Text) Then '防止输入框为空
        MsgBox "卡号为空!", vbOKOnly + vbExclamation, "警告"
        txtcardno.SetFocus
        Exit Sub
    End If
    '判断是否为数字
    If Not IsNumeric(Trim(txtcardno.Text)) Then '防止输入框为空
        MsgBox "请输入数字!", vbOKOnly + vbExclamation, "警告"
        txtcardno.SetFocus
        Exit Sub
    End If
    '判断是否合法
    If mrc1.EOF Then
        MsgBox "此号尚未注册!", vbOKOnly + vbExclamation, "提示"
        txtcardno.Text = ""
        txtcardno.SetFocus
        Exit Sub
    End If
    '判断是否上机
    If mrc4.EOF Then
        MsgBox "此卡号没有上机!", vbOKOnly + vbExclamation, "提示"
        txtcardno.Text = ""
        txtcardno.SetFocus
    Else
         '把基本数据表里的数据都赋值出来
         mrc2.MoveLast
        mrate = mrc2.Fields(0)
        mtmprate = mrc2.Fields(1)
        tunittime = mrc2.Fields(2)
        tleasttime = mrc2.Fields(3)  'budui
        tprepare = mrc2.Fields(4)
        mlimitcash = mrc2.Fields(5)
        '把line表的基本数据表示出来
        cash = mrc4.Fields(12)
        
        Dim M As Date

        
         M = Format(Now(), "yyyy-mm-dd hh:mm:ss")
        t = DateDiff("n", mrc3.Fields(9), M) 'datediff函数来取时间
       
        '判断上机时间的长短
        If t < tprepare Then
            t1 = 0  '时间小于准备时间的时间按零算
        Else
            If t < tleasttime Then
            '这里逻辑有点问题,最小时间没什么用
                t1 = tleasttime / 60 '小于最小时间的按最小时间算
            Else
                If t Mod 60 = 0 Then
                    t1 = Int(t / 60) '如果整除的话就按整点算
                Else
                    t1 = Int(t / 60) + 1 '如果不能整除就取整加一
                End If
            End If
        End If
        '时间已经有了就差计算金钱了
        
        '判断用户类型
        If mrc1.Fields(14) = "固定用户" Then
            money = t1 * mrate
        Else
            money = t1 * mtmprate
        End If
         '窗体上显示下机日期,下机时间,消费时间
        txtxjdate.Text = Date
        txtxjtime.Text = Time
        txttime.Text = t
        txtspendmoney.Text = money
        txttype.Text = mrc1.Fields(14)
        txtstudentno.Text = mrc1.Fields(1)
        txtname.Text = mrc1.Fields(2)
        txtsex.Text = mrc1.Fields(3)
        txtdepartment.Text = mrc1.Fields(5)
        txtsjdate.Text = mrc1.Fields(12)
        txtsjtime.Text = mrc1.Fields(13)
        txtmoney.Text = cash - money
        '更新line表里的下机日期,下机时间,用来计算上机时长
        mrc4.Fields(8) = Date
        mrc4.Fields(9) = Time
        mrc4.Fields(10) = t
        mrc4.Fields(11) = money
        mrc4.Fields(12) = cash - money
        mrc4.Update
        MsgBox "下机成功!", vbOKOnly + vbExclamation, "提示"
        txtcardno.Text = ""
        txtcardno.SetFocus
      ' mrc4.Delete
        mrc3.Delete
        mrc1.Fields(11) = "已结账"
        mrc1.Fields(7) = cash - money
        mrc1.Update
        
    End If
End Sub
组合查询逻辑:

Private Sub cmdinquire_Click()
    Dim txtsql As String
    Dim msgtext As String
    Dim mrc As ADODB.Recordset
    
     txtsql = "select * from student_info where "
    '判断字段是否为空
    If combofield1.Text = "" Then
        MsgBox "请选择字段名!", vbOKOnly + vbExclamation, "提示"
        Exit Sub
    ElseIf Comboczf1.Text = "" Then
        MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "提示"
        Exit Sub
    ElseIf txtinquire1.Text = "" Then
        MsgBox "请输入要查询的内容!", vbOKOnly + vbExclamation, "提示"
        Exit Sub
    ElseIf combozh1.Text <> "" Then
        If combofield2.Text = "" Then
            MsgBox "请选择第二个字段名!", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        ElseIf comboczf2.Text = "" Then
            MsgBox "请选择第二个操作符!", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        ElseIf txtinquire2.Text = "" Then
            MsgBox "请输入第二个查询框要查询的内容!", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        ElseIf combozh2.Text <> "" Then
                If combofield3.Text = "" Then
                    MsgBox "请选择第3个字段名!", vbOKOnly + vbExclamation, "提示"
                    Exit Sub
                ElseIf comboczf3.Text = "" Then
                    MsgBox "请选择第3个操作符!", vbOKOnly + vbExclamation, "提示"
                     Exit Sub
                ElseIf txtinquire3.Text = "" Then
                    MsgBox "请输入第3个查询框要查询的内容!", vbOKOnly + vbExclamation, "提示"
                    Exit Sub
                Else
                    txtsql = txtsql & field1 & Comboczf1.Text & "'" & Trim(txtinquire1.Text) & "'" & zh1 & field2 & comboczf2.Text & "'" & Trim(txtinquire2.Text) & "'" & zh2 & field3 & comboczf3.Text & "'" & Trim(txtinquire3.Text) & "'"
                End If
        Else
        txtsql = txtsql & field1 & Comboczf1.Text & "'" & Trim(txtinquire1.Text) & "'" & zh1 & field2 & comboczf2.Text & "'" & Trim(txtinquire2.Text) & "'"
        End If
    Else
        txtsql = txtsql & field1 & Comboczf1.Text & "'" & Trim(txtinquire1.Text) & "'"
    End If
    
    
   
    
    
    Set mrc = executesql(txtsql, msgtext)
    If mrc.EOF Then
        MsgBox "该条件的数据不存在", vbOKOnly + vbExclamation, "提示"
    
        With myflexgrid
            .Rows = 1
            .CellAlignment = 4
            .TextMatrix(0, 0) = "学号"
            .TextMatrix(0, 1) = "姓名"
            .TextMatrix(0, 2) = "卡号"
            .TextMatrix(0, 3) = "金额"
            .TextMatrix(0, 4) = "系别"
            .TextMatrix(0, 5) = "年级"
            .TextMatrix(0, 6) = "班级"
            .TextMatrix(0, 7) = "性别"
            .TextMatrix(0, 8) = "状态"
            .TextMatrix(0, 9) = "备注"
            .TextMatrix(0, 10) = "类型"
            .TextMatrix(0, 11) = "日期"
            .TextMatrix(0, 12) = "时间"
        End With
        Exit Sub
   Else
        With myflexgrid
            .Rows = 1
            .CellAlignment = 4
            .TextMatrix(0, 0) = "学号"
            .TextMatrix(0, 1) = "姓名"
            .TextMatrix(0, 2) = "卡号"
            .TextMatrix(0, 3) = "金额"
            .TextMatrix(0, 4) = "系别"
            .TextMatrix(0, 5) = "年级"
            .TextMatrix(0, 6) = "班级"
            .TextMatrix(0, 7) = "性别"
            .TextMatrix(0, 8) = "状态"
            .TextMatrix(0, 9) = "备注"
            .TextMatrix(0, 10) = "类型"
            .TextMatrix(0, 11) = "日期"
            .TextMatrix(0, 12) = "时间"
        End With
    
        
        Do While Not mrc.EOF
               With myflexgrid
               .Rows = .Rows + 1 '这种方式也可防止空白行的出现
               .CellAlignment = 4
               .TextMatrix(.Rows - 1, 0) = mrc.Fields(1)
               .TextMatrix(.Rows - 1, 1) = mrc.Fields(2)
               .TextMatrix(.Rows - 1, 2) = mrc.Fields(0)
               .TextMatrix(.Rows - 1, 3) = mrc.Fields(7)
               .TextMatrix(.Rows - 1, 4) = mrc.Fields(4) & "" '这里报错,无效使用null添加“”
               .TextMatrix(.Rows - 1, 5) = mrc.Fields(5) & ""
               .TextMatrix(.Rows - 1, 6) = mrc.Fields(6)
               .TextMatrix(.Rows - 1, 7) = mrc.Fields(3)
               .TextMatrix(.Rows - 1, 8) = mrc.Fields(10)
               .TextMatrix(.Rows - 1, 9) = mrc.Fields(8)
               .TextMatrix(.Rows - 1, 10) = mrc.Fields(14)
               .TextMatrix(.Rows - 1, 11) = mrc.Fields(12)
               .TextMatrix(.Rows - 1, 12) = mrc.Fields(13)
               mrc.MoveNext
               End With
           Loop
    End If
End Sub
报表逻辑:

Dim WithEvents Report As grproLibCtl.GridppReport  '实例化报表

Private Sub cmdprint_Click()
Report.[Print] (True) '打印,因为报表对象的print方法名与vb的内部定义方法有冲突所以要用中括号
End Sub

Private Sub cmdprintviewer_Click()
      Report.PrintPreview (True)
End Sub

Private Sub cmdrefresh_Click()
    Dim strSQL As String
    Dim strMsg As String
    Dim objRsWeekliyBill As ADODB.Recordset
    Dim objRsDaliyBill As ADODB.Recordset
  
    If startdateview.Value > enddateview.Value Then '条件限制
        MsgBox "终止日期不能小于起始日期!", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If
    '把选择的时间赋值给参数
    Report.ParameterByName("startdate").Value = Format$(startdateview.Value, "yyyy-mm-dd")
    Report.ParameterByName("enddate").Value = Format$(enddateview.Value, "yyyy-mm-dd")
  
    '日期的选定
    strSQL = "select * from CheckDay_Info where date between'" & Format$(startdateview.Value, "yyyy - mm - dd") & "'" & " and'" & Format$(enddateview.Value, "yyyy-mm-dd") & "'"
    Set objRsDaliyBill = executesql(strSQL, strMsg)
  
    strSQL = "select * from CheckWeek_Info"
    Set objRsWeekliyBill = executesql(strSQL, strMsg)
    Do While objRsWeekliyBill.EOF = False
        objRsWeekliyBill.Delete
        objRsWeekliyBill.MoveNext
    Loop
  't = Format(objRsDaliyBill.Fields(5), yyyy / mm / dd)
    '更新到日结表中
    Do While objRsDaliyBill.EOF = False '判断是否有数据
        With objRsWeekliyBill
            .AddNew
            .Fields(0) = objRsDaliyBill.Fields(0) & ""
            .Fields(1) = objRsDaliyBill.Fields(1) & ""
            .Fields(2) = objRsDaliyBill.Fields(2) & ""
            .Fields(3) = objRsDaliyBill.Fields(3) & ""
            .Fields(4) = objRsDaliyBill.Fields(4) & ""
            .Fields(5) = objRsDaliyBill.Fields(5)
            .Update
            objRsDaliyBill.MoveNext
        End With
    Loop
    grdWeekliyBill.Refresh  '刷新
    'Report.DetailGrid.Recordset.QuerySQL = "select * from weekcheck_info where date between '" & startdateview.Value & "' and '" & enddateview.Value & "'"
End Sub

Private Sub Form_Load()
    '创建报表对象
    Set Report = New grproLibCtl.GridppReport
    '载入报表模版文件
    Report.LoadFromFile (App.Path & "\weekcheck.grf")
    '设置数据连接串
    Report.DetailGrid.Recordset.ConnectionString = Connectstring '"provider=SQLOLEDB;server=LI;database=charge_sys;integrated security =SSPI"
    '用来使grdWeekliyBill报表查询器控件显示报表中的内容
    grdWeekliyBill.Report = Report
    grdWeekliyBill.Start
  
   Report.ParameterByName("startdate").Value = Format$(startdateview.Value, "yyyy-mm-dd")
   Report.ParameterByName("enddate").Value = Format$(enddateview.Value, "yyyy-mm-dd")
  'Report.ParameterByName("enddate").Value = Date
    
End Sub

五、模块简化

熟练正确的使用模块能大大的提高我们的编程效率。我个人的理解就是把代码相同的功能放到模块里面直接调用就行了。

举个例子:在整个系统中basicdate_info 这个表的调用都是直接调用的,把它写到模块里面准备好,在需要基本数据的时候用一行代码就可以搞定了。

    优化的时候每个窗体的文本框都不能随便输入特殊字符,这个也可以放到模块里。

六、函数分析

平时多积累函数,搞清楚每个函数的用途能省去很多的代码。

eg:在组合查询的时候,需要将combobox里面的text转化为数据库表中的字段名,如果用select case就比用if  then 效率高很多

datediff函数在计算上机时间的时候用起来很方便

专业补充:DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
      DateDiff 函数语法中有下列命名参数:
                            interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔 
                            Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。 
                            Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。 
                            firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。 
                            interval 参数的设定值如下:
                            设置 描述 
                             yyyy 年 
                            q 季 
                            m 月 
                            y 一年的日数 
                            d 日 
                            w 一周的日数 
                            ww 周 
                            h 时 
                           n 分钟 
                           s 秒 
 七、自我分析

下次再做系统的时候一定要掌握好节奏,做好时间管理,要严格要求自己该哪天完成的工作决不拖到第二天。

遇到困难第一反应不是问同学也不是自己百度,而是先分析分析自己找找原因,培养自己解决问题的能力。

遇到没见过的代码一定要耐心的看,分析,这样在遇到的时候才不陌生。

及时总结自己的收获不要等着做完系统才想起来写总结,这样就跟我一样弄得不太好了。

自己动手做了之后发现,其实也没那么难,所谓的难都仅仅只是感觉。

评论 80
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值