linux课程设计Word下载.docx

上传人:b****7 文档编号:22475116 上传时间:2023-02-04 格式:DOCX 页数:50 大小:159.09KB
下载 相关 举报
linux课程设计Word下载.docx_第1页
第1页 / 共50页
linux课程设计Word下载.docx_第2页
第2页 / 共50页
linux课程设计Word下载.docx_第3页
第3页 / 共50页
linux课程设计Word下载.docx_第4页
第4页 / 共50页
linux课程设计Word下载.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

linux课程设计Word下载.docx

《linux课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《linux课程设计Word下载.docx(50页珍藏版)》请在冰豆网上搜索。

linux课程设计Word下载.docx

1.3课程设计总体要求

在Lniux下用GTK实现网络聊天的功能。

第二章系统方案

本实验是一个Linux下的网络即时通信工具,系统功能与模块划分如下2.1系统功能

本系统的功能主要是在linux平台下用GTK实现网络聊天的功能。

2.1功能模块图

客户端

服务器

第三章实验项目的人员组成及职责划分

我们实验组总共由2个同学组成,姓名,专业,学号及职责划分如下:

①胡海强(专业及班级:

软件工程091班,学号099074146),小组组长,负责代码编写、测试及课程设计报告书编写。

②张文敬(专业班级:

软件工程091班,学号:

099074169),负责部分代码的编写,测试及课程设计报告书编写。

孙玲(专业及班级:

软件工程091班,学号099074155),负责测试及课程设计报告书编写。

纵清华(专业班级:

099074174),负责测试及课程设计报告书编写。

第四章设计与实现

4.1系统结构

4.1.1系统结构图

4.2客户端

4.2.1登录模块

登录模块截图

登录模块代码:

voidload()

{

GtkWidget*window;

GtkWidget*table;

GtkWidget*entry;

use_ruser;

GtkWidget*login;

GtkWidget*regist;

window=gtk_dialog_new();

////在内存中创建一个新的对话框

log_dialog=window;

//在销毁时使用

gtk_window_set_title((GtkWindow*)window,"

登录..."

);

gtk_window_set_default_size(GTK_WINDOW(window),200,100);

//宽和高

gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);

//设置刚开始的位置是在屏幕中央

//创建一个表格,再包含进对话框中

table=gtk_table_new(3,3,TRUE);

//6行6列

gtk_container_add(GTK_BOX(GTK_DIALOG(window)->

action_area),table);

//创建一个标签

entry=gtk_label_new("

用户名:

"

gtk_table_attach(GTK_TABLE(table),entry,0,1,0,1,GTK_FILL,GTK_FILL,0,0);

//

密码:

gtk_table_attach(GTK_TABLE(table),entry,0,1,1,2,GTK_FILL,GTK_FILL,0,0);

//创建一个文本区

user.userName=gtk_entry_new_with_max_length(20);

//限制用户名输入的字符,不能超过20个字节

gtk_table_attach(GTK_TABLE(table),user.userName,1,3,0,1,GTK_FILL,GTK_FILL,0,0);

user.passwd=gtk_entry_new_with_max_length(10);

//限制密码最多不能超过10个字节

gtk_entry_set_visibility(GTK_ENTRY(user.passwd),FALSE);

//在显示字符的地方用不可见字符代替

gtk_table_attach(GTK_TABLE(table),user.passwd,1,3,1,2,GTK_FILL,GTK_FILL,0,0);

login=gtk_button_new_with_label("

登录"

gtk_table_attach(GTK_TABLE(table),login,2,3,2,3,GTK_FILL,GTK_FILL,0,0);

regist=gtk_button_new_with_label("

注册"

gtk_table_attach(GTK_TABLE(table),regist,0,1,2,3,GTK_FILL,GTK_FILL,0,0);

//前面将登录的界面构建成功

//将真正的功能赋予这些按钮,即连接回调函数,通过信号传递

g_signal_connect(G_OBJECT(login),"

clicked"

G_CALLBACK(log_hwQQ),&

user);

g_signal_connect(G_OBJECT(regist),"

G_CALLBACK(reg_hwQQ),NULL);

g_signal_connect(G_OBJECT(window),"

destroy"

G_CALLBACK(quit),NULL);

gtk_widget_show_all(window);

gtk_main();

//把控制权交给GTK+来启动交互过程,并且一直运行,直到调用gtk_main_quit()才返回

}

voidlog_hwQQ(GtkWidget*login,use_r*user)//点击登录时,产生的动作

//需要先设置登录状态,此时还没有登录成功,所以为0

logSta=0;

if(strcmp(gtk_entry_get_text(GTK_ENTRY(user->

userName)),"

)==0||

strcmp(gtk_entry_get_text(GTK_ENTRY(user->

passwd)),"

)==0)

{

g_print("

用户名或密码不能为空,请重新登录!

\n"

//终端输出

return;

}

//设置好信息的相关内容,再进行发送

messageMess;

strcpy(Mess.gusName,gtk_entry_get_text(GTK_ENTRY(user->

userName)));

strcpy(Mess.pawd,gtk_entry_get_text(GTK_ENTRY(user->

passwd)));

strcpy(useName,Mess.gusName);

strcpy(pawd,Mess.pawd);

//printf("

yonghu%s"

useName);

mima%s"

pawd);

Mess.flags=2;

//代表登录

//发送

write(sockfd,(char*)&

Mess,sizeof(message));

while

(1)

if(logSta!

=0)//如果状态不是登录成功的状态,就一直等待,死循环

break;

if(logSta==1)//登录成功,需要将该登录界面销毁,同时打开hw_QQ界面

gtk_widget_destroy(GTK_WIDGET(log_dialog));

/*恭喜您,已经登录成功!

(客户端)*/\n"

//进入hw_QQ界面,可通过选择好友来聊天,但还不是聊天的界面

chatmain_dialog();

}

4.2.2注册模块

注册模块截图

注册模块代码

voidreg_handle(GtkWidget*resButton,r_user*p_re_user)

if(strcmp(gtk_entry_get_text(GTK_ENTRY(p_re_user->

strcmp(gtk_entry_get_text(GTK_ENTRY(p_re_user->

agaPasswd)),"

用户名,密码或确认密码不能为空,请重新输入!

passwd)),gtk_entry_get_text(GTK_ENTRY(p_re_user->

agaPasswd)))!

=0)

密码和确认密码不一致,请重新输入!

//要传送的消息构造

messageresMess;

strcpy(resMess.gusName,gtk_entry_get_text(GTK_ENTRY(p_re_user->

strcpy(resMess.pawd,gtk_entry_get_text(GTK_ENTRY(p_re_user->

resMess.flags=1;

//代表注册消息

//可以传送该消息了,将注册消息传送至服务器端

resMess,sizeof(message));

gtk_widget_destroy(GTK_WIDGET(reg_dialog));

/*恭喜你,注册成功!

//类似于登录的界面

voidreg_hwQQ(GtkWidget*login,use_r*user)

r_userre_user;

GtkWidget*resButton;

reg_dialog=window;

注册..."

gtk_window_set_default_size(GTK_WINDOW(window),250,130);

table=gtk_table_new(4,3,TRUE);

确认密码:

gtk_table_attach(GTK_TABLE(table),entry,0,1,2,3,GTK_FILL,GTK_FILL,0,0);

re_user.userName=gtk_entry_new_with_max_length(20);

gtk_table_attach(GTK_TABLE(table),re_user.userName,1,3,0,1,GTK_FILL,GTK_FILL,0,0);

re_user.passwd=gtk_entry_new_with_max_length(10);

gtk_entry_set_visibility(GTK_ENTRY(re_user.passwd),FALSE);

gtk_table_attach(GTK_TABLE(table),re_user.passwd,1,3,1,2,GTK_FILL,GTK_FILL,0,0);

re_user.agaPasswd=gtk_entry_new_with_max_length(10);

gtk_entry_set_visibility(GTK_ENTRY(re_user.agaPasswd),FALSE);

gtk_table_attach(GTK_TABLE(table),re_user.agaPasswd,1,3,2,3,GTK_FILL,GTK_FILL,0,0);

resButton=gtk_button_new_with_label("

gtk_table_attach(GTK_TABLE(table),resButton,2,3,3,4,GTK_FILL,GTK_FILL,0,0);

g_signal_connect(G_OBJECT(resButton),"

G_CALLBACK(reg_handle),&

re_user);

4.2.3用户界面设计

用户设计界面截图

用户设计界面代码

voidchatmain_dialog()//登录进入之后的自己聊天好友记录界面

GtkAdjustment*horizontal;

GtkAdjustment*vertical;

GtkWidget*scrollWindow;

GtkWidget*frame;

GtkWidget*button1;

GtkWidget*button2;

//GtkWidget*button3;

charc[20];

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

chatMain_dialog=window;

小强聊天室"

gtk_window_set_default_size(GTK_WINDOW(window),150,300);

table=gtk_table_new(12,12,TRUE);

gtk_container_add(GTK_CONTAINER(window),table);

%s\n"

sprintf(c,"

%s的好友列表"

entry=gtk_label_new(c);

gtk_table_attach(GTK_TABLE(table),entry,0,12,0,1,GTK_FILL,GTK_FILL,0,0);

frame=gtk_frame_new(NULL);

//新建一个框架

gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_IN);

//框架的模式是outline在里面

gtk_table_attach(GTK_TABLE(table),frame,0,12,1,11,GTK_FILL,GTK_FILL,0,0);

list=gtk_list_new();

//GTK_SELECTION_SINGLEselection可以是`NULL`或对一个已选项目,包含一个GList*pointer.

gtk_list_set_selection_mode((GtkList*)list,GTK_SELECTION_SINGLE);

vertical=GTK_ADJUSTMENT(gtk_adjustment_new(0,0,0,1,10,0));

//初始值,最小值,最大值,步进的调整增量.页面的调整的增量.显示页面的大小.

horizontal=GTK_ADJUSTMENT(gtk_adjustment_new(0,0,0,1,10,0));

scrollWindow=gtk_scrolled_window_new(horizontal,vertical);

//创建一个滚动条,包括水平和垂直的

gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWindow)

GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);

//设置水平和垂直滚动条都是需要时才出现

gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWindow),list);

//将列表构件加入滚动窗口中

gtk_container_add(GTK_CONTAINER(frame),scrollWindow);

gtk_list_scroll_vertical(GTK_LIST(list),GTK_SCROLL_END,1);

upda_num=0;

button1=gtk_button_new_with_label("

选择好友"

gtk_table_attach(GTK_TABLE(table),button1,7,11,11,12,GTK_FILL,GTK_FILL,0,0);

button2=gtk_button_new_with_label("

更新列表"

gtk_table_attach(GTK_TABLE(table),button2,1,5,11,12,GTK_FILL,GTK_FILL,0,0);

//button1=gtk_button_new_with_label("

有新消息"

//gtk_table_attach(GTK_TABLE(table),button1,9,12,11,12,GTK_FILL,GTK_FILL,0,0);

g_signal_connect(G_OBJECT(button1),"

G_CALLBACK(seleFriend),NULL);

g_signal_connect(G_OBJECT(button2),"

G_CALLBACK(updaFriend),NULL);

G_CALLBACK(quit_mainChat),NULL);

4.2.4聊天界面设计

聊天界面设计截图

聊天界面设计代码

voidchat_with_friend(guinti)//和好友聊天的对话框,并进行聊天

charfriName[20];

//先要创建聊天的对话框,再将聊天的内容以及要聊天好友的信息传送给服务器端

GtkWidget*dialog;

GtkWidget*recv_list;

//接收

GtkWidget*send_entry;

//发送

//滚动窗口

//横向和纵向的调整对象

GtkWidget*send_button;

//printf("

%d\n"

friends.Friend[i].status);

if(friends.Friend[i].status!

=1)//表示不在线

该好友不在线,不能发送消息!

dialog=gtk_window_new(GTK_WINDOW_TOPLEVEL);

chatDialog[i].dialog=dialog;

sprintf(friName,"

好友%s"

friends.Friend[i].name);

gtk_window_set_title((GtkWindow*)dialog,friName);

gtk_window_set_default_size(GTK_WINDOW(dialog),100,300);

gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER);

3lihuajie\n"

table=gtk_table_new(10,6,TRUE);

gtk_container_add(GTK_CONTAINER(dialog),table);

//将表格加入到对话框中

1buzhidao\n"

//滚动窗口,并设置滚动条出现的情况(都是需要时才出现)

horizontal=GTK_ADJUSTMENT(gtk_adjustment_new(0,0,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1