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课程设计报告书模版
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课程设计实验报告
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操作系统与程序设计课程设计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
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应用实践》课程设计报告专业:网络工程班级: 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下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操作系统课程实验报告班级:姓名:学号:指导老师:田丽华完成时间: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添加密码实验过程中出现的问题:这个实验题目比较基础,参照讲义和老师上课提到的方法可以完美解决这个问题,但是有些知识点有些生疏,所以出现一些小错误,不过很快就纠正了,影响不大。
linux课程设计报告
linux课程设计报告一、课程目标知识目标:1. 理解Linux操作系统的基本概念,掌握其发展历程和特点;2. 学会使用Linux命令行进行基本操作,如文件管理、目录切换、文本编辑等;3. 了解Linux系统的文件权限和用户管理,能够进行简单的系统维护;4. 掌握Linux下软件的安装与配置方法。
技能目标:1. 培养学生熟练运用Linux命令行进行日常操作的能力;2. 培养学生解决Linux系统常见问题的能力;3. 培养学生独立完成Linux软件安装与配置的能力;4. 提高学生的实际操作能力和团队协作能力。
情感态度价值观目标:1. 激发学生对Linux操作系统的兴趣,培养其学习热情和主动性;2. 培养学生严谨、细致的学习态度,树立良好的信息安全意识;3. 增强学生的团队协作精神,培养其尊重他人、善于沟通的品格;4. 引导学生认识到开源软件的价值,培养其创新精神和共享意识。
课程性质:本课程为实践性较强的课程,以学生动手操作为主,结合理论讲解,培养学生实际应用能力。
学生特点:学生具备一定的计算机操作基础,对Linux操作系统有一定了解,但实践经验不足。
教学要求:注重理论与实践相结合,强调实际操作能力的培养,以学生为主体,教师为主导,充分调动学生的积极性与主动性。
通过本课程的学习,使学生能够掌握Linux操作系统的基本知识,具备实际应用能力。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. Linux操作系统概述- Linux发展历程- Linux系统特点- 常见Linux发行版介绍2. Linux命令行操作- 基本命令:ls、cd、pwd、mkdir、rm、cp、mv等- 文件和目录权限管理:chmod、chown、umask等- 文本处理命令:cat、grep、sort、uniq等- 压缩和解压缩命令:tar、gzip、bzip2等3. Linux系统管理- 用户和组管理:useradd、usermod、userdel、groupadd等- 软件包管理:rpm、yum、apt等- 系统启动与关闭:init、systemctl等- 网络配置:ifconfig、ip、route等4. Linux软件安装与配置- 源码编译安装:configure、make、make install- 包管理器安装:rpm、deb等- 常用软件安装与配置:Apache、MySQL、PHP等5. 实践操作与案例- 常见系统问题排查与解决- Linux下文件共享与权限设置- Linux下Web服务器搭建- Linux下数据库服务器搭建教学内容安排与进度:第1周:Linux操作系统概述第2周:Linux命令行操作第3周:Linux系统管理第4周:Linux软件安装与配置第5周:实践操作与案例本教学内容根据课程目标,结合教材章节进行选择和组织,确保内容的科学性和系统性。
linux操作系统课程设计报告书
while (k == 0);//等待子进程2收到父进程的消息后置k=1
printf ("Child Process 2 is Killed by Parent!\n");
exit(0);
}
}
else//子进程p1
{
signal (SIGINT, SIG_IGN);//忽略本应给父进程的按键中断;
int msqid ;
struct msqid_ds info ;
struct msgbuf buf1 ;
int flag ;
int recvlength ;
int key ;
int mtype ;
key = ftok ("msg.tmp", 0x01 ) ;//返回系统建立IPC通讯时需要的ID值;
2.3设计思想
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话:
MessagefromChild l!
MessagefromChild2!
父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1的消息,再接收子进程P2的消息。
2.4流程图
2.5主要程序代码
#include"unistd.h"
#include"signal.h"
#include"sys/types.h"
#include"stdlib.h"
int k = 0;
int p1,p2;// pid_t child1 = 0,child2 = 0;
void func_father (int sig) //父进程信号处理函数;
Linux 课程设计报告书
滨江学院课程设计报告题目 Linux 课程设计院系计算机系专业软件工程学生学号2014年6月11日一、Shell编程题(1)编写一个shell脚本,求费波纳奇数列的前20项及总和。
运行结果如图:(2)在根目录下有四个文件 m1.txt,m2.txt,m3.txt,m4.txt,用 Shell 编程,实现自动创建 m1,m2,m3,m4 四个目录,并将 m1.txt,m2.txt,m3.txt,m4.txt 四个文件分别拷贝到各自相应的目录下。
程序运行之前目录结果如下:程序源码如下:运行之后目录结构如下:(3)编写shell程序,使得使用者输入一个文档名,做出以下判断:a)这个文件是否存在,若不存在则给予一个“Filename does not exist”的信息,并中断程序;b)若这个文件存在,则判断他是个文件或目录,结果输出“Filename is regular file”或“Filename is directory”;c)判断一下,运行者的身份对这个文件或目录所拥有的权限,并输出权限数据!输入一个不存在的目录结果如下:程序源码如下:输入一个已存在的目录,得到权限信息如下:(4)设计一个shell程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定围的数据,n和m都是整数。
即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。
例如:$cuts 11 14This is a test of cuts program (键盘输入)test (显示结果)程序源码如下:程序运行结果如下:二、Linux下C语言程序设计—课程设计Linux下用C语言进程实现一.#include<unistd.h>#include<stdio.h>#include</usr/include/sys/types.h>#include<string.h>main(){pid_t pid1,pid2;char str1[20],str2[20];if((pid1=vfork())<0){perror("创建子进程一错误!\n");exit(0);}else if(pid1==0){printf("输入字符串一:");scanf("%s",str1);exit(0);}if((pid2=vfork())<0){perror("创建子进程二错误!\n");exit(0);}else if(pid2==0){printf("输入字符串二:");scanf("%s",str2);exit(0);}waitpid(pid1,NULL,0);waitpid(pid2,NULL,0);printf("你输入的字符串一:%s\n",str1);printf("你输入的字符串二:%s\n",str2);}二.#include<signal.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ipc.h>#include<sys/shm.h>#define key 1024#define size 160static void sign(int);int shmid;char* shmaddr;main(){pid_t pid;char str[20];shmid=shmget(key,size,IPC_CREAT|0600);if((pid=fork())<0){perror("创建子进程错误!\n");exit(0);}else if(pid==0){if(signal(SIGUSR1,sign)==SIG_ERR){printf("SIGUSR1错误!\n");exit(0);}pause();printf("子进程结束!\n");exit(0);}sleep(1);shmaddr=(char*)shmat(shmid,NULL,0);printf("请输入字符串:");scanf("%s",str);strcpy(shmaddr,str);shmdt(shmaddr);kill(pid,SIGUSR1);wait();shmctl(shmid,IPC_RMID,NULL);}static void sign(int signnum){int fd;char* shmaddr;if(signnum==SIGUSR1){printf("子进程接收到SIGUSR1.\n");shmaddr=(char*)shmat(shmid,NULL,0);if((fd=open("testfile.txt",O_RDWR|O_CREAT|O_TRUNC))==-1){printf("\n打开文件错误!\n");return 0;}else{printf("写入:%s\n",shmaddr);write(fd,shmaddr,20);close(fd);}shmdt(shmaddr);}}运行结果:实验总结通过这次实验,大致对linux有一个系统的了解,能在linux上进行简单的使用,对linux中的各个文件的配置文件进行了直观的了解,但是总体上来说,只能晦涩的运用,没有进行过深度探究和linux知识整合。
linux课程设计报告
《Linux操作系统》课程设计报告题目:Linux对进程和线程的治理机制研究所在院系:软件学院完成学生: zhangsan 运算机科学与技术指导教师: lisi 完成日期: 2012年 6 月 6 日目录1. 课程设计题目概述 (1)2. 研究内容与目的 (4)3. 研究报告 (5)4. 总结 (17)1. 课程设计题目概述Linux是一个多用户多任务的操作系统。
多用户是指多个用户能够在同一时刻利用运算机系统;多任务是指Linux能够同时执行几个任务,它能够在还未执行完一个任务时又执行另一项任务。
操作系统治理多个用户的请求和多个任务。
大多数系统都只有一个CPU和一个主存,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。
操作系统治理这些资源并在多个用户间共享资源,当您提出一个请求时,给您造成一种假象,仿佛系统只被您独自占用。
而事实上操作系统监控着一个等待执行的任务队列,这些任务包括用户作业、操作系统任务、邮件和打印作业等。
操作系统依照每一个任务的优先级为每一个任务分派适合的时刻片,每一个时刻片大约都有零点几秒,尽管看起来很短,但事实上已经足够运算机完成成千上万的指令集。
每一个任务都会被系统运行一段时刻,然后挂起,系统转而处置其他任务;过一段时刻以后再回来处置那个任务,直到某个任务完成,从任务队列中去除。
Linux系统上所有运行的东西都能够称之为一个进程。
每一个用户任务、每一个系统治理守护进程,都能够称之为进程。
Linux用分时治理方式使所有的任务一起分享系统资源。
咱们讨论进程的时候,可不能去关切这些进程究竟是如何分派的,或是内核如何治理分派时刻片的,咱们所关切的是如何去操纵这些进程,让它们能够专门好地为用户效劳。
在Linux中,每一个进程在创建时都会被分派一个数据结构,称为进程操纵块(Process Control Block,简称PCB)。
PCB中包括了很多重要的信息,供系统调度和进程本身执行利用,其中最重要的莫过于进程ID(process ID)了,进程ID也被称作进程标识符,是一个非负的整数,在Linux操作系统中唯一地标志一个进程,在咱们最常利用的I386架构(即PC利用的架构)上,一个非负的整数的转变范围是0-32767,这也是咱们所有可能取到的进程ID。
linus课程设计报告
linus课程设计报告一、教学目标本课程的教学目标是让学生掌握Linux操作系统的基本概念、使用方法和系统管理技能。
具体包括:1.知识目标:学生能够理解Linux操作系统的历史、特点和优势;掌握Linux的基本命令、文件系统结构、用户管理、进程管理等功能。
2.技能目标:学生能够熟练使用Linux命令行界面,进行文件操作、系统配置、软件安装等;掌握文本编辑器的使用,编写简单的脚本程序。
3.情感态度价值观目标:培养学生对开源软件和自由软件运动的认识,增强他们对计算机科学的兴趣和热情。
二、教学内容根据课程目标,教学内容主要包括以下几个部分:1.Linux操作系统概述:介绍Linux的历史、特点和优势,以及如何在各种环境中安装和使用Linux。
2.Linux基本命令:讲解文件操作、文本处理、网络通信等常用命令,以及命令行界面的使用技巧。
3.Linux文件系统:介绍文件系统的结构、权限管理和目录布局,以及如何进行文件和目录的操作。
4.用户和权限管理:讲解用户账号的创建、管理和服务器的安全性,以及文件权限和所有权的概念。
5.进程管理:介绍进程的概念、进程控制命令以及如何监控和管理进程。
6.系统配置和软件管理:讲解系统配置文件的作用和修改方法,以及如何使用包管理器安装、更新和卸载软件。
7.脚本编程:介绍基本的脚本编程语法和技巧,以及如何编写实用的脚本程序。
三、教学方法为了达到课程目标,我们将采用以下教学方法:1.讲授法:通过讲解和演示,让学生掌握Linux操作系统的基本概念和命令。
2.讨论法:学生进行小组讨论,分享学习心得和经验,提高他们对Linux操作系统的理解和应用能力。
3.案例分析法:通过分析实际案例,让学生学会解决Linux操作系统中的实际问题。
4.实验法:安排实验室实践环节,让学生亲自动手操作,巩固所学知识和技能。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的Linux教材,为学生提供系统的学习资料。
Linux课程设计报告
Linux课程设计报告
本次课程设计以Linux基本操作为主,采取了大量的基本操作,为我们提
供了一个丰富多彩的Linuxlearning space。
首先,对Linux的基本知识进行了较为全面
的介绍,并且进行了详细的系统介绍,以便学习者更好的理解Linux操作系统和相关的技
术概念。
其中,讲师还介绍了Linux的基本操作指令,让大家学会如何使用linux指令,
进行Linux操作。
然后,我们还接触到了与linux有关的一些实用功能,并且结合着实际
使用,对每个功能进行了全面的讲解,理解linux的各项习惯操作也就更加深入。
最后,
还通过实际操作,深入理解Linux安装和配置,以及shell编程等方面的知识,学习
Linux的基本使用与管理技术,加深对Linux系统的理解。
整个课程设计过程,每一步操作都很认真,认真倾听老师的指导,并逐步理解,
并且用自己的例子来反复验证,最终完成了课设任务。
本次课设让我收获了许多,更加深
刻地理解Linux系统的安装,配置以及基本操作,以及shell脚本的编写等。
同时,本次
课程设计也促使我学会了动手解决问题的能力,并且养成了勤于总结的习惯,受益匪浅。
总的来说,本次课程设计收获颇丰,简直是一波三折,曲折中令我学到了许多东西。
经过这次的Linux的基本操作,不仅能够在实际运用中熟练运用,还能更加深入地去
学习Linux,以获取更多知识。
希望未来能把Linux学习、探索得更深入,并且有所成果。
Linux课程设计报告书模版
Linux操作系统与程序设
计课程设计B报告书
题目:可以根据自己的具体内容定,但不能偏离课题要求(见指导书后面课题要求),如“基于Socket的并发文件操作软件设计与实现”
姓名:
学号:
班级:
专业:
指导老师:
提交日期:
1、实验项目目的
…
2、实验项目的功能及模块划分
本实验是一个Linux下的并发程序。
基本功能有…。
在此基础上,还具有XXX等功能(指扩展功能)。
…[描述功能]。
3、设计与实现
3.1 系统结构
3.1.1
3.2 发送进程
3.2.1 基本功能
……
3.3接收进程的实现
3.3.1基本功能……
3.3.2 …….
4数据库访问或文件操作
4.1 …
……
5 通信模块的实现
5.1 通信方式的选择
……
6、测试与调试
[举例说明]
7、总结
附录:程序代码。
linux课程设计报告
linux课程设计报告一、课程设计背景1.1 游戏开发需求随着游戏市场的发展和游戏形式的不断更新,一些新型游戏的开发对硬件和软件都有更高的要求,尤其是在多人在线游戏方面。
为了满足游戏开发的需求,Linux 系统作为一种开放性质的操作系统,可以提供开发人员更多的自由度和创意展示。
1.2 教学改革当前整个教育体系中的教学改革已经成为一种必然趋势。
随着技术的不断进步,整个教育行业中的课程内容构架也需要调整。
以Linux课程为例,学生接受Linux 课程的教学,不仅可以让学生更好的理解当前技术趋势,且可以让学生更好地实践和应用Linux系统。
针对教学改革,当前一些高等院校已经开始对相关课程进行优化和完善。
1.3 学生需求对于很多学生而言,他们在学习过程中更注重实际的操作,而不是单纯的理论知识和语言表达。
由此可见,Linux课程的教学中,实际操作是必不可少的。
此外,Linux课程的教学内容涉及到网络安全、系统管理、数据库管理等知识,这些知识对于计算机类学生具有重要的意义。
二、课程设计目标2.1 教学目标本课程主要掌握Linux系统中的文件结构、基本操作、网络配置、安全管理、数据库管理等内容。
同时目的是使学生通过实践操作,了解Linux系统的优点及其与other操作系统的比较,同时提高其对于计算机操作系统的能力,并能在以后的工作中灵活地运用学到的知识。
2.2 学习目标通过本课程,学生将学会如何:1. 熟练掌握Linux系统的命令行操作。
2. 系统管理:了解系统的启动过程、文件系统结构、用户和组的管理,掌握开机启动、服务管理和日志文件的查看。
3. 网络管理:掌握Linux系统的网络配置和网络接口的管理,如IP地址、网关、DNS等。
4. 安全管理:掌握Linux系统的安全管理,了解防火墙的工作原理,学习如何设置iptables防火墙等。
5. 数据库管理:学习LAMP(Linux+Apache+Mysql+PHP)服务器配置及Web 开发。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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, "发送成功!");}}}}}}- - 总结资料。