网络程序设计考试大作业
- 格式:doc
- 大小:497.82 KB
- 文档页数:19
计算机程序设计员考试题与参考答案一、单选题(共100题,每题1分,共100分)1、下列关于概要设计的基本原则,描述错误的是:( )。
A、应该遵循一些原则,包括:模块化、抽象B、应该遵循一些原则,包括:抽象、模块独立C、应该遵循一些原则,包括:抽象、继承D、应该遵循一些原则,包括:模块化、模块独立正确答案:C2、狭义地讲,测试是指:( )。
A、指软件产品生命周期内所有的检查、评审和确认活动B、对软件产品质量的检验和评价C、对软件产品功能的检查和评价D、对软件产品是否存在bug的检验正确答案:B3、下列不属于内存静态重定位的特点是( )。
A、在程序运行中无需再进行转换B、不需增加硬件地址变换机构C、内存利用率高D、地址变换在程序装入过程中一次完成正确答案:C4、( )描绘了系统的数据关系。
A、状态转化图B、程序流程图C、对话图D、实体关系图正确答案:D5、表A中的列B是标识列,属于自动增长数据类型,标识种子是2,标识递增量为3。
首先插入三行数据,然后再删除一行数据,再向表中增加数据行时,标识列将是()。
A、2B、8C、5D、11正确答案:D6、狭义地讲,测试是:( )。
A、对软件产品质量的检验和评价B、对软件产品功能的检查和评价C、对软件产品是否存在bug的检验D、指软件产品生命周期内所有的检查、评审和确认活动正确答案:A7、SQL中不一定能保证完整性约束彻底实现的是()A、主键约束B、检查子句C、局部约束D、外键约束正确答案:C8、在文件结构中,( )对用户是透明的。
A、物理的文件结构B、字节型文件结构C、字符型文件结构D、逻辑的文件结构正确答案:A9、所有的( )必须与业务需求一致。
A、系统需求B、产品需求C、功能需求D、用户需求正确答案:D10、在操作系统的管理下,在内存中划出若干个单元作为缓冲区,这种缓冲称为( )。
A、硬件缓冲B、多重缓冲C、单缓冲D、软件缓冲正确答案:D11、为查看产生特定诊断消息的代码语句,只要( )Output窗口中相关的诊断消息即可。
学习中心/函授站姓名学号西安电子科技大学网络与继续教育学院2022 学年下学期《面向对象程序设计(C++)》期末考试试题(综合大作业)考试说明:1、大作业试题公布时间:(1)毕业班:2022 年10 月21 日;(2)正常班:2022 年11 月18 日;2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院2022 秋期末考试答题纸》(个人专属答题纸)手写完成,要求字迹工整、卷面干净、整齐;4、在线上传时间:(1)毕业班学生于2022 年10 月21 日至2022 年11 月1 日在线上传大作业答卷;(2)正常班学生于2022 年11 月18 日至2022 年12 月5 日在线上传大作业答卷;5、拍照要求完整、清晰,一张图片对应一张个人专属答题纸(A4 纸),正确上传。
一、简答题(10 分)1、运算符 new 和 delete 的功能分别是什么?(3 分)答案:运算符new的功能是创建动态对象;delete的功能是释放由new创建的动态对象。
2、若派生类以 private 方式从一个基类派生,派生类的对象可以访问基类中的哪些成员?派生类的成员函数可以访问基类中的哪些成员?(3 分)答案:若派生类以private方式从一个基类派生,派生类的对象不能访问基类中的任何成员(1分);派生类的成员函数可以访问基类中的public和protected成员(2分)。
3、构造函数的作用是什么?在创建派生类的对象时,应按照怎样的顺序调用构造函数?(4 分)答案:构造函数的作用是创建对象并对其进行必要的初始化。
(1分)构造函数调用顺序:基类构造函数、子对象类构造函数(如果有)、派生类构造函数。
(2分)二、填空题(每空 2 分,共 20 分)1、函数的返回值是通过函数体中的return语句带回的;若被调用函数被定义为 void 类型,则被调用函数不带回任何值。
2、表示逻辑关系“ a 大于等于8 或者 a 小于等于5”的C++表达式是。
江南大学现代远程教育2014年上半年课程考试大作业考试科目:《计算机网络》1、OSI/RM设置了哪些层次?每个层次的作用和功能是什么?(15分)答:①物理层(Physical layer):利用物理传输介质为数据链路层提供物理连接,以便透明地传输比特流。
②数据链路层(Data link layer):在物理层传输比特流的基础上,在通信的实体间建立数据链路连接,传输以帧为单位的数据,采用差错控制、流量控制方法,使有差错的物理线路变成无差错的数据链路。
③网络层(Network layer):通过路由算法,为分组通过通信子网选择最适当的路径,它要实现路由选择、拥塞控制与网络互连等功能。
④传输层(Transport layer):向用户提供可靠的端到端的服务、透明地传输报文,并向高层屏蔽下层数据通信的细节。
⑤会话层(Session layer):组织两个会话进程间的通信,并管理数据的交换。
⑥表示层(Presentation layer):用于处理在两个通信系统中交换信息的表示方式。
它包括数据格式的变换、数据加密与解密、数据压缩与恢复等功能。
⑦应用层(Application layer):它确定进程之间通信的性质,以满足用户的需要。
它不仅提供应用进程所需的数据交换和远程操作,而且还要为应用进程的用户代理,来完成一些为进行信息交换所必须的功能,它们包括:文件传送访问和管理FTAM、虚拟终端VT、事务处理TP、远程数据库访问RDA、制造业报文规范MMS 及目录服务等协议。
2、比较线路交换、报文交换和分组交换三种交换技术,分析报文交换技术的延时,为何要将报文交换改进为分组交换?(15分)答:比较电路交换、报文交换和分组交换的优缺点电路交换优点:通话中两用户始终占用端到端的通信资源。
缺点:线路传输效率很低用户占用的通信线路大部分时间是空闲的,资源未被使用而消费分组交换优点:较高的交换速率数据传输效率高可靠性非常高效,灵活和迅速。
[试题分类]:C语言程序设计1.下列关于C语言中main函数位置的叙述中,正确的是A. 必须在程序的最后B. 必须在程序的开始处C. 可以在程序中的任意位置D. 必须在系统调用的库函数后面答案:C题型:单选题知识点:第2章 C语言概述难度:12.下列选项中,不能作为C语言标识符是A. _xB. intC. a_1D. ab1exe答案:B题型:单选题知识点:第2章 C语言概述难度:13.若有定义“int i; float f; double d;”,则表达式“10+d+i*f”的数据类型为A. intB. floatC. doubleD. 不确定答案:C题型:单选题知识点:第3章数据类型与运算规则难度:14.判断char型变量c是否为小写字母的正确表达式为A. 'a'<=c<='z'B. (c>=a)&&(c<=z)C. ('a'>=c)('z'<=c)D. (c>='a')&&(c<='z')答案:D题型:单选题知识点:第3章数据类型与运算规则难度:15.若有定义“int x=11;”,则表达式“(x++*1/3) ”的值是A. 12B. 11C. 4D. 3答案:D题型:单选题知识点:第3章数据类型与运算规则难度:26.若有定义“int a=1,b=2,c=3,d=4;”,则表达式“a<b?a:c<d?c:d”的值是A. 1B. 2C. 3D. 4答案:A题型:单选题知识点:第3章数据类型与运算规则难度:27.若有定义“int a=1, b=0, c=0, x=35;”,则执行下列程序段后,变量x的值是if(!a) x--; else if(b);if(c) x=3; else x=4;A. 3B. 4C. 34D. 35答案:B题型:单选题知识点:第5章选择结构的程序设计难度:28.{若有定义“int x=1,y=1,m=1,n=1;”,则执行下列语句后,变量x和y的值分别是 switch (m) \{case 0: x=x*2;case 1:switch (n) \{case 1: x=x*2;case 2: y=y*2; break;case 3: x++;\}case 2: x++; y++;case 3: x*=2; y*=2; break;default: x++;y++;\}}A. x=2,y=1B. x=2,y=2C. x=6,y=6D. x=7,y=7答案:C题型:单选题知识点:第5章选择结构的程序设计难度:29.若有定义“int i,j;”,执行语句“for (i=0,j=1; i<=j+1; i+=2,j--) printf ("%d",i);”时的循环次数是A. 3B. 2C. 1D. 0答案:C题型:单选题知识点:第6章循环结构的程序设计难度:210.若有定义“int n=4;”,则执行语句“while(n--) printf("%d",n--);”后的输出结果是A. 20B. 31C. 210D. 321答案:B题型:单选题知识点:第6章循环结构的程序设计难度:211.{若有定义“int x=3;”,则执行下列语句后的输出结果是do \{printf("%d ",x+=1);\} while(--x);}A. 4B. 4 4C. 4 4 4D. 死循环答案:D题型:单选题知识点:第6章循环结构的程序设计难度:212.若有定义“char a[]="xyz",b[]={'x','y','z'};”,则下列叙述中正确的是A. 数组a的长度大于数组b的长度B. 数组a的长度小于数组b的长度C. 数组a和数组b的长度相同D. 数组a和数组b等价答案:A题型:单选题知识点:第7章数组难度:113.{若有定义“int aa[4][4]=\{\{1,2,3,4\},\{5,6,7,8\},\{3,9,10,2\},\{4,2,9,6\}\}, i,s=0;”,则执行下列语句后,变量s的值是for(i=0;i<4;i++) s+=aa[i][0];}A. 20B. 19C. 13D. 11答案:C题型:单选题知识点:第7章数组难度:214.调用函数时,若实参是一个数组名,则向函数传送的是A. 数组的长度B. 数组的首地址C. 数组每一个元素的地址D. 数组每个元素中的值答案:B题型:单选题知识点:第8章函数难度:115.下列各函数首部中,正确的是A. void play(var :Integer,var b:Integer)B. void play(int a,b)C. Sub play(a as integer,b as integer)D. void play(int a,int b)答案:D题型:单选题知识点:第8章函数难度:116.若有定义“int n=2,*p=&n,*q=p; ”,则下列选项中,非法的赋值语句是A. p=n;B. p=q;C. n=*q;D. *p=*q;答案:A题型:单选题知识点:第9章指针难度:217.若有定义“int *p[3]; ”,则下列叙述中正确的是A. 定义了一个类型为int的指针变量p,该变量具有三个指针B. 定义了一个名为*p的整型数组,该数组含有三个int类型元素C. 定义了一个指向一维数组的指针变量p,该一维数组应具有三个int类型元素D. 定义了一个指针数组p,该数组含有三个元素,各元素都是基类型为int的指针答案:D题型:单选题知识点:第9章指针难度:218.下列对枚举类型名的定义中正确的是A. enum a={one,two,three};B. enum a {one=9,two=-1,three};C. enum a={"one", "two", "three"};D. enum a{"one", "two", "three"};答案:B题型:单选题知识点:第10章结构、联合与枚举类型难度:219.{若有如下定义:struct student\{int num; int age;\} stu[3]=\{\{1001,20\} , \{1002,19\} , \{1003,21\}\} , *p=stu;则下列表达式中,值为1002的是}A. p++->numB. (p++)->ageC. (*++p).numD. (*p).num答案:C题型:单选题知识点:第10章结构、联合与枚举类型难度:220.下列选项中,可以作为函数fopen中第一个参数的是A. "c:\\user\\text.txt"B. c:\user\text.txtC. "c:\user\text.txt"D. c:user\text.txt答案:A题型:单选题知识点:第11章文件难度:121.若y是int型变量,则判断y为偶数的关系表达式为__________。
python课程设计大作业一、教学目标本课程的目标是让学生掌握Python编程语言的基本语法、数据类型、控制结构、函数、模块和面向对象编程等知识,培养学生运用Python解决实际问题的能力。
1.理解Python编程语言的基本语法和规则。
2.掌握Python的数据类型、变量和运算符。
3.学会使用Python的控制结构,如条件语句和循环语句。
4.熟悉Python的函数定义和调用。
5.了解Python的模块导入和调用。
6.掌握Python的面向对象编程思想,如类、对象、继承和多态。
7.能够编写简单的Python程序,实现基本的数据处理和计算。
8.能够运用条件语句和循环语句解决实际问题。
9.能够定义和调用函数,提高代码的可重用性和可维护性。
10.能够使用模块导入和调用,优化程序结构。
11.能够运用面向对象编程思想设计和实现程序。
情感态度价值观目标:1.培养学生对编程语言的兴趣和好奇心。
2.培养学生解决问题的能力和创新精神。
3.培养学生团队合作和自主学习的意识。
二、教学内容本课程的教学内容主要包括Python编程语言的基本语法、数据类型、控制结构、函数、模块和面向对象编程等。
1.Python基本语法和规则。
2.Python的数据类型、变量和运算符。
3.Python的控制结构,如条件语句和循环语句。
4.Python的函数定义和调用。
5.Python的模块导入和调用。
6.Python的面向对象编程思想,如类、对象、继承和多态。
7.课程简介:介绍Python编程语言的特点和应用领域。
8.Python基本语法:讲解Python的基本语法和规则。
9.数据类型和变量:介绍Python的数据类型、变量和运算符。
10.控制结构:讲解Python的条件语句和循环语句。
11.函数:讲解Python的函数定义和调用。
12.模块:介绍Python的模块导入和调用。
13.面向对象编程:讲解Python的类、对象、继承和多态。
三、教学方法本课程采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等,以激发学生的学习兴趣和主动性。
计算机程序员考试试题及答案.(DOC)计算机考试试题及答案一、单项挑选题(每小题1分,共20分)在每小题列出的四个选项中,选出一具正确答案,并将正确答案的号码写在题干后面的括号内。
1.对于操作系统的叙述()是别正确的。
A.“治理资源的程序”B.“治理用户程序执行的程序”C.“能使系统资源提高效率的程序”D.“能方便用户编程的程序”2.操作系统的进展过程是()A.设备驱动程序组成的原始操作系统,治理程序,操作系统B.原始操作系统,操作系统,治理程序C.治理程序,原始操作系统,操作系统D.治理程序,操作系统,原始操作系统3.用户程序中的输入,输出操作实际上是由()完成。
A.程序设计语言B.编译系统C.操作系统D.标准库程序4.计算机系统中判不是否有中断事件发生应是在()A.进程切换时B.执行完一条指令后C.执行P操作后D.由用户态转入核心态时5.设计批处理多道系统时,首先要思考的是()A.灵便性和可习惯性B.系统效率和吞吐量C.交互性和响应时刻D.实时性和可*性6.若当前进程因时刻片用完而让出处理机时,该进程应转变为( )状态。
A.就绪B.等待C.运行D.完成7.支持程序浮动的地址转换机制是( )A.页式地址转换B.段式地址转换C.静态重定位D.动态重定位8.在可变分区存储治理中,最优习惯分配算法要求对空暇区表项按( )举行罗列。
A.地址从大到小B.地址从小到大C.尺寸从大到小D.尺寸从小到大9.逻辑文件存放在到存储介质上时,采纳的组织形式是与( )有关的。
A.逻辑文件结构B.存储介质特性C.主存储器治理方式D.分配外设方式10.文件的保密是指防止文件被( )A.篡改B.破坏C.窃取D.删除11.对磁盘举行移臂调度的目的是为了缩短( )时刻。
A.寻觅C.传送D.启动12.启动外设前必须组织好通道程序,通道程序是由若干( )组成。
WB.CSWC.CAWD.PSW13.一种既有利于短小作业又兼顾到长作业的作业调度算法是( )A.先来先服务B.轮转C.最高响应比优先D.均衡调度14.作业调度程序是从处于( )状态的作业中选取一具作业并把它装入主存。
学习中心/函授站_姓名学号西安电子科技大学网络与继续教育学院2019学年上学期《高级语言程序设计(C)》期末考试试题(综合大作业)考试说明:1、大作业试题于2019年4月25日公布,2019年4月26日至2019年5月12日在线上传大作业答卷(最多上传10张图片);2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院综合大作业答题纸》手写完成,要求字迹工整、卷面干净。
一、选择题(本题共20道小题,共40分。
)1. 设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是A)把x和y按从大到小排列 B)把x和y按从小到大排列C)无确定结果 D)交换x和y中的值2. 下面程序的输出是void prtv(int *x){ printf("%d\n", ++(*x));}main(){ int a=25;prtv(&a);}A) 23 B) 24C) 25 D) 263. int x=10, y=20, z=30;if(x>y) z=x; x=y; y=z;以上语句执行后x, y, z的值是A) x=10,y=20,z=30B) x=20,y=30,z=30C) x=20,y=30,z=10D) x=20,y=30,z=204. 设有以下宏定义:#define N 3#define Y(n) ((N+1)*n)则执行语句:z=2 *(N+Y(5+1))后,z的值为A)出错 B)42 C)48 D)545. 逻辑运算符两侧运算对象的数据类型是()。
A) 只能是0或1B) 只能是0或非0正数C) 只能是整型或字符型数据D) 可以是任何类型的数据6. 当执行以下程序段时x=-1;do { x=x*x;}while(!x);A)循环体将执行一次 B)循环体将执行两次C)循环体将执行无限次 D)系统将提示有语法错误7. int x=3;do{ printf("%3d",x-=2);}while(!(--x));以上程序段的输出结果是A) 1 B) 3 0 C) 1-2 D) 死循环8. main(){int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); } 以上程序段的输出结果是A)k=11,k=12,k=11 B)k=11,k=13,k=13C)k=11,k=013,k=0xb D)k=11,k=13,k=b9.以下程序的输出结果是()。
大作业计算机网络 Company number:【0089WT-8898YT-W8CCB-BUUT-202108】江南大学现代远程教育2015年下半年考试大作业考试科目:《计算机网络》一、大作业题目:1、说明INTERNET域名系统的功能。
举一个实例解释域名解析的过程。
(25分)答: DNS实现主机域名和IP地址之间的解析。
①首先,该台计算机的解析器向其本地域名服务器发出请求,查寻“”的IP地址,如果没有该纪录,则向上一级域名服务器发请求,直到中国的顶级域名服务器。
②中国的顶级域名服务器先查询自己的数据库,若发现没有相关的记录,则向根“.”域名服务器发出查寻“”的IP地址请求;根域名服务器给中国域名服务器返回一个指针信息,并指向com域名服务器。
③中国的本地域名服务器向com域名服务器发出查找“”的IP地址请求,com域名服务器给中国的本地域名服务器返回一个指针信息,并指向“”域名服务器。
④经过同样的解析过程,“”域名服务器再将“”的IP地址返回给中国的本地域名服务器。
⑤中国域名服务器将“”的IP地址逐级发送给该计算机解析器。
⑥2、若要将一个C类的网络地址划分为4个子网,分别代表四个部门,这4个部门分别有计算机5、7、12、20台。
请写出每个子网的子网掩码和主机IP地址的范围。
(25分)四个子网如下:3、某医院建设信息网络系统。
系统分为业务内网和INTERNET外网两部分。
内网运行医院业务应用系统,诸如电子病例系统、住院管理系统等。
医院还建有门诊挂号预约系统,病员信息查询系统,向外网用户提供服务。
医院应用数据根据上级主管部门要求,需要每天规定时间上传病案数据到卫生质量监测部门。
请设计一套信息数据安全方案,满足内部业务应用系统和外网应用的需求,内、外网数据交换的需求。
(50分)要求:1)给出方案设计的详细拓扑图2)给出各个应用系统服务器的部署(电子病例系统、住院管理系统、门诊挂号预约系统,病员信息查询系统等)3)给出安全产品的部署和采用的类型、数量4)详细说明方案中各部分功能和安全策略5)所需安全产品选型通过安全产品厂商的主页查询获得(例如:天融信,天行网安,启明星辰,绿盟,深信服等,不限于此名单)答:一、本院建设概况本院系一家三甲医院,2004年开始建设新院,从原城区中心位置迁建到新规划城区的中心位置,新院占地228亩,建筑面积万平方米,设计床位1500张,至2007年10月底已整体启用。
网络程序设计考试大作业题目:聊天室程序班级:学号:姓名:成绩:网络程序设计考试大作业 (1)一.所使用的背景知识、主要函数的描述 (3)二.程序设计思想及程序设计流程框图 (3)三.主要代码及代码运行结果 (4)1.启动服务器 (4)2. 登录 (6)3. 注册 (10)4. 登录和注册判定 (12)5. 进入聊天界面 (13)6. 私聊页面 (17)一.所使用的背景知识、主要函数的描述背景:根据现在最流行的聊天工具QQ,模仿一部分主要功能来完成。
主要函数:public class Server;服务器的创建。
public class Client;客户端的创建。
public class UserInformation;用户信息的保存和验证。
二.程序设计思想及程序设计流程框图设计思想:利用socket与server socket在客户端与客户端之间的通信,InputStream InputStreamReader输入输出流进行信息的发送与接收。
程序设计流程:主页面:输入账号与密码,点击登录或者注册进入下一页面。
登录:判定是否正确,正确则进去聊天界面。
注册:进去注册界面,成功则返回主页面。
进入聊天室:能发送信息让在线的所有人看到。
私聊界面:能与一个人单独聊天,信息只能被双方看到。
三.主要代码及代码运行结果1.启动服务器代码:public class Server {ServerSocket server;static int clientNum = 0;// 存放与服务器连接上的对应的Socket,作用是保存服务器与客户端之间的流,便于服务器给每个客户端进行回发消息List<Socket> clientConnection = new ArrayList<Socket>();public Server() {try {server = new ServerSocket(9999);System.out.println("服务器已经启动");} catch (IOException e) {e.printStackTrace();System.out.println("服务器启动失败");}}// 内部类,监听客户端是否有连接到服务器,并将此客户端的Socket传递给HandleSocket进行处理,同时将client存放到List中,即clientConnection中class SocketListener implements Runnable {public void run() {Socket client;try {while (true) {client = server.accept();// 连接上一个就压入List中,即clientConnection中clientConnection.add(client);HandleSocket hs = new HandleSocket(client);// 连接上就让HandleSocket去处理new Thread(hs).start();}} catch (IOException e) {System.out.println("客户连接服务器失败");}}}// 内部类处理一个Socket,接收一个Client发送过来的消息,并且服务器原封不动的返回给所有客户端,客户端对消息进行过滤class HandleSocket implements Runnable {Socket client;HandleSocket(Socket client) {this.client = client;}public void run() {try {clientNum++;// 启用输入流InputStream is = client.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);System.out.println("第" + clientNum + "个客户端连接进入服务器");boolean flag = true;String s;do {// 对用户发来的消息进行群发给客户端s = br.readLine();System.out.println("接受到一个客户端消息:" + s);for (int i = 0; i < clientConnection.size(); i++) {Socket client = clientConnection.get(i);OutputStream os = client.getOutputStream();PrintStream ps = new PrintStream(os);ps.println(s);}} while (flag);client.close();} catch (IOException e) {System.out.println("有一个客户断开与服务器的连接");}}}界面:2.登录代码:package com.qq.main;import java.awt.Color;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;import com.qq.regist.Regist;import erInformation;/*** 主界面*/public class Main extends JFrame {//组件的内容private JLabel userId;private JLabel userPassword;private JTextField inputId;private JPasswordField inputPassword;private JButton btLogin;private JButton btRegist;Main() {userId = new JLabel("帐号");userPassword = new JLabel("密码");inputId = new JTextField(6);inputPassword = new JPasswordField();btLogin = new JButton("登陆");btRegist = new JButton("注册");// 设置窗体属性Toolkit tk = Toolkit.getDefaultToolkit();Dimension screenSize = tk.getScreenSize();//得到当前屏幕的长和宽int x = (int) screenSize.getWidth();int y = (int) screenSize.getHeight();this.setBounds((x - 240) / 2, (y - 600) / 2, 240, 600);//窗口显示的大小,位置this.setResizable(false);//窗口大小不能改变this.setLayout(null);//默认的格式this.setBackground(Color.BLACK);// 窗口的颜色this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出程序// 设置JLabel属性userId.setBounds(30, 160, 40, 20);userPassword.setBounds(30, 200, 40, 20);// 设置文本域属性inputId.setBounds(90, 160, 100, 20);inputPassword.setBounds(90, 200, 100, 20);inputPassword.setEchoChar('*');//用*显示代替你输入的密码// 设置JButton属性btLogin.setBounds(50, 240, 60, 20);btRegist.setBounds(120, 240, 60, 20);// 注册“登陆”按钮监听器btLogin.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {UserInformation user = new UserInformation();String userName = inputId.getText();String userPassword = new String(inputPassword.getPassword());if (userName.equals("")) {JOptionPane.showMessageDialog(null, "用户名不能为空");} else if ("".equals(userPassword)) {JOptionPane.showMessageDialog(null, "密码不能为空");} else if (user.isExist(userName)&& erInfomation.getProperty(userName).equals(userPassword)) {new AllTalkFrame(userName).setVisible(true);// 判断成功后new一个群聊窗口Main.this.dispose();} else {JOptionPane.showMessageDialog(null, "此用户名不存在或者密码不正确");}}});// 注册“注册”按钮监听器btRegist.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {new Regist();//注册页面}});this.add(userId);this.add(userPassword);this.add(inputId);this.add(inputPassword);this.add(btLogin);this.add(btRegist);this.setVisible(true);}public static void main(String[] args) { new Main();}}界面:3.注册代码:// 注册“提交”按钮的监听器btSubmit.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String userName = inputId.getText();String userPassword = newString(inputPassword.getPassword());String userPasswordConfirm= new String(inputPasswordConfirm.getPassword());System.out.println("您点击了提交按钮");if (userName.equals("")) {JOptionPane.showMessageDialog(null, "用户名不能为空");} else if ("".equals(userPassword)|| "".equals(userPasswordConfirm)) {JOptionPane.showMessageDialog(null, "密码和密码重复都不能为空");} else if (!userPassword.equals(userPasswordConfirm)) {JOptionPane.showMessageDialog(null, "密码和密码重复不一致");} else {UserInformation user = new UserInformation();if (user.isExist(userName)) {JOptionPane.showMessageDialog(null, "此用户名已存在");} else {JOptionPane.showMessageDialog(null, "注册成功");user.insert(userName,userPassword);//UserInformation类Regist.this.dispose();}}}});// 注册“取消”按钮的监听器btCancel.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("您点击了取消按钮");Regist.this.dispose();}});界面:4.登录和注册判定代码://注册一个用户public void insert(String userName, String userPassword) { try {userInfomation = new Properties();InputStream is;OutputStream os;is = new FileInputStream("c:/userInfo.properties");os = new FileOutputStream("c:/userInfo.properties", true);userInfomation.load(is);// 将用户名和密码存储到内存中userInfomation.setProperty(userName, userPassword);// 将用户名和密码保存到文件中userInfomation.store(os, null);} catch (FileNotFoundException e1) {System.out.println("文件userInfo.properties没有找到 ");} catch (IOException e) {System.out.println("写 userInfo.properties 出错");}}//判断此用户名是否存在public boolean isExist(String userName) {try {userInfomation = new Properties();InputStream is;is = new FileInputStream("c:/userInfo.properties");userInfomation.load(is);if (userInfomation.containsKey(userName)) {return true;}} catch (FileNotFoundException e1) {System.out.println("文件userInfo.properties没有找到 ");} catch (IOException e) {System.out.println("写 userInfo.properties 出错");}return false;}5.进入聊天界面代码:class showOldMessageThread implements Runnable {public void run() {boolean flag = true;while (flag) {try {// 接收群聊服务器端回发过来的消息String serverOutput = client.br.readLine() + "\r\n";if (!serverOutput.startsWith("私聊")&& !serverOutput.startsWith("*")&& !(serverOutput.substring(serverOutput.indexOf(":") + 1).equals("\r\n"))) {String s1 = serverOutput.replace('说', ' ');String s = s1.replaceAll("�", "\r\n ");oldMessageTextArea.append(s);}// 添加客户端的用户在线列表if (!serverOutput.startsWith("*")&& !serverOutput.startsWith("私聊")&& (serverOutput.indexOf("说") != -1)) {String listName = serverOutput.substring(0,serverOutput.indexOf('说'));// 如果JList中有相同名字的用户,则不添加,否则添加if (!users.contains(listName)) {System.out.println("用户" + listName + "上线了");users.add(listName);userList.setListData(users);}}// 判断服务器回发过来的消息是不是以"私聊"开头的,是的话就提取出这两个用户名if (serverOutput.startsWith("私聊")) {String siliaoName1 = serverOutput.substring(serverOutput.indexOf("*") + 1, serverOutput.indexOf("和"));String siliaoName2 = serverOutput.substring(serverOutput.indexOf("和") + 1, serverOutput.indexOf("\r"));String siliaoBenshen = "";String siliaoDuixiangName = "";if (siliaoName1.equals(clientName)) {siliaoBenshen = siliaoName1;siliaoDuixiangName = siliaoName2;} else {siliaoBenshen = siliaoName2;siliaoDuixiangName = siliaoName1;}// 判断这两个名字中是否有与自己同名的,有的话就弹出个私聊窗口if (siliaoName1.equals(clientName)|| siliaoName2.equals(clientName)) {new PointToPointTalkFrame(siliaoBenshen + "和"+ siliaoDuixiangName).setVisible(true);}}} catch (IOException e1) {System.out.println("读取服务器端消息出错");}}}}// 注册JList的点击事件,进入私聊界面userList.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 2) {if (erList.getSelectedValue().toString().equals(clientName)) {JOptionPane.showMessageDialog(null, "不能和自己聊天");} else {String PToPMemberName = "私聊"+ "*"+ clientName+ "和"+erList.getSelectedValue().toString();client.ps.println(PToPMemberName);}}}});界面:6.私聊页面代码:// 线程:只要服务器端有消息,就将消息显示到oldMessageTextAreaclass showOldMessageThread implements Runnable {public void run() {boolean flag = true;while (flag) {try {// 接收服务器端回发过来的消息String serverOutput = client.br.readLine() + "\r\n";System.out.println("私聊服务器发过来的消息:" + serverOutput);// 将消息中的两个用户名提取出来String s1 = "";if (serverOutput.startsWith("私聊")) {String[] s;if (serverOutput.startsWith("私聊*")) {s = serverOutput.substring(3,serverOutput.indexOf("\r")).split("和");} else {s = serverOutput.substring(2,serverOutput.indexOf("说")).split("和");}for (int i = 0; i < s.length; i++) {s1 = s1 + s[i];}}// 将标题中的两个用户名提取出来,有两种顺序String[] title = clientName.split("和");String s2 = "";for (int i = 0; i < title.length; i++) {s2 = s2 + title[i];}String s3 = "";for (int i = title.length - 1; i >= 0; i--) {s3 = s3 + title[i];}// 判断服务器端返回消息中的两个用户名等于客户端的两个用户名(忽略顺序),则将消息显示出来(也就是显示在私聊窗口上)if (s1.equals(s2) || s1.equals(s3)) {String ss1 = serverOutput.substring(2, serverOutput.indexOf("和"));String ss2 = serverOutput.substring(serverOutput.indexOf(":"));// 将私聊客户端返回来的一行字符串按"�"进行拆分成多行,显示在私聊的oldMessageArea中if (ss2.indexOf("�") != -1) {ss2 = ss2.replaceAll("�", "\r\n ");}oldMessageTextArea.append(ss1 + ss2);}} catch (IOException e1) {System.out.println("读取服务器端消息出错");}}}}界面:。