Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。
XX 大 学
毕业设计(论文)
题目: 基于Java技术的网上交易系统的开发
学 院:
专 业:
班 级:
学 号: xxx
学生姓名: xx
指导老师: xx
2009年6月9日
摘 要
随着信息高速公路的建立,Internet的普及,网络技术的迅猛发展,人类社会已经进入了一个信息化社会。
电子商务指利用简单、快捷、低成本的电子通讯方式,买卖双方通过网络进行各种商贸活动的一种商业交易模式。随着互联网的发展,以及人们消费观念和生活方式的改变,这种新型的商业模式逐渐融入了人们的生活中。通过企业的门户网站,人们可以足不出户的寻找自己所需的物品,通过对不同虚拟商城的访问,“顾客”可以找出性价比最高的商品,自己有极大地选择空间;通过下订单,你可以很快得到自己想要的物品,这给顾客节省很多时间和精力;对于厂家来说,可以极大地降低库存风险,可根据客户需要,按需采购和生产,大大地提高了效益。
本毕业设计的内容是设计并且实现一个基于web技术的在线交易系统。系统主要以j2EE作为开发基础,使用了struts+spring+hibernate等多种协议或技术,用eclipse作为开发工具,以Macromedia公司的Dreamweaver作为界面美化工具。基本实现了网上交易系统应有的主要功能模块,包括:管理员的登录,管理和维护;用户注册、登录、注销,个人信息的查询、修改;商品管理,购物车管理,订单管理。该系统界面简单、操作方便,容易维护。
关键词:电子商务 j2EE struts + spring + hibernate
Development of an Online Trading System Based on Java Technology
Abstract
With the establishment of high way of information, the popularization of Internet and the rapid development of network technology, human society has entered a society of information.
E-commerce is a new business transaction, through which both buyers and sellers can use a simple, fast and low-cost means of electronic and communication. With the development of the Internet, and people's consumption idea and the way of life changing, this new business model has gradually integrated into people's lives. Through the portal site of enterprise, people can look up the goods which they required without going out; through the different virtual mall visit, people can find the most cost-effective products, and they have much self-choice; through orders, people can find the things which they need, and quickly get the products which they ordered. This new business modle can save a lot of time and energy for custormers, and greatly reduce inventory risk of manufaturers. The manufactures can procure and produce according to customer needs, this was called on-demand procurement and production, which greatly improved the efficiency.
The subject of this graduation project is designing a web-based online trading system. This system mainly uses j2EE as the basis of development, and also use the struts + spring + hibernate technologies and other orders. This project use eclipse as the development tools, and Macromedia's Dreamweaver as the interfaces landscaping tools. The basic functions of an online trading system have been implemented, which include administrator login, management and maintenance; user registration, login, write-offs personal information enquiries and amendments; commodity management, cart management, order management. Interface of the system is simple, it can be used and maintained easily.
Key words: E-commerce j2EE struts + spring + hibernate
6
目录
摘 要
Abstract
第一章 引言
1.1 课题背景
1.2 课题目的和意义
1.3 本文结构
第二章 系统应用的关键技术
2.1 JSP技术介绍
2.1.1 JSP的概述
2.1.3 JSP的强势与劣势
2.1.4 JSP与ASP的比较
2.2 Java组件JavaBeans
2.2.1 什么是JavaBeans
2.2.2 JSP与JavaBeans的关系
2.3 J2EE概述
2.4关于Struts
2.4.1 Struts简介
2.4.2 Struts的主要功能
2.5 关于Spring
2.5.1 Spring简介
2.5.2 为什么需要Spring
2.5.3 Spring带给我们什么
2.6 关于Hibernate
2.6.1为什么引入hibernate
2.6.2使用Hibernate的好处
2.6.3 Hibernate的工作原理
2.7 Mysql
2.7.1 mysql的特点
2.7.2 mysql的安装和配置(部分截图)
2.8 Tomcat服务器
2.8.1 Tomcat 服务器简介
2.8.2 Tomcat的特点
2.8.3 Tomcat的优势
2.8.4 Tomcat服务器的安装和配置
小结
第三章 系统需求分析和总体设计
3.1 系统功能需求
3.2 系统角色及其功能分析
3.2.1 系统的3个角色:
3.2.2 系统角色的功能
3.3 总体设计思想概述
3.4 数据库设计
3.4.1 E-R图
3.4.2数据表的设计
3.5 系统的类设计
3.5.1 DAO类设计
3.5.2 POJO类设计(部分)
3.5.3 过滤器类设计
3.5.4 监听器类设计
3.6系统的用例图
3.6.1 总体用例分析
3.6.2 用户管理用例分析
3.6.3 购物车管理用例分析
小结
第四章 系统的详细设计
4.1 数据库与POJO映射的实现
4.2 主要模块的设计说明与界面
4.2.1用户管理模块
4.2.2购物车管理模块
4.2.3 定单模块
4.3 系统的测试
小结
第五章总结与展望
5.1工作总结
5.2 后续工作展望
附录
致谢
第一章 引言
1.1 课题背景
随着当今世界进入信息时代,Internet的飞速发展和在全球的普及给人类生活带来革命性的改变。Internet将传统意义上的物理空间转变成电子空间,把人们带入了一个网络社会中。网� 在网络大家族中,电子商务则是一个热点,它的发展速度之快远远超过我们的想象,普及速度之快令人难以置信。我们完全有理由相信,全球性的电子商务热潮必将一浪高于一浪[1]。
电子商务一个最基本体现就是电子购物网站,从一定程度上讲它就是网上超市,也就是一种网上交易。“网”字意味着它具有信息时代的快捷方便等特征。事实上电子商务的出现,给消费者的地位,消费观念带来了重要的变化。网上交易系统正是应这种变化而悄然崛起,并以惊人的速度发展着。通过网上交易系统,人们可以足不出户的寻找自己所需的物品,通过对不同虚拟商城的访问,“顾客”可以找出性价比最高的商品,自己有极大地选择空间,通过下订单,你可以很快得到自己想要的物品,这给顾客节省很多时间和精力,对于厂家来说,可以极大的降低库存风险,根据客户需要,按需生产和采购,大大的提高了效益。
1.2 课题目的和意义
自从电子商务出现在人们的视野中,电子商务就在全世界范围内受到了格外的关注,并得到了迅速的发展。从实用角度看,目前电子商务网站的普遍存在是购买者难以找到所希望购买的商品甚至用户在耗费很大的经历与时间后即使找到了自己想要的产品,最后却由于各种原因而放弃购买。很多报道指出,推销商们普遍对目前的网络行销感到失望,尽管如此,电子商务无疑是目前最好的在线商品展示的媒体和工具。然而,网上产品展示的目的不仅仅是展示产品,而更重要的是通过让客户更多地了解产品而提高产品的购买率。因此,电子商务目前所面临的挑战之一就是网站的设计,如何使得网页能够有效地展示自己的产品,同时方便用户的使用,使用户以愉悦的心情选购称心如意的商品。
本系统的目的和意义就是应上述挑战而尝试为用户提供一个操作简单方便的网上交易系统。利用本系统,用户可以自由地浏览商品,注册成为网站会员,选择商品加入自己的购物车,而后生成订单,实现网上购物。
1.3 本文结构
本文共分五个章节,系统地阐述了系统开发的全过程。
第一章,主要介绍了开发的背景、目的和意义。
第二章,主要介绍了本系统所用到的关键技术和工具,为下一步的设计的设计奠定基础。
第三章,主要对系统进行需求分析并进行总体设计。需求分析阶段通过分析系统的功能模块的划分以及角色的划分,为系统的总体设计提供依据。总体设计阶段通过对数据库、过滤器、监听器、和实体类的设计,以及各个模块用例图的描述,形成了开发的整体思路。
第四章,主要介绍了主要模块的设计与实现,并给出关键源代码和最终的效果图。
第五章,主要是对这次毕业设计的总结和对后续工作的展望。
第二章 系统应用的关键技术
2.1 JSP技术介绍
2.1.1 JSP的概述
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,类似于其他技术标准,如ASP,PHP等,主要用于开发动态网页内容。
JSP是新一代的动态内容编程技术,它继承了Java技术的“一次编写,随处运行”的特性,允许Web开发人员开发和维护与平台无关,信息丰富动态的Web页面,包括HTML,DHTML,XHTML和XML,它能使Web开发人员轻易搭建网络平台,建立起功能强大的Web网站。JSP可以把用户界面从内容层次中分离出来,使得Web开发人员不必修改在底层的动态内容,就可以修改整体的页面布局。
2.1.2 JSP的运行机制
JSP文档被复制到Web服务器的文档目录中。当有人请求这个文档时,服务器识别出这个带有。jsp扩展名的文档,并意识到需要做特殊处理。第一次请求这个文档时,它被编译成一个servlet对象,并存储在内存中,然后输出内容回送给发出请求的客户机。第一请求之后,只要有请求到来,服务器将进行检查,看看这个文件是否做过改动,如果没有变化,服务器调用先前编译过的servlet对象。
JSP请求的步骤[2]如图2-1所示。
(1)客户机请求一个JSP页面。
(2)JSP引擎编译该JSP成一个servlet。
Web
浏览器
JSP页面
生成的servlet
编译的servlet
Web服务器
2.第一次编译
3.第二次编译
1.请求
4.响应
图2-1 一个JSP的请求步骤
(3)生成的servlet被编译并装载。
(4)编译的servlet服务请求并把一响应发送回客户机。
JSP主要是针对Java程序处理不熟悉的人设计的。与Servlet相比,JSP有如下两个优势:方便与HTML混合;在开发、测试方面比Servlet方便。
2.1.3 JSP的强势与劣势
JSP的强势:
(1)可移植性。JSP是用Java开发的,因此它是可移植的,可以一处编写,随处运行,支持多平台。
(2)有效性。JSP的初始化代码仅在Web服务器第一次加载时执行一次。一旦加载,在处理一个新的请求时,只须调用一个新的服务方法。与处理每个请求都要全部加载一个完整的可执行程序相比,这是一个相当有效的技术。
(3)强大的可伸缩性和可扩充性。它能够在面向对象的语言(Java)中进行开发,并可以在现有对象基础上进行扩展,形成新的对象,从而更好地满足用户的需求。
(4)多样化和功能强大的开发工具支持。Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。
(5)Java Servlet是一种开发Web应用的理想框架。JSP以Servlet技术为基础,又在许多方面作了改进。利用跨平台的JavaBeans组件,JSP为分离处理逻辑与显示样式提供了卓越的解决方案。
JSP的劣势:
(1)为了跨平台的功能,为了极度的伸缩能力,极大的增加了产品的复杂性,Java系统中包括JRE,JDK,J2EE,EJB等多种产品,这就需要大量的学习和培训才能掌握它们,将它们有效地搭配在一起,灵活地加以运用。
(2)Java的运行速度快是由于用户将class常驻内存,这样使用的内存空间就比较大。另一方面,它还需要硬盘空间来存储一系列。Java文件和。class文件以及对应的版本文件。
(3)JSP只有对Java相当熟悉的人才能用得很好。
(4)JSP程序调试困难。
2.1.4 JSP与ASP的比较
JSP与ASP(Active Server Page)两者都是常用的动态网页技术,也都是可以嵌入HTML中的程序,但两者是有着本质的不同,主要从以下几个方面对其进行比较:
(1)Web服务器的支持:大多数通用的 Web服务器如:Apache、Netscape和Microsoft IIS都支持JSP页面,只有微软本身的Microsoft IIS和Personal Web Server可以支持ASP。
(2)平台的支持:JSP具有平台独立性,只要是一般的Java程序可以运行的平台,都支持JSP程序。Windows平台可以很好的支持ASP,但ASP对于基于Win32逐渐模型的依赖,使得它难于一直到其它平台上。
(3)组件模型:JSP是建立在可重用的、跨平台的组件(如:JavaBeans、Enterprises JavaBeans和用户定制的标签库等组件)之上的,而ASP使用的是基于Win32的COM组件模型。
(4)脚本语言:JSP可以使用Java编程语言或JavaScript作为脚本语言,而ASP使用VBScript或Jscript作为脚本语言。
(5)安全性:JSP使用Java安全模型,而ASP使用Windows NT的安全结构。
(6)与Access数据库的连接:JSP使用JDBC建立与Access数据库的连接,而ASP对Access数据库使用Data Active Objects。
(7)用户定制的标签:JSP可以使用用户定制标签库进行扩充,而ASP中没有用户定制标签库,ASP是不能扩充的[3]。
2.2 Java组件JavaBeans
2.2.1 什么是JavaBeans
JavaBeans事实上有三层含义。首先,JavaBeans是一种规范,一种在Java(包括JSP)中使用可重复使用的Java组件的技术规范。其次,JavaBeans是一个Java的类,一般来说,这样的Java类将对应于一个独立的。java文件,在绝大多数情况下,这应该是一个public类型的类。最后,当JavaBeans这样的一个Java类在我们的具体的Java程序中被示例之后,我们有时也会将这样的一个JavaBeans的实例称之为JavaBeans[4]。
2.2.2 JSP与JavaBeans的关系
在服务器端,JSP引擎解释JSP标识和小脚本生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBC技术访问数据库),并且将结果以HTML(或XML)页面的形式发送回浏览器。
绝大多数JSP页面依赖于可重用的跨平台的足见(JavaBeans或者Enterprise JavaBeans组件)来执行应用程序所要求的复杂的处理。这样的好处是开发人员能够共享和交换执行普通操作的组件,加速了总体开发过程。因此,基于Web的较为复杂的应用程序(如电子商务网站或网上MIS),JSP的复杂架构必须由JavaBeans达成。
2.3 J2EE概述
J2EE(Java 2 Platform Enterprise Edition)是使用Java技术开发企业级应用的一种事实上的工业标准(Sun公司出于其自身利益的考虑,至今没有将Java及其相关技术纳入标准化组织的体系),它是Java技术不断适应和促进企业级应用过程中的产物。目前,Java平台有三个版本:适用于小型设备和智能卡的J2ME(Java 2 Platform Micro Edition)、适用于桌面系统的J2SE(Java 2 Platform Standard Edition)和适用于企业级应用的J2EE(Java 2 Platform Enterprise Edition)。Sun推出J2EE的目的是为了克服传统Client/Server模式的弊病,迎合Browser/Server架构的潮流,为应用Java技术开发服务器端应用提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。J2EE是一个标准,而不是一个现成的产品。各个平台开发商按照J2EE规范分别开发了不同的J2EE应用服务器,J2EE应用服务器是J2EE企业级应用的部署平台。由于它们都遵循了J2EE规范,因此,使用J2EE技术开发的企业级应用可以部署在各种J2EE应用服务器上。为了推广并规范化使用J2EE架构企业级应用的体系架构,Sun同时给出了一个建议性的J2EE应用设计模型:J2EE Blueprints。J2EE Blueprints提供了实施J2EE企业级应用的体系架构、设计模式和相关的代码,通过应用J2EE Blueprints所描述的体系模型,能够部分简化架构企业级应用这项复杂的工作。J2EE Blueprints是开发人员设计和优化J2EE组件的基本原则,同时为围绕开发工作进行职能分工给出了指导性策略,以帮助应用开发设计人员合理地分配技术资源。
J2EE的优势主要有以下几点:
(1)高效的开发: J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:状态管理服务 -- 让开发人员写更少的代码,不用关心如何管理状态,这样能够更快地完成程序开发。
(2)持续性服务 : 让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。分布式共享数据对象CACHE服务,让开发人员编制高性能的系统,极大提高整体部署的伸缩性。
(3)支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。J2EE标准也允许客户订购与J2EE兼容的第三方的现成的组件,把他们部署到异构环境中,节省了由自己制订整个方案所需的费用。
(4)可伸缩性:企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于J2EE平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统,这种系统单机可支持64至256个处理器。(这是NT服务器所望尘莫及的)J2EE领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈,允许多台服务器集成部署。这种部署可达数千个处理器,实现可高度伸缩的系统,满足未来商业应用的需要。
(5)稳定的可用性: 一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。这是实时性很强商业系统理想的选择[5]。
2.4关于Struts
2.4.1 Struts简介
Struts已逐步越来越多运用于商业软件,是一种非常优秀的J2EE MVC实现方式。Struts用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。
2.4.2 Struts的主要功能
(1) 包含一个controller servlet,能将用户的请求发送到相应的Action对象。
(2)JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。
(3)提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。Struts项目的目标是为创建Java web应用提供一个开放源代framework。Struts framework的内核是基于例如Java Servlets,
JavaBeans, ResourceBundles, 和 XML,以及各种 Jakarta Commons包的标准技术的灵活的控制层。Struts提供了它自身的控制器组件,并整合了其他技术,以提供模型和视图。Struts已逐步越来越多运用于商业软件,是一种非常优秀的J2EE MVC实现方式[6]。
2.4.3 Struts工作原理
MVC(Model-View-Controller),是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化,MVC可以让整个逻辑很清晰,这种思想和思维和人的思维很接近,很容易被理解。
MVC的工作原理如图2-2所示:
图2-2 MVC工作原理
Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,如图2-3所示:
图2-3 struts工作原理
(1)Controller:在XML文件Struts-config.xml中,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。
(2)视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库:Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
(3)模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等[7]。
2.5 关于Spring
2.5.1 Spring简介
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益[8]。
◆目的:解决企业应用开发的复杂性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
◆范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
◆框架——Spring可以将简单的组件配置、� 在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
2.5.2 为什么需要Spring
你可能正在想“Spring不过是另外一个的framework”。当已经有许多开放源代码(和专有) J2EE framework时,我们为什么还需要Spring Framework?
Spring是独特的,因为若干个原因:
◆它定位的领域是许多其他流行的framework没有的。Spring关注提供一种方法管理你的业务对象。
◆ Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。因此从你的学习中,你可得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。
◆它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。
Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。
2.5.3 Spring带给我们什么
◆方便解耦,简化开发
通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
◆AOP编程的支持
通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
◆声明式事务的支持
在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
◆方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。
◆方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。
◆降低Java EE API的使用难度
Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
◆Java 源码是经典学习范例
Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果[9]。
2.6 关于Hibernate
2.6.1为什么引入hibernate
在B/S项目的开发中,和数据库的交互式不可避免的,J2EE的规范中提供了JDBC的接口来操作数据库,对于JDBC,开发人员可以获取数据库连接,然后向数据库发送SQL语句,并返回数据库操作的结果集,然后封装成对象返回给上层的应用程序。这就造成开发人员不但要求能够编写程序,熟悉业务逻辑,还要求开发人员同时能够担任DBA,对开发人员的要求很高;同时,当引入新的项目时,很多地方必须废弃,因为我们的代码中不光是业务逻辑,其中也嵌入了许多和底层有关的一些SQL代码;
另外这些嵌入在代码中的SQL语句也影响了我们程序的可测试性,我们在对代码进行调试的时候,既要测试代码,同时我们还要测试SQL语句。为了解决这些问题,引入了hibernate[10]。
2.6.2使用Hibernate的好处
(1)Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP(Bean-Managed Persistence)里面的访问数据库的代码。
(2)Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和Application Server
没有任何关系,也不存在兼容性问题。
(3)Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC
的替代者出现的,而不是Entity Bean的替代者出现的。
(4)由于是对JDBC的轻易级封闭,内存消耗少,最快的运行效率。
(5)开发效率高,Eclipse、JBuilder等主流JAVA集成开发环境对Hibernate有很好的支持,在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人。
(6)分布式,安全检查,集群,负载均衡的支持。
2.6.3 Hibernate的工作原理
Hibernate的工作就是为Object和Ralational之间提供一个映射,其工作流程如下面的图2-4所示。
图2-4 hibernate工作流程
(1) 启动Hibernate,如果在系统中添加Hibernate的支持,此处加载由系统自动完成。
(2) 读取hibernate.cfg.xml或者hibernate.properties文件的配置信息,并将其加载为实例。
(3) 构建SessionFactory实例(包含二级缓存)。
(4) 从SessionFactory中取得Session对象,从而可以调用其方法,对数据库进行操作,实现ORM的功能。
Hibernate可以通过一个XML的mapping文件把一个POJO(Plain old java object)和数据库中的表对应起来,在这个XML文件(一般命名为*.hbm.xml)中,我们可以配置好Object和数据库中标的映射关系,然后把这个mapping加入到hibernate.cfg.xml中,这样Hibernate在启动时就可以加载这些mapping,并可以根据配置文件对对象实现自动的加载,并且可以对这些Object实习自动的维护。Hibernate还提供查询语句(HQL)供应用程序使用,Hibernate对数据访问实现封装,还可以对查询语句的发送实现管理,达到优化的目的,能够有效减少数据库的访问频率。
2.7 Mysql
数据库(Database)是一系列信息资源的集合。在一个数据库中,与一个项目有关的所有信息都可以叫做一条记录(Record)。每一条记录都是由一系列的字段(Field)组成的。一系列记录的集合就构成了数据表格(Table)。对于一个简单的“平面文件”的数据库来说,它仅包含了一个数据表格,而对一个“关系型”数据库来说,它却包含两个或两个以上的数据表格,表格的各字段之间存在这一种或多种关系(有时可以把这种关系叫做“链接”)。
2.7.1 mysql的特点
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。
由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs),支持多种字段类型并且提供了完整的操作符支持查询中的SELECT和WHERE操作。
目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库[11]。
2.7.2 mysql的安装和配置(部分截图)[12]
图2-5 mysql安装图(开始)
安装时一般采用默认路径:
图2-6 mysql安装图(路径)
图2-7 mysql安装图(数据库类型)
为了支持中文,在下面的列表框中学者gb2312(切记)
图2-8 mysql安装图(语言)
图2-9 mysql安装图(等待成功)
2.8 Tomcat服务器
2.8.1 Tomcat 服务器简介
Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。 Tomcat中采用了Servlet容器:Catalina,完整的实现了Servlet2.3和Jsp1.2规范。Tomcat提供了各种平台的版本供下载,可以从其官方网站上下载其源代码版或者二进制版。由于Java的跨平台特性,基于Java的Tomcat也具有跨平台性[13]。
2.8.2 Tomcat的特点
在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。另外Tomcat也提供了一个应用:manager,访问这个应用需要用户名和密码,用户名和密码存储在一个xml文件中。通过这个应用,辅助于Ftp,你可以在远程通过Web部署和撤销应用。当然本地也可以。
2.8.3 Tomcat的优势
Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache.我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet.这种集成只需要修改一下Apache和Tomcat的配置文件即可。
2.8.4 Tomcat服务器的安装和配置
在开始安装之前,先准备J2SDK和TOMCAT两个软件,如果已经安装了J2SDK,就只需TOMCAT即可。
(1)需设置的环境变量
变量名:CATALINA_HOME
变量值:D:/Program Files/tomcat6.0
变量名:CLASSPATH
变量值:.;%JAVA_HOME%/lib;%CATALINA_HOME%/common/lib
(2)安装完成后,打开tomcat服务器,启动浏览器,在地址栏上输入:http://localhost:8080/ 若出现以下界面说明安装成功[14]。
图2-10 tomcat启动页面
小结
本章全面介绍本系统所用到的关键技术和工具,其中jsp作为javaweb开发的基础,对它的运行机制要理解,同时还要明白它的优劣势;j2ee作为开发的标准也作了简单介绍。而SSH(struts+spring+hibernate)作为本系统的核心与亮点技术,更是作了详细介绍,要掌握他们的工作原理,主要功能。最后介绍了本系统使用的数据库mysql以及tomcat服务器的安装与配置。只有掌握了这些技术基础,才能使本系统的开发正常进行。
第三章 系统需求分析和总体设计
3.1 系统功能需求
图3-1 系统功能模块
如图3-1所示,在本系统中主要阐述用户管理、购物车管理、订单管理、产品展示四个模块。
(1)购物车管理:实现添加商品、取消一个商品、数量修改、清空购物车功能。
(2)订单管理:实现提交订单、删除订单、查询订单功能。
(3)产品展示:实现产品列表、产品明细功能。
(4)用户管理:实现用户注册、用户信息修改、用户删除、用户查询功能。
3.2 系统角色及其功能分析
3.2.1 系统的3个角色:
(1)注册用户
(2)管理员
(3)普通的网站浏览者(即游客)
3.2.2 系统角色的功能
(1)普通用户
网站的普通浏览者(即游客)只能浏览商品。
(2)注册用户
普通浏览者只要注册为网站用户后,获得自己的帐号,设置自己的密码就具有以下功能:登录,登出,向购物车中添加商品,生成并提交订单。添加或修改个人明细资料。
(3)管理员
拥有注册用户的所有功能
还可以对用户进行管理,包括添加新用户、修改用户密码、删除用户。
3.3 总体设计思想概述
本系统是基于B/S架构下的多层结构应用系统。B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)[15]。
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。推荐的分层式结构一般分为三层,从下至上分别为:数据访问(持久)层、业务逻辑层(或称为领域层)、表示层[16],如图3-2:
图3-2 系统架构
总的来说,采用分层结构的设计思想,可以让每个层由一组相关的类或组件构成,共同完成特定的功能。层与层之间存在自上而下的依赖关系,上层组件会依赖下层组件的API,而下层组件则不依赖于上层组件。例如:表述层依赖于业务逻辑层,而业务逻辑层依赖于数据库层。并且每个层对对上层公开API,但具体的实现细节对外透明。当某一层发生变化,只要API不变,不会影响其他层的实现。
在本系统中,使用开源的mysql数据库,持久层用到spring所集成的Hibernate技术,业务逻辑层用普通javabean实现,表述层运用基于struts的MVC设计模式(struts用来做C层,spring实现V层与C层的解耦以及C层与M层的解耦)。
3.4 数据库设计
图3-3 E-R图
3.4.2数据表的设计
下面列出了设计过程中所用到的数据库表及其结构:
orders表用来保存客户的订单信息,如表3-1:
1. orders
列名类型长度描述
orderidint11订单ID
totalpriceNUMBER16总价钱
orderstateNUMBER1订单状态
payinfoDATE 付款方式
CreatetimeDATE 创建日期
useridVARCHAR220用户ID
User_item_idNUMBER8用户明细ID
表3-1 orders
2. orderline表用来保存客户订单中的订单项信息,如表3-2:
3. orderline
列名类型长度描述
order_item_idNUMBER16订单条目ID
ProductidNUMBER16商品对象ID
OrderidVARCHAR220订单对象ID
qualityNUMBER8数量
numNUMBER8商品数量
表3-2 orderline
3.orderstatus表用来保存定单状态,如表3-3:
orderstatus
列名类型长度描述
statusidint11状态ID
namevarchar30状态名
descriptionvarchar100描述
表3-3 orderstatus
4.users表用来保存用户个人信息,如表3-4:
users
列名类型长度描述
user_idint11用户ID
passwordvarchar15用户密码
表3-4 users
5.contactinfo表用来保存用户个人明细,如表3-5:
contactinfo
列名类型长度描述
contact_idint11
User_idvarchar30用户id
Street1varchar64住址1
Street2varchar64住址2
cityvarchar32城市
provincevarchar32省份
Countryvarchar32国家
zipvarchar20邮编
officephonevarchar50办公室电话
cellphonevarchar20手机
emailvarchar20电邮
homephonevarchar12家庭电话
表3-5 contactinfo
6.product表用来保存商品,如表3-6:
product
列名类型长度描述
productidint11产品
modlevarchar30产品型号
namevarchar15品牌名
companyvarchar20出品公司
weightdouble50产品重量
pricedouble20价格
statevarchar20产品状态
createtimedate 出厂日期
CategoryidInt10产品类型
descriptionvarchar1000产品描述
表3-6 product
7.category表用来保存商品类型,如表3-7:
category
列名类型长度描述
categoryidint11类型ID
namevarchar30类型名
descriptionvarchar100描述
表3-7 category
8. payway表用来保存权限信息,如表3-8:
payway
列名类型长度描述
paywayidint11ID
payStylevarchar30名
表3-8 payway
3.5 系统的类设计
3.5.1 DAO类设计
图3-4 dao类设计
如图3-4,通过这个工厂获取对应的 DAO,然后使用DAO 进行数据库操作。
3.5.2 POJO类设计(部分)
图3-5 POJO类设计
这些实体类将通过hibernate映射到数据库中
3.5.3 过滤器类设计
图3-6 过滤器类设计1
如图3-6,这是编码过滤器类,通过他可保证页面不出现乱码问题。
图3-7 过滤器类设计2
如图3-7,这是登陆安全过滤器类,通过它来达到控制访问权限的功能。
3.5.4 监听器类设计
如图3-8,“CartSessionListener”启动时把购物车信息初始化到内存中,提高系统性能。“ProductContextListener”启动时把商品信息初始化到内存中,提高系统性能。
图3-8 监听器类设计
3.6系统的用例图
3.6.1 总体用例分析
图3-9 总体用例图
如图3-9,用户管理、购物车管理、订单管理、产品展示四个模块构成了本网上交易系统。User是指系统用户,包括注册用户和匿名用户两种,匿名用户只可以浏览商品,匿名用户通过用户管理模块注册后就可以使用购物车和下订单。
3.6.2 用户管理用例分析
图3-10 用户管理用例图
如图3-10,用户管理模块主要包括:用户登陆、用户注册、用户信息修改、用户删除、用户信息查询五个功能组成。
3.6.3 购物车管理用例分析
图3-11 购物车管理用例图
如图3-11,购物车管理模块主要包括:添加商品、取消一个商品、数量修改、清空购物车四个功能组成。
3.6.4 订单管理用例分析
图3-12 订单管理用例图
如图3-12,订单管理模块主要包括:订单提交、删除订单、订单明细三个功能组成。
3.6.5 产品展示用例分析
图3-13 产品展示用例图
如图3-13,商品展示模块主要包括:产品列表、产品明细两个功能组成。
小结
本章首先分析系统的功能需求,通过对系统功能模块的划分以及角色的划分,明确了系统需求,为总体设计提供依据。接下来阐述了系统的总体设计思想,说明了本系统是基于B/S架构下的多层结构应用系统。最后通过对数据库、过滤器、监听器、和实体类的设计分析,以及各个模块用例图的描述,形成了开发的整体思路,为下一步编程实现各个具体功能铺平了道路。
第四章 系统的详细设计
4.1 数据库与POJO映射的实现
前面第二章曾介绍过:Hibernate可以通过一个XML的mapping文件把一个POJO(Plain old java object)和数据库中的表对应起来,在这个XML文件(一般命名为*.hbm.xml)中,我们可以配置好Object和数据库中表的映射关系,然后把这个mapping加入到hibernate.cfg.xml中,这样Hibernate在启动时就可以加载这些mapping,并可以根据配置文件对对象实现自动的加载,并且可以对这些Object实习自动的维护。
由于Spring提供了对Hibernate的集成,所以我们可以不配置hibernate.cfg.xml文件,而通过在applicationContext.xml文件中进行相关配置来达到同样的目的。图例说明如下:
图4-1 user.hbm.xml
如图4-1,user.hbm.xml文件配置了user类的相关信息。
图4-2 session工厂配置
图4-2是applicationContext.xml文件中Session工厂的配置信息,可以看到,图中的mappingResources属性中囊括了所有我们需要的mapping文件。
4.2 主要模块的设计说明与界面
4.2.1用户管理模块
用户管理模块主要包括用户注册,登录,退出3个部分。
(1)用户注册
当用户第一次登录时首先要注册,成为会员后,才可以购买物品。用户可以通过单击首页的注册按键来打开注册页面进行会员注册操作,用户注册页面的运行结果如图4-3所示。
图4-3用户登录/注册界面
如果用户的注册信息不符合要求,系统会提示用户,部分结果如图4-4:
图4-4登录信息提示界面
校验用户注册信息是是否正确的javaScript部分代码如下[17]:
当用户确认所提按信息无误后,单击“注册“按钮,系统会执行以下流程:
request 请求将页面上的信息传递到控制层的struts中的Action类中,执行以下代码
/*
* 注册一个新用户
*/
public ActionForward register(ActionMapping mapping,
ActionForm form,HttpServletRequest req, HttpServletResponse res) throws Exception {
ActionForward forward = null;
RegisterActionForm registerForm = (RegisterActionForm) form;
User user = ();
ContactInfo contactInfo = ();
if ()) != null) {
user.setContactinfo(contactInfo);
req.setAttribute("user", user);
forward = mapping.findForward("refresh");
} else {
try {
log.debug("begin save user info . . .");
userBiz.userRegister(user, contactInfo);
req.setAttribute("TIP_KEY", "恭喜您!注册成功!");
forward = mapping.findForward("success");
} catch (ECPortException be) {
forward = mapping.findForward("fail");
be.printStackTrace();
("save user info error. . .", be);
}
}
return forward;
}
在UserService中调用dao中的addUser方法,代码如下:
public void addUser(User user) throws StoreException {
.....
try {
session = ();
tx = session.beginTransaction();
session.save(user);
();
} .....
}
在注册成功后,会跳转到这样的页面,如图4-4:
图4-4注册成功界面
(2)用户登录
网站首页在用户第一次访问时会判断用户是否登录,未登录则显示用户登录窗口,提示用户登录或注册。对于已经登录的用户,在用户登录窗口将显示用户的相关信息。
首页主要是根据保存用户名信息的Session参数来判断用户是否已经登录的,关键代码如下:
在会员登录窗口中单击登录按纽后,系统将对用户名和密码进行验证,判断用户是否是已注册用户,如果已注册,则更新用户在网站中的状态,如果没有注册,则拒绝用户的登录操作,登录数据验证的程序代码如下:
/*
* 用户登录方法
*/
public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String username = ("userid");
String password = ("password");
if (userService.isLoginCorrect(username, password)) {
User user = (username);
/*
* 只有在用户登录的时候才创建一个session,并且把用户的信息存放到session中;
* 同时sessionListener也会把car同时也放到session中,这样能保证为每一个来
* 网站需要购物的用户分配一个session,一个购物车,并且也可以利用session来 跟踪用户。
*/
HttpSession session = ((HttpServletRequest) request).getSession(true);
session.setAttribute("user", user);
return mapping.findForward("loginsuccess");
} else {
String message = "用户名或者密码错误!";
request.setAttribute("message", message);
return mapping.findForward("loginfailed");
}
}
public User getUserByName(String name) throws StoreException {
Session session = null;
try {
session = ();
User user = (User) (
"from User u where u.username = '" + name + "'")
.uniqueResult();
return user;
} ....
}
(3)用户退出
当用户决定退出网站时,只要点击当前页面上的“退出”按钮,就会回到首页。
实现代码如下:
/*
* 用户退出系统并做一些清理工作;
*/
public ActionForward logout(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
HttpSession session = ();
("user");
("cart");
return mapping.findForward("logout");
}
(4)管理员登录
系统设置了一个默认的管理员admin,只要通过此用户名登录就可进入管理员界面,如图4-5和图4-6所示:
图4-5 管理员登录
图4-6 管理员界面
主要代码如下:
public ActionForward toModify(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {
HttpSession cur_session = (false);
User user = (User) cur_("USER");
String userid = ();
String reqUserid = ("userid");
if (reqUserid == null) {
List userList = userBiz.findAllUsers();
cur_session.setAttribute("userList", userList);
if (userid.equals("admin")) {
return mapping.findForward("adminInfo");
} else {
User p_user = (userid);
req.setAttribute("user", p_user);
}
}
if (reqUserid != null) {
User p_user = (reqUserid);
req.setAttribute("user", p_user);
}
return mapping.findForward("modify");
}
4.2.2购物车管理模块
购物车管理模块主要功能有如下几个部分:
(1)创建购物车
当客户登录后,系统会给客户创建一个购物车放入服务器的Session会话中。使客户在整个会话中都拥有一个相同的购物车。这里主要运用了Http协议中的会话机制,将购物车保存在客户的会话中,这样在整个客户游览不同页面商品的过程中,都会使用同一个购物车对象。
具体执行步骤:
(1)从客户的请求对象中获取Session会话对象
(2)从会话对象中获取购物车对象
(3)判断是购物车对象是不是空的,如果是空是就创建一个
/*
* 在监听到session被创建之后,就立即向session中添加一个购物车Car;
*/
public void sessionCreated(HttpSessionEvent arg0) {
HttpSession session = ();
Cart cart=new Cart();
session.setAttribute("cart", cart);
}
/*
* 从session中获得购物车
*/
Cart cart = (Cart) ("cart");
if (cart == null) {
cart = new Cart();
}
(2)向购物车中添加一个商品项
客户在查看网页上的一个商品时,当向服务器发送一个“添加到购物车”的请求时,会执行这个功能。
功能执行过程:
(1)从客户请求对象中获取商品的ID
(2)调用业务层的方法根据商品ID去数据查询商品的信息,返回商品对象
(3)从商品对象中获取商品名,商品价格,来构建一个商品项对象
(4)从Session会话中获取购物车对象
(5)调用业务层的方法来根据购物车对象和商品项对象来执行添加操作
(6)将些商品项对象放入到购物车中
部分实现代码:
/*
* 从数据库中把商品取到;
*/
ProductService productService = (ProductService) ().getService(Globals.PRODUCT_SERVICE);
Integer id = Integer.parseInt("productid"));
Product product = (id);
/*
* 在向购物车中添加商品的时候会判断商品是否已经存在,
* 已存在的就不让在加入了;
*/
if (cart.isExist(id)) {
message = "该商品已经存在!请返回!";
request.setAttribute("message", message);
return mapping.findForward("error");
} else {
/*
* 向购物车添加一个商品;
*/
cart.addCart(product);
session.setAttribute("cart", cart);
return mapping.findForward("addcartsuccess");
}
(3) 修改购物车中一个商品项
在客户查看购物车时,想修改自己的购买商品时,会执行这个功能。由于商品的名称和价格都是系统管理人员设置的,所以客户都不可以修改,客户只能修改他/她所购买商品的数量。修改所选购的商品数量时,相应的商品项的小计和购物车的总计都会保持实时的更新,如图4-7。
图4-7 修改商品数量
功能的执行步骤:
(1)将ActionForm转换为ItemForm对象
(2)从ItemForm对象中获取商品ID
(3)从Session会话中获取购物车对象
(4)根据商品ID去调用业务层的方法去修改商品项
(5)修改小计
(6)将些商品项对象放入到购物车中
部分实现代码:
public ActionForward modifyNumber(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {
String tempid = ("productId");
Long productId = Long.parseLong(tempid);
String tempNum = ("num" + productId);// num是一与JSP页面一致的字符串
int num = new Integer(tempNum).intValue();
HttpSession session = (false);
IShoppingCart cart = (IShoppingCart) session
.getAttribute("SHOPPING_CART");
(productId, num);
return mapping.findForward("success");
}
(4)查看购物车
客户选取了所有的商品后,来向服务器发送“购物车”请求时,会执行此功能,系统根据会话中的购物车中的商品项,来获取客户所选选商品的一个集合,在JSP页面上对这个集合中的商品项进行显示,如图4-8。
图4-8 我的购物车
功能的执行步骤:
(1)从客户的请求对象中获取购物车对象
(2)从购物车对象中获取所有的商品项
(3)将所有的商品项对象加载到请求对象中发送给客户端
部分实现代码:
var="orderLine" items="${sessionScope.SHOPPING_}" varStatus="status">
(5)删除购物车中的一个商品项
客户在查看购物车时,当向服务器发送一个“删除商品项”的请求时,会执行这个功能。删除商品项时,系统会自动更新购物车的总计值,如图4-9:
图4-9 删除商品
功能执行过程:
1从客户请求对象中获取商品的ID
2调用业务层的方法根据商品ID去数据查询商品的信息,返回商品对象
3从Session会话中获取购物车对象
4调用业务层的方法根据商品ID去删除购物车对象中的商品项
5将购物车重新加入到Session会话中,来更新Session会话中的购物车对象
部分代码实现:
//删除购物车中一个商品项
public ActionForward deleteById(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {
String tempid = ("productId");
Long productId = Long.parseLong(tempid);
HttpSession session = (false);
ShoppingCart cart = (ShoppingCart) session
.getAttribute("SHOPPING_CART");
(productId);
if (cart.isEmpty()) {
return mapping.findForward("index");
}
return mapping.findForward("success");
}
(6)清空购物车
客户在查看购物时不要想要所有所选的商品时,向服务器发送“清空购物车”请求时会执行此功能。如图4-10:
图4-10 清空购物车
执行此功能的步骤:
(1)从请求对象中获取Session会话
(2)从Session会话中获取购物车对象
(3)将购物车对象传给业务层的方法去清空购物车中的所有商品项
部分实现代码:
/*
* 也就是从session中把购物车清除掉;
*/
public ActionForward clearShopCart(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {
HttpSession session = (false);
IShoppingCart cart = (IShoppingCart) session
.getAttribute("SHOPPING_CART");
();
return mapping.findForward("index");
}
4.2.3 定单模块
生成订单是网上购物商城的最终目的,前面的所有的功能的实现都是为最后生成一个用户满意的订单做基础,在此要生成一个可以供用户随时查询订单号,还要保存用户订单中所购买的商品信息。当用户确认对购物车不再改变后,就可以到收银台结帐并生成订单。结帐的流程是:从购物车中读取商品名称,商品数量,商品价格信息,生成唯一的一个订单号,同时也把用户注册的基本信息读取出来,形成一个完整的订单写入数据库中。
1、创建一个订单
客户选好了所有的商品时,并确认要买时,会向服务器发送一个“生成定单”的请求,运行结果如图4-11:
图4-11 生成订单
此时用户可以添加收货人的地址,点击图中的用户信息“修改”,会弹出一个页面,在此修改收货人地址等信息,如图4-12:
图4-12 修改收货地址
/*
* 将修改后的地址保存到数据库中,其中保存了用户的信息:id
*/
public void addUserItem(UserItem useritem) throws StoreException {
..
try {
session = ();
tx = session.beginTransaction();
session.save(useritem);
();
} ..
}
用户确认无误后点击图4-11的“提交订单“,会出现下图:
图4-13 订单列表
部分实现代码:
/*
* 确定定单
*/
public ActionForward checkOut(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {
ActionForward forward = null;
GregorianCalendar gc = new GregorianCalendar();
Long paywayid = Long.parseLong("payway"));
PayWay pw = new PayWay(paywayid);
List orderStatus = (List) ().getServletContext()
.getAttribute("all_orderStatus");
OrderStatus os = (OrderStatus) (1);
HttpSession session = (false);
User user = (User) ("USER");
ShoppingCart cart = (ShoppingCart) session
.getAttribute("SHOPPING_CART");
// Map orderLineMap = ();
Orders order = ();
order.setUsers(user);
order.setCost());
order.setName() + "-" + (gc.YEAR) + ""
+ + "" + (gc.DAY_OF_MONTH));
order.setPayway(pw);
order.setOrderstatus(os);
try {
log.debug("=== begin to generator order =====");
orderBiz.checkOut(order);
log.debug("==== generator order success . . .");
forward = mapping.findForward("success");
} catch (ECPortException be) {
forward = mapping.findForward("fail");
("==== save user order fail...", be);
be.printStackTrace();
}
(); // 定单产生后应清楚当明购物车中的商品
return forward;
}
/*
* 向数据库中保存一个指定的order对象;
*/
public void save(Orders transientInstance) {
log.debug("saving Orders instance");
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
("save failed", re);
throw re;
}
}
2.查看定单
客户确认了所有的订单选项后,可以向服务器 发送“查看定单明细”的请求:当用户点击了图4-13上的“明细”按钮是,页面运行结果如下:
图4-14 订单明细
部分代码实现:
/*
* 根据指定的order对象来获得属于该order的所有orderline项;
*/
public ActionForward orderDetail(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {
ActionForward forward = null;
String tempid = ("orderid");
Long orderid = Long.parseLong(tempid);
Orders order = null;
try {
order = (orderid);
log.debug("=== get order successful.===");
req.setAttribute("ORDER", order);
forward = mapping.findForward("showinfo");
} catch (ECPortException be) {
("==== get failed .====");
forward = mapping.findForward("fail");
}
return forward;
}
4.3 系统的测试
测试是软件开发必不可少的环节,每个开发者都应该养成良好的测试习惯,一个系统的完善就是通过不断地测试与维护来完成的。
测试的意义有以下几点[18]:
(1)测试并不仅仅是为了找出错误。通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;
(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;
(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。
测试一般有两种方法:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;如果知道产品内部工作过程,可以通过测试来检验产品的内部动作是否按照说明书的规定正常运行。前一个方法称为黑盒测试,后一
对于本系统,我采取第一个方法,即黑盒测试。做完一个模块,就进行测试,看所做的模块能不能实现所需要的功能。经过了先期的模块测试和后期的综合测试,本系统实现了规格说明书的所有功能,达到了预期的要求。
小结
本章详细介绍了系统主要功能模块的具体实现,包括用户管理模块、购物车模块和定单模块,分析他们的设计思路,执行步骤,并给出了每个功能的主要实现代码,还有为每个功能的最终执行结果配上截图,让我们看到更直观的效果。最后对完成的系统进行了测试,介绍了两种主流的测试方法,给出了测试结果,达到了预期的要求。
第五章 总结与展望
5.1工作总结
开发Web站点,是一项复杂、繁重的工作,需要多方面的知识。
此次通过设计网上交易系统,使我接触到许多基于java语言的WEB网络开发方面的知识,包括HTML语言,CSS级联样式表,客户端开发语言JavaScript,MVC分层体系结构,支持MVC架构的struts框架,开源服务器Tomcat,mysql数据库,服务器端开发语言JSP等,这些语言(或技术)扩展了我的知识面,也使我在制作的过程中对它们的特点,应用方向等有了基本的了解,并在实际的应用中大致明白如何将它们融合运用,以开发出界面美观,功能强大的Web站点来。
通过本次亲自动手设计系统,我更加深刻的了解系统开发的全过程,从中我熟练掌握了B/S结构Web应用软件设计的思想及其开发的全过程。首先要进行系统的需求分析,分析系统要达到什么功能,系统要划分为几个模块来设计,系统的具体功能应当如何去实现;分析完之后,考虑其涉及到的计算机专业知识,把问题细化,把大的问题划分为小的问题,然后逐个进行解决。毕业设计开始阶段,由于我们没有软件架构的设计经验,所以在项目的业务流程和软件的开发规范上犯了很的错误,所以在后期的组装过程变的非常的困难。
设计收获:
1.掌握了网站开发的基本流程,设计整个网站的功能模块图;
2.掌握了如何搭建和配置一个Tomcat服务器;
3.掌握了使用JSP编程,实现对信息的显示、修改、删除和添加等;
遇到的问题:
1.JSP中文乱码问题的解决
对于JSP中文乱码问题的处理,常用的方法有两种:一种方法是在JSP页面上设置页面的“contentType”属性。这种方法就是在页面开始时,设置页面的“contentType”属性,例如:
另一种方法是输出中文信息时使用“ISO 8859-1”编码。这种方法是在输出中文信息之前,对中文信息进行一次“ISO 8859-1”编码。
2.Java.lang.NullPointerException异常
一般是对一个为NULL值的变量进行操作引起的。为了避免这种异常,最好在对变量操作之前检查看它是否为NULL值。
3.SQL语句换行书写时未加适当的空格而导致的错误。我们先看一段代码,
String test=aaa;
String sql=〞select * from test〞+
〞where test1=’〞+a+〞’〞+
〞and test2=bbb〞;
上面所示的代码在执行时将转换成这样的SQL语句:
Select *from testwhere test1=’aaa’ and test2=bbb
从输出的SQL语句可以看出test和where之间,以及’aaa’和and之间都缺空格,这样是不能从数据库中取出数据的。正确的写法如下:
String test=aaa;
String sql=〞select * from test〞+
〞 where test1=’〞+a+〞’〞+
〞 and test2=bbb〞;
5.2 后续工作展望
由于个人能力有限以及实践经验欠缺,系统基本满足在线电子产品交易的功能需求,本系统不可避免有不足之处,如一些系统功能过于简单,所以系统的功能还算不上很完善。希望老师和同学能给予建议和指导。
参考文献
[1] 景玉建。电子商务的发展与前景[J].《职业时空》,2005年第13期,P10-11
[2] 张孝祥。深入Java Web开发内幕——核心基础[M].北京:电子工业出版社。北京。2006.10
致谢
本次毕业设计的最终完成离不开很多人的大力协助。衷心的感谢上海达内科技有限公司在我实习期间交给我这个项目任务,使我有了设计课题,还感谢在实习期间给我帮助的项目经理以及公司同事。真诚的感谢本次毕业设计的指导老师-宋玲教授,给了我自由选题的机会,在我的论文审稿阶段指出了很多方面的不足,并一一给出修改意见,对我进行悉心指导,对我的毕业论文最终完成给予了极大的支持和帮助。
特别感谢曹杰师兄,在毕业设计中遇到难点的时候,热情和耐心地给予指导,对我毕业设计工作的顺利完成有着重要的意义。
最后,再一次感谢所有帮助过我的人们!
摘要
本文围绕Java编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对计算器程序进行需求分析、概要设计、详细设计,最后使用Java编程实现的全过程。
java语言,是目前比较流行的编程语言。经过10多年的发展,java已经渗透到全球每个角落。在当今这个网络的时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。Java语言最令人瞩目的特点是具有跨平台性,使其不受平台不同的影响,并得到了广泛的应用。
设计内容:设计GUI界面的计算器。用户可以通过鼠标依次输入参加计算的数值,进行加、减、乘、除等混合运算。
设计要求:
1.系统界面的上面是数字输入对话框,用来显示所输入的数字和运行的结果。
2.系统界面下面的左侧是记忆 + - * /。
3. 系统界面下面的中部是数字输入按钮,用来输入数字。
4.系统界面下面的右侧是运算符号按钮,用来实现具体的运算。
关键字:java面向对象 计算器 网络编程
第一章 概述
1.1 设计目的
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的功能。本论文采用java编程语言实现计算器功能。该计算器大大的降低了数字计算的难度并且提高了计算的准确度和精确度。使用简单,适合广大工作人员和中小学生使用。
1.2 计算器系统概述
标准计算器的界面采用“图形界面程序设计(GUI)”。GUI为用户和应用程序之间的交互提供了直观、方便的交流方式。用户使用鼠标、键盘操作图形界面上的按钮、菜单等元素湘计算机系统发送命令,系统运行的结果以图形的方式显示给用户。
编写java计算器主要使用了Swing组件和AWT布局类。Swing组件主要包括按钮、标签、文本输入类、等组件,AWT主要运用了其中的布局管理器。
1.2.1 Swing组件
Swing组件的按钮用JButton类表示,计算器的界面主要由JButton按钮组成,以响应用户的操作;
Swing中的标签用JLabel类表示,标签上可以显示图标和文本;
Swing的文本输入类包括文本框JTextField、文本区JTextArea和密码框JPasswordField。
本计算器中仅仅使用了文本框JTextField,用于文本数字的显示。
1.2.2 AWT组件
布局管理器管理组件如何放置在容器中,AWT中最常用的四种布局类:FlowLayout、BorderLayout、GridLayout、CardLayout。本项目主要采用了GridLayout布局。
1.3功能模块设计
(2)减法:
两个及两个以上数据进行减法操作,可以为负数形式。
(3)乘法:
两个及两个以上数据进行乘法操作。
(4)除法:
两个及两个以上数据进行除法操作。
(5)开平方:
对任意数开平方,可以为小数(不能为负数)。
(6)求倒数:
对任意数求倒数,0除外。
(7)求百分数:
对任意一个数进行百分号操作。
1.4 系统功能图。
标准计算器
求倒数
开平方
求百分号
加法
减法
乘法
除法
图1.1 计算器系统功能图
第二章 项目设计说明
2.1标准计算器设计界面
图2.1 计算器设计界面
2.2标准计算器设计主要代码
标准计算器主要由一个菜单栏、一个文本框、27个按钮组成。
2.2.1整体框架代码
JFrame f = new JFrame("标准计算器");
f.setLocation(400, 300);
Container contentPane = f.getContentPane();
2.2.2 菜单栏代码
图2.2 菜单栏
JMenuBar mBar = new JMenuBar();
mCopy = new JMenuItem("复制(C)");
mEdit.add(mCopy);
mPaste = new JMenuItem("粘贴(P)");
mEdit.add(mPaste);
mView = new JMenu("查看(V)");
mView.setMnemonic(KeyEvent.VK_V);
mView.add(new JMenuItem("标准型"));
mView.add(new JMenuItem("科学型"));
mView.addSeparator();
mView.add(new JMenuItem("查看分组"));
mHelp = new JMenu("帮助(H)");
mHelp.setMnemonic(KeyEvent.VK_H);
mHelp.add(new JMenuItem("帮助主题"));
mHelp.addSeparator();
mHelp.add(new JMenuItem("关于计算器"));
mBar.add(mEdit);
mBar.add(mView);
mBar.add(mHelp);
f.setJMenuBar(mBar);
contentPane.setLayout(new BorderLayout());
2.2.3 文本框代码
图2.3 文本框
JPanel pTop = new JPanel();
tResult = new JTextField("0.",26);
tResult.setHorizontalAlignment(JTextField.RIGHT);
tResult.setEditable(false);
pTop.add(tResult);
contentPane.add(pTop,;
2.2.4 计算器各功能键代码
图2.4 各功能键图
bOther = new JButton("MC");
bOther.addActionListener(this);
bOther.setForeground; //字体颜色
bOther.setMargin(new Insets(3,2,3,2));//按钮边框和标签之间的空白
pLeft.add(bOther);
bOther = new JButton("MR");
bOther.addActionListener(this);
bOther.setForeground;
bOther.setMargin(new Insets(3,2,3,2));
pLeft.add(bOther);
bOther = new JButton("MS");
bOther.addActionListener(this);
bOther.setForeground;
bOther.setMargin(new Insets(3,2,3,2));
pLeft.add(bOther);
bOther = new JButton("M+");
bOther.addActionListener(this);
bOther.setForeground;
bOther.setMargin(new Insets(3,2,3,2));
pLeft.add(bOther);
pBottom.add(pLeft,BorderLayout.WEST);
JPanel pRight = new JPanel();
pRight.setLayout(new BorderLayout());
JPanel pUp = new JPanel();
pUp.setLayout(new GridLayout(1,3,3,0));
bOther = new JButton("BackSpace");
bOther.addActionListener(this);
bOther.setForeground;
bOther.setMargin(new Insets(3,0,3,5));
pUp.add(bOther);
bOther = new JButton("CE");
bOther.addActionListener(this);
bOther.setForeground;
pUp.add(bOther);
bOther = new JButton("C");
bOther.addActionListener(this);
bOther.setForeground;
pUp.add(bOther);
2.2.5 数字键及运算符号代码
图2.5 数字键图
JPanel pDown = new JPanel();
pDown.setLayout(new GridLayout(4,5,3,2));
bNumber = new JButton("7");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3,3,3,3));
pDown.add(bNumber);
(注:其他数字键、运算符号键与“7”定义相同。)
第三章 程序运行效果
3.1加法运算
本计算器可以实现多个运算数相加,例如:1+2+3+4
计算结果为10,所有数据均为double类型。
3.2减法运算
本计算器可以实现多个运算数相减(正负数),例如:6-5-3-1
计算结果为-3,数据类型为double类型。
3.3乘法运算
本计算器可以实现多个运算数相乘,例如2*3*4*5
运算结果为120,数据类型为double类型。
3.4除法运算
本计算器可以实现多个运算数相除(除数不为0)例如:15/3/5/2
运算结果为0.5,数据类型为double类型
当除数为0时,计算器自动报错,例如:15/0
3.5开方运算
当被开方数为非负数时,计算器自动开方,例如:25开方
运算结果为5.
3.6求倒数运算
当按下求倒数键时,计算器自动为运算数求其倒数。例如:5的倒数
运算结果为0.2.
第四章 项目重难点分析
4.1重难点分析
Java计算器中整体框架的建立,按钮的设置,整体布局在操作过程中都是很顺畅的。计算器的关键步骤也是重点是实现计算器的计算方法。
实现两个数的加减乘除等运算是比较简单的,但是一个计算器需要做到的是实现多个运算数的运算。此时就用到了我在项目一开始定义的两个数据
每执行一次运算操作就把运算结果赋值给操作数1 “op1”,并判断下一步操作是“=”或者“其他运算符”,决定下一步计算器的操作。
(2)程序中设置了内存的有关操作但是并没有达到其预期的功能。
(3)百分号的实际功能并没有实现。
(4)当被开方数是负数时,计算器并不能给出错误提示。
[参考文献]
《Java编程实用技术与案例 》 译作者:杨绍方
《软件工程Java语言实现SoftwareEngineeringwithJava》StephenR.Schach译者:袁兆山等
程序员天堂( 英文网站 大量的程序, 库, 包)
学生姓名 _______ _
学 号 ___________
专 业 ____ 班 级 ____ 指导教师
200 年 月
1.Java语言的出现
自从1946年世界上第一台电子计算机问世以来,计算模式的发展经历了三个阶段:集中计算模式、分散计算模式和网络计算模式。Internet的出现,为在网络计算模式下的科学计算和信息处理提供了良好平台。然而,要充分利用网络计算模式的功能与效益,平台的运行环境是个制约因素,而Java语言和Java技术则是解决这一问题的最佳途径。
1991年,SUN公司的Jame Gosling,Bill Joe等人试图为电视、烤箱等家用电器开发一种交互式的软件系统,这种应用需要的是那种小而可靠的系统,它能够移植,并且实时性好,适用于网络分布环境。流行的C++是自然的选择。不过,开发过程中遇到的许多难以克服的困难使他们意识到必须彻底解决问题了,最终,开发成功了一个名为Oak的软件,此中蕴藏着Java的原型,当时,并未引起人们的注意。1994年下半年,随着Internet的迅猛发展,环球信息网WWW的快速增长,促进了Java语言研制的进展,使得它逐渐成为Internet上倍受欢迎的开发与编程语言。1995年5月Java正式问世,一些著名的计算机公司纷纷购买了Java语言的使用权,如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java语言被美国著名杂志PC Magazine评为1995年十大优秀科技产品(计算机类仅此一项入选)之一,随之大量出现了用Java编写的软件产品,受到工业界的重视与好评,认为“Java是八十年代以来计算机界的一件大事”。微软总裁比尔〃盖茨在认真观察了一段时间后,确认“Java是长时间以来最卓越的程序设计语言”,并确定微软整个软件的开发战略从PC单机时代向以网�
因此,Java的诞生必将对整个计算机产业发生深远的影响,对传统的计算模型提出了新的挑战。SUN Microsystem公司的总裁Scott McNealy认为:Java对Internet和WWW开辟了一个崭新的时代。
有人预言:Java将成为网络上的“世界语”,今后,用其他语言编写的软件统统都要用Java语言来改写。
2.Java语言的主要特点
Java语言是一种适用于网络编程的语言,它的基本结构与C++极为相似,但却简单得多。它集成了其它一些语言的特点和优势,又避开了它们的不足之处。它的主要特点如下:
2.1简单性
Java与C++相比,不再支持运算符重载、多级继承及广泛的自动强制等易混淆和较少使用的特性,而增加了内存空间自动垃圾收集的功能,复杂特性的省略和实用功能的增加使得开发变得简单而可靠。
简单化的另一个方面是Java的系统非常小,其基本解释和类支持部分只占40KB,附加的基本标准库和线程支持也只需增加175KB。因此,Java应用软件能在相当小的系统之上独立工作。
2.2平台独立性
这是Java最吸引人的地方。由于它采用先编译成中间码(字节码),然后装载与校验,再解释成不同的机器码来执行,即“Java虚拟机”的思想,“屏蔽”了具体的“平台环境”特性要求,使得只要能支持Java虚拟机,就可运行各种Java程序。
2.3面向对象的技术
面向对象(O-O)的技术是近年来软件开发中用得最为普遍的程序设计方法,,它通过把客观事物进行分类组合、参数封装、用成员变量来描述对象的性质、状态,而用方法(成员函数)来实现其行为和功能。O-O技术具有继承性、封装性、多态性等众多特点,Java在保留这些优点的基础上,又具有动态联编的特性,更能发挥出面向对象的优势。
2.4多线程
多线程机制使应用程序能并行执行,Java有一套成熟的同步原语 ,保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易实现网络上实时的交互行为。
2.5动态性
Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。
2.6安全性
Java有建立在公共密钥技术基础上的确认技术。指示器语义的改变将使应用程序不能再去访问以前的数据结构或是私有数据,大多数病毒也就无法破坏数据。因而,用Java可以构造出无病毒、安全的系统。
Java语言除上述主要特点外,还有高性能、分布性、强大性、解释性、可移植性等,此处不再 赘述。
3.Java语言的发展
Java自正式问世以来已经历了四年的历程,时间虽短,发展极快。一年一度在美国旧金山召开的世界Java One语言开发者大会(Java One Developer Conference)盛况空前正说明了这一点。四年中每年的Java One大会,既是了解Java最新技术动态、应用成果和下一步发展趋势的最好场所,又是推动下一年Java快速发展的重要动力。首届Java One大会于1996年召开,各届简况如下:
1996年5月29-31日,第一届,出席会议者6500余人,来自工业界的超过一半。有人评价说:“这是近年计算机界最光辉的一次盛会”。工业界相当看好Java语言,认为它的使用将会引起一场软件革命:从软件的设计风格、设计方法、设计目标到设计过程,都会产生彻底的变革,“甚至会改变此星球的生活方式”。 1997年,第二届,出席会议者10000人。Java的追随者不断增加,应用开发迅速起步。
1998年3月24-27日,第三届,出席会议者14000余人(注册人数),注册门票售价1195美元,否则1395美元,即使如此,仍有不少人不惜工本,挤入会场。本次会议除了软件巨头微软未参加会议外,几乎所有的计算机公司都参加了。展厅内设300多个展台,先后举行了90场专题讨论会,每场参加的人数从千人至五六千人不等。会议的主题是:通过Java的培训来带动Java软件的开发和技术研究,从而发展生产力,获取高额利润,提高生活质量,推动信息产业的进步。会议展出的内容大致如下:
Java开发工具软件,如:JMF、JDK、Symantec Visual Cafe、Java Dynamic Management Kit、JFC、JNDI、Java Studio 等;
企业信息管理解决方案软件,如:EJB(Enterprise JavaBeans);
基于Java技术的信息家电,如:机顶盒、Java电话等;
个人信息综合服务(Java戒指)、社会信息综合查询亭(Kiosk);
电子商务软件、智能卡、Java Card API 等;
网络计算环境下的Java服务器软件、远程方法调用(RMI)、基于Java技术的移动计算设备;
JMS(Java Message Service)用于出版、票据订阅的软件;
JOS(Java OS)、基于Java技术的NC和Java Station。
1999年6月15-18日,第四届,出席会议者达20000人,300多家厂商参展,举办400多场技术讲座,555名演讲者慷慨陈词,精彩纷呈。这次大会的主要特点是:
Java框架结构被梳理清晰
本次JavaOne大会上,Sun公司的一个重大举措就是公布了Java平台的最新架构。重新定义的Java平台以Java 2为核心,由面向企业和服务器市场的企业版Java 2(J2EE)、面向传统PC客户机市场的标准版Java 2(J2SE)和面向信息电器等后PC终端设备市场的Micro版Java 2(J2ME)三大部分组成。其中,J2EE包括Enterprise JavaBeans(EJB)、Java Server Pages & Java Servlets、Java Mail API和Java Massage Service组成。而J2ME则是原有的Personal Java、EmbeddedJava、JavaCard以及刚刚推出的Kjava组成。虽然新框架结构中的内容都是已有的,但这样重新定义和组合,使得Java平台的概念简单化,从而变得易于理解,更适合于进行市场推广。
2)重点放在企业平台
随着Internet的飞速发展,企业计算模式正摒弃C/S结构而采用Web-Browser结构,此即瘦客户端/胖服务器、大容量数据库的3层或N层体系结构。由于Java的特点,使得它在开发服务器端的应用程序方面有着得天独厚的优势,面向服务器端的J2EE为当今逐渐流行的N层体系结构提供了一个标准的Java计算平台:界面一致、工具简易、丰富、Web页面互联便捷,从而能大大加速和简化各种应用系统的开发。
3) 加速后PC时代的进程
计算机的发展创造了Internet,但是计算机现在却不是访问Internet的唯一方式。正在出现的信息化、智能化的消费类电子产品打破了PC作为信息终端的垄断地位,成为人类进入Internet的新门户。信息终端的多元化预示着所谓后PC(post-PC)时代的到来。消费类的信息终端量大面广,是典型的瘦客户机,其本身的资源和能力不能与PC相比,但必须更加智能化,并对服务器端的管理提出了更高的要求。而Java平台恰恰满足了这种要求。本次大会推出的Kjava虚拟机能运行在16以上的微处理器上,占用内存少,人们可以随心所欲,在资源有限的设备上方便地开发出各种各样的应用,直接运行在不同的消费类或其它电子设备上;而Jini的出现为Java网络连接提供了公共标准,使得任何Java设备都可以连入网络中被自动识别,并可充分利用网络上已有的各种资源。大力推进Jini的发展是Sun公司加速后PC时代进程的一项重要策略。
4)应用系统异彩纷呈
与上届大会一样,展出内容有:应用工具、应用系统、信息家电等。特别在实时系统开发方面,以IBM为首开发出了应用于工业实时环境的Java嵌入系统,展现出Java在工业领域的广阔应用前景。
Java语言的出现和发展,得到了IT业界的青睐,它像一面大旗,凝聚了世界众多的厂商与Sun公司一道,结成了对抗微软垄断的联盟。许多知名厂商纷纷购买Java许可证,目前已有90多万个软件开发商加入了Java阵营,1亿个Java最终用户,几千种Java应用软件产品,1500余种Java书籍(自Java问世4年来,平均每天出版一本)。这真是IT业界的盛事!
IBM公司提出“高举Java大旗,全力以赴”的口号,它在全世界的11个国家有28个实验室,集聚了2500余名技术人员,全天侯24小时进行全方位开发;芯片巨人Intel提出“抓住时机,占领Java阵地”!决心使Intel芯片系� 此外,HP、Oracle、Apple、Sybase、Netscape、Informix、3Com、Motorola等公司均是Sun的坚强同盟。
在我国,Java的引进与开发起步早,发展水平基本与世界同步。目前,Sun公司已在中国建成了由5个授权中心、20多个Internet/Intarnet Java解决方案中心和10所Java大学、若干培训中心组成的三级结构。全面推动Java在中国的普及、应用、研究、开发,培养了数以十万计的Java开发人员。此外,Sun还牵头成立了中外软件厂商的开发联盟。
在中国,Java的开发可以说是“人才济济,成果累累”。如清华大学王克宏教授带领的课题组面向全国,自96年开始举办了多期Java培训班和讲座,开设了数期本科生、研究生Java课程,出版了“Java系列丛书”10余册 ,承担了国家“九五”攻关项目“基于Java技术的交互式远程教学系统”,并与日本就Java开发进行了国际合作,成绩斐然;东大阿派下属的宝钢东软软件技术研究中心是国内是首屈一指的Java研发骨干企业,该中心从95年起就开始了Java的研发,目前,已掌握了Personal Java的核心移植技术,并成功地将JVM移植到汽车导航平台。此外,他们还开发出支持Jini协议的即插即用网络打印机软件,以及一套Jini信息家电网络的可视化演示环境,完成了基于JavaBeans的组件化软件开发及运行支持环境等多项成果;在台湾,22家知名计算机公司成立了“Java联盟”,并在台北建立了“Java开发中心”,新竹建立了“Java语言实验室”;在
java毕业论文【优秀5篇】
4. Java技术
Java发展至今日,已不仅仅是一种编程语言,实际上已形成了一门技术。其内容包括:
1)Java软件包
Java语言及其编程技术、JavaOS、Java开发环境与工具、Java语言的各种软件包、数据库接口JDBC等。
2)Java虚拟机及其规范
3) Java嵌入技术(Java芯片)
已推出的有Java戒指、Java卡等。1999年8月2日,Sun公司宣布名为MAJC的专门为Java语言设计的的芯片优化研制成功,欲与Intel试比高低。该芯片在设计时采用了模块式高性能计算引擎,实质为一种芯片级并行处理机,能以更有效的方式分解计算任务,特别适合处理多媒体数据。Sun公司希望通过MAJC芯片的发布催生出一个基于Java语言的微处理器家族,与Intel公司竞争。设想中的Java处理器将应用在从低价消费电子产品到高端因特网服务器领域。
4)Java计算
基于Java技术的企业Internet/Intranet信息系统以及其他应用系统。
5)Jini技术
1999年初正式发布后,立刻得到业界的广泛支持。Jini的出现为Java网络连接提供了公共标准,使得任何Java设备都可以连入网络中被自动识别,并可充分
利用网络上已有的各种资源。它把网络上的各类设备(包括消费类电子设备如移动电话、PDA、DTV、HPC、NC、游戏机、电冰箱、智能卡等等)和各种软件组合成一个单一、动态的分布式系统,使网络更易于操纵、易于管理,具有更高的可配臵性。Jini将使网络具有自发性,它的出现大大扩展了“计算”和“计算机”的含义,极大地简化了网络操作,对家庭用户来说,使用网上设备即插即用,就像使用电话一样方便。Java和Jini 不仅可以不依赖于Windows为代表的操作系统,而且引导着信息产业的潮流,使Sun公司能在未来的、非PC类电子产品的数字化市场中强占制高点。
6)Jiro平台
异质网络环境中安装的存储系统的多样性和分布性,给存储管理带来了巨大的挑战。用户和开发人员都希望能有一种技术,能更好地促进企业存储管理方案的开发。而Jiro平台正是解决此问题的革命性方案。Jiro平台实现了Java和Jini 技术,它是一个便于用户管理异质网络上由各种服务器、存储和设备组成的混合环境的开放式存储管理平台。它对操作系统是中立的。Jiro为跨异质存储局域网(SAN)的管理服务和设备提供了一个开放平台,允许服务器、存储和联网设备在异质网络环境中无缝地协同工作。Jiro平台为开发者带来的好处有: 允许开发者利用各种实现管理存储网络的目标功能创建应用;
提供了一个可以在各种应用、服务和设备之间交互操作的组件模型; 允许设备易被增加、删除;
允许应用或服务被自动更新。
1999年7月,Sun发布了正式的Jiro规范草案,供公众讨论、修改。目前,Jiro平台的团体成员已超过25家,支持Jiro平台的厂商超过300家。有眼光的厂商纷纷加入到这些组行列,从而加快了Jiro的发展。
结语
Java自问世以来,以其得天独厚的优势,在IT业界掀起了研究、开发它的浪潮,显示了“鹏程万里”的美好前景。作为一种与底层硬件无关的、“编写一次,到处运行”的高级语言和计算平台,Java天生就具有将网络上的各个平台连成一体的能力,真正实现了“网络就是计算机”的理念。以Java为代表的网络的成长,改变了我们的联系方式、生活方式、学习方式和经营方式。它的来到使我们目睹了一场类似印刷术的重大变革。毫无疑问,它将影响人类社会的发展,这就是:Java加速人类进入网络时代!
Java是当今IT产业和人类文明的创新和希望!
编号
xxx学院
免费的
毕 业 论 文
学生姓名 _______ _
学 号 ___________
专 业 ____
班 级 ____
指导教师
200 年 月
1.Java语言的出现
自从1946年世界上第一台电子计算机问世以来,计算模式的发展经历了三个阶段:集中计算模式、分散计算模式和网络计算模式。Internet的出现,为在网络计算模式下的科学计算和信息处理提供了良好平台。然而,要充分利用网络计算模式的功能与效益,平台的运行环境是个制约因素,而Java语言和Java技术则是解决这一问题的最佳途径。
1991年,SUN公司的Jame Gosling,Bill Joe等人试图为电视、烤箱等家用电器开发一种交互式的软件系统,这种应用需要的是那种小而可靠的系统,它能够移植,并且实时性好,适用于网络分布环境。流行的C++是自然的选择。不过,开发过程中遇到的许多难以克服的困难使他们意识到必须彻底解决问题了,最终,开发成功了一个名为Oak的软件,此中蕴藏着Java的原型,当时,并未引起人们的注意。1994年下半年,随着Internet的迅猛发展,环球信息网WWW的快速增长,促进了Java语言研制的进展,使得它逐渐成为Internet上倍受欢迎的开发与编程语言。1995年5月Java正式问世,一些著名的计算机公司纷纷购买了Java语言的使用权,如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java语言被美国著名杂志PC Magazine评为1995年十大优秀科技产品(计算机类仅此一项入选)之一,随之大量出现了用Java编写的软件产品,受到工业界的重视与好评,认为“Java是八十年代以来计算机界的一件大事”。微软总裁比尔·盖茨在认真观察了一段时间后,确认“Java是长时间以来最卓越的程序设计语言”,并确定微软整个软件的开发战略从PC单机时代向以网�
因此,Java的诞生必将对整个计算机产业发生深远的影响,对传统的计算模型提出了新的挑战。SUN Microsystem公司的总裁Scott McNealy认为:Java对Internet和WWW开辟了一个崭新的时代。
有人预言:Java将成为网络上的“世界语”,今后,用其他语言编写的软件统统都要用Java语言来改写。
2.Java语言的主要特点
Java语言是一种适用于网络编程的语言,它的基本结构与C++极为相似,但却简单得多。它集成了其它一些语言的特点和优势,又避开了它们的不足之处。它的主要特点如下:
2.1简单性
Java与C++相比,不再支持运算符重载、多级继承及广泛的自动强制等易混淆和较少使用的特性,而增加了内存空间自动垃圾收集的功能,复杂特性的省略和实用功能的增加使得开发变得简单而可靠。
简单化的另一个方面是Java的系统非常小,其基本解释和类支持部分只占40KB,附加的基本标准库和线程支持也只需增加175KB。因此,Java应用软件能在相当小的系统之上独立工作。
2.2平台独立性
这是Java最吸引人的地方。由于它采用先编译成中间码(字节码),然后装载与校验,再解释成不同的机器码来执行,即“Java虚拟机”的思想,“屏蔽”了具体的“平台环境”特性要求,使得只要能支持Java虚拟机,就可运行各种Java程序。
2.3面向对象的技术
面向对象(O-O)的技术是近年来软件开发中用得最为普遍的程序设计方法,,它通过把客观事物进行分类组合、参数封装、用成员变量来描述对象的性质、状态,而用方法(成员函数)来实现其行为和功能。O-O技术具有继承性、封装性、多态性等众多特点,Java在保留这些优点的基础上,又具有动态联编的特性,更能发挥出面向对象的优势。
2.4多线程
多线程机制使应用程序能并行执行,Java有一套成熟的同步原语 ,保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易实现网络上实时的交互行为。
2.5动态性
Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。
2.6安全性
Java有建立在公共密钥技术基础上的确认技术。指示器语义的改变将使应用程序不能再去访问以前的数据结构或是私有数据,大多数病毒也就无法破坏数据。因而,用Java可以构造出无病毒、安全的系统。
Java语言除上述主要特点外,还有高性能、分布性、强大性、解释性、可移植性等,此处不再 赘述。
3.Java语言的发展
Java自正式问世以来已经历了四年的历程,时间虽短,发展极快。一年一度在美国旧金山召开的世界Java One语言开发者大会(Java One Developer Conference)盛况空前正说明了这一点。四年中每年的Java One大会,既是了解Java最新技术动态、应用成果和下一步发展趋势的最好场所,又是推动下一年Java快速发展的重要动力。首届Java One大会于1996年召开,各届简况如下:
1996年5月29-31日,第一届,出席会议者6500余人,来自工业界的超过一半。有人评价说:“这是近年计算机界最光辉的一次盛会”。工业界相当看好Java语言,认为它的使用将会引起一场软件革命:从软件的设计风格、设计方法、设计目标到设计过程,都会产生彻底的变革,“甚至会改变此星球的生活方式”。
1997年,第二届,出席会议者10000人。Java的追随者不断增加,应用开发迅速起步。
1998年3月24-27日,第三届,出席会议者14000余人(注册人数),注册门票售价1195美元,否则1395美元,即使如此,仍有不少人不惜工本,挤入会场。本次会议除了软件巨头微软未参加会议外,几乎所有的计算机公司都参加了。展厅内设300多个展台,先后举行了90场专题讨论会,每场参加的人数从千人至五六千人不等。会议的主题是:通过Java的培训来带动Java软件的开发和技术研究,从而发展生产力,获取高额利润,提高生活质量,推动信息产业的进步。会议展出的内容大致如下:
Java开发工具软件,如:JMF、JDK、Symantec Visual Cafe、Java Dynamic Management Kit、JFC、JNDI、Java Studio 等;
企业信息管理解决方案软件,如:EJB(Enterprise JavaBeans);
基于Java技术的信息家电,如:机顶盒、Java电话等;
个人信息综合服务(Java戒指)、社会信息综合查询亭(Kiosk);
电子商务软件、智能卡、Java Card API 等;
网络计算环境下的Java服务器软件、远程方法调用(RMI)、基于Java技术的移动计算设备;
JMS(Java Message Service)用于出版、票据订阅的软件;
JOS(Java OS)、基于Java技术的NC和Java Station。
1999年6月15-18日,第四届,出席会议者达20000人,300多家厂商参展,举办400多场技术讲座,555名演讲者慷慨陈词,精彩纷呈。这次大会的主要特点是:
Java框架结构被梳理清晰
本次JavaOne大会上,Sun公司的一个重大举措就是公布了Java平台的最新架构。重新定义的Java平台以Java 2为核心,由面向企业和服务器市场的企业版Java 2(J2EE)、面向传统PC客户机市场的标准版Java 2(J2SE)和面向信息电器等后PC终端设备市场的Micro版Java 2(J2ME)三大部分组成。其中,J2EE包括Enterprise JavaBeans(EJB)、Java Server Pages & Java Servlets、Java Mail API和Java Massage Service组成。而J2ME则是原有的Personal Java、EmbeddedJava、JavaCard以及刚刚推出的Kjava组成。虽然新框架结构中的内容都是已有的,但这样重新定义和组合,使得Java平台的概念简单化,从而变得易于理解,更适合于进行市场推广。
2)重点放在企业平台
随着Internet的飞速发展,企业计算模式正摒弃C/S结构而采用Web-Browser结构,此即瘦客户端/胖服务器、大容量数据库的3层或N层体系结构。由于Java的特点,使得它在开发服务器端的应用程序方面有着得天独厚的优势,面向服务器端的J2EE为当今逐渐流行的N层体系结构提供了一个标准的Java计算平台:界面一致、工具简易、丰富、Web页面互联便捷,从而能大大加速和简化各种应用系统的开发。
3) 加速后PC时代的进程
计算机的发展创造了Internet,但是计算机现在却不是访问Internet的唯一方式。正在出现的信息化、智能化的消费类电子产品打破了PC作为信息终端的垄断地位,成为人类进入Internet的新门户。信息终端的多元化预示着所谓后PC(post-PC)时代的到来。消费类的信息终端量大面广,是典型的瘦客户机,其本身的资源和能力不能与PC相比,但必须更加智能化,并对服务器端的管理提出了更高的要求。而Java平台恰恰满足了这种要求。本次大会推出的Kjava虚拟机能运行在16以上的微处理器上,占用内存少,人们可以随心所欲,在资源有限的设备上方便地开发出各种各样的应用,直接运行在不同的消费类或其它电子设备上;而Jini的出现为Java网络连接提供了公共标准,使得任何Java设备都可以连入网络中被自动识别,并可充分利用网络上已有的各种资源。大力推进Jini的发展是Sun公司加速后PC时代进程的一项重要策略。
4)应用系统异彩纷呈
与上届大会一样,展出内容有:应用工具、应用系统、信息家电等。特别在实时系统开发方面,以IBM为首开发出了应用于工业实时环境的Java嵌入系统,展现出Java在工业领域的广阔应用前景。
Java语言的出现和发展,得到了IT业界的青睐,它像一面大旗,凝聚了世界众多的厂商与Sun公司一道,结成了对抗微软垄断的联盟。许多知名厂商纷纷购买Java许可证,目前已有90多万个软件开发商加入了Java阵营,1亿个Java最终用户,几千种Java应用软件产品,1500余种Java书籍(自Java问世4年来,平均每天出版一本)。这真是IT业界的盛事!
IBM公司提出“高举Java大旗,全力以赴”的口号,它在全世界的11个国家有28个实验室,集聚了2500余名技术人员,全天侯24小时进行全方位开发;芯片巨人Intel提出“抓住时机,占领Java阵地”!决心使Intel芯片系� 此外,HP、Oracle、Apple、Sybase、Netscape、Informix、3Com、Motorola等公司均是Sun的坚强同盟。
在我国,Java的引进与开发起步早,发展水平基本与世界同步。目前,Sun公司已在中国建成了由5个授权中心、20多个Internet/Intarnet Java解决方案中心和10所Java大学、若干培训中心组成的三级结构。全面推动Java在中国的普及、应用、研究、开发,培养了数以十万计的Java开发人员。此外,Sun还牵头成立了中外软件厂商的开发联盟。
java毕业论文【优秀5篇】
4. Java技术
Java发展至今日,已不仅仅是一种编程语言,实际上已形成了一门技术。其内容包括:
1)Java软件包
Java语言及其编程技术、JavaOS、Java开发环境与工具、Java语言的各种软件包、数据库接口JDBC等。
2)Java虚拟机及其规范
3) Java嵌入技术(Java芯片)
已推出的有Java戒指、Java卡等。1999年8月2日,Sun公司宣布名为MAJC的专门为Java语言设计的的芯片优化研制成功,欲与Intel试比高低。该芯片在设计时采用了模块式高性能计算引擎,实质为一种芯片级并行处理机,能以更有效的方式分解计算任务,特别适合处理多媒体数据。Sun公司希望通过MAJC芯片的发布催生出一个基于Java语言的微处理器家族,与Intel公司竞争。设想中的Java处理器将应用在从低价消费电子产品到高端因特网服务器领域。
4)Java计算
基于Java技术的企业Internet/Intranet信息系统以及其他应用系统。
5)Jini技术
1999年初正式发布后,立刻得到业界的广泛支持。Jini的出现为Java网络连接提供了公共标准,使得任何Java设备都可以连入网络中被自动识别,并可充分利用网络上已有的各种资源。它把网络上的各类设备(包括消费类电子设备如移动电话、PDA、DTV、HPC、NC、游戏机、电冰箱、智能卡等等)和各种软件组合成一个单一、动态的分布式系统,使网络更易于操纵、易于管理,具有更高的可配置性。Jini将使网络具有自发性,它的出现大大扩展了“计算”和“计算机”的含义,极大地简化了网络操作,对家庭用户来说,使用网上设备即插即用,就像使用电话一样方便。Java和Jini 不仅可以不依赖于Windows为代表的操作系统,而且引导着信息产业的潮流,使Sun公司能在未来的、非PC类电子产品的数字化市场中强占制高点。
6)Jiro平台
异质网络环境中安装的存储系统的多样性和分布性,给存储管理带来了巨大的挑战。用户和开发人员都希望能有一种技术,能更好地促进企业存储管理方案的开发。而Jiro平台正是解决此问题的革命性方案。Jiro平台实现了Java和Jini 技术,它是一个便于用户管理异质网络上由各种服务器、存储和设备组成的混合环境的开放式存储管理平台。它对操作系统是中立的。Jiro为跨异质存储局域网(SAN)的管理服务和设备提供了一个开放平台,允许服务器、存储和联网设备在异质网络环境中无缝地协同工作。Jiro平台为开发者带来的好处有:
允许开发者利用各种实现管理存储网络的目标功能创建应用;
提供了一个可以在各种应用、服务和设备之间交互操作的组件模型;
允许设备易被增加、删除;
允许应用或服务被自动更新。
1999年7月,Sun发布了正式的Jiro规范草案,供公众讨论、修改。目前,Jiro平台的团体成员已超过25家,支持Jiro平台的厂商超过300家。有眼光的厂商纷纷加入到这些组行列,从而加快了Jiro的发展。
结语
Java自问世以来,以其得天独厚的优势,在IT业界掀起了研究、开发它的浪潮,显示了“鹏程万里”的美好前景。作为一种与底层硬件无关的、“编写一次,到处运行”的高级语言和计算平台,Java天生就具有将网络上的各个平台连成一体的能力,真正实现了“网络就是计算机”的理念。以Java为代表的网络的成长,改变了我们的联系方式、生活方式、学习方式和经营方式。它的来到使我们目睹了一场类似印刷术的重大变革。毫无疑问,它将影响人类社会的发展,这就是:Java加速人类进入网� 分析系统的可行性,让系统有一个明确的方向,使开发更具合理性,并能分析出系统的具体流程,为后面的开发做好铺垫。明确本次课程设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JAVA的应用系统综合实例,来掌握Java语言编程技巧。并学会编制结构清晰、风格良好的、数据结构适当的Java语言程序,从而具备解决综合性实际问题的能力
二、课题内容
用Java设计一个职工信息管理系统,并实现相关功能。
三、系统程序要求
1、设计一个职工信息管理系统
2、要求包括职工信息包括职工号、姓名、性别、年龄、学历、工资、
住 址、电话(职工号不重复)
3、本系统功能描述:
职工信息录入功能(职工信息用文本保存);
职工信息浏览功能;
查询功能(至少一种查询方式):
按工资查询, 按学历查询
4、职工信息删除、修改功能(这两个功能任选)。
四、程序设计思想
该课题要求是输入职工信息,对职工信息进行一系列的处理。既要输入工号又要能查找到与之对应的职工,还要对实现建立,显示,查找,删除,信息的保存。
因为考虑到信息管理信息的实用性,我额外添加了一个“读文件”功能,使利用void read()方法来实现的。这个“读文件模块"!是我用来扩充信息管理系统功能的!可以使系统在用户不用输入信息就能读取先前已存在的职工信息文件。
根据课题要求,我是这样设计的:首先对要实现的功能类型分为三大类——Public类、方法类、信息类;然后细分为六个方法——void caidan()、void creat()、void output()、void search()、void delete()、void read ()。这些类和方法构成了能够实现不同功能的模块,很好地体现了面向对象的Java语言的编程模块块的思想。
我通过调用各功能模块的几个方法,随后在各个method中具体实现相关的功能。当然要利用throws IOException进行一些异常处理,包括输入异常和数据的异常。在数据的录入与输出的过程中涉及到文件的相关操作(包括打开与关闭等)最后是系统的安全退出。大部分功能都是在具体的模块中加以实现的。
如search方法实现查询职工信息功能;caidan方法实现系统选择菜单界面的输出等相关功能;delete方法用于职工信息删除;output方法用于职工信息的输出及浏览等系列功能。
五、程序源代码及其解析
package staff;//包
import java.io.*;
public class StaffInfomation {
public static void main(final String[] args) throws IOException
//throws IOException用来抛出io的错误,文件读写错误, 主要涉及到java的安全机制
{
staffInfo staffOne[]=new staffInfo[100]; //定义100个类数组
for(int j=0;j<100;j++) staffOne[j] = new staffInfo();
//建立这100个类的对象
final ways staffTwo=new ways(); //建立这个方法类的对象
staffTwo.caidan(staffOne);
(staffOne);
staffTwo.output(staffOne);
staffTwo.search(staffOne);
staffTwo.delete(staffOne);
//以上几个方法分别对应着:caidan菜单选择、增加(建立)职工信息、输出(预览)、查询、删除这些功能,以数组类为参数
}
}
class staffInfo
//职工信息类换句话说就相当与c语言里面的结构体,存放职工的信息
{
public String name;
public String num;
public String sex;
public String age;
public String record;
public String position;
public String wanges;
public String tel;
public String addr;
//把name、num、sex、age、record等声明为全局变量,因为它们贯穿于整个程序中,方便其它方法、类调用它们
}
class ways //方法类,主要实现职工信息的建立,显示,查找,删除,信息的保存与读取;这个类是整个程序的操作类。
{
public String recordkey;
public int i=0;//i用来存放职工的人数
public String filename="Infomation.txt";
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
//此处是JAVA语言中输入数据的基本格式,功能有如C中的scanf函数
void caidan(staffInfo staffOne[]) throws IOException
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
// 参看书34页,产生Buf对象;buf是BufferedReader类的变量,此处将读入字符串至buf
int choice;
do{
System.out.println("☆★☆★☆★☆★电子信息系40706班★贺 雪 设计★☆★☆★☆\n\n");
System.out.println("┏━━━━━━━━━━━━━━━━━━┓");
System.out.println("┃★ 职工管理系统主菜单界面 ★┃");
System.out.println("┣━━━━━━━━━━━━━━━━━━┫");
System.out.println("┃ ★ ①.输入职工信息 ★ ┃");
System.out.println("┃ ★ ②.预览职工信息 ★ ┃");
System.out.println("┃ ★ ③.查找职工信息 ★ ┃");
System.out.println("┃ ★ ④.删除职工信息 ★ ┃");
System.out.println("┃ ★ ⑤.安全退出系统 ★ ┃");
System.out.println("┃ ★ ⑥.读取数据 ★ ┃");
System.out.println("┗━━━━━━━━━━━━━━━━━━┛");
System.out.print(" 请输入您的选择(0--6):");
choice=Integer.parseInt());
switch(choice)
{
case 1:creat(staffOne);break;
case 2:output(staffOne);break;
case 3:search(staffOne);break;
case 4:delete(staffOne);break;
case 5:save(staffOne);break;
case 6:read(staffOne);break;
}
}while(choice!=0);
}
void creat(staffInfo staffOne[]) throws IOException
//这个方法是实现“增加(建立)职工信息”;是建立信息模块
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.print("\n请输入职工信息(以0结束)\n");
System.out.print("姓名:\n\n");
staffOne[i].name=();
while(staffOne[i]("0")!=0)
//用数组staffOne[i]来暂存职工的序 号,并用compareTo方 法确定判定是否应该写入新信息
{
System.out.print("工号:\n\n");
staffOne[i].num=();
System.out.print("性别:\n\n");
staffOne[i].sex=();
System.out.print("年龄:\n\n");
staffOne[i].age=();
System.out.print("学历:\n\n");
staffOne[i].record=();
System.out.print("职位:\n\n");
staffOne[i].position=();
System.out.print("工资:\n\n");
staffOne[i].wanges=();
System.out.print("电话:\n\n");
staffOne[i].tel=();
System.out.print("住址:\n\n");
staffOne[i].addr=();
i++;
System.out.println("请输入下一个职工信息:\n\n");
staffOne[i].name=();
}
}
void output(staffInfo staffOne[]) throws IOException
//这里是实现“输出(预览)职工信息”output的模块
{
System.out.println("--------------------------------------");
System.out.println(" *员工信息表* );
System.out.println("------------------------------------");
System.out.println("姓名 工号 性别 年龄 学历 职位 工资 电话号码 住址");
System.out.println("---------------------------------");
if(i!=0)
{
for(int j=0;j<i;j++)
{
System.out.print(staffOne[j].name+" "+staffOne[j].num+" "+staffOne[j].sex+" ");
System.out.print(staffOne[j].age+" "+staffOne[j].record+" "+staffOne[j].position+" ");
System.out.print(staffOne[j].wanges+" "+staffOne[j].tel+" "+staffOne[j].addr+"\n");
}
System.out.println("------------------------------");
}
else System.out.println("没有员工信息!");
}
void search(staffInfo staffOne[]) throws IOException
//这里是实现职工信息的查询功能的模块
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n请输入您要查找的职工学历:");
recordkey=();
boolean flg=true;
System.out.println("------------------------------------");
System.out.println(" *员工信息表* );
System.out.println("-----------------------------------");
System.out.println("姓名 工号 性别 年龄 学历 职位 工资 电话号码 住址");
System.out.println("---------------------------------------");
for(int j=0;j<i;j++)
{
if(recordkey.equals(staffOne[j].record))
//equals是字符串比较函数相等返回true
{
System.out.print(staffOne[j].name+" "+staffOne[j].num+" "+staffOne[j].sex+" ");
System.out.print(staffOne[j].age+" "+staffOne[j].record+" "+staffOne[j].position+" ");
System.out.print(staffOne[j].wanges+" "+staffOne[j].tel+" "+staffOne[j].addr+"\n");
flg=false;
}
}
if(flg)
System.out.println("对不起,查无此人!");
}
void delete(staffInfo staffOne[]) throws IOException
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n请输入您要删除的职工姓名:");
recordkey=();
boolean flg=true;
for(int j=0;j<i;j++)
{
//System.out.println("staffOne[j].name="+staffOne[j].name);
//System.out.println("recordkey="+recordkey);
//System.out.println("recordkey.equals(staffOne[j].name)="+recordkey.equals(staffOne[j].name));
if(recordkey.equals(staffOne[j].name))
{
for(int k=j;k<=i-1;k++)
//利用顺序表的删除算法,删除值之后,再把后面的值往前移位,从而实现删除
{
staffOne[k].name=staffOne[k+1].name ;
staffOne[k].num=staffOne[k+1].num ;
staffOne[k].sex=staffOne[k+1].sex ;
staffOne[k].age=staffOne[k+1].age ;
staffOne[k].record=staffOne[k+1].record ;
staffOne[k].position=staffOne[k+1].position ;
staffOne[k].wanges=staffOne[k+1].wanges ;
staffOne[k].tel=staffOne[k+1].tel ;
staffOne[k].addr=staffOne[k+1].addr ;
}
i--;//职工人数要减一
flg=false;
}
}
if(flg)
System.out.println("对不起,查无此人!。");
else System.out.println("已经删除!。");
}
void save(staffInfo staffOne[]) throws IOException
//数据的保存模块, 把输入的职工信息保存到相应的文件里。
{
int k;
final FileWriter fw=new FileWriter(filename);
//调用构造函数FileWriter()创建FileWriter类的对象。
//文件的读取(书216页13-2-2)
fw.write( i+"\n");//把职工的人数保存到文件中以便下次读取是使用
for( k=0;k<i;k++)//每个职工有9个信息字段,下面就是这9个信息段。
{
fw.write( staffOne[k].name+"\n");
fw.write( staffOne[k].num+"\n");
fw.write( staffOne[k].sex+"\n" );
fw.write( staffOne[k].age+"\n");
fw.write( staffOne[k].record+"\n");
fw.write( staffOne[k].position+"\n") ;
fw.write( staffOne[k].wanges+"\n");
fw.write( staffOne[k].tel+"\n");
fw.write( staffOne[k].addr+"\n");
}
fw.close();
System.out.println("\n 系统已经安全退出!感谢您的使用!");
System.exit(0);
}
void read(staffInfo staffOne[]) throws IOException
//这是程序的“读文件模块"!是我自己添加进去扩充系统功能的!可以使系统不用输入信息就能读取先前已存在的职工信息文件。
{
final FileReader fr=new FileReader(filename);
final BufferedReader bfr=new BufferedReader(fr);
//关于文件的读取不会的看看书216页13-2-2
if((recordkey=())!=null)
i=Integer.parseInt(recordkey);
for(int j=0;j<i;j++)
{
staffOne[j].name=(); 这是程序的“读文件模块",
是我自己添加进去扩充系统功
staffOne[j].num=(); 能的!可以使系统不用输入信息
就能读取先前已存在的职工信息
staffOne[j].sex=(); 文件,从中读取数据。利用了书
本P216页13-2-2的文件相关知识
staffOne[j].age=();
staffOne[j].record=();
staffOne[j].position=() ;
staffOne[j].wanges=();
staffOne[j].tel=();
staffOne[j].addr=();
}
fr.close();
System.out.println("\n 数据已经成功读取!");
}
}
六、心得体会
我自己感觉此次课程设计做得挺成功的,通过这一次,我学到了不少实际编程的知识。
在这次设计开始的第一天开始,我就开始着手修改一个用“职工信息管理系统”的JAVA程序。这一过程太不顺利,调试的时候都没有成功。后来我请教一个学长,在他的指导下我不断的发现错误,并改正它们,功夫不负有心人人,我的程序最后运行成功了。
这其中了不少的东西,磨砺了我的意志;同时还巩固了以前所学的知识,学到了不少书本上没有的知识;学到了很多java编程知识,并学会了简单的使用eclipse来开发java程序的一些使用技巧这次课程设计是对我本学期所学的知识的检验,由此我发现了不少的问题。可以说它给了我一次自我评估的机会。通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。
临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美,但我以后会多向老师请教,自己也要加强对Java 的学习。努力进一步提高自己的编程水平。
参考资料
1、《程序天下》
2、洪维恩、何嘉《java2面向对象程序设计》
3、Java天下-java、jsp编程论坛[黑咖啡屋]
4、黄旭等《java课程设计指导》
5、C编程设计(第三版) 谭浩强(著)