毕业论文 -大学生宿舍管理系统(聊天室等模块)设计与实现_第1页
毕业论文 -大学生宿舍管理系统(聊天室等模块)设计与实现_第2页
毕业论文 -大学生宿舍管理系统(聊天室等模块)设计与实现_第3页
毕业论文 -大学生宿舍管理系统(聊天室等模块)设计与实现_第4页
毕业论文 -大学生宿舍管理系统(聊天室等模块)设计与实现_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 页引 言1.1 课题背景学生宿舍管理对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说勉强还可以接受,但对于学生人数比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去逐条查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰,计算机化管理正是适应时代的产物。世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并且取而代之。21世纪,电子科学技术在世界占着主流地位,计算机在各行各业

2、中的运用已经得到普及,自动化的管理越来越广泛应用于各个领域。我们针对如此,设计了一套学生宿舍管理系统。学生宿舍管理系统采用的是计算机化管理,系统做得尽量人性化,使用者会感到操作方便,需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量比较大,而且比较稳定,适合长时间的保存,也不容易丢失。这无疑是为存储量比较大的学校提供了一个方便、快捷的操作方式。本系统具有运行快、安全性高、稳定性好的优点,并且具备录入、查询、修改、删除等功能,能够快速的查询某栋宿舍楼的一系列信息。除了对各类信息进行管理,通过此系统,同一宿舍楼的学生与学生,学生与宿舍管理之间也能及时的进行交流。对于宿舍的管理,人际之间的

3、沟通,也有着事半功倍的效果与积极的意义。1.2 本课题研究的意义在学校中,管理是学校运行的重要环节。学校应该采取最有效的管理模式来管理好学生,通过对学生的信息采集将学生的信息输入到数据库中,可以方便地查询学生的信息,这样比传统的手工查找学生档案方式要方便多了。作为计算机应用的一部分,使用计算机对学校公寓进行管理,有着手工管理无法比拟的优势,例如:使管理工作更为轻松便捷,高效精确;方便管理人员对学生信息的添加、修改、查看等操作;简化了管理人员的日常事务,例如更新公告、对寝室卫生评分等。同时,我们也希望在宿舍管理、宿舍活动方面并不是由学校和宿舍管理人员单方面的参与,而是在宿舍中学习生活的学生也能参

4、与于其中。学校的通知能够让每一名学生及时收到,而学生的申请能够及时得到处理,不同宿舍的学生彼此之间有着较密联系,学生和宿舍管理人员对宿舍管理和活动进行讨论,给宿舍建设、管理方式提出好的建议。使得学生宿舍有着更好的氛围,宿舍的管理也更加灵活、体贴。 1.3 研究方法系统使用C/S结构,使用Oracle 10g数据库来存储各类信息。由于不希望客户端能够直接访问数据库,将编写一个服务器程序,并使用Socket通信机制,让客户端与服务器进行通信,从而将客户端对数据库的访问操作由服务器代为进行,并将获得的数据信息转发给客户端。服务器:使用C语言编写,无图形界面。其中聊天室模块的服务器和宿舍管理模块的服务

5、器各自独立,绑定不同的端口,并使用LINUX的多线程方式为不同客户提供服务。涉及对数据库进行访问的部分,使用PRO*C编程嵌入SQL语句,实现对数据库的访问。客户端:使用QT Creator制作图形界面,C+语言编写控制代码,涉及LINUX系统函数调用的操作封装在一个控制类中。其中聊天室程序使用了QT的多线程方式,使得信息显示和信息发送能并发进行。1.4 QT与QT Creator简介Qt是一个1991年由奇趣科技开发的跨平台C+图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。Qt Crea

6、tor是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。1.5 Oracle 10g 与 Pro*c简介Oracle是目前最流行的关系型数据库管理系统,被越来越多的用户在信息系统管理、企业数据处理、Internet、电子商务网站等领域作为应用数据的后台处理系统。此前流行的版本为Oracle9i。O

7、racle公司在Oracle9i基础上,推出了代表数据库最新技术的数据库系统Oracle 10g。在Oracle 10g中,第一次提出数据自动镜像存储、数据闪回功能以及功能强大的数据导出工具、大文件表空间以及表空间组管理等概念。通过在过程化编程语言中嵌入SQL语句而开发出的应用程序称为Pro程序,在通用编程语言中使用的SQL称为嵌入式SQL。在SQL标准中定义了多种语言的嵌入式SQL,各个厂商对嵌入式SQL的具体实现不同。宿主语言 Pro程序C/C+ Pro*C/C+FORTRAN Pro*FORTRANPASCAL Pro*PASCAL系统的需求分析2.1 总体功能分析LINUX下的大学生宿

8、舍管理系统,由两部分组成:一个是服务器,一个客户端。其中服务器程序使用C语言编写,没有任何图形界面以求获得最大的运行效率;而客户端程序则是由C+语言编写,使用QT制作图形界面,便于用户进行使用。宿舍管理系统的功能结构如 REF _Ref326697828 r h 图1所示:系统功能结构图宿舍管理模块基本功能说明:学生管理:包括学生信息的增加、删除、修改、查看及维护功能。寝室管理:包括学生住宿信息的增加、删除、修改、查看及维护功能。公告管理:包括公告设置和公告查看功能。财务管理:每个月交纳水费用、电费、物品维修信息的查询及维护功能。账户管理:包括用户信息的增加、删除、修改、查看及维护功能。学生申

9、请:包括学生申请内容的添加。公告聊天室模块基本功能说明:设置昵称:支持用户设置聊天昵称。设置字体与颜色:支持用户设置聊天内容中文字的字体和颜色。设置表情:支持用户发送各种表情图片。显示在线用户:动态的显示当前在线用户信息和在线人数。2.2 服务器端分析服务器运行于Red Hat Enterprise Linux 5操作系统下。考虑到服务器程序的执行效率,服务器使用C语言编写,通过调用Linux的系统库函数,实现与客户端的网络通信,同时使用Pro*c 嵌入SQL语句,访问数据库,从而将用户和数据信息联系起来,并且避免了用户直接对数据进行访问,使得数据的传输、保存与分析更加安全。同时由于C语言的高

10、效,加之Red Hat Enterprise Linux 5操作系统的稳定和快速,采用以上方法开发出的服务器程序为用户服务时,用户所获得的体验,并不会比使用其他客户端直接访问数据库的应用程序获得的体验有太大的差异。Red Hat Enterprise Linux 5操作系统界面如 REF _Ref326697902 r h 图2所示:Red Hat Enterprise Linux 5界面2.3 客户端分析客户端应可运行于支持图形界面的主流LINUX操作系统上,比如Ubuntu、Fedora、OpenSUSE等,本文中客户端程序运行于为Fedora13系统下,该操作系统界面如 REF _Ref

11、326697914 r h 图3所示:Fedora13操作系统界面客户端使用QT4的类库,制作图形界面。QT做为一个成熟的多平台C+图形用户界面应用程序框架,它可以满足一个图形用户应用程序所需的所有功能。使用其制作的Linux桌面应用程序,拥有同Windows下的桌面应用相媲美的图形效果。同样客户端程序也要调用Linux 的系统库函数来实现动态分配内存、网络通信等这些功能,使得客户端在Linux操作系统下有着更高的运行效率。客户端主要由两个大的功能模块组成:宿舍管理模块与公共聊天室模块。宿舍管理模块包含:学生管理、账户管理、寝室管理、公告管理、财务管理、学生申请。而公共聊天室模块支持多人聊天,

12、自定义昵称,设置字体、颜色、表情和显示当前在线用户信息。客户端界面如 REF _Ref326697936 r h 图4所示:客户端程序界面宿舍管理模块服务器的设计与实现在大学生宿舍管理系统中,宿舍管理模块无疑是最重要的组成部分,它通过对账户、学生、宿舍等信息的操作,实现了宿舍管理系统所需的各个功能。由于服务器程序与数据库运行于同一台的电脑上,显然对这些数据的获取与保存由服务器程序来处理是最高效的。同时服务器程序也将对各个数据进行简单的匹配、整合和计算,所以客户端只需要发送和接受预先定义好格式的数据消息便可以实现对所有数据的正确获取与管理,降低了客户端与服务器通信中数据信息出错的概率。整个第三章

13、将对宿舍管理模块的服务器总体设计、数据库设计和各个功能模块的设计与实现进行详细的描述。3.1 服务器总体设计系统采用的是C/S结构,对服务器和客户端进行了适当的任务分配。服务器并不需要太多过于复杂的操作,主要负责在客户端与数据库之间进行数据的转接,使得客户端能及时的获取到所需要的数据,同时客户端发送给服务器的数据也能被及时的存入数据库中。服务器应当稳定、并发与高效率,为了实现这三个目的服务器采用了多线程模式,即服务器程序为每一个客户创建一个线程进行服务,各个线程之间互不干扰。而主线程负责对各个子线程进行管理。3.1.1 主线程设计主线程主要负责初始化网络,创建客户链表,接受客户连接、创建子线程

14、、管理所有线程五个功能。其具体设计如下:1服务器启动后,主线程为服务器绑定IP地址与端口,进行初始化网络操作,如果初始化网络失败,则关闭服务器。2初始化网络成功后,主线程创建客户链表,并对客户链表进行初始化,然后进入接受用户连接的循环中。3每当有一个用户连接到服务器,服务器将创建一个子线程为客户进行服务,线程创建完毕后返回接受用户连接循环。4当服务器进程接受到SIGINT信号(2号信号)时,关闭所有正在与客户进行通信的套接字,关闭所有子线程,初始化客户链表,关闭服务器进程。主线程的程序流程如 REF _Ref326697947 r h 图5所示:主线程程序流程图3.1.2 子线程设计子线程负责

15、为每个申请连接的客户进行服务,包含了:添加客户到客户链表,从客户链表删除客户,判断用户名密码是否正确,判断用户的需求并提供对应的服务,向用户返回服务是否成功的消息。具体设计如下:1子线程创建成功后,进入判断用户账号密码的循环,接受客户端传来的账号与密码,若账号密码正确,则将客户信息添加到客户链表上,并退出循环。否则给客户端发送错误信息,并返回判断用户账号密码的循环。2添加客户到客户链表后,进入为用户服务循环,接收到客户端的一个服务请求后,判断其请求类型,并为客户端进行对应的服务操作。服务完成后给客户发送服务是否成功信息,然后返回服务循环。3在判断用户账户密码期间,如果用户退出或者断开连接,将关

16、闭与用户通信的套接字,并关闭线程。4在为客户进行服务期间,如果用户退出或者断开连接,用关闭与用户通信的套接字,并从客户链表中将客户删除,然后释放资源关闭线程。5由于涉及多个线程对临界资源(客户链表)的访问,需要设计线程同步的方式。使用互斥锁机制,每当一个线程访问客户链表时,别的线程将不能对客户链表进行访问。6由于客户要求的服务有多种,所以需要一种统一格式的请求服务消息,供服务器判断用户的要求。本系统设计了由类型(char type3)和数据(char type1000)组成的消息结构体,所有服务消息如 REF _Ref326697956 r h 表1所示:系统所有服务消息消息类型消息类型功能说

17、明数据类型CU检查用户是否存在用户类型结构体AU增加用户用户类型结构体DU删除用户用户类型结构体SU查看所有用户用户类型结构体MU修改用户信息用户类型结构体SR查看某栋所有宿舍宿舍类型结构体ER查看未满宿舍宿舍类型结构体TR查看有人的宿舍宿舍类型结构体AR为某楼增加宿舍宿舍类型结构体AD增加宿舍纪律信息纪律类型结构体SD查看某月所有宿舍纪律信息纪律类型结构体AI增加一条公告通知类型结构体SI查看某日所有公告通知类型结构体SM查看某月水电费水电费类型结构体SS查看某楼所有学生学生类型结构体ES查看没有宿舍的学生学生类型结构体US查看单个学生信息学生类型结构体CS查看学生是否存在学生类型结构体RS

18、查看有宿舍的学生学生类型结构体AS为某栋楼增加一个学生学生类型结构体DS为某栋楼删除一个学生学生类型结构体MS为宿舍增加学生学生类型结构体ZS为宿舍减少学生学生类型结构体7当子线程对用户的一次服务请求进行了操作后,将向客户端发送一条信息,用于表示操作是否成功。子线程流程图如 REF _Ref326697964 r h 图6所示:子线程流程图3.2 数据库设计LINUX下的大学生宿舍管理系统使用Oracle 10g数据库用来存储各类数据信息,从而使得用户使用管理系统对数据信息的查看、增加、修改、删除、排序等操作更加便捷与安全。系统的E-R图如 REF _Ref326697971 r h 图7所示

19、:系统E-R图3.3 账户管理功能服务器端的设计与实现账户管理模块主要负责对大学生宿舍管理系统的用户信息进行操作,能实现账号的增加、删除、修改、查看。账户管理模块功能结构如 REF _Ref326697979 r h 图8所示:账户管理功能结构图3.3.1 添加账户与删除账户添加账户功能可以在用户表中添加一行账户信息,由于在用户表中设置了用户名字段为唯一键和非空约束,所以在添加账户时用户名不能与已经存在的账户的用户名相同。另外由于设置了用户ID为用户表的主键,所以每添加一个用户需要为该用户自动生成一个用户表中不存在的用户ID。添加账户程序流程如 REF _Ref326697991 r h 图9

20、所示:添加账户程序流程图设置新添加账户的用户ID值的方法:获取用户表中用户ID的最大值,将其进行加1操作后,赋值给新添加账户的用户ID。设置新添加账户用户ID操作的Pro*c语句: exec sql select max(userid)+1 into :ora_user2.uid from sm_user; 删除账户功能可以从用户表中删除一行对应的用户信息。和添加用户相似,删除用户同样需要先判断要删除的用户是否存在。如果不存在,则向客户端发送用户不存在的信息,如果存在便从用户表中删除此用户。删除账户Pro*c语句:exec sql delete from sm_user where uname

21、=:ora_;3.3.2 查看账户与修改账户查看账户功能可以查看用户表中所有的用户信息,当服务器接收到客户端的查看账户请求后,便从用户表中读取所有的用户信息,并统计出用户的个数。然后将所有获取的用户信息一条一条的发送给客户端。查看账户Pro*c语句:exec sql declare user_cursor cursor for select userid, uname, password, pemisson to_char(register_time,yyyy-mm-dd) from sm_user;修改账户功能可以修改用户表中的一行用户的密码与权限。修改账户,同样需要预先判断所修改的用户是否

22、存在,在进行对应的操作。修改账户程序流程如 REF _Ref326698003 r h 图10所示:修改账户流程图修改账户Pro*c语句:exec sql update sm_user set password=:ora_user2.passwd,pemisson =:ora_user2.pemisson where uname=:ora_;3.4 学生管理功能服务器端的设计与实现学生管理模块是宿舍管理系统的重要组成部分,它主要是负责对学生数据进行管理,实现对某一栋宿舍楼的学生进行增加、删除、修改和查看操作。学生管理模块功能结构如 REF _Ref326698010 r h 图11所示:学生管

23、理模块功能结构图3.4.1 数据结构设计根据学生表设计了结构体oracle_Student,用于保存学生信息。结构体的成员变量说明如 REF _Ref326698015 r h 表2所示:oracle_Student结构体成员变量说明成员变量定义成员变量说明备注int SID学生学号char Sname12学生姓名中文字符串char Ssex4学生性别中文字符串int Sage年龄int SqqQQ号char Smphone12 手机号数字字符串char Stphone12座机号数字字符串char Semail50邮箱int SroomID宿舍号初始赋值为0int SbuildingID宿舍楼

24、号char addr128地址char Svalue598额外信息用于描述别的信息3.4.2 添加学生与删除学生添加学生功能可以在学生表中增加一行学生信息,由于学生表中设置了学号为主键,所以添加一行学生信息时其学号不能为表中已存在的学号。故在添加学生要预先检查该学号的学生信息是否已经存在于学生表中。添加学生方法:首先接受客户端传入待添加学生信息,判断其学号是否与学生表中某一个学生的学号相同。如果相同,向客户端发送学生已存在信息并中止后续操作;否则将学生信息添加入学生表。判断该学号学生是否存在于学生表关键代码:exec sql select sid into :studentCount from

25、 sm_student where sid=:ora_stu2.SID; /查看用户表中是否存在该学生if(Count) /如果存在exec sql commit work release; /关闭对数据的访问return 1; /返回1else/如果不存在exec sql commit work release; /关闭对数据库的访问return 0; /返回0删除学生功能可以从学生表中删除一行学生信息,删除学生同样预先判断学生是否存在于学生表中在做后续操作。由于同删除账户类似,对删除学生流程不再做赘述。3.4.3 修改学生修改学生功能可以实现修改学生表中的某个学生信息,在修改某个学生之前需

26、要判断该学生是否再找与学生表中。由于一行学生信息包含了大量信息内容,对一行学生信息每个字段进行修改显得比较麻烦,所以对修改学生信息功能采用了先删除再添加的方式,即删除当前学生然后将新的学生信息插入学生表。修改学生程序流程如 REF _Ref326698023 r h 图12所示:修改学生程序流程图3.4.4 查看学生查看学生功能可以查看某一栋宿舍楼的所有学生信息,当服务器接收到客户端的查看学生请求消息后,可以根据请求信息中的数据获取宿舍楼栋号,然后根据栋号从学生表中查找出所有该栋宿舍楼的学生信息并统计出学生总数。然后将学生总数和获取到的学生信息发送给客户端。一次查看学生操作服务器运行情况如 R

27、EF _Ref326698030 r h 图13所示:查看学生操作服务器运行图3.5 寝室管理功能服务器端的设计与实现寝室管理功能是整个宿舍管理模块中最为重要的部分,可以说宿舍管理模块的主要目的就是实现对寝室的管理。通过寝室管理功能,用户可以实现增添寝室,查看寝室的学生信息,为寝室添加学生等必要的对寝室进行管理的行为。寝室管理模块的功能结构如 REF _Ref326698036 r h 图14所示:寝室管理模块功能结构图3.5.1 数据结构设计根据寝室表设计了结构体oracle_Room和oracle_Score,用于保存寝室信息和寝室纪律评分信息,结构体的成员变量说明如 REF _Ref32

28、6698043 r h 表3和 REF _Ref326698049 r h 表4所示:oracle_Room结构体成员变量说明成员变量定义成员变量说明备注int roomID寝室号int roomMan寝室人数int roomCapacity寝室容量一个宿舍的可住人数int buildingID所属栋号int roomMg室长学号赋值为0oracle_Score结构体成员变量说明成员变量定义成员变量说明备注int roomID寝室号int buildingID所属栋号char time8时间格式:YYYY-DDint health卫生评分int discipline纪律评分int medal称

29、号0到3char situation100评价3.5.2 添加寝室学生添加寝室学生功能可以为一个没有满员的宿舍增加尚未入住寝室的学生,它还包含了两个子功能:查看有空位的寝室和未入住寝室的学生。由于寝室表中有寝室容量字段和寝室人数字段,所以判断一个寝室是否有空位只需要判断寝室容量减去寝室人数是否大于0,如果大于0就说明该寝室尚未满员。而学生表中有寝室号字段,如果一个学生的寝室号为0则说明该学生没有入住寝室。依照以上两种方法可以比较方便的实现查看有空位的寝室和未入住寝室的学生的两个功能。查看有空位的寝室流程:从用客户端发送来的请求消息中获取需要查询的宿舍楼栋号,根据栋号从寝室表中获取所有尚未满员的

30、寝室信息并计算出寝室的数量。然后将寝室的数量和排好序的寝室信息发送给客户端。查看有空位的寝室Pro*c语句:exec sql declare room_cursor cursor for select * from sm_room where buildingid=:ora_room2.buildingID and roomcapacity-roomman0 order by roomID;查看未入住寝室的学生流程:从用客户端发送来的请求消息中获取需要查询的宿舍楼栋号,根据栋号从学生表中获取所有寝室号为0的学生信息并计算出学生的数量。然后将学生数量和排好序的学生信息发送给客户端。查看未入住寝室

31、学生的Pro*c语句:exec sql declare stu_cursor cursor for select * from sm_Student where Sbuildingid=:ora_stu2.SbuildingID and SroomID=0 order by sid;当获取了有空位的寝室和未入住寝室的学生信息后,便可以进行为寝室添加学生的操作了,需要修改学生的宿舍号和宿舍的人数。为寝室添加学生程序流程如 REF _Ref326698065 r h 图15所示:为寝室添加学生程序流程图3.5.3 删除寝室学生删除寝室学生功能可以为一个有学生入住的宿舍删除寝室内的学生,它包含了两个

32、子功能:查看有人入住的寝室和查看某寝室内的学生。 查看有人入住的寝室方法:从客户端发送来的请求消息中获取需要查询的宿舍楼栋号,根据栋号从寝室表中获取所有寝室人数大于0的寝室信息并计算出有人入住寝室的总数。然后把寝室数量和排好序的寝室信息发送给客户端。查看有人入住寝室的Pro*c语句:exec sql declare room_cursor cursor for select * from sm_room where buildingid=:ora_room2.buildingID and roomman0 order by roomID;实现查看某寝室的学生方法:从用客户端发送来的请求消息中获

33、取需要查询的宿舍楼栋号与寝室号,然后在学生表中查找出所有栋号和寝室号与之相同的学生信息并计算出学生的数量。然后把数量和排好序的学生信息发送给客户端。 查看未入住寝室学生的Pro*c语句:exec sql declare stu_cursor cursor for select * from sm_Student where Sbuildingid=:ora_stu2.SbuildingID and SroomID=:ora_stu2.SroomID order by sid;当获取了有人入住的寝室的学生信息后,就可以进行为寝室删除已入住的学生的操作了,同样需要修改学生的宿舍号和宿舍的人数。为寝

34、室删除学生的程序流程如 REF _Ref326698076 r h 图16所示:为寝室删除学生程序流程图3.5.4 寝室纪律评分纪律评分功能可以实现对一栋的所有宿舍进行纪律管理,它由添加寝室评分和查看寝室评分两部分组成。添加寝室评分可以为一个宿舍增加一条评分信息,同时也会自动记录添加评分的时间。实现添加寝室评分的方法:从客户端发送来的请求消息中获取某个寝室的评分信息,然后生成时间日期将评分信息插入纪律评分表。查看寝室评分功能可以实现对某一宿舍楼的某一个月的所有寝室评分信息进行查询。实现查看寝室评分的方法:从客户端发送来的请求消息中获取宿舍楼栋号和年月信息,然后从评分表中查找出该宿舍楼该年月的所

35、有评分信息并统计出条数。然后将数量和所有评分信息发送给客户端。增加评分与查看评分服务器运行情况如 REF _Ref326698083 r h 图17所示:增加和查看寝室评分图3.5.5 增加寝室与查看寝室增加寝室和查看寝室功能可以实现对寝室的增添和对某一栋宿舍楼所有寝室信息进行查询。由于对寝室的增添与查看和账户管理、学生管理中的增添查看功能极其相似,对其设计与流程不做赘述。公共聊天室的设计与实现在大学生宿舍管理系统中,公共聊天室是重要的组成部分,它支持多个用户同时进行实时的文字聊天。与宿舍管理模块相似,公共聊天室同样由服务器和客户端两部分组成,服务器主要负责将每个用户发送的聊天信息转发给在线的

36、其他用户,同时对进入聊天室的用户进行管理;客户端负责与用户进行交互,获取用户的输入信息并将其发送至服务器,同时将从服务器接收到的必要信息以图形方式向用户展示。4.1 公共聊天室简介本聊天室支持发送聊天信息,设置颜色和字体,发送表情,显示当前在线用户等诸多功能。本章将对这些功能的设计和实现做详细的描述,并对这些功能的具体效果进行演示。聊天室界面如 REF _Ref326698089 r h 图18所示:聊天室界面图4.2 聊天室的总体设计公共聊天室同样采取了C/S结构,服务器和客户端各自完成不同的任务,通过网络通信进行联系。服务器需要为客户端提供高效、稳定的服务,客户端需要给用户提供友好、方便的

37、界面。4.2.1 服务器总体设计服务器程序由C语言编写,无图形界面以求高效率,通过调用LINUX的系统库函数实现文件I/O和网络通信。采用多线程模型,即每当有一个用户连接到服务器后,服务器主线程将创建一个子线程为该用户服务。当用户发出退出请求或者断开连接后,将关闭子线程并释放相应的资源。服务器维护了一个客户链表用于保存和管理用户信息,各个线程对客户链表的访问采用了互斥锁机制,即当一个线程正在对客户链表进行访问时,别的线程无法访问链表。聊天室服务器程序的主线程程序流程与宿舍管理服务器主线程程序流程完全相同,而子线程也大体一样,只是不需要核对用户名密码信息,同时在往用户链表添加删除用户的同时会向客

38、户端发送信息以提示客户端更新在线用户信息。所以对服务器程序流程不在做详细的描述。4.2.2 数据结构设计根据聊天室需求设计了pthtread_LinkedList链表,供服务器用于保存所有聊天室用户信息,结构体的成员变量和函数说明如 REF _Ref326698097 r h 表5和 REF _Ref326698103 r h 表6所示:PthreadNode节点结构体成员变量说明成员变量定义成员变量说明备注PthreadNode *next指向下一个节点指针无下一个节点为空PthreadNode *pre指向上一个节点指针无上一个节点为空int sockfdsocket文件描述符char n

39、ame16用户名char qqName16聊天室昵称中文字符串链表函数说明 函数名返回类型形参类型函数作用initListvoid(pthread_LinkedList*)初始化链表traverseListvoid(pthread_LinkedList*)遍历链表add_backvoid(pthread_LinkedList*,PthreadNode*)在链表尾部插入节点deleteNodevoid(pthread_LinkedList*,PthreadNode*)从链表中删除某个接节点4.2.3 客户端总体设计客户端由C+语言编写,使用QT的图形库来完成图形界面,同时调用LINUX系统库函数

40、完成网络通信等功能。客户端的功能的实现主要依靠以下两个工作:与服务器通信工作和与用户交互工作。由于客户端需要在接收用户输入的同时,不断从服务器接收数据并反馈到图形界面上,所以需要创建一个子线程来专门完成此任务。当客户端与服务器断开连接后,客户端需向用户提示断开连接信息,并做相应的操作(释放资源、关闭程序等)。4.2.3 客户端程序流程图聊天室客户端程序流程如 REF _Ref326698116 r h 图19所示:聊天室客户端程序流程图4.3 用户登录与显示在线用户的设计与实现4.3.1 用户登录客户端用户登录功能负责在客户端启动后,生成用户登录界面,供用户设置聊天室昵称并连接到服务器。用户登

41、录界面如 REF _Ref326698123 r h 图20所示:用户登录界面图用户登录界面会要求用户输入自己的聊天室昵称,并会检查用户输入昵称是否符合要求,如果不符合会弹出错误信息并让用户重新输入。当用户设置完昵称后,客户端将会尝试连接到服务器,如果连接失败将弹出错信息并关闭程序,成功连接到后会关闭登录界面,生成聊天室界面。4.3.2 用户登录服务器服务器会在客户端连接到服务器后创建一个子线程与客户端进行通信,并在用户链表的尾部插入新登录的用户信息。然后遍历用户链表,向用户链表中的每一个用户发送新用户登录消息,提醒客户端更新在线用户信息。4.3.3 显示当前在线用户用户设置完昵称并进入聊天室

42、后,在线用户界面会显示此时聊天室中的所有用户信息和用户人数。显示在线用户界面如 REF _Ref326698128 r h 图21所示:显示在线用户界面图当客户端连接到服务器,服务子线程将新用户信息添加到用户链表后,会对用户链表进行一次遍历,然后将链表中所有用户的信息一条一条的发送给客户端。客户端每接受到一条信息便会往在线用户界面中添加一个用户,并修改当前的在线人数。在线用户界面中添加一个用户关键代码如下所示:void ChatRoomClient:addUserItem(int i) /添加用户char imagePath50; /定义文件路径sprintf(imagePath,:/Head

43、Image/head%d.png,i%15+1); /计算出头像的文件路径QListWidgetItem* userItem = new QListWidgetItem(QIcon(imagePath),trUtf8(contral.userNodei.qqName)+tr()+tr(contral.userN)+tr();ui-UserlistWidget-addItem(userItem); /在在线用户界面中添加一个用户char userNumber4 = 0;sprintf(userNumber,%d 人,i+1); /拼接出在线人数ui-onlineNumber-s

44、etText(trUtf8(userNumber); /修改在线人数4.3.4 动态修改在线用户当有用户进入或者退出聊天室时,在线用户界面会动态的修改在线用户信息和在线用户人数。实现动态添加在线用户的方法:一个新的用户进入聊天室并被添加到用户链表后,服务器立即向链表中的所有用户发送新用户登入的消息和新用户的必要数据信息;客户端接收到新用户登入消息后,加新登录的用户信息添加到在线用户界面并修改在线人数。实现动态删除在线用户的方法:一个在线用户退出聊天室后,服务器从用户链表中删除此用户信息并关闭与此用户的网络通信,然后向所有链表中的所有用户发出用户退出消息,最后为此用户服务的子线程;客户端接收到有

45、用户退出消息后,从在线用户界面删除退出的用户信息并修改在线人数。动态修改在线用户程序流程如 REF _Ref326698141 r h 图22所示:动态修改在线用户程序流程图4.4 文本格式与表情的设计与实现4.4.1 设置文字的字体与颜色为了给用户带来良好的聊天体验,聊天室客户端支持用户自定义文字字体和文字颜色功能。设置字体与文字颜色的方法:设置字体与文字颜色的方法比较简单,主要是利用了QFontDialog和QColorDialog两个类供用户选择操作系统支持的字体和文字颜色。获取到用户对文字的设置,将会把设置好的字体与颜色信息分别存入一个QFont类对象和一个QColor类对象,然后便可

46、以使用这两个对象设置输入聊天信息文本编辑框的文字样式了。设置文字的字体的关键代码下所示:void ChatRoomClient:on_fontButton_clicked() /设置文字字体格式 ui-faceButton-setChecked(false); /设置表情按钮为未按下 bool ok; QFont font = QFontDialog:getFont( &ok, QFont(Helvetica Cronyx, 10), this);/获取字体 if(ok) /如果获取成功 ui-inputTextEdit-setFont(font);4.4.2 设置聊天表情在线上聊天中,用户常

47、常想用把自己心情比如高兴、伤心、紧张等信息展示给对方。但是使用文字来表达这些信息的时候,往往显得索然无味,即使是有些良好文学功底的用户,对于一些比较特殊的心理活动也很难用文字进行描述。而聊天表情就能很好的满足反映用户心理活动的功能,它由一些简单、有趣的图片组成。本聊天室客户端为提供40个聊天表情供用户使用,如 REF _Ref326698156 r h 图23所示:聊天表情图设置聊天表情的方法:每一个聊天表情实际上为一张png格式的图片,为了让用户能使用这些图片,先要预先将图片作为资源预先加载到文本编辑框的资源库中,然后利用QListWidget类,将这些表情以图标的形式供用户选择。当用户选择

48、了某个表情后,便可以获取到用户选择的图标的索引,然后计算出表情图片的资源路径,然后将表情图片显示到文本编辑框的当前光标位置后。设置聊天表情程序流程如 REF _Ref326698162 r h 图24所示:设置聊天表情程序流程图4.5 发送与接收聊天信息的设计与实现发送与接收聊天信息功能是聊天室程序中最重要的部分,无论是显示在线用户信息还是设置聊天内容的样式都只是为了给用户带来一些视觉上的享受。而要实现多个用户的实时交流,对聊天信息的发送与接收才是真正的核心。4.5.1 发送聊天信息发送消息功能由两部分组成:客户端将用户的聊天内容发送到客户端和服务器将受到的信息转发给所有在线用户。发送信息的实

49、现方法:当用户点击了发送按钮后将触发发送信息槽函数,由于用户的聊天内容中包含了图片和不同的文字格式,而朴素文本(plainText)并不能满足对这些信息的存储,所以需要将其转换成html格式然后在发送给服务器。服务器接收到客户端发来的信息后,把信息转发给用户链表上的所有用户。发送聊天信息程序流程如 REF _Ref326698168 r h 图25所示:发送聊天信息程序流图4.5.2 接收聊天信息接收聊天信息功能可以让客户端从服务器接收其他的用户发送的聊天信息,并在文本编辑框上按照一定格式显示。聊天信息显示格式如 REF _Ref326698174 r h 图26所示:消息显示框图接收聊天信息

50、并显示的实现方法:客户从服务器接收到一条聊天信息中已经包含了用户信息、发送时间和聊天内容信息,所以只需要先将用户信息和发送时间拼接成一个字符串,然后设定颜色为蓝色添加到消息显示框。然后在将html格式的聊天信息读出,再次做一次添加,就可以完成一次对聊天信息的接收显示任务。为了使聊天信息一行接着一行添加到消息显示框中,需要使用控件库中的QTextEditWidget类的append(Qstring)函数来做添加操作。实现接收聊天信息功能的关键代码如下所示:else if(strcmp(msg.type,”TM”) = 0) /判断消息为聊天消息QString info = trUtf8(text

51、MSG*)(msg.data)-info); /获取用户信息和发送时间QString htmlData = trUtf8(textMSG*)(msg.data)-htmldata);/获取聊天内容emit appendTextMessage(info); /为显示用户信息和时间发送添加信号emit appendTextMessage(htmlData); /显示聊天内容信息发送添加信号系统测试5.1 测试环境服务器:操作系统Red Hat Enterprise Linux 5,内存1G或以上客户端:操作系统Fedora13,内存512M或以上5.2 测试方式软件测试的方法主要分为白盒测试和黑盒

52、测试。白盒测试是通过分析程序内部的逻辑与执行路线,设计测试用例进行测试的方法,它又称为结构化测试或路径测试,通常使用于相对较小的程序。黑盒测试是把程序或系统看成一个黑盒子,完全不考虑其内部结构和处理过程,主要是测试各个程序或功能模块之间的接口,检查系统功能是否能按照设计书的规定正常执行,是否能接收正确的输入数据产生正确的输出结果。5.3 测试及结果本系统的测试采用了黑盒测试的方式,测试人员非系统开发人员以求测试结果更加具有实际意义。本次测试主要是测试聊天室功能模块,其测试用例及其结果如 REF _Ref326698186 r h 表7所示:聊天室功能模块测试结果序号功能模块功能测试用例预期结果

53、实际结果1聊天室用户登录输入昵称并点击“确定”按钮进入聊天室进入聊天室2聊天室显示在线用户输入昵称并点击“确定”按钮显示所有在线用户信息显示所有在线用户信息3聊天室在线用户变化不断运行和关闭新的聊天室客户端程序在线用户信息和人数动态增减在线用户信息和人数动态增减4聊天室设置表情点击“表情”按钮并选择聊天表情消息输入框中光标位置显示表情消息输入框中光标位置显示表情5聊天室设置文字格式点击“字体”和“颜色”并选择的字体和颜色消息输入框中文字的颜色和字体改变消息输入框中文字的颜色和字体改变6聊天室发送接收消息输入聊天信息并点击“发送”按钮消息显示框中显示正确格式的聊天信息消息显示框中显示正确格式的聊天信息结 语经过5个月的努力,通过艰苦学习、研究、思考和工作,终于完成了“学生宿舍管理系统”这一系统的构建,达到了毕业设计的预期目标,也学到了相当多的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论