当前位置:文档之家› 数据库课程设计网吧管理系统

数据库课程设计网吧管理系统

说明:此表一式四份,学生、指导教师、教研室、系部各一份。

可加附页。

2008年 7 月 4目录第一章概述 (3)随着上个世纪九十年代计算机网络的高速发展,人类进入到了网络化、信息化的时代。

而网络的发展带动了一种新兴产业——网吧行业。

从上世纪九十年代至今,网吧经历了前所未有的发展。

从小规模到大规模,从单一经营到连锁经营,从简单提供上网服务演变到休息、娱乐场所。

这就带来了新的问题——网吧管理。

目前,网吧的人工管理已经不能适应网吧的高速发展,成为阻碍网吧发展的桎梏。

因此开发一套完善的网吧管理系统成为网吧发展的首要任务。

本系统主要负责服务器子系统的设计。

采用功能强大的Visual Basic6.0作为开发工具,Microsoft Access作为数据库平台。

本系统采用C/S结构。

它将一个应用系统分成两大部分,由多台计算机分别执行,协同完成整个系统的应用,从而达到系统中软、硬件资源最大限度的利用。

因此,对于一个相对专用、独立的系统,它是—个较好的系统建立方法。

因此,本设计采用这一模式。

本系统从操作简便、界面友好、灵活、实用、安全的要求出发,实现较为简单。

本系统设计功能较为齐全,适合于中小型网吧的管理。

(3)第二章问题定义 (4)第三章需求分析 (5)第四章数据库设计 (8)第五章界面设计 (10)第六章代码与注释 (12)第一章概述随着上个世纪九十年代计算机网络的高速发展,人类进入到了网络化、信息化的时代。

而网络的发展带动了一种新兴产业——网吧行业。

从上世纪九十年代至今,网吧经历了前所未有的发展。

从小规模到大规模,从单一经营到连锁经营,从简单提供上网服务演变到休息、娱乐场所。

这就带来了新的问题——网吧管理。

目前,网吧的人工管理已经不能适应网吧的高速发展,成为阻碍网吧发展的桎梏。

因此开发一套完善的网吧管理系统成为网吧发展的首要任务。

本系统主要负责服务器子系统的设计。

采用功能强大的Visual Basic6.0作为开发工具,Microsoft Access作为数据库平台。

本系统采用C/S结构。

它将一个应用系统分成两大部分,由多台计算机分别执行,协同完成整个系统的应用,从而达到系统中软、硬件资源最大限度的利用。

因此,对于一个相对专用、独立的系统,它是—个较好的系统建立方法。

因此,本设计采用这一模式。

本系统从操作简便、界面友好、灵活、实用、安全的要求出发,实现较为简单。

本系统设计功能较为齐全,适合于中小型网吧的管理。

第二章问题定义网吧管理人员:系统的录入人员,主要指管理各种档案的工作人员,需要通过密码才能进入。

他们拥有对系统数据的录入、修改、查询、删除等操作权限。

但不可以更改系统密码。

上机人员:权限最低的登入人员,当上网时间到了之后就会被提示。

第三章需求分析一、主要功能:完成网吧管理人员对上机人员的调整,对机器的分配,以及纪录用户的上机时间,并对整个网吧的系统进行管理。

因此,本系统应该主要完成和实现如下功能:初始化系统数据;录入登陆人员的基本信息数据;上机时间,下机时间的基本设定;查询机器的剩余时间;计算上机的费用;人员信息:在该项内容中将包括的数据库项有用户名,用户密码,密码确认,开户时间,开户金额,开户总机时,剩余时间,上机次数,备注。

会员信息:用户名,用户密码,密码确认,开户时间,开户金额,折扣,总时间,上机次数,备注。

机器编号:ID,IP。

二、数据流图(DFD):三、数据字典(DD):ClientIP=ID+IPHistory=ID+用户名+机器号+开始时间+结束时间+应付费Member=用户名+用户密码+密码确认+开户时间+开户金额+折扣+总时间+上机次数+备注四、程序流程图:五、功能结构图:网吧管理系统模块时间设定模块第四章数据库设计二、逻辑设计:下面列出几个主要的数据库表设计:8 Userid 文本9 uprice 货币三、物理设计写索引是如何设计的:写索引是如何设计的:镞索引是行的物理顺序和索引的顺序是一致的。

页级,低层等索引的各个级别上都包含实际的数据页。

一个表只能是有一个镞索引。

由于update,delete 语句要求相对多一些的读操作,因此镞索引常常能加速这样的操作。

在至少有一个索引的表中,你应该有一个镞索引第五章界面设计一、主界面单击主界面上的各个按钮,可以进入相应的界面中。

二、系统设置对参数进行设置功能介绍,相关控件;三、查询上机时间等信息功能介绍,相关控件;第六章代码与注释一、窗体1代码Option ExplicitPrivate Sub cmdexit_Click()Unload MeEnd SubPrivate Sub cmdcounter_Click()Dim cn As ADODB.ConnectionDim i As IntegerDim rst As ADODB.RecordsetDim strsql As StringSet cn = New ConnectionSet rst = New ADODB.Recordsetcn.Open concn'Íù history ±íÖÐÌí¼Ó¼Ç¼frmManager.Adodc1.Recordset!endtime = Now()txtmoney.Text = frmManager.Adodc1.Recordset!Time * frmManager.Adodc1.Recordset!uprice'×¢Òâʱ¼ä×ֶεÄÌí¼Ó·½·¨£¬#strsql = "insert into history (pcid,starttime,endtime,pay) values (" & frmManager.Adodc1.Recordset!Mid & ",#" & frmManager.Adodc1.Recordset!stime & "#,#" & frmManager.Adodc1.Recordset!endtime & "#," & txtmoney.Text & ")"Debug.Print strsqlcn.Execute strsql' Êշѳɹ¦£¬Êý¾Ý³õʼ»¯With frmManager.Adodc1.Recordset!mstate = 0.Recordset![stime] = 0.Recordset![jstate] = "묒·Ñ".Recordset![Money] = 0.Recordset![endtime] = 0.Recordset![Time] = 0.Recordset![lTime] = 0.Recordset![userID] = ""On Error GoTo error_proc.Recordset.SaveEnd WithfrmManager.Refresh 'ʹÊý¾Ýͬ²½ÏÔʾMsgBox "Êշѳɹ¦"Unload MeExit Suberror_proc:MsgBox Err.Description, vbCritical, "ÖØÊÔ"Unload MeEnd SubPrivate Sub cmdvipexit_Click()Unload MeEnd SubPrivate Sub cmdvipcounter_Click()Dim Gdiscount As DoubleDim cn As ADODB.ConnectionDim i As IntegerDim rst As ADODB.RecordsetDim strsql As StringDim uprice As DoubleSet cn = New ConnectionSet rst = New ADODB.Recordsetcn.Open concnfrmManager.Adodc1.Recordset!endtime = Now()Gdiscount = frmMember.datPrimaryRS.Recordset![DISCOUNT] '»áÔ±µÄÕË»§ÉϵĽð¶îtxtvipmoney.Text = frmManager.Adodc1.Recordset!Time * frmManager.Adodc1.Recordset![uprice] * Gdiscountstrsql = "insert into history (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.Execute strsql'¸üÐÂMEMBER±ístrsql = "update member set countNum=countNum+1,TOTALTIME=TOTALTIME+" & frmManager.Adodc1.Recordset!Time & " , balance=balance-" & CSng(txtvipmoney.Text) & " WHERE userid=""" & frmManager.Adodc1.Recordset![userID] & """"cn.Execute strsql'²é³öÓû§Óà¶îstrsql = "select balance from member where userid=""" & frmManager.Adodc1.Recordset![userID] & """"rst.Open strsql, cn, adOpenDynamic, adLockOptimisticIf rst.BOF And rst.EOF ThenMsgBox "System Error5"Exit SubEnd Ifuprice = rst("balance")If uprice < 0 ThenMsgBox "Óû§" & frmManager.Adodc1.Recordset![userID] & "ÒѾ-Ç··Ñ" & (-uprice) & "Ôª"End Ifstrsql = "update pc set mstate=0,stime=0,jstate=""묒·Ñ"",[money]=0,endtime=0,ltime=0,[time]=0,userid="""" where mid=" & frmManager.Adodc1.Recordset![Mid]On Error GoTo error_proccn.Execute strsqlrst.CloseSet rst = Nothingcn.CloseSet cn = NothingfrmManager.Refresh 'ʹÊý¾Ýͬ²½ÏÔʾMsgBox "»áÔ±Êշѳɹ¦"Unload MeExit Suberror_proc:MsgBox Err.Description, vbCritical, "ÖØÊÔ"Unload MeEnd SubPrivate Sub Form_Load()'´ÓÊý¾Ý¿âÖлñÈ¡ÉÏÍøÊ±¼äIf IsNull(frmManager.Adodc1.Recordset![Time]) = False Then'×¢Òâ²»ÄÜÓÃÕâÖÖÐÎʽ¸³Öµtxttime.Text=txtviptime.Text = frmManager.Adodc1.Recordset![Time] & ""'ÏÔʾÉÏÍøÓ¦¸¶½ð¶îIf (frmManager.Adodc1.Recordset![userID] = "") Or (IsNull(frmManager.Adodc1.Recordset![userID])) ThenfrmCounter.SSTab1.Tab = 0txttime.Text = frmManager.Adodc1.Recordset![Time] & ""txtmoney.Text = frmManager.Adodc1.Recordset!Time * frmManager.Adodc1.Recordset!uprice & ""frmCounter.cmdvipcounter.Visible = FalseElsefrmCounter.SSTab1.Tab = 1txtviptime.Text = frmManager.Adodc1.Recordset![Time] & ""txtvipmoney.Text = frmManager.Adodc1.Recordset!Time * frmManager.Adodc1.Recordset!uprice& ""frmCounter.cmdcounter.Visible = FalseEnd IfElseMsgBox "ÉÏÍøÊ±¼äΪÁã"End IfEnd Sub二、窗体2代码Option ExplicitPrivate Sub Form_Load()datPrimaryRS.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\mechanicID.mdb;Persist Security Info=False"mandType = adCmdTabledatPrimaryRS.RecordSource = "history"datPrimaryRS.RefreshEnd SubPrivate Sub Form_Resize()On Error Resume Next'µ±´°Ìåµ÷Õûʱ»áµ÷ÕûÍø¸ñgrdDataGrid.Height = Me.ScaleHeight - datPrimaryRS.Height - 30 - picButtons.HeightEnd SubPrivate Sub Form_Unload(Cancel As Integer)Screen.MousePointer = vbDefaultEnd SubPrivate Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)'´íÎó´¦Àí³ÌÐò´úÂëÖÃÓÚ´Ë´¦'ÏëÒªºöÂÔ´íÎó£¬×¢Ê͵ôÏÂÒ»ÐÐ'ÏëÒª²¶»ñËüÃÇ£¬ÔÚ´ËÌí¼Ó´úÂëÒÔ´¦ÀíËüÃÇMsgBox "Data error event hit err:" & DescriptionEnd SubPrivate Sub cmdDelete_Click()On Error GoTo DeleteErrWith datPrimaryRS.Recordset.Delete.MoveNextIf .EOF Then .MoveLastEnd WithExit SubDeleteErr:MsgBox Err.DescriptionEnd SubPrivate Sub cmdClose_Click()Unload MeEnd Sub三、窗体3代码Option ExplicitPrivate Sub cmdok_Click()If txtHour.Text = "" ThenMsgBox "ÄãµÄʱ¼äÊäÈë²»ÄÜΪ¿Õ,ÇëÖØÊÔ!", vbCriticaltxtHour.Text = ""txtHour.SetFocusElsefrmManager.Adodc1.Recordset!mstate = 1frmManager.Adodc1.Recordset![lTime] = txtHour.TextfrmManager.Adodc1.Recordset![stime] = Now()frmManager.Adodc1.Recordset![jstate] = "¼Æ·ÑÖÐ"frmManager.Adodc1.Recordset.SaveUnload MeEnd IfEnd SubPrivate Sub cmdcancel_Click()Unload MeEnd SubPrivate Sub Form_Load()' Dim cn As ADODB.Connection' Dim rst As ADODB.Recordset' Set cn = New Connection' Set rst = New ADODB.Recordset' cn.Open concnEnd Sub四、窗体4代码Option ExplicitPublic blnReceived As BooleanPublic blnOnlineOK As Boolean 'ÅжÏÊÇ·ñÔÚÏßPublic strData As StringPrivate Sub DataGrid1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)'°´ÏÂÓÒ¼ü£¬µ¯³ö²Ëµ¥If Button = 2 Then PopupMenu mnupopupEnd SubPrivate Sub Form_Activate()'Ò»¼¤»î¾ÍÕ¼ÆÁÄ»µÄÖмädatagrid1.Left = (Me.ScaleWidth - datagrid1.Width) / 2End SubPrivate Sub Form_Load()'Êý¾ÝÁ¬½Ó³õʼ»¯Adodc1.ConnectionString = concnmandType = adCmdTableAdodc1.RecordSource = "pc"Adodc1.RefreshCall DisableX(Me) '½ûÓùرմ°ÌåDim cn As ADODB.ConnectionDim rs As ADODB.RecordsetDim sql As StringSet cn = New ADODB.ConnectionSet rs = New ADODB.Recordsetcn.Open concnsql = "select id,ip from clientip"rs.Open sql, cn, adOpenKeysetrs.MoveNextrs.MoveFirstglngClientNum = rs.RecordCountReDim gstrClientIP(glngClientNum - 1)While Not rs.EOFgstrClientIP(rs("ID") - 1) = rs("IP")rs.MoveNextWendrs.CloseSet rs = Nothingcn.CloseSet cn = NothingWith Winsock1.Protocol = sckUDPProtocol.RemoteHost = gstrClientIP(glngClientNum - 1).RemotePort = 4001.LocalPort = 4002End WithblnReceived = FalseblnOnlineOK = FalseTimer3.Enabled = FalseExit SubLabel1.Caption = "Ç뵽ϵͳÉèÖÃ--¡·Ìí¼ÓÐ޸Ŀͻ§¶Ëip,ÖØÐÂÐ޸ģ¬·Ç·¨µÄ¼ÆËã»ú±àºÅ"Label1.Visible = TrueEnd SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 2 Then PopupMenu mnupopupEnd SubPrivate Sub Form_Resize()datagrid1.Left = (Me.ScaleWidth - datagrid1.Width) / 2End SubPrivate Sub Form_Unload(Cancel As Integer)Dim Frm As FormFor Each Frm In FormsUnload FrmSet Frm = NothingNext FrmEnd SubPrivate Sub mnuExit_Click()EndEnd SubPrivate Sub mnuLimittime_Click()frmLimittime.Show 1 'µ÷ÓÃÏÞʱ´°ÌåEnd SubPrivate Sub mnuLock_Click()If MsgBox("ÊÇ·ñÒªÍ˳ö²¢Í£Ö¹¼Æ·Ñ£¿", vbOKCancel) = vbOK ThenfrmCounter.Show 1 'µ÷ÓÃfrmCounter ´°ÌåEnd IfEnd SubPrivate Sub mnusystem_Click()frmSystem.Show vbModalEnd SubPrivate Sub mnuTiming_Click()frmTiming.Show 1 'µ÷ÓüÆÊ±´°ÌåEnd SubPrivate Sub Timer1_Timer()Dim cn As ADODB.ConnectionDim rst As ADODB.RecordsetDim strsql As StringDim i As IntegerDim A As StringA = Adodc1.Recordset![jstate] = "¼Æ·ÑÖÐ"Set cn = New ConnectionSet rst = New ADODB.Recordsetcn.Open concnstrsql = "update pc set [time]=format((DateDiff(""d"",stime,now())*24+(hour(now())-hour(stime)) +(Minute(now())-Minute(stime))/60), ""##,##0.000""),[money]=[time]*uprice where jstate=""¼Æ·ÑÖÐ"""cn.Execute strsqli = Adodc1.Recordset.AbsolutePositionAdodc1.Refreshrst.CursorLocation = adUseClientstrsql = "select * from pc where Time>=lTime and ltime<>0 and jstate=""¼Æ·ÑÖÐ"""rst.Open strsql, cn, adOpenDynamic, adLockOptimisticIf rst.RecordCount > 0 Thenrst.MoveFirstWhile Not rst.EOFrst![jstate] = "묒·Ñ"rst.UpdateMsgBox ("µÚ[" & rst![Mid] & "]ºÅ»úÆ÷ÏÞʱÒѵ½")rst.MoveNextWendEnd IfAdodc1.Recordset.AbsolutePosition = iEnd SubPrivate Sub Timer3_Timer()'½«ËùÓеÄÔÚÏß»úÆ÷µÄ³¬Ê±¼ÆÊý¼ÓÒ»Dim cn As ADODB.ConnectionDim rst As ADODB.RecordsetDim strsql As StringSet cn = New ADODB.ConnectionSet rst = New ADODB.Recordsetcn.Open concnstrsql = "select ClientID from online"rst.Open strsql, cnIf rst.BOF And rst.EOF ThenExit SubEnd IfWhile Not rst.EOFAddTimeOut rst("ClientID")rst.MoveNextWendEnd SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Dim PC_NumberA As IntegerDim cn As ADODB.ConnectionDim i As IntegerDim rst As ADODB.RecordsetSet cn = New ConnectionSet rst = New ADODB.Recordsetcn.Open concnfrmManager.datagrid1.Row = frmManager.datagrid1.RowfrmManager.datagrid1.Col = 0PC_Number1 = frmManager.datagrid1.TextPC_NumberA = CInt(PC_Number1)Select Case Button.KeyCase "cmdNumberID"Case "cmdTiming"frmTiming.ShowCase "cmdLimittime"frmLimittime.ShowCase "cmdLock"ForceScreenLock PC_NumberAPC_NumberA = 0Case "cmdPoweroff"ForceShutDown PC_NumberACase "cmdReboot"ForceReboot PC_NumberACase "cmdReleaseLock"ReleaseLock PC_NumberAPC_NumberA = 0End SelectPC_NumberA = 0End Sub' ÍøÂçÊý¾Ý´¦ÀíPublic Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim Params() As StringIf bytesTotal > 0 ThenOn Error GoTo error_procWinsock1.GetData strData '½ÓÊÕÊý¾ÝServerDealData strData '½ÓÊÕÊý¾Ý´¦ÀíExit SubEnd Iferror_proc:If Err.Number = 10054 Then MsgBox "ÍøÂçûÁ¬½Ó"MsgBox Err.DescriptionEnd Sub五、窗体5代码Private Sub Form_Load()datPrimaryRS.ConnectionString = concnmandType = adCmdTabledatPrimaryRS.RecordSource = "member"datPrimaryRS.RefreshEnd SubPrivate Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)'´íÎó´¦Àí³ÌÐò´úÂëÖÃÓÚ´Ë´¦'ÏëÒªºöÂÔ´íÎó£¬×¢Ê͵ôÏÂÒ»ÐÐ'ÏëÒª²¶»ñËüÃÇ£¬ÔÚ´ËÌí¼Ó´úÂëÒÔ´¦ÀíËüÃÇMsgBox "Data error event hit err:" & DescriptionEnd SubPrivate Sub Form_Resize()On Error Resume Next'µ±´°Ìåµ÷Õûʱ»áµ÷ÕûÍø¸ñgrdDataGrid.Width = Me.ScaleWidthgrdDataGrid.Height = Me.ScaleHeight - grdDataGrid.Top - datPrimaryRS.Height - 30 - picButtons.HeightEnd SubPrivate Sub Form_Unload(Cancel As Integer)Screen.MousePointer = vbDefaultEnd SubPrivate Sub cmdAdd_Click()On Error GoTo AddErrdatPrimaryRS.Recordset.AddNewExit SubAddErr:MsgBox Err.DescriptionEnd SubPrivate Sub cmdDelete_Click()On Error GoTo DeleteErrWith datPrimaryRS.Recordset.Delete.MoveNextIf .EOF Then .MoveLastEnd WithMsgBox "ɾ³ý³É¹¦"Exit SubDeleteErr:MsgBox Err.DescriptionEnd SubPrivate Sub cmdUpdate_Click()On Error GoTo UpdateErrdatPrimaryRS.Recordset.UpdateBatch adAffectAllMsgBox "¸üгɹ¦"Exit SubUpdateErr:MsgBox Err.DescriptionEnd SubPrivate Sub cmdClose_Click()Unload MeEnd Sub四、窗体4代码Private Sub Form_Load()datPrimaryRS.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\mechanicID.mdb;Persist Security Info=False"mandType = adCmdTabledatPrimaryRS.RecordSource = "admi"datPrimaryRS.RefreshEnd SubPrivate Sub Form_Resize()On Error Resume Next'µ±´°Ìåµ÷Õûʱ»áµ÷ÕûÍø¸ñgrdDataGrid.Width = Me.ScaleWidthgrdDataGrid.Height = Me.ScaleHeight - grdDataGrid.Top - datPrimaryRS.Height - 30 - picButtons.HeightEnd SubPrivate Sub Form_Unload(Cancel As Integer)Screen.MousePointer = vbDefaultEnd SubPrivate Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)'´íÎó´¦Àí³ÌÐò´úÂëÖÃÓÚ´Ë´¦'ÏëÒªºöÂÔ´íÎó£¬×¢Ê͵ôÏÂÒ»ÐÐ'ÏëÒª²¶»ñËüÃÇ£¬ÔÚ´ËÌí¼Ó´úÂëÒÔ´¦ÀíËüÃÇMsgBox "Data error event hit err:" & DescriptionEnd SubPrivate Sub cmdAdd_Click()On Error GoTo AddErrdatPrimaryRS.Recordset.AddNewExit SubAddErr:MsgBox Err.DescriptionEnd SubPrivate Sub cmdDelete_Click()On Error GoTo DeleteErrWith datPrimaryRS.Recordset.Delete.MoveNextIf .EOF Then .MoveLastEnd WithExit SubDeleteErr:MsgBox Err.DescriptionEnd SubPrivate Sub cmdUpdate_Click()On Error GoTo UpdateErrdatPrimaryRS.Recordset.UpdateBatch adAffectAll Exit SubUpdateErr:MsgBox Err.DescriptionEnd SubPrivate Sub cmdClose_Click()Unload MeEnd Sub六、窗体6代码Private Sub CmdEnter1_Click()frmMember.Show vbModalEnd SubPrivate Sub CmdEnter2_Click()frmSetpwd.Show vbModalEnd SubPrivate Sub CmdOnline_Click()frmOnline.Show vbModalEnd SubPrivate Sub Command1_Click()frmsetprice.Show vbModalEnd SubPrivate Sub Command2_Click()frmHistory.Show vbModalEnd SubPrivate Sub Command3_Click()frmClientIP.Show vbModalEnd Sub七、窗体7代码Option ExplicitPrivate Sub cmdcancel_Click()Unload MeEnd SubPrivate Sub cmdok_Click()'Á¬½ÓÊý¾Ý¿â³õʼ»¯Dim cn As ADODB.ConnectionDim rst As ADODB.RecordsetSet cn = New ConnectionSet rst = New ADODB.Recordsetcn.Open concnfrmManager.Adodc1.Recordset!mstate = 1frmManager.Adodc1.Recordset![stime] = Now()frmManager.Adodc1.Recordset![jstate] = "¼Æ·ÑÖÐ"frmManager.Adodc1.Recordset.SaveUnload MeEnd Sub。

相关主题