本人今年刚刚毕业,进一家公司开始实习,第一天就收获匪浅,果然是上班一天,自学一月。第一次接触vb,然后被要求做一个学生成绩管理系统,然后就做出了一个屎一般的系统,,,,大学白学好吧。前辈是个好人啊。手把手教了我怎么用三层架构做一个程序,话不多说,直接上干货了。

三层架构,,说一说我的理解吧(萌新班门弄斧,要是说的不对,接受任何批评)。所有程序,都是给用户使用的吧,所以就有第一层-----UI层,说白了,我的理解就是什么按钮触发了什么事件,什么DataGridView显示了什么表格数据的。ok,双击按钮进入代码,然后把各个事件的接口写进去,成了!所以三层的第二层就是写各个事件的具体代码的地方,也就是BLL层。每个程序都需要连接数据库,各个事件比如查询事件,增加修改删除等事件都是对数据路进行操作的,所以第三层DLL层就是连接数据库的底层。其实这些都好理解,唯一一个我不理解的就是MODEL层,咱也不敢说,咱也不敢问的,吊用没有。三层结构图如图所示。

由于本人是萌新,一开始学习的时候超级希望有一个教程,能详细到头发丝一样那么细。所以,我写的博客希望能帮到和我有一个想法的萌新,所以大佬别训我。

首先就是新建一个windows窗体,命名“为学生成绩管理系统三层架构版”。

创建完成后,在资源管理器哪里,找到解决方案“学生管理系统三层架构版”(1个项目),然后右键--添加--新建项目--windows窗体应用。新建三个,加上最开始的,一共四个,然后重命名,分别叫,UI,BLL,DLL,MODEL,如第一张图。然后除了UI层的form外,其他三层的form1全部删除。首先,处理一下ui层的窗体,在ui层在添加一个窗体。右键UI层--添加--windows窗体,命名为Student(命名要有规律,我就用驼峰方法),同时把form1重命名为StudentMangent,接下来就是将两个窗体加上组件,完善布局。本人对每个按钮的命名方式为btn_**,比如查询按钮命名为btn_select,新增按钮为btn_add。StudentMangent窗体如图所示。

Student窗体如图所示:

ok,基本的业务界面做完了,现在就是代码的实现了,首先三个层之间是要互相引用的,引用后才可以使用相互的接口,添加引用非常简单,展开UI层,在两个窗体上面就是引用,右键引用--添加引用--项目,,你会发现有三个项目BLL,DLL,MODEL。在BLL和MODEL前面的方框打勾,然后确定。这样UI层就引用了BLL和MODEL层,同样的方法让BLL层引用DLL和MODEL,让DLL引用MODEL层,这样三层架构就相互引用了。

DLL代码实现:首先在DLL里新建两个类,右键DLL--添加--类,然后分别命名为SqlHelp和Student,我的理解就是,本着高内聚低耦合的思路,sqlhelp里写连接sql数据库的方法,student写操作数据库的方法。

sqlhelp代码:


Public Class SqlHelp'数据库要连接自己的,连接数据库,我用的方法在下面的图片中Dim Sqlconnstring As String = "Data Source=XXBYYQ;Initial Catalog=student;Integrated Security=True"''' <summary>''' 查询方法''' </summary>''' <param name="sql"></param>''' <returns></returns>Public Function GetSelectTable(sql As String) As DataTableDim conn As SqlConnection = New SqlConnection(Sqlconnstring)conn.Open()Dim com As SqlCommand = New SqlCommand(sql, conn)Dim adapter As SqlDataAdapter = New SqlDataAdapter(com)Dim ds As DataSet = New DataSet()adapter.Fill(ds)Return ds.Tables(0)End Function''' <summary>''' 添加/修改/删除''' </summary>''' <param name="sql"></param>''' <returns></returns>Public Function GetChangeNumber(sql As String) As BooleanDim b As Boolean = FalseDim conn As SqlConnection = New SqlConnection(Sqlconnstring)conn.Open()Dim com As SqlCommand = New SqlCommand(sql, conn)If com.ExecuteNonQuery() > 0 Thenb = TrueEnd IfReturn bEnd FunctionPublic Function GetExecuteScalar(sql As String) As ObjectDim b As Boolean = FalseDim conn As SqlConnection = New SqlConnection(Sqlconnstring)conn.Open()Dim com As SqlCommand = New SqlCommand(sql, conn)Return com.ExecuteScalarEnd FunctionEnd Class

连接数据库:视图--服务器资源管理器--数据连接右键--添加连接,回弹出一个窗体,先点击一下刷新,然后点开下拉列表,找到你得服务器,然后在“连接到数据库”框里选则你为本学生系统创建的新的数据库(不会数据库的百度下,,,)然后测试链接,成功后确定,点击成功连接的数据库名称,右下角会显示属性,复制“连接字符串”里的字符串,找到上段代码中的Dim Sqlconnstring As String = "Data Source=XXBYYQ;Initial Catalog=student;Integrated Security=True",把引号里的代码换成你刚才复制的。完成!!!

Student代码:

Public Class StudentDim sqlhelp As SqlHelp = New SqlHelp()Public Function GetSelectByWhere(where As String) As DataTableDim sql As String = " select * from Student where IsDelete=0 "If Not String.IsNullOrEmpty(where) Thensql += " and " + whereEnd IfReturn SqlHelp.GetSelectTable(sql)End FunctionPublic Function InsertByModel(model As Model.Student) As BooleanDim sql As String = " insert into Student(No, Name, Sex, Age,IsDelete) values('" + model.No + "','" + model.Name + "','" + model.Sex + "'," + model.Age.ToString() + "," + model.IsDelete.ToString() + ")"Return sqlhelp.GetChangeNumber(sql)End FunctionPublic Function SelectMaxId() As IntegerDim sql As String = " select isnull( max(id),0) as id from Student "Return CInt(sqlhelp.GetExecuteScalar(sql))End FunctionPublic Function UpdataByModel(model As Model.Student) As BooleanDim sql As String = " update Student set No='" + model.No + "',Name='" + model.Name + "',Sex='" + model.Sex + "',Age=" + model.Age.ToString() + " where id=" + model.Id.ToString()Return sqlhelp.GetChangeNumber(sql)End FunctionPublic Function DeleteByID(id As Integer) As BooleanDim sql As String = " update Student set  IsDelete=1 where id=" + id.ToString()Return sqlhelp.GetChangeNumber(sql)End Function
End Class

这样,我们就完成了最底层,DLL层代码实现过程,接着就是BLL层代码实现。

BLL层:在BLL层也新建一个类,命名为Student,代码为

Imports DLL
Public Class StudentDim dll As DLL.Student = New DLL.Student()Public Function GetSelectByWhere(selectText As String) As DataTableDim where As String = String.EmptyIf Not String.IsNullOrEmpty(selectText) Then  'IF在判断什么,不判断会怎么样where = GetSelectWhere(selectText)End IfReturn dll.GetSelectByWhere(where)End FunctionPublic Function GetSelectWhere(selectText As String) As StringDim list As List(Of String) = New List(Of String)list.Add("No like'%" + selectText + "%'")list.Add(" Name like '%" + selectText + "%'")list.Add(" Sex like '%" + selectText + "%'")list.Add(" Age like '%" + selectText + "%'")Return "(" + String.Join(" or ", list.ToArray()) + ")"End FunctionPublic Function InsertByModel(model As Model.Student) As BooleanReturn dll.InsertByModel(model)End FunctionPublic Function SelectMaxId() As IntegerReturn dll.SelectMaxId()End FunctionPublic Function UpdataByModel(model As Model.Student) As BooleanReturn dll.UpdataByModel(model)End FunctionPublic Function DeleteByID(id As Integer) As BooleanReturn dll.DeleteByID(id)End Function
End Class

接下来就是我到现在也不懂得MODEL层:

同理,新建一个类,命名为Student,代码如下:


Public Class Student''' <summary>''' ID''' </summary>Public Id As Integer''' <summary>''' 学号''' </summary>Public No As String''' <summary>''' 姓名''' </summary>Public Name As String''' <summary>''' 性别''' </summary>Public Sex As String''' <summary>''' 年龄''' </summary>Public Age As Integer''' <summary>''' 是否删除 0:未删除 1:已删除''' </summary>Public IsDelete As IntegerEnd Class

现在说有业务处理得代码都已经实现了,接下来就是ui层引用了,

ui层---StudentManagent代码:

Imports Microsoft.Office.Interop
Public Class StudentManagentDim bll As BLL.Student = New BLL.Student()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadBindSelectData()End SubPublic Sub BindSelectData()Dim selectText As String = txt_Select.Text.Trim()Dim dt As DataTable = bll.GetSelectByWhere(selectText)dgv_Data.DataSource = dtdgv_Data.ClearSelection()lbl_Count.Text = "查询1结果:" + dt.Rows.Count.ToString() + " 条"End SubPrivate Sub btn_Select_Click(sender As Object, e As EventArgs) Handles btn_Select.ClickBindSelectData()End SubPrivate Sub btn_add_Click(sender As Object, e As EventArgs) Handles btn_add.ClickDim f As Student = New Student()f.ShowDialog()BindSelectData()End SubPrivate Sub btn_Updata_Click(sender As Object, e As EventArgs) Handles btn_Updata.ClickIf dgv_Data.SelectedCells.Count > 0 ThenDim rowsIndex As Integer = dgv_Data.SelectedCells(0).RowIndexDim f As Student = New Studentf.model.Id = dgv_Data.Rows(rowsIndex).Cells("stu_Id").Value.ToString()f.model.No = dgv_Data.Rows(rowsIndex).Cells("stu_no").Value.ToString()f.model.Name = dgv_Data.Rows(rowsIndex).Cells("stu_name").Value.ToString()f.model.Sex = dgv_Data.Rows(rowsIndex).Cells("stu_sex").Value.ToString()f.model.Age = dgv_Data.Rows(rowsIndex).Cells("stu_age").Value.ToString()f.ShowDialog()BindSelectData()ElseMessageBox.Show("请选择修改数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning)End IfEnd SubPrivate Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.ClickIf dgv_Data.SelectedCells.Count > 0 ThenDim rowsIndex As Integer = dgv_Data.SelectedCells(0).RowIndexIf MessageBox.Show("是否删除数据!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ThenDim id As Integer = CInt(dgv_Data.Rows(rowsIndex).Cells("stu_Id").Value.ToString())If bll.DeleteByID(id) ThenMessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)ElseMessageBox.Show("删除失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)End IfBindSelectData()End IfBindSelectData()ElseMessageBox.Show("请选择删除的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)End IfEnd SubPrivate Sub btn_Report_Click(sender As Object, e As EventArgs) Handles btn_Report.ClickDim dt As DataTable = dgv_Data.DataSourceDgvToExcel("学生基本信息导出.xls", dt)End SubPrivate Sub DgvToExcel(name As String, dt As DataTable)If dt.Rows.Count > 0 Then'Dim openExcel As OpenFileDialog = New OpenFileDialog()'openExcel.ShowDialog()Dim saveExcel As SaveFileDialog = New SaveFileDialog()saveExcel.Title = "Excel导出"saveExcel.FileName = namesaveExcel.Filter = "Excel文件(.xls)|*.xls"Dim filename As StringIf saveExcel.ShowDialog = DialogResult.OK Thenfilename = saveExcel.FileNameDim excel As Excel.Application = New Excel.Applicationexcel.DisplayAlerts = Trueexcel.Workbooks.Add(True)excel.Visible = FalseFor i = 0 To dt.Columns.Count - 1excel.Cells(1, i + 1) = dt.Columns(i).ColumnNameNextFor j = 0 To dt.Rows.Count - 1For i = 0 To dt.Columns.Count - 1excel.Cells(j + 2, i + 1) = dt.Rows(j)(i).ToString()NextNextexcel.Workbooks(1).SaveCopyAs(filename)MessageBox.Show("数据导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)End IfElseMessageBox.Show("提示:没有记录不能导出数据")End IfEnd Sub
End Class

ui层--Student代码:

Public Class StudentPublic model As Model.Student = New Model.Student()Dim bll As BLL.Student = New BLL.Student()Private Sub Student_Load(sender As Object, e As EventArgs) Handles MyBase.Loadcbx_Sex.SelectedIndex = 0If model.Id > 0 Then '这个if判断的是什么BindUpdateData()ElseDim timeNow As DateTime = DateTime.Now()txt_NO.Text = timeNow.Year.ToString("D4") + timeNow.Month.ToString("D2") + (bll.SelectMaxId() + 1).ToString("d3")End IfEnd SubPrivate Sub BindUpdateData()txt_NO.Text = model.Notxt_Name.Text = model.Namecbx_Sex.Text = model.Sextxt_Age.Text = model.Age.ToString()End SubPrivate Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbx_Sex.SelectedIndexChangedEnd SubPrivate Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.ClickEnd SubPrivate Sub Label3_Click(sender As Object, e As EventArgs) Handles Label3.ClickEnd SubPrivate Sub Label4_Click(sender As Object, e As EventArgs) Handles Label4.ClickEnd SubPrivate Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles txt_Name.TextChangedEnd SubPrivate Sub btn_Save_Click(sender As Object, e As EventArgs) Handles btn_Save.Clickmodel.No = txt_NO.Textmodel.Name = txt_Name.Textmodel.Sex = cbx_Sex.Textmodel.Age = txt_Age.Text.ToString()TryIf IsOk() Thenmodel.IsDelete = 0Dim b As Boolean = FalseIf model.Id > 0 Thenb = bll.UpdataByModel(model)Elseb = bll.InsertByModel(model)End IfIf b ThenMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)Me.Close()ElseMessageBox.Show("保存失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop)End IfElseMessageBox.Show("输入错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning)End IfCatch ex As ExceptionMessageBox.Show("出错了!" + ex.Message, "提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning)End TryEnd SubPublic Function IsOk() As BooleanDim b As Boolean = TrueIf String.IsNullOrEmpty(txt_NO.Text.Trim()) Or String.IsNullOrEmpty(txt_Name.Text.Trim()) Or String.IsNullOrEmpty(txt_Age.Text.Trim()) Thenb = FalseEnd IfReturn bEnd Function
End Class

到此,一个三层架构得学生成绩查询系统就实现了,,至于代码,你说你看不懂,我他娘的也没看懂呢,一起学习,一起进步吧!

学生成绩管理系统_三层架构版(超详细)相关推荐

  1. 学生成绩管理系统(简易本地版)

    学生成绩管理系统(简易本地版) 一.概述 平台:Windows 10 ,Microsoft Visual Studio 2017 语言:C++,面向过程 完成日期:2018/12/27 主要功能: 1 ...

  2. 成绩查询数据结构c语言,学生成绩管理系统(数据结构c语言版源代码)09169.pdf

    不必问别人你能做什么,除了你自己,没有人知道.也不必问别人你到底该做什么,除了行 动,没有任何解答. #include #include #include struct students{ char ...

  3. java编程实现学生成绩管理系统_用Java编写的学生成绩管理系统

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import java.util.HashMap;import java.util.Map;import java.util.Scanner; publi ...

  4. MVC三层架构(超详细解析)

    1:初始 MVC (1):三层架构 三层架构是指:视图层 View.服务层 Service,与持久层 Dao.它们分别完成不同的功能. View 层:用于接收用户提交请求的代码在这里编写. Servi ...

  5. (C语言实现)班级学生成绩管理系统

    目录 前言 一.设计题目与要求 二. 设计软硬件环境 三.功能设计与描述 (1)登录界面 (2)菜单界面 (3)文件操作 (4)成绩输入 (5)成绩查找 (6)成绩修改 (7)成绩删除 (9)成绩排序 ...

  6. 检索有项目的教师信息mysql_学生成绩管理系统(六):项目总结

    学生成绩管理系统(六):项目总结 一.项目实现情况 初期项目计划: 简单的图形界面登录功能. 对数据库的的信息的查询功能. 对数据库的的信息的修改功能. 对数据库的的信息的删除功能. 对数据库的的信息 ...

  7. 课程设计:学生成绩管理系统

    亲爱的小伙伴们~[学生成绩管理系统]上线啦!!! [Java毕设项目]手把手教你搭建学生成绩管理系统_操作简单_功能实用(SQL+文档+代码)https://www.bilibili.com/vide ...

  8. JSP教务处学生成绩管理系统

    项目介绍 本项目包含管理员.教师.学生三种角色: 用户角色包含以下功能: 修改密码,查看自己的信息,查看自己的成绩,登录界面等功能. 管理员角色包含以下功能: 修改示例,增删改查学生信息,增删改查教师 ...

  9. 基于Web的学生成绩管理系统

    源码及论文下载: http://www.byamd.xyz/tag/java/ 摘 要 本次课程设计课题为学生成绩管理系统,该学生成绩管理系统主要包括前台用户界面的开发和后台数据库的开发,重点在于后台 ...

最新文章

  1. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间
  2. adf的主要功能之一是_浅析高性能纤维纸基功能材料
  3. centos 6.8 安装telnet-server服务
  4. C++ primer 11章关联容器
  5. 【hdu3441】Rotation,Polya套Polya
  6. input file设置默认值_innodb_data_file_path设置--通过错误日志中page大小计算实际值...
  7. 远场语音是什么鬼?和人工智能有什么关系?
  8. python 读写tiff文件
  9. 汉印科技大会:凝聚匠心 成就卓越民族打印机品牌
  10. 20 个有用的 Go 语言微服务开发框架吐血总结!!!
  11. 【Linux】树莓派控制人体红外传感器
  12. kail linux配置无线网络,Kali Linux 无线渗透测试入门指南 第一章 配置无线环境
  13. linux打印文件名称唯美,程序员的情人节应该这么优雅度过(附源码)
  14. 微信小程序接入微信支付流程
  15. go语言 使用MTP协议 通过WPD(windows portable device)读取便携式设备信息并进行文件传输
  16. R语言 样本相似性可视化
  17. OpenWrt添加USB挂载U盘
  18. matlab2015和2016关于fplot的一个区别
  19. 【复习】心田花开:初一语文文言文《桃花源记》知识点
  20. 树莓派CM4 MINI IO产品

热门文章

  1. 计算机毕业设计Java仓库管理系统(源码+系统+mysql数据库+lw文档
  2. Facebook的俄勒冈机房
  3. 正态分布(高斯分布)
  4. 博冠8K登上央视新闻直播间,全程支持《湾区全时刻》慢直播
  5. mysql滴一声弹出,关于mysql数据库在输入密码后,滴的一声直接退出
  6. 计算机汇编指令mov和mova,汇编语言中mov和lea指令的区别详解
  7. 微信小程序之发送http请求(云环境)
  8. 给大家来几个辣眼睛的代码(嘿嘿嘿)
  9. RedHat(红帽子系统)更换yum源为阿里云镜像,成功快速安装gcc
  10. 单片机毕业设计 stm32智能婴儿床系统