您现在的位置:网站首页答辩论文计算机毕业设计计算机论文计算机应用论文

销售管理系统—内务咨讯

  • 简介:嘉兴学院 毕业论文 课题名称: 销售管理系统—内务咨讯 学生姓名:钱晓厉 学号:7 学院:信息工程学院 专业、班级:经济信息管理与计算机应用011 指导老师:孙伟民 完成日期:2004年5月7日 摘要 本课...
    • 请与管理员联系购买资料 QQ:5739126
  • 论文简介
  • 相关论文
  • 论文下载

嘉兴学院

 

毕业论文

 

 

课题名称:   销售管理系统—内务咨讯

 

 

学生姓名:钱晓厉

学号:7

学院:信息工程学院

专业、班级:经济信息管理与计算机应用011

指导老师:孙伟民

完成日期:200457

 

 

 

 

 

 

 

 

摘要

本课题是采用Winsock控件,利用其提供的TCP网络服务功能编写的类似BQQ功能的局域网通信程序。通过设置Winsock的属性并调用其方法连接到一台远程计算机中,并且还可以双向交换数据。

系统主要包括服务器(SERVER)和客户(CLIENT)端两部分。如客户端注册有客户登录后与服务器连接,连接成功后,即可进入聊天环境;服务器则负责维护与每一个客户的连接和数据交换,并且记录下所有的聊天内容。

经过分析,采用Access作为创建数据库平台,MICROSOFT公司的Viual Basic 6.0作为编程语言平台。前者是建立起的数据一致性和完整性强、数据安全性好的库,后者提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成满意的可行系统。

 

 

关键字:WinsockCommonDialogServer/ClientTcpMsgboxActiveX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

目录………………………………………………………………………………………3 

1绪论……………………………………………………………………………………4

2内务咨讯系统的总体设计………………………………………………………(5

2.1总体规划………………………………………………………………………………(5

2.2系统设计………………………………………………………………………………(5

2.2.1组织模块图………………………………………………………………………(5

2.2.2系统流程图………………………………………………………………………(6

2.2.3开发平台…………………………………………………………………………(7

3.系统功能具体实现………………………………………………………………………(8

3.1服务器端功能模块设计………………………………………………………………(8

3.2客户端功能模块的设计………………………………………………………………(9

3.4硬件配置………………………………………………………………………………(10

3.5数据库设计方案……………………………………………………………………(10

4系统详细设计……………………………………………………………………………(10

4.1服务器系统详细设计…………………………………………………………(11

4.2客户端系统详细设计…………………………………………………………(16

5.结论………………………………………………………………………………………(25

致谢………………………………………………………………………………(26

参考文献……………………………………………………………………………………(27

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1章:绪论

在信息革命的浪潮中,人们普遍使用计算机来提高个人工作效率,但是在需要许多人一起协同工作的现代工作环境中,我们更需要提高我们的整体工作效率。

因此,即时通信软件是必不可少的。即时通信软件有多种多样的,各家公

司可以根据自己的情况来具体使用。比如ICQMSN可用于做国际贸易的公司,而对于国内联系频频的公司来说。BQQ是一个很不错的选择!从其功能来看,有即时通信、短讯中心、网络会议、分组讨论及与外网QQ通信功能。

以上提到的即时通信软件都需要上Internet网,适合于每天都有大量业务进出的大规模企业或跨国公司。并且其功能繁多、复杂,这就要求公司的员工都有较高的文化素质,才能懂得如何操作这类软件。

但是对于那些规模小、资金不足、员工不多且文化素质不高,不需要与外网连接的企业、小公司来说,只需要一套成本低廉、通讯效率高、便于管理、安全可靠、操作简单,可以方便的进行数据交换的适用于办公室内部局域网的小型软件即可。

本课题是销售管理系统的其中一个“内务咨讯”模块。通过客户端-普通员工访问服务器端-管理员来实现内务咨询、任务下达及普通员工的免费注册等实用功能。

只要普通员工或业务员登录正确的服务器,就可以通过网络与管理员进行即时的通信。而不必跑来跑去进行沟通,省时又省力。大大提高了企业的工作效率。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2章:内务咨讯的总体设计

21总体规划

本系统是作为销售管理系统的“内务咨讯”平台。

2. 2系统设计

2.2.1组织模块图

连接数据库

                         

登录个人管理平台

 

内务咨讯平台

 

业务员管理平台

管理员操作平台

 

服务器端

 

客户端

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2.2.2系统流程图:

服务器端启动

                      

 

客户端启动

连接数据库

 

 

 

 

 

 

 

 

 

 


是否为新用户

                                   

 

 


                    

注册

不同权限用户登录

内务咨讯

 

 

 

 

 

 


服务器端部分:程序启动时,先设置自己的本地服务器地址和服务器端口,因为有些端口有其 固 定 的 作 用, 如80 WWW 端 口, 故 尽 可 能 选 择 不 可 能 使 用 的 端 口, 这 里 我 选 择 了55000。 将 连 接 状 态 设 置 为 假, 然 后 开 始 进 行 侦 听。 当 侦 听 到 有 计 算 机 要 求与 服 务 器 进 行 对 话, 就 接 受, 并 记 录 下 客 户 机 的 地 址、 端 口、 客 户 起 的 匿 名, 将 连 接 状 态 设 置 为 真,将 上 述 内 容 存 入 一 个 用 户 自 定 义 的 数 组 中, 进 行 动 态 维 护。
   
做 完 这 些 工 作 后, 服 务 器 再 调 入 一 个 新 控 件, 进 行 新 的 侦 听, 如 此 反 复 不 断。 如果 有 客 户 退 出 , 则 关 闭 相 应 的 连 接。 注 意 不 能 在 客 户 端 关 闭 连 接, 否 则 会 产 生 错 误, 只 能 由 服 务器 关 闭 连 接。

客户端部分:客 户端 程 序 启 动 后,已有的客户登录确认后。设 置 服 务 器 的 地 址 及端 口, 这 里 直 接 使 用 了“127.0.0.1 这 是 本地 的 服 务 器 地 址, 可 以 在Form_load 过程 中 设 置 自 己 的 服 务 器 地 址, 也 可 在 程 序 开 始 时 让 用 户 输 入 服 务 器 地 址 以 增 加 灵 活 性。 之后,向服务器请求连接,服务器确认后,客户端收到连接成功信息,即可与服务器进行即时通讯。还可保存当天重要的的消息。

 

 

2.1.3开发平台:

1Winsock

本系统主要通过Winsock控件来实现点对点的通讯。Winsock控件是VB5.0的新增功能,它解决了以往应用VB编程时网络中应用程序之间无法实现点对点通信的难题。Winsock使用的TCP协议和UDP协议允许建立并保持一个到远程计算机上的连接,且可以在连接结束之前实时地进行数据交换。用户仅通过设置属性并借助事件处理就能够轻而易举地连接到一个远程的计算机上,而且只用两个命令就可以实现数据交换。

使用TCP协议时,如果需要创建一个客户应用程序,就必须识别服务器的名称或IP地址。应用程序的通信端口随时都将仔细监测对方发出的消息,这是系统进行可靠连接的保证。一旦连接发生,任何一方都可以通过SendData发送和接收数据,并借助GetData把自己的数据分离出来。

传送数据时,需要先设定客户机的LocalPort属性,服务器则只需要把RemoteHost属性设定为客户机以太网的地址,并设定与客户机LocalPort属性相同的端口地址,借助SendData方法开始发送消息。客户机则在GetData事件中通过DataArrival事件分离出发送的信息。

一个Winsock控件可以让本地计算机连接到远程的计算机上,同时使用UDPTCP协议,两个协议都能创建客户机和服务器应用。

使用Winsock控件时,通信的双方需要选定相同的协议。TCP协议适用于传送大容量、需要安全性保证的数据文件;UDP协议适用于需要分别与很多下属通信,或者建立的连接比较多且为时变的情况,特别是在数据量很小的时候。设定时可以使用Winsock1.Protocol = sckTCPProtocol方法,首先要找到你的计算机的名称,并把它添入WinsockLocalHost属性中。

创建一个应用程序时,首先要确定你建立的是客户方应用还是服务器服务,只有建立的服务器应用开始工作,并进入监听状态时,客户应用程序才开始建立连接,进入正常的通信状态。

使用UDP协议建立对等通信和通过TCP建立客户/服务器通信的方法略有不同,它不需要建立客户和服务器,而是建立对等通信。

Windows SocketsWindows下得到广泛应用的、开放的、支持多种协议的网络编程接口。

 

2编程环境的选择

微软公司的Visual Basic 6.0Windows应用程序开发工具,使目前最为广泛的、易学易用的面向对象的开发工具。Visual Basic提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。故而,实现本系统VB是一个相对较好的选择。Visual Basic应用程序基本的构建块是用户所创建的对象,每一个对象都具有一些特性和行为(属性、事件和方法)。开发人员可以最有效利用所创建的每一个对象。使用应用程序具有可通用性可说扩展性和强有力的功能。
    Visual Basic
应用由一系列对象组成,包括有函数、菜单、函数、结构和数据窗口、用户对象、用户事件等等,对象中又包含若干控件如命令按钮、单行编辑器等这些对象和控件都可在许多应用中重复使用。

关系型数据库的实现

Access2000 就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。



3章 系统功能具体实现

31服务器端功能模块设计:

3.1.1.“系统”:

1.“断开连接”的功能:

所有在客户端请求过连接的用户都还与服务器处于正常连接的前提下,服务器对第一个请求连接成功到最后一个请求连接成功的用户发出“you can quit

的信息。状态栏中会相应显示还剩下几个在线的客户端用户。“连接的客户端”列表和服务器信息文本框中会提示“全部下线”及下线时间。

2.“退出”的功能:

所有在客户端请求过连接的用户都还与服务器处于正常连接的前提下,服务器对第一个请求连接成功到最后一个请求连接成功的用户发出“*you can quit”的信息。状态栏中会相应显示还剩下几个在线的客户端用户。“连接的客户端”列表和服务器信息文本框中会提示“全部下线”及下线时间。服务器并提示消息框“要保存文件后再退出吗?”如果选择“是”,则服务器通过CommonDialog(完成选择字体、打开文件之类的操作,只要将此控件放在窗体上,并调用相应方法即可。在运行时他部显示在窗体上,而像定时控件一样,向应用程序提供服务,但未必显示出来。)控件保存当天与客户端交流的数据信息以备日后查询用,然后服务器端退出。否则,服务器端直接退出。

3.1.2.“消息”:

1.“发送消息”的功能:

如选择“消息”主菜单的下一级子菜单的“发送消息”项,即可在txtsend文本框中输入消息,按回车键后,即可在服务器的rtbsave及客户端的rtbin两个richtextbox中看到消息,而txtsend中的消息将清空。

2.“客户列表”的功能:

如选择“消息”主菜单的下一级子菜单“客户列表”项,同时工具栏上的“客户列表”按纽呈按下状态。在服务器端的lstclient列表中显示与服务器连接成功的客户端的登录名。

3.1.3“文件”:

1.“打开”的功能:

如选择“文件”主菜单的下一级子菜单项“打开”,则会启动CommonDialog控件打开文件对话框的功能,并打开frmInspect(服务器端日志文件窗口),在此窗口中显示CommonDialog选择的以前保存的聊天内容。

2.“保存”功能:

如选择“文件主菜单的下一级子菜单“保存”,则会启动CommonDialong控件保存文件对话框的功能,把在服务器端rtbsave中的与客户端当天交流的数据消息保存到计算机硬盘中,以背日后查询。

 

 

3.2客户端功能模块的设计:

3.2.1 欢迎使用办公QQ系统界面的功能:

如果是已注册的管理员、业务员、或普通员工,则可直接进入“更改用户登录窗口”输入.用户权限及注册密码进入聊天客户器端准备与服务器端进行连接。如果是新用户,则进入“雇员信息”窗口进行用户相关信息的注册才能进入“更改用户登录窗口”。

3.2.2 雇员信息窗口的功能:

对于新用户想使用办公QQ系统,必须先注册,填写有关个人信息,并与数据库sell_manage中的表“雇员”绑定,一旦有新的用户注册,则表“雇员”就新增一条记录。填写的个人信息有“雇员ID”(此项由系统根据数据库的记录个数自动提供个新用户)、姓名、密码、分机、电话、权限等。如放弃注册则回到欢迎界面。

3.2.3 更改用户登录窗口功能:

无论新用户或是老用户都必须在该窗口中输入用户权限、密码才能进入聊天客户端。该窗口与数据库sell_manage中表“雇员绑定”。

3.2.4 客户端日志窗口的功能:

对当天与服务器端管理员交流的消息觉得重要的,可利用此窗口通过CommonDialog控件进行保存,以备日后查阅。

3.2.5 聊天客户端登录的功能:

无论新用户还是老用户在登录更改用户窗口后,都必须在“聊天客户端登录窗口”中输入要登录服务器的地址和端口号,只有输入正确才能进入聊天客户端准备与服务器进行连接。

3.2.6 标准模块的功能:

模块是相对独立的程序单元。在Visual Basical中主要有3中模块,即窗体模块、标准模块和类模块。标准模块也称全局模块,由全局变量声明、模块层声明及通用过程等几个部分组成。一个过程可能用来响应几个不同对象中的事件,应该将这个过程放在标准模块中,而不应在每一个对象的事件过程中重复相同的代码。

3.2.7 聊天客户窗口的功能:

客 户端 程 序 启 动 后,已有的客户登录确认后。 首 先 设 置 服 务 器 的 地 址 及 端口, 这 里 我 直 接 使 用 了“127.0.0.1 这 是 我 的 服 务 器 地 址, 可 以 在Form_load 过程 中 设 置 自 己 的 服 务 器 地 址, 也 可 在 程 序 开 始 时 让 用 户 输 入 服 务 器 地 址 以 增 加 灵 活 性。 之后,向服务器请求连接,服务器确认后,客户端收到连接成功信息,即可与服务器进行即时通讯。

3.3 硬件配置

1.        PC机配置:服务器机子与客户端机子PentiumIV内存128M 硬盘40G以上,推荐内存256M

2.        软件:Win98/Win2000/Winxp Ms-Office2000以上

 

3.4 数据库设计方案

3.4.1数据库概念

数据库是按一定方式组织、存储、处理相互关联的数据的集合。数据库中的数据的组织形式有多种。其中用表格形式组织数据的方式称为关系数据库。实际上现在普遍使用的手术关系数据库。

在关系数据库中,实际保存数据的数据结构是一个后多个表,每个表定义了某种特定的结构。Visual Basic包含一个完整的数据库系统。

本课题采用的是Acess作为数据库。本课题定义的数据库名为:sell_manage;表为“雇员”表。

 

表:雇员

雇员ID

姓名

密码

权限

分机

工作电话

1

张金丹

123

3

2

05733642013

2

陈琴香

123

2

1

05733642013

3

钱晓厉

123456

1

3

05733642013

 

1“雇员ID:为字符串型,由系统自动产生编号,每一个新用户都给定一个ID,不能修改。

2)“姓名”:为字符串型,由用户在注册时填写。

3)“密码”:为字符串型,由用户在注册时定义。

4)“权限”:为字符串型,3-管理员

                         2-业务员

1-      普通员工

5)“分机”:为字符串型,由用户在注册时填写。

6)“电话号码”:为字符串型,由用户在注册时填写。

 

4章 系统详细设计

4.1、聊天服务器端系统详细设计:

4.1.1、用 下:

定义与服务器建立过连接的客户端机子的个数

dim num as integer

dim flag as Boolean

boolean:布儿数据类型,存放TrueFalse值。当为True时,表示退出服务器端;当为False时,表示没有退出服务器端。

dim exitserver as Boolean

‘定义在线的客户端机子数

dim numonline as integer

dim clientname(1 to 5)

dim allquit as Boolean

4.1.2、服 务 器程 序 中 三 个关 键 程 序 段 如 下:
(1)处

Tcpserver_ConnectionRequest 过 程 处 理 连 接 请 求, 当客户端 计 算机 要 求 连 接 时, 服 务 器 首 先 检 查 用 户 自 定 义 数 组 中 是 否 有 空 闲 位 置( 因 为 在 谈 话 中 途, 肯 定 会 有 人 退 出, 所 以 会 产 生 空 闲 位 置), 如 果 有 则 选 择 空 闲位 置 给 予 要 求 连 接 的 客 户, 否 则 将 数 组 维 数 加 一, 将 之 给 予 请 求 连 接 的 远 程 节 点。 错 误 处 理 主 要 是 忽 略 两 个 或 两 个 以 上 的客 户 同 时 要 求 连 接 时 产 生 的 地 址 冲 突 现 象。

代码如下:

Private Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)

If Index = 0 Then

Num = Num + 1

NumOnline = NumOnline + 1

Load tcpServer(Num)

状态栏上显示在线的客户端机子的数量

StatusBar1.Panels(1).Text = "There are " & NumOnline & "Client connected"

tcpServer(Num).LocalPort = 0

‘服务器获得客户端连接机子的IP地址

tcpServer(Num).Accept requestID

End If

End Sub
 

2 息:

tcpServer_DataArrival 过 程 处 理 客 户 端 传 来 的 数 据。
Winsock
控 件 先将 数据 首 先 送 至 缓 冲 区, 待 缓 冲 区 满 才 发 送 信 息。

代码如下:
Private Sub tcpServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)

‘定义sdata为要从客户端接收的数据

Dim sData As String

‘定义sname为从客户端接收数据的第一个字符

Dim sName As String

tcpServer(Index).GetData sData

‘下一个发送过来的数据的显示位置

rtbSave.SelStart = Len(rtbSave.Text)

sName = Left(sData, 1)

‘如接收到数据的第一个字符为“/”,则向客户端发送连接成功的信息

If sName = "/" Then

lstClient.AddItem sData + CStr(Now())

tcpServer(Index).SendData "recieved successfully"

‘如接收到数据的第一个字符为“^,则表示客户端请求断开,服务器发送允许断开的信息

ElseIf sName = "^" Then

justsend.Text = Index & "you can quit."

tcpServer(Index).SendData "you can quit."

‘客户端收到可以断开的信息及时间

lstClient.AddItem sData + CStr(Now())

NumOnline = NumOnline - 1

StatusBar1.Panels(1).Text = "There are " & NumOnline & "Client connected"

‘如接收到数据的第一个字符为“*”,表示客户端请求断开并退出办公QQ聊天系统。服务器发出同意信息

ElseIf sName = "*" Then

tcpServer(Index).SendData "*you can quit."

lstClient.AddItem sData + CStr(Now())

justsend.Text = Index & "*you can quit."

NumOnline = NumOnline - 1

StatusBar1.Panels(1).Text = "There are " & NumOnline & "Client connected"

End If

‘下一个发送到服务器端消息的显示位置

rtbSave.SelStart = Len(rtbSave.Text)

rtbSave.Text = rtbSave.Text + Chr(13) + Chr(10) + sData

txtout.Text = sData

rtbSave.SelStart = Len(rtbSave.Text)

End Sub

 

 3. 关 闭 客 户 连 接
         
分“断开连接”和“退出”。“断开连接”只是向客户端发送断开服务器的要求,本身并不退出;“退出”在断开客户端的同时,提示是否要保存聊天信息,选择后自己并关闭服务器端应用程序。

 

“断开连接”:

Private Sub mnuBreak_Click()

For i = 1 To Num

If tcpServer(i).State <> sckClosed Then

tcpServer(i).SendData "you can quit."

justsend.Text = i & "you can quit."

NumOnline = NumOnline - 1

StatusBar1.Panels(1).Text = "There are " & NumOnline & "Client connected"

End If

Next i

lstClient.AddItem "全部下线!" + CStr(Now())

rtbSave.SelStart = Len(rtbSave.Text)

rtbSave.Text = rtbSave.Text + Chr(10) + "全部下线!" + CStr(Now())

End Sub

 

“退出”:

Private Sub mnuExit_Click()

For i = 1 To Num

If i = Num Then allquit = True

If tcpServer(i).State <> sckClosed Then

tcpServer(i).SendData "*you can quit."

justsend.Text = i & "you can quit."

NumOnline = NumOnline - 1

StatusBar1.Panels(1).Text = "There are " & NumOnline & "Client connected"

End If

Next i

response = MsgBox("要保存文件后再退出吗?", vbYesNo, "退出")

If response = vbYes Then

CommonDialog1.ShowSave

rtbSave.SaveFile (CommonDialog1.FileName)

End If

End Sub

 

 

 

 

4.1.3服务器端其他控件实现功能的程序代码:

1服务器运行后

Private Sub Form_Load()

‘状态栏显示没有连接的客户端

StatusBar1.Panels(1).Text = "Now there is nobody connected"

Num = 0

NumOnline = 0

‘服务器端的断口号设置为5000

tcpServer(0).LocalPort = 5000

‘服务器处于帧听状态

tcpServer(0).Listen

‘两个标签框显示服务器的IP地址和端口号

Label1.Caption = Label1.Caption + CStr(tcpServer(0).LocalIP)

Label3.Caption = Label3.Caption + CStr(tcpServer(0).LocalPor)

End Sub

 

2)客户列表

Private Sub mnuList_Click()

mnuList.Checked = Not mnuList.Checked

If mnuList.Checked Then

工具栏上的客户列表按钮成按下状态

Toolbar1.Buttons("List").Value = tbrPressed

Me.lstClient.ForeColor = RGB(0, 0, 0)

Else

Toolbar1.Buttons("List").Value = tbrUnpressed

Me.lstClient.ForeColor = Me.lstClient.BackColor

End If

End Sub

 

(3)文件“打开”功能:

Private Sub mnuOpen_Click()

CommonDialog1.ShowOpen

frmInspect.rtbOpen.LoadFile (CommonDialog1.FileName)

frmInspect.Show

End Sub

 

4)文件“保存”功能:

Private Sub mnuSave_Click()

CommonDialog1.ShowSave

rtbSave.SaveFile (CommonDialog1.FileName)

End Sub

 

 

5)“发送消息”功能:

Private Sub mnuSend_Click()

mnuSend.Checked = Not mnuSend.Checked

TxtSend.Locked = Not TxtSend.Locked

End Sub

 

6)服务器发送数据完毕:

Private Sub tcpServer_SendComplete(Index As Integer)

If justsend.Text <> "" Then

tcpServer(Left(justsend.Text, 1)).Close

StatusBar1.Panels(1).Text = "There are " &  NumOnline & "Client connected"

justsend.Text = ""

End If

If allquit = True Then

tcpServer(0).Close

Unload Me

allquit = False

End If

End Sub

 

7)工具栏上按钮功能实现:

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)

Select Case Button.Key

Case "Open"

CommonDialog1.ShowOpen

rmInspect.rtbOpen.LoadFile(CommonDialog1.FileName)

frmInspect.Show

Case "Quit"

response = MsgBox("要保存文件后再退出吗?",vbYesNo, "退出")

If response = vbYes Then

CommonDialog1.ShowSave

 rtbSave.SaveFile (CommonDialog1.FileName)

End If

End

Case "Save"

CommonDialog1.ShowSave

rtbSave.SaveFile (CommonDialog1.FileName)

Case "List"

mnuList_Click

End Select

End Sub

8)服务器端发送信息缓冲区功能:

Private Sub txtOut_Change()

For i = 1 To Num

If tcpServer(i).State <> sckClosed Then

tcpServer(i).SendData txtout.Text

End If

Next i

End Sub

 

9)发送文本框实现代码:

Private Sub TxtSend_KeyUp(KeyCode As Integer, Shift As Integer)

If KeyCode = 13 Then

For i = 1 To Num

If tcpServer(i).State = sckClosed Then

Else

tcpServer(i).SendData "server:" & TxtSend.Text

End If

Next i

rtbSave.SelStart = Len(rtbSave.Text)

rtbSave.Text = rtbSave.Text + Chr(10) + "server:" + TxtSend.Text

TxtSend.Text = ""

End If

End Sub

 

4.2、聊天客户端系统详细设计                      

Private Sub Command3_Click()

‘如果数据库呈打开状态,则关闭数据库  

If cn.State = 1 Then cn.Close

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Text2.Text & ";Persist Security Info=False"

‘绑定记录集

reopt.Open "select * from 雇员", cn, 3, 3

MsgBox "数据库连接成功!"

End Sub

 

1、   雇员信息窗口代码:

‘设ree记录集变量

Dim ree As New ADODB.Recordset

 

Private Sub cmdens_Click()

welcome.Show

frmopt.Hide

End Sub

Private Sub Command1_Click()

‘如果两次输入的密码一致,则向记录集中添加一条记录

If Val(password(0).Text) = Val(password(1).Text) Then

ree.AddNew

ree.Fields("雇员ID").Value = id.Text

ree.Fields("姓名").Value = 姓名.Text

ree.Fields("密码").Value = password(0).Text

ree.Fields("权限").Value = "1"

ree.Fields("分机").Value = 分机.Text

ree.Fields("工作电话").Value = telephone.Text

frmopt.Hide

Frmlog.Show

MsgBox "恭喜你,注册成功!"

Else

‘如两次输入的密码不一致,则提示重输密码

MsgBox "密码输入错误,请核对密码!"

End If

ree.Update

End Sub

 

 

 

Private Sub Form_Load()

If ree.State = 1 Then ree.Close

‘打开记录集   

ree.Open "select * from 雇员", cn, 3, 3

id.Enabled = False

id.Text = ree.RecordCount + 1

End Sub

 

 

 

2、   更改用户登录窗口代码:

Private Sub Combo1_Click()

If reopt.State = 1 Then reopt.Close

Select Case Combo1.Text

‘如选择普通员工权限,则记录集选择权限为普通员工的记录

Case "普通员工"

reopt.Open "select * from 雇员 where 权限='" & 1 & "'", cn, 1, 2

‘如选择业务员权限,则记录集选择权限为业务员的记录

Case "业务员"

reopt.Open "select * from 雇员 where 权限='" & 2 & "'", cn, 1, 2

‘如选择管理员权限,则记录集选择权限为管理员的记录

Case "管理员"

reopt.Open "select * from 雇员 where 权限='" & 3 & "'", cn, 1, 2

End Select

‘控件绑定到记录集的“姓名”字段

Set DataCombo1.DataSource = reopt

Set DataCombo1.RowSource = reopt

DataCombo1.DataField = "姓名"

DataCombo1.ListField = "姓名"

End Sub

Private Sub Command1_Click()

If reopt.State <> 1 Then

MsgBox "请确认输入了用户组!"

Exit Sub

End If

‘如果姓名、密码都与记录集中的记录相符合,则进入客户端登录窗体,否则提示密码出错,请重输   

For i = 0 To reopt.RecordCount

If reopt.Fields("姓名") = DataCombo1.Text Then

If reopt.Fields("密码") = Text1.Text Then

frmClientLogIn.txtUserName.Text = DataCombo1.Text

MsgBox "欢迎使用"

Unload Frmlog

frmClientLogIn.Show

Exit Sub

Else: MsgBox "密码出错!请重输"

Exit Sub

End If

Else: reopt.MoveNext

End If

Next i

If repu.EOF Then MsgBox "这个组里没有这个用户,请注册或联系管理员!"

End Sub

 

 

Private Sub Command2_Click()

Welcome.show

Unload Me

End Sub

Private Sub Command3_Click()

‘绑定数据库,记录集

If cn.State = 1 Then cn.Close

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Text2.Text & ";Persist Security Info=False"

reopt.Open "select * from 雇员", cn, 3, 3

End Sub

 

 

3、   聊天客户端日志窗体代码:

Private Sub CmdOpen_Click()

‘通过通用对话框控件打开文件对话框,查阅以前保存的重要的聊天内容

On Error Resume Next

Me.CommonDialog1.ShowOpen

Me.rtbOpen.LoadFile Me.CommonDialog1.FileName

End Sub

‘关闭日志窗体,返回到聊天客户窗体

Private Sub CmdReturn_Click()

Unload Me

Frmclient.Show

End Sub

 

4、   标准模块代码:

Public serverip As String

Public flag As Boolean

Public serverport As String

Public cn As New ADODB.Connection

Public recus As New ADODB.Recordset

Public reopt As New ADODB.Recordset

Public optID As String

Public optname As String

 

Public Function save()

‘在聊天客户端登录窗体的txtserver文本框中输入的服务器IP地址赋给字符串变量serverip

serverip = frmClientLogIn.txtserver.Text

在聊天客户端登录窗体的txtpornum文本框中输入的服务器断口号赋给字符串变量severport

serverport = frmClientLogIn.txtPorNum.Text

frmClientLogIn.txtserver.Locked = True

frmClientLogIn.txtPorNum.Locked = True

flag = True

End Function

Public Function cncsave()

frmClientLogIn.txtserver.Locked = False

frmClientLogIn.txtPorNum.Locked = False

flag = False

End Function

 

Public Function frmlgsave()

frmClientLogIn.txtserver.Text = serverip

frmClientLogIn.txtPorNum.Text = serverport

frmClientLogIn.txtserver.Locked = True

frmClientLogIn.txtPorNum.Locked = True

frmClientLogIn.Chksave.Value = 1

End Function

Public Function frmlginit()

用户登录后,txtserver文本框清空

frmClientLogIn.txtserver.Text = ""

‘用户登录后,txtpornum文本框清空

frmClientLogIn.txtPorNum.Text = ""

frmClientLogIn.txtserver.Locked = False

frmClientLogIn.txtPorNum.Locked = False

End Function

 

 

Private Sub Chksave_Click()

‘如该复选框被选中,则保存该登录用户,否则不保存

If Chksave.Value = 1 Then

Call save

Else

Call cncsave

End If

End Sub

 

 

Private Sub cmdOK_Click()

‘如服务器IP地址没输,则提示消息框要求输入服务器IP地址

If txtserver.Text = "" Then

MsgBox "请输入服务器IP"

Exit Sub

End If

‘如服务器端口号没输,则提示消息框要求输入服务器端口号

If txtPorNum.Text = "" Then

MsgBox "请输入端口号!"

Exit Sub

End If

If Chksave.Value = True Then

服务器IP地址和端口号都被锁住

frmClientLogIn.txtserver.Locked = True

frmClientLogIn.txtPorNum.Locked = True

End If

‘聊天客户窗体显示

Frmclient.Show

‘在聊天客户窗体的txthost显示服务器的IP地址

Frmclient.txtHost = frmClientLogIn.txtserver.Text

‘在聊天客户窗体的txtpronum显示服务器的端口号

Frmclient.txtPort = frmClientLogIn.txtPorNum.Text

lblname标签框显示登录用户名

Frmclient.lblName = frmClientLogIn.txtUserName

‘连接按钮呈可按状态

Frmclient.cmdConnect.Enabled = True

‘断开按钮呈可按状态

Frmclient.cmdQuit.Enabled = True

聊天客户端登录窗体关闭

Unload frmClientLogIn

End Sub

 

Private Sub Form_Load()

If flag = True Then

调用标准模块中的通用过程frmlgsave

Call frmlgsave

Else

调用标准模块中的通用过程frmlginit

Call frmlginit

End If

End Sub

 

5、   聊天客户窗体代码:

‘定义newclientcusexit为布尔数据类型

Dim NewClient As Boolean

Dim cusexit As Boolean

 

 

Private Sub cmdConnect_Click()

On Error GoTo errhandle:

cmdConnect = False

cmdQuit.Enabled = True

‘txthost文本框内显示的IP地址赋给准备连接服务器的IP地址

tcpclient.RemoteHost = txtHost.Text

txtport文本框内显示的端口号赋给连接服务器的端口号

tcpclient.RemotePort = txtPort.Text

tcpclient.Connect

NewClient = True

Cmdconnect.enabled=false

Exit Sub

errhandle:

‘连接失败是提示错误信息

MsgBox err.Description

End Sub

 

 

Private Sub cmdExit_Click()

On Error GoTo err

cusexit = True

‘如果客户端处于连接状态,则向服务器发出退出的请求及时间

If tcpclient.State <> sckClosed Then

tcpclient.SendData "^exit:" & lblName.Caption & CStr(Now())

Else

‘如客户端已处于退出状态,再发出退出请求,则提示“你已经退出办公QQ”的信息

MsgBox "你已经退出办公QQ"

End

End If

Exit Sub

err:

MsgBox "你已经退出办公QQ"

Unload Me

End Sub

 

 

‘按登录按钮,则显示聊天客户端登录窗体

Private Sub cmdLogin_Click()

Load frmClientLogIn

frmClientLogIn.Show

End Sub

 

 

‘按下“断开”按钮

Private Sub cmdQuit_Click()

On Error GoTo errhandle: 

‘如果客户端处于连接状态,则向服务器发送断开请求及时间,否则提示“你已经下线了!”的消息

If tcpclient.State <> sckClosed Then

tcpclient.SendData "^quit:" & lblName.Caption & CStr(Now())

Else

MsgBox "你已经下线了!"

cmdQuit.Enabled = False

End If

Cmdconnect.enabled=true

Exit Sub

errhandle:

MsgBox err.Description

End Sub

Private Sub Form_Load()

Me.cmdConnect.Enabled = False

Me.cmdQuit.Enabled = False

End Sub

‘卸载“聊天客户端”窗体

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

 End

 End Sub

 

 

 

‘按下“连接”按钮

Private Sub tcpClient_Connect()

txtOut.Locked = False

‘向服务器端发送登录用户名

tcpclient.SendData "/登录:" + lblName.Caption

End Sub

 

 

客户端产生服务器端发送的数据

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)

Dim sData As String

 

 ‘如果newclient为真,则收到服务器端发送的已经成功连接的消息

If NewClient Then

 MsgBox "has connected successfully"

NewClient = False

End If

tcpclient.GetData sData

‘客户端显示消息的位置

rtbIn.Text = rtbIn.Text + Chr(13) + Chr(10) + sData

rtbIn.SelStart = Len(sData)

‘如果收到数据的左边13个字符为“you can quit,则客户端产生关闭,并卸载自己

If Left(sData, 13) = "you can quit." Then

tcpclient.Close

If cusexit = True Then

MsgBox "你已经退出办公QQ"

Unload Me

Else

MsgBox "你已经下线了!"

Cmdconnect.enabled=true

cmdQuit.Enabled = False

End If

End If

‘如果产生数据左边14个字符为“*you can quit”,则客户端产生关闭,提示消息:已经退出办公QQ.

If Left(sData, 14) = "*you can quit." Then

tcpclient.Close

MsgBox "服务器已退出办公QQ" 

End If

cusexit = False

'收到同意退出的指令后作出御载窗体动作。

End Sub

 

客户端工具栏按钮实现代码:

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)

Select Case Button.Key

Case Is = "open"

CommonDialog1.ShowOpen

frmInspect.Show

frmInspect.rtbOpen.LoadFile (CommonDialog1.FileName)

Case Is = "Login"

cmdLogin_Click

Case Is = "Quit"

cmdQuit_Click

Case Is = "Save"

CommonDialog1.ShowSave

rtbIn.SaveFile (CommonDialog1.FileName)

End Select

End Sub

Private Sub txtOut_KeyUp(KeyCode As Integer, Shift As Integer)

On Error GoTo errhandle:

‘当按回车键后,客户端向服务器发送用户名及txtout内的消息,txtout内清空

If KeyCode = 13 Then

tcpclient.SendData lblName.Caption + ":" + txtOut.Text

txtOut.Text = ""

End If

Exit Sub

errhandle:

MsgBox err.Description

End Sub

 

 

 

5 结论

对于局域网用户中的编程爱好者来说,如果能自己编一个局域网通信程序,那么这一切将是多么美妙!可是,如果要从头开始完全由自己来编写一段用于通信的程序,必须对相关的网络协议及其他的一些较底层的技术有较深入的了解,这可不是一件容易的事。而现在有了Winsock控件,一切就不同了,它已经替你封装了所有烦琐的技术细节,并提供了访问TCPUDP网络服务的方便途径。你只需通过设置控件的属性并调用其方法就可轻易连接到一台远程计算机中,并且还可以双向交换数据,而这一切都不需你了解TCP的细节或调用低级的Winsock APIs

经过三个多月的设计和开发,内务咨讯系统基本开发完毕。其功能基本符合用户需求,能够实现数据库的连接,用户的注册、登录。客户端用户可以向服务器端管理人员咨询,服务器端管理人员可以向客户端用户答疑、下达任务。服务器端和客户端都可以保存浏览当天有用信息。
   
但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比如用户界面不够美观,出错处理不够等多方面问题。这些都有待进一步改善。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

致谢

在本次毕业设计中,我得到了指导老师孙伟民老师的耐心辅导,及同组同学张丹同学的帮助,替我解决了不少的难点,使得系统能及时开发完成。在这里一并表示忠心地感谢!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考文献

[1]清汉计算机工作室·Viusal Basic 6.0网络开发实例·机械工业出版社·2000

[2]谭浩强、薛淑斌、袁玫·Visual Basic程序设计·清华大学出版社·20001

[3]谭浩强、刘炳文·Visual Basic程序设计(第二版)·清华大学出版社·20037

[4]Enangelos Petroutsos·Visual Basic 6从入门到精通·电子工业出版社·19991

[5]罗运模、王珊文.SQL Server数据库系统基础·高等教育出版社·20028

 

查看评论 已有0位网友发表了看法
  • 验证码: