网络编程实用教程(第三版).zip


-
第 1章 概述 1 1.1 网络编程相关的基本概念 1 1.1.1 网络编程与进程通信 1 1.1.2 Internet中网间进程的标识 3 1.1.3 网络协议的特征 7 1.2 三类网络编程 10 1.2.1 基于TCP/IP协议栈的网络编程 10 1.2.2 基于WWW应用的网络编程 10 1.2.3 基于.NET框架的Web Services网络编程 10 1.3 客户机/服务器交互模式 13 1.3.1 网络应用软件的地位和功能 13 1.3.2 客户机/服务器模式 14 1.3.3 客户机与服务器的特性 15 1.3.4 容易混淆的术语 16 1.3.5 客户机与服务器的通信过程 16 1.3.6 网络协议与C/S模式的关系 17 1.3.7 错综复杂的C/S交互 17 1.3.8 服务器如何同时为多个客户机服务 18 1.3.9 标识一个特定服务 20 1.4 P2P模式 21 1.4.1 P2P技术的兴起 21 1.4.2 P2P的定义和特征 21 1.4.3 P2P的发展 22 1.4.4 P2P的关键技术 22 1.4.5 P2P系统的应用与前景 22 习题 23 第 2章 套接字网络编程基础 24 2.1 套接字网络编程接口的产生与发展 24 2.1.1 问题的提出 24 2.1.2 套接字编程接口起源于UNIX操作系统 25 2.1.3 套接字编程接口在Windows和Linux操作系统中得到继承和发展 25 2.1.4 套接字编程接口的两种实现方式 25 2.1.5 套接字通信与UNIX操作系统的输入/输出的关系 26 2.2 套接字编程的基本概念 27 2.2.1 什么是套接字 27 2.2.2 套接字的特点 28 2.2.3 套接字的应用场合 30 2.2.4 套接字使用的数据类型和相关的问题 30 2.3 面向连接的套接字编程 32 2.3.1 可靠的传输控制协议 32 2.3.2 套接字的工作过程 33 2.3.3 面向连接的套接字编程实例 34 2.3.4 进程的阻塞问题和对策 40 2.4 无连接的套接字编程 43 2.4.1 高效的用户数据报协议 43 2.4.2 无连接的套接字编程的两种模式 43 2.4.3 数据报套接字的对等模式编程实例 45 2.5 原始套接字 47 2.5.1 原始套接字的创建 47 2.5.2 原始套接字的使用 48 2.5.3 原始套接字应用实例 49 习题 51 第3章 WinSock编程 53 3.1 WinSock概述 53 3.2 WinSock库函数 55 3.2.1 WinSock的注册与注销 55 3.2.2 WinSock的错误处理函数 58 3.2.3 主要的WinSock函数 61 3.2.4 WinSock的辅助函数 74 3.2.5 WinSock的信息查询函数 77 3.2.6 WSAAsyncGetXByY类型的扩展函数 79 3.3 网络应用程序的运行环境 82 习题 84 第4章 MFC编程 85 4.1 MFC概述 85 4.1.1 MFC是一个编程框架 85 4.1.2 典型的MDI应用程序的构成 87 4.2 MFC和Win32 89 4.2.1 MFC对象和Windows对象的关系 89 4.2.2 几个主要的类 91 4.3 CObject类 95 4.3.1 CObject类的定义 95 4.3.2 CObject类的特性 96 4.4 消息映射的实现 98 4.5 MFC对象的创建 102 4.5.1 MFC对象的关系 102 4.5.2 MFC提供的接口 104 4.5.3 MFC对象的创建过程 104 4.6 应用程序的退出 107 习题 107 第5章 MFC WinSock类的 编程 109 5.1 CAsyncSocket类 110 5.1.1 使用CAsyncSocket类的一般步骤 110 5.1.2 创建CAsyncSocket类对象 111 5.1.3 关于CAsyncSocket类可以接受并处理的消息事件 112 5.1.4 客户端套接字对象请求连接到服务器端套接字对象 114 5.1.5 服务器接收客户机的连接请求 115 5.1.6 发送与接收流式数据 116 5.1.7 关闭套接字 118 5.1.8 错误处理 118 5.1.9 其他成员函数 119 5.2 CSocket类 120 5.2.1 创建CSocket对象 120 5.2.2 建立连接 120 5.2.3 发送和接收数据 120 5.2.4 CSocket类、CArchive类和CSocketFile类 121 5.2.5 关闭套接字和清除相关的对象 122 5.3 CSocket类的编程模型 122 5.4 用CAsyn
-
2020-03-24
12.23MB
Linux命令行与shell脚本编程大全第3版.pdf.zip
2019-06-27*内容为高清的pdf文件,可复制、可多平台查看(*≧∪≦)* 这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分 :Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的最新特性进行了 全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和 背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。
32.27MB
计算机图形学实用教程(第3版)-PPT课件.zip
2019-07-14这是计算机图形学(第三版)(苏小红)的配套ppt,该书是工业和信息化部十二五规划教材及黑龙江色哼你精品课程配套教材ppt.
22.90MB
Python核心编程(第3版)高清完整中文版.zip
2018-01-22Python核心编程(第3版)高清完整中文版 本书是经典畅销图书《Python 核心编程(第二版)》的全新升级版本,总共分为3 部分。 第1 部分讲解了Python 的一些通用应用,包括正则表达式、网络编程、Internet 客户端编程、多线程编程、GUI 编程、数据库编程、Microsoft Office 编程、扩展Python 等内容。 第2 部分讲解了与Web 开发相关的主题,包括Web 客户端和服务器、CGI 和WSGI 相关的Web 编程、Diango Web 框架、云计算、高级Web 服务。 第3 部分则为一个补充/实验章节,包括文本处理以及一些其他内 容。 #涵盖了正则表达式、Internet/ 网络编程、GUI、SQL/数据库 /ORM、线程、Web 开发 #了解当前的开发趋势, 比如 Google+、Twitter、OAuth、MongoDB、Python 3 迁移、Java/Jython #囊括有关 Django、Google App Engine、Microsoft Office 和 CSV/JSON/XML 的全新内容 #包含 Python 2 和 Python 3 代码,以便立即可以使用 #提供了代码片段、互动案例和实用练习,旨在巩固Python 技能
3.37MB
解析极限编程 第1版中文PDF扫描版.zip
2008-12-31极限编程(XP)是一种经历过实践考验的轻量级软件开发方法学,本书是XP宣言,也是第一本有关XP的图书。 本书共分三部分,第1部分包括第 1章至第9章,通过讨论创建新的软件开发规范中要解决的问题的不同层面来设定极限编程的前提。第2部分包括第10章至第18章,内容着重于如何将第一部分中的抽象概念转化为具体方法论的实践,这部分不会确切地说明如何执行这些实践,而是要讨论它们的大体结构,同时提供了一套指导性的准则和策略。第3部分包括第19章至第27章,该部分讨论了如何将上一部分中的策略确切地付诸实践。 本书语言轻松活泼,实用性与可读性较强,适合于软件开发人员、软件工程研究人员、软件项目管理人员,以及所有想要了解XP背后思想的各界人士参考。
12.24MB
Linux命令行与shell脚本编程大全.第3版(超清版)pdf带书签.zip
2019-02-21这是一本关于Linux 命令行与shell 脚本编程的全方位教程,主要包括四大部分:Linux 命令行,shell脚本编程基础,高级shell 脚本编程,如何创建实用的shell 脚本。本书针对Linux 系统的最新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的shell 脚本。 本书适合Linux 程序设计人员阅读。
14.0MB
疯狂Ajax讲义.zip.001
2011-05-13由于上传限制只能分成7卷上传,全部下载后解压即可。 内容简介 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个部分。第一部分介绍了XHTML、CSS、JavaScript和DOM编程等内容。第二部分详细介绍了Prototype、jQuery、DWR、AjaxTags等四个最常用的Ajax框架的用法,并针对每个框架提供了一个实用案例。这两个部分是笔者在“疯狂Java实训营”的培训讲义,是《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》的重点部分。第三部分则提供了2个综合性案例:Blog系统和电子拍卖系统,让读者将前面所学真正应用到实际项目中。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》绝大部分章节后都提供了相应的编程习题,供开发者巩固所学,将理论融入实际开发之用。关于这些编程习题的解题思路和参考答案可登录www.crazyit.org获取。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java EE知识,建议先认真阅读疯狂Java体系的《轻量级Java EE企业应用实战》一书。
46.84MB
嵌入式系统及应用 PPT 课件 PDF版.zip
2020-12-15本课程是计算机科学与技术专业的一门专业核心课程,属必修学科专业课。它以嵌入式微处理器及嵌入式实时操作系统为重点讲授嵌入式系统相关的知识,培养学生基本的嵌入式系统程序设计与开发的能力,为学生进一步学习和实践嵌入式系统相关知识打下基础。课程配套有深度有内容的实验实践活动,由浅入深,实用性强,具有较强的产业开发背景,加深学生对理论知识的理解和掌握,提高嵌入式系统相关工程软件的开发能力。 嵌入式微处理器方面,我们详细解读了ARM处理器的编程模型并配合基于Keil4的相关实验。嵌入式实时操作系统方面,我们以uC/OS-II为例,分析了其在任务管理、同步和通信以及中断、时间、内存方面的设计思路和代码,能够
133.77MB
玩游戏游戏学编程 CodeCombat.zip
2019-07-18CodeCombat 是一个通过玩游戏来学习编程的网站,也是GitHub上最大的开源CoffeeScript(一种脚本语言,类似JavaScript)项目,构筑在几十个开源项目之上的,有上千程序员和玩家为其编写程序、测试游戏。到目前为止,已经翻译成17种国外语言。 它是一款多人编码游戏,该款游戏的任务就是教会大家如何编程,并且通过游戏来提升开发者的技能水平。因为开源,我们可以为孩子们定制我们希望的样式。人们不需要任何编程知识即可了解程序的运行逻辑,并编出实用的代码。 游戏总共超过9千关,每个步骤都会有语音操作提示(非中文),无论你是新手还是编程精英都可以加入到这款游戏中。最重要的是,你是写代码执行游戏。你要扮演得是一名非常有力量的魔法师,要通过你写代码魔法,让你的人去消灭怪兽(其实是怪物)。看起来像是塔防游戏——《王城保卫战》,但却是一款即时战略游戏。每关都会有对话讲解如何操作(遗憾没有中文)左侧是游戏界面,右侧是代码界面,通过在右侧输入关键语句代码,控制左侧角色的移动和攻击等动作。前几关非常简单,几行“上下左右”和“攻击”的代码即可完成通关。每关结束后都有个回顾,告诉你在上一关学到了什么。当输入错误,比如大小写错误,在代码下方会提示具体的出错信息,玩家可以据此Debug。第二关中,你要先去右边吃蘑菇变强,再去击杀怪物。(点击图片查看具体代码,其实向右移动一步即可迟到蘑菇,代码中是两步)第三关,在击杀第一个怪物后,角色的血也不多了,所以要先去下方喝药瓶。下去喝药瓶,输入代码按回车,角色就会照做。第四关前N关都是编程中最基本的顺序语句,随着关数的提升,像“if…else,then”等判断、循环语句也会逐渐加入,可玩性越来越高。玩家在不知不觉也就具备了编程思维。 标签:编程游戏
49.36MB
Redis实战 高清完整版.zip
2018-03-12【内容简介】 本书深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法。除此之外,书中还讲述了Redis的优化方法以及扩展方法,是一本对于学习和使用 Redis 来说不可多得的参考书籍。 本书一共由三个部分组成。第一部分对Redis进行了介 绍,说明了Redis的基本使用方法、它拥有的5种数据结构以及操作这5种数据结构的命令,并讲解了如何使用Redis去构建文章展示网站、cookie、购物车、网页缓存、数据库行缓存等一系列程序。第二部分对Redis命令进行了更详细的介绍,并展示了如何使用Redis去构建更为复杂的辅助工具和应用程序,并在最后展示了如何使用Redis去构建一个简单的社交网站。第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。 综上所述, 本书将是一本对于学习和使用 Redis 来说不可多得的参考书籍, 无论是 Redis 新手还是有一定经验的 Redis 使用者, 应该都能从本书中获益。 【读者支持网站】 查看试读章样,下载中文注释源码或者了解更多关于《Redis实战》的相关信息,请访问《Redis实战》的读者支持网站: redisinaction.com
59.0MB
Python核心编程(第二版).pdf (压缩包分2部分,第一部分)
2011-11-20原书名: Core Python Programming (2nd Edition) 原出版社: Prentice Hall PTR 作者: (美)Wesley J. Chun 译者: 宋吉广 出版社:人民邮电出版社 ISBN:9787115178503 上架时间:2008-6-23 出版日期:2008 年7月 开本:16开 页码:654 版次:2-1 第1部分 python核心 第1章 欢迎来到python世界 1.1 什么是python 1.2 起源 1.3 特点 1.3.1 高级 1.3.2 面向对象 1.3.3 可升级 1.3.4 可扩展 1.3.5 可移植性 1.3.6 易学 1.3.7 易读 1.3.8 易维护 1.3.9 健壮性 1.3.10 高效的快速原型开发工具 1.3.11 内存管理器 1.3.12 解释性和(字节)编译性 1.4 下载和安装python 1.5 运行python 1.5.1 命令行上的交互式解释器 . 1.5.2 从命令行启动脚本 1.5.3 集成开发环境 1.5.4 其他的集成开发环境和执行环境 1.6 python文档 1.7 比较python(python与其他语言的比较) 1.8 其他实现 1.9 练习 第2章 快速入门 2.1 程序输出,print语句及“hello world!” 2.2 程序输入和raw_input()内建函数 2.3 注释 2.4 操作符 2.5 变量和赋值 2.6 数字 2.7 字符串 2.8 列表和元组 2.9 字典 2.10 代码块及缩进对齐 2.11 if语句 2.12 while循环 2.13 for循环和range()内建函数 2.14 列表解析 2.15 文件和内建函数open()、file() 2.16 错误和异常 2.17 函数 2.17.1 如何定义函数 2.17.2 如何调用函数 2.17.3 默认参数 2.18 类 2.19 模块 2.19.1 如何导入模块 2.19.2 如何访问一个模块函数或访问一个模块变量 2.20 实用的函数 2.21 练习 第3章 python基础 3.1 语句和语法 3.1.1 注释(#) 3.1.2 继续(\) 3.1.3 多个语句构成代码组(:) 3.1.4 代码组由不同的缩进分隔 3.1.5 同一行书写多个语句(;) 3.1.6 模块 3.2 变量赋值 3.2.1 赋值操作符 3.2.2 增量赋值 3.2.3 多重赋值 3.2.4 “多元”赋值 3.3 标识符 3.3.1 合法的python标识符 3.3.2 关键字 3.3.3 内建 3.3.4 专用下划线标识符 3.4 基本风格指南 3.4.1 模块结构和布局 3.4.2 在主程序中书写测试代码 3.5 内存管理 3.5.1 变量定义 3.5.2 动态类型 3.5.3 内存分配 3.5.4 引用计数 3.5.5 垃圾收集 3.6 第一个python程序 3.7 相关模块和开发工具 3.8 练习 第4章 python对象 4.1 python 对象 4.2 标准类型 4.3 其他内建类型 4.3.1 类型对象和type类型对象 4.3.2 none--python的null对象 4.4 内部类型 4.4.1 代码对象 4.4.2 帧对象 4.4.3 跟踪记录对象 4.4.4 切片对象 4.4.5 省略对象 4.4.6 xrange 对象 4.5 标准类型操作符 4.5.1 对象值的比较 4.5.2 对象身份比较 4.5.3 布尔类型 4.6 标准类型内建函数 4.6.1 type() 4.6.2 cmp() 4.6.3 str()和repr()(及``操作符) 4.6.4 type()和isinstance() 4.6.5 python类型操作符和内建函数总结 4.7 类型工厂函数 4.8 标准类型的分类 4.8.1 存储模型 4.8.2 更新模型 4.8.3 访问模型 4.9 不支持的类型 4.10 练习 第5章 数字 5.1 数字简介 5.1.1 如何创建数值对象并用其赋值(数字对象) 5.1.2 如何更新数字对象 5.1.3 如何删除数字对象 5.2 整型 5.2.1 布尔型 5.2.2 标准整型 5.2.3 长整型 5.2.4 整型和长整型的统一 5.3 双精度浮点型 5.4 复数 5.5 操作符 5.5.1 混合模式操作符 5.5.2 标准类型操作符 5.5.3 算术操作符 5.5.4 *位操作符(只适用于整型) 5.6 内建函数与工厂函数 5.6.1 标准类型函数 5.6.2 数字类型函数 5.6.3 仅用于整型的函数 5.7 其他数字类型 5.7.1 布尔“数” 5.7.2 十进制浮点型 5.8 相关模块 5.9 练习 第6章 序列:字符串、列表和元组 6.1 序列 6.1.1 标准类型操作符 6.1.2 序列类型操作符 6.1.3 内建函数(bif) 6.2 字符串 6.3 字符串和操作符 6.3.1 标准类型操作符 6.3.2 序列操作符切片([]和[:]) 6.4 只适用于字符串的操作符 6.4.1 格式化操作符(%) 6.4.2 字符串模板: 更简单的替代品 6.4.3 原始字符串操作符(r/r) 6.4.4 unicode字符串操作符(u/u) 6.5 内建函数 6.5.1 标准类型函数 6.5.2 序列类型函数 6.5.3 字符串类型函数 6.6 字符串内建函数 6.7 字符串的独特特性 6.7.1 特殊字符串和控制字符 6.7.2 三引号 6.7.3 字符串不变性 6.8 unicode 6.8.1 术语 6.8.2 什么是unicode 6.8.3 怎样使用unicode 6.8.4 codec是什么 6.8.5 编码解码 6.8.6 把unicode应用到实际应用中 6.8.7 从现实中得来的教训 6.8.8 python的unicode支持 6.9 相关模块 6.10 字符串关键点总结 6.11 列表 6.12 操作符 6.12.1 标准类型操作符 6.12.2 序列类型操作符 6.12.3 列表类型操作符和列表解析 6.13 内建函数 6.13.1 标准类型函数 6.13.2 序列类型函数 6.13.3 列表类型内建函数 6.14 列表类型的内建函数 6.15 列表的特殊特性 6.16 元组 6.17 元组操作符和内建函数 6.17.1 标准类型操作符、序列类型操作符和内建函数 6.17.2 元组类型操作符和内建函数、内建方法 6.18 元组的特殊特性 6.18.1 不可变性给元组带来了什么影响 6.18.2 元组也不是那么“不可变” 6.18.3 默认集合类型 6.18.4 单元素元组 6.18.5 字典的关键字 6.19 相关模块 6.20 *拷贝python对象、浅拷贝和深拷贝 6.21 序列类型小结 6.22 练习 第7章 映像和集合类型 7.1 映射类型:字典 7.1.1 如何创建字典和给字典赋值 7.1.2 如何访问字典中的值 7.1.3 如何更新字典 7.1.4 如何删除字典元素和字典 7.2 映射类型操作符 7.2.1 标准类型操作符 7.2.2 映射类型操作符 7.3 映射类型的内建函数和工厂函数 7.3.1 标准类型函数[type()、str()和cmp()] 7.3.2 映射类型相关的函数 7.4 映射类型内建方法 7.5 字典的键 7.5.1 不允许一个键对应多个值 7.5.2 键必须是可哈希的 7.6 集合类型 7.6.1 如何创建集合类型和给集合赋值 7.6.2 如何访问集合中的值 7.6.3 如何更新集合 7.6.4 如何删除集合中的成员和集合 7.7 集合类型操作符 7.7.1 标准类型操作符(所有的集合类型) 7.7.2 集合类型操作符(所有的集合类型) 7.7.3 集合类型操作符(仅适用于可变集合) 7.8 内建函数 7.8.1 标准类型函数 7.8.2 集合类型工厂函数 7.9 集合类型内建方法 7.9.1 方法(所有的集合方法) 7.9.2 方法(仅适用于可变集合) 7.9.3 操作符和内建方法比较 7.10 集合类型总结表 7.11 相关模块 7.12 练习 第8章 条件和循环 8.1 if语句 8.1.1 多重条件表达式 8.1.2 单一语句的代码块 8.2 else语句 8.3 elif(即else-if)语句 8.4 条件表达式(即“三元操作符”) 8.5 while语句 8.5.1 一般语法 8.5.2 计数循环 8.5.3 无限循环 8.6 for语句 8.6.1 一般语法 8.6.2 用于序列类型 8.6.3 用于迭代器类型 8.6.4 range()内建函数 8.6.5 xrange() 内建函数 8.6.6 与序列相关的内建函数 8.7 break语句 8.8 continue语句 8.9 pass语句 8.10 再谈else语句 8.11 迭代器和iter()函数 8.11.1 什么是迭代器 8.11.2 为什么要迭代器 8.11.3 如何迭代 8.11.4 使用迭代器 8.11.5 可变对象和迭代器 8.11.6 如何创建迭代器 8.12 列表解析 8.13 生成器表达式 8.14 相关模块 8.15 练习 第9章 文件和输入输出 9.1 文件对象 9.2 文件内建函数(open()和file()) 9.2.1 工厂函数file() 9.2.2 通用换行符支持(uns) 9.3 文件内建方法 9.3.1 输入 9.3.2 输出 9.3.3 文件内移动 9.3.4 文件迭代 9.3.5 其他 9.3.6 文件方法杂项 9.4 文件内建属性 9.5 标准文件 9.6 命令行参数 9.7 文件系统 9.8 文件执行 9.9 永久存储模块 9.9.1 pickle和marshal模块 9.9.2 dbm风格的模块 9.9.3 shelve模块 9.10 相关模块 9.11 练习 第10章 错误和异常 10.1 什么是异常 10.1.1 错误 10.1.2 异常 10.2 python 中的异常 10.3 检测和处理异常 10.3.1 try-except语句 10.3.2 包装内建函数 10.3.3 带有多个except的try语句 10.3.4 处理多个异常的except语句 10.3.5 捕获所有异常 10.3.6 “异常参数” 10.3.7 在应用使用我们封装的函数 10.3.8 else子句 10.3.9 finally子句 10.3.10 try-finally语句 10.3.11 try-except-else-finally:厨房一锅端 10.4 上下文管理 10.4.1 with语句 10.4.2 *上下文管理协议 10.5 *字符串作为异常 10.6 触发异常 10.7 断言 10.8 标准异常 10.9 *创建异常 10.10 (现在)为什么用异常 10.11 到底为什么要异常 10.12 异常和sys模块 10.13 相关模块 10.14 练习 第11章 函数和函数式编程 11.1 什么是函数? 11.1.1 函数vs过程 11.1.2 返回值与函数类型 11.2 调用函数 11.2.1 函数操作符 11.2.2 关键字参数 11.2.3 默认参数 11.2.4 参数组 11.3 创建函数 11.3.1 def语句 11.3.2 声明与定义比较 11.3.3 前向引用 11.3.4 函数属性 11.3.5 内部/内嵌函数 11.3.6 *函数(与方法)装饰器 11.4 传递函数 11.5 formal arguments 11.5.1 位置参数 11.5.2 默认参数 11.6 可变长度的参数 11.6.1 非关键字可变长参数(元组) 11.6.2 关键字变量参数(字典) 11.6.3 调用带有可变长参数对象函数 11.7 函数式编程 11.7.1 匿名函数与lambda 11.7.2 内建函数apply()、filter()、map()、reduce() 11.7.3 偏函数应用 11.8 变量作用域 11.8.1 全局变量与局部变量 11.8.2 globa语句 11.8.3 作用域的数字 11.8.4 闭包 11.8.5 作用域和lambda 11.8.6 变量作用域和名称空间 11.9 *递归 11.10 生成器 11.10.1 简单的生成器特性 11.10.2 加强的生成器特性 11.11 练习 第12章 模块 12.1 什么是模块 12.2 模块和文件 12.2.1 模块名称空间 12.2.2 搜索路径和路径搜索 12.3 名称空间 12.3.1 名称空间与变量作用域比较 12.3.2 名称查找、确定作用域、覆盖 12.3.3 无限制的名称空间 12.4 导入模块 12.4.1 import语句 12.4.2 from-import语句 12.4.3 多行导入 12.4.4 扩展的import语句(as) 12.5 模块导入的特性 12.5.1 载入时执行模块 12.5.2 导入(import)和加载(load) 12.5.3 导入到当前名称空间的名称 12.5.4 被导入到导入者作用域的名字 12.5.5 关于__future__ 12.5.6 警告框架 12.5.7 从zip文件中导入模块 12.5.8 “新的”导入钩子 12.6 模块内建函数 12.6.1 __import__() 12.6.2 globals()和locals() 12.6.3 reload() 12.7 包 12.7.1 目录结构 12.7.2 使用from-import导入包 12.8 模块的其他特性 12.8.1 自动载入的模块 12.8.2 阻止属性导入 12.8.3 不区分大小的导入 12.8.4 源代码编码 12.8.5 导入循环 12.8.6 模块执行 12.9 相关模块 12.10 练习 第13章 面向对象编程 13.1 引言 13.2 面向对象编程 13.2.1 面向对象设计与面向对象编程的关系 13.2.2 现实中的问题 13.2.3 *常用术语 13.3 类 13.3.1 创建类 13.3.2 声明与定义 13.4 类属性 13.4.1 类的数据属性 13.4.2 methods 13.4.3 决定类的属性 13.4.4 特殊的类属性 13.5 实例 13.5.1 初始化:通过调用类对象来创建实例 13.5.2 __init__()“构造器”方法 13.5.3 __new__()“构造器”方法 13.5.4 __del__()“解构器”方法 13.6 实例属性 13.6.1 “实例化”实例属性(或创建一个更好的构造器) 13.6.2 查看实例属性 13.6.3 特殊的实例属性 13.6.4 建类型属性 13.6.5 实例属性vs类属性 13.7 绑定和方法调用 13.7.1 调用绑定方法 13.7.2 调用非绑定方法 13.8 静态方法和类方法 13.8.1 staticmethod()和classmethod()内建函数 13.8.2 使用函数修饰符 13.9 组合 13.10 子类和派生 13.11 继承 13.11.1 __bases__类属性 13.11.2 通过继承覆盖方法 13.11.3 从标准类型派生 13.11.4 多重继承 13.12 类、实例和其他对象的内建函数 13.12.1 issubclass() 13.12.2 isinstance() 13.12.3 hasattr()、getattr()、setattr()、delattr() 13.12.4 dir() 13.12.5 super() 13.12.6 vars() 13.13 用特殊方法定制类 13.13.1 简单定制(roundfloat2) 13.13.2 数值定制(time60) 13.13.3 迭代器(randseq和anyiter) 13.13.4 *多类型定制(numstr) 13.14 私有化 13.15 *授权 13.15.1 包装 13.15.2 实现授权 13.16 新式类的高级特性(python 2.2+) 13.16.1 新式类的通用特性 13.16.2 __slots__类属性 13.16.3 __getattribute__()特殊方法 13.16.4 描述符 13.16.5 元类和__metaclass__ 13.17 相关模块和文档 13.18 练习 第14章 执行环境 14.1 可调用对象 14.1.1 函数 14.1.2 方法 14.1.3 类 14.1.4 类的实例 14.2 代码对象 14.3 可执行的对象声明和内建函数 14.3.1 callable() 14.3.2 compile() 14.3.3 eval() 14.3.4 exec 14.3.5 input() 14.3.6 使用python在运行时生成和执行python代码 14.4 执行其他(python)程序 14.4.1 导入 14.4.2 execfile() 14.4.3 将模块作为脚本执行 14.5 执行其他(非python)程序 14.5.1 os.system() 14.5.2 os.popen() 14.5.3 os.fork()、os.exec*()、os.wait*() 14.5.4 os.spawn*() 14.5.5 subprocess 模块 14.5.6 相关函数 14.6 受限执行 14.7 结束执行 14.7.1 sys.exit() and systemexit 14.7.2 sys.exitfunc() 14.7.3 os._exit() 函数 14.7.4 os.kill() function 14.8 各种操作系统接口 14.9 相关模块 14.10 练习 第2部分 高级主题 第15章 正则表达式 15.1 引言/动机 15.2 正则表达式使用的特殊符号和字符 15.2.1 用管道符号(
56.29MB
Python核心编程(第二版).pdf (压缩包分2部分,第二部分)
2011-11-20原书名: Core Python Programming (2nd Edition) 原出版社: Prentice Hall PTR 作者: (美)Wesley J. Chun 译者: 宋吉广 出版社:人民邮电出版社 ISBN:9787115178503 上架时间:2008-6-23 出版日期:2008 年7月 开本:16开 页码:654 版次:2-1 第1部分 python核心 第1章 欢迎来到python世界 1.1 什么是python 1.2 起源 1.3 特点 1.3.1 高级 1.3.2 面向对象 1.3.3 可升级 1.3.4 可扩展 1.3.5 可移植性 1.3.6 易学 1.3.7 易读 1.3.8 易维护 1.3.9 健壮性 1.3.10 高效的快速原型开发工具 1.3.11 内存管理器 1.3.12 解释性和(字节)编译性 1.4 下载和安装python 1.5 运行python 1.5.1 命令行上的交互式解释器 . 1.5.2 从命令行启动脚本 1.5.3 集成开发环境 1.5.4 其他的集成开发环境和执行环境 1.6 python文档 1.7 比较python(python与其他语言的比较) 1.8 其他实现 1.9 练习 第2章 快速入门 2.1 程序输出,print语句及“hello world!” 2.2 程序输入和raw_input()内建函数 2.3 注释 2.4 操作符 2.5 变量和赋值 2.6 数字 2.7 字符串 2.8 列表和元组 2.9 字典 2.10 代码块及缩进对齐 2.11 if语句 2.12 while循环 2.13 for循环和range()内建函数 2.14 列表解析 2.15 文件和内建函数open()、file() 2.16 错误和异常 2.17 函数 2.17.1 如何定义函数 2.17.2 如何调用函数 2.17.3 默认参数 2.18 类 2.19 模块 2.19.1 如何导入模块 2.19.2 如何访问一个模块函数或访问一个模块变量 2.20 实用的函数 2.21 练习 第3章 python基础 3.1 语句和语法 3.1.1 注释(#) 3.1.2 继续(\) 3.1.3 多个语句构成代码组(:) 3.1.4 代码组由不同的缩进分隔 3.1.5 同一行书写多个语句(;) 3.1.6 模块 3.2 变量赋值 3.2.1 赋值操作符 3.2.2 增量赋值 3.2.3 多重赋值 3.2.4 “多元”赋值 3.3 标识符 3.3.1 合法的python标识符 3.3.2 关键字 3.3.3 内建 3.3.4 专用下划线标识符 3.4 基本风格指南 3.4.1 模块结构和布局 3.4.2 在主程序中书写测试代码 3.5 内存管理 3.5.1 变量定义 3.5.2 动态类型 3.5.3 内存分配 3.5.4 引用计数 3.5.5 垃圾收集 3.6 第一个python程序 3.7 相关模块和开发工具 3.8 练习 第4章 python对象 4.1 python 对象 4.2 标准类型 4.3 其他内建类型 4.3.1 类型对象和type类型对象 4.3.2 none--python的null对象 4.4 内部类型 4.4.1 代码对象 4.4.2 帧对象 4.4.3 跟踪记录对象 4.4.4 切片对象 4.4.5 省略对象 4.4.6 xrange 对象 4.5 标准类型操作符 4.5.1 对象值的比较 4.5.2 对象身份比较 4.5.3 布尔类型 4.6 标准类型内建函数 4.6.1 type() 4.6.2 cmp() 4.6.3 str()和repr()(及``操作符) 4.6.4 type()和isinstance() 4.6.5 python类型操作符和内建函数总结 4.7 类型工厂函数 4.8 标准类型的分类 4.8.1 存储模型 4.8.2 更新模型 4.8.3 访问模型 4.9 不支持的类型 4.10 练习 第5章 数字 5.1 数字简介 5.1.1 如何创建数值对象并用其赋值(数字对象) 5.1.2 如何更新数字对象 5.1.3 如何删除数字对象 5.2 整型 5.2.1 布尔型 5.2.2 标准整型 5.2.3 长整型 5.2.4 整型和长整型的统一 5.3 双精度浮点型 5.4 复数 5.5 操作符 5.5.1 混合模式操作符 5.5.2 标准类型操作符 5.5.3 算术操作符 5.5.4 *位操作符(只适用于整型) 5.6 内建函数与工厂函数 5.6.1 标准类型函数 5.6.2 数字类型函数 5.6.3 仅用于整型的函数 5.7 其他数字类型 5.7.1 布尔“数” 5.7.2 十进制浮点型 5.8 相关模块 5.9 练习 第6章 序列:字符串、列表和元组 6.1 序列 6.1.1 标准类型操作符 6.1.2 序列类型操作符 6.1.3 内建函数(bif) 6.2 字符串 6.3 字符串和操作符 6.3.1 标准类型操作符 6.3.2 序列操作符切片([]和[:]) 6.4 只适用于字符串的操作符 6.4.1 格式化操作符(%) 6.4.2 字符串模板: 更简单的替代品 6.4.3 原始字符串操作符(r/r) 6.4.4 unicode字符串操作符(u/u) 6.5 内建函数 6.5.1 标准类型函数 6.5.2 序列类型函数 6.5.3 字符串类型函数 6.6 字符串内建函数 6.7 字符串的独特特性 6.7.1 特殊字符串和控制字符 6.7.2 三引号 6.7.3 字符串不变性 6.8 unicode 6.8.1 术语 6.8.2 什么是unicode 6.8.3 怎样使用unicode 6.8.4 codec是什么 6.8.5 编码解码 6.8.6 把unicode应用到实际应用中 6.8.7 从现实中得来的教训 6.8.8 python的unicode支持 6.9 相关模块 6.10 字符串关键点总结 6.11 列表 6.12 操作符 6.12.1 标准类型操作符 6.12.2 序列类型操作符 6.12.3 列表类型操作符和列表解析 6.13 内建函数 6.13.1 标准类型函数 6.13.2 序列类型函数 6.13.3 列表类型内建函数 6.14 列表类型的内建函数 6.15 列表的特殊特性 6.16 元组 6.17 元组操作符和内建函数 6.17.1 标准类型操作符、序列类型操作符和内建函数 6.17.2 元组类型操作符和内建函数、内建方法 6.18 元组的特殊特性 6.18.1 不可变性给元组带来了什么影响 6.18.2 元组也不是那么“不可变” 6.18.3 默认集合类型 6.18.4 单元素元组 6.18.5 字典的关键字 6.19 相关模块 6.20 *拷贝python对象、浅拷贝和深拷贝 6.21 序列类型小结 6.22 练习 第7章 映像和集合类型 7.1 映射类型:字典 7.1.1 如何创建字典和给字典赋值 7.1.2 如何访问字典中的值 7.1.3 如何更新字典 7.1.4 如何删除字典元素和字典 7.2 映射类型操作符 7.2.1 标准类型操作符 7.2.2 映射类型操作符 7.3 映射类型的内建函数和工厂函数 7.3.1 标准类型函数[type()、str()和cmp()] 7.3.2 映射类型相关的函数 7.4 映射类型内建方法 7.5 字典的键 7.5.1 不允许一个键对应多个值 7.5.2 键必须是可哈希的 7.6 集合类型 7.6.1 如何创建集合类型和给集合赋值 7.6.2 如何访问集合中的值 7.6.3 如何更新集合 7.6.4 如何删除集合中的成员和集合 7.7 集合类型操作符 7.7.1 标准类型操作符(所有的集合类型) 7.7.2 集合类型操作符(所有的集合类型) 7.7.3 集合类型操作符(仅适用于可变集合) 7.8 内建函数 7.8.1 标准类型函数 7.8.2 集合类型工厂函数 7.9 集合类型内建方法 7.9.1 方法(所有的集合方法) 7.9.2 方法(仅适用于可变集合) 7.9.3 操作符和内建方法比较 7.10 集合类型总结表 7.11 相关模块 7.12 练习 第8章 条件和循环 8.1 if语句 8.1.1 多重条件表达式 8.1.2 单一语句的代码块 8.2 else语句 8.3 elif(即else-if)语句 8.4 条件表达式(即“三元操作符”) 8.5 while语句 8.5.1 一般语法 8.5.2 计数循环 8.5.3 无限循环 8.6 for语句 8.6.1 一般语法 8.6.2 用于序列类型 8.6.3 用于迭代器类型 8.6.4 range()内建函数 8.6.5 xrange() 内建函数 8.6.6 与序列相关的内建函数 8.7 break语句 8.8 continue语句 8.9 pass语句 8.10 再谈else语句 8.11 迭代器和iter()函数 8.11.1 什么是迭代器 8.11.2 为什么要迭代器 8.11.3 如何迭代 8.11.4 使用迭代器 8.11.5 可变对象和迭代器 8.11.6 如何创建迭代器 8.12 列表解析 8.13 生成器表达式 8.14 相关模块 8.15 练习 第9章 文件和输入输出 9.1 文件对象 9.2 文件内建函数(open()和file()) 9.2.1 工厂函数file() 9.2.2 通用换行符支持(uns) 9.3 文件内建方法 9.3.1 输入 9.3.2 输出 9.3.3 文件内移动 9.3.4 文件迭代 9.3.5 其他 9.3.6 文件方法杂项 9.4 文件内建属性 9.5 标准文件 9.6 命令行参数 9.7 文件系统 9.8 文件执行 9.9 永久存储模块 9.9.1 pickle和marshal模块 9.9.2 dbm风格的模块 9.9.3 shelve模块 9.10 相关模块 9.11 练习 第10章 错误和异常 10.1 什么是异常 10.1.1 错误 10.1.2 异常 10.2 python 中的异常 10.3 检测和处理异常 10.3.1 try-except语句 10.3.2 包装内建函数 10.3.3 带有多个except的try语句 10.3.4 处理多个异常的except语句 10.3.5 捕获所有异常 10.3.6 “异常参数” 10.3.7 在应用使用我们封装的函数 10.3.8 else子句 10.3.9 finally子句 10.3.10 try-finally语句 10.3.11 try-except-else-finally:厨房一锅端 10.4 上下文管理 10.4.1 with语句 10.4.2 *上下文管理协议 10.5 *字符串作为异常 10.6 触发异常 10.7 断言 10.8 标准异常 10.9 *创建异常 10.10 (现在)为什么用异常 10.11 到底为什么要异常 10.12 异常和sys模块 10.13 相关模块 10.14 练习 第11章 函数和函数式编程 11.1 什么是函数? 11.1.1 函数vs过程 11.1.2 返回值与函数类型 11.2 调用函数 11.2.1 函数操作符 11.2.2 关键字参数 11.2.3 默认参数 11.2.4 参数组 11.3 创建函数 11.3.1 def语句 11.3.2 声明与定义比较 11.3.3 前向引用 11.3.4 函数属性 11.3.5 内部/内嵌函数 11.3.6 *函数(与方法)装饰器 11.4 传递函数 11.5 formal arguments 11.5.1 位置参数 11.5.2 默认参数 11.6 可变长度的参数 11.6.1 非关键字可变长参数(元组) 11.6.2 关键字变量参数(字典) 11.6.3 调用带有可变长参数对象函数 11.7 函数式编程 11.7.1 匿名函数与lambda 11.7.2 内建函数apply()、filter()、map()、reduce() 11.7.3 偏函数应用 11.8 变量作用域 11.8.1 全局变量与局部变量 11.8.2 globa语句 11.8.3 作用域的数字 11.8.4 闭包 11.8.5 作用域和lambda 11.8.6 变量作用域和名称空间 11.9 *递归 11.10 生成器 11.10.1 简单的生成器特性 11.10.2 加强的生成器特性 11.11 练习 第12章 模块 12.1 什么是模块 12.2 模块和文件 12.2.1 模块名称空间 12.2.2 搜索路径和路径搜索 12.3 名称空间 12.3.1 名称空间与变量作用域比较 12.3.2 名称查找、确定作用域、覆盖 12.3.3 无限制的名称空间 12.4 导入模块 12.4.1 import语句 12.4.2 from-import语句 12.4.3 多行导入 12.4.4 扩展的import语句(as) 12.5 模块导入的特性 12.5.1 载入时执行模块 12.5.2 导入(import)和加载(load) 12.5.3 导入到当前名称空间的名称 12.5.4 被导入到导入者作用域的名字 12.5.5 关于__future__ 12.5.6 警告框架 12.5.7 从zip文件中导入模块 12.5.8 “新的”导入钩子 12.6 模块内建函数 12.6.1 __import__() 12.6.2 globals()和locals() 12.6.3 reload() 12.7 包 12.7.1 目录结构 12.7.2 使用from-import导入包 12.8 模块的其他特性 12.8.1 自动载入的模块 12.8.2 阻止属性导入 12.8.3 不区分大小的导入 12.8.4 源代码编码 12.8.5 导入循环 12.8.6 模块执行 12.9 相关模块 12.10 练习 第13章 面向对象编程 13.1 引言 13.2 面向对象编程 13.2.1 面向对象设计与面向对象编程的关系 13.2.2 现实中的问题 13.2.3 *常用术语 13.3 类 13.3.1 创建类 13.3.2 声明与定义 13.4 类属性 13.4.1 类的数据属性 13.4.2 methods 13.4.3 决定类的属性 13.4.4 特殊的类属性 13.5 实例 13.5.1 初始化:通过调用类对象来创建实例 13.5.2 __init__()“构造器”方法 13.5.3 __new__()“构造器”方法 13.5.4 __del__()“解构器”方法 13.6 实例属性 13.6.1 “实例化”实例属性(或创建一个更好的构造器) 13.6.2 查看实例属性 13.6.3 特殊的实例属性 13.6.4 建类型属性 13.6.5 实例属性vs类属性 13.7 绑定和方法调用 13.7.1 调用绑定方法 13.7.2 调用非绑定方法 13.8 静态方法和类方法 13.8.1 staticmethod()和classmethod()内建函数 13.8.2 使用函数修饰符 13.9 组合 13.10 子类和派生 13.11 继承 13.11.1 __bases__类属性 13.11.2 通过继承覆盖方法 13.11.3 从标准类型派生 13.11.4 多重继承 13.12 类、实例和其他对象的内建函数 13.12.1 issubclass() 13.12.2 isinstance() 13.12.3 hasattr()、getattr()、setattr()、delattr() 13.12.4 dir() 13.12.5 super() 13.12.6 vars() 13.13 用特殊方法定制类 13.13.1 简单定制(roundfloat2) 13.13.2 数值定制(time60) 13.13.3 迭代器(randseq和anyiter) 13.13.4 *多类型定制(numstr) 13.14 私有化 13.15 *授权 13.15.1 包装 13.15.2 实现授权 13.16 新式类的高级特性(python 2.2+) 13.16.1 新式类的通用特性 13.16.2 __slots__类属性 13.16.3 __getattribute__()特殊方法 13.16.4 描述符 13.16.5 元类和__metaclass__ 13.17 相关模块和文档 13.18 练习 第14章 执行环境 14.1 可调用对象 14.1.1 函数 14.1.2 方法 14.1.3 类 14.1.4 类的实例 14.2 代码对象 14.3 可执行的对象声明和内建函数 14.3.1 callable() 14.3.2 compile() 14.3.3 eval() 14.3.4 exec 14.3.5 input() 14.3.6 使用python在运行时生成和执行python代码 14.4 执行其他(python)程序 14.4.1 导入 14.4.2 execfile() 14.4.3 将模块作为脚本执行 14.5 执行其他(非python)程序 14.5.1 os.system() 14.5.2 os.popen() 14.5.3 os.fork()、os.exec*()、os.wait*() 14.5.4 os.spawn*() 14.5.5 subprocess 模块 14.5.6 相关函数 14.6 受限执行 14.7 结束执行 14.7.1 sys.exit() and systemexit 14.7.2 sys.exitfunc() 14.7.3 os._exit() 函数 14.7.4 os.kill() function 14.8 各种操作系统接口 14.9 相关模块 14.10 练习 第2部分 高级主题 第15章 正则表达式 15.1 引言/动机 15.2 正则表达式使用的特殊符号和字符 15.2.1 用管道符号(
173B
JAVA上百实例源码以及开源项目源代码
2018-12-11简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲
68B
JAVA上百实例源码以及开源项目
2016-01-03百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Jav
741KB
Java 2实用教程(第三版)实验指导与习题解答
2012-06-28Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 4 实验2 一个简单的Java Applet程序 4 实验3 联合编译 5 上机实践2 基本数据类型与控制语句 6 实验1 输出希腊字母表 6 实验2 回文数 6 实验3 猜数字游戏 8 上机实践3 类与对象 9 实验1 三角形、梯形和圆形的类封装 9 实验2 实例成员与类成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19 实验2 比较日期的大小 21 实验3 处理大整数 22 上机实践6 组件及事件处理 23 实验1 算术测试 23 实验2 信号灯 25 实验3 布局与日历 28 上机实践7 组件及事件处理2 31 实验1 方程求根 31 实验2 字体对话框 34 实验3 英语单词拼写训练 37 上机实践8 多线程 41 实验1 汉字打字练习 41 实验2 旋转的行星 43 实验3 双线程接力 47 上机实践9 输入输出流 50 实验1 学读汉字 50 实验2 统计英文单词字 53 实验2 读取Zip文件 56 上机实践10 Java 中的网络编程 57 实验1 读取服务器端文件 57 实验2 使用套接字读取服务器端对象 59 实验3 基于UDP的图像传输 62 上机实践11 数据结构 66 实验1 扫雷小游戏 66 实验2 排序与查找 70 实验3 使用TreeSet排序 72 上机实践12 java Swing 74 实验1 JLayeredPane分层窗格 74 实验2 使用表格显示日历 75 实验3 多文档界面(MDI) 78 上机实践1 初识Java 实验1 一个简单的应用程序 2.模板代码 Hello.java package 实验一; public class Hello { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("你好,很高兴学习Java"); //命令行窗口输出"你好,很高兴学习Java" A a=new A(); a.fA(); } } class A { void fA() {System.out.println("we are student"); } } 实验2 一个简单的Java Applet程序 2.模板代码 FirstApplet.java import java.applet.*; import java.awt.*; public class FirstApplet extends Applet { public void paint(Graphics g) { g.setColor(Color.blue); g.drawString("这是一个Java Applet 程序",10,30);//在Java Applet中绘制一行文字:“这是一个Java Applet 程序” g.setColor(Color.red); g.setFont(new Font("宋体",Font.BOLD,36)); g.drawString("我改变了字体",20,50);//在Java Applet中绘制一行文字:“我改变了字体” } }实验3 联合编译 2.模板代码 public class MainClass { public static void main (String args[ ]) { System.out.println("你好,只需编译我") ; //命令行窗口输出"你好,只需编译我" A a=new A(); a.fA(); B b=new B(); b.fB(); } } public class A { void fA() { System.out.println("I am A") ; //命令行窗口输出"I am A" } } public class B { void fB() { System.out.println("I am B") ; //命令行窗口输出"I am B" } } public class C { void fC() { System.out.println("I am c") ; //命令行窗口输出"I am C" } } 上机实践2 基本数据类型与控制语句 实验1 输出希腊字母表 2.模板代码 GreekAlphabet.java public class GreekAlphabet { public static void main (String args[ ]) { int startPosition=0,endPosition=0; char cStart='α',cEnd='ω'; startPosition=(int)cStart; //cStart做int型转换据运算,并将结果赋值给startPosition endPosition=(int)cEnd ; //cEnd做int型转换运算,并将结果赋值给endPosition System.out.println("希腊字母\'α\'在unicode表中的顺序位置:"+(int)cStart); System.out.println("希腊字母表:"); for(int i=startPosition;i<=endPosition;i++) { char c='\\0'; c=(char)i ; //i做char型转换运算,并将结果赋值给c System.out.print(" "+c); if((i-startPosition+1)==0) System.out.println(""); } } } 实验2 回文数 2.模板代码 Number.java import javax.swing.JOptionPane; public class Number { public static void main(String args[]) { int number=0,d5,d4,d3,d2,d1; String str=JOptionPane.showInputDialog("输入一个1至99999之间的数"); number=Integer.parseInt(str); if(number>=1&&number;<=99999) //判断number在1至99999之间的条件 { d5=number0000/10000; //计算number的最高位(万位)d5 d4=number000/1000; //计算number的千位d4 d3=number00/100; //计算number的百位d3 d2=number0/10; d1=number; if(number>9999) //判断number是5位数的条件 { System.out.println(number+"是5位数"); if(d5==d1&&d4;==d2) //判断number是回文数的条件 { System.out.println(number+"是回文数"); } else { System.out.println(number+"不是回文数"); } } else if(number>999) //判断number是4位数的条件 { System.out.println(number+"是4位数"); if(d4==d1&&d2;==d3) //判断number是回文数的条件码 { System.out.println(number+"是回文数"); } else { System.out.println(number+"不是回文数"); } } else if(number>99) //判断number是3位数的条件 { System.out.println(number+"是3位数"); if(d1==d3) //判断number是回文数的条件 { System.out.println(number+"是回文数"); } else { System.out.println(number+"不是回文数"); } } else if(d2!=0) { System.out.println(number+"是2位数"); if(d1==d2) { System.out.println(number+"是回文数"); } else { System.out.println(number+"不是回文数"); } } else if(d1!=0) { System.out.println(number+"是1位数"); System.out.println(number+"是回文数"); } } else { System.out.printf("\n%d不在1至99999之间",number); } } } 实验3 猜数字游戏 2.模板代码 GuessNumber.java import javax.swing.JOptionPane; public class GuessNumber { public static void main (String args[ ]) { System.out.println("给你一个1至100之间的整数,请猜测这个数"); int realNumber=(int)(Math.random()*100)+1; int yourGuess=0; String str=JOptionPane.showInputDialog("输入您的猜测:"); yourGuess=Integer.parseInt(str); while(yourGuess!=realNumber) //循环条件 { if(yourGuess>realNumber) //条件代码 { str=JOptionPane.showInputDialog("猜大了,再输入你的猜测:"); yourGuess=Integer.parseInt(str); } else if(yourGuess<realNumber) //条件代码 { str=JOptionPane.showInputDialog("猜小了,再输入你的猜测:"); yourGuess=Integer.parseInt(str); } } System.out.println("猜对了!"); } } 上机实践3 类与对象 实验1 三角形、梯形和圆形的类封装 2.模板代码 AreaAndLength.java class Trangle { double sideA,sideB,sideC,area,length; boolean boo; public Trangle(double a,double b,double c) { sideA=a; sideB=b; sideC=c; //参数a,b,c分别赋值给sideA,sideB,sideC if(a<(b+c)&&b<(a+c)&&c<(a+b)) //a,b,c构成三角形的条件表达式 { boo=true; //给boo赋值。 } else { boo=false;//给boo赋值。 } } double getLength() { if(boo) { length=sideA+sideB+sideC; return length; } else{ System.out.println("这个不是三角形,不能计算周长"); return 0; } //方法体,要求计算出length的值并返回 } public double getArea() { if(boo) { double p=(sideA+sideB+sideC)/2.0; area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ; return area; } else { System.out.println("不是一个三角形,不能计算面积"); return 0; } } public void setABC(double a,double b,double c) { sideA=a; sideB=b; sideC=c;//参数a,b,c分别赋值给sideA,sideB,sideC if(a+c>b&&a+b>c&&b+c>a) //a,b,c构成三角形的条件表达式 { boo=true; //给boo赋值。 } else { boo=false; //给boo赋值。 } } } class Lader { double above,bottom,height,area; Lader(double a,double b,double h) { above=a; bottom=b; height=h;//方法体,将参数a,b,h分别赋值给above,bottom,height } double getArea() { area=(above+bottom)/2*height; return area;//方法体,,要求计算出area返回 } } class Circle { double radius,area; Circle(double r) { radius=r; //方法体 } double getArea() { area=3.14*radius*radius; return area;//方法体,要求计算出area返回 } double getLength() { return 2*3.14*radius; //getArea方法体的代码,要求计算出length返回 } void setRadius(double newRadius) { radius=newRadius; } double getRadius() { return radius; } } public class AreaAndLength { public static void main(String args[]) { double length,area; Circle circle=null; Trangle trangle; Lader lader; circle=new Circle(10) ;//创建对象circle trangle=new Trangle(3,4,5); //创建对象trangle。 lader=new Lader(3,4,10); //创建对象lader length=trangle.getLength(); // 调用getLength()方法返回周长并赋值给length System.out.println("圆的周长:"+length); area=circle.getArea(); // 调用getArea()方法返回面积并赋值给area System.out.println("圆的面积:"+area); length=trangle.getLength(); // 调用getLength()方法返回周长并赋值给length System.out.println("三角形的周长:"+length); area=trangle.getArea(); // 调用getArea()方法返回面积并赋值给area System.out.println("三角形的面积:"+area); area=lader.getArea();// 调用getArea()方法返回面积并赋值给area System.out.println("梯形的面积:"+area); trangle.setABC(12,34,1); // trangle调用setABC()方法设置三个边,要求将三个边修改为12,34,1。 area=trangle.getArea(); // trangle调用getArea()方法返回面积并赋值给area System.out.println("三角形的面积:"+area); length=trangle.getLength(); // trangle调用getLength()方法返回周长并赋值给length System.out.println("三角形的周长:"+length); } } 实验2 实例成员与类成员 2.模板代码 Example.java class A { float a; //声明一个float型实例变量a static float b; //声明一个float型类变量b,即static变量b void setA(float a) { this.a=a; //将参数a的值赋值给成员变量a } void setB(float b) { this.b=b; //将参数b的值赋值给成员变量b } float getA() { return a; } float getB() { return b; } void inputA() { System.out.println(a); } static void inputB() { System.out.println(b); } } public class Example { public static void main(String args[]) { A.b=100; //通过类名操作类变量b,并赋值100 A.inputB(); //通过类名调用方法inputB() A cat=new A(); A dog=new A(); cat.setA(200); //cat对象调用方法setA(int a)将cat的成员a的值设置为200 cat.setB(400); //cat调用方法setB(int b)将cat的成员b的值设置为400 dog.setA(150); //dog调用方法setA(int a)将dog的成员a的值设置为150 dog.setB(300); //dog调用方法setB(int b)将dog的成员b的值设置为300 cat.inputA(); //cat调用inputA()。 cat.inputB(); //cat调用inputB()。 dog.inputA(); //dog调用inputA()。 dog.inputB(); //dog调用inputB()。 } } 实验3 使用package语句与import语句 2.模板代码 SquareEquation.java package tom.jiafei; public class SquareEquation { double a,b,c; double root1,root2; boolean boo; public SquareEquation(double a,double b,double c) { this.a=a; this.b=b; this.c=c; if(a!=0) { boo=true; } else { boo=false; } } public void getRoots() { if(boo) { System.out.println("是一元2次方程"); double disk=b*b-4*a*c; if(disk>=0) { root1=(-b+Math.sqrt(disk))/(2*a); root2=(-b-Math.sqrt(disk))/(2*a); System.out.printf("方程的根:%f,%f\n",root1,root2); } else { System.out.printf("方程没有实根\n"); } } else { System.out.println("不是一元2次方程"); } } public void setCoefficient(double a,double b,double c) { this.a=a; this.b=b; this.c=c; if(a!=0) { boo=true; } else { boo=false; } } } SunRise.java import tom.jiafei.*; class SunRise { public static void main(String args[ ]) { SquareEquation equation=new SquareEquation(4,5,1); equation.getRoots(); equation.setCoefficient(-3,4,5); equation.getRoots(); } } 上机实践4 继承与接口 实验1 继承 2.模板代码 Example.java package ll; class People { protected double weight,height; public void speakHello() { System.out.println("yayawawa"); } public void averageHeight() { height=173; System.out.println("average height:"+height); } public void averageWeight() { weight=70; System.out.println("average weight:"+weight); } } class ChinaPeople extends People { public void speakHello() { System.out.println("你好,吃了吗"); } //重写public void speakHello()方法,要求输出类似“你好,吃了吗”这样的 //汉语信息 public void averageHeight() { height=168.78; System.out.println("中国人的平均身高:"+height+"厘米"); } //重写public void averageHeight()方法,要求输出类似 //“中国人的平均身高:168.78厘米”这样的汉语信息 public void averageWeight() { weight=65; System.out.println("中国人的平均体重: "+weight+"公斤"); } //重写public void averageWeight()方法, //要求输出类似“中国人的平均体重:65公斤”这样的汉语信息 public void chinaGongfu() { System.out.println("坐如钟,站如松,睡如弓 "); //输出中国武术的信息,例如:"坐如钟,站如松,睡如弓"等 } } class AmericanPeople extends People { public void speakHello() { System.out.println("How do you do"); } //重写public void speakHello()方法,要求输出类似 //“How do you do”这样的英语信息。 public void averageHeight() { height=188.0; System.out.println("美国人的平均身高:"+height+"厘米"); } //重写public void averageHeight()方法 public void averageWeight() { weight=80.23; System.out.println("美国人的平均体重: "+weight+"公斤"); } //重写public void averageWeight()方法 public void americanBoxing() { System.out.println("直拳”、钩拳");//输出拳击的信息,例如,“直拳”、“钩拳”等 } } class BeijingPeople extends ChinaPeople { public void speakHello() { System.out.println("您好"); } //重写public void speakHello()方法,要求输出类似“您好”这样的汉语信息 public void averageHeight() { height=167.0; System.out.println("北京人的平均身高:"+height+"厘米"); } //重写public void averageHeight()方法 public void averageWeight() { weight=68.5; System.out.println("北京人的平均体重: "+weight+"公斤"); } //重写public void averageWeight()方法 public void beijingOpera() { System.out.println("京剧术语");//输出京剧的信息 } } public class Example { public static void main(String args[]) { ChinaPeople chinaPeople=new ChinaPeople(); AmericanPeople americanPeople=new AmericanPeople(); BeijingPeople beijingPeople=new BeijingPeople(); chinaPeople.speakHello(); americanPeople.speakHello(); beijingPeople.speakHello(); chinaPeople.averageHeight(); americanPeople.averageHeight(); beijingPeople.averageHeight(); chinaPeople.averageWeight(); americanPeople.averageWeight(); beijingPeople.averageWeight(); chinaPeople.chinaGongfu(); americanPeople.americanBoxing(); beijingPeople.beijingOpera() ; beijingPeople.chinaGongfu(); } } 实验2 上转型对象 2.模板代码 HardWork.java package 上机实践4; abstract class Employee { public abstract double earnings(); } class YearWorker extends Employee { public double earnings() { return 50.456; }//重写earnings()方法 } class MonthWorker extends Employee { public double earnings() { return 12*23; } //重写earnings()方法。 } class WeekWorker extends Employee { public double earnings() { return 52*23; } //重写earnings()方法。 } class Company { Employee[] employee; double salaries=0; Company(Employee[] employee) { this.employee=employee; } public double salariesPay() { salaries=0; for(int i=0;i<employee.length;i++) { salaries=salaries+employee[i].earnings(); } //计算salaries。 return salaries; } } public class HardWork { public static void main(String args[]) { Employee[] employee=new Employee[20]; for(int i=0;i<employee.length;i++) { if(i%3==0) employee[i]=new WeekWorker(); else if(i%3==1) employee[i]=new MonthWorker(); else if(i%3==2) employee[i]=new YearWorker(); } Company company=new Company(employee); System.out.println("公司年工资总额:"+company.salariesPay()); } } 实验3 接口回调 2.模板代码 Road.java package 上机实践4; interface ComputerWeight { public double computeWeight(); } class Television implements ComputerWeight { public double computeWeight() { return 45.5; }//实现computeWeight()方法。 } class Computer implements ComputerWeight { public double computeWeight() { return 65.5; } //实现computeWeight()方法。 } class WashMachine implements ComputerWeight { public double computeWeight() { return 145; }//实现computeWeight()方法。 } class Car { ComputerWeight[] goods; double totalWeights=0; Car(ComputerWeight[] goods) { this.goods=goods; } public double getTotalWeights() { totalWeights=0; for(int k=0;k<goods.length;k++) { totalWeights=totalWeights+goods[k].computeWeight(); } //计算totalWeights return totalWeights; } } public class Road { public static void main(String args[]) { ComputerWeight[] goodsOne=new ComputerWeight[50], goodsTwo=new ComputerWeight[22] ; for(int i=0;i<goodsOne.length;i++) { if(i%3==0) goodsOne[i]=new Television(); else if(i%3==1) goodsOne[i]=new Computer(); else if(i%3==2) goodsOne[i]=new WashMachine(); } for(int i=0;i<goodsTwo.length;i++) { if(i%3==0) goodsTwo[i]=new Television(); else if(i%3==1) goodsTwo[i]=new Computer(); else if(i%3==2) goodsTwo[i]=new WashMachine(); } Car 大货车=new Car(goodsOne); System.out.println("大货车装载的货物重量:"+大货车.getTotalWeights()); Car 小货车=new Car(goodsTwo); System.out.println("小货车装载的货物重量:"+小货车.getTotalWeights()); } } 上机实践5 字符串、时间与数字 实验1 String类的常用方法 模板代码 StringExample.java package 上机实践5; class StringExample { public static void main(String args[]) { String s1=new String("you are a student"), s2=new String("how are you"); if(s1.equals(s2)) // 使用equals方法判断s1与s2是否相同 { System.out.println("s1与s2相同"); } else { System.out.println("s1与s2不相同"); } String s3=new String("22030219851022024"); if(s3.startsWith("220302",0)) //判断s3的前缀是否是“220302”。 { System.out.println("吉林省的身份证"); } String s4=new String("你"), s5=new String("我"); if(s4.compareTo(s5)>0)//按着字典序s4大于s5的表达式。 { System.out.println("按字典序s4大于s5"); } else { System.out.println("按字典序s4小于s5"); } int position=0; String path="c:\\\\java\\\\jsp\\\\A.java"; position=path.lastIndexOf("\\"); //获取path中最后出现目录分隔符号的位置 System.out.println("c:\\java\\jsp\\A.java中最后出现\\的位置:"+position); String fileName=path.substring(position+1);//获取path中“A.java”子字符串。 System.out.println("c:\\java\\jsp\\A.java中含有的文件名:"+fileName); String s6=new String("100"), s7=new String("123.678"); int n1=Integer.parseInt(s6); //将s6转化成int型数据。 double n2=Double.parseDouble(s7); //将s7转化成double型数据。 double m=n1+n2; System.out.println(m); String s8=String.valueOf(m); //String调用valuOf(int n)方法将m转化为字符串对象 position=s8.indexOf("."); String temp=s8.substring(position+1); System.out.println("数字"+m+"有"+temp.length()+"位小数") ; String s9=new String("ABCDEF"); char a[]= s9.toCharArray(); //将s9存放到数组a for(int i=a.length-1;i>=0;i--) { System.out.print(" "+a[i]); } } }} 实验2 比较日期的大小 模板代码 DateExample import java.util.*; import javax.swing.JOptionPane; public class DateExample { public static void main(String args[ ]) { String str=JOptionPane.showInputDialog("输入第一个日期的年份:"); int yearOne=Integer.parseInt(str); str=JOptionPane.showInputDialog("输入该年的月份:"); int monthOne=Integer.parseInt(str); str=JOptionPane.showInputDialog("输入该月份的日期:"); int dayOne=Integer.parseInt(str); str=JOptionPane.showInputDialog("输入第二个日期的年份:"); int yearTwo=Integer.parseInt(str); str=JOptionPane.showInputDialog("输入该年的月份:"); int monthTwo=Integer.parseInt(str); str=JOptionPane.showInputDialog("输入该月份的日期:"); int dayTwo=Integer.parseInt(str); Calendar calendar= Calendar.getInstance(); //初始化日历对象 calendar.set(yearOne, monthOne, dayOne); //将calendar的时间设置为yearOne年monthOne月dayOne日 long timeOne= calendar.getTimeInMillis(); //calendar表示的时间转换成毫秒 calendar.set(yearTwo, monthTwo, dayTwo); //将calendar的时间设置为yearTwo年monthTwo月dayTwo日 long timeTwo= calendar.getTimeInMillis(); //calendar表示的时间转换成毫秒。 Date date1= new Date(timeOne); // 用timeOne做参数构造date1 Date date2= new Date(timeTwo); // 用timeTwo做参数构造date2 if(date2.equals(date1)) { System.out.println("两个日期的年、月、日完全相同"); } else if(date2.after(date1)) { System.out.println("您输入的第二个日期大于第一个日期"); } else if(date2.before(date1)) { System.out.println("您输入的第二个日期小于第一个日期"); } long days= (timeOne-timeTwo)/(1000*60*60*24);//计算两个日期相隔天数 System.out.println(yearOne+"年"+monthOne+"月"+dayOne+"日和" +yearTwo+"年"+monthTwo+"月"+dayTwo+"相隔"+days+"天"); } } 实验3 处理大整数 模板代码 BigintegerExample import java.math.*; class BigIntegerExample { public static void main(String args[]) { BigInteger n1=new BigInteger("987654321987654321987654321"), n2=new BigInteger("123456789123456789123456789"), result=null; result= n1.add(n2);//n1和n2做加法运算 System.out.println("和:"+result.toString()); result= n1.subtract(n2);//n1和n2做减法运算 System.out.println("差:"+result.toString()); result= n1.multiply(n2);//n1和n2做乘法运算 System.out.println("积:"+result.toString()); result= n1.divide(n2);//n1和n2做除法运算 System.out.println("商:"+result.toString()); BigInteger m=new BigInteger("1968957"), COUNT=new BigInteger("0"), ONE=new BigInteger("1"), TWO=new BigInteger("2"); System.out.println(m.toString()+"的因子有:"); for(BigInteger i=TWO;i.compareTo(m)<0;i=i.add(ONE)) { if((m.remainder(i).compareTo(BigInteger.ZERO))==0) { COUNT=COUNT.add(ONE); System.out.print(" "+i.toString()); } } System.out.println(""); System.out.println(m.toString()+"一共有"+COUNT.toString()+"个因子"); } } 上机实践6 组件及事件处理 实验1 算术测试 模板代码 Teacher.java public class Teacher { int numberOne,numberTwo; String operator=""; boolean right; public int giveNumberOne(int n) { numberOne=(int)(Math.random()*n)+1; return numberOne; } public int giveNumberTwo(int n) { numberTwo=(int)(Math.random()*n)+1; return numberTwo; } public String giveOperator() { double d=Math.random(); if(d>=0.5) operator="+"; else operator="-"; return operator; } public boolean getRight(int answer) { if(operator.equals("+")) { if(answer==numberOne+numberTwo) right=true; else right=false; } else if(operator.equals("-")) { if(answer==numberOne-numberTwo) right=true; else right=false; } return right; } } ComputerFrame.java import java.awt.*; import java.awt.event.*; public class ComputerFrame extends Frame implements ActionListener { TextField textOne,textTwo,textResult; Button getProblem,giveAnwser; Label operatorLabel,message; Teacher teacher; ComputerFrame(String s) { super(s); teacher=new Teacher(); setLayout(new FlowLayout()); textOne= new TextField(10); //创建textOne,其可见字符长是10 textTwo= new TextField(10); //创建textTwo,其可见字符长是10 textResult= new TextField(10); //创建textResult,其可见字符长是10 operatorLabel=new Label("+"); message=new Label("你还没有回答呢"); getProblem=new Button("获取题目"); giveAnwser=new Button("确认答案"); add(getProblem); add(textOne); add(operatorLabel); add(textTwo); add(new Label("=")); add(textResult); add(giveAnwser); add(message); textResult.requestFocus(); textOne.setEditable(false); textTwo.setEditable(false); getProblem.addActionListener(this);//将当前窗口注册为getProblem的ActionEvent事件监视器 giveAnwser.addActionListener(this);//将当前窗口注册为giveAnwser的ActionEvent事件监视器 textResult.addActionListener(this);//将当前窗口注册为textResult的ActionEvent事件监视器 setBounds(100,100,450,100); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { if(e.getSource()==getProblem) //判断事件源是否是getProblem { int number1=teacher.giveNumberOne(100); int number2=teacher.giveNumberTwo(100); String operator=teacher.givetOperator(); textOne.setText(""+number1); textTwo.setText(""+number2); operatorLabel.setText(operator); message.setText("请回答"); textResult.setText(null); } if(e.getSource()==giveAnwser) //判断事件源是否是giveAnwser { String answer=textResult.getText(); try{ int result=Integer.parseInt(answer); if(teacher.getRight(result)==true) { message.setText("你回答正确"); } else { message.setText("你回答错误"); } } catch(NumberFormatException ex) { message.setText("请输入数字字符"); } } textResult.requestFocus(); validate(); } } MainClass.java public class MainClass { public static void main(String args[]) { ComputerFrame frame; frame= new ComputerFrame("算术测试");//创建窗口,其标题为:算术测试 } } 实验2 信号灯 2.模板代码 SignalCanvas.java import java.awt.*; public class SignalCanvas extends Canvas { int red,green,yellow,x,y,r; SignalCanvas() { setBackground(Color.white); } public void setRed(int r) { red=r; } public void setGreen(int g) { green=g; } public void setYellow(int y) { yellow=y; } public void setPosition(int x,int y) { this.x=x; this.y=y; } public void setRadius(int r) { this.r=r; } public void paint(Graphics g) { if(red==1) { g.setColor(Color.red); } else if(green==1) { g.setColor(Color.green); } else if(yellow==1) { g.setColor(Color.yellow); } g.fillOval(x,y,2*r,2*r); } } SignalFrame.java import java.awt.*; import java.applet.*; import java.awt.event.*; public class SignalFrame extends Frame implements ItemListener { Choice choice; SignalCanvas signal=null; String itemRed="红灯",itemYellow="黄灯",itemGreen="绿灯"; public SignalFrame() { choice=new Choice(); //创建choice choice.add(itemRed); //创建choice添加itemRed choice.add(itemYellow); //创建choice添加itemYellow choice.add(itemGreen); //创建choice添加itemGreen choice.addItemListener(this); //将当前窗口注册为choice的ItemEvent事件监视器 add(choice,BorderLayout.NORTH); try{ Class cs=Class.forName("SignalCanvas"); signal=(SignalCanvas)cs.newInstance(); add(signal,BorderLayout.CENTER); } catch(Exception e) { add(new Label("您还没有编写SignalCanvas类"),BorderLayout.CENTER); } setBounds(100,100,360,300); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void itemStateChanged(ItemEvent e) { String item= choice.getSelectedItem(); // choice返回被选中的条目 int w=signal.getBounds().width; int h=signal.getBounds().height; int m=Math.min(w,h); signal.setRadius(m/6); if(item.equals(itemRed)) { if(signal!=null) { signal.setRed(1); signal.setYellow(0); signal.setGreen(0); signal.setPosition(w/3,0); signal.repaint(); } } else if(item.equals(itemYellow)) { if(signal!=null) { signal.setRed(0); signal.setYellow(1); signal.setGreen(0); signal.setPosition(w/3,h/3); signal.repaint(); } } else if(item.equals(itemGreen)) { if(signal!=null) { signal.setRed(0); signal.setYellow(0); signal.setGreen(1); signal.setPosition(w/3,2*h/3); signal.repaint(); } } } } SignalMainClass.java public class SignalMainClass { public static void main(String args[]) { SignalFrame frame; frame=new SignalFrame() ; frame.setTitle("信号灯"); } } 实验3 布局与日历 2.模板代码 CalendarBean.java import java.util.Calendar; public class CalendarBean { String day[]; int year=2005,month=0; public void setYear(int year) { this.year=year; } public int getYear() { return year; } public void setMonth(int month) { this.month=month; } public int getMonth() { return month; } public String[] getCalendar() { String a[]=new String[42]; Calendar 日历=Calendar.getInstance(); 日历.set(year,month-1,1); int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1; int day=0; if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { day=31; } if(month==4||month==6||month==9||month==11) { day=30; } if(month==2) { if(((year%4==0)&&(year0!=0))||(year@0==0)) { day=29; } else { day=28; } } for(int i=星期几,n=1;i<星期几+day;i++) { a[i]=String.valueOf(n) ; n++; } return a; } } CalendarFrame.java import java.util.*; import java.awt.*; import java.awt.event.*; import java.applet.*; public class CalendarFrame extends Frame implements ActionListener { Label labelDay[]=new Label[42]; Button titleName[]=new Button[7]; String name[]={"日","一","二","三", "四","五","六"}; Button nextMonth,previousMonth; int year=2006,month=10; CalendarBean calendar; Label showMessage=new Label("",Label.CENTER); public CalendarFrame() { Panel pCenter=new Panel(); pCenter.setLayout(new GridLayout(7,7));//将pCenter的布局设置为7行7列的GridLayout 布局。 for(int i=0;i<7;i++) { titleName[i]=new Button(name[i]); pCenter.add(titleName[i]);//pCenter添加组件titleName[i]。 } for(int i=0;i<42;i++) { labelDay[i]=new Label("",Label.CENTER); pCenter.add(labelDay[i]);//pCenter添加组件labelDay[i]。 } calendar=new CalendarBean(); calendar.setYear(year); calendar.setMonth(month); String day[]=calendar.getCalendar(); for(int i=0;i<42;i++) { labelDay[i].setText(day[i]); } nextMonth=new Button("下月"); previousMonth=new Button("上月"); nextMonth.addActionListener(this); previousMonth.addActionListener(this); Panel pNorth=new Panel(), pSouth=new Panel(); pNorth.add(previousMonth); pNorth.add(nextMonth); pSouth.add(showMessage); showMessage.setText("日历:"+calendar.getYear()+"年"+ calendar.getMonth()+"月" ); ScrollPane scrollPane=new ScrollPane(); scrollPane.add(pCenter); add(scrollPane,BorderLayout.CENTER);// 窗口添加scrollPane在中心区域 add(pNorth,BorderLayout.NORTH);// 窗口添加pNorth 在北面区域 add(pSouth,BorderLayout.SOUTH);// 窗口添加pSouth 在南区域。 } public void actionPerformed(ActionEvent e) { if(e.getSource()==nextMonth) { month=month+1; if(month>12) month=1; calendar.setMonth(month); String day[]=calendar.getCalendar(); for(int i=0;i<42;i++) { labelDay[i].setText(day[i]); } } else if(e.getSource()==previousMonth) { month=month-1; if(month<1) month=12; calendar.setMonth(month); String day[]=calendar.getCalendar(); for(int i=0;i<42;i++) { labelDay[i].setText(day[i]); } } showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月" ); } }CalendarMainClass.java public class CalendarMainClass { public static void main(String args[]) { CalendarFrame frame=new CalendarFrame(); frame.setBounds(100,100,360,300); frame.setVisible(true); frame.validate(); frame.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } } ); } } 上机实践7 组件及事件处理2 实验1 方程求根 2.模板代码 SquareEquation.java public class SquareEquation { double a,b,c; double root1,root2; public void setA(double a) { this.a=a; } public void setB(double b) { this.b=b; } public void setC(double c) { this.c=c; } public double getRootOne() throws NoRealRootException,NoSquareEquationException { if(a!=0) { double disk=b*b-4*a*c; if(disk>=0) { root1=(-b+Math.sqrt(disk))/(2*a); } else { throw new NoRealRootException("没有实根"); } } else { throw new NoRealRootException("不是二次方程"); } return root1; } public double getRootTwo() throws NoRealRootException,NoSquareEquationException { if(a!=0) { double disk=b*b-4*a*c; if(disk>=0) { root2=(-b-Math.sqrt(disk))/(2*a); } else { throw new NoRealRootException("没有实根"); } } else { throw new NoRealRootException("不是二次方程"); } return root2; } } class NoRealRootException extends Exception { String message; NoRealRootException(String s) { message=s; } public String getMessage() { return message; } } class NoSquareEquationException extends Exception { String message; NoSquareEquationException(String s) { message=s; } public String getMessage() { return message; } } EquationFrame.java import java.awt.*; import java.awt.event.*; public class EquationFrame extends Frame implements ActionListener { SquareEquation equation; TextField textA,textB,textC; TextArea showRoots; Button controlButton; public EquationFrame() { equation=new SquareEquation(); textA=new TextField(8); textB=new TextField(8); textC=new TextField(8); showRoots=new TextArea(); controlButton=new Button("确定"); Panel pNorth=new Panel(); pNorth.add(new Label("二次项系数:")); pNorth.add(textA); pNorth.add(new Label("一次项系数:")); pNorth.add(textB); pNorth.add(new Label("常数项系数:")); pNorth.add(textC); pNorth.add(controlButton); 【代码1】 //当前窗口作为controlButton的ActionEvent事件的监视器 add(pNorth,BorderLayout.NORTH); add(showRoots,BorderLayout.CENTER); setBounds(100,100,630,160); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { try{ double a=Double.parseDouble(【代码2】); //textA调用方法获取其中的文本 double b=Double.parseDouble(【代码3】); //textB调用方法获取其中的文本 double c=Double.parseDouble(【代码4】); // textC调用方法获取其中的文本 equation.setA(a); equation.setB(b); equation.setC(c); textA.setText(""+a); textB.setText(""+b); textC.setText(""+c); showRoots.append("\n 根:"+equation.getRootOne()); showRoots.append(" 根:"+equation.getRootTwo()); } catch(Exception ex) { showRoots.append("\n"+ex+"\n"); } } } EquationMainClass.java public class EquationMainClass { public static void main(String args[]) { EquationFrame frame=new EquationFrame(); } } 实验2 字体对话框 2.模板代码 FontFamilyNames.java import java.awt.GraphicsEnvironment; public class FontFamilyNames { String fontName[]; public String [] getFontName() { GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); fontName=ge.getAvailableFontFamilyNames(); return fontName; } } FontDialog.java import java.awt.event.*; import java.awt.*; import javax.swing.JLabel; public class FontDialog extends Dialog implements ItemListener,ActionListener { FontFamilyNames fontFamilyNames; int fontSize=38; String fontName; Choice fontNameList; JLabel label; Font font; Button yes,cancel; static int YES=1,NO=0; int state=-1; FontDialog(Frame f) { super(f); fontFamilyNames=new FontFamilyNames(); 【代码1】 //对话框设置为有模式 yes=new Button("Yes"); cancel=new Button("cancel"); yes.addActionListener(this); cancel.addActionListener(this); label=new JLabel("hello,奥运",JLabel.CENTER); fontNameList=new Choice(); String name[]=fontFamilyNames.getFontName(); for(int k=0;k<name.length;k++) { fontNameList.add(name[k]); } fontNameList.addItemListener(this); add(fontNameList,BorderLayout.NORTH); add(label,BorderLayout.CENTER); Panel pSouth=new Panel(); pSouth.add(yes); pSouth.add(cancel); add(pSouth,BorderLayout.SOUTH); setBounds(100,100,280,170); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { state=NO; setVisible(false); } } ); validate(); } public void itemStateChanged(ItemEvent e) { fontName=(String)fontNameList.getSelectedItem(); font=new Font(fontName,Font.BOLD,fontSize); label.setFont(font); label.repaint(); validate(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==yes) { state=YES; 【代码2】 //对话框设置为不可见 } else if(e.getSource()==cancel) { state=NO; 【代码3】 //对话框设置为不可见 } } public int getState() { return state; } public Font getFont() { return font; } } FrameHaveDialog.java import java.awt.event.*; import java.awt.*; import javax.swing.JTextArea; public class FrameHaveDialog extends Frame implements ActionListener { JTextArea text; Button buttonFont; FrameHaveDialog() { buttonFont=new Button("设置字体"); text=new JTextArea("Java 2实用教程(第三版)"); buttonFont.addActionListener(this); add(buttonFont,BorderLayout.NORTH); add(text); setBounds(60,60,300,300); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { if(e.getSource()==buttonFont) { FontDialog dialog=【代码4】 //创建对话框 【代码5】 //对话框设置为可见 【代码6】 //对话框设置设置标题为“字体对话框” if(dialog.getState()==FontDialog.YES) { text.setFont(dialog.getFont()); text.repaint(); } if(dialog.getState()==FontDialog.NO) { text.repaint(); } } } } FontDialogMainClass.java public class FontDialogMainClass { public static void main(String args[]) { new FrameHaveDialog(); } } 实验3 英语单词拼写训练 2.模板代码 RondomString.java public class RondomString { String str=""; public String getRondomString(String s) { StringBuffer strBuffer=new StringBuffer(s); int m=strBuffer.length(); for(int k=0;k<m;k++) { int index=(int)(Math.random()*strBuffer.length()); char c=strBuffer.charAt(index); str=str+c; strBuffer=strBuffer.deleteCharAt(index); } return str; } } LetterLabel.java import java.awt.*; import java.awt.event.*; public class LetterLabel extends Button implements FocusListener,MouseListener { LetterLabel() { 【代码1】 //将当前对象注册为自身的焦点视器 【代码2】 //将当前对象注册为自身的标监视器 setBackground(Color.cyan); setFont(new Font("",Font.BOLD,30)); } public static LetterLabel[] getLetterLabel(int n) { LetterLabel a[]=new LetterLabel[n]; for(int k=0;k<a.length;k++) { a[k]=new LetterLabel(); } return a; } public void focusGained(FocusEvent e) { setBackground(Color.red); } public void focusLost(FocusEvent e) { setBackground(Color.cyan); } public void mousePressed(MouseEvent e) { requestFocus(); } public void setText(char c) { setLabel(""+c); } public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseClicked(MouseEvent e){} } SpellingWordFrame.java import java.awt.*; import java.awt.event.*; import javax.swing.Box; public class SpellingWordFrame extends Frame implements KeyListener,ActionListener { TextField inputWord; Button button; LetterLabel label[]; Panel northP,centerP; Box wordBox; String hintMessage="用鼠标单击字母,按左右箭头交换字母,将其排列成所输入的单词"; Label messaageLabel=new Label(hintMessage); String word=""; SpellingWordFrame() { inputWord=new TextField(12); button=new Button("确定"); button.addActionListener(this); inputWord.addActionListener(this); northP=new Panel(); northP.add(new Label("输入一个英文单词:")); northP.add(inputWord); northP.add(button); centerP=new Panel(); wordBox=Box.createHorizontalBox(); centerP.add(wordBox); add(northP,BorderLayout.NORTH); add(centerP,BorderLayout.CENTER); add(messaageLabel,BorderLayout.SOUTH); setBounds(100,100,350,180); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { word=inputWord.getText(); int n=word.length(); RondomString rondom=new RondomString(); String randomWord=rondom.getRondomString(word); wordBox.removeAll(); messaageLabel.setText(hintMessage); if(n>0) { label=LetterLabel.getLetterLabel(n); for(int k=0;k<label.length;k++) { 【代码3】 //将当前窗口注册为label[k]的键盘监视器 label[k].setText(""+randomWord.charAt(k)); wordBox.add(label[k]); } validate(); inputWord.setText(null); label[0].requestFocus(); } } public void keyPressed(KeyEvent e) { LetterLabel sourceLabel=(LetterLabel)e.getSource(); int index=-1; if(【代码4】) //判断按下的是否是←键) { for(int k=0;k<label.length;k++) { if(label[k]==sourceLabel) { index=k; break; } } if(index!=0) { String temp=label[index].getText(); label[index].setText(label[index-1].getText()); label[index-1].setText(temp); label[index-1].requestFocus(); } } else if(【代码5】) //判断按下的是否是→键 { for(int k=0;k<label.length;k++) { if(label[k]==sourceLabel) { index=k; break; } } if(index!=label.length-1) { String temp=label[index].getText(); label[index].setText(label[index+1].getText()); label[index+1].setText(temp); label[index+1].requestFocus(); } } validate(); } public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e) { String success=""; for(int k=0;k<label.length;k++) { String str=label[k].getText(); success=success+str; } if(success.equals(word)) { messaageLabel.setText("恭喜你,你成功了"); for(int k=0;k<label.length;k++) { label[k].removeKeyListener(this); label[k].removeFocusListener(label[k]); label[k].setBackground(Color.green); } inputWord.requestFocus(); } } } WordMainClass.java public class WordMainClass { public static void main(String args[]) { new SpellingWordFrame(); } } 上机实践8 多线程 实验1 汉字打字练习 2.模板代码 WordThread.java import java.awt.*; public class WordThread extends Thread { char word; int k=19968; Label com; WordThread(Label com) { this.com=com; } public void run() { k=19968; while(true) { word=(char)k; com.setText(""+word); try{ sleep(6000);//调用sleep方法使得线程中断6000豪秒 } catch(InterruptedException e){} k++; if(k>=29968) k=19968; } } } ThreadFrame.java import java.awt.*; import java.awt.event.*; public class ThreadFrame extends Frame implements ActionListener { Label wordLabel; Button button; TextField inputText,scoreText; WordThread giveWord;//用WordThread声明一个giveWord对象 int score=0; ThreadFrame() { wordLabel=new Label(" ",Label.CENTER); wordLabel.setFont(new Font("",Font.BOLD,72)); button=new Button("开始"); inputText=new TextField(3); scoreText=new TextField(5); scoreText.setEditable(false); giveWord=new WordThread(wordLabel);//创建giveWord,将wordLabel传递给WordThread构造方法的参数 button.addActionListener(this); inputText.addActionListener(this); add(button,BorderLayout.NORTH); add(wordLabel,BorderLayout.CENTER); Panel southP=new Panel(); southP.add(new Label("输入标签所显示的汉字后回车:")); southP.add(inputText); southP.add(scoreText); add(southP,BorderLayout.SOUTH); setBounds(100,100,350,180); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { if(e.getSource()==button) { if(!(giveWord.isAlive())) //giveWord调用方法isAlive() { giveWord=new WordThread(wordLabel); } try { giveWord.start();//giveWord调用方法start() } catch(Exception exe){} } else if(e.getSource()==inputText) { if(inputText.getText().equals(wordLabel.getText())) { score++; } scoreText.setText("得分:"+score); inputText.setText(null); } } } WordThread.java public class ThreadWordMainClass { public static void main(String args[]) { new ThreadFrame(); } 实验2 旋转的行星 2.模板代码 Mycanvas.java import java.awt.*; public class Mycanvas extends Canvas { int r; Color c; public void setColor(Color c) { this.c=c; } public void setR(int r) { this.r=r; } public void paint(Graphics g) { g.setColor(c); g.fillOval(0,0,2*r,2*r); } public int getR() { return r; } } Planet.java import java.awt.*; public class Planet extends Panel implements Runnable { Thread moon; //用Thread类声明一个moon对象 Mycanvas yellowBall; double pointX[]=new double[360], pointY[]=new double[360]; //用来表示画布左上角端点坐标的数组 int w=100,h=100; int radius=30; Planet() { setSize(w,h); setLayout(null); yellowBall=new Mycanvas(); yellowBall.setColor(Color.yellow); add(yellowBall); yellowBall.setSize(12,12); yellowBall.setR(12/2); pointX[0]=0; pointY[0]=-radius; double angle=1*Math.PI/180; //刻度为1度 for(int i=0;i<359;i++) //计算出数组中各个元素的值 { pointX[i+1]=pointX[i]*Math.cos(angle)-Math.sin(angle)*pointY[i]; pointY[i+1]=pointY[i]*Math.cos(angle)+pointX[i]*Math.sin(angle); } for(int i=0;i<360;i++) { pointX[i]=pointX[i]+w/2; //坐标平移 pointY[i]=pointY[i]+h/2; } yellowBall.setLocation((int)pointX[0]-yellowBall.getR(), (int)pointY[0]-yellowBall.getR()); Thread moon =new Thread(this); //创建 moon线程,当前面板做为该线程的目标对象 } public void start() { try{ moon .start(); } catch(Exception exe){} } public void paint(Graphics g) { g.setColor(Color.blue); g.fillOval(w/2-9,h/2-9,18,18); } public void run() { int i=0; while(true) { i=(i+1)60; yellowBall.setLocation((int)pointX[i]-yellowBall.getR(), (int)pointY[i]-yellowBall.getR()); try{ Thread.sleep(10); // Thread类调用类方法sleep使得线程中断10豪秒 } catch(InterruptedException e){} } } } HaveThreadFrame.java import java.awt.*; import java.awt.event.*; public class HaveThreadFrame extends Frame implements Runnable { Thread rotate; //用Thread类声明一个rotate对象 Planet earth; double pointX[]=new double[360], pointY[]=new double[360]; int width,height; int radius=120; HaveThreadFrame() { rotate=new Thread(this); earth=new Planet(); setBounds(0,0,360,400); width=getBounds().width; height=getBounds().height; pointX[0]=0; pointY[0]=-radius; double angle=1*Math.PI/180; for(int i=0;i<359;i++) { pointX[i+1]=pointX[i]*Math.cos(angle)-Math.sin(angle)*pointY[i]; pointY[i+1]=pointY[i]*Math.cos(angle)+pointX[i]*Math.sin(angle); } for(int i=0;i<360;i++) { pointX[i]=pointX[i]+width/2; pointY[i]=pointY[i]+height/2; } setLayout(null); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); add(earth); earth.setLocation((int)pointX[0]-earth.getSize().width/2, (int)pointY[0]-earth.getSize().height/2); earth.start(); rotate.start(); //用rotate调用start方法 } public void run() { int i=0; while(true) { i=(i+1)60; earth.setLocation((int)pointX[i]-earth.getSize().width/2, (int)pointY[i]-earth.getSize().height/2); try{ Thread.sleep(100); } catch(InterruptedException e){} } } public void paint(Graphics g) { g.setColor(Color.red); g.fillOval(width/2-15,height/2-15,30,30); } } HaveThreadFrame.java public class ThreadRotateMainClass { public static void main(String args[]) { new HaveThreadFrame(); } } 实验3 双线程接力 2.模板代码 MoveButton.java import java.awt.*; import java.awt.event.*; public class MoveButton extends Frame implements Runnable,ActionListener { Thread first,second;//用Thread类声明first,second两个线程对象 Button redButton,greenButton,startButton; int distance=10; MoveButton() { first=new Thread(this); //创建first线程,当前窗口做为该线程的目标对象 second=new Thread(this); //创建first线程,当前窗口做为该线程的目标对象 redButton=new Button(); greenButton=new Button(); redButton.setBackground(Color.red); greenButton.setBackground(Color.green); startButton=new Button("start"); startButton.addActionListener(this); setLayout(null); add(redButton); redButton.setBounds(10,60,15,15); add(greenButton); greenButton.setBounds(100,60,15,15); add(startButton); startButton.setBounds(10,100,30,30); setBounds(0,0,300,200); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { try{ first.start(); second.start(); } catch(Exception exp){} } public void run() { while(true) { if(Thread.currentThread()==first) //判断当前占有CPU资源的线程是否是first { moveComponent(redButton); try{ Thread.sleep(20); } catch(Exception exp){} } if(Thread.currentThread()==second) //判断当前占有CPU资源的线程是否是second { moveComponent(greenButton); try{ Thread.sleep(10); } catch(Exception exp){} } } } public synchronized void moveComponent(Component b) { if(Thread.currentThread()==first) { while(distance>100&&distance;<=200) try{ wait(); } catch(Exception exp){} distance=distance+1; b.setLocation(distance,60); if(distance>=100) { b.setLocation(10,60); notifyAll(); } } if(Thread.currentThread()==second) { while(distance>=10&&distance;<100) try{ wait(); } catch(Exception exp){} distance=distance+1; b.setLocation(distance,60); if(distance>200) { distance=10; b.setLocation(100,60); notifyAll(); } } } }MoveButtonMainClass.java public class MoveButtonMainClass { public static void main(String args[]) { new MoveButton(); } } 上机实践9 输入输出流 实验1 学读汉字 2.模板代码 ChineseCharacters.java import java.io.*; import java.util.StringTokenizer; public class ChineseCharacters { public StringBuffer getChinesecharacters(File file) { StringBuffer hanzi=new StringBuffer(); try{ FileReader inOne=new FileReader(file); //创建指向文件f的inOne 的对象 BufferedReader inTwo= new BufferedReader(inOne); //创建指向文件inOne的inTwo 的对象 String s=null; int i=0; while((s=inTwo.readLine())!=null) //inTwo读取一行 { StringTokenizer tokenizer=new StringTokenizer(s," ,'\n' "); while(tokenizer.hasMoreTokens()) { hanzi.append(tokenizer.nextToken()); } } } catch(Exception e) {} return hanzi; } } StudyFrame.java import java.awt.*; import java.awt.event.*; import java.io.*; import javax.sound.sampled.*; public class StudyFrame extends Frame implements ItemListener,ActionListener,Runnable { ChineseCharacters chinese; Choice choice; Button getCharacters,voiceCharacters; Label showCharacters; StringBuffer trainedChinese=null; Clip clip=null; Thread voiceThread; int k=0; Panel pCenter; CardLayout mycard; TextArea textHelp; MenuBar menubar; Menu menu; MenuItem help; public StudyFrame() { chinese=new ChineseCharacters(); choice=new Choice(); choice.add("training1.txt"); choice.add("training2.txt"); choice.add("training3.txt"); showCharacters=new Label("",Label.CENTER); showCharacters.setFont(new Font("宋体",Font.BOLD,72)); showCharacters.setBackground(Color.green); getCharacters=new Button("下一个汉字"); voiceCharacters=new Button("发音"); voiceThread=new Thread(this); choice.addItemListener(this); voiceCharacters.addActionListener(this); getCharacters.addActionListener(this); Panel pNorth=new Panel(); pNorth.add(new Label("选择一个汉字字符组成的文件")); pNorth.add(choice); add(pNorth,BorderLayout.NORTH); Panel pSouth=new Panel(); pSouth.add(getCharacters); pSouth.add(voiceCharacters); add(pSouth,BorderLayout.SOUTH); pCenter=new Panel(); mycard=new CardLayout(); pCenter.setLayout(mycard); textHelp=new TextArea(); pCenter.add("hanzi",showCharacters); pCenter.add("help",textHelp); add(pCenter,BorderLayout.CENTER); menubar=new MenuBar(); menu=new Menu("帮助"); help=new MenuItem("关于学汉字"); help.addActionListener(this); menu.add(help); menubar.add(menu); setMenuBar(menubar); setSize(350,220); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); validate(); } public void itemStateChanged(ItemEvent e) { String fileName=choice.getSelectedItem(); File file=new File(fileName); trainedChinese=chinese.getChinesecharacters(file); k=0; mycard.show(pCenter,"hanzi") ; } public void actionPerformed(ActionEvent e) { if(e.getSource()==getCharacters) { if(trainedChinese!=null) { char c=trainedChinese.charAt(k); k++; if(k>=trainedChinese.length()) k=0; showCharacters.setText(""+c); } else { showCharacters.setText("请选择一个汉字字符文件"); } } if(e.getSource()==voiceCharacters) { if(!(voiceThread.isAlive())) { voiceThread=new Thread(this); } try{ voiceThread.start(); } catch(Exception exp){} } if(e.getSource
14.0MB
疯狂Ajax讲义.zip.005
2011-05-13由于上传限制只能分成7卷上传,全部下载后解压即可。 内容简介 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市 近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个部分。第一部分介绍了XHTML、CSS、JavaScript和DOM 编程等内容。第二部分详细介绍了Prototype、jQuery、DWR、AjaxTags等四个最常用的Ajax框架的用法,并针对每个框架提供了一个实用案 例。这两个部分是笔者在“疯狂Java实训营”的培训讲义,是《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》的重点 部分。第三部分则提供了2个综合性案例:Blog系统和电子拍卖系统,让读者将前面所学真正应用到实际项目中。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》绝大部分章节后都提供了相应的编程习题,供开发者巩固所学,将理 论融入实际开发之用。关于这些编程习题的解题思路和参考答案可登录www.crazyit.org获取。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编 程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java EE知识,建议先认真阅读疯狂Java体系的《轻量 级Java EE企业应用实战》一书。
14.0MB
疯狂Ajax讲义.zip.002
2011-05-13由于上传限制只能分成7卷上传,全部下载后解压即可。 内容简介 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市 近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个部分。第一部分介绍了XHTML、CSS、JavaScript和DOM 编程等内容。第二部分详细介绍了Prototype、jQuery、DWR、AjaxTags等四个最常用的Ajax框架的用法,并针对每个框架提供了一个实用案 例。这两个部分是笔者在“疯狂Java实训营”的培训讲义,是《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》的重点 部分。第三部分则提供了2个综合性案例:Blog系统和电子拍卖系统,让读者将前面所学真正应用到实际项目中。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》绝大部分章节后都提供了相应的编程习题,供开发者巩固所学,将理 论融入实际开发之用。关于这些编程习题的解题思路和参考答案可登录www.crazyit.org获取。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编 程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java EE知识,建议先认真阅读疯狂Java体系的《轻量 级Java EE企业应用实战》一书。
5.42MB
疯狂Ajax讲义.zip.007
2011-05-13由于上传限制只能分成7卷上传,全部下载后解压即可。 内容简介 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市 近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个部分。第一部分介绍了XHTML、CSS、JavaScript和DOM 编程等内容。第二部分详细介绍了Prototype、jQuery、DWR、AjaxTags等四个最常用的Ajax框架的用法,并针对每个框架提供了一个实用案 例。这两个部分是笔者在“疯狂Java实训营”的培训讲义,是《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》的重点 部分。第三部分则提供了2个综合性案例:Blog系统和电子拍卖系统,让读者将前面所学真正应用到实际项目中。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》绝大部分章节后都提供了相应的编程习题,供开发者巩固所学,将理 论融入实际开发之用。关于这些编程习题的解题思路和参考答案可登录www.crazyit.org获取。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编 程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java EE知识,建议先认真阅读疯狂Java体系的《轻量 级Java EE企业应用实战》一书。
14.0MB
疯狂Ajax讲义.zip.003
2011-05-13由于上传限制只能分成7卷上传,全部下载后解压即可。 内容简介 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市 近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个部分。第一部分介绍了XHTML、CSS、JavaScript和DOM 编程等内容。第二部分详细介绍了Prototype、jQuery、DWR、AjaxTags等四个最常用的Ajax框架的用法,并针对每个框架提供了一个实用案 例。这两个部分是笔者在“疯狂Java实训营”的培训讲义,是《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》的重点 部分。第三部分则提供了2个综合性案例:Blog系统和电子拍卖系统,让读者将前面所学真正应用到实际项目中。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》绝大部分章节后都提供了相应的编程习题,供开发者巩固所学,将理 论融入实际开发之用。关于这些编程习题的解题思路和参考答案可登录www.crazyit.org获取。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编 程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java EE知识,建议先认真阅读疯狂Java体系的《轻量 级Java EE企业应用实战》一书。
14.0MB
疯狂Ajax讲义.zip.004
2011-05-13由于上传限制只能分成7卷上传,全部下载后解压即可。 内容简介 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市 近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个部分。第一部分介绍了XHTML、CSS、JavaScript和DOM 编程等内容。第二部分详细介绍了Prototype、jQuery、DWR、AjaxTags等四个最常用的Ajax框架的用法,并针对每个框架提供了一个实用案 例。这两个部分是笔者在“疯狂Java实训营”的培训讲义,是《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》的重点 部分。第三部分则提供了2个综合性案例:Blog系统和电子拍卖系统,让读者将前面所学真正应用到实际项目中。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》绝大部分章节后都提供了相应的编程习题,供开发者巩固所学,将理 论融入实际开发之用。关于这些编程习题的解题思路和参考答案可登录www.crazyit.org获取。 《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编 程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java EE知识,建议先认真阅读疯狂Java体系的《轻量 级Java EE企业应用实战》一书。
-
下载
7、多跨连续钢筋混凝土帆船屋面施工工法申报书4月5日.doc
7、多跨连续钢筋混凝土帆船屋面施工工法申报书4月5日.doc
-
下载
数字大厦施工组织设计.docx
数字大厦施工组织设计.docx
-
下载
about soa standardservices.pdf
about soa standardservices.pdf
-
下载
I2 Localization v2.8.14 2021.zip
I2 Localization v2.8.14 2021.zip
-
下载
附件3_中建总公司科学技术奖争议表.doc
附件3_中建总公司科学技术奖争议表.doc
-
下载
8、基于BIM技术的弧形梁板结构施工工法.doc
8、基于BIM技术的弧形梁板结构施工工法.doc
-
下载
扬州泰达1-3 高空悬挑结构方案.doc
扬州泰达1-3 高空悬挑结构方案.doc
-
下载
昆明保利天御花园项目应急预案.doc
昆明保利天御花园项目应急预案.doc
-
下载
11、地下车库种植屋面施工工法.doc
11、地下车库种植屋面施工工法.doc
-
下载
悦东嘉园项目QC成果.ppt
悦东嘉园项目QC成果.ppt
