java网络编程课程设计终极版

合集下载

jave课程设计

jave课程设计

jave课程设计一、课程目标知识目标:1. 理解Java基本语法和编程结构,掌握变量、数据类型、运算符、控制流程等基本概念。

2. 学会使用面向对象编程思想,理解类与对象的关系,掌握封装、继承、多态等核心概念。

3. 了解Java常用的集合框架,熟练运用数组、列表、映射等数据结构解决问题。

4. 掌握Java异常处理机制,提高程序的健壮性。

技能目标:1. 能够运用所学知识编写简单的Java程序,解决实际问题。

2. 学会使用调试工具,分析并解决程序中的错误。

3. 掌握Java编程规范,编写具有良好可读性的代码。

4. 提高团队协作能力,学会与他人共同完成项目。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情。

2. 培养学生的逻辑思维能力,提高分析问题和解决问题的能力。

3. 培养学生良好的编程习惯,注重代码质量。

4. 培养学生的创新意识,鼓励尝试新方法解决问题。

课程性质:本课程为Java编程入门课程,旨在让学生掌握Java基本语法和编程技巧,培养编程兴趣和逻辑思维能力。

学生特点:学生处于初级阶段,对编程有一定兴趣,但基础薄弱,需要从基础开始逐步引导。

教学要求:注重理论与实践相结合,通过案例分析和实际操作,帮助学生掌握Java编程技能。

同时,关注学生的学习进度和个体差异,提供有针对性的指导。

在教学过程中,强调编程规范和团队协作,培养学生的职业素养。

二、教学内容1. Java基本概念与语法- 程序基本结构- 变量、数据类型与运算符- 控制流程(条件语句、循环语句)2. 面向对象编程- 类与对象- 封装、继承、多态- 抽象类与接口3. 常用集合框架- 数组- 列表、映射- 集合操作与遍历4. 异常处理- 异常类型- 异常捕获与处理- 自定义异常5. Java编程规范与调试- 代码规范- 调试方法与技巧- 优化程序性能6. 实践项目- 设计小型程序,解决实际问题- 团队协作完成项目- 代码审查与优化教学内容安排与进度:1. 第1-2周:Java基本概念与语法2. 第3-4周:面向对象编程3. 第5-6周:常用集合框架4. 第7-8周:异常处理5. 第9-10周:Java编程规范与调试6. 第11-12周:实践项目教材章节关联:1. 第一章:Java入门2. 第二章:Java基本语法3. 第三章:面向对象基础4. 第四章:高级面向对象5. 第五章:集合框架6. 第六章:异常处理7. 第七章:Java编程规范与实践教学内容确保科学性和系统性,结合教材章节进行有序安排,以适应学生的认知水平和学习进度。

JAVA课程设计精编

JAVA课程设计精编

JAVA课程设计精编一、教学目标本节课的教学目标是让学生掌握Java编程的基本语法和结构,能够编写简单的Java程序。

具体来说,知识目标包括理解Java编程语言的基本概念,如变量、数据类型、运算符、控制结构等;技能目标包括能够使用Java编程语言编写程序,解决简单的数学问题,如计算器的实现;情感态度价值观目标包括培养学生的编程兴趣,提高学生解决问题的能力。

二、教学内容本节课的教学内容主要包括Java编程语言的基本语法和结构。

具体来说,首先介绍Java编程语言的基本概念,如变量、数据类型、运算符、控制结构等;然后通过实例演示和练习,让学生掌握这些概念的具体应用;最后,通过编写一个简单的计算器程序,让学生能够综合运用所学的知识。

三、教学方法本节课的教学方法主要包括讲授法和练习法。

首先,通过讲授法向学生介绍Java编程语言的基本概念;然后,通过练习法让学生动手实践,巩固所学的知识。

此外,还可以采用讨论法,让学生在课堂上相互交流、讨论,提高他们的编程能力。

四、教学资源本节课的教学资源主要包括教材、参考书、多媒体资料和实验设备。

教材和参考书用于为学生提供理论知识的学习,多媒体资料用于辅助讲解和展示实例,实验设备用于让学生进行动手实践。

此外,还可以利用网络资源,如在线编程平台,让学生在课后进行自主学习和练习。

五、教学评估本节课的教学评估主要包括平时表现、作业和考试三个部分。

平时表现主要评估学生在课堂上的参与程度、提问回答等情况,占总分的30%;作业主要评估学生的编程实践能力,占总分的40%;考试主要评估学生对Java编程语言基本概念的理解和应用能力,占总分的30%。

评估方式应客观、公正,能够全面反映学生的学习成果。

六、教学安排本节课的教学安排如下:共安排8个学时,每个学时45分钟。

第一学时介绍Java编程语言的基本概念,第二学时讲解变量、数据类型和运算符,第三学时讲解控制结构,第四学时讲解数组和字符串,第五学时讲解函数,第六学时讲解面向对象编程,第七学时讲解异常处理,第八学时进行课程总结和复习。

java课程设计.

java课程设计.

java 课程设计 .一、教学目标本节课的教学目标是使学生掌握Java编程语言的基本语法和程序设计的基本思想,培养学生编写简单Java程序的能力。

具体来说,知识目标包括:1.理解Java语言的基本语法和数据类型。

2.掌握基本的控制结构和函数。

3.了解面向对象编程的基本概念。

技能目标包括:1.能够使用Java语言编写简单的程序。

2.能够利用面向对象编程思想解决实际问题。

情感态度价值观目标包括:1.培养学生对编程语言的兴趣和好奇心。

2.培养学生解决问题的能力和团队合作精神。

二、教学内容本节课的教学内容主要包括Java语言的基本语法、数据类型、控制结构和函数。

具体安排如下:1.介绍Java语言的基本语法和编程环境。

2.讲解Java的数据类型,包括整数类型、浮点类型、布尔类型等。

3.介绍控制结构,包括条件语句和循环语句。

4.讲解Java的函数,包括函数的定义和调用。

5.引入面向对象编程的基本概念,如类、对象、封装等。

三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法。

具体包括:1.讲授法:教师讲解Java语言的基本语法和编程环境。

2.案例分析法:通过分析具体的Java程序案例,使学生理解数据类型、控制结构和函数的使用。

3.实验法:学生动手编写Java程序,巩固所学知识。

4.讨论法:学生分组讨论面向对象编程的概念,分享学习心得。

四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源:1.教材:选用《Java编程思想》作为主要教材,为学生提供系统的学习材料。

2.参考书:提供《Java核心技术》等参考书籍,供学生深入学习。

3.多媒体资料:制作PPT课件,生动展示Java编程的相关概念。

4.实验设备:为学生提供计算机和网络环境,进行Java编程实践。

五、教学评估为了全面、客观地评估学生的学习成果,本节课将采用多种评估方式。

具体包括:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和理解程度。

java课程设计.docx

java课程设计.docx

java课程设计.docx一、教学目标本章节的教学目标分为三个部分:知识目标、技能目标和情感态度价值观目标。

知识目标:通过本章节的学习,学生需要掌握Java编程的基本语法、数据类型、控制结构、函数等基础知识。

技能目标:学生能够运用Java编程解决简单的实际问题,具备基本的编程能力。

情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生解决问题的能力。

二、教学内容本章节的教学内容主要包括Java编程的基本语法、数据类型、控制结构、函数等基础知识。

具体包括以下内容:1.Java编程的基本语法和规则2.数据类型:整数类型、浮点类型、字符类型、布尔类型等3.控制结构:顺序结构、选择结构、循环结构等4.函数:定义和调用函数,传递参数,返回值等5.常用内置函数:数学函数、字符串函数等三、教学方法本章节的教学方法采用讲授法、案例分析法和实验法相结合的方式进行。

1.讲授法:通过讲解和示范,让学生掌握Java编程的基本语法和规则,以及数据类型、控制结构、函数等基础知识。

2.案例分析法:通过分析实际案例,让学生学会如何运用Java编程解决实际问题。

3.实验法:通过上机实验,让学生动手实践,巩固所学知识,提高编程能力。

四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备等。

1.教材:选用权威、实用的Java编程教材,如《Java核心技术》等。

2.参考书:提供相关的Java编程参考书籍,如《Java编程思想》等。

3.多媒体资料:制作精美的PPT课件,提供Java编程相关的视频教程等。

4.实验设备:确保学生有足够的计算机设备进行上机实验。

五、教学评估本章节的教学评估主要包括平时表现、作业和考试三个部分,以全面、客观、公正地评估学生的学习成果。

1.平时表现:通过课堂参与、提问、讨论等方式,评估学生在课堂上的学习态度和表现。

2.作业:布置适量的作业,评估学生的知识掌握和运用能力。

3.考试:进行定期的考试,评估学生对章节知识的全面理解和掌握程度。

java网络与课程设计

java网络与课程设计

java网络与课程设计一、课程目标知识目标:1. 让学生掌握Java网络编程的基本概念,理解网络通信原理,掌握TCP/IP协议和套接字编程;2. 培养学生运用Java语言进行网络应用程序设计和开发的能力,熟悉常用的网络编程API;3. 引导学生了解网络信息安全的基本知识,提高网络安全意识。

技能目标:1. 培养学生具备独立设计和实现简单网络应用程序的能力;2. 提高学生运用所学知识解决实际网络编程问题的能力;3. 培养学生具备良好的编程习惯,能编写出结构清晰、可读性强的代码。

情感态度价值观目标:1. 激发学生对网络编程的兴趣,培养其主动探索和创新的意识;2. 培养学生具备团队协作精神,学会与他人共同解决问题;3. 增强学生的网络安全意识,使其在网络世界中具备正确的价值观和行为准则。

课程性质:本课程为实践性较强的课程,旨在培养学生的实际编程能力和网络编程思维。

学生特点:学生具备一定的Java基础,对网络编程有一定了解,但实际操作能力有待提高。

教学要求:注重理论与实践相结合,充分调动学生的主观能动性,鼓励学生动手实践,培养其解决实际问题的能力。

教学过程中,关注学生的个体差异,提供有针对性的指导,确保课程目标的达成。

将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 网络编程基本概念:介绍网络编程的基本原理,包括网络模型、协议、IP地址、端口号等,关联课本第二章。

2. TCP/IP协议:详细讲解TCP和UDP协议的特点、工作原理及应用场景,结合课本第三章进行教学。

3. 套接字编程:教授Java中Socket编程的基本方法,包括客户端和服务器端的创建与通信,参考课本第四章。

4. 网络应用程序设计:分析实际案例,引导学生设计并实现简单的网络应用程序,如聊天室、文件传输等,结合课本第五章。

5. 网络安全:介绍网络安全的基本概念,如加密、认证、防范网络攻击等,以增强学生的网络安全意识,关联课本第六章。

java课程设计_

java课程设计_

java课程设计_一、教学目标本课程旨在通过学习Java编程语言,使学生掌握Java编程的基本语法、面向对象编程思想以及常用数据结构;培养学生运用Java语言解决实际问题的能力;并通过对Java编程的实践,培养学生的逻辑思维能力、创新能力和团队合作意识。

具体来说,知识目标包括:1.理解Java编程语言的基本语法和编程规范。

2.掌握Java中的基本数据类型、运算符、控制语句。

3.理解面向对象编程的基本概念,如类、对象、封装、继承和多态。

4.熟悉Java中的常用数据结构,如数组、链表、树和图。

技能目标包括:1.能够使用Java编写简单的程序,实现基本的输入输出、计算等功能。

2.能够运用面向对象编程思想,设计并实现具有一定复杂度的程序。

3.能够运用Java中的数据结构,解决实际问题。

情感态度价值观目标包括:1.培养学生对编程语言的兴趣,激发学生的学习热情。

2.培养学生的逻辑思维能力,提高学生分析问题和解决问题的能力。

3.培养学生的团队合作意识,提高学生的沟通协作能力。

二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、面向对象编程思想和常用数据结构。

1.Java编程语言的基本语法:介绍Java编程语言的基本数据类型、运算符、控制语句等。

2.面向对象编程:讲解类、对象、封装、继承和多态等基本概念,并通过实例让学生深刻理解面向对象编程思想。

3.常用数据结构:介绍数组、链表、树和图等数据结构的基本概念和应用,并通过实例让学生学会运用数据结构解决实际问题。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。

1.讲授法:通过讲解Java编程语言的基本语法、面向对象编程思想和常用数据结构,使学生掌握相关知识。

2.案例分析法:通过分析实际案例,使学生更好地理解Java编程语言的应用和面向对象编程思想。

3.实验法:安排实验课程,让学生动手编写Java程序,巩固所学知识,培养学生的实际编程能力。

jav课程设计

jav课程设计

jav课程设计一、教学目标本课程旨在通过Java编程语言的学习,让学生掌握Java编程的基本语法、概念和编程技巧,培养学生解决问题的能力,提高学生的逻辑思维和编程实践能力。

1.理解Java编程语言的基本语法和概念。

2.掌握Java编程的基本技巧和编程方法。

3.了解Java编程语言的应用领域和发展趋势。

4.能够使用Java编程语言编写简单的程序。

5.能够运用Java编程语言解决实际问题。

6.能够阅读和理解Java编程语言的代码。

情感态度价值观目标:1.培养学生对编程语言的兴趣和热情。

2.培养学生解决问题的积极性和主动性。

3.培养学生团队合作和自主学习的能力。

二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、概念和编程技巧。

具体包括以下几个方面:1.Java编程语言的基本语法和概念,如变量、数据类型、运算符、控制语句等。

2.Java编程的基本技巧和编程方法,如函数、面向对象编程、异常处理等。

3.Java编程语言的应用领域和发展趋势,如Web开发、移动应用开发等。

4.课程简介和教学目标5.Java编程语言的基本语法和概念6.Java编程的基本技巧和编程方法7.Java编程语言的应用领域和发展趋势三、教学方法本课程将采用多种教学方法,以激发学生的学习兴趣和主动性。

具体包括以下几种方法:1.讲授法:通过教师的讲解,让学生理解Java编程语言的基本语法和概念。

2.讨论法:通过学生之间的讨论和交流,培养学生的团队合作和解决问题的能力。

3.案例分析法:通过分析实际案例,让学生掌握Java编程的技巧和方法。

4.实验法:通过编程实践,让学生巩固Java编程的知识和提高编程能力。

四、教学资源本课程将使用教材《Java编程语言》作为主要教学资源,同时提供以下教学资源:1.参考书籍:提供相关的参考书籍,供学生深入学习和参考。

2.多媒体资料:提供相关的视频教程和教学课件,帮助学生更好地理解和掌握Java编程知识。

Java网络编程实践课程设计

Java网络编程实践课程设计

J a v a网络编程实践课程设计说明书课程名称:Java网络编程课程设计题目:基于C/S的学生信息管理姓名:学号:教学班号:指导教师:王小刚兰州交通大学软件科学与工程系二○13 年12 月27 日任务书实现应用,可以通过网络在客户端对存放在服务器端的学生信息表(至少包含学号、姓名、性别、年龄、籍贯等字段)学生纪录增、删、改、查,并返回结果。

要能通过菜单选择功能。

基于Socket,多客户端使用多线程,以能同时从多个客户端执行功能。

必须提供友好直观、布局合理的图形界面选择功能、显示信息和填写修改信息。

成员及分工列表图形界面设计者:数据库设计者:Socket设计者:多线程设计者:项目简述和目的熟悉JAVA 语法,掌握图形化界面、多线程、网络、数据库等综合编程,掌握用编程语言开发由若干功能组成的小型项目的基本流程,增强动手实践能力,巩固和加强书本知识的学习,体会JAVA编程的特点。

解题基本思路设计的信息管理系统中的窗体部分,没有使用菜单,而是按钮。

菜单虽然简单,方便,但我认为在窗体里运用按钮是有必要的,这样可以方便添加、删除,修改等动作,通过一步步地做,慢慢的集合,比较的清晰,还显得比较的有层次感. 利用Swing设计图形界面利用Access表设计数据库,利用socket设计网络信息管理模块分析和设计学生管理系统要实现查询,添加,删除,显示,修改等功能。

查询不存在要报错,添加相同也要报错,删除不存在的号也要报错,修改不成功也要报错。

如果成功的话也要提示。

而且每一步都要密码才能进行操作,否则报错提醒!主要程序源代码Client源代码package socket;import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event.*;class Client extends JFrame implements ActionListener//登入界面功能是输入正确的账号和密码才能进入,错误的话返回错误提示!{private JLabel usernameLabel;//帐号private JLabel a;//标题private JTextField usernameTextField;//帐号文本框private JLabel passwordLabel;//密码private JPasswordField passwordField;//密码文本框private JButton button1;//确定按钮private JButton button2;//取消按钮public Client(){super.setTitle("登录界面");Container c=getContentPane();c.setLayout(null);a=new JLabel("欢迎进入学生登入系统!");a.setBounds(50,30,300,30);a.setFont(new Font("黑色",Font.BOLD,25));usernameLabel=new JLabel("账号");usernameLabel.setBounds(50,90,170,30);usernameLabel.setFont(new Font("黑色",Font.BOLD,30));usernameTextField=new JTextField(); usernameTextField.setBounds(150,90,170,30); usernameTextField.setFont(new Font("宋体",Font.BOLD,20)); passwordLabel=new JLabel("密码:"); passwordLabel.setBounds(50,120,170,30); passwordLabel.setFont(new Font("黑色",Font.BOLD,30)); passwordField=new JPasswordField(); passwordField.setBounds(150,120,170,30); passwordField.setFont(new Font("黑色",Font.BOLD,30)); passwordField.setEchoChar('*');button1=new JButton();button1.setText("进入");button1.setFont(new Font("黑色",Font.BOLD,20));button1.setBounds(50,160,100,30);button2=new JButton();button2.setText("退出");button2.setFont(new Font("黑色",Font.BOLD,20));button2.setBounds(220,160,100,30);button1.addActionListener(this);//按钮监听button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});c.add(passwordLabel);c.add(passwordField);c.add(usernameLabel);c.add(button1);c.add(button2);c.add(usernameTextField);c.add(a);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,300);setLocation(322,30);setVisible(true);}private void showText()//登入失败消息框{String xie;xie=usernameTextField.getText();JOptionPane.showMessageDialog(this.getParent(),"登入失败!"+xie);}private void showText1()//登入成功消息框{String xie;xie=usernameTextField.getText();JOptionPane.showMessageDialog(this.getParent(),"登入成功!"+xie);}public void actionPerformed(ActionEvent e)//按钮监听事件{Socket ssocket = null;String st1,st2,st3;final PrintWriter writer1;st1=usernameTextField.getText();st2=passwordField.getText();st3="进入"+","+st1+","+st2;//把帐号和密码打包成字符串try{ssocket=new Socket("localHost",10000);//创建socketwriter1=new PrintWriter(ssocket.getOutputStream());//发送给服务器!if(!(st1.equals(null)) && !(st2.equals(null)))//判断是否为空{writer1.println(st3);writer1.flush();}else if(st1.equals(null) || st2.equals(null))//判断是否为空{writer1.println("error1");writer1.flush();}BufferedReader read=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));String s_red=null;System.out.println("please wait.......");while(true){s_red=read.readLine();if(s_red!=null)break;}if(s_red.equals("yes"))//读取服务端的内容,如果是yes执行Client1的类{showText1();dispose();new Client1();}else//读取服务端的内容,如果不是yes执行showText()报错提醒!{showText();usernameTextField.setText(null);passwordField.setText(null);}}catch (Exception e1){e1.printStackTrace();}}public static void main(String[] args)throws IOException{Client s=new Client();}}class Client1 extends JFrame //登录界面的类包含查询,删除,增添,修改,返回等按钮!共4个按钮监听对象!{private JButton button1,button2,button3,button4,button5,button6;public Client1(){super.setTitle("登录界面");Container c=getContentPane();setLayout(null);button1=new JButton();button1.setText("查询");button1.setFont(new Font("黑色",Font.BOLD,20));button1.setBounds(50,50,120,50);button2=new JButton();button2.setText("删除");button2.setFont(new Font("黑色",Font.BOLD,20));button2.setBounds(220,50,120,50);button3=new JButton();button3.setText("增添");button3.setFont(new Font("黑色",Font.BOLD,20));button3.setBounds(50,150,120,50);button4=new JButton();button4.setText("修改");button4.setFont(new Font("黑色",Font.BOLD,20));button4.setBounds(220,150,120,50);button5=new JButton();button5.setText("显示");button5.setFont(new Font("黑色",Font.BOLD,20));button5.setBounds(50,250,120,50);button6=new JButton();button6.setText("返回");button6.setFont(new Font("黑色",Font.BOLD,20));button6.setBounds(220,250,120,50);button1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client2();}});button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client4();}});button3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client3();}});button4.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client5();}});button5.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client6();}});button6.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client();}});c.add(button1);c.add(button2);c.add(button3);c.add(button4);c.add(button5);c.add(button6);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,450);setLocation(322,30);setVisible(true);}public static void main(String[] args)//throws IOException {new Client1();}}class Client2 extends JFrame implements ActionListener//查询类的功能是输入学号和密码,如果正确则返回成功的提醒,如果失败则返回失败的提醒,如果该学好存在,则返回存在的提醒!{private JLabel usernameLabel1;private JLabel usernameLabel2;private JLabel usernameLabel3;private JLabel usernameLabel4;private JLabel usernameLabel5;private JLabel usernameLabel6;private JLabel usernameLabel7;private JLabel usernameLabel8;private JTextField usernameTextField1;private JTextField usernameTextField2;private JTextField usernameTextField3;private JTextField usernameTextField4;private JTextField usernameTextField5;private JTextField usernameTextField6;private JTextField usernameTextField7;private JTextField usernameTextField8;private JButton button1;private JButton button2;private JLabel label1;public Client2(){super.setTitle("学生操作界面");Container c=getContentPane();c.setLayout(null);label1=new JLabel("欢迎进入学生查询系统!");label1.setBounds(40,20,400,30);label1.setFont(new Font("黑色",Font.BOLD,35));usernameLabel1=new JLabel("查询号");usernameLabel1.setBounds(70,110,200,30);usernameLabel1.setFont(new Font("黑色",Font.BOLD,30));usernameTextField1=new JTextField();usernameTextField1.setFont(new Font("宋体",Font.BOLD,30)); usernameLabel2=new JLabel("密码:");usernameLabel2.setBounds(70,150,200,30); usernameLabel2.setFont(new Font("黑色",Font.BOLD,32)); usernameTextField2=new JTextField(); usernameTextField2.setBounds(170,150,200,30); usernameTextField2.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel3=new JLabel("性别:");usernameLabel3.setFont(new Font("黑色",Font.BOLD,32)); usernameLabel3.setBounds(70,190,200,30); usernameTextField3=new JTextField(); usernameTextField3.setBounds(170,190,200,30); usernameTextField3.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel4=new JLabel("籍贯:");usernameLabel4.setBounds(70,230,200,30); usernameLabel4.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField4=new JTextField(); usernameTextField4.setBounds(170,230,200,30); usernameTextField4.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel5=new JLabel("专业:"); usernameLabel5.setBounds(70,270,200,30); usernameLabel5.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField5=new JTextField(); usernameTextField5.setBounds(170,270,200,30); usernameTextField5.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel6=new JLabel("姓名:"); usernameLabel6.setBounds(70,310,200,30); usernameLabel6.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField6=new JTextField(); usernameTextField6.setBounds(170,310,200,30); usernameTextField6.setFont(new Font("黑色",Font.BOLD,30)); usernameLabel7=new JLabel("电话:");usernameLabel7.setBounds(70,350,200,30); usernameLabel7.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField7=new JTextField();usernameTextField7.setFont(new Font("宋体",Font.BOLD,30)); usernameLabel8=new JLabel("QQ:");usernameLabel8.setBounds(70,390,200,30); usernameLabel8.setFont(new Font("黑色",Font.BOLD,30)); usernameTextField8=new JTextField(); usernameTextField8.setBounds(170,390,200,30); usernameTextField8.setFont(new Font("宋体",Font.BOLD,30)); button1=new JButton();button1.setText("查询");button1.setFont(new Font("黑色",Font.BOLD,30));button1.setBounds(60,470,130,40);button2=new JButton();button2.setText("返回");button2.setFont(new Font("黑色",Font.BOLD,30));button2.setBounds(270,470,130,40);c.add(usernameLabel1);c.add(usernameLabel2);c.add(usernameLabel3);c.add(usernameLabel4);c.add(usernameLabel5);c.add(usernameLabel6);c.add(usernameLabel7);c.add(usernameLabel8);c.add(button1);c.add(button2);c.add(usernameTextField1);c.add(usernameTextField2);c.add(usernameTextField3);c.add(usernameTextField4);c.add(usernameTextField5);c.add(usernameTextField6);c.add(usernameTextField7);c.add(usernameTextField8);c.add(label1);button1.addActionListener(this);button2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dispose();new Client1();}});setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(470,580);setLocation(322,30);setVisible(true);}public static void main(String[] args){Client2 s=new Client2();}private void showText(){String xie;xie=usernameTextField1.getText();JOptionPane.showMessageDialog(this.getParent(),"查询成功!"+xie);}private void showText2(){String xie;xie=usernameTextField1.getText();JOptionPane.showMessageDialog(this.getParent(),"该号不存在!"+xie);}public void actionPerformed(ActionEvent e){Socket ssocket = null;String str, st1,st2;final PrintWriter writer1;st1=usernameTextField1.getText();st2=usernameTextField2.getText();str="查询"+","+st1+","+st2;try{ssocket=new Socket("localHost",10000);writer1=new PrintWriter(ssocket.getOutputStream());if(!(st1.equals(null)) && !(st2.equals(null))){writer1.println(str);writer1.flush();}else if(st1.equals(null) || st2.equals(null)){writer1.println("error1");writer1.flush();}BufferedReader read=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));String line=null;System.out.println("please wait.......");line=read.readLine();if(line.equals("Not1")){showText2();usernameTextField1.setText(null);usernameTextField2.setText(null);usernameTextField3.setText(null);usernameTextField4.setText(null);usernameTextField5.setText(null);usernameTextField6.setText(null);usernameTextField7.setText(null);usernameTextField8.setText(null);}else{String sarry[]=line.split(","); //usernameTextField1.setText(sarry[1]);usernameTextField2.setText(sarry[2]);usernameTextField3.setText(sarry[3]);usernameTextField4.setText(sarry[4]);usernameTextField5.setText(sarry[5]);usernameTextField6.setText(sarry[6]);usernameTextField7.setText(sarry[7]);usernameTextField8.setText(sarry[8]);showText();}}catch (Exception e1){e1.printStackTrace();}}}Server的源代码package socket;import java.io.*;import .*;import java.sql.*;public class Server //Server类通过引用来实现多线程{public static void main(String args[]){Thread1 s=new Thread1();s.start();}}class Thread1 extends Thread//多线程类{static ServerSocket server;static Socket ssocket;static BufferedReader reader1;static BufferedReader reader2;static String sql, databack;static Stringid,password,address,myname,class1,QQ,phone,sex,school;static ResultSet rs; static Statement stmt; static Connection conn;public void run()//多线程的run()方法{try{final Stringdb_driver="sun.jdbc.odbc.JdbcOdbcDriver"; //连接多线程!final String db_url="jdbc:odbc:Driver= {Microsoft Access Driver (*.mdb, *.accdb)};DBQ=d:/my1.mdb";try{}catch(Exception e){e.printStackTrace();}try{server=new ServerSocket(10000);//建立端口System.out.println("服务器已经创建!等待客户机的链接.......");int flag=0;int flag1=0;while(true){ssocket=server.accept();//连接客户端System.out.println("完成链接!");reader1=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));PrintWriter writer2=newPrintWriter(ssocket.getOutputStream());String s1=reader1.readLine();String sarry[]=s1.split(",");sql="select*from one";//连接数据库中的表名Class.forName(db_driver);conn=DriverManager.getConnection (db_url,"","");if(conn!=null){System.out.println("数据库已连接.....");}else{System.out.println("连接失败!");}stmt=conn.createStatement();rs=stmt.executeQuery(sql);if(sarry[0].equals("进入"))//获取客户端的进入功能{while(rs.next()){id=rs.getString("ID"); password=rs.getString("password");if(sarry[1].equals(id) && sarry[2].equals(password)){intnumber1=Integer.parseInt(id);intnumber2=Integer.parseInt(password);if(number1==201211016 && number2==16){flag=1;break;}}}if(flag==1){writer2.println ("yes");writer2.flush();flag=0;}else{writer2.println ("no");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("查询"))//获取客户端的查询功能{while(rs.next()){school=rs.getString("school");id=rs.getString("ID");password=rs.getString("password");sex=rs.getString("sex");address=rs.getString("address");class1=rs.getString("class");myname=rs.getString("myname");phone=rs.getString("phone");QQ=rs.getString("QQ");if(sarry[1].equals(id) && sarry[2].equals(password)){flag1=1;break;}}if(flag1==1){rs.next();String A[]={school,id,password,sex,address,class1,myname,phone,QQ}; databack="";for(int i=0;i<=A.length-1;i++){databack+=A[i];if(i!=A.length-1)databack+=",";}writer2.println (databack);writer2.flush();flag1=0;}else{writer2.println ("Not1");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("添加"))//获取客户端的添加功能{int boolean1=0;while(rs.next()){id=rs.getString ("ID");if(sarry[1].equals(id)){boolean1=0;break;}else{String s="insert intoone(ID,password,sex,address,class,myname,phone,QQ) values (?,?,?,?,?,?,?,?)";PreparedStatement stat1=conn.prepareStatement(s);stat1.setString(1,sarry[1]);stat1.setString(2,sarry[2]);stat1.setString(3,sarry[3]);stat1.setString(4,sarry[4]);stat1.setString(5,sarry[5]);stat1.setString(6,sarry[6]);stat1.setString(7,sarry[7]);stat1.setString(8,sarry[8]);stat1.executeUpdate();boolean1=1;break;}}if(boolean1==1){writer2.println("Y");writer2.flush();boolean1=0;}else{writer2.println("No11");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("删除"))//获取客户端的删除功能{while(rs.next()){id=rs.getString ("ID");if(sarry[1].equals(id)){Strings="delete from one where ID=?"; PreparedStatement stat1=conn.prepareStatement(s);stat1.setString(1,sarry[1]);stat1.executeUpdate();flag=1;}}if(flag==1){writer2.println("Y");writer2.flush();flag=0;}else{writer2.println("N");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("修改")){sex=sarry[3];address=sarry[4];class1=sarry[5];myname=sarry[6];phone=sarry[7];QQ=sarry[8];while(rs.next()){Stringid1=rs.getString("ID"); String password1=rs.getString ("password");if(sarry[9].equals(id1) && sarry[10].equals(password1)){flag=1;break;}}if(flag==1){String id2=sarry[9];id=sarry[1];password=sarry[2];String s="update one setpassword=?,sex=?,address=?,class=?,myname=?,phone=?,QQ=?,ID=? where ID=?";PreparedStatement stat1=conn.prepareStatement(s);stat1.setString(1,password);stat1.setString(2,sex);stat1.setString(3,address);stat1.setString(4,class1);stat1.setString(5,myname);stat1.setString(6,phone);stat1.setString(8,id);stat1.setString(9,id2);stat1.executeUpdate();writer2.println("Y2");writer2.flush();flag=0;}else{writer2.println("N2");writer2.flush();}stmt.close();conn.close();}else if(sarry[0].equals("显示")){Statement stmt1 = conn.createStatement();ResultSet rs1 =stmt1.executeQuery("select * from one");databack="";while(rs1.next()){StringStringpassword=rs1.getString("password");Stringsex=rs1.getString("sex");Stringaddress=rs1.getString("address");Stringclass1=rs1.getString("class");Stringmyname=rs1.getString("myname");Stringphone=rs1.getString("phone");StringQQ=rs1.getString("QQ");String xie=id+","+password+","+sex+","+address+","+class1+","+myname +","+phone+","+QQ+",";databack+=xie;flag1=1;}if(flag1==1){writer2.println (databack);writer2.flush();flag1=0;}else{writer2.println ("Not1");writer2.flush();}stmt.close();conn.close();}}}catch(Exception e){}finally{System.out.println("链接发生错误,请重试!");}try{if(reader1!=null){reader1.close();}if(ssocket!=null){ssocket.close();}}catch(Exception e1){}}catch(Exception e){System.out.println("false");}}}运行截图总结和体会经过本人的努力,学生管理系统终于做完了,经过这次课程设计,自己总结了这个学生信息管理系统的一些问题,不过收获还是颇为丰富的,再有理论知识上结合实践,使我学到了更多。

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

枣庄学院信息科学与工程学院课程设计任务书题目:基于UDP的聊天系统小组成员:谭德鹏、崔浩、王珂、李洪康成员学号:201212120221、201212120202201212120224、201212120209 专业班级:网络工程、2012级本2班课程:Java网络编程指导教师:吕加国职称:副教授完成时间:2015年4 月----2015年6 月枣庄学院信息科学与工程学院制2015年4 月15日摘要 (4)一、需求分析 (4)1.1 课程设计目的 (4)1.2 课程设计的内容 (4)二 . 概要设计 (5)2.1 UDP协议的理解 (5)2.1.1UDP协议定义 (5)2.1.2UDP协议特点 (5)2.1.3基于C/S的多客服端相互通信原理分析: (6)2.2 原理概述 (6)2.3 界面设计 (7)三、详细设计 (7)3.1 聊天界面的设计 (7)3.2 响应发送按钮 (9)3.3 测试函数 (10)四、测试聊天系统 (11)4.1 聊天界面 (11)4.2 两台主机间进行通信 (11)4.3 开始应用聊天系统 (12)五、总结 (13)随着网络技术的发展及人们生活的需求,网络聊天已越来越受到人们的青睐。

网络聊天已经成为人们工作生活中传递信息、交流感情的重要工具,给人们带来了很大的方便。

本课题是开发一个基于UDP的局域网聊天系统,运用软件工程的设计流程,综合运用数据库编程技术、Windows程序设计技术、网络通讯技术,此网络聊天工具采用客户端/服务器(C/S)模式,客户端采用UDP与服务器连接,客户端与客户端之间通过UDP互相通讯。

服务器端具有服务器端口设置,此聊天工具能实现多人聊天功能,适用于局域网使用的网络聊天工具,其操作简单,灵活性好,运行也比较稳定。

一、需求分析1.1 课程设计目的通过设计网络协议及应用程序来加深理解网络各层的功能和机理,特别是对网络层、运输层、应用层的理解。

独立编写基于UDP的网络应用程序,独立上机调试程序,掌握基于UDP的网络应用基本技术。

培养独立思考问题、分析问题的能力和规范化工程设计的能力。

综合运用所学的知识去解决实践中的应用问题,掌握实验技能。

为以后的毕业设计与实际工作打下基础。

1.2 课程设计的内容用户数据报UDP是一个无连接协议使用这种协议时并不需要在两台计算机之间建立固定的连接也就是说通信双方没有服务器和客户机之分它们之间进行的是对等通信所以它的优势很明显是现代通信不可或缺的一部分。

所以利用它的优势设计一个可以聊天的软件实现两台计算机间的即时通讯。

二 . 概要设计2.1 UDP协议的理解2.1.1UDP协议定义用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。

包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。

UDP协议直接位于IP(网际协议)协议的顶层。

UDP 协议的主要作用是将网络数据流量压缩成数据报的形式。

一个典型的数据报就是一个二进制数据的传输单位。

每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

UDP协议使用端口号为不同的应用保留其各自的数据传输通道。

正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。

数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。

有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。

因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。

一般来说,大于49151的端口号都代表动态端口。

数据报的长度是指包括报头和数据部分在内的总的字节数。

因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。

数据报的最大长度根据操作环境的不同而各异。

从理论上说,包含报头在内的数据报的最大长度为65535字节。

不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。

UDP协议使用报头中的校验值来保证数据的安全。

校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。

如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。

UDP 协议并不提供数据传送的保证机制。

如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示,由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

2.1.2UDP协议特点1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。

UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的2、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。

3、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。

4、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。

5、UDP传送数据较TCP快速,系统开销也少。

6、由于缺乏拥塞控制(congestion control),需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。

换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。

数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这个潜在的问题。

从以上特点可知,UDP提供的是无连接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。

2.1.3基于C/S的多客服端相互通信原理分析:在C/S模式中,它是在分散式,集中式,以及分布式基础上发展起来的一种新模型,目前大多数网络通信以及应用都属于这种模型,C/S模式将一个网络事务分为两部分,一部分是客户端(Client),他为用户提供网络请求服务的接口,另一部分是服务端(Server),它负责接受用户对服务的请求,并将这些服务透明的提供给用户,既适用于实际应用的程序,又实用于真正的计算装置,举例来说,我们到饭店吃饭时,要首先提出请求吃什么,属于客户端,饭店服务员根据请求提供相应的服务,属于服务端,至于相应的饭菜是由哪一个厨师来做,则由饭店的服务员去联系,而客户端只需要和服务器打交道就行了,从程序实现上来说,客户端和服务器打交道实际上是两个进程打交道,服务端启动server进程,并等待客户端与其联系,而客户端则启动客户进程和服务器打交道。

当服务器进程处理完一个客服进程请求的信息之后,由接着等待其他客户的请求。

2.2 原理概述采用UDP协议,通过服务器中转方式。

因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。

UDP 协议是不可靠协议,它只管发送,不管对方是否收到。

但它的传输很高效,因为UDP协议排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

例如,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。

如此来保证消息可以无遗漏传输。

2.3 界面设计在Frame布局容器中,添加一个显示聊天的文本框,在加入Panel面板,Panel 面板中包括文本编辑框。

三、详细设计3.1 聊天界面的设计public UDPChat(){mainJframe = new JFrame("聊天——————UDP协议");con=mainJframe.getContentPane(); showArea= new JTextArea(); showArea.setEditable(false); showArea.setLineWrap(true);lal1=new JLabel("接收端口");lal2=new JLabel("发送端口");lal3=new JLabel("对方的地址"); sendPortText=new JTextField(); sendPortText.setColumns(5); receivePortText= new JTextField(); receivePortText.setColumns(5); IPAddressText=new JTextField(); IPAddressText.setColumns(8); starBtn=new JButton("开始"); starBtn.addActionListener(this); pane1=new JPanel();pane1.setLayout(new FlowLayout()); pane1.add(lal1);pane1.add(receivePortText);pane1.add(lal2);pane1.add(sendPortText);pane1.add(lal3);pane1.add(IPAddressText);pane1.add(starBtn);JSPane = new JScrollPane(showArea); msgText=new JTextField(); msgText.setColumns(40); msgText.setEditable(false); msgText.addActionListener(this); pane2=new JPanel();pane2.setLayout(new FlowLayout()); pane2.add(msgText);sendBtn=new JButton();pane2.add(sendBtn);con.add(pane1,BorderLayout.NORTH);con.add(JSPane,BorderLayout.CENTER);con.add(pane2,BorderLayout.SOUTH);mainJframe.setSize(600,400);mainJframe.setVisible(true);mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }3.2 响应发送按钮public void actionPerformed(ActionEvent e){try{if(e.getSource() == starBtn){inBuf=new byte[BUFSIZE];sendPort = Integer.parseInt(sendPortText.getText());sendIP=InetAddress.getByName(IPAddressText.getText());sendSocket=new DatagramSocket();receivePort=Integer.parseInt(receivePortText.getText());receivePack=new DatagramPacket(inBuf,BUFSIZE);receiveSocket=new DatagramSocket(receivePort);thread = new Thread(this);thread.setPriority(Thread.MIN_PRIORITY);thread.start();starBtn.setEnabled(false);sendBtn.setEnabled(true);msgText.setEditable(true);}else{outBuf=msgText.getText().getBytes();sendPack=newDatagramPacket(outBuf,outBuf.length,sendIP,sendPort);sendSocket.send(sendPack);showArea.append("我说:"+msgText.getText()+"\n");msgText.setText(null);}}catch(UnknownHostException el){showArea.append("无法连接到指定地址\n");}catch(SocketException el){showArea.append("无法打开指定端口\n");}catch(IOException el){showArea.append("发送数据失败\n");}}3.3 测试函数public void run(){String msgstr;while(true){try{receiveSocket.receive(receivePack);msgstr=newString(receivePack.getData(),0,receivePack.getLength());showArea.append("对方说:"+msgstr+"\n");}catch(IOException el){showArea.append("接收数据出错\n");}}四、测试聊天系统4.1 聊天界面运行该聊天系统,显示聊天界面4.2 两台主机间进行通信填入对方主机的ip地址,接收端口为对方主机的发送端口,点击开始按钮,两台主机间就可以进行通信了,测试结果如下图:主机1主机24.3 开始应用聊天系统通过主机1向主机2发送一段文字,点击回车键可以发送,这是主机2的聊天界面上可以显示主机1发送的聊天内容。

相关文档
最新文档