VB课程设计报告学生信息管理系统.docx

上传人:b****7 文档编号:9132508 上传时间:2023-02-03 格式:DOCX 页数:35 大小:3.66MB
下载 相关 举报
VB课程设计报告学生信息管理系统.docx_第1页
第1页 / 共35页
VB课程设计报告学生信息管理系统.docx_第2页
第2页 / 共35页
VB课程设计报告学生信息管理系统.docx_第3页
第3页 / 共35页
VB课程设计报告学生信息管理系统.docx_第4页
第4页 / 共35页
VB课程设计报告学生信息管理系统.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

VB课程设计报告学生信息管理系统.docx

《VB课程设计报告学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《VB课程设计报告学生信息管理系统.docx(35页珍藏版)》请在冰豆网上搜索。

VB课程设计报告学生信息管理系统.docx

VB课程设计报告学生信息管理系统

VisualBasic课程设计报告

一、题目简介1

二、设计思路与总体方案6

三、设计过程遇到的主要问题及解决方法21

四、设计中尚存的不足分析22

五、心得体会25

六、参考文献26

一、

题目简介

学生进入学校后,每个人有很多信息,例如:

学号,姓名,出生年月,专业,所在院系,个人爱好等等,这些信息很杂乱,也很难一一理,清查询起来

也很难,用学生信息管理对这些信息进行管理。

本题目旨在设计与一个可对学生信息进行管理和查询统计的程序,维护学生的学号通过此程序的设计,可以加深我们对上学期的vb基础知识的印象,使理论升华为实际操作,同时也有助于我们培养合理化意识,用电子记录的形式取代从前的手写记录,使得信息更加精准,不易丢失。

题目的难度系数相对不高,但牵涉到众多的知识点,作为典型的多模块设计类型的题目,本程序涉及两个模块,主窗体和查询窗体。

复习了上学期我们所学的vb知识,自定义数据类型和动态数组,更加熟练的掌握了这两方面知识。

在这一程序中,还要学会两个新控件MSFlexGird表格控件和DTPicker日期选择器的使用。

MSFlexGrid却是这个程序编辑过程中最主要的控件,所以需要自学,还是有点难度的。

MSFlexGrid控件具有很强的数据组织能力和显示能力,但是其本身并无编辑数据的功能。

本程序使用了文本框、DTPicker日期选择器控件和下拉式组合框三个控件来协助数据编辑。

如何协调三个编辑控件的显示和隐藏是本题目的难点。

题目提供了四个文本文件:

“名族.txt”、“院系.txt”、“专业.txt”和“省份.txt”,其中的信息可供程序在显示编辑组合框时使用。

每个名族。

院系。

专业和省份都有一个代号,为了缩减data.dat文件的大小,该文件中并未保存具体的名称,而是一个代号。

程序要求实现如下功能(主要根据窗口由易到难的顺序来)

(1)学生进入系统,进入登陆界面,系统要求学生输入学号和密码。

(自加窗体)

系统要求学生的密码和学号相同,若不相同,则显示以下界面

系统要求学生的学号为纯数字,不得包含字母等,且学号为十位数,若不满足条件,则显示以下界面

学生输入正确的学号和密码后,系统会跳入主界面,如图所示

(2)学生信息保存在随机访问文件data.dat文件中,该文件与可执行文件位于同一文件夹中。

运行程序,显示图1所示界面,自动列出数据文件data.dat中保存的所有学生信息,每个学生占一行。

程序使用了MSFlexGrid表格控件进行信息的组织和显示。

用户一旦修改添加了学生信息会保存到data.txt文件中。

 

如果启动时程序为在当前目录中找到data.dat文件,则显示没有数据行的空表,允许用户添加学生信息并保存为data.dat文件。

(2)使用鼠标单击表格的某一单元格,则该格会突出显示,所在行为当前行。

单击工具栏上的“插入”按钮在当前行位置上插入一个新空行,单击“追加”按钮会在表格最后添加一个空行。

使用“删除”按钮合一删除当前空行。

如下图所示:

 

 

(3)无论是空格还是已有数据的格,都可以对其中的数据进行直接编辑,对于学号、姓名和高考分数三列数据使用文本框进行编辑;对于出生日期使用DTPicker控件进行编辑;对于性别、民族、院系、专业和省份等五列数据使用组合框控件编辑。

例如,下图所示:

 

对数据进行编辑之后,单击“保存”按钮将编辑后的结果保存到data.dat文件中。

(4)选择“查询”按钮,弹出图所示的“查询”对话框。

在“查询”对话框中可以组合多种文件夹来查询感兴的数据。

如图所示,选择“性别”和“院系”并在性别中选择“男”在院系中选择“机械工程学院”,表示查找所有机械工程学院男学生的信息。

按“确定”按钮返回主窗口,所有满足条件的数据行一红色背景显示。

 

 

(5)在“查询”对话框中如图所示未选中的数据列表示该数据不加限制,该项后面用于输入详细信息的文本框和组合框是无效的。

“学号”和“姓名”中可以输入完整的学号和姓名,也可以输入部分的学号和姓名。

连续使用“查询”功能时,后一次的查询不会清除前一次查询的结果,二者会同时突出显示。

如果在查询对话框中不指定任何条件会选择所有的数据行,如果单击了查询对话框中的“取消”按钮会取消所有数据行的突出显示。

(6)如果用户对数据进行了修改,关闭程序是弹出如图所示的消息框加以提示.

 

二、设计思路与总体方案

 

2.1标准模块Module1

一、因为在整个过程中都涉及到学生信息的编辑,所以对于学生信息定义成全局级的自定义数据类型。

同时民族、院系、专业、省份都是需要读入的,所以定义为动态数组。

PublicTypeStudentInfo

numberAsString*8

NameAsString*8

SexAsBoolean

BirthAsDate

NationAsByte

facultyAsByte

subjectAsByte

ProvinceAsByte

ScoreAsSingle

EndType

PublicnumAsInteger

Publicstudent()AsStudentInfo

PublicModifiedAsBoolean

PublicEditModeAsBoolean

Publicfaculty()AsString

PublicProvince()AsString

PublicNation()AsString

Publicsubject()AsString

PublicconArr(9)AsControl

另外由于保存过程中涉及到文件是否被修改,所以应该定义一个逻辑型变量Modified来标榜数据是否被修改,同时根据要求过程涉及到是否可以编辑,所以定义全局的逻辑型变量EditMode来标榜是否可以编辑。

定义了一系列的动态数组,需要将其重新定义,将文件中的民族,专业、院系、省份的具体内容读入动态数组中,同时在启动程序时需要加载数据,表格要显示学生信息,而关闭时需要保存数据,所以编写了OpenData、SaveData两个全局过程方便调用。

并且采用读随机文件的方式进行文件的读写,根据上学期所学知识,随机文件的特点使得使用自定义类型对其进行操作是非常方便的。

PublicSubOpenData()

DimiAsInteger

DimstuAsStudentInfo

num=0

Erasestudent

IfDir(App.Path&"\data.dat")=""Then

ExitSub

EndIf

OpenApp.Path&"\data.dat"ForRandomAs1Len=Len(stu)

num=LOF

(1)/Len(stu)

Fori=1Tonum

ReDimPreservestudent(i)

Get#1,,student(i)

Next

Close#1

Modified=False

EndSub

PublicSubSaveData()

DimiAsInteger

DimstuAsStudentInfo

IfDir(App.Path&"\data.dat")<>""Then

KillApp.Path&"\data.dat"

EndIf

OpenApp.Path&"\data.dat"ForRandomAs1Len=Len(stu)

Fori=1Tonum

Put#1,,student(i)

Next

Close#1

Modified=False

EndSub

PublicSubOpenInfo()

DimiAsInteger

DimnAsInteger

IfDir(App.Path&"\院系.txt")<>""Then

i=0

OpenApp.Path&"\院系.txt"ForInputAs1

DoWhileNotEOF

(1)

i=i+1

ReDimPreservefaculty(i)

Input#1,n,faculty(i)

Loop

Close

EndIf

IfDir(App.Path&"\民族.txt")<>""Then

i=0

OpenApp.Path&"\民族.txt"ForInputAs1

DoWhileNotEOF

(1)

i=i+1

ReDimPreserveNation(i)

Input#1,n,Nation(i)

Loop

Close

EndIf

IfDir(App.Path&"\省份.txt")<>""Then

i=0

OpenApp.Path&"\省份.txt"ForInputAs1

DoWhileNotEOF

(1)

i=i+1

ReDimPreserveProvince(i)

Input#1,n,Province(i)

Loop

Close

EndIf

IfDir(App.Path&"\专业.txt")<>""Then

i=0

OpenApp.Path&"\专业.txt"ForInputAs1

DoWhileNotEOF

(1)

i=i+1

ReDimPreservesubject(i)

Input#1,n,subject(i)

Loop

Close

EndIf

EndSub

2.2窗体模块frmlogin

由于本窗体为自加窗体,visuaibasic程序中添加窗体中选择登陆窗体,microsoft已提供部分代码

OptionExplicit

PublicLoginSucceededAsBoolean

PrivateSubcmdCancel_Click()

LoginSucceeded=False

Me.Hide

EndSub

PrivateSubcmdOK_Click()

IfIsNumeric(txtUserName.Text)=TrueAndLen(txtUserName.Text)=10Then

IftxtPassword=txtUserName.TextThen

LoginSucceeded=True

Me.Hide

frmstudent.Show

Else

MsgBox"无效的密码,请重试!

",,"登录"

txtPassword.SetFocus

SendKeys"{Home}+{End}"

EndIf

Else

MsgBox"对不起,你不是本校学生!

",33,"错误"

EndIf

EndSub

2.3窗体主模块frmstudent

一.该窗体模块是本程序的主体,最上方是5个命令按钮控件,中间是MSFlexGrid控件,最下方是协助编辑的三个文本框控件,一个DTPicker控件,5个下拉式组合框控件(根据提供的效果图进行设计)。

下面是编辑窗体中除了5个命令按钮控件以外的主要程序的编写思路:

1.打开数据文件

2.加载显示信息的表格(包括设定表格的位置大小)

3.用表格显示数据文件中的信息

4.为各编辑控件赋值,同时因为控件较多,为了方便在各事件过程中对其进行编辑,使用对象型数组得到相应的控件

5.因为MSFlexGrid控件只能显示数据,并不支持用户直接进行编辑,编辑控件要编程才能实现。

根据《课程设计》中介绍的方法,编辑MSFlexGrid控件的EnterCell和LeaveCell事件,使用户可以对表格中数据进行编辑。

6.由于一些事件过程不仅在一个事件中需要用到,在命令按钮控件等所表示的功能中也会用到所以对其进行单独编写,方便调用。

另外因为一些功能需要编写的代码太长,对其单独编写,然后调用,我认为可以使程序更有调理,结构更优。

所以我对ShowAll、UpdateCell、ClearEdit、GetNew(分别用于展示信息,将编辑控件中的内容赋给单元格、清除所编辑的内容,再添加和插入过程中使用编辑控件得到新的值)

7.对窗体关闭时的事件进行编辑

8.在结束时涉及到当表格里的数据被更改时需不需要保存的问题,所以对于编辑控件的change事件中,要加入modified值的判断

9.以下是我编写的代码的展示:

PrivateSubcbosex_Click()

Modified=True

EndSub

PrivateSubcbonation_Click()

Modified=True

EndSub

PrivateSubcbofaculty_Click()

Modified=True

EndSub

PrivateSubcbosubject_Click()

Modified=True

EndSub

PrivateSubcboprovince_Click()

Modified=True

EndSub

PrivateSubDTPbirth_Change()

Modified=True

EndSub

PrivateSubForm_Load()

DimiAsInteger

CallOpenData

CallOpenInfo

MSFstudent.Rows=num+1

CallShowAll

EditMode=True

IfMSFstudent.Rows>1AndMSFstudent.Cols>1Then

txtnumber.Text=MSFstudent.TextMatrix(1,1)

EndIf

SetconArr

(1)=txtnumber

SetconArr

(2)=txtname

SetconArr(9)=txtscore

SetconArr(3)=DTPbirth

SetconArr(4)=cbosex

SetconArr(5)=cbonation

SetconArr(6)=cbofaculty

SetconArr(7)=cbosubject

SetconArr(8)=cboprovince

conArr(4).AddItem"男"

conArr(4).AddItem"女"

Fori=1ToUBound(Nation)

conArr(5).AddItemNation(i)

Next

Fori=1ToUBound(faculty)

conArr(6).AddItemfaculty(i)

Next

Fori=1ToUBound(subject)

conArr(7).AddItemsubject(i)

Next

Fori=1ToUBound(Province)

conArr(8).AddItemProvince(i)

Next

Modified=False

EndSub

 

PrivateSubfrom_Resize()

MSFstudent.Height=Me.ScaleHeight-MSFstudent.Top

MSFstudent.Width=Me.ScaleWidth

EndSub

 

PrivateSubform_Unload(CancelAsInteger)

DimiAsInteger

IfModifiedThen

i=MsgBox("数据已被编辑,退出前是否保存?

",vbExclamation+vbYesNoCancel)

SelectCasei

CasevbYes

CallSaveData

CasevbCancel

Cancel=1

EndSelect

EndIf

EndSub

PrivateSubMSFstudent_EnterCell()

DimiAsInteger

IfNotEditModeThenExitSub

IfMSFstudent.MouseCol=0OrMSFstudent.MouseRow=0Then

ExitSub

EndIf

SelectCaseMSFstudent.col

Case4To8

WithconArr(MSFstudent.col)

.Top=MSFstudent.Top+MSFstudent.CellTop

.Left=MSFstudent.Left+MSFstudent.CellLeft

.Width=MSFstudent.CellWidth

.Visible=True

.SetFocus

SelectCaseMSFstudent.col

Case4

Ifstudent(MSFstudent.row).SexThen

.ListIndex=0

Else

.ListIndex=1

EndIf

IfTrim(MSFstudent.TextMatrix(MSFstudent.row,MSFstudent.col))=""Then.ListIndex=-1

Case5

.ListIndex=student(MSFstudent.row).Nation-1

Case6

.ListIndex=student(MSFstudent.row).faculty-1

Case7

.ListIndex=student(MSFstudent.row).subject-1

Case8

.ListIndex=student(MSFstudent.row).Province-1

EndSelect

EndWith

Case3

WithconArr(3)

.Top=MSFstudent.Top+MSFstudent.CellTop

.Left=MSFstudent.Left+MSFstudent.CellLeft

.Width=MSFstudent.CellWidth

.Height=MSFstudent.CellHeight

Ifstudent(MSFstudent.row).Birth=#12:

00:

00AM#Then

.Value=Date

Else

.Value=student(MSFstudent.row).Birth

EndIf

.Visible=True

.SetFocus

EndWith

Case1,2,9

WithconArr(MSFstudent.col)

.Top=MSFstudent.Top+MSFstudent.CellTop

.Left=MSFstudent.Left+MSFstudent.CellLeft

.Width=MSFstudent.CellWidth

.Height=MSFstudent.CellHeight

.Text=MSFstudent.Text

.Visible=True

.SetFocus

EndWith

EndSelect

EndSub

PrivateSubMSFstudent_LeaveCell()

IfNotEditModeThenExitSub

CallUpdateCell(MSFstudent.row,MSFstudent.col)

CallClearEdit

EndSub

PrivateSubShowAll()

DimiAsInteger

Fori=1Tonum

MSFstudent.TextMatrix(i,0)=i

MSFstudent.TextMatrix(i,1)=student(i).number

MSFstudent.TextMatrix(i,2)=student(i).Name

Ifstudent(i).Birth=#12:

00:

00AM#Then

MSFstudent.TextMatrix(i,3)=""

Else

MSFstudent.TextMatrix(i,3)=student(i).Birth

EndIf

Ifstudent(i).SexThen

MSFstudent.TextMatrix(i,4)="男"

Else

MSFstudent.TextMatrix(i,4)="女"

EndIf

Ifstudent(i).Nation>0Then

MSFstudent.TextMatrix(i,5)=Nation(student(i).Nation)

Else

MSFstudent.TextMatrix(i,5)=""

EndIf

Ifstudent(i).faculty>0Then

MSFstudent.TextMatrix(i,6)=faculty(student(i).faculty)

Else

MSFstudent.TextMatrix(i,6)=""

EndIf

Ifstudent(i).subject>0Then

MSFstudent.TextMatrix(i,7)=subject(student(i).subject)

Else

MSFstudent.TextMatrix(i,7)=""

EndIf

Ifstudent(i).Province>0Then

MSFstudent.TextMatrix(i,8)=Province(student(i).Province)

Else

MSFstudent.TextMatrix(i,8)=""

EndIf

MSFstudent.TextMatrix(i,9)=student(i).Score

Next

EndSub

PrivateSubExitEdit()

EditMode=False

CallUpdateCell(MSFstud

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1