您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页jsp网上蛋糕销售系统论文最终版

jsp网上蛋糕销售系统论文最终版

来源:爱go旅游网
太 原 理 工 大 学

毕业设计(论文)任务书

毕业设计(论文)题目: 基于j2ee的蛋糕销售系统的设计与实现 毕业设计(论文)要求及原始数据(资料): 1.综述网上蛋糕销售系统的研究现状; 2.深入了解网上蛋糕销售系统的相关技术; 3.熟练掌握网上蛋糕销售系统的应用; 4.设计并实现网上蛋糕销售系统; 5.深入分析网上蛋糕销售系统的关键技术与编写语言; 6.训练检索文献资料和利用文献资料的能力; 7.训练撰写技术文档与学位论文的能力。 毕业设计(论文)主要内容: 1.综述网上蛋糕销售系统的应用; 2.了解网上蛋糕销售系统的相关技术; 3.熟悉网上蛋糕销售系统的开发环境; 4.设计基于java的网上蛋糕销售系统的功能; 5. 深入分析网上蛋糕销售系统的应用技术和设计流程; 6.熟练掌握基于java的网上蛋糕销售系统的编写; 7.设计与实现网上蛋糕销售系统的程序。 学生应交出的设计文件(论文): 1.内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文; 2.包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关 材料。

主要参考文献(资料): [1]黄敏学 . 电子商务 ,高等教育出版社 ,2001年6月第1版 [2]李源彬 . 电子商务概论 ,人民邮电出版社 ,2004年6月第1版 [3]薛华成 . 管理信息系统 ,清华大学出版社 ,2003年12月第4版 [4]萨师煊. 数据库系统概论 ,高等教育出版社 ,2000年2月第3版 [5]张海藩. 软件工程 ,人民邮电出版社 ,2002年3月第1版 [6]张登辉 . ASP编程基础及应用 ,机械工业出版社,2003年3月第1版 [7] 李源彬 ,电子商务概论 ,人民邮电出版社 2004年6月第1版 [8]王君学 . 网页制作基础FrontPage2002 ,人民邮电出版社 ,2001年6月第1版 [9]编程起步 ,人民邮电出版社 ,2001年4月第1版 [10]编程起步 .人民邮电出版社 ,2002年二月第1版 [11]Data C J.An Introducetion to Database System(Ed.6).Addision_Wesley,1995 [12]Ullman J D.Principles of Database Systems.Computer SciencePress,1980 [13] 专业班级 学生 要求设计(论文)工作起止日期 指导教师签字 教研室主任审查签字 系主任批准签字 2015年3月23日~2015年7月3日 日期 2015年3月23日 日期 日期 网上蛋糕销售系统的设计与实现

摘 要

二十一世纪的今天,互联网已成为人类必不可少的生活必需品,与此同时,计算机技术也越发成熟。计算机技术广泛应用于互联网,例如电子商务则是其中发展最快的一项。电子商务实现了买卖双方在虚拟的环境中交易的方式,而实用最大的则是网站。

网上蛋糕销售系统便于用户能不受时间限制、不受地区限制的搜索以及购买自己想要的蛋糕。本系统的前台主要功能包含:蛋糕类别模块、蛋糕查询模块、特价蛋糕模块、蛋糕车模块、订单模块、用户信息模块、系统公告模块等。后台主要功能包括:修改密码模块、用户管理模块、蛋糕类别模块、蛋糕管理模块、订单管理模块等。

网上蛋糕销售系统通用JSP建立前台,并且连接MySQL数据库建立后台。利用MyEclipse跟Tomcat建立一个MVC框架的网上蛋糕销售系统。 关键词:网上蛋糕销售系统; JSP技术; MVC框架

The design and implementation of the online cake selling

system

Abstract

Today, twenty-first century, the Internet has become an essential human necessities, at the same time, computer technology is more mature. Computer technology is widely used on the Internet, e-commerce is one of the fastest growing one. E-commerce transactions between buyers and sellers realize the way in the virtual environment, and practical is the largest site.

Online bookstore system facilitates users without time limit, without geographical restrictions they want to find and buy books. Front main function of this system include: book category module, query module books, special books module, shopping cart module, order module, user information module, system announcements module. Background main function of this system include: change password module, the user management module, class module library, library management module, order management module.

Universal JSP online bookstore system to establish reception, and connect MySQL database to establish the background. Use MyEclipse to create a MVC framework of the online bookstore system with Tomcat.

Keywords: Online cakestore; JSP technology; MVC framework

目 录

1 绪论 .................................................................. 1

1.1 课题背景 .......................................................... 1 1.2 课题意义 .......................................................... 2 1.3 课题目标 .......................................................... 2 2 可行性研究 ............................................................ 3

2.1 引言 .............................................................. 3

2.1.1 编写目的 .................................................... 3 2.2 可行性研究 ........................................................ 3 3 关键技术 .............................................................. 5

3.1 MVC框架 .......................................................... 5

3.1.1 MVC编程模式 ................................................. 5 3.1.2 框架内容 .................................................... 5 3.1.3 常见框架 .................................................... 6 3.2 JSP技术 .......................................................... 6

3.2.1 JSP简介 ..................................................... 6 3.2.2 JSP技术原理 ................................................. 7 3.3 Spring框架 ....................................................... 7 3.4 Struts框架 ....................................................... 8 3.5 Hibernate框架 .................................................... 9 4 项目开发计划 ......................................................... 11

4.1 引言 ............................................................. 11 4.2 项目概述 ......................................................... 11 4.3 产品 ............................................................. 11

4.3.1 程序 ....................................................... 11 4.3.2 功能 ....................................................... 11 4.4 实施计划 ......................................................... 11 5 需求分析 ............................................................. 12

5.1 项目概述 ......................................................... 12

5.1.1 功能描述 ................................................... 12 5.1.2 用户及一般约束 ............................................. 12 5.2 系统功能设计 ..................................................... 12

5.2.1 会员功能 ................................................... 12 5.2.2 管理员功能 ................................................. 13 5.3 模块说明 ......................................................... 13 5.4 设计的主要思想 ................................................... 14 5.5 数据字典 ......................................................... 14 6 概要系统设计 ......................................................... 16

6.1 总体设计 ......................................................... 16 6.2 蛋糕销售系统模块总体结构 ......................................... 16 6.3 系统结构图 ....................................................... 17

6.3.1 总体结构图 ................................................. 17 6.3.2 网络蛋糕销售系统的E-R图 ................................... 17

7 详细系统设计 ......................................................... 18

7.1 前台部分 ......................................................... 18

7.1.1 用户登录 ................................................... 18 7.1.2 安全退出系统 ............................................... 20 7.1.3 用户注册 ................................................... 21 7.1.4 蛋糕查询 ................................................... 22 7.1.5 购物车系统 ................................................. 24 7.1.6 订单系统 ................................................... 24 7.1.7 系统首界面 ................................................. 25 7.2 后台部分 ......................................................... 25

7.2.1 登录界面 ................................................... 26 7.2.2 管理员主界面 ............................................... 26 7.2.3 修改密码 ................................................... 27 7.2.4 用户管理 ................................................... 27 7.2.5 蛋糕类别 ................................................... 28 7.2.6 蛋糕管理 ................................................... 30

7.2.7 订单管理 ................................................... 31 7.3 数据库的分析与设计 ............................................... 32

7.3.1 数据库的概念 ............................................... 32 7.3.2 数据库的分析与设计 ......................................... 32 7.3.2.1 数据库的概念结构设计 ................................... 33 7.3.2.2 数据库的逻辑结构设计 ................................... 36 7.3.2.3 数据库的连接原理 ....................................... 38 7.3.3 中文乱码问题处理 ........................................... 39

结 论 .................................................................. 40 参考文献 ................................................................ 42 致 谢 .................................................................. 43 外文原文 ................................................................ 44 中文翻译 ................................................................ 51

1 绪论

1.1 课题背景

21世纪以来,计算机技术及其应用以迅雷不及掩耳之势风靡全社会,推进了各个领域应用系统的高速发展,其中,互联网的应用最为迅捷,人类开始进入了以计算机为主的网络信息时代。

互联网的出现为人类的生产生活带来了极大的方便,因此,短短20年间,互联网已渗透到经济社会的各个领域,成为生产建设、科技创新、经济贸易、生活娱乐、文化传播、公共服务的新型平台和变革力量,其中电子商务的应用最为广泛。电子商务即以信息网络技术为手段,以商品交换为中心的商务活动,通常是指在全球各地的商业贸易活动中,在因特网开发的环境下,基于浏览器/服务器应用方式,买卖双方不需见面就能实现的商品消费活动。电子商务网站为用户提供了可靠的信息存储和快捷的处理信息的方式。作为计算机应用技术的一部分,电子商务使用计算机管理某企业或公司的产品销售信息,具有手工管理无法企及的优越性,例如:检索迅速、效率高、存储量大、安全性好、成本低廉等。因此开发一套电子商务软件很有其必要性。

随着计算机硬件技术的日趋先进,计算机已成为当前人类社会不可或缺的工具,无论在生活、工作还是娱乐、学习方面都离不开计算机。硬件的发展为软件的发展提供了强有力的条件,因而电子商务技术也日渐完善,随处可见的网络购物系统正是其见证者。现在有很多网上购物网站,譬如电器信誉最好的京东商城,物价最低廉的淘宝网,图书信誉最高的亚马逊,这些都是各个销售领域的代表,这些优越网站也是实现本系统最好的参考。

目前,电子商务系统中的网上购物功能已相当成熟,其中所涉及的网络技术和数据库技术也基本完善,本系统的开发参考大多数电子商务网站,是基于JSP技术的网站,其开发主要包括前台应用程序的开发以及后台数据库的建立与维护两方面。其中,前台应用程序要求程序功能完备,页面美观足够吸引客户,最重要的是易操作和使用;而后台数据库的建立与维护要求数据库有完整性、安全性、一致性的特点,方便数据的统一管理和使用。该项目开发的目的是要满足消费者和管理员双方的需求,达到一种双赢的结果。

1.2 课题意义

本课题的研究意义在于人们只要有一台电脑或一个笔记本,异或是一部智能手机,也可以是其他任意一种上网设备,就可以随时随地在自己需要的时候在网上查找到自己喜欢的蛋糕并且可以购买,即使在家也可以订购蛋糕悠然等待送货上门,如此一来,购买蛋糕变得快速而又便捷。另一面,对于卖家而言,卖家可以在家中做生意,只需在固定的时间点上网站查看客户信息,就可及时制作,尽快发货。卖家在家中做生意不仅消除了开店面的地域限制,省去了租地成本,而且通过网络还扩大了客源,促进了销售,同时在家也能兼顾到家中的生活大小事务,更自由也更轻松。

1.3 课题目标

网上蛋糕销售系统的主要目的是实现用户网上查找以及购买蛋糕的需求。在这个系统中,每个用户都可以注册自己的账号,设置自己的密码,登录后能够通过蛋糕查询快速检索,在短时间内可以查看到蛋糕的相关信息简述,从而找到符合自己要求的蛋糕。蛋糕选定之后就可以放入购物车下订单。网站管理员进入后台后可以查看客户信息,蛋糕信息,订单信息以及其他信息,并且有权修改和删除这些信息。

2 可行性研究

2.1 引言

人类已经步入网络信息时代,网络如今与我们十分贴近,渗透到了我们生活的方方面面。现代是一个知识经济的时代,信息正以空前绝后的速度在膨胀,未来的世界将完全是一个网络的世界。

我们是21世纪的主力军,我们有责任承担起属于我们的任务,我们有责任让我国紧跟时代的步伐,让我国更快地适应这个高科技的社会。为了实现我们的任务,我们必须具备从外界及时迅速获取有效科学信息的能力,要具备判断信息真伪的能力,也要具备传播科学信息的能力,而网络为我们锻炼这种能力提供了有利的条件。因此,电子商务应运而生,网络销售作为其产物也快速发展。网上蛋糕销售系统正是网络销售中非常普遍的的一个系统,它的主要目的是让全国各地的人们随时随地就可以买到自己想吃的蛋糕。

传统的蛋糕销售主要是以店面为基础,要想销量好,就必须要选择一个有利的地理位置,还要做宣传,这些都要花费很多的钱财,并且由于受地域限制的影响,客源也十分有限。而网络蛋糕销售系统恰好完美地解决了这些问题,利用网络可以在家里做生意,不仅避免了选取店面宣传店面带来的开支,而且网络上人人都能看到网店,扩大了客户来源,增加了销量,也就增加了营业额。当今社会的人们对电脑操作十分熟悉,因而这样的系统非常易于接受和采纳,是一种相对实用的软件工具。 2.1.1 编写目的

编写该可行性研究报告的目的在于对网上蛋糕销售系统作充分的可行性研究分析,显示其存在的重要性和必要性。要达到这个目的,需要对比原始的蛋糕销售方式和网上销售方式,通过对比,明确网上蛋糕销售系统的开发方向和途径,确定该系统的开发步骤以及对策,务必要显示出该系统的优越性、先进性。

2.2 可行性研究

可行性研究阶段的主要任务是对系统是否能够正常实现等问题做出判断,避免在花费了大量人力物力财力之后才发现系统不能实现引起的浪费,可行性分析要求用最小的

代价在最短的时间内确定问题是否能够解决。这里,我们将通过以下三个方面对该网上蛋糕销售系统作出分析。 (1)经济可行性分析

网上蛋糕销售系统一旦实现,能给人们带来了极大的方便,只需要有网,人们就 能够随时随地订购蛋糕,因此,从消费群体来看,构建一个网上蛋糕销售系统在经济 上是完全可行的。

就电子商务的发展而言,电脑的普及为消费者网上购物提供了有利的条件,当然 网上蛋糕销售系统也是其受益者。网上蛋糕销售系统是一个基于电脑的系统软件,消 费者只要借助电脑就可以足不出户买到蛋糕,商家也可以从中获取利润,可谓两全其 美。

开发本系统所使用的软件并不过度依赖于计算机硬件,因此对计算机硬件并没有 太高的要求,一般的计算机配置都可行,无需花费高价购买硬件设施;开发本系统的 软件也可以免费下载,所以无论软件还是硬件,开发本系统都节省成本,具有经济可 行性。

(2)技术可行性分析

本系统的开发并不十分复杂,但是为了使系统更加完美,必须很多技术结合使用, 要结合这些技术,必须要有一套完整的开发方法。此次开发分为前台和后台两部分, 前台主要应用JSP技术,后台用到了spring、struts、hibernate框架,关于三大框 架的具体信息将在下一章做出介绍,此处不作详解。 (3)操作可行性分析

在网络信息高速发展的时代,越来越多的人掌握了计算机的使用。而本系统但凡 是能够使用计算机的人都能够轻而易举地使用本系统,因此,从操作上来说本系统完 全可行。

由以上经济、技术、操作三方面的分析可以看到,本系统无论从哪种角度考虑都 是可行的。

3 关键技术

3.1 MVC框架

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面 显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于 映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。 3.1.1 MVC编程模式

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

(1)Model(模型)表示应用程序核心(比如数据库记录列表),是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

(2)View(视图)显示数据(数据库记录),是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

(3)Controller(控制器)处理输入(写入数据库记录),是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。 3.1.2 框架内容

MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式。

(1)视图:视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和像XHTML,XML/XSL,WML

等一些标识语言和Web services。MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

(2)模型:模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用像EJBs和ColdFusion Components这样的构件对象来处理数据库,被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

(3)控制器:控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。 3.1.3 常见框架

常见的MVC框架主要有三种,分别是spring、struts、hibernate。这三种框架分别在3.3,3.4,3.5节做详细介绍。

3.2 JSP技术

3.2.1 JSP简介

JSP是Java Server Page的缩写,是Servlet的简化。它是由Sun公司提出的,并由许多公司参与制定的一种动态网页标准。其主要特点是在HTML页面中加入Java代码片段,或者使用各种JSP标签,包括使用用户标签,构成JSP网页。早期使用JSP页面的用户非常广泛,一个Web应用可以全部由JSP页面组成,只辅以少量的JavaBean即可。自J2EE标准出现以后,人们逐渐认识到使用JSP充当过多的角色是不合适的。因此,JSP慢慢发展成单一的表现层技术,不再承担业务逻辑组件及持久层组件的责任。虽然有各种模板技术,但JSP还是最经典、应用最广的表现层技术。

3.2.2 JSP技术原理

JSP通过在标准的HTML页面中插入Java代码,其静态的部分无须Java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用Java脚本控制。

从表面上看,JSP页面已经不再需要Java类,似乎完全脱离了Java面向对象的特征。事实上,JSP是Servlet 的一种特殊形式,每个JSP页面就是一个Servlet 实例--JSP页面由系统编译成Servlet, Servlet 再负责响应用户请求。JSP其实也是Servlet 的一种简化,使用JSP时,其实还是使用Servlet,因为Web应用中的每个JSP页面都会由Servlet 容器生成对应的Servlet。对于Tomcat而言,JSP页面生成的Servlet放在work路径对应的Web应用下。JSP的工作原理图如图3-1所示:

图3-1 JSP工作原理图

根据上面的工作原理图,我们可以得到以下四个结论: (1)JSP文件必须在JSP服务器内运行; (2)JSP文件必须生成Servlet才能执行;

(3)每个JSP页面的第一个访问者速度都很慢,因为必须等待JSP编译生成 Servlet;

(4)JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境, 因为JSP页面输送到客户端的是标HTML页面。

3.3 Spring框架

Spring 为企业应用的开发提供了一个轻量级的解决方案。该解决方案包括:基于依赖注入的核心机制,基于AOP的声明式事务管理与多种持久层技术的整合,以及优秀的WebMVC框架等。

Spring 为J2EE应用的表现层、业务逻辑层及数据持久层都提供了极好的解决方案,因为Spring提供的不仅仅是一种框架,而且提供了一种企业应用的开发规范。Spring是实际开发的抽象,其提供的\"模板设计\"大大简化了应用的开发。

Spring的系列Template将通用步碟以优雅的方式完成,留给开发者的仅仅是与特定应用相关的部分,从而大大提高企业应用的开发效率。Spring支持对POJO的管理,能将J2EE应用各层的对象\"焊接\"在一起,甚至这些对象无须是标准的JavaBean。 Spring框架是java中用来解决对象之间相互调用的,它可以降低对象之间调用的耦合性,所以使得编程很容易,使得程序的伸缩性提高。控制反转(IOC)思想对于降低对象之间的耦合性提供了很多好处,而Spring框架则是使得IOC变得标准,从而使得程序员根据Spring框架来进行开发。

Spring框架是用最基本的javabean来代替EJB,使企业应用开发变得简洁,与此同时,还能提供更多的应用功能,并且任何的java应用都能使用Spring框架。Spring框架实际上就是使得整个应用比较统一,让程序员更加容易地使用J2EE来开发程序,并且通过揉合单框架形成组合,从而建立起一个体系。因此Spring框架提供了一个更加完善的开发环境,能提供企业级的服务给POJO对象。

3.4 Struts框架

从实际应用开发的角度而言,Struts 应该是MVC框架的第一选择。因为它具有稳定性,以及成熟的开发群体和丰富的信息资埠,保证了企业应用的稳定开发。经过长达六年的发展,Struts 已经成长为稳定、成熟的框架,并且是所有MVC框架中应用最广泛的框架。

近来,WebWork也加入到Struts 阵营,更提高了Struts 的竞争力。如今,Struts作为全世界第一个开源MVC框架,具有高度的成熟性和广泛的项目应用,保证了其应用的稳定性。

Struts框架是用来规范MVC的开发。在Struts中, JSP、ActionServlet、ActionForm、Action、JavaBean、配置文件等是通常使用的组件。其工作原理如图3-2所示。

图3-2struts 组件之间关系

当有用户进行操作请求时,JSP界面则会将内容交给ActionServlet。

(1)ActionServlet会使得表单信息封装于ActionForm内,并且转交给Action。 (2)ActionServlet让Action直接调用DAO包,而不是直接处理业务逻辑。 (3)Action将接下来要跳转的JSP页面传给ActionServlet。 (4)ActionServlet实现跳转,并且显示在JSP页面上。

3.5 Hibernate框架

Hibernate 是目前最流行的开源对象关系映射(ORM)框架。Hibernate 采用低侵入式的设计,完全采用普通的Java 对象(POJO),而不必继承Hibernate 的某个超类或实现Hibernate的某个接口。因为Hibernate是面向对象的程序设计语言和关系数据库之间的桥梁,所以Hibernate允许程序开发者采用面向对象的方式来操作关系数据库。 Hibernate将数据库中的每个记录,都当做一个java对象,这样可以使得编程变得容易,也能使得维护性变高。对象关系映射(ORMapping)是数据库层的一种设计思想,而Hibernate则是将它作为基础从而使得程序员所写的程序变得规范。

PO、框架API、Hibernate配置文件、Hibernate映射文件等组件是Hibernate中经常使用的。关系如下图3-3所示。

图3-3Hibernate 各组件之间关系

一个对数据库进行的操作,其流程如下。

(1)首先,API框架获取Hibernate配置文件,并连接到数据库。

(2)其次,操作PO时,框架API根据Hibernate映射文件,来创建要操作的表名与列名。

(3)框架API执行相应SQL语句。

4 项目开发计划

4.1 引言

主要对开发该系统的时间、进度、软硬件设备配置等进行说明规划。

4.2 项目概述

为了能够很好地完成该项目的开发计划,需要明确该软件要实现的主要功能。制定的实施计划包括:明确主要工作;确定开发使用的语言及数据存储形式;确定工作进度;制定测试计划。

4.3 产品

4.3.1 程序

提交的系统为“网上蛋糕销售系统”,采用myeclipse平台,后台数据库使用mysql。 4.3.2 功能

(1)用户注册登录;

(2)信息查询,包括蛋糕、订单、公告、论坛;

(3)修改,包括用户修改购物车信息和管理员修改蛋糕、订单、公告、论坛信息;

(4)保存,包括用户订单和管理员更新的信息。

4.4 实施计划

工作任务的分解:

(1)系统模块的分解

系统分为两大模块:用户模块,管理员模块。 (2)开发者的主要任务

设计并实现网上蛋糕销售系统,包括界面设计和代码最终实现。

5 需求分析

项目概述

5.1.1 功能描述

本系统采用页面显示的方式,使人机交互更为方便,使系统可以可靠运行,有较高的安全性,满足实用性和经济性要求。 5.1.2 用户及一般约束

系统的用户有两类:用户会员和系统管理员。用户会员可以浏览查询蛋糕信息,并且可以下订单,还能在论坛上发表言论。管理员进入后台可以修改蛋糕信息,也可以修改用户和订单信息,还可以发布公告。在本系统中,管理员的权限是最高的。

5.2 系统功能设计

5.2.1 会员功能

本系统分为前台和后台两个平台,前台主要是给用户操作,用户在此可以查询蛋糕、购买蛋糕,可以查看系统公告、留言评论,也可以修改个人信息、查看日历等,其功能显示如图5-1所示。

图5-1 会员功能

5.2.2 管理员功能

后台主要是网站管理员操作,管理员拥有网站最大的权限,他能管理并且查看用户的所有信息,以及对蛋糕、公告、和论坛的增加、删除和修改操作。其具体功能如图5-2所示。

图5-2 管理员功能

5.3 模块说明

会员模块:会员即用户,用户需要先注册才能登录。登录之后用户可以在网上查看对比所有蛋糕信息,如果有看中的蛋糕即可加入到购物车之中,然后下订单,若购物车中有不想要的蛋糕可以删除。除此之外,用户可以查看公告信息,也可以在网站论坛上发表评论。

管理员模块:管理员具有系统最高权限,功能如下:

(1)修改管理员密码:管理员能够在这里修改下次登录的密码,但是管理员的用户名是不可更改的。

(2)用户信息管理:管理员能够查看会员资料,并有权将其删除。被管理员删除的会员将无法用其删除的账户登录该系统。

(3)查看蛋糕信息:管理员能够查看全部蛋糕类别信息及其属性,能够添加和删除蛋糕类别。

(4)蛋糕信息管理:管理员能够查看蛋糕信息,比如查看所有蛋糕的属性,以及可以帮蛋糕设置特价,还能对蛋糕的属性进行添加、修改和删除。

(5)订单信息管理:管理员能够查看订单的信息,并可以选择对其进行受理或者删除操作。

(6)网站论坛:管理员能查看所有用户在网站论坛的留言,对这些留言具有删除权

限。

(7)公告管理:管理员查看网站所发布的所有公告,并且及时对公告做出更新。

5.4 设计的主要思想

网上蛋糕商城这个系统主要用的是MVC设计思想。MVC模式即

model-view-controller模式。用户通过网上蛋糕商城这个界面的一些按钮,系统会找到其相对应的struts配置文件,然后到控制层找到相对应action,并且找到操作方法,再到dao包里找到对数据库的操作方法,最后产生一个session,对数据库进行一次操作,如增删改查。

Model——表示应用程序核心,主要是使应用程序的数据结构和事物逻辑封装起来,它能体现出应用程序的状态,当用户对数据进行操作时,可以在View中展现出来。 View——显示数据,它是用来展示Model中的内容,当模型数据改变的时候,则会通过JSP界面将变化展现出来。

Controller——应用程序中处理用户交互的部分,它能够响应用户的操作请求,将模型跟视图连接在一起,并且把数据库中的数据存放到模型中,然后调用视图。

5.5 数据字典

数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。 数据字典(Data dictionary)是一种用户可以访问的记录数据库和应用程序源数据的目录。该系统中涉及的主要的数据字典如下所示:

文件条目:

(1)文件名:会员清单

组成{账号+密码+姓名+性别+年龄+住址+电话+邮箱} 组织:按序列号递增 (2)文件名:蛋糕种类清单

组成{蛋糕名称+蛋糕品牌+介绍+图片+价格+特价+操作}

组织:按序列号递增 (3)文件名:购物车清单

组成{蛋糕名称+价格+数量+金额+删除} 组织:按序列号递增 (4)文件名:订单清单

用户所见:

组成{订单编号+金额+下单日期+订单状态+编辑} 组织:按序列号递增 管理员所见:

组成{用户信息+订单编号+金额+下单日期+送货地址+付款方式+操作} 组织:按序列号递增

加工说明:

(1)加工名:会员信息、蛋糕信息、订单信息查询

加工逻辑:根据输入要查询的会员、蛋糕和订单信息,检索出结果 输入流:会员信息、蛋糕信息、订单信息 输出流:会员信息清单、蛋糕信息清单、订单清单 (2)加工名:会员信息、蛋糕信息、订单信息更新

加工逻辑:根据输入的会员、蛋糕、订单信息更新相应的清单 输入流:修改的新信息 输出流:修改后的对应清单

6 概要系统设计

6.1 总体设计

程序运行开始后,用户将通过浏览器看到一个动态页面,页面中有注册和登录两个按钮,在未注册的情况下,用户点击登录按钮系统会提示注册之后才能登录。点击注册用户会进入注册窗口,注册成功之后,输入用户名密码就能够登录进入系统。登录进系统之后,用户可以通过蛋糕查询查看所有的蛋糕信息,也能通过特价蛋糕进行对比,之后用户可以选择购买蛋糕,下订单。同时,用户可以在系统论坛中发表评论,或者查看网站公告信息。点击进入后台后,管理员可以登录后台,登录之后管理员可以修改管理员的用户密码,下次启动生效。管理员在后台可以查看用户、蛋糕、公告、订单等信息,并且随时可以对这些信息进行增删改查操作。

网上蛋糕销售系统具有以下特点:

(1)采用C/S工作模式,即客户端/服务器工作模式; (2)直观的JSP网页界面。

6.2 蛋糕销售系统模块总体结构

根据用户需求,该系统划分为以下9大模块:

(1)主页:在这里我们可以看见该系统的主要功能和信息栏;

(2)用户注册登录:在这里我们可以注册账户,其中有几项是必须要填的,为了 方便购物,注册之后需要登录;

(3)蛋糕查询:在这里我们可浏览蛋糕的信息,看到喜欢的可以点击进入购物车; (4)购物车:这里主要是存放想要购买的蛋糕; (5)订单:用户可以查看订单的信息,也可以删除订单; (6)个人信息修改:用户可以在此界面修改信息; (7)公告:用户可以在此查看系统公告; (8)论坛:用户可以发表言论;

(9)后台:管理员进入后台后可以对各个模块进行修改、更新。

6.3 系统结构图

6.3.1 总体结构图

总体结构是从大的方向出发来看的,主要是系统的九大模块。该系统的总体结构图如图6-1所示。

6-1 网上蛋糕销售系统总体结构图

6.3.2 网络蛋糕销售系统的E-R图

6-2 网上蛋糕销售系统的E-R图

7 详细系统设计

7.1 前台部分

前台主要是让会员使用,可以通过个人账号登录系统,然后浏览所有的蛋糕信息,以及通过关键字检索蛋糕信息,并且进行留言以及查看网站公告。 7.1.1 用户登录

用户登录是要进入系统的第一步,用户输入个人账号和密码,系统会根据用户输入的信息到数据库的t_user表中查找信息,若是数据库中的信息与用户输入的信息一致,则跳出的窗口中会提示登录成功。如果不输入账号名和密码,窗口会提示请输入用户名和密码;如果只输入用户名不输入密码,窗口会提示请输入密码;如果输入的用户名和密码不匹配,则会提示密码输入错误;如果不输用户名只输密码,窗口会提示请输入用户名。这五种情况就是五个测试用例,如表7-1所示。

表7-1 登录测试表

测试对象 用户登录 测试案例 预期结果 实际结果 报错,提示请输入用户名 报错,提示请输入密码 报错,提示用户名或者密码错误 报错,提示请输入用户名 提示成功登录 是否通过 通过 用户名:null 报错,请输入密码:null 用户名:yll 密码:null 用户名:yll 密码:l 用户名 报错,请输入密码 报错,用户名或者密码错误 用户登录 通过 用户登录 通过 用户登录 用户名:null 报错,请输入密码:1 用户名:yll 密码:123 用户名 成功登录 通过 用户登录 通过 用户登录系统按图7-1流程图执行:

图7-1 登录系统

判断用户输入是否正确是调用action里UserAction类里的userLogin方法,主要代码如下:

te().find(sql,con); if(userList.size()==0)

this.setMessage(\"用户名或密码错误\"); this.setPath(\"qiantai/default.jsp\");

Map session= ServletActionContext.getContext().getSession();

TUser user=(TUser)userList.get(0); session.put(\"user\ Cart cart=new Cart(); session.put(\"cart\

this.setMessage(\"成功登录\"); this.setPath(\"qiantai/default.jsp\");

用户登录界面如图7-2所示,登录成功窗口如图7-3所示,未输入密码报错窗口如图7-4所示,未输入用户名报错窗口如图7-5所示,用户名和密码不匹配的报错窗口如

图7-6所示。

图7-2 用户登录界面 图7-3 登录成功

图7-4 报错1 图7-5 报错2

图7-6 报错3

7.1.2 安全退出系统

出于对账户安全的考虑,本系统特别增加了安全退出系统的功能。当用户需要退出网站时,必须点击退出系统才可以,这样做的目的是使数据库产生的session清楚地了解到当前用户的信息,否则,当其他用户登录这个网站时,就会保存当前用户的登录信息,而其他用户可以借此使用当前用户的账号购买蛋糕,对当前用户造成损失。安全退

出系统的关键代码如下:

Map session= ServletActionContext.getContext().getSession(); session.remove(\"user\"); return ActionSupport.SUCCESS;

安全退出界面如图7-7所示。

图7-7 退出界面

7.1.3 用户注册

在用户没有个人账号的情况下,可以点击注册进入注册界面注册个人账户。注册界面包含8个信息,其中账号和密码是必须要填的内容,其他是选填项。填写完成后,单击确定便能够注册成功,用户就拥有了自己的个人账号。如果输入的信息不符合要求,提交之后系统会报错,提示注册失败。此模块调用的是java里UserAction类的userReg()方法实现,其主要代码如下:

TUser user=new TUser(); user.setUserName(userName); user.setUserPw(userPw); ... ...

userDAO.save(user);

注册界面如图7-8所示:

图7-8 注册界面

此模块综合考虑了各方面的因素,基本已经完美,但还有一个缺陷,注册按钮调用的是check1()函数,该函数在此处只检查了账号和密码是否为空,并没有在数据库中进行关键字对比,因此没有检测账号的唯一性。从理论上讲,当注册的账号已经存在时,系统是应该报错的,并且提示重新输入一个账户,但在此系统中账号重复并没有报错,而是对原来的账户进行了覆盖。此功能的测试用例如表7-2所示。

表7-2 注册测试表

测试对象 用户注册 测试案例 账号:null 密码:null 用户名:null 密码:1 用户名:m1 密码:null 用户名:zyw 密码:1 预期结果 报错,请输入 账号 报错,请输入 账号 报错,请输入 密码 注册成功 实际结果 报错,提示请 输入账号 报错,提示请 输入账号 报错,提示请 输入密码 注册成功,请 登录 注册成功 是否通过 通过

用户注册 通过

用户注册 通过

用户注册 通过

用户注册 用户名:zhangyuwen 报错,请用户重密码:1 新输入用户名 不通过 7.1.4 蛋糕查询

蛋糕查询分为按关键字查询和按类别查询两种查询方法。

按关键字查询是指在蛋糕输入框里输入关键字,此处采用的是模糊查询,所有含有搜寻的关键字的蛋糕都会列出。若输入框里输入内容为空,点击查询按钮,则会列出所有蛋糕信息。此处调用的是goodsaction里的goodsSearch()方法。从数据库里查找符合查询条件的蛋糕,并且跳转到goodsSearch.jsp界面。此处查询语句如下: Map request=(Map)ServletActionContext.getContext().get(\"request\");

String sql=\"from TGoods where goodsDel='no' and goodsName like

'%\"+goodsName.trim()+\"%'\";

List goodsList=goodsDAO.getHibernateTemplate().find(sql); request.put(\"goodsList\ return ActionSupport.SUCCESS;

空查结果如图7-9所示:

图7-9 查询界面

按蛋糕类别查询则是根据类别名称快速搜索。这种查询方法是调用catelogAction类中的catelogAll()方法来查询所有的该类别的蛋糕信息,并且将查询到的所有信息都显示到goodsByCatelog.jsp页面。用户只需点击类别信息,该类别蛋糕即可都显示出来,主要代码如下:

List goodsList=goodsDAO.getHibernateTemplate().find(sql,con); request.put(\"goodsList\

类别查询界面如图7-10所示:

图7-10 类别查询

7.1.5 购物车系统

在浏览蛋糕的过程中必然会有一款用户满意的蛋糕,此时,用户打开蛋糕信息,点击购买,就能够将看中的蛋糕加入到购物车中,购物车中有三个提示按钮,分别是:清空、继续、下一步。点击清空按钮会删除当前购物车中的所有蛋糕;点击继续按钮会跳转回蛋糕首页,用户继续选购;点击下一步按钮就进入了订单确认界面。要删除已选的某一个蛋糕,可以点击其后的X按钮,点击之后会删除掉想要删除的蛋糕。蛋糕购物车如图7-11所示:

图7-11 购物车

清空购物车调用java里cartService类里的clearCart()方法,主要代码如下:

Cart cart=(Cart)session.getAttribute(\"cart\"); cart.getItems().clear();

继续购买则直接调转到默认界面,及default.jsp界面,回到首界面,而下一步则是调用buyAction里的orderQueren()方法,进入订单确认界面,主要代码如下:

Map request=(Map)ServletActionContext.getContext().get(\"request\");

7.1.6 订单系统

系统首页我的订单一栏点击后会进入订单系统,订单系统中含有所有的订单信息,包括订单编号、金额、下单日期、订单状态、编辑等。编辑之下有两个操作,一个是订单明细,点击之后能够查看订单具体信息,如蛋糕名称、购买数量以及价格;另一个是删除操作,点击之后可以删除对应的订单。在此JSP中使用了迭代器iterator。 我的订单信息界面如图7-12所示:

图7-12 订单信息

订单明细则是调用了action里buyAction的orderDetail()方法,订单明细界面如图7-13所示:

图7-13 订单明细界面

7.1.7 系统首界面

系统首界面分为top,left,right,foot四部分。Top部分主要是网上蛋糕销售系统的logo,为了方便直观,命名为网上蛋糕商城,紧接着还有几个功能模块:系统首页、特价蛋糕、我的蛋糕车、我的订单、我的信息、系统公告、网站论坛、进入后台。Left部分主要是用户登录、蛋糕查询、蛋糕类别和日历表。Right部分展示的是所有蛋糕的信息。Foot部分是网站声明、服务网点、网站地图、已经客服热线,系统首界面如图7-14所示。

图7-14 系统首页

7.2 后台部分

后台主要是为管理员提供控制平台,首先管理员输入账号密码登录,管理系统分为八个部分,分别是修改密码部分、用户管理部分、蛋糕类别管理部分、蛋糕管理部分、订单管理部分、留言管理部分、公告管理部分和退出系统。

7.2.1 登录界面

每个管理员都具有独立的账号和密码,根据提供的账号密码登录管理系统。系统登录界面如图7-15所示:

图7-15 后台登陆界面

当管理员输入完用户名和密码后,点击登录按钮,系统首先会判断用户名和密码有没有输入,若是输入了,系统再到数据库中与存储的数据进行匹配,匹配通过后才能成

功登录。判断是否输入用户名和密码的主要代码如下:

if(document.ThisForm.userName.value==\"\")

alert(\"请输入用户名\");

if(document.ThisForm.userPw.value==\"\")

alert(\"请输入密码\");

当输入的用户名和密码与数据库里所存储的信息不符合时,则会返回登录界面,主要代码如下:

if(data==\"no\")

alert(\"用户名或密码错误\"); if(data==\"yes\")

alert(\"通过验证,系统登录成功\");

window.location.href=\"<%=path %>/loginSuccess.jsp\";

7.2.2 管理员主界面

管理员主界面主要分为top、left、right三个部分,top部分仍然是蛋糕商城的logo,left部分为管理员的八大功能模块,right部分为每个功能模块相对应的操作,其主界面如图7-16所示:

图7-16 管理员主界面

7.2.3 修改密码

此功能模块是让管理员在此处修改紫的登录密码。修改密码时首先要输入原始密码,原始密码输入错误是无法进行修改的,系统会通过数据库判断输入的原始密码是否正确,正确后再输入新密码,之后点击确定即可完成密码的修改。修改密码的界面如图8-17所示。

图7-17 修改密码

检查原始密码以及新密码输入是否正确,主要代码如下: if(document.formPw.userPw.value !=userPwReal) alert(\"原密码不正确\");

if(document.formPw.userPw1.value ==\"\") alert(\"新密码不能空\");

document.getElementById(\"indicator\").style.display=\"none\";

alert(\"修改成功\"); 7.2.4 用户管理

用户登录网上蛋糕销售系统时,均可注册成为网上蛋糕销售系统的会员,在用户管理这一模块中管理员可以查看所有会员的注册信息,并可以删除用户。当点击用户管理

这个按钮时,则会连接到java里的userAction,接下来会到数据库中查找用户信息,然后将其绑定到request对象,最后再回到相应的userMana.jsp界面,用户管理界面如图7-18所示。

图7-18 用户管理

用户管理功能中删除用户的关键代码如下:

TUser user=userDAO.findById(userId); userDAO.delete(user);

用户管理功能中查看用户信息的关键代码如下:

List userList=userDAO.getHibernateTemplate().find(sql);

Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"userList\

7.2.5 蛋糕类别

蛋糕类别管理主要是对蛋糕类别的删除与添加。首先先介绍一下对蛋糕类别的添加功能,点击添加类别,在跳转的页面中,管理员输入正确的类别名称,再点击提交按钮,蛋糕类别就添加成功了。如果输入的蛋糕类别名称为空,系统就会提示请输入类别名称,表示此次添加蛋糕类别失败。输入的数据信息都会通过onclick=\"check()\"方法来检查输入的是否正确。添加蛋糕的类别界面如图7-19所示。

图7-19 蛋糕类别添加

添加蛋糕类别的流程图如图7-20所示。

图7-20 添加蛋糕类别

管理员添加蛋糕类别的关键代码如下:

TCatelog catelog=new TCatelog();

ogName(catelogName);

catelogDAO.save(catelog);

管理员点击蛋糕类别里的类别管理,系统则会调用catelogAction类查询所有的蛋糕类别信息,并且在页面的右边显示,蛋糕类别信息如图7-21所示。

图7-21 蛋糕类别信息

在显示的所有蛋糕类别信息中,管理员可以删除相应的蛋糕类别,点击删除,然后确定删除,则可删除该蛋糕类别信息,删除成功界面如图7-22所示。

图7-22 删除类别

在蛋糕类别功能模块中,点击类别管理会显示所有的蛋糕类别,主要代码如下:

List cateLogList=catelogDAO.getHibernateTemplate().find(sql); Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"cateLogList\

在蛋糕类别功能模块中,删除蛋糕类别调用方法catelogDel()。其主要代码如下: bernateTemplate().find(sql);

if(goodsList.size()>0)

this.setMessage(\"请先删除此类别下的蛋糕\");

this.setPath(\"catelogMana.action\");

TCatelog catelog=catelogDAO.findById(catelogId); catelog.setCatelogDel(\"yes\");

7.2.6 蛋糕管理

网上蛋糕的蛋糕管理功能主要包括所有蛋糕的信息,如蛋糕的编号、名称、蛋糕价格、蛋糕介绍、蛋糕图片等,蛋糕介绍可以使用fckEditor在线文本编辑器实现显示和修改。点击蛋糕管理,系统则会调用java里的goodsAction类,查找蛋糕信息,并且跳转到相应的JSP界面,蛋糕管理信息显示界面如图7-23所示。

图7-23 蛋糕管理信息

蛋糕管理模块调用的是goodsMana()方法,其主要代码如下: List goodsList=goodsDAO.getHibernateTemplate().find(sql); Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"goodsList\

蛋糕管理模块还有添加蛋糕功能,可以通过左边功能模块里的添加蛋糕或者蛋糕管理界面里的添加按钮进行添加蛋糕。添加蛋糕需要输入相应的蛋糕信息,如蛋糕类别、蛋糕名称、ISBN、蛋糕介绍、蛋糕图片以及价格,输入完点击提交按钮即可。添加蛋糕

界面如图7-24所示。

图7-24 添加蛋糕

蛋糕管理模块的添加蛋糕信息的主要代码如下:

TGoods goods=new TGoods();

goods.setGoodsCatelogId(goodsCatelogId); goods.setGoodsName(goodsName); ... ...

goodsDAO.save(goods);

7.2.7 订单管理

在订单管理系统中,管理员可以查看和管理整个网站的所有订单,包括查看订单明细和查看买家信息,也包括订单的受理与删除。在此处的用户信息通过在线文本编辑器fckEditor文本框实现用户信息的介绍。跳转到userAction类,找到买家信息。其对应的界面如图8-25所示。

图7-25 订单信息

在此界面,管理员也可以选择删除订单,其主要代码如下:

TOrder order=orderDAO.findById(orderId); orderDAO.delete(order);

7.3 数据库的分析与设计

7.3.1 数据库的概念

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。 7.3.2 数据库的分析与设计

数据库是后台存储数据的仓库,通过数据库,前台所有的操作信息都能映射到数据库中并且响应。数据库作为一个大型的数据集合,它的独立性比较高,扩展性很大,而冗余度却比较小。将前台与后台连接后,数据库可供用户以及管理员共同使用,实现对数据库的基本操作,例如增加信息、删除信息、更改信息和查询信息。用户通过网上蛋糕这个界面的一些按钮,系统会找到其相对应的struts配置文件,然后到控制层找到相对应action,并且找到操作方法,再到dao包里找到对数据库的操作方法,最后产生一个session,对数据库进行一次操作,如图7-26所示。

图7-26 数据库系统

数据库设计是指在特定的应用环境中,根据数据库的逻辑和物理结构建立一个相应的数据库,并且将它应用于一些设计的项目,使得它能存储和管理数据更加有效,从而响应每个用户的操作请求。数据设计一般是由六个阶段构成。

(1)需求分析:指需要准确的了解用户的所有需求以及用户的操作动作。 (2)概念结构设计:主要建立一个数据库对应的概念模型。

(3)逻辑结构设计:即为根据概念模型建立一个数据库系统所支持的数据模型。 (4)物理结构设计:主要是为逻辑数据模型寻找一个合适的存储结构和存取方法即为物理结构。

(5)数据库实施:指建立数据库,设计员利用数据库语句建立符合逻辑结构和物理结构的数据库。

(6)数据库运行和维护:指调试数据库的运行,以及将数据库变的更加完善。 7.3.2.1 数据库的概念结构设计

数据库中的概念结构设计是会形成一个独立的概念模型,这个模型独立于具体的数据库系统,所以说它是数据库设计中非常重要的一步。它可以归纳出用户的需求并将这些需求抽象化,从上向下分析,从下向上分析,从一点扩散以及集中混合起来是概念结构设计经常使用的方法。通常,概念模型使用E-R模型来描述。属性、实体、域、码和其相互之间的联系组成了E-R模型,其可以使用E-R(实体-联系)图来表示。E-R图具有表示实体、属性和联系的方法。矩形一般表示实体,椭圆一般表示属性,而实体之间的联系大多使用菱形。三者之间则用无向边相连。无向边上可以注上联系的类型,比如一对一(1:1),一对多(1:n),多对多(n:m)。

(1)会员信息主要指会员注册时所包含的信息,这些信息就是会员的属性。该系统的会员信息图如图7-27所示:

图7-27 会员信息图

(2)蛋糕类别是对蛋糕的种类的介绍,其拥有三个属性。该系统的蛋糕类别图如图7-28所示:

图7-28 蛋糕类别图

(3)蛋糕信息与蛋糕类别不同,蛋糕信息主要是蛋糕本身的各个属性,该系统的蛋糕信息图如图7-29所示:

图7-29 蛋糕信息图

(4)公告是系统的一种通知信息,它有四个属性。该系统的公告信息图如图7-30所示:

图7-30 公告信息图

(5)管理员是系统另一使用者,拥有系统最高权限。本系统的管理员信息图如图7-31所示:

图7-31 管理员信息图

(6)任何一个购物系统都会生成其订单,订单的属性大同小异,本系统的订单信息图如图7-32所示:

图7-32 订单信息图

(7)留言时用户在论坛的评论信息,有五个属性,本系统的留言信息图如图7-33所示:

图7-33 留言信息图

(8)用户查询以及购买蛋糕E-R图如图7-34所示:

图7-34 查询购买蛋糕E-R图

7.3.2.2 数据库的逻辑结构设计 逻辑结构设计一般分成三个步骤:

(1)首先使用关系模型、网状模型或者层次模型表示概念结构。

(2)再用特定数据库管理系统支持的数据模型来表示转换过来的关系模型、网状 模型和层次模型。 (3)优化数据模型。

根据E-R模型,网上蛋糕销售系统建立了以下逻辑数据模型。

用户(用户ID,用户名,用户密码,姓名,性别,联系方式,住址,年龄,邮箱) 蛋糕类别(类别ID,类别名称,类别介绍)

蛋糕信息(蛋糕ID,类别ID,名称,介绍,蛋糕封皮,蛋糕价格,蛋糕特价) 公告(公告ID,公告标题,公告内容,发布日期) 管理员(编号,用户名,密码)

订单(订单ID,编号,下单时间,订单状态,送货地址,付款方式,总金额,会员ID)

留言(编号,留言标题,留言内容,留言时间,留言用户)

(1)user表即用户表,表中对用户的各个属性进行了约束,该系统的user表如表 7-3所示。

表7-3 user表

列名 user_id user_name user_pw user_realname user_sex user_tel user_address user_age user_email 数据类型 长度 允许空 是否主键 int varchar varchar varchar varchar varchar varchar varchar varchar 11 50 50 50 50 50 255 50 50 否 否 否 否 否 否 否 否 否 是 否 否 否 否 否 否 否 否 说明 用户ID 用户名 用户密码 姓名 性别 联系方式 住址 年龄 邮箱 (2)catelog是类别的意思,catelog表是对蛋糕类别的属性进行约束,本系统 的catelog表如表7-4所示。

表7-4 catelog表

列名 catelog_id catelog_name catelog_miaoshu 数据类型 int varchar varchar 长度 11 50 50 允许空 否 否 否 是否主键 是 否 否 说明 类别ID 类别名称 类别介绍 (3)goods,在这里代表的是蛋糕,goods信息即蛋糕信息,这里的goods表是 对蛋糕信息中的蛋糕属性进行约束,该系统的goods表如表7-5所示。

表7-5 goods表

列名 goods_id goods_catelog_id goods_name goods_miaoshu goods_pic goods_shichangjia goods_tejia 数据类型 int int varchar text varchar int varchar 长度 允许空 是否主键 11 4 50 0 50 11 50 否 否 否 否 否 否 否 是 否 否 否 否 否 否 说明 图书ID 类别ID 名称 介绍 图书封皮 图书价格 图书特价 (4)gonggao表是对系统公告的属性进行约束,gonggao表记录了系统公告的相 关信息,该系统的公告表如表7-6所示。

表7-6 gonggao表

列名 gonggao_id gonggao_title gonggao_content gonggao_data 数据类型 长度 允许空 是否主键 int varchar text varchar 11 50 0 50 否 否 否 否 是 否 否 否 说明 公告ID 公告标题 公告内容 发布日期 (5)admin从词义理解就是管理员的administrator的缩写,它代表的是管理员, 对管理员的属性进行约束。本系统的admin表如表7-7所示。

表7-7 admin表

列名 userId userName userPw 数据类型 int varchar varchar 长度 11 50 50 允许空 是否主键 否 否 否 是 否 否 说明 编号 用户名 密码 (6)order表是订单表,其中记录了订单的相关信息,表中对订单的属性进行了 约束,本系统的order表如表7-8所示。

表7-8 order表

列名 order_id order_bianhao order_data 数据类型 长度 允许空 是否主键 int varchar varchar 11 50 50 50 50 50 11 11 否 否 否 否 否 否 否 否 是 否 否 否 否 否 否 否 说明 订单ID 编号 下单时间 订单状态 送货地址 付款方式 总金额 会员ID order_zhuangtai varchar songhuodizhi fukuanfangshi jine user_id varchar varchar int int (7)liuyan表记录系统论坛的评论留言,其中对留言的属性进行相关约束,本 系统的liuyan表如表7-9所示。

表7-9 liuyan表

列名 id title content data user 数据类型 长度 允许空 是否主键 int varchar text varchar varchar 11 50 0 50 50 否 否 否 否 否 是 否 否 否 否 说明 编号 留言标题 留言内容 留言时间 留言用户 7.3.2.3 数据库的连接原理

这里先说明一下hibernate连接数据库的原理。Hibernate连接数据库主要是通过hibernate.cfg.xml配置文件中的配置。在这个文件中定义了数据库进行连接所需要的信息,包括JDBC驱动、用户名、密码、数据库方言等,configuration类借助dom4j的XML解析器解析设置环境,然后使用这些环境属性来生成 SessionFactory。这样这 个sessionFactory生成的session就能成功获得数据库的连接。

该系统就是采用Hibernate框架连接数据库,首先编写Hibernate配置文件,连接到数据库,然后编写PO,以及Hibernate的映射文件,最后编写DAO,使用Hibernate

进行对数据库的操作。利用Hibernate实现对数据库的操作,首先会生成一个SessionFactory,然后每一次的操作,SessionFactory会产生一个session。 添加操作利用session将数据保存到数据库中Session.save(object),如果该对象的主键内容在表中存在,则抛出异常。为了避免这个问题,可以使用

Session.saveOrUpdate(object),如果主键在数据库中存在,就修改数据,否则保存数据。

连接数据库的主要代码如下:

value=\"jdbc:mysql://localhost:3306/db_tushu?useUnicode=true&amp;amp;amp;amp;amp;characterEncoding=utf-8\">

7.3.3 中文乱码问题处理

乱码是由于系统或软件缺乏对某种字符编码的支持而产生的不能正常阅读的混乱字符。在软件开发的过程中,经常会出现乱码,这些乱码是可以通过修改系统属性来调整的。在该系统中,以utf-8编码为例,一旦出现乱码可以通过以下步骤调整属性:

(1)右键单击工程名称shop,在出现的列表中选择Properties选项;

(2)完成上一步后会出现一个Properties for shop的窗口,该窗口中间一部分为 Text file encoding,其下有两栏,选择Other,选择后单击下拉列表,选中UTF-8,确认。如图7-35所示。

图7-35 更改属性

按以上方法修改之后,再次打开页面,页面就会恢复正常,不会再出现乱码。

结 论

毕业论文是本科学习即将结束之际一次非常难得也必须完成的理论与实际相结合的契机,此次毕业设计我选择了网上蛋糕销售系统这个题目,在自己的努力以及同学和指导老师的帮助下终于完成。在完成这个题目的过程中,我不再是只局限于理论的知识,理论与实践的结合充分锻炼了我的能力,其中包括对基础知识运用的能力,还有解决实际问题的能力。以前我总觉得我们这个专业学的课程很杂,不仅软硬件都学习了,常见的编程语言我们也都学了一遍,我一直认为我们学习的不够精细,在以后的工作中不会有太大的用处,但通过这次的毕业设计,我发现好多学到的东西都用到了,譬如软件工程、软件测试、JAVA、J2EE、数据库等课程,因此我也发现了杂也有杂的好处,因为学的杂,所以学的知识也够全面,真正地开发一个系统是需要各种知识相结合的。

论文是毕业设计的重中之重。编写论文的过程中,为了使论文更加完美,我进行了大量的书籍查阅,这个查阅的过程让我受益匪浅。查找文献提高了我的自主动手能力,编写论文规范了我的写作能力,论文中经常要作图,所以我的绘图能力也得到了显著提高。论文要从大局着眼,通过对掌控整体内容,取舍局部内容,以及仔细斟酌处理细节问题,我的思维能力得到了很好的发展,经验也更为丰富。在一遍又一遍的修改论文的过程中,我的抗压能力和耐力都得到了不同程度的提升。

开发系统的过程中用到了很多先进的技术,虽然在基地我们有经过这些训练,但毕竟学的比较浅显,在这段时间里,我到互联网上查找了很多关于这些技术的相关资料,尤其是J2EE的开发资料。查找到的这些资料使我更加了解JSP界面,以及MVC框架,还有spring、struts、hibernate三大开源框架。Spring框架是对事物操作的一种机制,是数据库事物管理机制。Hibernate框架是用来数据库映射。Struts框架控制跳转。通过了解这些,我做毕业设计时更加得心应手。但在这过程中,还是遇到了很多问题。例如属性里定义的是type=“text”,但我要实现的是输入密码时隐藏,应该改为type=“password”才能实现。

在毕业设计中,我不仅运用了MVC框架和spring、struts、hibernate技术,还用到了JSP技术,并且学习到了一种新的数据库--mysql数据库。将这些技术全部结合到一起后,我所做的网上蛋糕销售系统的综合性能得到了显著地提高。所有运用到的技术在论文中我都做了详细的介绍。网上蛋糕销售系统虽然完成了,但是还是有一些瑕疵,在系统详细设计中,我已经间接说明了这些不足。在以后的日子里,我会以此鞭策自己,

深入研究,让这个系统尽可能做到完美,达到尽善尽美的地步。

在现代这个高速发展的经济社会,我所学的知识更新换代的速度远远超过了其他的知识,这就使得我不得不继续深入学习,当然这种学习并不是说只能在校园里,在工作中同样能够快速学习,并且效率比在校园中会高出很多。这次的毕业设计为我以后的学习和研究奠定了基础,在毕业设计中,我的各种能力都得到了锻炼,这一次的亲自动手开发系统也让我熟练地将理论知识应用到了实际操作上,这让我很有成就感。这一次小的成功一定能为我未来的工作起到很大的作用。

参考文献

[1]黄敏学 . 电子商务 ,高等教育出版社 ,2001年6月第1版 [2]李源彬 . 电子商务概论 ,人民邮电出版社 ,2004年6月第1版 [3]薛华成 . 管理信息系统 ,清华大学出版社 ,2003年12月第4版 [4]萨师煊. 数据库系统概论 ,高等教育出版社 ,2000年2月第3版 [5]张海藩. 软件工程 ,人民邮电出版社 ,2002年3月第1版

[6]张登辉 . ASP编程基础及应用 ,机械工业出版社,2003年3月第1版 [7] 李源彬 ,电子商务概论 ,人民邮电出版社 2004年6月第1版

[8]王君学 . 网页制作基础FrontPage2002 ,人民邮电出版社 ,2001年6月第1版 [9]编程起步 ,人民邮电出版社 ,2001年4月第1版 [10]编程起步 .人民邮电出版社 ,2002年二月第1版

[11]Data C J.An Introducetion to Database System(Ed.6).Addision_Wesley,1995 [12]Ullman J D.Principles of Database Systems.Computer SciencePress,1980 [13]

致 谢

从大四上学期末至今,将近四个月的时间,主要忙于实习与毕业设计两项重大的工程。毕业设计对于我们而言,是极其重要的一项工程,是对我们大学四年的一个检测。虽然平时上课认真听讲,争取把老师教的东西都能学到,但是当真正应用起来才发现比想象中的困难的多。

课上所学的大部分都是理论知识,就算是实践也是在老师的悉心指导下完成。而当我们离开了老师,自己独挡一面的时候,就会发现困难重重。但很庆幸的是我遇到了一个很好的毕业设计指导老师,也遇到了很好的基地老师。每当有问题,老师会不厌其烦地讲解给我们听。还记得前几天需要交中期检查表,毕业设计任务书以及程序的视频展示。中期检查表中我们的对勾不符合要求,基地老师就把所要用的对勾符号的查找步骤详细地解释给我们看。检查表后期要求了字数,因此修改后的检查表从一页变成了两页,我问指导老师打印的事情时,她告诉我先不要打,等她和其他老师讨论之后再通知我打印,当天下午我就收到了老师的邮件。还有毕业设计任务书的格式,视频的格式,指导老师都一一给我发邮件告诉我哪里需要修改。我从来没有遇到过这么有耐心的老师,老师的负责让我很感动,为此,我只有更加努力地完成毕业设计,才对得起老师。对我的指导老师,我深感佩服。

然而,在此次别业设计中,不仅提高了我的独立性,而且也提高了我的动手能力。与此同时,我也更加了解了每一个网站背后的程序员的不易与伟大。仅仅是一个网上蛋糕销售系统,我完成后都会有很强的成就感,更别说类似淘宝、当当等大型网站了。 最后,在完成毕业设计的过程中,身边的同学也给了我很大的帮助,我有不懂的地方问他们,他们也从来都不吝啬,倾尽所能地教我。在此,我对他们以及指导老师表达深深的谢意。

外文原文

The Design of JDBC

From the start, the developers of the Java technology were aware of the potential that Java showed for working with databases. In 1995, they began working on extending the standard Java library to deal with SQL access to databases. What they first hoped to do was to extend Java so that a program could talk to any random database using only “pure” Java. It didn’t take them long to realize that this is an impossible task: There are simply too many databases out there, using too many protocols. Moreover, although database vendors were all in favor of Java providing a standard network protocol for database access, they were only in favor of it if Java used their network protocol.

What all the database vendors and tool vendors did agree on was that it would be useful for Java to provide a pure Java API for SQL access along with a driver manager to allow third-party drivers to connect to specific databases. Database vendors could provide their own drivers to plug in to the driver manager. There would then be a simple mechanism for registering third-party drivers with the driver manager.

This organization follows the very successful model of Microsoft’s ODBC which provided a C programming language interface for database access. Both JDBC and ODBC are based on the same idea: Programs written according to the API talk to the driver manager, which, in turn, uses a driver to talk to the actual database.

This means the JDBC API is all that most programmers will ever have to deal with.

JDBC Driver Types

The JDBC specification classifies drivers into the following types:

• A type 1 driver translates JDBC to ODBC and relies on an ODBC driver to communicate with the database. Early versions of Java included one such driver, the JDBC/ODBC bridge. However, the bridge requires deployment and proper configuration of an ODBC driver. When JDBC was first released, the bridge was handy for testing, but it was never intended for production use. At this point, many better drivers are available, and we advise against using the JDBC/ODBC bridge.

• A type 2 driver is written partly in Java and partly in native code; it communicates with the client API of a database. When using such a driver, you must install some platform-specific code onto the client in addition to a Java library.

• A type 3 driver is a pure Java client library that uses a database-independent protocol to communicate database requests to a server component, which then translates the requests into a database-specific protocol. This simplifies deployment because the platform-specific code is located only on the server.

• A type 4 driver is a pure Java library that translates JDBC requests directly to a database-specific protocol.

Most database vendors supply either a type 3 or type 4 driver with their database. Furthermore, a number of third-party companies specialize in producing drivers with better standards conformance, support for more platforms, better performance, or, in some cases, simply better reliability than the drivers provided by the database vendors. In summary, the ultimate goal of JDBC is to make possible the following:

• Programmers can write applications in the Java programming language to access any database, using standard SQL statements (or even specialized extensions of SQL) while still following Java language conventions.

• Database vendors and database tool vendors can supply the low-level drivers. Thus, they can optimize their drivers for their specific products. Note

If you are curious as to why Java just didn’t adopt the ODBC model, the reason, as given at the JavaOne conference in 1996, was this: • ODBC is hard to learn.

• ODBC has a few commands with lots of complex options. The preferred style in the Java programming language is to have simple and intuitive methods, but to have lots of them. • ODBC relies on the use of void* pointers and other C features that are not natural in the Java programming language.

• An ODBC-based solution is inherently less safe and harder to deploy than a pure Java solution.

Database URLs

When connecting to a database, you must use various database-specific parameters such as host names, port numbers, and database names.

JDBC uses a syntax similar to that of ordinary URLs to describe data sources. Here are examples of the syntax:

jdbc:derby://localhost:1527/COREJAVA;create=true jdbc:postgresql:COREJAVA

These JDBC URLs specify a Derby database and a PostgreSQL database named COREJAVA.

The general syntax is jdbc:subprotocol:other stuff where a subprotocol selects the specific driver for connecting to the database.

The format for the other stuff parameter depends on the subprotocol used. You will need to look up your vendor’s documentation for the specific format. Metadata

In the preceding sections, you saw how to populate, query, and update database tables. However, JDBC can give you additional information about the structure of a database and its tables. For example, you can get a list of the tables in a particular database or the column names and types of a table. This information is not useful when you are implementing a business application with a predefined database. After all, if you design the tables, you know their structure. Structural information is, however, extremely useful for programmers who write tools that work with any database.

In SQL, data that describe the database or one of its parts are called metadata (to distinguish them from the actual data stored in the database). You can get three kinds of metadata: about a database, about a result set, and about parameters of prepared statements. To find out more about the database, request an object of type DatabaseMetaData from the database connection.

DatabaseMetaData meta = conn.getMetaData();

Now you are ready to get some metadata. For example, the call ResultSet mrs =

meta.getTables(null, null, null, new String[] { \"TABLE\" }); returns a result set that contains information about all tables in the database. (See the API note at the end of this section for other parameters to this method.)

Each row in the result set contains information about a table in the database. The third column is the name of the table. (Again, see the API note for the other columns.) The following loop gathers all table names:

while (mrs.next()) tableNames.addItem(mrs.getString(3)); There is a second important use for database metadata. Databases are complex, and the SQL standard leaves plenty of room for variability. Well over a hundred methods in the DatabaseMetaData interface can inquire about the database, including calls with such exotic names as

meta.supportsCatalogsInPrivilegeDefinitions() and meta.nullPlusNonNullIsNull() Clearly, these are geared toward advanced users with special needs—in particular, those who need to write highly portable code that works with multiple databases.

Transactions

You can group a set of statements to form a transaction. The transaction can be committed when all has gone well. Or, if an error has occurred in one of them, it can be rolled back as if none of the statements had been issued.

The major reason for grouping statements into transactions is database integrity. For example, suppose we want to transfer money from one bank account to another. Then, it is important that we simultaneously debit one account and credit another. If the system fails after debiting the first account but before crediting the other account, the debit needs to be undone.

If you group update statements into a transaction, the transaction either succeeds in its entirety and can be committed, or it fails somewhere in the middle. In that case, you can carry out a rollback and the database automatically undoes the effect of all updates that occurred since the last committed transaction.

By default, a database connection is in autocommit mode, and each SQL statement is committed to the database as soon as it is executed. Once a statement is committed, you cannot roll it back. Turn off this default so you can use transactions:

conn.setAutoCommit(false);

Create a statement object in the normal way:

Statement stat = conn.createStatement(); Call executeUpdate any number of times: stat.executeUpdate(command1); stat.executeUpdate(command2); stat.executeUpdate(command3); . . .

If all statements have been executed without error, call the commit method: conn.commit();

However, if an error occurred, call conn.rollback();

Then, all statements since the last commit are automatically reversed. You typically issue a rollback when your transaction was interrupted by a SQLException. Logging

into troublesome code to gain insight into program behavior. Of course, once you have figured out the cause of trouble, you remove the print statements, only to put them back in when the next problem surfaces. The logging API is designed to overcome this problem. Here are the principal advantages of the API:

• It is easy to suppress all log records or just those below a certain level, and just as easy to turn them back on.

• Suppressed logs are very cheap, so that there is only a minimal penalty for leaving the logging code in your application.

• Log records can be directed to different handlers—for displaying in the console, writing to a file, and so on.

• Both loggers and handlers can filter records. Filters can discard boring log entries, using any criteria supplied by the filter implementor.

• Log records can be formatted in different ways—for example, in plain text or XML. • Applications can use multiple loggers, with hierarchical names such as com.mycompany.myapp, similar to package names.

• By default, the logging configuration is controlled by a configuration file. Applications can replace this mechanism if desired.

Collection Interfaces

The initial release of Java supplied only a small set of classes for the most useful data structures: Vector, Stack, Hashtable, BitSet, and the Enumerationinterface that provides an abstract mechanism for visiting elements in an arbitrary container.

That was certainly a wise choice—it takes time and skill to come up with a comprehensive collection class library.

With the advent of Java SE 1.2, the designers felt that the time had come to roll out a full-fledged set of data structures. They faced a number of conflicting design challenges. They wanted the library to be small and easy to learn. They did not want the complexity of the Standard Template Library (or STL) of C++, but they wanted the benefit of “generic algorithms” that STL pioneered. They wanted the legacy classes to fit into the new framework. As all designers of collections libraries do, they had to make some hard choices, and they came up with a number of idiosyncratic design decisions along the way. In this section, we will explore the basic design of the Java collections framework, show you how to put it to work, and explain the reasoning behind some of the more controversial features. Actions

It is common to have multiple ways to activate the same command. The user can choose a certain function through a menu, a keystroke, or a button on a toolbar. This is easy to achieve in the AWT event model: link all events to the same listener. For example, suppose blueActionis an action listener whose actionPerformedmethod changes the background color to blue. You can attach the same object as a listener to several event sources: • A toolbar button labeled “Blue” • A menu item labeled “Blue” • A keystroke Ctrl+B

The color change command will now be handled in a uniform way, no matter whether it was caused by a button click, a menu selection, or a key press.

Interfaces

In the Java programming language, an interface is not a class but a set of requirements for the classes that want to conform to the interface.

Typically, the supplier of some service states: “If your class conforms to a particular interface, then I’ll perform the service.” Let’s look at a concrete example. The sort method of the Arraysclass promises to sort an array of objects, but under one condition: The objects must belong to classes that implement the Comparable interface. Here is what the Comparable interface looks like:

public interface Comparable {

int compareTo(Object other); }

This means that any class that implements the Comparable interface is required to compareTo Object have a method, and the method must take an parameter and return an integer.

中文翻译

JDBC的设计

从一开始,Java技术的开发人员就意识到潜在的Java显示处理数据库。1995年,他们开始着手扩展标准Java库以处理SQL访问数据库。他们首先希望做的是扩展Java,这样一个程序就可以只用java语言跟任何随机的数据库连接。他们意识到这是一项不可能完成的任务并没有花很多时间:简单地说,有太多的数据库,使用太多的协议。此外,尽管数据库厂商都支持Java数据库访问提供一个标准的网络协议,他们也只赞成java数据库使用他们的网络协议。

所有的数据库供应商和工具厂商达成一致的是,Java API提供的是一个纯Java SQL访问以及驱动程序管理器,它允许第三方驱动程序连接到特定的数据库,这也许是有效果的。数据库供应商可以提供自己的驱动程序插入到驱动程序管理器。然后会有一个简单的机制与驱动程序管理器注册第三方驱动程序。

这个组织提供了一个非常成功的微软ODBC模型,这个模型提供了一个C编程语言对数据库的访问接口。JDBC和ODBC都是基于相同的想法:根据API编写的程序和驱动程序管理器,反过来,使用一个驱动程序连接实际的数据库。

这意味着JDBC API是大多数程序员会需要处理的。

JDBC驱动类型

JDBC规范将驱动程序分为以下类型:

· 驱动类型1将JDBC转换为ODBC,并且依赖于ODBC驱动程序与数据库通信。早期版本的Java包含这样一个驱动,JDBC / ODBC桥。然而,这座桥需要部署和适当的配置ODBC驱动程序。JDBC第一次发布时,这座桥是方便测试,但它从来没有用于生产使用。在这一点上,有许多更好的驱动,我们建议不要使用JDBC / ODBC桥。

· 类型2驱动程序写在Java和本地代码;它与数据库的客户端API进行交互。当使用这样的一个驱动程序,您必须安装一些特定于平台的代码到客户端用来连接Java库。

· 类型3驱动程序是纯Java的客户端库,该库使用一个数据库协议请求到服务器通信组件,然后将请求转换为一个特定于数据库的协议。这简化了部署,因为特定于平台的代码只位于服务器上。

· 类型4驱动程序是一个纯Java库,将JDBC直接请求一个特定于数据库的协议。 大多数数据库厂商供应类型3或类型4驱动程序与数据库。此外,大量的第三方公司专门从事生产驱动更好的一致性标准,支持更多的平台,更好的性能,或者,在某些情况下,比数据库厂商提供的驱动程序更有简单的可靠性。

总之,JDBC的最终目标是使以下内容成为可能:

·程序员可以使用标准的SQL语句(甚至专业扩展SQL)用java语言编写应用程序访问任何数据库,同时遵循Java语言规范。

·数据库厂商和数据库工具供应商可以提供底层驱动程序。因此,他们可以为他们的特定的产品优化他们的驱动。

笔记

如果你好奇为什么Java只是没有采用ODBC模型,考虑到在1996年的JavaOne大会,原因是这样的:

·ODBC学起来困难;

·ODBC有几个命令有很多复杂的选项。首选的Java编程语言的风格是简单而直观的方法,而不是很繁复的。

·ODBC依靠void *指针的使用和其他C语言特性,但在Java编程语言中显得不自然。

·ODBC-based解决方案本质上是不安全的,是比纯Java更难部署的解决方案。

数据库的URLs

当连接到一个数据库时,您必须使用各种特定于数据库的参数,比如主机名、端口号和数据库名称。

JDBC使用语法类似于普通url来描述数据源。这里有语法的例子: jdbc:derby://localhost:1527/COREJAVA;create=true

jdbc:postgresql:COREJAVA

这些JDBC url指定Derby数据库和一个名为COREJAVA的PostgreSQL数据库。 一般的语法是jdbc:subprotocol:其他东西如subprotocol选择特定的驱动程序连接到数据库。

其他东西的格式参数取决于subprotocol使用。你需要查找供应商的特定格式的文

档。

元数据

在前面的部分中,您看到了如何填充,查询和更新数据库表。然而,JDBC可以给你额外的关于数据库及其表的结构的信息。例如,您可以得到特定数据库表的一个列表或表的列的名称和类型。当你实现一个业务应用程序与一个预定义的数据库时这些信息并不一定是有用的。毕竟,如果你设计了这些表,你会知道它们的结构。然而,结构信息对于使用任意数据库的程序员来说是非常有用的编写工具。

在SQL中,描述数据库或它的一个部分的数据称为元数据(区别于存储在数据库中的实际数据)。这里有三种元数据:一个与数据库有关、一个与结果集有关,还有准备好的语句的参数。

从数据库连接找到更多关于数据库请求DatabaseMetaData类型的对象。 DatabaseMetaData meta = conn.getMetaData();

现在你可以得到一些元数据。例如,the call ResultSet mrs =

meta.getTables(null, null, null, new String[] { \"TABLE\" });返回一个集合,这个集合包含数据库中所有表的信息。(看到这一节的API注意最后这个方法的其他参数。)

在数据库中的结果集中每一行包含一个表。第三列是表的名称。(再次提醒,请参阅API注意其他列。)以下循环收集所有表名:

当 (mrs.next()) tableNames.addItem(mrs.getString(3)),还有一个重要的数据库元数据使用。数据库是复杂的,并且SQL标准留下足够的空间变异性。超过一百DatabaseMetaData接口中的方法可以查询数据库,包括调用这种特异的名字如meta.supportsCatalogsInPrivilegeDefinitions()和

meta.nullPlusNonNullIsNull() 。显然,这些在面向高级用户时有特殊需要,尤其是那些使用多个数据库,需要编写高度可移植代码的人。

交换

你可以用一组语句组成一个事务。交换可以使提交事务时,一切顺利。或者,如果其中一个发生了错误,它可以回滚,就像所有的语句都成功一样。

将语句分组交换的主要原因是数据库的完整性。例如,假设我们从一个银行账户转

账到另一个地方。然后,很重要的是,我们同时借记账户和信用。如果系统借第一个帐户失败,在另一个账户之前,借方需要撤销。

如果你update语句分组在一个事务,事务要么完整地成功,可以提交,或者在中间某环节失败。在这种情况下,您可以进行回滚并且数据库会自动解除自上次提交后的影响发生的所有更新事务。

默认情况下,数据库连接处于自动提交模式,每个SQL语句被提交到数据库尽快执行。一旦提交一份声明,你不能回滚该事务。关掉这个默认,你就可以使用事务:conn.setAutoCommit(false)。

以正常的方式创建一个声明对象:

Statement stat = conn.createStatement(); Call executeUpdate any number of times: stat.executeUpdate(command1); stat.executeUpdate(command2); stat.executeUpdate(command3); . . .

如果所有语句都执行没有错误,调用commit方法:conn.commit()。然而,只要发生一个错误,回滚事务,调用conn.rollback()。

然后,所有语句自上次提交自动逆转。当交换被SQLException异常打断时,你通常回滚事务。 登录

每个Java程序员都熟悉在麻烦的代码中插入调用System.out.println来了解程序的行为。当然,一旦你找到了问题的原因,你可以删除打印语句,只把他们当未来问题的表面。日志API的设计就是用来克服这个问题。这里是API的主要优势:

· 压制所有日志记录或者只是那些低于一定水平的记录是很容易的,就像容易把他们返回一样。

· 抑制日志是非常便宜的,所以在您的应用程序中只有最小惩罚离开日志代码。

· 日志记录可以针对不同的处理程序显示在控制台,如写入一个文件,等等。 ·记录器和处理程序都可以过滤记录。过滤器可以抛弃无聊的日志条目,使用过滤系统提供的任何标准。

·日志记录可以通过不同途径进行格式化——比如,在纯文本或XML。

·应用程序可以使用多个记录器,他们都有分层com.mycompany等名称。myapp,类似于包名称。

·默认情况下,日志配置由配置文件控制。如果需要应用程序可以取代这个机制。 集合接口

Java的最初版本只为最有用的数据结构提供少量的类:向量,堆栈,BitSet,和Enumerationinterface散列表,这些都是提供一个抽象的机制来访问元素的任意容器。

花费时间和技术提出一个全面的集合类库是一个明智的选择。

随着Java SE 1.2,设计者认为推出一套完整的数据结构的时机已到。他们面临一系列矛盾的设计挑战。他们希望图书馆要小,容易学习。他们不想要C + +的复杂的标准模板库(STL),但他们希望造福STL首创的“泛型算法”。他们希望遗产类适应新框架。作为设计师的所有集合库,他们必须做出一些艰难的选择,提出许多特殊的设计决策。在本节中,我们将探讨Java集合框架的基本设计,向您展示如何让它工作,并解释一些较有争议的后来出现的推理。 活动

通常有多种方法来激活相同的命令。用户可以通过工具栏的菜单选择一个按键或按钮完成特定的功能。这是很容易实现的AWT事件模型:链接到相同的所有事件监听器。例如,假设blueActionis操作侦听器的actionPerformedmethod背景颜色变成蓝色。您可以将相同的对象作为一个监听器附加到几个事件源: ·一个工具栏按钮“蓝色” ·标记为“蓝色”菜单项

·按键Ctrl + B

颜色改变命令将以统一的方式处理,无论它是由一个按钮单击,一个菜单选择或一个按键。 接口

在Java编程语言中,一个接口不是一个类是一组希望符合类要求的接口。 通常情况下,供应商的服务状态:“如果你的类符合一个特定的接口,那么我将执行

服务”。让我们看一个具体的例子。Arraysclass的排序方法承诺对对象数组进行排序,但有一个条件:对象必须属于类并且实现Comparableinterface。

这里是Comparableinterface的样子: public interface Comparable {

int compareTo(Object other); }

这意味着任何一个需要实现Comparableinterface 的类都要求compareTo对象有一个方法,这个方法必须得到一个参数并返回一个整数。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务