MicrosoftCommonDialogControl6.0(SP3)、MicrosoftFlexGridControl6.0、MicrosoftWindowsCommonControls6.0(SP4)和MicrosoftWindowsCommonControls-26.0五项。
3.2模块设计
添加两个模块module1和module2,在module1中添加如下代码
OptionExplicit
GlobalconAsNewADODB.Connection
GlobalrsAsNewADODB.Recordset
GlobalclassidAsString,stuidAsString
GlobalLoginUserAsString,LoginPowerAsString
LoginUser记录当前登陆用户的用户名,LoginPower记录当前登陆用户的权限
DimUseridAsString,UserpwdAsString,UsernameAsString,UserpowerAsString
DimsqlstrAsString
SubMain()
IfApp.PrevInstance=TrueThen
MsgBox"注意程序已经运行,不能再次装载!",vbOKOnly
ExitSub
Else
Con.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&App.Path+"\student.mdb"
Frmlogin.Show
EndIf
EndSub
在module2中添加代码(MD5算法)
详细代码见程序中module2.bas
3.3用户界面实现
3.3.1登陆界面(frmlogin)
因为本系统是按学籍管理的思想设计的,故而登陆部分主要完成密码校验、确定管理员等功能,对于密码本系统采用的是MD5算法。这里附上本程序的登陆界面,见图3.1。
图3.1用户登陆界面
在代码窗口的"通用"部分,定义一个模块级的公共变量loginno用来记录当前密码输入错误的次数
DimloginnoAsInteger
在Form的Load事件中,将txtuser设置为焦点,初始化loginno。
PrivateSubForm_Load()
loginno=0
Me.Show
txtuser.SetFocus
EndSub
这里将"确定"和"取消"两个按钮作为一个按钮数组cmdOkCancel:确定按钮的index属性为0,取消按钮的index属性为1。
利用SQL语句,在数据库中查询,如果查到相应的记录,则调用Case0事件,用户的登陆获得通过,此时可以退出登陆窗口,并进入MDI主窗口,同时将用户类型和用户名分别传递到MDI主窗口和frmmanage中;如果没有相应的记录,则给出提示错误信息,同时将用户输入错误密码次数增加1,如果错误超过3次,则退出整个系统;若次数还没有超过3次,则提示用户重新输入。
根据以上的设计,cmdOkCancel的Click事件的代码如下:
PrivateSubcmdOkCancel_Click(IndexAsInteger)
SelectCaseIndex
Case0
......
Userid=Trim(txtuser.Text)
Userpwd=MD5(Trim(txtPassword.Text))
sqlstr="select*fromUserInfowhereUserID='"&Userid&"'"
rs.Opensqlstr,con,1,1
IfNotrs.EOFThen
Ifrs("UserPWD")<>UserpwdThen
'密码错误时
MsgBox"您输入的密码不正确!",vbQuestion
Me.Caption="请输入用户名和密码:"
loginno=loginno+1
'当错误的密码次数达到3次时,不能登陆,退出!
Ifloginno=3Then
MsgBox"对不起,您不能使用该系统!请与管理员联系。",vbInformation
UnloadMe
ExitSub
EndIf
......
Else
LoginUser=Userid'保存当前登陆用户名
LoginPower=rs.Fields(3)
'将当前登陆用户的权限保存到LoginPower中
UnloadMe
frmflash.Show
EndIf
Else
MsgBox"没有您输入的用户名!",32
......
EndIf
rs.Close:Setrs=Nothing
Case1
'退出整个程序
UnloadMe
EndSelect
EndSub
3.3.2MDI主窗口(frmmain)
本系统采取多文档界面(MultiDocumentInterface)。多文档界面是一种Windows用户界面标准。它有一个父窗口,在典型情况下,父窗口用来显示程序菜单以及包含子窗口。
在工程中添加一个MDI窗口,取名为"frmmain.frm",并为MDI窗体进行菜单和代码的设计,其运行界面如图3.2:
图3.2主界面
3.3.2.1菜单设计
MDI主窗体是整个系统的容器,为了方便用户的使用,应设计相应的菜单和代码。
3.3.2.2窗体代码设计
1.在代码窗口的通用部分,声明一个API函数用于打开帮助文件和调用Outlook发送邮件。
PrivateDeclareFunctionShellExecute&Lib"shell32.dll"Alias"ShellExecuteA"(ByValhwndAsLong,ByVallpOperationAsString,ByVallpFileAsString,ByVallpParametersAsString,ByVallpDirectoryAsString,ByValnShowCmdAsLong)
2.判断用户权限
如果登陆的为普通用户类型的用户,则用户不能使用"用户管理"这一功能,而对于管理员类型的用户,则没有此限制。所以在MDIForm的Load事件中需要判断用户类型。
PrivateSubMDIForm_Load()
StatusBar.Panels(2).Text="当前操作员:"&LoginUser&""&LoginPower&""
IfLoginPower="普通用户"Then
filemenu11.Enabled=False
Toolbar1.Buttons.Item(5).Enabled=False
EndIf
EndSub
3.Form的QueryUnload事件
当用户要退出MDI窗体时,需要在QueryUnload事件中询问用户是否真的要退出本系统;如果用户不要退出,则将Cancel置为1,取消整个退出过程。
PrivateSubMDIForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)
IfMsgBox("确定要退出学生档案管理系统吗?是/否",
vbYesNo+vbQuestion+vbDefaultButton1)=vbNoThen
Cancel=1
EndIf
EndSub
QueryUnload和Unload事件
当一个子窗体或一个Form对象关闭时,在那个窗体中的QueryUnload事件先于该窗体的Unload事件发生,Unload事件在Terminate事件之前发生。
当一个应用程序关闭时,可使用QueryUnload或Unload事件过程将Cancel属性设置为True来阻止关闭过程。但是,QueryUnload事件是在任一个卸载之前在所有窗体中发生,而Unload是在每个窗体卸载时发生。
在这两个事件中,均可将Cancel设置为任何非零的值来防止窗体被删除。但Unload不能阻止其他事件,诸如从MicrosoftWindows操作环境中退出等;而QueryUnload事件则可以阻止从Windows中的退出。有介于此,通常来说都是在QueryUnload中询问用户是否要退出当前窗体。
4."重新登陆"子菜单的代码
当单击了"重新登陆"或者按下了"F2"键时,将会给出提示,如果用户在提示框中按下了"确定"按钮,则退出整个MDI主窗体,并显示登陆窗体。
PrivateSubfilemenu15_Click()
IfMsgBox("若重新登陆,所有窗体都将关闭!是否重新登陆?",vbYesNo+vbQuestion,"重新登陆")=vbYesThen
UnloadMe
Frmlogin.Show
EndIf
EndSub
5."帮助主题"子菜单的代码
调用WindowsAPI函数,打开help.chm帮助文件。
PrivateSubfilemenu21_Click()
ShellExecute0,"open",App.Path&"\help.chm","","",1
EndSub
6."给我发邮件"子菜单的代码
如果用户单击了"给我发邮件"子菜单,则会调用API函数,调用Outlook。
PrivateSubfilemenu22_Click()
ShellExecuteMe.hwnd,"open","mailto:datou158@etang.com","",App.Path,1
EndSub
7.当用户单击查询学生资料菜单项或者按下F3键时,将会出现"查找学生"窗体,供用户查找满足特定要求的学生信息。
PrivateSubfilemenu45_Click()
'查找学生
frmstusearch.Show1
EndSub
3.3.3用户管理窗体(frmmanage)
向项目中添加窗体,并命名为frmmanage.frm。窗体的控件设计如图3.3所示
图3.3用户管理界面
如果登陆的用户类型是管理员,用户管理一项是可用的,当单击该子菜单时,将会出现用户管理窗口,管理员可以对系统用户进行添加和删除操作。
3.3.3.1窗体代码设计
1.定义一个整型变量DelNO用来存储当前系统用户的数目,当DelNO<=1时提示用户不能再删除用户。在该窗体的通用部分写如下代码:
DimDelNOAsInteger
2.窗体加载时,初始化Listview用以显示系统用户列表,代码如下
PrivateSubForm_Load()
'初始化ListView
DimclmXAsColumnHeader
SetclmX=ListView.ColumnHeaders.Add(,,"用户名",ListView.Width/3)
SetclmX=ListView.ColumnHeaders.Add(,,"密码",ListView.Width/6,2)
SetclmX=ListView.ColumnHeaders.Add(,,"姓名",ListView.Width/4,2)
SetclmX=ListView.ColumnHeaders.Add(,,"用户权限",ListView.Width/4,2)
Combo1.Clear
Combo1.AddItem"普通用户"
Combo1.AddItem"超级用户"
Combo1.ListIndex=0
LoadOperator
EndSub
其中调用了LoadOperator函数,该函数用来显示和刷新Listview中的数据
PrivateSubLoadOperator()
ResumeNext
DimListitAsListItem
ListView.ListItems.Clear
ListView.LabelEdit=lvwAuto
ListView.View=3
DimefAsNewADODB.Recordset
sqlstr="select*fromUserInfo"
ef.Opensqlstr,con,1,1
DelNO=ef.RecordCount
DoWhileNotef.EOF
SetListit=ListView.ListItems.Add(,,ef.Fields("UserID"))
Listit.SubItems(1)="***"
隐藏用户的密码,用***来替代。
Listit.SubItems(2)=ef("UserName")
Listit.SubItems(3)=ef("UserPower")
ef.MoveNext
Loop
Setef=Nothing
EndSub
3.添加用户
在Textbox中输入了相应的数据以后,按添加按钮则调用该按钮的Click事件,代码如下
当单击"添加"按钮时,首先检查输入的用户名和密码是否为空,代码如下:
PrivateSubCommand4_Click()
IfTrim(Text1.Text)=""Then
MsgBox"登陆用户名不允许为空!",vbOKOnly+48,"提示:"
Text1.SetFocus
ExitSub
EndIf
IfInStr(1,Trim(Text1.Text),"'",vbTextCompare)Then
MsgBox"用户姓名中有特殊字符"+"<'>,请删除。",vbOKOnly+48,"提示:"
Text1.SetFocus
ExitSub
EndIf
IfTrim(Text2.Text)=""Then
MsgBox"密码不
上一篇:
学生学籍管理系统VB(论文和程序)
下一篇:
试析影响公路路面平整度的因素及应采取的施工措施