数据库课程设计网吧管理系统.docx
《数据库课程设计网吧管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计网吧管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
数据库课程设计网吧管理系统
设计题目
网吧管理系统
设计技术
参数
1.题目要达到的目标:
完成系统的登陆、数据的插入删除修改统计等基本操作。
2.数据库:
采用关系数据库ACCESS2003/SQLSERVER2000。
3.所使用的语言、工具:
VB6.0+ACCESS2003+WINDOWSXP。
4.所采用的技术、系统结构:
ADO数据库联接技术,系统结构为C/S结构。
设
计
要
求
1.上机前预先把所有的源程序编写好。
2.上机时不得迟到,不得缺席,爱护设备,认真调试程序。
3.仔细查阅相关资料,认真完成思考题。
4.按要求书写设计任务书,并按要求按版打印,不得雷同。
工作量
一周
工
作
计
划
周一听取教师布置设计的任务及要求。
周二学生查阅相关资料,进行数据库设计。
周三至周五:
详细设计与界面设计。
周一至周四程序设计与上机,调试源程序。
周五书写课程设计任务书。
参考资料
《数据库系统概论》
《数据库系统概论实验指导书》自编
《数据库系统概论课程设计大纲》等自编
指导教师评语
该生在数据库系统概论课程设计期间:
上机时不迟到,不缺席,爱护设备,认真调试程序。
仔细查阅相关资料,认真完成作业。
听从指导教师安排。
在设计与实现过程中,能使设计的系统达到预期设计要求,功能合理,流程清楚,语句条理通顺。
按要求书写设计任务书,其论文格式规范,图表清晰合理,资料详实。
系统界面友好,程序运行基本正常,功能完备。
说明:
此表一式四份,学生、指导教师、教研室、系部各一份。
可加附页。
2008年7月4
目录
第一章概述2
第二章问题定义2
第三章需求分析4
第四章数据库设计7
第五章界面设计9
第六章代码11
第一章概述
随着上个世纪九十年代计算机网络的高速发展,人类进入到了网络化、信息化的时代。
而网络的发展带动了一种新兴产业——网吧行业。
从上世纪九十年代至今,网吧经历了前所未有的发展。
从小规模到大规模,从单一经营到连锁经营,从简单提供上网服务演变到休息、娱乐场所。
这就带来了新的问题——网吧管理。
目前,网吧的人工管理已经不能适应网吧的高速发展,成为阻碍网吧发展的桎梏。
因此开发一套完善的网吧管理系统成为网吧发展的首要任务。
本系统主要负责服务器子系统的设计。
采用功能强大的VisualBasic6.0作为开发工具,MicrosoftAccess作为数据库平台。
本系统采用C/S结构。
它将一个应用系统分成两大部分,由多台计算机分别执行,协同完成整个系统的应用,从而达到系统中软、硬件资源最大限度的利用。
因此,对于一个相对专用、独立的系统,它是—个较好的系统建立方法。
因此,本设计采用这一模式。
本系统从操作简便、界面友好、灵活、实用、安全的要求出发,实现较为简单。
本系统设计功能较为齐全,适合于中小型网吧的管理。
第二章问题定义
网吧管理人员:
系统的录入人员,主要指管理各种档案的工作人员,需要通过密码才能进入。
他们拥有对系统数据的录入、修改、查询、删除等操作权限。
但不可以更改系统密码。
上机人员:
权限最低的登入人员,当上网时间到了之后就会被提示。
第三章需求分析
一、主要功能:
完成网吧管理人员对上机人员的调整,对机器的分配,以及纪录用户的上机时间,并对整个网吧的系统进行管理。
因此,本系统应该主要完成和实现如下功能:
初始化系统数据;
录入登陆人员的基本信息数据;
上机时间,下机时间的基本设定;
查询机器的剩余时间;
计算上机的费用;
人员信息:
在该项内容中将包括的数据库项有用户名,用户密码,密码确认,开户时间,开户金额,开户总机时,剩余时间,上机次数,备注。
会员信息:
用户名,用户密码,密码确认,开户时间,开户金额,折扣,总时间,上机次数,备注。
机器编号:
ID,IP。
二、数据流图(DFD):
三、数据字典(DD):
ClientIP=ID+IP
History=ID+用户名+机器号+开始时间+结束时间+应付费
Member=用户名+用户密码+密码确认+开户时间+开户金额+折扣+总时间+上机次数+备注
四、程序流程图:
五、功能结构图:
网吧管理系统模块
时间设定模块
第四章数据库设计
二、逻辑设计:
下面列出几个主要的数据库表设计:
4.1ClientIP表:
序号
中文名
字段名
类型
备注
0
ID
3
字符型
主键
1
IP
10
文本archar
4.2history表:
序号
中文名
字段名
类型
备注
0
ID
2
字符型
主键
1
userID
(10,2)
文本型
2
pcid
2
数字
3
starttime
日期时间
4
endtime
日期时间
5
pay
2
货币
4.3member表:
序号
中文名
字段名
类型
备注
0
userID
10
文本符型
主键
1
Pwd
10
文本符型
2
ChkPwd
10
文本类型
3
DataTime
日期时间
4
Balance
2
数字
5
Discount
2
数字
6
Totaltime
2
数字
7
CountNum
2
数字
9
Memo
备注
4.3member1表:
序号
中文名
字段名
类型
备注
0
userID
10
文本符型
主键
1
Pwd
10
文本符型
2
ChkPwd
10
文本类型
3
DataTime
日期时间
4
Balance
2
数字
5
Discount
2
数字
6
Totaltime
2
数字
7
CountNum
2
数字
9
Memo
备注
4.4online表:
序号
中文名
字段名
类型
备注
0
ID
10
字符型
主键
1
ClientID
(10,2)
字符型archar
2
LoginTime
时间日期
3
TimeOut
10
字符型
4.4online表:
序号
中文名
字段名
类型
备注
0
ID
10
字符型
主键
1
Mstate
(是,否)
判断
2
Jstate
文本
3
stime
日期
4
Endtime
日期
5
Time
10
数字
6
Money
货币
7
Ltime
10
数字
8
Userid
文本
9
uprice
货币
三、物理设计
写索引是如何设计的:
写索引是如何设计的:
镞索引是行的物理顺序和索引的顺序是一致的。
页级,低层等索引的各个级别上都包含实际的数据页。
一个表只能是有一个镞索引。
由于update,delete语句要求相对多一些的读操作,因此镞索引常常能加速这样的操作。
在至少有一个索引的表中,你应该有一个镞索引
第五章界面设计
一、主界面
单击主界面上的各个按钮,可以进入相应的界面中。
二、系统设置
对参数进行设置
功能介绍,相关控件;
三、查询上机时间等信息
功能介绍,相关控件;
第六章代码与注释
一、窗体1代码
OptionExplicit
PrivateSubcmdexit_Click()
UnloadMe
EndSub
PrivateSubcmdcounter_Click()
DimcnAsADODB.Connection
DimiAsInteger
DimrstAsADODB.Recordset
DimstrsqlAsString
Setcn=NewConnection
Setrst=NewADODB.Recordset
cn.Openconcn
'Íùhistory±íÖÐÌí¼Ó¼Ç¼
frmManager.Adodc1.Recordset!
endtime=Now()
txtmoney.Text=frmManager.Adodc1.Recordset!
Time*frmManager.Adodc1.Recordset!
uprice
'×¢Òâʱ¼ä×ֶεÄÌí¼Ó·½·¨£¬#
strsql="insertintohistory(pcid,starttime,endtime,pay)values("&frmManager.Adodc1.Recordset!
Mid&",#"&frmManager.Adodc1.Recordset!
stime&"#,#"&frmManager.Adodc1.Recordset!
endtime&"#,"&txtmoney.Text&")"
Debug.Printstrsql
cn.Executestrsql
'Êշѳɹ¦£¬Êý¾Ý³õʼ»¯
WithfrmManager.Adodc1
.Recordset!
mstate=0
.Recordset!
[stime]=0
.Recordset!
[jstate]="δ¼Æ·Ñ"
.Recordset!
[Money]=0
.Recordset!
[endtime]=0
.Recordset!
[Time]=0
.Recordset!
[lTime]=0
.Recordset!
[userID]=""
OnErrorGoToerror_proc
.Recordset.Save
EndWith
frmManager.Refresh'ʹÊý¾Ýͬ²½ÏÔʾ
MsgBox"Êշѳɹ¦"
UnloadMe
ExitSub
error_proc:
MsgBoxErr.Description,vbCritical,"ÖØÊÔ"
UnloadMe
EndSub
PrivateSubcmdvipexit_Click()
UnloadMe
EndSub
PrivateSubcmdvipcounter_Click()
DimGdiscountAsDouble
DimcnAsADODB.Connection
DimiAsInteger
DimrstAsADODB.Recordset
DimstrsqlAsString
DimupriceAsDouble
Setcn=NewConnection
Setrst=NewADODB.Recordset
cn.Openconcn
frmManager.Adodc1.Recordset!
endtime=Now()
Gdiscount=frmMember.datPrimaryRS.Recordset!
[DISCOUNT]'»áÔ±µÄÕË»§ÉϵĽð¶î
txtvipmoney.Text=frmManager.Adodc1.Recordset!
Time*frmManager.Adodc1.Recordset!
[uprice]*Gdiscount
strsql="insertintohistory(pcid,starttime,endtime,pay,userid)values("&frmManager.Adodc1.Recordset!
[Mid]&",#"&frmManager.Adodc1.Recordset!
stime&"#,#"&frmManager.Adodc1.Recordset!
endtime&"#,"&txtvipmoney.Text&","""&frmManager.Adodc1.Recordset!
userID&""")"
cn.Executestrsql
'¸üÐÂMEMBER±í
strsql="updatemembersetcountNum=countNum+1,TOTALTIME=TOTALTIME+"&frmManager.Adodc1.Recordset!
Time&",balance=balance-"&CSng(txtvipmoney.Text)&"WHEREuserid="""&frmManager.Adodc1.Recordset!
[userID]&""""
cn.Executestrsql
'²é³öÓû§Óà¶î
strsql="selectbalancefrommemberwhereuserid="""&frmManager.Adodc1.Recordset!
[userID]&""""
rst.Openstrsql,cn,adOpenDynamic,adLockOptimistic
Ifrst.BOFAndrst.EOFThen
MsgBox"SystemError5"
ExitSub
EndIf
uprice=rst("balance")
Ifuprice<0Then
MsgBox"Óû§"&frmManager.Adodc1.Recordset!
[userID]&"ÒѾǷ·Ñ"&(-uprice)&"Ôª"
EndIf
strsql="updatepcsetmstate=0,stime=0,jstate=""δ¼Æ·Ñ"",[money]=0,endtime=0,ltime=0,[time]=0,userid=""""wheremid="&frmManager.Adodc1.Recordset!
[Mid]
OnErrorGoToerror_proc
cn.Executestrsql
rst.Close
Setrst=Nothing
cn.Close
Setcn=Nothing
frmManager.Refresh'ʹÊý¾Ýͬ²½ÏÔʾ
MsgBox"»áÔ±Êշѳɹ¦"
UnloadMe
ExitSub
error_proc:
MsgBoxErr.Description,vbCritical,"ÖØÊÔ"
UnloadMe
EndSub
PrivateSubForm_Load()
'´ÓÊý¾Ý¿âÖлñÈ¡ÉÏÍøʱ¼ä
IfIsNull(frmManager.Adodc1.Recordset!
[Time])=FalseThen
'×¢Òâ²»ÄÜÓÃÕâÖÖÐÎʽ¸³Öµtxttime.Text=txtviptime.Text=frmManager.Adodc1.Recordset!
[Time]&""
'ÏÔʾÉÏÍøÓ¦¸¶½ð¶î
If(frmManager.Adodc1.Recordset!
[userID]="")Or(IsNull(frmManager.Adodc1.Recordset!
[userID]))Then
frmCounter.SSTab1.Tab=0
txttime.Text=frmManager.Adodc1.Recordset!
[Time]&""
txtmoney.Text=frmManager.Adodc1.Recordset!
Time*frmManager.Adodc1.Recordset!
uprice&""
frmCounter.cmdvipcounter.Visible=False
Else
frmCounter.SSTab1.Tab=1
txtviptime.Text=frmManager.Adodc1.Recordset!
[Time]&""
txtvipmoney.Text=frmManager.Adodc1.Recordset!
Time*frmManager.Adodc1.Recordset!
uprice&""
frmCounter.cmdcounter.Visible=False
EndIf
Else
MsgBox"ÉÏÍøʱ¼äΪÁã"
EndIf
EndSub
二、窗体2代码
OptionExplicit
PrivateSubForm_Load()
datPrimaryRS.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&App.Path&"\mechanicID.mdb;PersistSecurityInfo=False"
datPrimaryRS.CommandType=adCmdTable
datPrimaryRS.RecordSource="history"
datPrimaryRS.Refresh
EndSub
PrivateSubForm_Resize()
OnErrorResumeNext
'µ±´°Ìåµ÷Õûʱ»áµ÷ÕûÍø¸ñ
grdDataGrid.Height=Me.ScaleHeight-datPrimaryRS.Height-30-picButtons.Height
EndSub
PrivateSubForm_Unload(CancelAsInteger)
Screen.MousePointer=vbDefault
EndSub
PrivateSubdatPrimaryRS_Error(ByValErrorNumberAsLong,DescriptionAsString,ByValScodeAsLong,ByValSourceAsString,ByValHelpFileAsString,ByValHelpContextAsLong,fCancelDisplayAsBoolean)
'´íÎó´¦Àí³ÌÐò´úÂëÖÃÓÚ´Ë´¦
'ÏëÒªºöÂÔ´íÎó£¬×¢Ê͵ôÏÂÒ»ÐÐ
'ÏëÒª²¶»ñËüÃÇ£¬ÔÚ´ËÌí¼Ó´úÂëÒÔ´¦ÀíËüÃÇ
MsgBox"Dataerroreventhiterr:
"&Description
EndSub
PrivateSubcmdDelete_Click()
OnErrorGoToDeleteErr
WithdatPrimaryRS.Recordset
.Delete
.MoveNext
If.EOFThen.MoveLast
EndWith
ExitSub
DeleteErr:
MsgBoxErr.Description
EndSub
PrivateSubcmdClose_Click()
UnloadMe
EndSub
三、窗体3代码
OptionExplicit
PrivateSubcmdok_Click()
IftxtHour.Text=""Then
MsgBox"ÄãµÄʱ¼äÊäÈë²»ÄÜΪ¿Õ,ÇëÖØÊÔ!
",vbCritical
txtHour.Text=""
txtHour.SetFocus
Else
frmManager.Adodc1.Recordset!
mstate=1
frmManager.Adodc1.Recordset!
[lTime]=txtHour.Text
frmManager.Adodc1.Recordset!
[stime]=Now()
frmManager.Adodc1.Recordset!
[jstate]="¼Æ·ÑÖÐ"
frmManager.Adodc1.Recordset.Save
UnloadMe
EndIf
EndSub
PrivateSubcmdcancel_Click()
UnloadMe
EndSub
PrivateSubForm_Load()
'DimcnAsADODB.Connection
'DimrstAsADODB.Recordset
'Setcn=NewConnection
'Setrst=NewADODB.Recordset
'cn.Openconcn
EndSub
四、窗体4代码
OptionExplicit
PublicblnReceivedAsBoolean
PublicblnOnlineOKAsBoolean'ÅжÏÊÇ·ñÔÚÏß
PublicstrDataAsString
PrivateSubDataGrid1_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
'°´ÏÂÓÒ¼ü£¬µ¯³ö²Ëµ¥
IfButton=2ThenPopupMenumnupopup
EndSub
PrivateSubForm_Activate()
'Ò»¼¤»î¾ÍÕ¼ÆÁÄ»µÄÖмä
datagrid1.Left=(Me.ScaleWidth-datagrid1.Width)/2
EndSub
PrivateSubForm_Load()
'Êý¾ÝÁ¬½Ó³õʼ»¯
Adodc1.ConnectionString=concn
Adodc1.CommandType=adCmdTable
Adodc1.RecordSource="pc"
Adodc1.Refresh
CallDisableX(Me)'½ûÓùرմ°Ìå
DimcnAsADODB.Connection
DimrsAsADODB.Recordset
DimsqlAsString
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordse