Linpop东软实训详细设计.docx
- 文档编号:18125338
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:20
- 大小:204.07KB
Linpop东软实训详细设计.docx
《Linpop东软实训详细设计.docx》由会员分享,可在线阅读,更多相关《Linpop东软实训详细设计.docx(20页珍藏版)》请在冰点文库上搜索。
Linpop东软实训详细设计
文档编号:
_2014_7_10
项目名称:
Linpop
项目编号:
Linpop详细设计
主界面模块
版本:
5.0
2014-07-10
东软集团股份有限公司人才实训中心
(版权所有,翻版必究)
总页数
20
正文
15
附录
0
生效日期
20140710
编制
批准
文件修改控制
修改编号
版本
修改条款及内容
修改日期
1
0.0
文档创建
2014-07-03
2
2.0
文档撰写
2014-07-07
3
5.0
文档排版
2014-07-10
目录
1文档概述5
1.1文档目的和范围5
1.2参考文档5
2主界面模块5
2.1数据结构定义5
2.2自定义数据类型-结构体、联合体、枚举6
2.2.1类型定义6
2.2.2全局变量定义6
2.3函数功能实现7
3聊天窗口设计模块9
3.1窗口详细设计图9
3.2函数功能实现11
4通信模块11
4.1数据结构定义11
4.2自定义数据类型-结构体、联合体、枚举12
4.2.1类型定义12
4.2.2全局变量定义12
4.3函数功能实现13
4.3.1Init_Socket13
4.3.2send_msg14
4.3.3recv_msg_thread14
4.3.4process_file_trans15
4.3.5send_file_thread15
4.3.6recv_file_thread16
4.3.7str_suffix_addition16
4.3.8str_suffix_filename17
4.4流程图17
5数据库模块18
5.1创建数据库18
5.2数据库建表及字段定义18
5.2.1说明18
5.3提供的数据操作19
5.3.1增添用户19
5.3.2修改用户信息19
5.3.3查找用户19
1文档概述
1.1文档目的和范围
详细设计的目的是指导编码,说明一个软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑。
本文档将Linpop项目中主界面模块的实现算法、所需的局部数据结构等详细阐述。
1.2参考文档
序号
文档名
作者
时间
版本
1
Linpop_概要设计_62组_201477
2014-7-5
1.0
2
2主界面模块
本模块能够与用户交互操作,对用户的操作做出相应的反馈。
能够显示个人基本信息与好友列表。
同时在双击好友时引出聊天窗口。
2.1数据结构定义
typedefstruct
{
charuser_head[20];//用户头像
charuser_name[21];//用户名
charuser_ip[20];//用户IP
charuser_signature[51];//用户签名
charuser_group[21];//用户所在组
}user;
此结构体主要用于存储用户的信息,其中包括用户头像,用户名,用户IP,用户心情,用户组。
2.2自定义数据类型-结构体、联合体、枚举
2.2.1类型定义
2.2.1.1user_t
typedefstruct
{
charuser_id[16];//用户id
charuser_head[20];//用户头像所在路径
charuser_name[21];//用户名
charuser_ip[20];//用户IP
charuser_signature[51];//用户签名
charuser_group[21];//用户所在组
charchat_path[32];//聊天记录所在路径
}user;
此结构体主要用于存储用户的信息,其中包括用户头像,用户id,用户名,用户IP,用户签名,用户组,聊天记录所在路径。
2.2.2全局变量定义
GtkWidget*linpop_window说明:
主窗口的指针
GtkWidget*login_window说明:
登陆窗口的指针
2.3函数功能实现
函数名
create_linpopwnd
文件名
Linpopwnd.c
功能概要
启动聊天窗口
记述形式
GtkWidget*create_linpopwnd()
参数
类型
变量名
I/O
说明
返回值
类型
GtkWidget
说明
值
Linpop_window
启动聊天窗口是否成功
详细说明
1.程序登陆成功自动显示
使用注意事项
函数名
create_login_wnd
文件名
Linpopwnd.c
功能概要
获取用户信息
记述形式
GtkWidget*create_linpopwnd()
参数
类型
变量名
I/O
说明
返回值
类型
GtkWidget*
说明
值
login_window
显示登陆界面
详细说明
1.程序登陆成功自动显示
使用注意事项
函数名
enter_callback
文件名
Linpopwnd.c
功能概要
获取用户信息
记述形式
Voidenter_callback(GtkWidget*widget,GtkWidget*entry)
参数
类型
变量名
I/O
说明
GtkWidget*
Widget;
I
GtkWidget
entry
I
返回值
类型
说明
void
值
NULL
详细说明
1.登陆成功,进入主界面
使用注意事项
图2-1gtk_wnd_init流程图
3聊天窗口设计模块
3.1窗口详细设计图
3.2函数功能实现
函数名
create_chat_dlg
文件名
chat_dlg.c
功能概要
启动聊天窗口
记述形式
create_chat_dlg(gchar*text_id,intface_num,gbooleangroup)
参数
类型
变量名
I/O
说明
gchar
text_id
I
int
Face_num
I
gboolean
group
返回值
类型
说明
值
TRUE/FALSE
启动聊天窗口是否成功
详细说明
1.主函数调用该接口实现聊天窗口的启动。
2.在聊天窗口内各table中实现不同功能。
3.关闭聊天窗口返回到主界面
使用注意事项
4通信模块
此Socket通信模块旨在通过用户给定的IP地址与服务器建立连接。
通过基于对话框的链接界面进行上传工作。
4.1数据结构定义
typedefstruct
{
char*file_path;//文件路径
unsignedlongfile_size;//文件大小
unsignedintuser_index;//发来消息的id在用户信息数组中的位置
intsock;
}s_send_info;//文件传送需要的结构体,发送和接收文件thread中使用
4.2自定义数据类型-结构体、联合体、枚举
4.2.1类型定义
typedefstruct
{
char*file_path;//文件路径
unsignedlongfile_size;//文件大小
unsignedintuser_index;//发来消息的id在用户信息数组中的位置
intsock;
}s_send_info;//文件传送需要的结构体,发送和接收文件thread中使用
4.2.2全局变量定义
(1)外部接口设计
1、intinit_socket(constchar*servip,uintuport)
说明:
初始化与服务器的连接,并创建数据接收线程,由客户端GTK+模块调用
2、intsend_msg(constchar*text,intsize)
说明:
发送数据给服务器,由客户端GTK+模块调用
(2)内部接口设计
1、void*recv_msg_thread(void*arg)
说明:
接收服务器发送的数据线程,死循环一直接收
2、voidprocess_file_trans(char*recv_buf,intrecv_len)
说明:
当需要进行文件传送时,处理文件传送的初始化工作
3、void*send_file_thread(void*send_info)
说明:
文件数据发送线程
4、void*recv_file_thread(void*send_info)
说明:
文件数据接收线程
5、char*str_suffix_addition(constchar*str,int*index)
说明:
将字符串数据,根据末尾符号“-”分离出附加信息,例如文件大小,是否接收文件等,同时回传文件路径信息(包含文件名)
6、char*str_suffix_filename(constchar*str);
说明:
从文件路径字符串中分离出文件名,不包含路径信息,供接收方用。
4.3函数功能实现
4.3.1Init_Socket
函数名
InitSocket
文件名
client_socket.h
功能概要
始化与服务器的连接,并创建数据接收线程,由客户端GTK+模块调用
记述形式
intinit_socket(constchar*servip,uintuport)
参数
类型
变量名
I/O
说明
constchar*
servip
I
uint
uport
I
返回值
类型
int
说明
值
是否成功连接服务器
初始化成功
详细说明
1.如果已经创建线程,则先关闭
2.在INT上通信
3.绑定数据
4.监听线程数据
使用注意事项
4.3.2send_msg
函数名
send_msg
文件名
client_socket.h
功能概要
发送数据给服务器,由客户端GTK+模块调用
记述形式
intsend_msg(constchar*text,intsize)
参数
类型
变量名
I/O
说明
constchar*
text
O
int
size
O
返回值
类型
int
说明
值
发送字节数
详细说明
1.发送数据缓冲区text
2.返回发送字节数
使用注意事项
4.3.3recv_msg_thread
函数名
recv_msg_thread
文件名
client_socket.h
功能概要
接收服务器发送的数据线程,死循环一直接收
记述形式
void*recv_msg_thread(void*arg)
参数
类型
变量名
I/O
说明
void*
arg
I
返回值
类型
void
说明
值
详细说明
1.创建一个线程,接收服务器数据
2.成为死循环,使不断接收服务器发送数据
使用注意事项
4.3.4process_file_trans
函数名
process_file_trans
文件名
client_socket.h
功能概要
当需要进行文件传送时,处理文件传送的初始化工作
记述形式
voidprocess_file_trans(char*recv_buf,intrecv_len)
参数
类型
变量名
I/O
说明
char*
recv_buf
I
int
recv_len
I
返回值
类型
void
说明
值
详细说明
1.查找id对应的用户信息
2.发送方收到接收方的应答,接收方方同意接收
3.发送方收到接收方的应答,接收方方拒绝接收
4.接收方,给与发送方应答
使用注意事项
4.3.5send_file_thread
函数名
send_file_thread
文件名
client_socket.h
功能概要
文件数据发送线程
记述形式
void*send_file_thread(void*send_info)
参数
类型
变量名
I/O
说明
void*
send_info
O
返回值
类型
void
说明
值
详细说明
1.根据参数send_info获得与之传输文件的用户id,利用g_datalist_get_data获得相关的聊天窗口集所关联的数据到Widgets_Chat指针类型变量中,若窗口数据不存在,则创建,否则显示聊天对话框
2.根据参数send_info获得文件接收方ip地址,开启文件发送socket,连接接收方socket,文件传输用TCP连接
3.根据参数send_info获得要传输的文件名,并打开
4.循环读取文件数据,发送给接收方
5.更新聊天窗口文件发送进度条
使用注意事项
4.3.6recv_file_thread
函数名
recv_file_thread
文件名
client_socket.h
功能概要
文件数据发送线程
记述形式
void*recv_file_thread(void*send_info)
参数
类型
变量名
I/O
说明
void*
send_info
I
返回值
类型
void
说明
值
FALSE
发送字节数
详细说明
1.根据参数send_info获得与之传输文件的用户id,利用g_datalist_get_data获得相关的聊天窗口集所关联的数据到Widgets_Chat指针类型变量中,若窗口数据不存在,则创建,否则显示聊天对话框
2.开启文件发送socket,连接接收方socket,文件传输用TCP连接,监听文件发送方的连接
3.根据参数send_info获得要传输的文件名,并打开
4.循环接收发送给来的文件数据,写入文件
5.更新聊天窗口文件接收进度条
使用注意事项
4.3.7str_suffix_addition
函数名
str_suffix_addition
文件名
client_socket.h
功能概要
将字符串数据,根据末尾符号“-”分离出附加信息,例如文件大小,是否接收文件等,同时回传文件路径信息(包含文件名)
记述形式
char*str_suffix_addition(constchar*str,int*index)
参数
类型
变量名
I/O
说明
constchar*
str
I
int*
index
I
返回值
类型
char*
说明
值
suffix
文件路径信息
详细说明
使用注意事项
4.3.8str_suffix_filename
函数名
str_suffix_filename
文件名
client_socket.h
功能概要
从文件路径字符串中分离出文件名,不包含路径信息,供接收方用。
记述形式
char*str_suffix_filename(constchar*str)
参数
类型
变量名
I/O
说明
constchar*
str
I
返回值
类型
char*
说明
值
suffix
文件名
详细说明
使用注意事项
4.4流程图
5数据库模块
5.1创建数据库
CreatedatabaseLinPop;
数据库名:
LinPop
MySQL用户名:
root
MySQL密码:
root
Host:
localhost
5.2数据库建表及字段定义
createtableuser_info(
user_idvarchar(16)primarykey,/*主键*/
user_namevarchar(32),/*用户名*/
user_ipvarchar(32),/*用户IP*/
user_headvarchar(32),/*头像路径*/
user_signaturevarchar(128),/*用户签名*/
user_groupvarchar(16),/*用户所在组*/
user_chat_pathvachar(32)/*聊天记录的文本的路径*/
);
5.2.1说明
①只要是扫描到IP的即为好友,并对应各组,若未将该好友分组则标明“未分组(默认)”
②每次有用户更新个人信息,更新方发送广播告知改动的信息(将所有的个人信息告知所有用户)
同时,接收到好友更新的信息,便对好友信息数据予以改动
③好友数据库表用于在主界面显示好友信息(通过抓包获取好友的信息)
故而,此表与本地用户共用一张用户信息表。
5.3提供的数据操作
5.3.1增添用户
函数/方法:
booleanadd_user(char*sql);//(char*)sql为数据库需执行的SQL语句,返回值非零即添加成功
调用时使用方法:
char[]sql=”insertintouser_infovalues(user_id=argv[0],user_name=argv[1],user_ip=argv[2],user_head=argv[3],user_signature=argv[4],user_group=argv[5],user_chat_path=argv[6]);”;
if(add_user(sql)!
=0){
printf(“addusersuccessfully”);
}else{...}
5.3.2修改用户信息
函数/方法:
booleanupdate_user_info(char*sql);//(char*)sql为数据库需执行的SQL语句,返回值非零即修改成功
调用时使用方法:
char[]sql=”updateuser_infoset(user_head=?
user_group=?
);”;//?
即所要修改的信息,请按需求添加字段予以修改用户信息
if(update_user_info(char*sql)!
=0){
printf(“addusersuccessfully”);
}else{...}
5.3.3查找用户
函数/方法:
MYSQL_RESget_user_info(char*sql);//(char*)sql为数据库需执行的SQL语句,查找成功则返回MYSQL_RES(返回记录)
调用时使用方法:
char[]sql=”select*fromuser_info;”;//按照需求,“*”可用user_info表中相应的列名代替从而查找到精确的信息
MYSQL_RES*results;
results=query_test(sql);//获取记录
while((row=mysql_fetch_row(results))){
/*例:
获取每一行记录*/
printf("%s---%s",row[0],row[1]);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linpop 东软实训 详细 设计