VB.NET版机房收费系统---组合查询

查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有如何的惊喜等着我?

啊哦,这个信息并非我想要的,于是我再搜,“丁国华 廊坊师范学院  csdn”搜索结果例如以下:

非常显然,这个还不是我想要的结果,我接着搜,“丁国华 廊坊师范学院 csdn 初雪之恋”;

在我的理解中,组合查询就是通过条件层层限制,一步一步精确,得到我们想要的答案,在机房收费系统中,有好几处涉及组合查询,接下来,以学生基本信息维护为例,解说组合查询。在第二次机房收费系统中,我没有按原来胡阳版的模板来,原版的通过卡号,学号,姓名,性别,系别,年级,班号七个字段,来进行查询,操作符分别为等于,大于,小于,不等于,但是,现实生活中哪有性别大于什么,姓名小于什么的条件,所以我又一次设计了一下窗口,从中挑选了四个字段名作为组合查询的条件简化了组合查询的难度,主界面设计例如以下:

接下来,看看我们的详细实现过程,首先实体层---E层;

<span style="font-size:18px;">Public Class Studentinfo
    Public studentNo As String                      '字段
    Public Property _studentNo As String            '属性
        Get
            Return studentNo
        End Get
        Set(value As String)
            studentNo = value
        End Set
    End Property
    Public cardNo As String
    Public Property _cardNo As String
        Get
            Return cardNo
        End Get
        Set(value As String)
            cardNo = value
        End Set
    End Property
    Public studentName As String
    Public Property _studentName As String
        Get
            Return studentName
        End Get
        Set(value As String)
            studentName = value
        End Set
    End Property
    Public sex As String
    Public Property _sex As String
        Get
            Return sex
        End Get
        Set(value As String)
            sex = value
        End Set
    End Property
    Public department As String
    Public Property _department
        Get
            Return department
        End Get
        Set(value)
            department = value
        End Set
    End Property
    Public grade As String
    Public Property _grade
        Get
            Return grade
        End Get
        Set(value)
            grade = value
        End Set
    End Property
    Public stuclass As String
    Public Property _stuclass
        Get
            Return stuclass
        End Get
        Set(value)
            stuclass = value
        End Set
    End Property
    Public remark As String
    Public Property _remark
        Get
            Return remark
        End Get
        Set(value)
            remark = value
        End Set
    End Property
    Public Handler As String
    Public Property _Handler
        Get
            Return Handler
        End Get
        Set(value)
            Handler = value
        End Set
    End Property
End Class
</span>

数据訪问层---D层

<span style="font-size:18px;">Imports System.Data.SqlClient
Public Class StuBaInforPreserveDAO
    Public Function query(ByVal cmbOperator1 As String, ByVal cardNo As String, ByVal cmbOperator2 As String, ByVal studentNo As String, ByVal cmbOperator3 As String, ByVal department As String, ByVal cmbOperator4 As String, ByVal grade As String) As DataTable
        Dim db As New Entity.Dbutil '实例化数据库连接
        Dim dt As New DataTable       '实例化DataTable

        Using conn As New SqlConnection(db.connstring)
            conn.Open()                       '打开数据库连接

            Dim sql As String
            Dim cmd As SqlCommand
            Dim dataAdpter As New SqlDataAdapter
            Dim dst As New DataSet
            Dim flag(3) As Boolean             ’定义标签

            sql = "select studentNo,cardNo,studentName,sex,department,grade,class,remark,handler  from Student_info where "
            If Not (cardNo = "") Then                                   '假设卡号不为空,运行以下这句sql语句
                sql = sql & "studentNo" & cmbOperator1 & "'" & cardNo & "'"
                flag(0) = True
            End If

            If Not (studentNo = "") Then     '假设学号不为空,且卡号不为空,运行第一个sql语句,假设学号不为空,卡号为空运行第二个sql语句
                flag(1) = True
                If flag(0) = True Then
                    sql = sql & "and studentNo " & cmbOperator2 & "'" & studentNo & "'"
                Else
                    sql = sql & "studentNo" & cmbOperator2 & "'" & studentNo & "'"
                End If
            End If

            If Not (department = "") Then '假设系别不为空,且学号和卡号中有一个被选择,或者两个都选,运行第一个sql语句,否则运行第二个sql语句
                flag(2) = True
                If flag(0) = True Or flag(1) = True Then
                    sql = sql & "and department " & cmbOperator3 & "'" & department & "'"
                Else
                    sql = sql & "department" & cmbOperator3 & "'" & department & "'"
                End If
            End If

            If Not (grade = "") Then      '假设年级不为空,且学号,卡号,系别中有一个被选择,或者一个or两个被选择运行第一个sql语句,否则运行第二句
                flag(3) = True
                If flag(0) = True Or flag(1) = True Or flag(2) = True Then
                    sql = sql & "and grade" & cmbOperator4 & "'" & grade & "'"
                Else
                    sql = sql & "grade" & cmbOperator4 & "'" & grade & "'"
                End If
            End If
            cmd = New SqlCommand(sql, conn)
            dataAdpter.SelectCommand = cmd
            dataAdpter.Fill(dst, "Student_info")
            dt = dst.Tables("Student_info")
        End Using
        Return dt
    End Function
End Class
</span>

业务逻辑层---B层;

<span style="font-size:18px;">Public Class StuBaInforPreserveManager
    Public Function query(ByVal cmbOperator1 As String, ByVal cardNo As String, ByVal cmbOperator2 As String, ByVal studentNo As String, ByVal cmbOperator3 As String, ByVal department As String, ByVal cmbOperator4 As String, ByVal grade As String) As DataTable
        Dim StuBaInforPreserveDAO As New DAL.StuBaInforPreserveDAO                 '调用D层
        Return StuBaInforPreserveDAO.query(cmbOperator1, cardNo, cmbOperator2, studentNo, cmbOperator3, department, cmbOperator4, grade)
    End Function
End Class</span>

显示层---U层;

<span style="font-size:18px;">Imports BLL

Public Class frmStuBaInforPreserve
    Private Sub btnInquery_Click(sender As Object, e As EventArgs) Handles btnInquery.Click
        Dim StuBaInforPreserveManager As New BLL.StuBaInforPreserveManager  '调用B层
        Dim dt As New DataTable

        dt = StuBaInforPreserveManager.query(cmbOperator1.Text, txtCardNo.Text, cmbOperator2.Text, txtStuNo.Text, cmbOperator3.Text, txtDepartment.Text, cmbOperator4.Text, txtGrade.Text)
        DataGridView1.AutoGenerateColumns = True  '自己主动创建列
        DataGridView1.DataSource = dt

        DataGridView1.Columns(0).HeaderText = "学号"         '把相关信息在datagridview中显示出来
        DataGridView1.Columns(1).HeaderText = "卡号"
        DataGridView1.Columns(2).HeaderText = "姓名"
        DataGridView1.Columns(3).HeaderText = "性别"
        DataGridView1.Columns(4).HeaderText = "系别"
        DataGridView1.Columns(5).HeaderText = "年级"
        DataGridView1.Columns(6).HeaderText = "班级"
        DataGridView1.Columns(7).HeaderText = "备注"

    End Sub

    Private Sub frmStuBaInforPreserve_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cmbOperator1.Enabled = False             '窗口载入时,须要注意的一些细节问题,比方那些button能点,那些不能点
        txtCardNo.Text = ""
        txtCardNo.Enabled = False

        cmbOperator1.Items.Add("=")
        cmbOperator1.Items.Add(">")
        cmbOperator1.Items.Add("<")
        cmbOperator1.Items.Add("<>")
        cmbOperator1.SelectedIndex = 0

        cmbOperator2.Enabled = False
        txtStuNo.Text = ""
        txtStuNo.Enabled = False
        cmbOperator2.Items.Add("=")
        cmbOperator2.Items.Add(">")
        cmbOperator2.Items.Add("<")
        cmbOperator2.Items.Add("<>")
        cmbOperator2.SelectedIndex = 0

        cmbOperator3.Enabled = False
        txtDepartment.Text = ""
        txtDepartment.Enabled = False
        cmbOperator3.Items.Add("=")
        cmbOperator3.Items.Add("<>")
        cmbOperator3.SelectedIndex = 0

        cmbOperator4.Enabled = False
        txtGrade.Text = ""
        txtGrade.Enabled = False
        cmbOperator4.Items.Add("=")
        cmbOperator4.Items.Add("<>")
        cmbOperator4.SelectedIndex = 0

    End Sub

    Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click        '退出button
        Me.Close()
    End Sub
    Private Sub chkCardNo_Click(sender As Object, e As EventArgs) Handles chkCardNo.Click  '假设卡号被选中,则txtCardNo和cmbOperator1能够点否者不能点,而且文本框的内容自己主动情况,恢复默认值
        If chkCardNo.Checked Then
            txtCardNo.Enabled = True
            cmbOperator1.Enabled = True
        Else
            txtCardNo.Enabled = False
            cmbOperator1.Enabled = False
            txtCardNo.Text = ""
            cmbOperator1.SelectedIndex = 0

        End If
    End Sub
    Private Sub chkStuNo_Click(sender As Object, e As EventArgs) Handles chkStuNo.Click
        If chkStuNo.Checked Then
            txtStuNo.Enabled = True
            cmbOperator2.Enabled = True
        Else
            txtStuNo.Enabled = False
            cmbOperator2.Enabled = False
            txtStuNo.Text = ""
            cmbOperator2.SelectedIndex = 0
        End If
    End Sub

    Private Sub chkDepartment_Click(sender As Object, e As EventArgs) Handles chkDepartment.Click
        If chkDepartment.Checked Then
            txtDepartment.Enabled = True
            cmbOperator3.Enabled = True
        Else
            txtDepartment.Enabled = False
            cmbOperator3.Enabled = False
            txtDepartment.Text = ""
            cmbOperator3.SelectedIndex = 0
        End If
    End Sub
    Private Sub chkGrade_Click(sender As Object, e As EventArgs) Handles chkGrade.Click
        If chkGrade.Checked Then
            txtGrade.Enabled = True
            cmbOperator4.Enabled = True
        Else
            txtGrade.Enabled = False
            cmbOperator4.Enabled = False
            txtGrade.Text = ""
            cmbOperator4.SelectedIndex = 0
        End If
    End Sub
End Class</span>

执行效果例如以下:

自此学生基本信息维护就临时告一段落,開始敲学生基本信息维护的时候,不知道从哪儿下手,各种纠结,各种逃避,各种不想敲,但是,我已经长大了,我不能再由着我自己的性子来做事,我要为我自己做的事情负责任,走过去了,真的有那么困难么?我想当中的滋味仅仅有走过的人才可以真正明确。

以前看到米老师给一篇博文这种评语,这篇博客的主要内容,我记不清楚了,好像是解决一个问题,然后成功解决的一篇博文,米老师说,这个过程是不是非常养人,对,这个过程不光养人,并且锻炼人,考验我们面对新知识的心态,是一拖再拖,今目标红了又红,还是坦然面对,两天把三个组合查询一一搞定,机房收费系统未完,待续......

时间: 2024-10-11 11:34:09

VB.NET版机房收费系统---组合查询的相关文章

VB.Net版机房收费系统 ---数据库设计

数据库设计是根据用户需求设计数据库结构的过程,具体来说,数据库设计是对于给定的应用环境,在厝数据库理论的指导下,构造最优的数据库模式,在数据库管理系统上建立数据库及其应用系统,使之能有效地存储数据,满足用户的各种需求的过程.到底数据库该如何设计,古往今来,每个人都有每个人的想法,所以数据库设计并没有优劣之分,好坏之别,合适的数据库设计就是最好的. 走过自考--<数据库系统原理>,看过耿建玲老师的视频,对数据库设计有了一点了解,VB版的机房收费系统,直接用原来的脚本生成的数据库,当时对数据库设计

VB.NET版机房收费系统---SqlHelper

SqlHelper,最早接触这个词儿的时候,好像是13年的暑假,那个夏天来的比往年来的稍晚一些,呵呵,sqlhelper,翻译成中文就是数据库助手,帮手.百度百科这样对她进行阐述: SqlHelper是一个基于.NET Framework的数据库操作组件.组件中包含数据库操作方法.SqlHelper用于简化我们重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等.SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,

VB.NET版机房收费系统—数据库设计

之前第一遍机房收费的时候,用的数据库是别人的,认知也只能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看以前的数据库,发现数据库真的还需要进一步的优化,下面是我设计数据库的一些见解,希望大家多提些意见. 数据库设计 E-R模型: 在观念模型设计阶段,一个系统都是建立在ER模型上的,设计好ER模型,很重要. 我设计的ER图: 系统中的实体:很简单,就是将系统中的名词都抽象出来,再具体了就是转换为数据库的逻辑设计时才要考虑的. 系统中的联系:在图中可以看得很清楚,这里我要重点

VB.NET版机房收费系统—DataGridView应用

事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句,并用DataGridView显示出来,这个功能不能实现,但这里给大家写一下,假设有什么地方不好的会,请大家指出: 第一版: 窗口设计: 须要的控件: DateTimePicker.DataSet.DataGridView 把握的三步骤: 第一步:使用视图,创建出你要的产寻结果的视图(假设是一个表就能

vb.net版机房收费系统重构

机房收费系统重构版终于正式开工了! 前几天,刚刚看完三层的视频,在视频中详细的讲解了一个登录功能.天真的我,当时以为三层结构是那么的简单,所以我草草地做完总结之后,就很快就开始机房收费系统的重构了.可是谁想到,当我一打开编程软件,就让我"碰了一鼻子的灰"!首先是不知道vs 怎么用,其次就是看三层的时候,登录的实例使用C#写的,而这次我们需要用VB.NET写,所以对于其中的语法是知之甚少.虽然,前段时间我看了一遍台湾讲师--曹祖胜的<VB.NET 视频>,但是他讲的几乎都是一

VB.NET版机房收费系统---七仙女之系统登录

VB.NET第一版机房收费系统,告一段落,验收的时候,问题也是大大的存在,没有用上设计模式,什么触发器,存储过程,都没有用上,看看其她小伙伴的,七层实现登录?那是什么东东,相比较我的三层而言,多了两倍还加个一,通过查资料,看博客,憋了好几天,终于,憋出了一个七仙女---七层实现系统登录,七个女儿,各司其职,完美配合,衍生出众多美丽的故事. 从三层猛地跳到七层,有种穿越的感觉,说白了就是不会,又是想逃避的感觉,可是人生在世,有的事情不能随着自己的性子来,喜欢了就去做,不喜欢,就不做,没办法,就一直

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

报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据. 比如:民间常常说的豆腐帐,就是卖豆腐的每天将自己的卖出的豆腐记在一个本子上,然后每月都要汇总算算,这种情况下,报表数据和报表格式是紧密结合在一起的,都在同一个本子上.数据也只能有一种几乎只有记帐的人才能理解的表现形式,且这种形式难于修改. VB版机房收费系统的报表采用的是第三方的Grid++Report,

vb.net版机房收费系统——教你七层架构(三)—外观模式

上次我们看到了D层是怎样运作的,现在,我简单演示一下我的外观和B层是如何和U层和D层打交道的. 首先我跟大家说的是我的外观是按照界面功能划分的,粒度有点小,大家在做的时候,记得外观有几个就行了,但是不能没有,U层不能直接调用B层,这样就会增加U层和B层的耦合: '************************** '文 件 名:UserInfo_BLL '命名空间:BLL '内 容: '功 能: '文件关系: '作 者:邱慕夏 '小 组:邱慕夏 '生成日期:2014-06-07 17:36:4

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

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