Linux课程设计报告书模版

合集下载

Linux程序设计课程设计报告

Linux程序设计课程设计报告

Linux程序设计课程设计报告2010-2011学年第二学期设计题目:基于GNOME的菜单构件学号:姓名:成绩评定:日期:目录一、设计任务书 (1)1.1 题目与要求 (1)1.2 本程序涉及的知识点 (1)二、关键技术、程序难点与解决方案 (2)三、功能设计 (3)3.1、程序算法 (3)3.2、主要功能流程图 (5)3.3、具体功能说明图 (5)四、程序设计主要代码 (6)五、Linux程序设计课设总结 (7)一、设计任务书1.1、题目与要求题目:编写一个能够包含菜单构件的GNOME程序要求:顶层菜单包含“文件”和“编辑”两项,其中在文件的子菜单中包含“新建”和“关于”,编辑的子菜单中包含“输入”和“输入”当我们单击文件菜单的子菜单“新建”时,在屏幕上输出“Good Luck !”;当单击“关于”时,在屏幕上输出“Linux C”;当我们单击“输入”时,从终端读入一个字符串(字符串的长可是由编程者自定);当单击“输出”时,从终端输出一我们刚刚读入的字符串,如果没有读入字符串,那么就提出“请先输入字符串:”之后输入字符串,再执行输出。

1.2、本程序涉及的知识点本程序涉及的知识点是首先要弄明白什么是GNOME,在GNOME中的程序设计中,需要知道菜单是如何定义、调用,之后根据对于GNOME的了解再将菜单创建出来,定义函数将菜单的功能实现。

当程序编写完成进行编译、连接时千万不能忘记连接GNOME类库。

GnomeApp构件是GNOME应用程序的基本构件,这个构件能够包含菜单、工具栏和数据的主要实现窗口。

我们可以利用gnome_app_new函数来创建一个新的构件,再调用gnome_app_create_menu或gnome_app_create_toolbar函数就能够实现菜单的功能。

此外,在gnome的程序设计中类库的应用也是非常重要的,libgnome和libgnomeui是任何GNOME编程中都要用到的两个主要库,用来独立于任何特定的GUI工具箱。

Linux课程设计报告书模版

Linux课程设计报告书模版

Linu*系统与程序设计课程设计报告书报告人:目录:1、实验工程目的32、实验工程的功能及模块划分23、实验工程的人员组成及指责划分24、设计与实现34.1 系统构造34.2 客户端界面34.2.1 注册34.2.2 登录44.2.3 界面设计44.2.4查找好友44.3效劳器的实现54.3.1 用户登录54.3.2用户管理54.3.3转发聊天消息54.4 文件操作64.5 通信模块的实现64.5.1 通信方式的选择65、测试与调试66、总结77、附录:程序代码91、实验目的在Linu*下利用java编程实现类似于QQ的通信功能。

实现简单的qq功能:注册、登陆、查找好友、聊天功能效劳端还需实现配置文件设置、用户管理、日志显示的功能。

同时使用到相关的的文件操作以及java编程。

通过这次实验来锻炼在Linu*下的编程能力,主要是熟悉Linu*的编程环境,相关命令的操作、java软件的安装、以及对文件的操作,网络通讯等相关的方面东西。

2、实验工程的功能及模块划分本实验是一个Linu*下的网络即时通信工具,实现三人间的通讯。

这个工程总共分为五个模块客户端,效劳器,通讯,文件操作以及文档维护与测试。

客户端的在分为登录、从效劳器端获取在线人员并显示、选择联系人、向在线人员发送消息。

实时显示别人发给你的消息。

效劳端主要是为客户端提供相关的信息效劳,包括保存登录人员的IP信息、发送给客户端其他登录人员的IP、操作数据库等相关操作。

根本上完成了注册、登陆、聊天功能总体来说可以分为几下几个模块:1〕客户端与效劳器的界面设计2〕客户端的通信局部3〕效劳端的通信局部4〕文件操作5〕文档测试与维护3、实验工程的人员组成及指责划分**:组长,系统分析、整体设计和模块划分**:通信模块设计和编码。

**:客户端以及效劳器界面设计和编码。

**:文档维护和测试。

**:文件操作的设计和编码。

4、设计与实现4.1 系统构造发送信息1转发信息2转发信息1发送信息24. 2. 4 查找好友4.3效劳器的实现4.3.1 用户登录: 当客户端填写相关信息后,点击登录,将会通过UDP协议发送信息至效劳器端,效劳器端将保存客户端的端口信息到文件中。

Linux课程设计实验报告

Linux课程设计实验报告

pdata->activity_mode = !pdata->activity_mode; gtk_progress_bar_pulse (GTK_PROGRESS_BAR (pdata->pbar)); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pdata->pbar),0.00); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pdata->pbar), "0.00"); gtk_container_add (GTK_CONTAINER (align), pdata->pbar); gtk_widget_show (pdata->pbar); /* 加一个定时器(timer), 以更新进度条 的值 */ pdata->timer = gtk_timeout_add (100, progress_timeout, pdata); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0); gtk_widget_show (separator); /* 行数、 列数、 同质性(homogeneous) */ table = gtk_table_new (2, 2, FALSE); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0); gtk_widget_show (table);
3. 通过系统调用实现文件拷贝
5
a.程序说明: 要在 linux 下实现系统调用,首先修改内核中的三个文件,分别是 unistd.h,sys.c 和 syscalltable.s(这个是 2.6 版本和 2.4 版本的区别所在,2.4 版本要改的文件是 entry.s), 然后需要重新编译内核,具体步骤如下: Make clean Make bzImage Make modules Make modules_install Make install 最后一步最为关键,2.6 版本不需要手动修改 grub,只需要执行 make install 就会自动 修改 grub,然后只要在启动时选择新内核即可,完全不需要手工操作. 此外还需要一个测试文件,文件拷贝的代码当然是原先写在内核里,这里是 sys.c 文 件.编译后的内核下通过系统调用同样实现了程序一文件拷贝的效果. b.程序源码 测试程序: while(!feof(f1)) #include <stdio.h> { #include <stdlib.h> #include <string.h> s=fgetc(f1); if(s==EOF) break; fputc(s,f2); int mysyscall(char *f1,char *f2) } { sys_close(f1); sys_close(f2); printk("Copy complete!!\n"); f1=sys_open(f1,"r"); } f2=sys_open(f2,"w"); int s=0; Sys.c 里的文件拷贝代码:

Linux课程设计报告书

Linux课程设计报告书

Linux操作系统与程序设计课程设计A报告书姓名:学号:班级:专业:指导老师:提交日期:2013年06月14日1、实验项目目的《Linux操作系统课程设计B》是一门在课程《Linux操作系统与程序设计B》后独立开设的实验课程。

这一门实验课程的开设目的是为了通过学生独立完成一个基于Linux平台的较大型应用程序,巩固课堂上学到的Linux 平台上的编程规范、技术和技巧,培养学生的编写较大型程序的能力和提高学生综合应用素质。

本课程设计实验主要围绕Linux平台上主流的基础技术展开,这些技术包括:Linux的进程、线程通信和同步技术;socket网络通信技术等,这些技术可以集中体现并应用在并发程序设计中。

通过并发程序的设计与开发,培养学生底层软件开发的能力,并为将来从事UNIX/Linux平台开发、嵌入式开发等相对高端的软件开发工作打下基础。

2、实验项目的功能及模块划分本软件是一个Linux下基于socket的聊天室程序,能让局域网内的用户通过该软件进行简单的文字通信。

在此基础上增加了聊天室成员之间的发送私聊信息;当新的成员加入后能自动收取最近一段时间内的聊天上下文;用户能够查看历史聊天记录;软件界面基于Qt实现,图形化界面方便用户操作。

主要模块划分:服务端:数据包发送和接受模块,聊天记录数据库读写模块,数据包处理模块,聊天记录查询模块客户端:数据包发送和接受模块,数据包处理模块,聊天记录查询模块,用户界面与展示模块3、设计与实现本系统采用CS架构,服务端采用固定的端口通信,每个客户端动态设置端口。

客户端启动后向服务端告知自己所使用的端口号,以便可以双向通信,同时服务器负责为每个客户端分配一个唯一的ID(服务器的ID为1)客户端和服务端以及客户端和客户端之间采用约定的数据格式进行通信,以便接收方可以正确的解析命令和数据。

数据包通用格式定义如下 #define MAX_UDP_SIZE 1000 struct udp_packet{ int type; int senderId; long size;char content[MAX_UDP_SIZE]; };type : 表示该数据包的类型,直接决定content 字段的含义 senderId :该数据包的发送者的ID , size:整个数据包的数据长度content:数据包的内容,其数据格式由type 决定。

LINUX操作系统-课程设计报告.doc

LINUX操作系统-课程设计报告.doc

xxx软件工程职业学院课程设计报告2015-2016学年度第一学期题目:LINUX操作系统姓名:xxxx班级:网络xxx系部:计算机学院指导教师:xxx日期:2015年11月21日Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多cpu的操作系统。

它能运行主要的UNIX工具软件、应用程序和网络协议。

Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

它主要用于基于Intel x86系列CPU的计算机上。

这个系统是由全世界各地的成千上万的程序员设计和实现的。

其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。

通过这次课程设计,提高了我们对Linux各子系统服务配置的动手能力和实践操作综合应用的能力。

关键字:DHCP服务、Samba服务器、DNS服务、WWW服务、FTP服务、telnet摘要 (2)目录 (3)DHCP服务 (4)一、需求分析: (4)二、步骤与结果: (4)三、拓扑图 (5)四、总结: (5)DNS (6)一.需求分析 (6)二.配置步骤 (6)三.拓扑图 (8)四.总结 (8)Samba (8)一.需求分析 (8)二.步骤与结果 (9)三.总结 (11)WWW (11)一.需求分析 (11)二.步骤与结果 (11)三.总结 (17)Telnet (17)一.需求分析 (17)二.步骤与结果 (17)三.总结 (19)FTP (19)一需求分析 (19)二步骤与结果 (20)三.总结 (23)参考文献 (23)DHCP服务一、需求分析:由于公司内部很多 Notebook计算机使用的场合!所以 Notebook 在使用上,当设定为DHCP client 的时候,那么只要它连接上的网域里面有一部可以上网的 DHCP服务器,那部notebook 也就可以连接上 Internet 了!网域内数量相当的多时:另外一个情况就是网域内计算机数量相当庞大时,大到您没有办法一个一个的进行说明来设定他们自己的网络参数,这个时候为了省麻烦,还是架设DHCP 来的方便。

《Linux应用实践》课程设计

《Linux应用实践》课程设计

计算机科学与工程学院《Linux应用实践》课程设计报告书设计题目:《Linux应用实践》课程设计报告专业:网络工程班级: 13003602学生姓名:周幸谋学号: 1300360230指导教师:王学文2015年10 月31 日计算机科学与工程学院课程设计任务书摘要Linux是一套免费使用和自由传播的类UNIX操作系统,它主要用于基于Intel x86系列cpu 的计算机上。

这个系统是由全世界各地的成千上万的程序员设计和实现的,其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。

本次课程设计,主要为了熟练掌握Linux下常用的命令以及shell编程和system编程以及gcc的简单使用,对一些细节进行了详细的分析。

通过本次课程设计,提高了我们对Linux的理解和实践操作综合应用能力。

关键词:Linux;Shell编程;System编程目录前言 (8)1.Linux的简介 (8)1.1什么是Linux (8)1.2 Linux系统的主要特点 (8)1.3Linux的组成 (9)2 基本的文本编辑器及它们的使用方法 (9)2.1gedit和vi的使用 (9)2.2GCC的使用 (10)3 编程详细设计 (10)3.1Shell编程 (10)3.2System编程 (11)4 编程测试 (13)4.1 shell编程测试 (13)4.2system编程测试 (13)5 心得体会 (13)6 参考文献 (14)7 附录 (14)前言Linux系统是一种自由和开放源代码的类UNIX操作系统。

目前存在着许多不同的Linux,但它们都使用了Linux内核。

Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。

Linux是一个领先的操作系统,世界上运算最快的超级计算机运行的都是Linux操作系统。

严格来说,Linux这个词本身只代表Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。

linux课程设计报告

linux课程设计报告

课程报告课程名称:Linux操作系统课程设计题目:Linux下J2EE开发与运行环境配置达到jsp程序可以访问数据库学院(系):计算机与电子信息学院专业:班级:指导教师:组员及学号:2010年11 月26 日一、目的本次课程设计的目的是结合所学知识,完成linux系统的管理、分析、及其使用。

为今后在linux系统上进行开发、管理和电子商务应用打下基础。

主要要求是要掌握虚拟机的安装;Linux系统的安装;Linux基本指令的运用与掌握;jdk、Eclipse、tomcat、mysql和jdbc的安装与环境配置从而实现Linux下J2EE 的开发与运行环境配置,并学会编写jsp程序访问数据库,对开发和环境进行测试。

二、内容与设计思想1.总体思想:Linux下J2EE开发与运行环境配置,并写jsp程序访问数据库对结果进行测试(jdk+eclipse+tomcat+mysql+jdbc)2..设计思路:第一步:安装虚拟机软件第二部:创建一个安装Linux系统的虚拟机第三部:用ISO将所需要放入虚拟机的jdk、eclipse、tomcat、mysql、和jdbc等文件转换成映像文件第四步:将映像文件传入虚拟机并根据自己需要放到某个目录下第五步:安装jdk和配置环境并测试第六步:安装eclipse和配置环境并测试第七部:安装tomcat和配置环境并测试第八部:安装mysql和配置环境并测试第九步:载入驱动器jdbc第十部:编写jsp程序访问数据库,对开发和环境进行测试三、使用环境及其软件包本次上机实践的所有用的到软件,工具的名称、版本号以及下载地址:虚拟机: 版本号VMware Workstation 7.1下载地址/cn/products/ws/Linux系统: 版本号RedFlag-6.3-System-1.791-201008172005(2).iso下载地址/down?cid=535662BD01DDDB73E3C9D65046D4D7 AEAD50B6F4UItraISO.exe(光盘映像文件制作/编辑/格式转换工具UltraISO):下载地址/f/6327508.html?from=like JDK: jdk-1_5_0_09-linux-i586-rpm.bin (用老师给的)Tomcat: apache-tomcat-5.5.31.tar.gz (用老师给的)Eclipse:eclipse-SDK-3.2.2-linux-gtk.tar.gz (用老师给的)Mysql:1)MySQL-server-community-5.1.53-1.rhel5.i386.rpm2)MySQL-client-community-5.1.53-1.rhel5.i386.rpm下载地址:/Jdbc:mysql-connector-java-5.1.13.tar.gz下载地址:/四、安装、配置、调试过程JDK的安装:1. 把老师给的jdk通过iso传到虚拟机上,拷贝到安装目录/usr目录下进入安装目录#cd /usr#cp jdk-1_5_0_09-linux-i586.rpm /local#cd local给所有用户添加可执行的权限#chmod a+x jdk-1_5_0_09-linux-i586.rpm.bin#./jdk-1_5_0_09-linux-i586.rpm.bin此时会生成文件jdk-1_5_0_09-linux-i586.rpm,同样给所有用户添加可执行的权限#chmod a+x jdk-1_5_0_09-linux-i586.rpm安装程序#rpm -ivh jdk-1_5_0_09-linux-i586.rpm出现安装协议等,键入yes2.设置环境变量。

Linux操作系统课程实验报告参考模板

Linux操作系统课程实验报告参考模板

Linux操作系统课程实验报告班级:姓名:学号:指导老师:田丽华完成时间:2014年7月目录一、实验目的 (1)二、实验要求 (1)三、实验内容 (1)【第一题】 (1)【第二题】 (2)【第三题】 (4)【第四题】 (4)【第五题】 (5)【第六题】 (8)【第七题】 (12)【第八题】 (14)【第九题】 (15)四、实验过程中出现的问题及解决方法 (17)五、实验体会 (18)六、Linux系统安装报告 (18)一、实验目的熟练掌握Linux操作系统的使用,掌握Linux的各项系统管理功能,掌握Linux下各类网络服务的安装、配置以及使用,并能用shell脚本实现简单的管理任务。

二、实验要求完成实验内容并写出实验报告,报告应具有以下内容:1) 实验目的;2) 实验内容;3) 题目分析及基本设计过程分析;4) 配置文件关键修改处的说明及运行情况,应有必要的效果截图;5) 脚本源程序清单,包括详细注释;6) 实验过程中出现的问题及解决方法;7) 实验体会三、实验内容【第一题】在命令行新建几个用户,如tux,tom,lily等,给每个用户创建密码,并将这几个用户分到同一个组team中。

再新建一个组student,使得tux也为该组用户。

在root用户和新建用户之间切换,验证用户创建成功与否。

(给出相关命令运行结果)(5分)实验分析:这是一道基本的题目,老师上课所讲的创建用户以及创建小组的语句稍加应用便可以轻松完成题目。

创建用户时,用命令useradd,创建小组用groupadd,输密码时用passwd,这样就可以较为迅速完成实验题目。

实验中操作及其注释:[root@localhost ~]# groupadd teacher //添加小组teacher[root@localhost ~]# groupadd student //添加小组student[root@localhost ~]# useradd –g teacher –G student tux//添加用户tux,既属于小组teacher,也属于student[root@localhost ~]# passwd tux //为用户tux添加密码实验过程中出现的问题:这个实验题目比较基础,参照讲义和老师上课提到的方法可以完美解决这个问题,但是有些知识点有些生疏,所以出现一些小错误,不过很快就纠正了,影响不大。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux系统与程序设计课程设计报告书报告人:目录:1、实验项目目的32、实验项目的功能及模块划分23、实验项目的人员组成及指责划分24、设计与实现34.1 系统结构34.2 客户端界面34.2.1 注册34.2.2 登录44.2.3 界面设计44.2.4查找好友44.3服务器的实现54.3.1 用户登录54.3.2用户管理54.3.3转发聊天消息54.4 文件操作64.5 通信模块的实现64.5.1 通信方式的选择65、测试与调试66、总结77、附录:程序代码91、实验目的在Linux下利用java编程实现类似于QQ的通信功能。

实现简单的qq功能:注册、登陆、查找好友、聊天功能服务端还需实现配置文件设置、用户管理、日志显示的功能。

同时使用到相关的的文件操作以及java编程。

通过这次实验来锻炼在Linux下的编程能力,主要是熟悉Linux的编程环境,相关命令的操作、java 软件的安装、以及对文件的操作,网络通讯等相关的方面东西。

2、实验项目的功能及模块划分本实验是一个Linux下的网络即时通信工具,实现三人间的通讯。

这个项目总共分为五个模块客户端,服务器,通讯,文件操作以及文档维护与测试。

客户端的在分为登录、从服务器端获取在线人员并显示、选择联系人、向在线人员发送消息。

实时显示别人发给你的消息。

服务端主要是为客户端提供相关的信息服务,包括保存登录人员的IP信息、发送给客户端其他登录人员的IP、操作数据库等相关操作。

基本上完成了注册、登陆、聊天功能总体来说可以分为几下几个模块:1)客户端与服务器的界面设计2)客户端的通信部分3)服务端的通信部分4)文件操作5)文档测试与维护3、实验项目的人员组成及指责划分xx:组长,系统分析、整体设计和模块划分xx:通信模块设计和编码。

xx:客户端以及服务器界面设计和编码。

xx:文档维护和测试。

xx:文件操作的设计和编码。

4、设计与实现4.1 系统结构发送信息1转发信息2转发信息1发送信息24.2 客户端界面4.2.1 注册客户端1 通信 界面服务器端客户端2通信 界面4.2.2 登录4.2.3 界面设计4. 2. 4 查找好友4.3服务器的实现4.3.1 用户登录: 当客户端填写相关信息后,点击登录,将会通过UDP协议发送信息至服务器端,服务器端将保存客户端的端口信息到文件中。

4.3.2 用户管理4.3.3转发聊天消息4.4 文件操作:通过对文件的操作实现了对用户的管理。

通过日志文件来记录客户端的信息。

4.5 通信模块的实现4.5.1通信方式的选择:通信主要是通过UDP 协议实现的。

服务器端保存客户端的地址信息。

客户端与其他客户端通信的时候先请求服务器该客户端的地址信息,让后利用返回的地址信息向该客户端发送信息。

信息不通过服务器端的转发。

5、测试与调试(1)在用户注册时,当重复输入密码时不能显示错误,后经过改进后实现了这一功能,即提示用户前后输入的密码不同。

(2)当服务器关闭时,客户端会直接关闭。

经过改进后客户端会收到提醒,提醒客户与服务器连接有错。

6、总结xx:由于平时使用的都是window系统,所以linux系统接触不多虽然经过这学期对linux得系统学习,我对本次课程设计的目的和方法能够有些初步的理解,但在做的过程中却发现了很多问题,首先是linux 系统的安装,就花费了我大量的时间。

因为考试临近,所以实验也没有做的很成功。

作为组长,对于这个实验的整体我把握的还不够好,对于模块的划分还有所欠缺。

我在这个实验中主要参与了系统分析、整体设计和模块划分,以及实验过程中部分代码的编写和统筹工作。

在实验中我们遇到了很多问题,如java的安装,环境变量的设置,等等。

在不断的尝试和错误中,懂得了如何去分析问题,解决问题,再设计程序的过程!终于在大家的合作下,我们通过各种方法努力的去解决这些问题,当然大部分已经解决,有些问题依然没有解决。

但我还是有所收获。

xx:在文件操作中有很多函数比如说fputs,fgets,因为对这些函数参数的格式顺序以及函数的用法上了解的不够深刻,所以在调试程序时经常会遇到这样那样的问题,后来把书自习看了一遍又在网上查阅的相关资料后才对这块内容能够做到得心应手。

还有就是在进程间通信方式的选择上我们用的是套接字通信方式,吸取了在做文件操作上的教训这次我提前把套接字的属性和用法做了详细的了解。

在这次课程设计中我主要做了文件操作与以及图形界面方面的一些建议等,在调试和修改程序时也和其他组员交流了意见和方法。

xx:在做这个qq软件的时候还是有点吃力,但是在团队合作的精神下,我们还是顺利的完成了任务,本qq系统是在linux环境下用java编写出来的。

本人在做这个qq应用软件时,参与了客户端以及服务器界面设计和编码聊天部分代码的修改。

通过查找QQ图片来完成。

通过本次试验增加了我对linux系统的理解并且对linux系统的知识有了更多的掌握。

xx:程序采用的是UDP协议的非连接通讯,在本地网络环境下能良好的工作,通常客户应用程序比服务器应用程序简单的多因为大多数客户端不必要明显处理并发并且不需要考虑其它异常,而服务器端则要复杂的多,需要考虑并发、执行效率、网络状况、客户状态和服务器崩溃等等诸多方面问题;linux系统下的多线程遵循POSIX线程接口,称为pthread。

编写linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。

xx:本人在做这个qq应用软件时,参与了调试和修改程序以及文档的编写。

在测试时,针对于用户的注册,登陆方面我考虑了很多细节,努力的查找漏洞并考虑其它异常。

在组长和队员的帮助下,同时上网查询信息,终于攻克了难关。

通过本次试验增加了我对测试的理解并且对linux系统的知识有了更多的掌握。

附录:部分程序代码(包括:客户端主程序类,登录,服务端主程序类,在线用户类)客户端主程序类package client;import java.awt.Font;import java.awt.FontFormatException;import java.io.BufferedInputStream;import java.io.File;import java.io.IOException;import tools.SetFont;import client.frm.LoginPane;public class JQClient {public static void main(String[] args) {try {Font font = Font.createFont(Font.TRUETYPE_FONT, new BufferedInputStream(JQClient.class.getResourceAsStream("/tools/simsun.ttc")));font = font.deriveFont(Font.PLAIN, 12);SetFont.setFont(font);} catch (FontFormatException e) {System.out.println("错误:"+e.getMessage());} catch (IOException e) {System.out.println("错误:"+e.getMessage());}new LoginPane();}}登录package client.frm;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ImageIcon;import javax.swing.utton;import javax.swing.JCheckBox;import javax.swing.oBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import javax.swing.border.LineBorder;import javax.swing.border.TitledBorder;import erState;public class LoginPane extends JFrame implements ActionListener{private JLabel lblImg = new JLabel();private JLabel lblJQNum = new JLabel("账号");private oBox boxJQNum = new oBox();private JLabel lblPassword = new JLabel("密码");private JPasswordField pfPassword = new JPasswordField();private JLabel lblState = new JLabel("状态:");private oBox boxState = new oBox();private utton btnRegister = new utton("申请账号");private utton btnSet = new utton("设置↓");private utton btnLogin = new utton("登录");private JLabel lblServerIP = new JLabel("服务器IP:");private JTextField txtServerIP = new JTextField("127.0.0.1");private JLabel lblServerPort = new JLabel("端口:");private JTextField txtServerPort = new JTextField("3608");private boolean isSet = false;public LoginPane() {setTitle("用户登录");setSize(324,235);setResizable(false);Toolkit tk=Toolkit.getDefaultToolkit();setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().h eight)/2);setBackground(new Color(224,244,251));init();btnLogin.addActionListener(this);btnRegister.addActionListener(this);btnSet.addActionListener(this);setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);}private void init(){lblImg.setPreferredSize(new Dimension(325,47));boxState.addItem(UserState.ONLINESTATE);boxState.addItem(UserState.HIDDENSTATE);boxState.addItem(UserState.DEPARTURESTATE);boxState.addItem(UserState.BUSYSTATE);boxState.setBackground(new Color(240,250,255));boxState.setPreferredSize(new Dimension(60,20));boxAutoLogin.setBackground(new Color(240,250,255));boxJQNum.setEditable(true);boxJQNum.setPreferredSize(new Dimension(140,20));pfPassword.setPreferredSize(new Dimension(140,20));txtServerIP.setPreferredSize(new Dimension(80,20));txtServerPort.setPreferredSize(new Dimension(50,20));JPanel pane = new JPanel();pane.setBackground(new Color(240,250,255));pane.setBorder(new LineBorder(new Color(144,185,215)));pane.setLayout(new FlowLayout(FlowLayout.CENTER,15,12));pane.setPreferredSize(new Dimension(300,110));pane.add(new FillWidth(20,20,new Color(240,250,255)));pane.add(lblJQNum);pane.add(boxJQNum);pane.add(new FillWidth(20,20,new Color(240,250,255)));pane.add(new FillWidth(20,20,new Color(240,250,255)));pane.add(lblPassword);pane.add(pfPassword);pane.add(new FillWidth(20,20,new Color(240,250,255)));pane.add(lblState);pane.add(boxState);TitledBorder tb = new TitledBorder(new LineBorder(Color.GRAY),"网络设置");JPanel paneSet = new JPanel();paneSet.setPreferredSize(new Dimension(300,60));paneSet.setBorder(tb);paneSet.add(lblServerIP);paneSet.add(txtServerIP);paneSet.add(new FillWidth(30,20));paneSet.add(lblServerPort);paneSet.add(txtServerPort);setLayout(new FlowLayout(FlowLayout.CENTER,5,0));add(lblImg);add(new FillWidth(100,8));add(pane);add(new FillWidth(300,8));add(btnRegister);add(btnSet);add(new FillWidth(65,20));add(new FillWidth(300,8));add(paneSet);}public void actionPerformed(ActionEvent e) {if(e.getSource()==btnSet){if(isSet){isSet = false;setSize(getWidth(),getHeight()-65);btnSet.setText("设置↓");}else{isSet = true;setSize(getWidth(),getHeight()+65);btnSet.setText("设置↑");}}if(e.getSource()==btnLogin){dispose();newMainPane(txtServerIP.getText(),Integer.parseInt(txtServerPort.getText()),Integer.parseInt(boxJQNu m.getSelectedItem().toString()),newString(pfPassword.getPassword()),((UserState)boxState.getSelectedItem()).getState());}if(e.getSource()==btnRegister){dispose();new RegisterPane();}}}服务端主程序类package server;import java.awt.Font;import java.awt.FontFormatException;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import .URISyntaxException;import erDAOByFile;import server.frm.Server;import tools.JQCreater;import tools.SetFont;public class JQServer {public final static int manager = 10000;public static void main(String[] args) {try {Font font = Font.createFont(Font.TRUETYPE_FONT,new BufferedInputStream(JQServer.class.getResourceAsStream("/tools/simsun.ttc")));font = font.deriveFont(Font.PLAIN, 12);SetFont.setFont(font);} catch (FontFormatException e) {System.out.println("错误:"+e.getMessage());} catch (IOException e) {System.out.println("错误:"+e.getMessage());}new Server();new Thread(){public void run() {try {new UserDAOByFile().addSysUser(manager);new JQCreater().saveIDJQ(1, manager);} catch (IOException e) {System.out.println("错误:"+e.getMessage());}}}.start();}}在线用户类package server.frm.panes;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event.WindowFocusListener;import java.util.Enumeration;import java.util.Vector;import javax.swing.utton;import javax.swing.oBox;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableColumn;import javax.swing.table.TableRowSorter;import server.frm.Server;import tools.DateDeal;import erDAOByFile;import er;import erSex;import erState;public class OnlinePane extends JPanel implements ActionListener,Runnable{ /** 查询JQ用户*/private JLabel lblQuery = new JLabel("查询JQ用户");/** 输入的查询的关键字*/private JTextField txtQuery = new JTextField("");/** 查询的类型*/private oBox boxQuery = new oBox();/** 查询*/private utton btnQuery = new utton("查询");/** 添加新用户*/private utton btnBroadCast = new utton("广播系统消息");/** 刷新重新获得所有用户*/private utton btnFlash = new utton("刷新");/** 显示用户的表格*/private JTable table = null; //= new JTable();/** 表格的模型*/private DefaultTableModel model = null;/** 状态栏*/private JLabel lblInfo = new JLabel("共有用户:0位");private BroadcastWindow broadcastWindow = null;public OnlinePane() {btnBroadCast.addActionListener(this);btnFlash.addActionListener(this);btnQuery.addActionListener(this);init();}private void init(){txtQuery.setPreferredSize(new Dimension(100,25));boxQuery.addItem(new QueryWay("按号查询",0));model = new MyDefaultTableModel();model.addColumn("ID");model.addColumn("号");model.addColumn("昵称");model.addColumn("状态");model.addColumn("注册时间");table = new JTable(model);TableRowSorter sorter = new TableRowSorter(model);table.setRowSorter(sorter);TableColumn tcID = table.getColumn(model.getColumnName(0));tcID.setPreferredWidth(25);tcID.setMaxWidth(25);tcID.setMinWidth(25);TableColumn tcJQ = table.getColumn(model.getColumnName(1));tcJQ.setPreferredWidth(70);tcJQ.setMaxWidth(80);tcJQ.setMinWidth(60);TableColumn tick = table.getColumn(model.getColumnName(2));tick.setPreferredWidth(70);tick.setMaxWidth(80);tick.setMinWidth(60);TableColumn tcState = table.getColumn(model.getColumnName(7));tcState.setPreferredWidth(30);tcState.setMaxWidth(30);tcState.setMinWidth(30);JPanel paneNorth = new JPanel();paneNorth.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));paneNorth.add(lblQuery);paneNorth.add(txtQuery);paneNorth.add(boxQuery);paneNorth.add(btnQuery);paneNorth.add(btnFlash);paneNorth.add(btnBroadCast);JPanel paneSouth = new JPanel();paneSouth.add(lblInfo);setLayout(new BorderLayout());add(paneNorth,BorderLayout.NORTH);add(new JScrollPane(table),BorderLayout.CENTER);add(new FillWidth(5,5),BorderLayout.WEST);add(new FillWidth(5,5),BorderLayout.EAST);add(paneSouth,BorderLayout.SOUTH);}public void actionPerformed(ActionEvent e) {if(e.getSource()==btnBroadCast){if(broadcastWindow==null)broadcastWindow = new BroadcastWindow();elsebroadcastWindow.setVisible(true);}if(e.getSource()==btnFlash){flushOnlineUser();}if(e.getSource()==btnQuery){QueryOnlineUser(txtQuery.getText(),((QueryWay)boxQuery.getSelectedItem()).getWay());}}private class QueryWay{private String name;private int way;public QueryWay(String name,int way) { = name;this.way = way;}public String toString() {return ;}public int getWay() {return way;}}public void run() {btnFlash.setEnabled(false);if(Server.isFileWay){table.setAutoCreateRowSorter(false);model.setRowCount(0);int totalNum = 0;int onlineNum = 0;int hiddenNum = 0;int departureNum = 0;int busyNum = 0;if(ServicePane.table!=null && !ServicePane.table.isEmpty()){totalNum = ServicePane.table.size();Enumeration<Integer> onlineUser = ServicePane.table.keys();UserDAOByFile userDAO = new UserDAOByFile();while(onlineUser.hasMoreElements()){Integer jqnum = onlineUser.nextElement();User user = userDAO.findById(jqnum);if(user!=null){if(user.getState()==UserState.ONLINESTATE.getState())onlineNum++;if(user.getState()==UserState.DEPARTURESTATE.getState())departureNum++;if(user.getState()==UserState.BUSYSTATE.getState())busyNum++;if(user.getState()==UserState.HIDDENSTATE.getState())hiddenNum++;}addUserToTable(user);}}table.setAutoCreateRowSorter(true);lblInfo.setText("共有JQ用户:"+totalNum+"位.其中," +"在线用户:"+onlineNum+"位." +"隐身用户:"+hiddenNum+"位." +"离开用户:"+departureNum+"位." +"繁忙用户:"+busyNum+"位.");}elselblInfo.setText("注意:系统暂不支持数据库方式!请使用文件方式保存数据!");btnFlash.setEnabled(true);}public void flushOnlineUser(){new Thread(this).start();}private void QueryOnlineUser(String query,int type){if(query.equals(""))return;UserDAOByFile userDAO = new UserDAOByFile();model.setRowCount(0);if(type==0){try {int jqnum = Integer.parseInt(query);if(ServicePane.table.containsKey(jqnum)){User user = userDAO.findById(jqnum);if(user!=null)addUserToTable(user);}} catch (NumberFormatException e) {JOptionPane.showMessageDialog(null, "请确保输入的正确的JQ!");return;}return;}private void addUserToTable(User user){if(user!=null){Vector<Object> v = new Vector<Object>();v.add(user.getId());v.add(user.getJqnum());v.add(user.getNickname());v.add(user.getRealname());v.add(UserSex.getSex(user.getSex()));v.add(user.getAge());v.add(user.getEmail());v.add(UserState.getStateName(user.getState()));v.add(DateDeal.getDate(user.getRegisterTime()));model.addRow(v);}}private class MyDefaultTableModel extends DefaultTableModel{public boolean isCellEditable(int row, int column) {super.isCellEditable(row, column);return false;}}private class BroadcastWindow extends JDialog implements WindowFocusListener,ActionListener{private JTextArea txt = new JTextArea();private utton btnSend = new utton("发送");private utton btnClose = new utton("关闭");private utton btnClear = new utton("清空");public BroadcastWindow() {//super(null,true);setTitle("广播系统消息");setSize(300,200);setResizable(false);Toolkit tk=Toolkit.getDefaultToolkit();setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().h eight)/2);btnSend.addActionListener(this);btnClear.addActionListener(this);btnClose.addActionListener(this);JPanel pane = new JPanel();pane.setLayout(new FlowLayout(FlowLayout.RIGHT));pane.setPreferredSize(new Dimension(300,35));pane.add(btnClose);pane.add(btnClear);pane.add(btnSend);txt.setLineWrap(true);add(new JScrollPane(txt),BorderLayout.CENTER);add(pane,BorderLayout.SOUTH);add(new FillWidth(2,2),BorderLayout.NORTH);add(new FillWidth(4,4),BorderLayout.EAST);add(new FillWidth(4,4),BorderLayout.WEST);- - -.addWindowFocusListener(this);setDefaultCloseOperation(DISPOSE_ON_CLOSE);setVisible(true);}public void windowGainedFocus(WindowEvent e) {}public void windowLostFocus(WindowEvent e) {dispose();}public void actionPerformed(ActionEvent e) {if(e.getSource()==btnClear)txt.setText("");if(e.getSource()==btnClose)dispose();if(e.getSource()==btnSend){String msg = txt.getText();if(!msg.equals("")){if(ServicePane.broadcast(msg)){txt.setText("");JOptionPane.showMessageDialog(null, "发送成功!");}}}}}}- - 总结资料。

相关文档
最新文档