搜索
您的当前位置:首页信息系统项目管理

信息系统项目管理

来源:乌哈旅游
 综 合 实 训 报 告

课题名称 企业门户网站 专 业 信息管理与信息系统 班 级 信管 学 号

姓 名 快乐的小布丁 指导教师 *老师

2050 年 12月 6日

课程名称 信息系统项目管理

湖南工程学院 综 合 实 训 任 务 书

课程名称 信息系统项目管理 课 题 企业门户网站

专业班级 信管 学生姓名 快乐的小布丁 学 号 指导老师 *老师

审 批 任务书下达日期 2050 年 11 月 12 日 任务完成日期 2050 年 12 月 6 日

一、设计内容与设计要求

1.课程设

11.21 上午 计目的

熟悉、掌握项目管理基

全面信息系统

本知识,增强对不同的问题运用和灵活选择合适的数据结构以及项目管理描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,增强面向对象程序设计概念,熟悉java语言编程,养成提供文档资料的习惯和规范编程的思想,为后继课程的实验以及课程设计打下较扎实的基础。

进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程的实验以及课程设计,特别是自学、毕业论文的完成打下扎实的基础。

2.课题题目

⑴进销存管理系统 ⑵酒店管理系 ⑶企业门户网站 ⑷图书馆管理系统

3.设计要求:

⑴设计课题题目:按学号顺序(每15位学生选择一题)选择相应题号的课题。换题者不记成绩。

⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。②完成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。③完成系统详细设计:包括数据库需求分析;类层次图;界面设计与各功能模块实现。④系统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。⑤使用说明书及编程体会:说明如何使用你编写的程序,详细列出每一步的操作步骤。⑥关键源程序(带注释)

⑶按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。 ⑷不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。

二、进度安排

课题1:管理系

(一)、题目:

进销

下午 11.22 上午 上午 11.24 下午 上午 11.28 晚上 上午 11.29 下午 上午 12.30 下午 进销存统

课程设计

存管理系统

(二)、求:

1、目(1)到熟练掌言的基本能;

目的与要

的: 要求学生达握java语知识和技

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求:

(1)要求利用面向对象的方法以及java的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中定义类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书

(三)、设计方法和基本原理:

1、问题描述(功能要求):

某公司现有进销存物品,要求对所有的库存设备都能按照品名进行显示、查找、入库和出库、保存的功能。

进销存物品有下列属性:尺寸、类型、售价、重量、品牌、入库编号 2、问题的解决方案:

根据系统功能要求,可以将问题解决分为以下步骤: (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次;

(3)完成类层次中各个类的描述(包括属性和方法); (4)完成类中各个成员函数的定义;

(5)完成系统的应用模块; (6)功能调试;

(7)完成系统总结报告以及系统使用说明书。

课题2:酒店管理系统

(一)、课程设计题目:

酒店管理系统

(二)、目的与要求:

1、目的:

(1)要求学生达到熟练掌握java语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求:

(1)要求利用面向对象的方法以及java的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中定义类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书

(三)、设计方法和基本原理:

1、问题描述(功能要求):

酒店管理系统的需求包括开台点菜功能、智能化获取菜品功能、自动结账功能、营业额报表功能等。依据餐饮行业的特点,本系统实现以下目标:

 操作简单方便、界面简洁大方。  方便快捷的开台点菜功能。  智能化定位菜品的功能。  快速查看开台点菜信息的功能。  自动结账功能。

 按开台和商品实现的日结账功能。  按日消费额汇总统计实现的月结账功能。  按日营业额实现的年结账功能。  系统运行稳定、安全可靠。 2、问题的解决方案:

根据系统功能要求,可以将问题解决分为以下步骤: (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次;

(3)完成类层次中各个类的描述(包括属性和方法); (4)完成类中各个成员函数的定义; (5)完成系统的应用模块; (6)功能调试;

(7)完成系统总结报告以及系统使用说明书。

课题3:企业门户网站

(一)、课程设计题目:

企业门户网站

(二)、目的与要求:

1、目的:

(1)要求学生达到熟练掌握java语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求:

(1)要求利用面向对象的方法以及java的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中定义类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书

(三)、设计方法和基本原理:

1、问题描述(功能要求):

企业门户网站的最终目的是为企业提供一个简单、易用、开放、可扩展的企业信

息门户平台。通过需求分析以及与客户的沟通,现制定网站实现目标如下:

 网站使用人性化设计,界面友好、安全、实用。  网站操作便捷并具有高度信息延续性、可扩展性。

 提供建立在关系型数据库系统上的数字信息组织、管理、查询等功能。  对用户输入的数据进行严格的数据检索,尽可能地排除人为错误。  最大限度地实现网站易维护性和易操作性。

2、问题的解决方案:

根据系统功能要求,可以将问题解决分为以下步骤: (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次;

(3)完成类层次中各个类的描述(包括属性和方法); (4)完成类中各个成员函数的定义; (5)完成系统的应用模块; (6)功能调试;

(7)完成系统总结报告以及系统使用说明书。

课题4:图书馆管理系统

(一)、课程设计题目:

图书馆管理系统

(二)、目的与要求:

1、目的:

(1)要求学生达到熟练掌握java语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求:

(1)要求利用面向对象的方法以及java的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中定义类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书

(三)、设计方法和基本原理:

1、问题描述(功能要求):

图书馆管理系统是图书馆管理工作中不可缺少的部分,它对于图书馆的管理者和使

用者都非常重要,所以图书馆管理系统应该为管理者与读者提供充足的信息和快捷的数据处理手段,但长期以来,人们使用传统的人工方式或性能较低的图书馆管理系统管理图书馆的日常事务,操作流程比较繁琐。一个成功的图书馆管理系统应提供快速的图书信息检索功能、快捷的图书借阅、归还流程。本系统具有以下特点:

 确保系统具有良好的系统性能,友好的用户界面。

 较高的处理效率,便于使用和维护。

 采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期。  系统尽可能简化图书馆管理员的重复工作,提高工作效率。  简化数据查询、统计难度。 2、问题的解决方案:

根据系统功能要求,可以将问题解决分为以下步骤: (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次;

(3)完成类层次中各个类的描述(包括属性和方法); (4)完成类中各个成员函数的定义; (5)完成系统的应用模块; (6)功能调试;

(7)完成系统总结报告以及系统使用说明书。

目 录

3.1 辅助JavaBean的编写 .......................................... 6 3.2 基本数据库操作的JavaBean的编写 .............................. 6 3.3 字符串处理的JavaBean“StringUtils”的编写 ................... 9 3.4 字符串处理的JavaBean“ParamUtils”的编写 ................... 13 3.5 Final常量JavaBean的编写 ................................... 13 3.6 判断用户身份的JavaBean的编写 ............................... 14 3.7 输出实用HTML代码的JavaBean的编写 ........................................ 16 7 7 7 8 0 0 1 1 8 9

一、 系统需求分析

通过相关调查,要求网站具有以下功能:

           

通过前台全面介绍企业的软件产品并提供软件下载。 在前台为针对性问题提供解决方案。 前台在线解答用户常见问题。 提供软件补丁下载的功能。

提供用户注册、登录、用户名和密码修改的功能。 需提供在线留言簿,方便用户留言。 为用户设置论坛模块。

通过后台对用户信息进行管理,包括设置用户权限和查询用户信息等功能。

在后台可以管理公告信息、新闻信息、论坛头像、友情链接。 通过后台对软件类别及前台提供的软件和软件补丁进行管理。 通过后台管理问题解决方案、常见问题解答等信息。 对用户留言信息进行回复和管理。

二、 总体设计

2.1总体设计图

企业门户网站前台功能结构,如下图所示。

企业门户网站前台 首页 产品地带 解决方案 技术支持 客户渠道 论坛 软网件站下公载告排行 工具补丁下载排行 友情链接 新闻热点 产品介绍 产品分类 解决方案详细信息 常见问题 工具下载 补丁下载 企业门户网站后台功能结构,如图2所示。

用户注册 用户登录 用户修改 留言薄 论坛详细信息 企业门户网站后台 用户管理 字段名 fid fsid state title uid iid ftime 用户查找 论坛头像管理 公告管理 新闻中心管理 友情链接管理 软件类别管理 软件资源管理解决方案管理 常见问题管理 留言薄管理 工具下载管理 论坛版块管理 论坛管理 图2 企业门户网站后台功能结构图

2.2 各函数(模块文件)之间的调用关系

图C.1 网站前台首页架构图

图C.2 导航条架构图

2.3 数据结构及数据库

本系统数据库采用My SQL数据库,系统数据库名称为mingri。数据库mingri中包含14张表。

(1)forum(论坛主题信息表)

论坛主题信息表主要用于保存论坛中用户发表的主题信息。表forum的结构如表B.1所示。

表B.1 forum的结构

数据类型 int[11] int[11] int[11] varchar[200] varchar[50] varchar[50] datetime 默认值 NULL NULL NULL NULL NULL NULL NULL 是否为空 是否主键 PRI YES YES YES YES YES YES 描述 主题ID 版块ID 主题状态 标题 发帖人 贴图ID 发表时间 content renum hitnum text int[11] int[11] NULL NULL NULL YES YES YES 内容 回复数 人气值 (2)fsort(论坛版块信息表)

论坛版块信息表主要用于保存论坛中提供的版块信息。表fsort的结构如表B.2所示。

表B.2 fsort的结构 字段名 fsid State free name ftime uid resume 数据类型 int[11] int[11] int[11] varchar[50] datetime varchar[50] varchar[200] 默认值 NULL NULL 0 NULL NULL NULL NULL 是否为空 是否主键 PRI YES YES YES YES YES YES 描述 版块ID 版块类别 版块状态 版块名称 添加时间 添加人 描述 (3)guestboard(留言信息表)

留言信息表主要用于保存用户的留言信息。表guestboard的结构如表B.3所示。

表B.3 guestboard的结构 字段名 gid title guest gtime content gflag rtime reconte数据类型 int[11] varchar[100] varchar[50] datetime varchar[200] tinyint[1] datetime text 默认值 NULL NULL NULL NULL NULL 0 NULL NULL 是否为空 是否主键 PRI YES YES YES YES YES YES YES 描述 留言ID 留言标题 留言人 留言时间 留言内容 是否回复 回复时间 回复内容 nt (4)soft(软件信息表)

软件信息表主要用于保存公司的软件信息。表soft的结构如表B.4所示。

表B.4 soft的结构 字段名 sfid name edition price uptime uid iid sid environment filesize commend loadnum regular introduce path resume 数据类型 int[11] varchar[100] varchar[50] float datetime varchar[50] varchar[50] int[11] varchar[50] int[11] int[11] int[11] tinyint[1] text varchar[50] varchar[200] 默认值 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 是否为空 是否主键 PRI YES YES YES YES YES YES YES YES YES YES YES YES YES YES YES 描述 软件ID 软件名称 版本 价格 上传时间 上传人 贴图ID 软件类别ID 运行环境 程序大小 推荐指数 下载次数 是否为正式版本 简介 下载路径 其他说明 (5)ssort(软件类别信息表)

软件类别信息表主要用于保存软件类别信息。表ssort的结构如表B.5所示。

表B.5 ssort的结构 字段名 sid 数据类型 int[11] 默认值 NULL 是否为空 是否主键 PRI 描述 类别ID name resume varchar[50] varchar[100] NULL NULL YES YES 类别名称 类别简介 (6)user(用户信息表)

用户信息表主要用于保存用户信息,包括普通用户和管理员,由字段status的值进行区分,值1表示普通用户,值为0表示管理员。表user的结构如表B.6所示。

表B.6 user的结构 字段名 uid password name regqu reqanswer iid sex age tel email qq regtime address http status state resume 数据类型 varchar[50] varchar[50] varchar[50] varchar[50] varchar[50] varchar[50] tinyint[1] int[11] varchar[50] varchar[50] varchar[50] datetime varchar[200] varchar[50] int[11] int[11] varchar[250] 默认值 是否为空 是否主键 PRI YES YES YES YES 描述 用户名 密码 真实姓名 密码问题 密码答案 头像ID 性别 年龄 联系电话 Email地址 OICQ号码 注册时间 个人地址 NULL NULL NULL NULL YES YES YES YES YES YES YES YES YES YES YES NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 个人主页 权限级别 状态显示 个人简介 三、 详细设计

3.1 辅助JavaBean的编写

根据系统的需求编写需要的JavaBean。下面将给出企业门户网站中所需要的部分辅助JavaBean的编写过程。

3.2 基本数据库操作的JavaBean的编写

基本数据库操作的JavaBean是一个公共类,通常包括连接数据库的方法getConnection、获取结果集总记录数的方法getRow、删除数据的方法Delete等。下面将给出编写企业门户网站中的基本数据库操作的JavaBean“Database”的实现过程。

(1)先将“Database”保存到指定的包中,并导入所需的类包,并将其保存到“”包中,代码如下:

(2)定义Database类,并定义静态变量及构造方法,代码如下:

public class Database { //定义Database类

private static Connection con; //定义静态变量static private static String poolname = \"proxool.mingri\"; public Database() { //构造方法 } }

(3)创建连接数据库的方法getConnection,该方法返回Connection对象的一个实例。getConnection方法的代码如下:

public static Connection getConnection() { try {

Class.forName(proxool); //调用Class的forName方法加载数据库驱动程序类

con = DriverManager.getConnection(poolname); //获取Connection对象的引用

} catch (ClassNotFoundException e) { } catch (SQLException e) { }

if (con == null) { }

return con; }

(4)定义getRow方法获取结果集的总记录数。由于ResultSet对象没有提供直接获取结果集总行数的方法,所以此处需要定义获取结果集总行数的方法。getRow方法的代码如下:

public static int getRow(String sql) { int i = 0;

PreparedStatement ps = null; ResultSet rs = null; try {

ps = con.prepareStatement(\"SELECT COUNT(*) FROM \" + sql,

ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = ps.executeQuery(); if (rs.next()) {

i = rs.getInt(1); }

} catch (SQLException e) { i = 0; } finally { try {

rs.close(); //关闭ResultSet对象的一个实例 } catch (SQLException e) {} try {

ps.close(); //关闭PreparedStatement对象的一个实例 } catch (SQLException e) {} return i; } }

(5)定义删除数据的方法Delete,代码如下:

public static boolean Delete(String sql) { boolean b = false;

Connection con = null;

PreparedStatement ps = null; try {

con = Database.getConnection();

//调用getConnection方法连接数据库 ps = con.prepareStatement(sql); if (ps.executeUpdate() > 0) { b = true; } else {

b = false; }

} catch (SQLException e) { b = false;

e.printStackTrace(); } finally { try {

if (ps != null) {

ps.close(); //关闭PreparedStatement对象的一个实例 }

} catch (SQLException e) { ps = null; } try {

if (con != null) {

con.close(); //关闭Connection对象的一个实例 }

} catch (SQLException e) { con = null; } }

return b; }

3.3 字符串处理的JavaBean“StringUtils”的编写

在JSP中经常需要对输入或输出的字符串进行处理,通常将处理该问题的方法统一放置在一个单独的类中。在本实例中将其保存在StringUtils类中。StringUtils类的实现方法如下:

(1)定义StringUtils类、导入类中所需的包,并定义对字符串进行GBK编码的方法toChinese,代码如下:

public class StringUtils { //对字符串进行GBK编码

public static String toChinese(String strvalue) { try {

if (strvalue == null) { return \"\"; } else {

strvalue = new String(strvalue.getBytes(\"ISO8859_1\"), \"GBK\"); return strvalue; }

} catch (Exception e) { return \"\"; } } }

(2)编写对输入的字符串进行一次编码转换,防止SQL注入的方法StringtoSql,代码如下:

public static String StringtoSql(String str) { str = nullToString(str, \"\"); try {

str = str.trim().replace('\\'', (char) 1); } catch (Exception e) { return \"\"; }

return str; }

(3)编写对字符串进行二次编码转换,防止出库时异常的方法SqltoString,代码如下:

public static String SqltoString(String str) { str = nullToString(str, \"\"); try {

str = str.replace( (char) 1, '\\'').trim(); } catch (Exception e) { return \"\"; }

return str; }

(4)编写对字符串进行Unicode编码的方法toUnicode,代码如下:

public static String toUnicode(String strvalue) { try {

if (strvalue == null) { return null; } else {

strvalue = new String(strvalue.getBytes(\"GBK\"), \"ISO8859_1\"); return strvalue; }

} catch (Exception e) { return \"\"; } }

(5)编写判断是否为当前时间的方法compareNowTime,代码如下:

public static boolean compareNowTime(String date) {

SimpleDateFormat format = new SimpleDateFormat(\"yyyy-MM-dd\");

Date d = null; try {

d = format.parse(date);

} catch (ParseException ex) { }

return true; }

return false; }

(6)编写判断用户输入的是否是数字或字母的方法isID,代码如下:

public static boolean isID(String str) { if (str != null && str.length() > 0) {

if(str.charAt(0)<57&&str.charAt(0)>48) return false; for (int i = 0; i < str.length(); i++) {

if (str.charAt(i) < 65&&str.charAt(i) > 57 || str.charAt(i) > 90 && str.charAt(i)<97&&str.charAt(i)!=95||str.charAt(i)>122||str.charAt(i) < 48 ) { return false; } }

return true; }

return false; }

(7)对输入数据中的HTML字符进行转换的方法escapeHTMLTags,代码如下:

public static final String escapeHTMLTags(String input) { if (input == null || input.length() == 0) { return input; }

StringBuffer buf = new StringBuffer(input.length()); char ch = ' ';

for (int i = 0; i < input.length(); i++) { ch = input.charAt(i); if (ch == '<') {

buf.append(\"<\"); } else if (ch == '>') {

buf.append(\">\"); } else {

buf.append(ch); } }

return buf.toString(); }

(8)编写处理字符串中的空值的方法nullToString,代码如下:

public static final String nullToString(String v, String toV) { if (v == null) { v = toV; }

return v; }

(9)编写对SQL语句中输入的空值进行处理的方法SqlToLink,代码如下:

public static final String SqlToLink(String str) { str = StringUtils.nullToString(str, \"\"); if (\"\".equals(str)) { str = \" LIKE '%' \"; } else {

str = (\" LIKE '%\" + str + \"%' \"); }

return str; }

(10)编写将整型值转换为字符串的方法SqlToLink,代码如下:

public static final String SqlToLink(int i) { String str = \"\"; try {

str = new Integer(i).toString(); } catch (Exception e) {} if (i == -1) { str = \"\"; }

return StringUtils.SqlToLink(str); } }

3.4 字符串处理的JavaBean“ParamUtils”的编写

字符串处理的JavaBean“ParamUtils”主要用于对从JSP页中获取的数据进行规范化处理。ParamUtils类的实现方法如下:

(1)定义ParamUtils类、导入类中所需的包,并定义对传入要读取的表单信息及对读取的表单信息进行处理的方法getParameter,代码如下:

public class ParamUtils { //传入要读取的表单信息

public static String getParameter(HttpServletRequest request,String paramName) {

return getParameter(request, paramName, false);

//根据参数值的不同,调用同名的方法 }

//对表单信息读取后,对于空的信息及没有值的表单设置默认值,返回字符串 public static String getParameter(HttpServletRequest request, String paramName, String defaultStr) {

String temp = request.getParameter(paramName); if (temp != null) {

if (temp.equals(\"\")) { return defaultStr; } else {

return nullToString(temp); } } else {

return defaultStr; } } }

(2)编写将从表单中获取的字符串中的HTML标记中的<和>替换为相对应的HTML标记的方法getEscapeHTMLParameter,代码如下:

public static String getEscapeHTMLParameter(HttpServletRequest request, String paramName) {

return

nullToString(StringUtils.escapeHTMLTags(ParamUtils.getParameter(

request, paramName, true)));

}

(3)编写对表单信息读取后,对于空的信息及没有值的表单设置默认值,返回字符串的方法getParameter,代码如下:

public static String getParameter(HttpServletRequest request, String paramName, boolean emptyStringsOK) {

String temp = request.getParameter(paramName);

if (temp != null) {

if (temp.equals(\"\") && !emptyStringsOK) { return \"\"; } else {

return temp; } } else {

return \"\"; } }

(4)编写对于表单中的数字进行合法性验证,对于不合法的输入将该表单元素设置为默认值的方法getIntParameter,代码如下:

public static int getIntParameter(HttpServletRequest request, String paramName, int defaultNum) {

String temp = request.getParameter(paramName); if (temp != null && !temp.equals(\"\")) { int num = defaultNum; try {

num = Integer.parseInt(temp); // } catch (Exception ignored) {} return num; } else {

return defaultNum; } }

(5)编写对于表单中的整型数据进行处理的方法getIntParameter,代码如下:

public static int getIntParameter(HttpServletRequest request, String paramName)

{

return getIntParameter(request, paramName, 0); }

(6)编写对于空字符串进行处理的方法nullToString,代码如下:

public static String nullToString(String oldString) { if (oldString == null) { return \"\"; }

return oldString; }

public static String nullToString(String oldString,String defaultValue) {

oldString=nullToString(oldString); if(\"\".equals(oldString)){ return defaultValue; }

return oldString;

}

(7)编写对request信息进行处理的方法getRequestString,该方法主要调用前面定义的基本方法实现最终目的,代码如下:

public static String getRequestString(HttpServletRequest request,String s){ s=nullToString(s).trim();

s=ParamUtils.getEscapeHTMLParameter(request, s); s=StringUtils.toChinese(s); s=StringUtils.toUnicode(s); s=StringUtils.StringtoSql(s); return s; }

public static String getRequestString(Request request, String s) { s=nullToString(s).trim();

s=ParamUtils.getEscapeHTMLParameter(request, s); s=StringUtils.toUnicode(s); s=StringUtils.StringtoSql(s); return s; }

(8)编写对SQL字符串进行处理的方法getSqlString,该方法同样要调用前面定义的基本方法实现最终目的,代码如下:

public static String getSqlString(String s){ s=StringUtils.SqltoString(s); s=StringUtils.toChinese(s); s=nullToString(s).trim(); return s; }

(9)编写对request信息中的HTML标记符进行处理的方法getEscapeHTMLParameter,该方法需要调用StringUtils类中的escapeHTMLTags方法实现,代码如下:

public static String getEscapeHTMLParameter(Request request, String s) { return nullToString(StringUtils.escapeHTMLTags(request.getParameter(s))); }

(10)编写对request信息中的HTML标记符进行处理的方法getIntParameter,代码如下:

public static int getIntParameter(Request request, String s) { int defaultNum=0;

String temp = request.getParameter(s); if (temp != null && !temp.equals(\"\")) { int num = defaultNum;

try {

num = Integer.parseInt(temp); } catch (Exception ignored) {} return num; } else {

return defaultNum; } }

四、调试分析及设计体会

4.1 程序运行结果

在企业门户网站的首页中,用户不但可以查看网站的公司信息和新闻信息,而且还可以查看产品信息及工具软件和软件补丁的下载排行。铭宇科技的企业门户网站首页的运行结果如图4所示。 4.1.1 网站前台首页的运行结果

下面以列表形式给出前台页面各部分的说明信息,如表1所示。

区域 1 2 3 4 5 名称 网站导航 左侧文件 热点新闻 产品介绍 版权信息 说明 主要展示网站的旗帜广告和站内导航条 主要用于显示网站公告、工具软件下载排行、工具补丁下载排行、友情链接等信息 主要用于显示网站的热点新闻 主要用于网站的产品信息 显示网站版权信息 对应文件 top.jsp left.jsp new.jsp produce.jsp bottom.jsp 4.1.2 网站后台首页的运行结果 网站的后台主要通过框架页实现。这样可以很方便地实现页面导航。框架页的Top部分

主要用于显示当前用户状态、返回首页及安全退出网站等功能;框架页的left部分主要用于页面导航;框架页的main部分主要用于显示各功能模块的操作,在left部分的每个超链接都指定其target属性,即为其指定显示的目的窗口。

4.2 程序调试中的问题

(1)在JSP中经常需要对输入或输出的字符串进行处理,通常将处理该问题的方法统一放

置在一个单独的类中。

(2)tomcat服务并没有启动。在eclipse的工程中点击右健选择properties-->java build path中已经提示了xx.jar不存在,这样就把这个jar信息从Libraries中删除即可. 重新发布应用,成功

(3)、启动tomcat时报错;A Configuration error occurred during startup.Please verify the preference field with the prompt:Cannot find a free socket for

the debugger.。打开eclipse,window>preferences>myeclipse>application server>tomcat 5 要选中Enable;然后后面tomcat home dircetory要选择你机器上tomcat的安装目录

(4)在比较字符串时,要区别==与equal函数的不同,根据不同的情况选择不同的比较方式。

(5)在进行数据写入数据库时,需要过滤敏感字符和非法字符易防止sql注入攻击。

(6)编码不规范或语法不严谨导致程序不能正常运行,调试后排出异常,可以正确运行。

(7)读者编码,书籍编码要定义成数字型,否则,输入字符,特殊符号都会识别,不符合实际情况。

五、使用说明

(1

(2)后台管理人员通过账号、密码登录网站后台进行相关信息管理,操作完成选择安全退出即可完成退出登录。

六、 心得体会

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,此次课程设计我的课题是基于java的企业门户网站开发。

从理论到实践,在一个星期的日子里,可以说得是苦尽甘来,但是在这一过程中可以学到很多的东西,这不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。在以后会有更多的课程设计,我们现在的努力是为了将来打好基础,这是要让我们真正的自己动手,了解和掌握一些基本知识,在以后的工作中做到游刃有余。

这次课程设计最终顺利完成了,项目过程中遇到的问题,在老师和同学的帮助下及上网查找相关资料下得以解决,通过此次课题设计,收获蛮多。

七、 附录

7.1 源代码

public class Database { //定义Database类

private static Connection con; //定义静态变量static private static String poolname = \"proxool.mingri\"; public Database() { //构造方法 } }

public static Connection getConnection() { try {

Class.forName(proxool);

//调用Class的forName方法加载数据库驱动程序类

con = DriverManager.getConnection(poolname); //获取Connection对象的引用

} catch (ClassNotFoundException e) { } catch (SQLException e) { }

if (con == null) { }

return con; }

public static int getRow(String sql) { int i = 0;

PreparedStatement ps = null; ResultSet rs = null; try {

ps = con.prepareStatement(\"SELECT COUNT(*) FROM \" + sql,

ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = ps.executeQuery(); if (rs.next()) {

i = rs.getInt(1); }

} catch (SQLException e) { i = 0; } finally { try {

rs.close();

//关闭ResultSet对象的一个实例 } catch (SQLException e) {} try {

ps.close();

//关闭PreparedStatement对象的一个实例 } catch (SQLException e) {} return i; } }

public static boolean Delete(String sql) { boolean b = false;

Connection con = null;

PreparedStatement ps = null; try {

con = Database.getConnection(); //调用getConnection方法连接数据库 ps = con.prepareStatement(sql); if (ps.executeUpdate() > 0) { b = true; } else {

b = false; }

} catch (SQLException e) { b = false;

e.printStackTrace(); } finally { try {

if (ps != null) {

ps.close(); //关闭PreparedStatement对象的一个实例 }

} catch (SQLException e) { ps = null; } try {

if (con != null) {

con.close(); //关闭Connection对象的一个实例 }

} catch (SQLException e) { con = null; } }

return b; }

public class StringUtils { //对字符串进行GBK编码

public static String toChinese(String strvalue) { try {

if (strvalue == null) {

return \"\"; } else {

strvalue = new String(strvalue.getBytes(\"ISO8859_1\"), \"GBK\"); return strvalue; }

} catch (Exception e) { return \"\"; } } }

public static String StringtoSql(String str) { str = nullToString(str, \"\"); try {

str = str.trim().replace('\\'', (char) 1); } catch (Exception e) { return \"\"; }

return str; }

public static String SqltoString(String str) { str = nullToString(str, \"\"); try {

str = str.replace( (char) 1, '\\'').trim(); } catch (Exception e) { return \"\"; }

return str; }

public static String toUnicode(String strvalue) { try {

if (strvalue == null) { return null; } else {

strvalue = new String(strvalue.getBytes(\"GBK\"), \"ISO8859_1\"); return strvalue; }

} catch (Exception e) { return \"\"; } }

public static boolean compareNowTime(String date) {

SimpleDateFormat format = new SimpleDateFormat(\"yyyy-MM-dd\");

Date d = null; try {

d = format.parse(date);

} catch (ParseException ex) { }

return true; }

return false; }

public static boolean isID(String str) { if (str != null && str.length() > 0) {

if(str.charAt(0)<57&&str.charAt(0)>48) return false; for (int i = 0; i < str.length(); i++) {

if (str.charAt(i) < 65&&str.charAt(i) > 57 || str.charAt(i) > 90 && str.charAt(i)<97&&str.charAt(i)!=95||str.charAt(i)>122||str.charAt(i) < 48 ) { return false; } }

return true; }

return false; }

public static final String escapeHTMLTags(String input) { if (input == null || input.length() == 0) { return input; }

StringBuffer buf = new StringBuffer(input.length()); char ch = ' ';

for (int i = 0; i < input.length(); i++) { ch = input.charAt(i); if (ch == '<') {

buf.append(\"<\"); } else if (ch == '>') {

buf.append(\">\"); } else {

buf.append(ch); } }

return buf.toString(); }

public static final String nullToString(String v, String toV) { if (v == null) { v = toV; }

return v; }

public static final String SqlToLink(String str) { str = StringUtils.nullToString(str, \"\"); if (\"\".equals(str)) { str = \" LIKE '%' \"; } else {

str = (\" LIKE '%\" + str + \"%' \"); }

return str; }

public static final String SqlToLink(int i) { String str = \"\"; try {

str = new Integer(i).toString(); } catch (Exception e) {} if (i == -1) { str = \"\"; }

return StringUtils.SqlToLink(str); } }

public class ParamUtils { //传入要读取的表单信息

public static String getParameter(HttpServletRequest request,String paramName) {

return getParameter(request, paramName, false); //根据参数值的不同,调用同名的方法 }

//对表单信息读取后,对于空的信息及没有值的表单设置默认值,返回字符串 public static String getParameter(HttpServletRequest request, String paramName, String defaultStr) {

String temp = request.getParameter(paramName); if (temp != null) {

if (temp.equals(\"\")) { return defaultStr; } else {

return nullToString(temp); } } else {

return defaultStr; } } }

public static String getEscapeHTMLParameter(HttpServletRequest request, String paramName) {

return

nullToString(StringUtils.escapeHTMLTags(ParamUtils.getParameter(

request, paramName, true)));

}

public static String getParameter(HttpServletRequest request, String paramName, boolean emptyStringsOK) {

String temp = request.getParameter(paramName);

if (temp != null) {

if (temp.equals(\"\") && !emptyStringsOK) { return \"\"; } else {

return temp; } } else {

return \"\"; } }

public static int getIntParameter(HttpServletRequest request, String paramName, int defaultNum) {

String temp = request.getParameter(paramName); if (temp != null && !temp.equals(\"\")) { int num = defaultNum; try {

num = Integer.parseInt(temp); // } catch (Exception ignored) {} return num; } else {

return defaultNum; } }

public static int getIntParameter(HttpServletRequest request, String paramName) {

return getIntParameter(request, paramName, 0); }

public static String nullToString(String oldString) { if (oldString == null) { return \"\"; }

return oldString; }

public static String nullToString(String oldString,String defaultValue) { oldString=nullToString(oldString); if(\"\".equals(oldString)){ return defaultValue;

}

return oldString;

}

public static String getRequestString(HttpServletRequest request,String s){

s=nullToString(s).trim();

s=ParamUtils.getEscapeHTMLParameter(request, s); s=StringUtils.toChinese(s); s=StringUtils.toUnicode(s); s=StringUtils.StringtoSql(s); return s; }

public static String getRequestString(Request request, String s) { s=nullToString(s).trim();

s=ParamUtils.getEscapeHTMLParameter(request, s); s=StringUtils.toUnicode(s); s=StringUtils.StringtoSql(s); return s; }

public static String getSqlString(String s){ s=StringUtils.SqltoString(s); s=StringUtils.toChinese(s); s=nullToString(s).trim(); return s; }

public static String getEscapeHTMLParameter(Request request, String s) { return

nullToString(StringUtils.escapeHTMLTags(request.getParameter(s)));

}

public static int getIntParameter(Request request, String s) { int defaultNum=0;

String temp = request.getParameter(s); if (temp != null && !temp.equals(\"\")) { int num = defaultNum; try {

num = Integer.parseInt(temp); } catch (Exception ignored) {} return num; } else {

return defaultNum; } }

7.2 参考文献

1) 《Java从入门到精通》 人民邮电出版社 国家863中部软件孵化器 2010年4月

2) 《JSP信息系统开发实例精选》 机械工业出版社 王国辉、牛强、李南南等 2005年7月 3) 《Visual Basic信息系统开发实例精选》 机械工业出版社 宋坤、赵智勇等 2005年7月 4) 《SQL Server数据库开发实例解析》 机械工业出版社 宋昆、李严等 2006年1月 5) 《Access数据库开发实例解析》 机械工业出版社 李俊民、高春燕等 2006年1月 6) 《JSP数据库系统开发完全手册》 人民邮电出版社 2006年3月

八、 评分表

计算机与通信学院课程设计评分表

课程名称: 信息系统项目管理 项 目 评 价 设计方案的合理性与创造性 设计与调试结果 设计说明书的质量 答辩陈述与回答问题情况 课程设计周表现情况 综合成绩

教师签名:

日 期:

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

Top