配色: 字号:
第8章 数据库应用系统设计与实现
2022-06-07 | 阅:  转:  |  分享 
  
数据库原理及应用第8章数据库应用系统设计与实现数据库应用系统设计与实现本章以大学教学信息管理数据库应用系统的主要设计实现过程为例,主
要介绍数据库应用系统的应用程序设计与编程方法。数据库应用系统的生命周期软件环境及相关事宜1、软件平台工具为SQLServer
20122、VisualStudio2010编程环境3、VisualBasic.NET可视化面向对象程序语言4、A
DO.NET数据库访问对象模型/接口5、其他:SQLServer2012安装过程、VisualStudio2010的安装
过程、完整的程序源代码见附录第8章数据库应用程序设计8.1系统功能分析Ο、相关设计问题1、需求分析2、概念结构设计
3、逻辑结构设计4、物理结构创建(JXGL)5、本章:系统功能分析、数据库结构创建、系统环境与功能模块设计及应用程序设计。用户
登录成绩管理学生管理课程管理系统管理用户添加课程信息添加用户删除密码修改学生信息添加课程信息查询课程信息维护学生信息查询学生信息维
护成绩信息添加成绩信息查询成绩信息维护二、系统功能分析系统(简化)功能模块结构:第8章数据库应用程序设计8.2数据库与
数据表创建一、数据库创建第三章中,JXGL数据库创建的步骤和方法(略),图8.2是创建过程中的关键步骤的图示。二、数据库表结构
1、大学教学管理数据库7个表(字段名、数据类型、完整性约束,等)二、数据库表结构1、大学教学管理数据库7个表(字段名、数据类型
、完整性约束,等)二、数据库表结构1、大学教学管理数据库7个表(字段名、数据类型、完整性约束,等)二、数据库表结构1、大学
教学管理数据库7个表(字段名、数据类型、完整性约束,等)二、数据库表结构1、大学教学管理数据库7个表(字段名、数据类型、完整性约
束,等)二、数据库表结构1、大学教学管理数据库7个表(字段名、数据类型、完整性约束,等)二、数据库表结构1、大学教学管理数据
库7个表(字段名、数据类型、完整性约束,等)二、数据库表结构用于进行用户管理的表(字段名、数据类型、完整性约束,等)三、数据
库表的创建1)方法一利用使用SQLServerManagementStudio工具中的表设计器创建数据库表(详见3.
5.4小节的例3.14)。2)方法二利用使用SQL语言中的创建表语句(CREATETABLE)逐个地创建表(详见4.2.1
小节)。三、数据库表的创建3)方法三基于SQLServerManagementStudio查询编辑器的批处理创建数
据库表方法。(1)利用记事本编写批处理创建数据库表的脚本程序USEJXGLGOCREATETABLES(S#CH
AR(9)PRIMARYKEY,SNAMECHAR(16)NOTNULL,SSEXCHAR(2)CHEC
K(SSEXIN(''男'',''女'')),SBIRTHINDATETIMENOTNULL,PLACEOFBCHAR(1
6),SCODE#CHAR(5),CLASSCHAR(6));CREATETABLEC(C#CHAR
(7)PRIMARYKEY,CNAMECHAR(20)NOTNULL,CLASSHSMALLINTNOTNUL
L);?CREATETABLESC(S#CHAR(9)NOTNULL,C#CHAR(7)NOTNULL,GR
ADESMALLINTNOTNULL,PRIMARYKEY(S#,C#));?createtableUSERS(
USER#char(10),PASSWORD#char(20),PRIMARYKEY(USER#,PASSWORD#)
);?GO三、数据库表的创建(2)将记事本中的文本形式的上述脚本程序拷贝到SQLServerManagementStu
dio工具中的查询编辑器,单击执行即可完成各数据库表的创建。(3)要给创建好的数据库表插入数据,为程序的调试和验证准备好表中的数
据。USEJXGLGO?INSERTINTOSVALUES(‘201401001’,‘张华’,‘男’,‘1996-12-
14'',''北京'',''S0401'',''201401'');INSERTINTOSVALUES(''201401002'',
''李建平'',''男'',''1996-08-20'',''上海'',''S0401'',''201401'');INSERTINTO
SVALUES(''201401003'',''王丽丽'',''女'',''1997-02-02'',''上海'',''S0401'',''
201401'');?INSERTINTOCVALUES(''C401001'',''数据结构'',70);INSERTINTO
CVALUES(''C401002'',''操作系统'',60);INSERTINTOCVALUES(''C402001'',''指
挥信息系统'',60);?INSERTINTOSCVALUES(''201401001'',''C402001'',90);INSE
RTINTOSCVALUES(''201401001'',''C402002'',90);INSERTINTOSCVALUE
S(''201401001'',''C403001'',85);?INSERTINTOUSERSVALUES(''ljs'',''12
3'');?GO第8章数据库应用程序设计8.3新建项目一、为应用系统新建项目(1)打开VisualStudio
2010,单击“文件”菜单,选择“新建项目”选项,打开“新建项目”对话框。在左边的“已安装的模板”中,选择“VisualBasi
c”下的“Windows”选项,再选择“Windows窗体应用程序”。将项目名称中的默认名称“WindowsApplicatio
n1”,修改为新项目名称:JXGLApplication。单击(前一个界面底部的)“确定”,进入新建项目的设计界面:此时,表
示该新建的“JXGLApplication”项目已经创建成功,可选择VisualStudio系统窗体左上角的“文件”菜单中的“全
部保存”选项保存该项目。解决方案资源管理器下的默认项目名称是:WindowsApplication当需要关闭项目时,单击Vi
sualStudio右上角的;如果之前没有保存该项目,系统在弹出的“关闭项目”对话框中提示“是否保存或放弃对当前项目的更改?
”,单击“保存”按钮,弹出下图所示的“保存项目”对话框,此时也可修改项目名称,并选择项目保存位置。关闭新建项目的第二种方法是点
击左上角的“文件”菜单,选择“关闭项目”并点击。若要选择保存项目位置时,在打开的“项目位置”对话框(左下图),选择项目保存位置
,单击“选择文件夹”按钮后,返回“保存项目”对话框,单击“保存”按钮后,该项目即被保存到选择的文件夹中。二、项目及窗体设计界面布局
及功能新建项目时打开的项目/窗体设计界面如图8.7所示。第8章数据库应用程序设计8.4应用系统设计与实现大学教
学管理数据库应用系统的功能模块:登录、主界面、学生信息管理、课程信息管理、成绩信息管理等功能功能。功能模块的实现涉及到:登录
窗体、主界面窗体、学生信息添加窗体、学生信息查询窗体、课程信息添加窗体、成绩信息查询窗体、成绩信息维护窗体等的设计与实现。一、登录
模块1、功能描述用户登录模块用于验证登录者的身份和权限,并在用户成功登录后根据登录者身份的不同,分别进入相应的操作界面,完成
相应的功能及界面初始化。用户名和密码保存在JXGL数据库的USERS表中,登录模块要通过访问数据库,读取USERS表中的内容,通
过与登录者输入的用户名和密码数据的是否一致判定,完成用户身份验证和密码验证。一、登录模块2、界面布局和对象及属性设置◆3个Labe
l控件(文字标签):①教学管理数据库应用系统;②用户名;③密码。◆1个ComboBox:用户名文本选择框。◆1个Te
xtbox:密码文本输入框。◆2个Button按钮:登录命令按钮、取消命令按钮。表8.9“登录”窗体界面中对象的属性值设置一、登
录模块3、控件及属性设计1)Login文件及窗体命名新建项目后,在“窗体设计区”弹出的Form1.vb[设计]即可作为
登录模块的Login窗体,接下来需将其重命名为Login。方法是:在VisualStudio平台的“解决方案资源管理器”栏中右
击Form1.vb,在弹出的快捷菜单中选择并单击“重命名”选项,将原文件名Form1.vb改为Login.vb。一、登录模块3
、控件及属性设计1)Login文件及窗体命名一、登录模块3、控件及属性设计2)控件及属性设计①窗体Login。②
标签Label1(大学教学信息管理信息系统)、标签Label2(用户名)、标签Label3(密码)。③文本框Textbox1
(输入用户名)、文本框Textbox2(输入密码)。④按钮Button1(确定)、按钮Button2(取消)。①给登录模
块的Login窗体重命名方法是:单击Form1窗体的任意空白处,VisualStudio平台右下方的“属性栏”显示“Login
”,表示是对Login窗体对象设置属性。找到Text属性,将其值设置为“大学教学信息管理系统登录界面”;找到StartPositi
on属性,将其值设置为“CenterScreen”(含义是在运行时要求该窗体位于屏幕正中间)。②设计登录模块的Login窗体
的3个Label控件方法是:从VisualStudio平台左边的“工具箱”中选中并单击Label控件,然后在Login窗体上的
合适位置用鼠标拖拉得到“Label1”,在右下方的“属性栏”找到Text属性,将其值设置为“大学教学信息管理信息系统”;找到Aut
osize属性,将其值设置为“True”(含义是该标签会随文字自动调整大小);找到并单击Font属性右侧的设置按钮,在打开的“字
体”对话框中设置Label1的字体、字形和大小为“楷体、粗体、二号”;设置ForeColor属性为“Blue”(含义是Label1
的文字颜色为蓝色)。以同样方法,可为标签Label2(对应用户名)和标签Label3(对应密码)设置雷同的属性值,只是其字体、字形
和大小应设置为“楷体、粗体、四号”。③设计登录模块的Login窗体的2个Textbox控件方法是:从VisualStud
io平台左边的“工具箱”中选中并单击TextBox控件,然后在Login窗体上的合适位置用鼠标拖拉得到“TextBox1”,在右
下方的“属性栏”找到Text属性,将其值设置为“用户名:”;找到并单击Font属性的设置按钮,在打开的“字体”对话框中设置Tex
tBox1的字体、字形和大小为“宋体、常规、四号”。以同样方法,可为TextBox2(对应密码)设置雷同的Text属性值和Fon
t属性值;接着找到MaxLength属性,将其值设置为20(含义是用户输入密码最大长度为20个字符);由于要隐藏密码文本框中的每个
实际密码值而用符号“”代替,所以还要找到PasswordChar属性,将其值设置为“”。④设计登录模块的Login窗体的
2个Button按钮方法是:从VisualStudio平台左边的“工具箱”中选中并单击Button控件,然后在Login窗体上
的合适位置用鼠标拖拉得到“Button1”,在右下方的“属性栏”找到Text属性,将其值设置为“确定”;找到并单击Font属性右侧
的设置按钮,在打开的“字体”对话框中设置Button1的字体、字形和大小为“楷体、粗体、四号”。以同样方法,可为按钮Button
2(对应取消)设置雷同的属性值。一、登录模块图8.11JXGL系统的登录窗体界面一、登录模块3、程序代码设计根据前面的
功能描述,应该为Button1和Button2的鼠标单击事件编写代码。一、登录模块3、程序代码设计双击图8.11中的Butt
on1控件,进入代码编写页。一、登录模块1)添加SqlClient命名空间访问SQLServer数据库需要.NET数据提
供程序的命名空间System.Data.SqlClien的支持。引用命名空间语句为:ImportsSystem.Data.Sq
lClient一、登录模块2)定义数据库连接接下来在login窗体类中定义数据库的连接信息,如图8.13所示。其中:数据
源“DataSource=LENOVO-PC”表示当前SQLServer的服务器名称为LENOVO-PC;“Initial
Catalog=JXGL”中的“JXGL”表示当前数据库名称为JXGL。DimconnstrAsString="Data
Source=LENOVO-PC;InitialCatalog=JXGL;IntegratedSecurity=True"D
imconnAsNewSqlClient.SqlConnection(connstr)一、登录模块2)定义数据库连接
SQLServer服务器名可通过打开SQLServer登录界面获取,如图8.10所示。一、登录模块3)编写“登录”按钮单
击事件代码编写“登录”按钮的单击事件Button1_Click(),登录按钮的代码完成用户名和密码的验证功能。在双击窗体设计
界面上的Button1控件后,在弹出的代码设计页中,可对Button1_Click事件编写以下的程序代码:IfTextBox1
.Text<>""AndTextBox2.Text<>""ThenDimmysqlAsString="s
electfromuserswhereuser#=''"&Me.TextBox1.Text&"''andpas
sword#=''"&Me.TextBox2.Text&"''"DimmyadapterAsNewSqlDataAd
apter(mysql,conn)DimusertableAsNewDataTablemyadapter.Fill(
usertable)Ifusertable.Rows.Count=0ThenMessageBox.Show("用户名或
密码错误!请重新输入!","信息提示")Me.TextBox1.Text=""Me.TextBox2.Text=""
ElseMessageBox.Show("欢迎使用大学教学管理信息系统!")‘Main.Show()‘Main为主界面窗体
名,此处暂时注释,待主界面窗体设计好后,将该注释恢复为命令语句Me.Hide()EndIfElseMsgBox("用户名或
密码不能为空!",MsgBoxStyle.Information,"提示")EndIfFill():在DataSet中添加或
刷新行,以匹配使用DataSet名称的数据源中的行,并创建一个DataTable1、DimmysqlAsString="
selectfromuserswhereuser#=''"&Me.TextBox1.Text&"''andpa
ssword#=''"&Me.TextBox2.Text&"''“字符串运算结果:Mysql=selectfrom
userswhereuser#=‘Me.TextBox1.Text''andpassword#=''Me.TextBox2.
Text''图8.15登录窗体的代码页一、登录模块4)编写“取消”按钮单击事件代码双击Login窗体界面上的Button2控
件,进入Button2_Click事件编写代码。取消按钮Button2要完成关闭当前应用程序的功能,因此其代码如下:其中,Me
是一个系统全局变量,表示当前窗体。代码编写页如图8.15所示。Me.Close()图8.15登录窗体的代码页二、学生信息添加功能
模块1、功能描述学生信息添加窗体要完成的功能主要是将用户在界面上输入的学生信息:学号、姓名、性别、出生日期、籍贯、专业代码
、班级添加进JXGL数据库的学生表S中。在添加之前,需要检查新添的学号在数据库中是否已存在,若存在,则不允许添加。二、学生信
息添加功能模块2、界面布局和对象及属性设置表8.10“学生信息添加”窗体界面中对象的属性值设置1)添加Add_S窗体①
打开JXGLApplication项目,在“解决方案资源管理器”的JXGLApplication项目上右击,在弹出的快捷菜单中选
择“添加”选项,再选择“Windows窗体”选项并单击。1)添加Add_S窗体②在系统弹出“添加新项”对话窗体中,将位于其底
部的缺省窗体名Forma1.vb修改为Add_S.vb,单击“添加”按钮,如下图,即可完成学生信息添加窗体的添加。。2)控件
及属性设计在Add_S窗体上添加学生信息添加所需的控件,窗体布局如下图所示。首先可用鼠标拖拉的方式调整窗体界面的大小。该窗体需
要:7个Label控件(文字显示标签):学号、姓名、性别、出生日期、籍贯、专业代码、班级5个Textbox控件(文本输入框):
学号、姓名、籍贯、专业代码、班级1个ComboBox控件:用于选择性别1个DateTimePicker控件:用于选择出生日期
2个Button按钮:对应于添加、取消2个命令按钮2)控件及属性设计2)控件及属性设计①给学生信息添加模块的Add_
S窗体重命名方法是:单击窗体Add_S的空白处,VisualStudio平台右下方的“属性栏”显示“Add_S”,表示是对Ad
d_S窗体对象设置属性。找到Text属性,将其值设置为“学生信息添加”;找到StartPosition属性,将其值设置为“Cent
erScreen”。2)控件及属性设计②依次设计学生信息添加模块的Add_S窗体的7个Label控件分别是:Label1
(学号)、Label2(姓名)、Label3(性别)、Label4(出生日期)、Label5(籍贯)、Label6(专业代码)、标
签Label7(班级)。分别在其Font属性的“字体”对话框中将其字体、字形和字大小设置为“楷体、粗体、四号”。2)控件及属性设
计③依次设计学生信息添加模块的Add_S窗体的5个TextBox控件将TextBox1控件(对应学号输入框)的MaxLeng
th属性值设置为9;将TextBox2和TextBox3控件(分别对应姓名和籍贯输入框)的MaxLength属性值设置为16;将T
extBox4控件(对应专业代码输入框)的MaxLength属性值设置为5;将TextBox5控件(对应班级输入框)的MaxLen
gth属性值设置为6;将5个TextBox控件的Font属性值设置为“宋体、常规、四号”。2)控件及属性设计④设计为选择学生
性别的组合框ComboBox控件方法是:从VisualStudio平台左边的“工具箱”中选中并单击ComboBox控件,然后在
Add_S窗体上的合适位置用鼠标拖拉得到“ComboBox1”,在“属性栏”中将其Font属性的字体、字形和字大小设置为“宋体、常
规、四号”;找到Items属性,单击其右侧的按钮,弹出“字符串集合编辑器,在其中输入属性值“男”、“女”。如图8.19所示。2
)控件及属性设计⑤设计为选择出生日期的DateTimePicker控件方法是:在Add_S窗体上的合适位置用鼠标拖拉得到“D
ateTimePicker1”。在“属性栏”中将Value属性值设置为“1995/1/1”(也即,将出生日期的默认值设置在大多数
学生的出生时间);将MaxDate属性值设置为“2025/12/30”;将MinDate属性值设置为“1900/1/1”;将Fon
t属性值设置为“宋体、常规、四号”。2)控件及属性设计⑥设计学生信息添加模块的Add_S窗体的2个Button按钮将其Te
xt属性值分别设置为“添加”和“取消”;将其Font属性值设置为“楷体、加粗、四号”。3、程序代码设计双击下图中的Butt
on1控件,进入“添加”按钮的代码编写页。3、学生信息添加功能模块——程序代码设计1)添加SqlClient命名空间和定义数
据库连接为了与登录模块的程序代码设计一样,需要在程序的最前面添加SqlClient的引用命名空间语句;接着在Add_S类中的最前
面定义数据库的连接信息。ImprtsSystem.Data.SqlClientDimconnstrAsString="
DataSource=LENOVO-PC;InitialCatalog=JXGL;IntegratedSecurity=Tr
ue"DimconnAsNewSqlClient.SqlConnection(connstr)3、学生信息添加功能模块—
—程序代码2)编写“添加”按钮单击事件代码“添加”按钮的单击事件Button1_Click()中的代码完成将用户在窗体上输
入和选择的数据值添加到JXGL数据库的S表中。要编写的程序代码位于Button1单击事件子过程开始语句“PrivateSub
Button1_Click”和结束语句“EndSub”之间。Button1_Click事件代码如下:Diminsertsql
AsString="insertintoS(s#,sname,ssex,sbirthin,placeofb,scode
#,class)values(@s#,@sname,@ssex,@sbirthin,@placeofb,@scode#,@cl
ass)"DimcmdAsNewSqlClient.SqlCommand(insertsql,conn)‘检查添加的
学号是否已存在DimsqlstringAsString="selectfromSwheres#=''"&
TextBox1.Text&"''"conn.Open()Dimcom2AsNewSqlClient.SqlComm
and(sqlstring,conn)Dimread1AsSqlDataReader=com2.ExecuteRea
derIfread1.Read()ThenMsgBox("该学号已经存在!",MsgBoxStyle.Informati
on,"提示")Else‘添加新学生的信息conn.Close()cmd.Parameters.Add("@s#",S
qlDbType.VarChar).Value=TextBox1.Textcmd.Parameters.Add("@snam
e",SqlDbType.VarChar).Value=TextBox2.Textcmd.Parameters.Add("
@ssex",SqlDbType.VarChar).Value=ComboBox1.Textcmd.Parameters.
Add("@sbirthin",SqlDbType.DateTime).Value=DateTimePicker1.Valu
ecmd.Parameters.Add("@placeofb",SqlDbType.VarChar).Value=Text
Box5.Textcmd.Parameters.Add("@scode#",SqlDbType.VarChar).Value
=TextBox6.Textcmd.Parameters.Add("@class",SqlDbType.VarChar).V
alue=TextBox7.Textconn.Open()cmd.ExecuteNonQuery()MsgBox("学生
信息添加成功!",MsgBoxStyle.Information,"提示")EndIf‘添加成功后,清空上次用户输入值T
extBox1.Text=""TextBox2.Text=""ComboBox1.Text=""DateTime
Picker1.Value="1995/1/1"TextBox5.Text=""TextBox6.Text=""
TextBox7.Text=""conn.Close()DiminsertsqlAsString="insert
intoS(s#,sname,ssex,sbirthin,placeofb,scode#,class)values(@s#,
@sname,@ssex,@sbirthin,@placeofb,@scode#,@class)"DimcmdAsNew
SqlClient.SqlCommand(insertsql,conn)‘检查添加的学号是否已存在Dimsqlstring
AsString="selectfromSwheres#=''"&TextBox1.Text&"''"c
onn.Open()Dimcom2AsNewSqlClient.SqlCommand(sqlstring,conn)
Dimread1AsSqlDataReader=com2.ExecuteReaderIfread1.Read()T
henMsgBox("该学号已经存在!",MsgBoxStyle.Information,"提示")Else‘添加新学生
的信息MsgBox("学生信息添加成功!",MsgBoxStyle.Information,"提示")EndIf‘添
加成功后,清空上次用户输入值conn.Close()其中:红色语句形成的字符串为:selectfromSwheres
#=‘学号‘DiminsertsqlAsString="insertintoS(s#,sname,ssex,sbi
rthin,placeofb,scode#,class)values(@s#,@sname,@ssex,@sbirthin,@
placeofb,@scode#,@class)"DimcmdAsNewSqlClient.SqlCommand(ins
ertsql,conn)‘检查添加的学号是否已存在DimsqlstringAsString="sel
ectfromSwheres#=''"&TextBox1.Text&"''"conn.Open()
Dimcom2AsNewSqlClient.SqlCommand(sqlstring,conn)Di
mread1AsSqlDataReader=com2.ExecuteReaderIfread1.Read()The
nMsgBox("该学号已经存在!",MsgBoxStyle.Information,"提示")Else‘添加新
学生的信息conn.Close()cmd.Parameters.Add("@s#",SqlDbType.VarChar).V
alue=TextBox1.Textcmd.Parameters.Add("@sname",SqlDbType.VarCh
ar).Value=TextBox2.Textcmd.Parameters.Add("@ssex",SqlDbType.V
arChar).Value=ComboBox1.Textcmd.Parameters.Add("@sbirthin",Sq
lDbType.DateTime).Value=DateTimePicker1.Valuecmd.Parameters.Ad
d("@placeofb",SqlDbType.VarChar).Value=TextBox5.Textcmd.Param
eters.Add("@scode#",SqlDbType.VarChar).Value=TextBox6.Textcmd
.Parameters.Add("@class",SqlDbType.VarChar).Value=TextBox7.Tex
tconn.Open()cmd.ExecuteNonQuery()MsgBox("学生信息添加成功!",MsgBoxSty
le.Information,"提示")EndIf‘添加成功后,清空上次用户输入值conn.Close()二、学生信息添
加功能模块分析:MsgBox("该学号已经存在!",MsgBoxStyle.Information,"提示")VB.N
ET语言的语句格式:MsgBox(消息文本[,显示按钮][,标题])其中:①消息文本:在对话框中作为消息显示的字符串,用于
提示信息。②标题:在对话框标题拦中显示的标题,默认时为空白。③显示按钮:是一个枚举类型的MsgBoxStyle值,用来控
制在对话框内显示的按钮、图标的种类和数量。DiminsertsqlAsString="insertintoS(s#,
sname,ssex,sbirthin,placeofb,scode#,class)values(@s#,@sname,@ss
ex,@sbirthin,@placeofb,@scode#,@class)"DimcmdAsNewSqlClient.
SqlCommand(insertsql,conn)‘检查添加的学号是否已存在Dimsqlstring
AsString="selectfromSwheres#=''"&TextBox1.Text&"''"c
onn.Open()Dimcom2AsNewSqlClient.SqlCommand(sqlstri
ng,conn)Dimread1AsSqlDataReader=com2.ExecuteReaderIfread
1.Read()ThenMsgBox("该学号已经存在!",MsgBoxStyle.Information,"提示
")Else‘添加新学生的信息MsgBox("学生信息添加成功!",MsgBoxStyle.Information,"提
示")EndIf‘添加成功后,清空上次用户输入值TextBox1.Text=""TextBox2.Text=""
ComboBox1.Text=""DateTimePicker1.Value="1995/1/1"TextBox5.
Text=""TextBox6.Text=""TextBox7.Text=""conn.Close()3、学生
信息添加功能模块——程序代码设计3)编写“取消”按钮单击事件代码双击Add_S窗体界面上的Button2控件;进入Butt
on2_Click事件编写代码。取消按钮Button2要完成关闭当前应用程序的功能,代码如下:Me.Close()3、学生信息添
加功能模块——程序代码设计代码编写页如图所示。三、学生信息查询功能模块1、功能描述根据用户输入的学生学号和/或姓名,查询
出JXGL数据库中学生表S的信息,并显示被查询出的人数。该查询要能支持模糊查询,如查询姓“李”的同学。三、学生信息查询功能模块
2、界面布局和对象及属性设置表8.11“学生信息查询”窗体界面中对象的属性值设置三、学生信息查询功能模块2、界面布局和对象
及属性设置1)添加Qry_S窗体在“解决方案资源管理器”的JXGLApplication项目上右击,在弹出的快捷菜单中选择“添
加”选项,再选择“Windows窗体”选项并单击{右下图}。在系统弹出“添加新项”对话窗体中,将位于其底部的窗体名Forma1.
vb修改为Qry_S.vb,单击“添加”按钮,即可完成学生信息查询窗体的添加。2、界面布局和对象及属性设置2)控件及属性设计
在Qry_S窗体上添加学生信息查询所需的控件。根据窗体布局,学生信息查询窗体的对象:①3个Label控件(文字显示标签):
学号、姓名、人数。②3个Textbox控件(文本输入框):学号、姓名、人数。③1个DataGridView控件,用于显示查
询结果。④1个GroupBox控件,用于组合查询选项的框架。⑤1个Button按钮,对应于查询命令按钮。三、学生信息查询功
能模块2、界面布局和对象及属性设置3)控件及属性设计①给学生信息查询模块的Qry_S窗体重命名{原来,窗体“属性栏”的上
方显示的是“Qry_S”}点击窗体Qry_S的空白处,将Qry_S窗体的Text属性值设置为“学生信息查询”。将Start
Position属性值设置为“CenterScreen”,表示在运行时,该窗体位于屏幕正中间。三、学生信息查询功能模块2、界面
布局和对象及属性设置3)控件及属性设计②依次设计学生信息查询模块的Qry_S窗体的3个Label控件分别为:Label1(
学号)、Label2(姓名)、Label3(人数)。分别将其Font属性值设置为“楷体、粗体、四号”。2、界面布局和对象及属性
设置3)控件及属性设计③依次设计学生信息查询模块的Qry_S窗体的3个TextBox控件方法是:将TextBox1控件(
对应学号输入框)的MaxLength属性值设置为9;将TextBox2控件(对应姓名输入框)的MaxLength属性值设置为16。
将TextBox1和TextBox2的Font属性值均设置为“宋体、常规、四号”。TextBox3控件用于显示查询到的学生的人数,
将其ReadOnly属性值设置为True;将Font属性值设置为“宋体、粗体、四号”;将ForeColor属性值设置为“Red”;
将TextAlign属性值设置为“Center”(含义是对齐方式为居中)。三、学生信息查询功能模块2、界面布局和对象及属性设置
3)控件及属性设计④设计GroupBox1控件方法是:单击GroupBox1控件的边缘,在“属性栏”中将其Text属性值设
置为“”(含义是删除Text属性值)。GroupBox1控件用于将查询选项组合在一起,起到美观作用。三、学生信息查询功能模块2、
界面布局和对象及属性设置3)控件及属性设计⑤设计用于显示查询的学生记录结果的DataGridView控件方法是:从Vi
sualStudio平台左边的“工具箱”中选中并单击DataGridView控件,然后在Qry_S窗体上的合适位置用鼠标拖拉得到
“DataGridView1”,其属性均采用默认值。三、学生信息查询功能模块2、界面布局和对象及属性设置3)控件及属性设计
⑥设计Qry_S窗体的“查询”Button按钮方法是:将其Text属性值设置为“查询”;将Font属性值设置为“楷体、加粗
、四号”。三、学生信息查询功能模块学生信息查询窗体界面3、程序代码设计信息查询模块的功能是:当输入学生的学号和/或姓名,并
单击“查询”按钮后,系统从数据库中查询相关信息。所以,需要双击图中的Button1控件,进入“查询”按钮的代码编写页。三、学生信
息查询功能模块3、学生信息查询功能模块——程序代码设计1)添加SqlClient命名空间和定义数据库连接同理,需要在程序的
最前面添加SqlClient的引用命名空间语句;接着在Qry_S类中的最前面定义数据库的连接信息。。ImportsSystem
.Data.SqlClientDimconnstrAsString="DataSource=LENOVO-PC;Ini
tialCatalog=JXGL;IntegratedSecurity=True"DimconnAsNewSqlCli
ent.SqlConnection(connstr)3、学生信息查询功能模块——程序代码设计2)编写“查询”按钮单击事件代码
“查询”按钮的单击事件为Button1_Click(),完成将用户在文本框中输入的学号或姓名作为查询项,在数据库中将满足条件的
数据查询出来,并将其作为DataGridView控件的数据源以显示给用户。为显示查询出来的人数,需要统计人数,用TextBox3
显示。所以,需要编写的程序代码位于Button1单击事件子过程开始语句“PrivateSubButton1_Click”和结
束语句“EndSub”之间。Button1_Click事件代码如下::DimsqlstrAsString="sele
ctfromSwheres#like''"&TextBox1.Text&"%''"&"andsnam
elike''"&TextBox2.Text&"%''"Dimadapter1AsNewSqlDataAdapt
er(sqlstr,conn)Dimdt1AsNewDataSetdt1.Clear()Tryadapter1.
Fill(dt1,“学生”)‘将查询结果填充到数据集对象,并用一个表的别名“学生”e标记CatchexAsExcepti
onMessageBox.Show(ex.Message)ExitSubEndTry‘指定GridView的数据源,G
ridView是以表格方式显示数据的控件DataGridView1.DataSource=dt1.Tables("学生")
''求人数DimcountstrAsString="selectcount()fromSwheres#li
ke''"&TextBox1.Text&"%''"&"andsnamelike''"&TextBox2.Tex
t&"%''"DimcmdAsNewSqlCommand(countstr,conn)conn.Open()Te
xtBox3.Text=cmd.ExecuteScalarconn.Close()MessageBox(消息文本)三、学生信
息查询功能模块分析:第一句:DimsqlstrAsString="selectfromSwheres
#like''"&TextBox1.Text&"%''"&"andsnamelike''"&TextBox2
.Text&"%''"拼接成的字符串形式为:selectfromSwheres#like‘学号%’and
snamelike‘姓名%’分析:第2句:Dimadapter1AsNewSqlDataAdapter(sqlst
r,conn)其中:SqlDataAdapter用来访问SQLServer数据库。DataAdapter是DataSet对
象与数据源之间的桥梁,负责从数据源中检索数据,并把检索到的数据填充到DataSet对象中的表。表8.4SqlDataAdapt
er对象的常用属性和方法属性(方法)名称功能说明SelectCommand对应于SELECT语句,用于在数据源中查询数据记录Del
eteCommand对应于DELETE语句,用于从数据集中删除数据记录InsertCommand对应于INSERT语句,用于向数据
源中插入新数据记录UpdateCommand对应于UPDATE语句,用于更新数据源中的数据记录Fill()在DataSet中添加或
刷新行,以匹配使用DataSet名称的数据源中的行,并创建一个DataTableUpdate()为指定DataSet中每个已插入、
已更新、已删除的行调用相应的INSERT、UPDATE、DELETE语句三、学生信息查询功能模块分析:其中:Tryadapt
er1.Fill(dt1,“学生”)‘可以是其它执行语句CatchexAsExceptionMessageBox.Sh
ow(ex.Message)ExitSubEndTry这是VB.NET程序的一个典型且比较简单的异常处理程序。三、学生信
息查询功能模块分析:DimcountstrAsString="selectcount()fromSwhe
res#like''"&TextBox1.Text&"%''"&"andsnamelike''"&TextB
ox2.Text&"%''"拼接成的字符串形式为:selectcount()fromSwheres#like‘
学号%’andsnamelike‘姓名’四、成绩信息查询功能模块1、功能描述根据用户在下拉组合框中选择的学生信息和/
或课程信息,查询某个/些学生学习了某一/些门课程的成绩,并将查询的结果(记录)依次显示在下方的列表中四、成绩信息查询功能模块2
、界面布局和对象及属性设置窗体中有两个下拉组合框,分别用于显示学生信息和课程信息,因此在窗体加载时,就要从数据库中读取学生信息和
课程信息,分别添加到这两个下拉组合框中,以便用户在查询时选择。表8.12“成绩信息查询”窗体界面中对象的属性值设置四、成绩信息
查询功能模块2、界面布局和对象及属性设置1)添加Qry_Grade窗体在“解决方案资源管理器”的JXGLApplicati
on项目上右击,在弹出的快捷菜单中选择“添加”选项,再选择“Windows窗体”选项并单击{右下图}。在系统弹出“添加新项”对话窗
体中,将位于其底部的窗体名Forma1.vb修改为Qry_Grade.vb,单击“添加”按钮,即可完成学生成绩信息查询窗体的添加。
2、界面布局和对象及属性设置2)控件及属性设计Qry_Grade窗体进行成绩查询所需对象:1个GroupBox控件(用于
组合查询选项的框架)2个Label控件(分别对应于学生、课程2个文字显示标签)2个ComboBox控件(用于下拉组合学生、课程
信息)2个Button按钮(对应查询、取消2个命令按钮)1个ListView控件(用于显示查询结果)四、成绩信息查询功能模块
2、界面布局和对象及属性设置3)控件及属性设计置①给Qry_Grade窗体重命名方法是:将Qry_Grade窗体的T
ext属性值设置为“成绩信息查询”。将StartPosition属性值设置为“CenterScreen”。四、成绩信息查询功能模
块2、界面布局和对象及属性设置3)控件及属性设计置②依次设计学生成绩信息查询模块的Qry_Grade窗体的2个Label
控件2个Label控件:Label1(学生)、Label2(课程)。分别将其Font属性值设置为“楷体、粗体、四号”。四、成
绩信息查询功能模块2、界面布局和对象及属性设置3)控件及属性设计置③设计GroupBox1控件方法是:单击Group
Box1控件的边缘,在“属性栏”中将其Text属性值设置为“”(含义是删除Text属性值)。GroupBox1控件用于将查询选项组
合在一起,起到美观作用。2、界面布局和对象及属性设置3)控件及属性设计置④依次设计学生成绩信息查询模块的Qry_Grad
e窗体的2个ComboBox控件ComboBox1控件是选择学生信息的组合框,通过程序代码读取JXGL数据库中的学生表S的学号和
姓名信息作为其值,然后添加到Items上,所有属性采用默认值。ComboBox2控件是选择课程信息的组合框,也是通过程序代码读取
JXGL数据库中的课程表C的课程号和课程名信息作为其值,然后添加到Items上,所有属性采用默认值。将ComboBox1和Com
boBox2控件的Font属性值设置为“宋体、常规、四号”。四、成绩信息查询功能模块2、界面布局和对象及属性设置3)控件及属
性设计⑤设计学生成绩信息查询模块的Qry_Grade窗体的2个Button按钮将其Text属性值分别设置为“查询”和“取消”
。将Font属性值分别设置为“楷体、加粗、四号”。四、成绩信息查询功能模块2、界面布局和对象及属性设置3)控件及属性设计
⑥设计Qry_Grade窗体的ListView1控件由于ListView1控件的值是程序代码根据学生和课程信息查询得到的,所
以属性值均为默认值。四、成绩信息查询功能模块学生成绩信息查询窗体界面四、成绩信息查询功能模块3、程序代码设计绩信息查询模块的
功能是:系统在加载窗体Qry_Grade时,就要同时从JXGL数据库的学生表S和课程表C中读取信息,并分别添加到学生和课程两个下
拉组合框中。四、成绩信息查询功能模块3、程序代码设计所以,程序代码设计的第一步就是:双击“成绩信息查询”窗体对象的任意空白
处,弹出代码设计页如图8.27所示。四、成绩信息查询功能模块3、程序代码设计1)添加SqlClient命名空间和定义数据库连
接与登录模块的程序代码设计一样,需要在程序的最前面添加SqlClient的引用命名空间语句;在Qry_Grade类中的最前面定义
数据库的连接信息。3、程序代码设计2)编写“窗体加载”事件代码在进行成绩查询时,输入项为学生和课程信息。为方便操作,将用户
输入改为让用户选择学生和课程信息,故窗体中设置了2个ComboBox控件,方便用户选择或输入查询项。由于学号或课程号不够直观,程
序设计时将2个下拉组合框中分别添加上“学号+姓名”和“课程号+课程名”的信息。在“成绩信息查询”窗体刚开始加载运行时,程序就要
为学生和课程这2个下拉组合框准备好可选的数据,故这些程序应该在“成绩信息查询”窗体加载事件时运行。四、成绩信息查询功能模块3
、程序代码设计2)编写“窗体加载”事件代码根据Button1工作逻辑,要编写的程序代码应位于Qry_Grade窗体加载事件子过
程开始语句“PrivateSubQry_Grade_Load”和结束语句“EndSub”之间。Qry_Grade_Load
事件代码如下:''为学生查询组合框添加项DimselAsString="selectfromS"Dimco
mAsNewSqlCommand(sel,conn)conn.Open()DimsreaderAsSqlData
Reader=com.ExecuteReaderDoWhilesreader.ReadComboBox1.Items.
Add(sreader.GetString(0)&""&sreader.GetString(1))Loopconn
.Close()''为课程查询组合框添加项Dimsel1AsString="selectfromc"Dim
com1AsNewSqlCommand(sel1,conn)conn.Open()Dimsreader1AsSq
lDataReader=com1.ExecuteReaderDoWhilesreader1.ReadComboBox2
.Items.Add(sreader1.GetString(0)&""&sreader1.GetString(1))
Loopconn.Close()其中:GetString方法:以String类型返回指定列中的值四、成绩信息查询功能模块3、
编写程序代码3)编写“查询”按钮单击事件代码“查询”按钮的单击事件Button1_Click()中的代码,完成将用户在窗体上
输入和选择的学号或课程号带入数据库中进行查询,并将查询所得结果用列表ListView显示出来。在查询时,需要先判断用户对学号
和课程号的输入选择是否有一项为空,或均为空,从而修改查询的SQL语句。ListView控件的数据是通过将查询结果中逐行为每个字段
值插入其子项所得。双击Qry_Grade窗体设计界面上的Button1控件后,在弹出的代码设计页中,针对Button1_Clic
k事件编写以下代码。DimsnumAsString=Strings.Left(ComboBox1.Text,9)
''学号为9位,查询时取组合框前9位DimcnumAsString=Strings.Left(ComboBox2.T
ext,7)''课程号为7位,查询时取组合框前7位DimsqlstringAsString=""ListView
1.Items.Clear()Ifsnum<>""Then''判断用户是否选择了学号或课程号中的任意一
项Ifcnum<>""Thensqlstring="selects.s#,s.sname,c.c#,c.cnam
e,sc.gradefromS,SC,Cwheresc.s#=''"&snum&"''andsc.c#=''"&
cnum&"''andS.s#=SC.s#andSC.c#=C.c#"Elsesqlstring="select
s.s#,s.sname,c.c#,c.cname,sc.gradefromS,SC,Cwheresc.s#=''"&
snum&"''andS.s#=SC.s#andSC.c#=C.c#"EndIfElseIfcnum<>"
"Thensqlstring="selects.s#,s.sname,c.c#,c.cname,sc.gradefro
mS,SC,Cwheresc.c#=''"&cnum&"''andS.s#=SC.s#andSC.c#=C.c
#"ElseMsgBox("至少有一项不能为空!",MsgBoxStyle.Information,"提示")EndI
fEndIfconn.Open()''开始进行查询DimcomAsNewSqlCommand(sql
string,conn)Dimread1AsSqlDataReader=com.ExecuteReader()Do
Whileread1.Read()''将查询出来的数据添加入ListView的子项中以显示出来Dimitem
AsListViewItemDimsubitem1,subitem2,subitem3,subitem4AsLi
stViewItem.ListViewSubItemitem=NewListViewItem(read1(0).ToStr
ing)subitem1=NewListViewItem.ListViewSubItem(item,read1(1))
item.SubItems.Add(subitem1)subitem2=NewListViewItem.ListViewS
ubItem(item,read1(2))item.SubItems.Add(subitem2)subitem3=New
ListViewItem.ListViewSubItem(item,read1(3))item.SubItems.Add(s
ubitem3)subitem4=NewListViewItem.ListViewSubItem(item,read1(
4))item.SubItems.Add(subitem4)ListView1.Items.Add(item)read1.
Close()conn.Close()DimsnumAsString=Strings.Left(ComboBox1.
Text,9)''学号为9位,查询时取组合框前9位DimcnumAsString=Strings.Left(Com
boBox2.Text,7)''课程号为7位,查询时取组合框前7位DimsqlstringAsString=""
ListView1.Items.Clear()Ifsnum<>""Then''判断用户是否选择了学号或课程号中的任意一
项Ifcnum<>""Thensqlstring="selects.s#,s.sname,c.c#,c
.cname,sc.gradefromS,SC,Cwheresc.s#=''"&snum&"''andsc.c#=
''"&cnum&"''andS.s#=SC.s#andSC.c#=C.c#"Elsesqlstring="se
lects.s#,s.sname,c.c#,c.cname,sc.gradefromS,SC,Cwheresc.s#=''
"&snum&"''andS.s#=SC.s#andSC.c#=C.c#"EndIfElseIfcnum
<>""Then…DimsnumAsString=Strings.Left(ComboBox1.Text,9)
''学号为9位,查询时取组合框前9位DimcnumAsString=Strings.Left(ComboBox2.Tex
t,7)''课程号为7位,查询时取组合框前7位DimsqlstringAsString=""ListView1
.Items.Clear()Ifsnum<>""Then''判断用户是否选择了学号或课程号中的任意一项Ifcn
um<>""Thensqlstring="selects.s#,s.sname,c.c#,c.cname,s
c.gradefromS,SC,Cwheresc.s#=''"&snum&"''andsc.c#=''"&cnu
m&"''andS.s#=SC.s#andSC.c#=C.c#"Elsesqlstring="selects.s
#,s.sname,c.c#,c.cname,sc.gradefromS,SC,Cwheresc.s#=''"&snum
&"''andS.s#=SC.s#andSC.c#=C.c#"EndIfElseIfcnum<>""Th
ensqlstring="selects.s#,s.sname,c.c#,c.cname,sc.gradefromS
,SC,Cwheresc.c#=''"&cnum&"''andS.s#=SC.s#andSC.c#=C.c#"
ElseMsgBox("至少有一项不能为空!",MsgBoxStyle.Information,"提示")EndI
fEndIf…conn.Open()''开始进行查询DimcomAsNewSqlCommand(s
qlstring,conn)Dimread1AsSqlDataReader=com.ExecuteReader()
DoWhileread1.Read()''将查询出来的数据添加入ListView的子项中以显示出来DimitemAs
ListViewItemDimsubitem1,subitem2,subitem3,subitem4AsListVi
ewItem.ListViewSubItemitem=NewListViewItem(read1(0).ToString)
subitem1=NewListViewItem.ListViewSubItem(item,read1(1))item
.SubItems.Add(subitem1)subitem2=NewListViewItem.ListViewSubIt
em(item,read1(2))item.SubItems.Add(subitem2)subitem3=NewLis
tViewItem.ListViewSubItem(item,read1(3))item.SubItems.Add(subit
em3)subitem4=NewListViewItem.ListViewSubItem(item,read1(4))
item.SubItems.Add(subitem4)ListView1.Items.Add(item)read1.Clos
e()conn.Close()四、成绩信息查询功能模块3、程序代码设计4)编写“取消”按钮单击事件代码双击Qry_Gra
de窗体界面上的Button2控件,进入Button2_Click事件编写代码。取消按钮Button2要完成关闭当前应用程序的功能
,代码如下:Me.Close()五、成绩信息维护功能模块1、功能描述成绩信息维护窗体要完成数据更新和删除的功能。1)系统加
载时,就可以通过DataGridView控件查看到学习表SC中的数据,双击DataGridView控件中要更新成绩的一行,该行数据
就在下方用3个文本框显示出来,此时可直接修改文本框中的成绩,点击“更新”按钮后,该成绩即写入数据库,从而完成成绩更新。五、成绩信息
维护功能模块1、功能描述2)在DataGridView控件中,设置一个“标记”列,当用户选中任意多个“标记”,点击下方的“删
除”按钮,则可删除这些被标记的数据行。在删除之前,需要给出是否删除的提示框。用户双击DataGridView中任意一行时,“标记”
也同时被选中。五、成绩信息维护功能模块1、功能描述成绩信息维护窗体中共涉及到4个事件:①窗体加载事件②DataGri
dView控件的单元格双击事件③“更新”按钮单击事件④“删除”按钮单击事件为展示程序设计的多种方法,此处窗体加载事件采用
可视化操作方式为DataGridView控件绑定数据源。五、成绩信息维护功能模块2、界面布局和对象及属性设置表8.13“成
绩信息维护”窗体界面中对象的属性值设置五、成绩信息维护功能模块2、界面布局和对象及属性设置1)添加ManageGrade窗体
在“解决方案资源管理器”的JXGLApplication项目上右击,在弹出的快捷菜单中选择“添加”选项,再选择“Windows窗
体”选项并单击{右下图}。在系统弹出的“添加新项”对话窗体中,将位于其底部的窗体名Forma1.vb修改为ManageGrade
.vb,单击“添加”按钮,即可完成成绩信息维护窗体的添加。2、界面布局和对象及属性设置2)控件及属性设计ManageGr
ade窗体的对象有:1个DataGridView控件(用于显示要维护的学习表数据)1个GroupBox控件(用于组合查询选项的
框架)3个Label控件(分别对应于学号、课程号、成绩3个文字显示标签)3个TextBox控件(用于显示学号、课程号和成绩信息
)2个Button按钮(对应更新、删除2个命令按钮)五、成绩信息维护功能模块2、界面布局和对象及属性设置2)控件及属性设
计①给ManageGrade窗体重命名将ManageGrade窗体的Text属性值设置为“成绩信息维护”。将StartPo
sition属性值设置为“CenterScreen”。五、成绩信息维护功能模块2、界面布局和对象及属性设置2)控件及属性设计
②设计用于显示学习表SC的数据的DataGridView1控件方法是:将DataGridView1控件的属性均设置为默认值。
该控件添加数据源的方式在3)中详述。添加双击单元格事件将在程序代码设计部分详述。五、成绩信息维护功能模块2、界面布局和对
象及属性设置2)控件及属性设计③设计GroupBox1控件方法是:单击GroupBox1控件的边缘,在“属性栏”中将其T
ext属性值设置为“当前记录”。GroupBox1控件将查询选项组合在一起,起到美观作用。五、成绩信息维护功能模块2、界面布
局和对象及属性设置2)控件及属性设计④为Label控件设置属性方法是:将Label1控件的Text属性值设置为“学号”。
将Label2的Text属性值设置为“课程号”。将Label3的Text属性值设置为“成绩”。将他们的Font属性值均设置为
“楷体、加粗、四号”。2、界面布局和对象及属性设置2)控件及属性设计⑤设计3个TextBox空间的属性TextBox1
和TextBox2控件用于显示学号和课程号,由于学号和课程号不可更改,所以将TextBox1和TextBox2的ReadOnly属
性值设置为True,并将其MaxLength属性的值分别设置为9和20。TextBox3控件用于显示成绩信息,成绩信息可以更改,
其属性均采用默认值。Font属性值均设置为“宋体、常规、四号”。五、成绩信息维护功能模块2、界面布局和对象及属性设置2)控
件及属性设计⑥设置Button控件的属性将Button1和Button2控件的Text属性分别设置为“更新”和“删除”。将
他们的Font属性值均设置为“楷体、加粗、四号”。五、成绩信息维护功能模块成绩信息维护窗体界面五、成绩信息维护功能模块2、界面
布局和对象及属性设置3)为DataGridView控件添加数据源DataGridView控件用于在窗体加载时显示数据库中的学习
表SC的数据。在本例窗体中DataGridView控件共有4列,分别是“标记”“学号”“课程号”和“成绩”。后3列通过数据源配置
向导的可视化操作方式添加数据源。具体操作方法可参照例7.3操作步骤的(3)~(11)。添加操作完成后,SC表中的S#、C#、GR
ADE列的中文名称可通过“DataGridView任务”下方的“编辑列”项分别修改为“学号”、“课程号”和“成绩”(具体操作方法可
参照例7.3操作步骤的(13)~(14)。2、界面布局和对象及属性设置4)为DataGridView控件添加“标记”列“标
记”列不来自于数据源中,因此需要为DataGridView控件单独添加1个选项列。(1)单击DataGridView控件右上方
的三角按钮,在弹出的“DataGridView任务”窗口中选择并单击“添加列…”选项,如图8.33(a)所示。2、界面布局和对
象及属性设置4)为DataGridView控件添加“标记”列“标记”列不来自于数据源中,因此需要为DataGridView控件
单独添加1个选项列。(1)在打开的如图8.33(b)所示的“添加列”对话框中,选择“未绑定列”,在“类型”中选择“DataGri
dViewCheckBoxColumn”,并在页眉文本中输入“标记”,单击“添加”按钮。2、界面布局和对象及属性设置4)为D
ataGridView控件添加“标记”列(2)调整“标记”列的位置。用向上的箭头或向下的箭头调整“标记”列的位置。这里将“标
记”调整到DataGridView控件的第一项。如下图。为适应用户对“标记”列的宽度要求,设置“标记”列的Width属性值为40
。2、界面布局和对象及属性设置4)为DataGridView控件添加“标记”列添加完成后,成绩信息维护窗体的控件设置完成,
如下图。五、成绩信息维护功能模块3、程序代码2)生成“窗体加载”事件代码“成绩信息维护”窗体加载事件,实质上是要完成由Da
taGridView控件显示学习表SC的数据,而这一功能是由前面的DataGridView控件添加数据源完成的。因此,只要在代码页
则自动生成“窗体加载”事件代码,无需编程。代码页如图8.26所示。五、成绩信息维护功能模块3、程序代码设计1)生成“窗体加
载”事件代码在成绩信息维护窗体界面加载时,就要同时完成从JXGL数据库的学习表SC查询数据的功能。而这一功能是前面介绍的用操作方
式为DataGridView控件添加数据源完成的,与此同时也在代码页自动生成了“窗体加载”事件代码,无需编程。五、成绩信息维护功能
模块3、程序代码设计2)添加SqlClient命名空间和定义数据库连接同理,需要在程序的最前面添加上SqlClient的引
用命名空间语句;在ManageGrade类(PublicClassManageGrade)中的最前面定义数据库的连接信息。Im
portsSystem.Data.SqlClientDimconnstrAsString="DataSource=L
ENOVO-PC;InitialCatalog=JXGL;IntegratedSecurity=True"DimconnA
sNewSqlClient.SqlConnection(connstr)经过前面的自动生成和添加代码过程,形成如下程序代码:
3、程序代码设计3)双击DataGridView控件单元格事件代码在“成绩信息维护”窗体设置界面,选中DataGridVie
w控件,单击“属性栏”中“事件”项,即单击闪电图标。在下方找到CellDoubleClick事件,双击该事件的值,就会在代码页
添加一个名为“DataGridView1_CellDoubleClick”的事件,如图8.27所示。3、程序代码设计3)双击
DataGridView控件单元格事件代码在DataGridView1_CellDoubleClick()事件中,添加以下代码,
完成向3个文本框中写入当前被双击行的数值。代码文本如下,‘双击DataGridView选中需要进行更新或删除的数据TextBo
x1.Text=DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString
TextBox2.Text=DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToS
tringTextBox3.Text=DataGridView1.Rows(e.RowIndex).Cells(3).Val
ue.ToStringDataGridView1.Rows(e.RowIndex).Cells(0).Value=True完
成前三步的程序代码设计后的代码页如下图所示五、成绩信息维护功能模块3、程序代码设计4)编写“更新”按钮单击事件代码单击“更
新”事件Button1_Click()的代码完成更新成绩的工作。更新数据项的条件是双击DataGridView单元格写入文本框中的
学号和课程号,在窗体上修改TextBox3的成绩后即为更新后的成绩值。双击ManageGrade窗体设计界面上的Button1控
件后,在弹出的代码设计页中,针对Button1_Click事件编写以下代码。''更新双击DataGridView中选中的数据If
TextBox1.Text<>""AndTextBox2.Text<>""ThenDimsqlstringA
sStringsqlstring="updatescsetgrade=''"&TextBox3.Text&"
''wheres#=''"&TextBox1.Text&"''andc#=''"&TextBox2.Text&"''
"DimcmdAsNewSqlCommand(sqlstring,conn)conn.Open()cmd.Exec
uteNonQuery()MsgBox("数据更新成功!")conn.Close()CallManageGrade_Loa
d(Nothing,Nothing)TextBox1.Text=""TextBox2.Text=""TextBox
3.Text=""ElseMsgBox("请双击数据表中要更新的行!")EndIf五、成绩信息维护功能模块3、程序
代码设计5)编写“删除”按钮单击事件代码双击ManageGrade窗体界面上的Button2控件,进入Button2_Clic
k删除事件编写代码。完成的功能是删除在DataGridView控件中“标记”项被选中的数据行,代码如下。''删除选中的数据行Di
mcellvalueAsObject=False''定义checkbox选中事项,并初始化Dimi,j
AsIntegerDimnumAsInteger''定义保存SC表中总行数的变量num=
Me.DataGridView1.RowCount''从DataGridView中计算数据总行数,并赋给numDim
a(num)AsBoolean''定义数组a(num)保存“标记”列选中行的位置数Fori=
0Tonum-1''初始化数组a(num)a(i)=FalseNextForj=0Tonum
-2''DataGridView最后一行为空,从0开始循环,至num-2结束cellvalue
=Me.DataGridView1.Rows(j).Cells(0).ValueIfcellvalue=TrueThe
n''如果“标记”中当前行被选中,则将其记入数据a(j)中a(j)=Truecellvalue=Fa
lseEndIfNextDimstr1AsString''定义游标cc1,用于删除选中“标记
”行的元组str1=""str1=str1&"declarecc1cursor"&""str1=s
tr1&"forselectfromsc"&""str1=str1&"opencc1"&""
DimxAsInteger=0Whilexfromcc1"Ifa(x)=TrueThen''当数组a(x)中的值为true时,即“标记”被选
中时,则删除该行str1=str1&"deletefromsc"&""str1=str1&"wher
ecurrentofcc1"&""EndIfx=x+1EndWhileSelect
CaseMsgBox("您确定要删除标记的数据吗?",MsgBoxStyle.OkCancel)CaseMsgBoxRes
ult.OkDimsqlcmdAsNewSqlCommand(str1,conn)conn.Open()sqlcm
d.ExecuteNonQuery()''执行删除conn.Close()CallManageGrad
e_Load(Nothing,Nothing)''调用窗体加载事件,即刷新数据TextBox1.Text=""Te
xtBox2.Text=""TextBox3.Text=""EndSelect六、主界面模块1、功能描述主界面模
块的功能是将已经设计的学生信息添加、学生信息查询、成绩信息查询、成绩信息维护等功能模块整合起来,形成一个界面直观、操作方便、实用性
强的软件系统。整个系统的运行逻辑是,用户通过登录模块登录进入系统主界面窗体,在主界面上通过两级菜单连接到各个功能模块窗体。六、主
界面模块2、界面布局和对象及属性设置主界面模块的布局图表8.13主界面窗体控件及属性值的设置六、主界面模块2、界面布局和
对象及属性设置1)添加Main窗体在“解决方案资源管理器”的JXGLApplication项目上右击,在弹出的快捷菜单中选择“
添加”选项,再选择“Windows窗体”选项,为项目添加一个主界面窗体,并将窗体名修改为Main.vb。3、界面布局和对象及属
性设置2)控件及属性设计窗体中包含的对象有:窗体MainMenuStrip菜单控件(连接各功能窗体)Picture图片控
件(展示主界面的图形)Label标签控件(显示“欢迎使用大学教学信息管理系统”)六、主界面模块2、界面布局和对象及属性设置
3)控件及属性设计①给主界面模块的Main窗体重命名方法是:单击窗体Main的空白处,在“属性栏”中找到Text属性,将T
ext属性值改成“大学教学信息管理系统”。在StartPosition属性值选择菜单中,选择值“CenterScreen”。
2、界面布局和对象及属性设置3)控件及属性设计②在控件上添加一级菜单和二级菜单名设置菜单的方法是:当用鼠标单击菜单控件
上的某项时,菜单控件上就会显示出针对各级菜单的灰色文本框,并有“请在此处键入”提示,直接在该文本框中键入文字,即成为相应级别的菜单
项。3、界面布局和对象及属性设置3)控件及属性设计③为主界面添加背景图片方法是:在VisualStudio平台左边的
控件“工具箱”中找到“Picture”图片控件选项并单击,在主界面窗体上用鼠标拖拉形成添加背景图片的框体;鼠标在拟放置背景图片的
框体内右击,在弹出的快捷菜单中选择“选择图像”(右图)并单击。3、界面布局和对象及属性设置3)控件及属性设计③为主界面添
加背景图片方法是:或在其“属性栏”找到Image属性,单击右侧的;在弹出的“选择资源”窗体中选择“本地资源”,选择并单击“导
入(M)”按钮(右下图),这时可通过选择本地硬盘上的文件路径,从本地硬盘上导入一幅提前准备好的合适图片。进而可继续设置Pictu
reBox1的SizeMode属性值为“StretchImage”,表示伸展图片以适应主界面窗体的大小。六、主界面模块2、界面
布局和对象及属性设置3)控件及属性设计④为Label控件设置属性方法是:将Label1控件的Text属性值设置为“欢迎使
用大学教学信息管理系统”。将Font属性值设置为“方正舒体、半紧缩粗体、二号”。将BackColor属性值选择为“Transp
arent”透明色。六、主界面模块JXGL系统的主界面窗体六、主界面模块3、程序代码设计双击需要链接的菜单项,进入代码页。
1)菜单项代码双击“学生信息添加”二级菜单项,系统打开“学生信息添加ToolStripMenuItem_Click()”事件的代
码框架,在其中输入以下代码,表示打开“学生信息添加”窗体Add_S。Add_S.Show()六、主界面模块3、程序代码设计1)菜单项代码可以上面雷同的方法完成其余二级菜单项的程序代码编写。“关于”一级菜单项编写了系统名、开发者、时间等信息。“退出”一级菜单项编写了关闭本窗体的代码。图8.33菜单项代码六、主界面模块3、程序代码设计2)修改登录窗体代码在编写“登录”窗体时,当验证用户名和密码成功后,将要打开主界面窗体Main,代码为:Main.Show()第8章数据库应用程序设计8.5系统调试运行系统调试运行1、启动调试点击VisualStudio菜单中的“调试”项下的“启动调试”菜单项,如图8.46所示。系统调试运行2、调试出错的处理若系统提示出错,则在错误列表中将会显示出相应的错误、警告和消息。双击错误提示的具体条目,将会打开程序代码的相应位置,在此位置即可直接修改程序代码。系统调试运行2、调试出错的处理若不能直接修改,可通过点击“调试”菜单中的“停止调试”菜单项,就可在程序代码页修改了,修改后记得及时保存。如图8.47所示。3、调试成果的情况如果调试成功,系统将会弹出默认的启动窗体Login的运行界面。在登录窗体的用户名和密码文本框中,输入正确的用户名和密码后,系统提示“欢迎使用大学教学管理信息系统!”,并打开主界面。若输入的用户名或密码与数据库中USERS表保存的不相符,则会弹出“用户名或密码出错!请重新输入!”的提示框。系统调试运行4、登陆成功界面登录成功后打开系统主界面,如图8.49所示。5、学生信息添加点击主界面中的“学生管理”菜单下的“学生信息添加”菜单项,打开“学生信息添加”窗体界面。在每项文本框中输入相应的文本值,在性别下拉框中选取“男”或“女”,在出生日期中选取日期后,单击“添加”按钮即完成学生信息的添加。如图8.50所示。若输入的学号在数据库中已存在,表明已有该学生,系统提示“该学号已经存在!”,同时不向数据库中添加。6、学生信息查询点击主界面中的“学生管理”菜单下的“学生信息查询”菜单项,打开“学生信息查询”界面,如图8.51所示。用户可通过输入“学号”或“姓名”查询学生信息,查询结果显示在界面下方的表格中,学生人数显示下左下角的文本框中。7、成绩信息查询点击主界面菜单中的“成绩管理”菜单下的“成绩信息查询”菜单项,打开“成绩信息查询”界面。从两个下拉列表框中选择要查询的学生信息或课程信息,点击“查询”按钮,查询结果将显示在下面的表格中。查询结果如图8.52所示。8、成绩信息维护点击主界面中的“成绩管理”菜单下的“成绩信息维护”菜单项,打开“成绩信息维护”界面,此时在列表中显示出所有学生学习课程的情况。双击列表需要进行更新的行,此时当前记录值显示在下方的文本框中,修改成绩值后,点击“更新”按钮,系统给出“更新成功”的提示。更新过程如图8.53所示。9、数据记录删除在“成绩信息维护”界面中,还可以进行数据记录删除的操作。选中需要删除的数据行的“标记”可选项,点击“删除”按钮,系统弹出“您确定要删除标记的数据吗?”提示框,若选择“确定”,则从数据库中将这些数据记录删除;若选择“取消”,则不删除。可同时进行多条记录的删除。删除操作如图8.54所示。10、关于和退出点击主界面的“关于”菜单项,系统弹出有关作者信息,如图8.55所示。点击主界面的“退出”菜单项,系统退出。谢谢大家!SQLServer数据库本地验证方式第一:导入空间importsSystem.Data.SqlCilent第二:定义封装?dimconasSqlConnection?dimcomasSqlCommand?dimdrasSqlDataReader第三:定义连接方式与加载数据库?DimstrAsString=“database=LENOVO-PC;server=JXGL;IntegratedSecurity=true”第四:实现连接?con=NewSqlConnection(str)com=NewSqlCommand(“selectfromS",con)con.Open()dr=com.ExecuteReaderWhiledr.Read()''读数据MsgBox(dr(0))EndWhiledr.Close()con.Close()SQLServer数据库本地验证方式第一:导入空间importsSystem.Data.SqlCilent第二:定义封装?dimconasSqlConnection?dimcomasSqlCommand?dimdrasSqlDataReader第三:定义连接方式与加载数据库?DimstrAsString=“database=LENOVO-PC;server=JXGL;IntegratedSecurity=true”第四:实现连接?con=NewSqlConnection(str)com=NewSqlCommand(“selectfromS",con)con.Open()dr=com.ExecuteReaderWhiledr.Read()''读数据MsgBox(dr(0))EndWhiledr.Close()con.Close()
献花(0)
+1
(本文系太好学原创)