java课程设计报告张文华.docx
- 文档编号:26702337
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:47
- 大小:204.32KB
java课程设计报告张文华.docx
《java课程设计报告张文华.docx》由会员分享,可在线阅读,更多相关《java课程设计报告张文华.docx(47页珍藏版)》请在冰豆网上搜索。
java课程设计报告张文华
课程设计报告
2013~2014学年第一学期
学号20124053033
姓名张文华
院系南海学院
专业计算机网络技术
课程名称JAVA程序设计
课程设计名称基于Java的QQ聊天工具的设计与实现
学时学分
指导教师许烁娜
2014年1月日
《Java网络编程课程设计》验收及成绩评定表
项目名称:
基于Java的QQ聊天工具的设计与实现
职责
学号
姓名
主要分工
设计开始日期:
项目完成日期
文档评审成绩(50分)
评审项目
评审内容
成绩标准
评审成绩
文档格式
文档格式是否规范,文字是否规范,图片是否规范,术语是否准确
20分
文档质量
程序设计思想和整体框架是否清晰
30分
文档总体评价
总成绩
程序功能完备性评审成绩(共50分)
评审项目
评审内容能够
成绩标准
评审成绩
程序正确性
对于给定的输入数据,是否能得到正面的输出结果
20分
程序与文档的一致性
程序与各种文档的内容是否一直
10分
程序代码量
程序代码量的大小
10分
实现方法
图形界面和命令行界面,美观程度
10分
程序总体评价
总成绩
第1章引言
1.1背景
在2013年至2014年学年第一个学期里,我们学习了java程序设计之网络编程这门课程,在这个课程学习中,我们java编程的基本内容与概念,从第10周开始,我们学习了面向对象的程序编程,开始了这个学期的课程设计的相关内容。
经过8周的努力和老师的帮助下,我们顺利的完成了QQ登陆,显示,聊天等课程设计任务。
1.2相关技术
1、面向对象的程序化设计
2、数据库的链接,查询
3、键盘事件,鼠标事件的触发
4、面板的设计以及按钮事件的触发
5、服务器的创建与链接
6、线程的创建
7、界面的排版,不同选卡的显示
8、点对点聊天与多点聊天的实现
1.2.1JAVA概述
一、程序设计语言
共包括3类:
面向机器、面向过程和面向对象的程序设计语言
2、面向对象的程序设计语言
1>、类与对象
1、类:
相同类别的事物的抽象化表示,类具有属性和方法的声明。
2、对象:
对象是类的实例化
3、类与对象的关系:
类是对象的模板,对象是类的实例
2>、面向对象的程序设计特性
面向对象的程序设计指一种程序设计范型,同时也是一种程序开发的方法论。
它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和拓展性。
1、封装性:
讲数据和对数据的操作都封装在一个类中。
封装就是隐藏信息,是面向对象方法的中心,是面向对象程序设计的基础。
(1)将有关的代码和数据封装在一个对象中,个对象之间相互独立,互不干扰
(2)将对象中的某些部分隐藏,隐藏内部细节,只留下少量接口
2、继承性:
在类、子类及对象之间自动共享属性和行为的机制,继承机制解决了软件的重用问题。
3、多态性:
表示特定的功能时,有多种不同的形态或实现方法。
方法的重载:
在同一个类中某个方法有多种不同的形态。
方法的覆盖:
子类对父类的某个方法的重新定义。
4、抽象性:
高层类是对低层类的抽象,类与对象关系上。
3>、面向过程和面向对象的程序设计主要的区别
结构化编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块、它以过程为中心,强调的是过程,强调功能和模块化。
通过一系列过程的调用和处理完成相应的任务。
面向对象编程以对象为中心,是对一系列相关对象的操纵,发送消息给对象,由对象执行相应的操作并返回结果,强调的是对象。
三、java语言的特点
1、简单性:
java略去了运算符重载、多重继承等模糊的概念,并通过实现自动垃圾收集,大大简化了程序设计者的内存管理工作。
Java语言由C语言/C++语言发展而来,语言风格十分相似,易于学习。
2、分布性:
java是面向网络的语言。
通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便地访问其他对象。
3、强壮性:
java在编译和运行程序时,都要对可能出现的问题进行检查。
它提供自动收集垃圾来进行内存管理。
在编译时,java提示出可能出现但未被处理的例外情况,还可以捕获类型声明中的许多常见的错误,防止动态运行时不匹配问题的出现。
4、安全性:
用于网络、分布环境下的java必须要防止病毒的入侵,java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,同时也避免了指针操作中容易产生的错误。
5、跨平台性:
java解析器生成与体系结构无关的字节码指令,只要安装了java运行时的系统,java程序就可在任意的处理器得到字节码后,对它进行转换,使之能够在不同的平台上运行。
6、可移植性:
java程序可以方便地移植到网络上的不同机器。
同时,java的类库中也实现了与不同平台的接口,使这些类库可以移植。
7、解释执行:
java解释器直接对java字节码进行解释执行。
字节码携带了许多编译时的信息,使得连接过程更加简单使用起来更方便。
8、多线程:
多线程机制使应用程序能够并发执行,而且同步机制保证了对共享数据的正确操作。
通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。
9、动态性:
java的设计使它适合于一个不断发展的环境,在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行;并且java通过接口支持多重继承,使之比严格的类继承具有更灵活的方式和拓展性。
1.2.2Socket
Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。
在Java中,有专门的Socket类来处理用户的请求和响应。
利用Socket类的方法,就可以实现两台计算机之间的通讯。
这里就介绍一下在Java中如何利用Socket进行网络编程。
在Java中Socket可以理解为客户端或者服务器端的一个非凡的对象,这个对象有两个要害的方法,一个是getInputStream方法,另一个是
getOutputStream方法。
getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。
GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。
程序可以对这些数据流根据需要进行进一步的封装。
本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。
为了更好的说明问题,这里举了一个网上对话的例子,客户端启动以后,服务器会启动一个线程来与客户进行文字交流。
要完成这个工作,需要完成三个部分的工作,以下依次说明:
一、建立服务器类
Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。
ServerSocket server = new ServerSocket(9998)
这条语句创建了一个服务器对象,这个服务器使用9998号端口。
当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。
服务器端便可以利用这个Socket对象与客户进行通讯。
Socket incoming = server.accept()
进而得到输入流和输出流,并进行封装
BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));PrintWriter out = new PrintWriter(incoming.getOutputStream(),true);
随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。
从而可以根据程序的需要对客户端的不同请求进行回应。
1.2.3JDBC
JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯JavaAPI编写数据库应用程序,同时,JDBC也是个商标名。
有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。
换言之,有了JDBCAPI,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBCAPI写一个程序就够了,它可向相应数据库发送SQL调用。
同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。
Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。
JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。
作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。
JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。
JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。
Java具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。
所需要的只是Java应用程序与各种不同数据库之间进行对话的方法。
而JDBC正是作为此种用途的机制。
JDBC扩展了Java的功能。
例如,用Java和JDBCAPI可以发布含有applet的网页,而该applet使用的信息可能来自远程数据库。
企业也可以用JDBC通过Intranet将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有Windows、Macintosh和UNIX等各种不同的操作系统)。
随着越来越多的程序员开始使用Java编程语言,对从Java中便捷地访问数据库的要求也在日益增加。
MIS管理员们都喜欢Java和JDBC的结合,因为它使信息传播变得容易和经济。
企业可继续使用它们安装好的数据库,并能便捷地存取信息,即使这些信息是储存在不同数据库管理系统上。
新程序的开发期很短。
安装和版本控制将大为简化。
程序员可只编写一遍应用程序或只更新一次,然后将它放到服务器上,随后任何人就都可得到最新版本的应用程序。
对于商务上的销售信息服务,Java和JDBC可为外部客户提供获取信息更新的更好方法。
1.2.4TCP三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次
第一次握手:
建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:
同步序列编号(SynchronizeSequenceNumbers)。
第二次
第二次握手:
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
1.3术语
第2章需求分析与系统设计
2.1需求分析
1、QQ登陆界面的设计与排版
2、按钮事件监听的处理
3、注册新账号的界面的设计排版以及注册时需要的数据库链接
4、建立登陆界面
5、登陆按钮时事件的处理,链接数据库获取好友信息
6、设置好友属性,好友上线时头像亮,下线是头像暗
7、建立鼠标双击事件,双击好友处时弹出与好友聊天的对话框
8、建立聊天的对话框,并创建服务器,实现聊天功能
2.2系统设计
2.2.1多用户在线方案
创建好服务器,利用多线程方案来实现多用户在线方案。
将服务器建立好以后,开启服务器,使服务器处于监听状态,当客户端链接服务器是,服务器为新来的客户新建一个线程,实现多用户在线方案。
2.2.2软件框架
1、Eclipse工作桌面,用于对java代码的编写。
2、access数据库,用于数据库的链接
第3章系统实施
3.1系统功能实现
3.2.1QQ登陆界面的设计:
在建立QQ界面时,需要将所用到的按钮,图片准备好,设置多个JPanel用于布局,不同的JPanel用不同的布局,实现代码如下:
publicclassMyQQClientextendsJFrameimplementsActionListener{
JButtonbtn1,btn2,btn3,btn4;
JPaneljp1,jp2,jp3,jp4;
JLabellbl,lbl1,lbl2,lbl3,lbl4,lbl5;
JTextFieldjtxt;
JPasswordFieldjpassw;
JCheckBoxjc1,jc2;
JTabbedPanejtb;
publicMyQQClient(){
this.setTitle("QQ登录");
this.setBounds(100,200,350,200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
lbl1=newJLabel(newImageIcon("image/qqtitle.jpg"));
this.add(lbl1,"North");
lbl2=newJLabel("帐号:
",JLabel.RIGHT);
lbl3=newJLabel("密码:
",JLabel.RIGHT);
btn1=newJButton(newImageIcon("image/clear.gif"));
jtxt=newJTextField("20801");
jtxt.setSize(150,30);
jpassw=newJPasswordField("123123");
lbl4=newJLabel("忘记密码",JLabel.CENTER);
lbl4.setForeground(Color.blue);
jc1=newJCheckBox("隐身登录");
jc2=newJCheckBox("记住密码");
lbl5=newJLabel("申请帐号保护",JLabel.CENTER);
jp1=newJPanel(newGridLayout(3,3));
this.add(jp1);
jp1.add(lbl2);
jp1.add(jtxt);
jp1.add(btn1);
jp1.add(lbl3);
jp1.add(jpassw);
jp1.add(lbl4);
jp1.add(jc1);
jp1.add(jc2);
jp1.add(lbl5);
jp2=newJPanel(newGridLayout(1,3));
//jp2.setSize(350,40);
this.add(jp2,"South");
btn2=newJButton("登录");
btn3=newJButton(newImageIcon("image/quxiao.gif"));
btn4=newJButton("注册账号");
jp2.add(btn2);
jp2.add(btn3);
jp2.add(btn4);
btn1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
jtxt.setText("");
}
});
btn2.addActionListener(this);
btn3.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
jtxt.setText("");
jpassw.setText("");
}
});
btn4.addActionListener(this);
this.setVisible(true);
}
publicstaticvoidmain(String[]args){
MyQQClientmyQQClient=newMyQQClient();
}
3.2.2注册面板的设计:
在QQ登陆面板中单击注册按钮后,显示此对象框。
首先单击时,新建一个JDialog窗口,这样,把需要用户注册的信息加上去即可,对注册按钮进行事件处理,当单击注册时,链接数据库,将用户的注册信息写入数据库,并显示用户新注册的QQ账号。
实现代码如下:
classzhuceimplementsActionListener{
JLabelnick=newJLabel("昵称:
",JLabel.RIGHT);
JLabelmima=newJLabel("密码:
",JLabel.RIGHT);
JTextFieldnickname=newJTextField();
JTextFieldpw=newJTextField();
JLabelxinbie=newJLabel("性别:
",JLabel.RIGHT);
JLabelshengri=newJLabel("出生日期:
",JLabel.RIGHT);
JLabeldizhi=newJLabel("所在地:
",JLabel.RIGHT);
Stringyear[]={"1988","1989","1990","1991","1992","1993","1994","1995"};
Stringmonth[]={"01","02","03","04","05","06","07","08","09","10","11","12"};
Stringday[]={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"};
Strings[]={"男","女"};
JComboBoxsex1=newJComboBox(s);
JPanelpn1=newJPanel();
JComboBoxy=newJComboBox(year);
JComboBoxm=newJComboBox(month);
JComboBoxd=newJComboBox(day);
Stringsheng[]={"广东"};
Stringcity[]={"广州","佛山","深圳","汕头","珠海"};
JComboBoxsh=newJComboBox(sheng);
JComboBoxct=newJComboBox(city);
JButtonbtnn1=newJButton("注册");
JButtonbtnn2=newJButton("关闭");
JDialogdialog;
publiczhuce(JFramef){
dialog=newJDialog(f,"QQ注册",true);
JPanelpn=newJPanel();
dialog.setBounds(100,200,350,300);
dialog.add(pn);
pn.setLayout(newGridLayout(7,1));
pn1.add(y);
pn1.add(m);
pn1.add(d);
JPanelpn2=newJPanel();
pn2.add(sh);
pn2.add(ct);
pn.add(nick);
pn.add(nickname);
pn.add(mima);
pn.add(pw);
pn.add(xinbie);
pn.add(sex1);
pn.add(shengri);
pn.add(pn1);
pn.add(dizhi);
pn.add(pn2);
pn.add(btnn1);
pn.add(btnn2);
lbl=newJLabel("您还未注册");
pn.add(lbl);
btnn2.addActionListener(this);
btnn1.addActionListener(this);
dialog.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
Conncn=newConn();
Stringcmd=e.getActionCommand();
if(cmd.equals("注册")){
Connectioncon=cn.getConnection();
Statementsql;
try{
Stringname=nickname.getText();
Stringpwd=pw.getText();
Stringsex=sex1.getSelectedItem().toString();
Stringyy=y.getSelectedItem(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 报告 文华