南华大学
计算机科学与技术学院
课程设计报告
( 20## ~20##学年度 第 1 学期 )
前 言
随着计算机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。个性化已逐渐成为当今Web应用的潮流。本课程设计研究了一种基于数据关联规则的网络学生信息管理系统,此方案与现今网上已采用的一些方案相比,具有用户使用更简单、界面更直观等优点。
在设计中我们发现这样一个事实,一个用户或管理员在登陆这个网站时一般来讲只对该网站的部分内容感性趣,而且这种兴趣会持续一段时间。这点启发了我们,如果能根据用户活管理员的喜好为不同的用户显示其个性化的页面,即着重显示该用户感兴趣的内容,将为用户节约大量的检索时间,而且这样的网页显然是更具有吸引力的。一些站点已经在这方面作出了一定的尝试,通常采用的方法是,在用户登陆时为其提供一系列的选项,使用户能够对站点进行一些自主的设置。这样做能够使站点呈现一定程度的个性化,但是对用户来讲,还是比较烦琐,而且在用户了解一个站点前让其对站点进行设置,其结果未免有些粗糙。于是我们构想了这样一种方案,对用户登陆后的动作进行跟踪,分析,发掘用户点击的规律,即用户先后点击的关联规则,这样,在用户点击一个主题(链接)之后,系统能够自动生成一页面,其中包含了该主题下用户经常关注的内容(若干链接),这样便在无须用户作出任何额外工作的情况下实现了为用户量身订做的个性化页面。
要实现这样的功能,离不开后台数据库的支持。管理员验证信息,收集到的用户点击信息,主题层次信息,分析得出的关联规则表等大量的数据都由数据库管理系统管理。本文中数据库服务器端采用了SQL Server 2000数据库作为ODBC(Open DataBase Connectivity )数据源,并以先进的JDBC-ODBC桥接技术进行数据库存取等操作,使Web与数据库紧密联系起来。
整个个性化页面生成系统主要由使用Dreamweaver_MX开发的关联规则采掘系统和利用JSP技术实现的个性化Web页面生成器两部分组成。关联规则采掘系统对数据库中的历史记录进行分析,产生用户关联规则表;页面生成器则负责记录管理员的行为动态生成管理员个性化Web页面。二者通过数据库服务器和Web服务器连接。
为能更好的设计系统,我们在设计时将组内成员主要分成了两组:一组主要负责后台数据库的设计;
一组主要负责前台浏览器的设计。
基于Java的学生信息管理系统
--------后台数据库设计报告
1.课程设计目的及要求
设计目的:
使用JDBC-ODBC桥接驱动程序将前台浏览器与后台数据库(本系统用的是SQL Server)结合位为一体。利用SQL语句接口来调用数据库,以存取或更新数据库中的数据,特别是实现对数据库中学生照片的存取,这是我们后台数据可设计的重点。在文档中就新增、删除、修改与查询等几个基本的数据库操作,外加这些操作相关的一些项目作了简单的陈述。
设计要求:
1.要求在前台主界面上显示数据库中存放的学生的基本信息,一般的普通用户可以在系统中查看所有学生的信息;而由特定权限的管理员可以通过按钮或菜单对学生的信息进行录入、修改、查询、删除等功能。
2.利用JDBC驱动程序连接数据库,修改、存储学生的基本信息。
2.课程设计软硬件环境
2.1系统开发工具的选择
后台数据库:
本系统后台数据库选择SQL Server 2000。
2.2性能需求
2.2.1硬件环境
·处理器:InterCR300或更高。
·内存:128MB(建议256MB)。
·硬盘空间:30MB。
2.2.2软件环境
·操作系统:Windows98 或Windows2000 / Windows NT Server 4.0/window XP。
·数据库:SQL Server 2000。
3.课程设计内容
3.1 熟悉java与数据库系统
3.1.1 数据库系统简介
数据库系统是一个信息核心,也是任何企业单位非常重视的运营主体。但随着科技的进步,多元化的需求,促使数据库扮演的角色愈来愈复杂,也愈来愈重视数据库系统相关程序开发工具的简便及性能。由于java的特性,对这方面需求能够发挥相当多的优势,因而java系统的应用越来越多。JDBC是java与数据库连接的一项规范,用于提供统一的SQL语言的关系数据库系统访问接口,与Java应用的相关程序取得数据库连接之后,便可依照SQL语言去执行各项语句命令的运行。
3.1.2 JDBC数据库连接
Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。
目前比较常见的JDBC驱动程序可分为以下四个种类:
(1)JDBC-ODBC桥接ODBC驱动程序
利用ODBC驱动程序提供JDBC访问。注意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。
(2)本地API半Java驱动程序
这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。
(3)JDBC-NET纯Java驱动程序
这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的JDBC驱动程序。有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。
(4)本地协议纯Java驱动程序
这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源,有几家提供者已在着手做这件事了。
据专家预计第(3)、(4)类驱动程序将成为从JDBC访问数据库的首方法。第(1)、(2)类驱动程序在直接的纯Java驱动程序还没有上市前会作为过渡方案来使用。对第(1)、(2)类驱动程序可能会有一些变种,这些变种要求有连接器,但通常这些是更加不可取的解决方案。第(3)、(4)类驱动程序提供了Java的所有优点,包括自动安装(例如,通过使用JDBC驱动程序的appletapplet来下载该驱动程序)。
3.1.3 建立JDBC连接步骤
数据库连接对动态网站来说是最为重要的部分。很多数据库系统都带有JDBC驱动程序,Java程序就通过JDBC驱动程序与数据库相连,执行查询和提取数据等。Sun公司还开发了JDBC-ODBC bridge,用此技术,Java程序就可以访问带有ODBC驱动程序的数据库,目前大多数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如Oracle、Sybase、MS SQL Server和MS Access等。在本系统中采用的是SQL Server 2000,利用JDBC-ODBC桥接将jsp与数据库连接,主要的数据库连接步骤如下:
首先,建立一个SQL Server数据库,其中设计了两个表:学生信息表aa,用户表b,在学生信息表中保存有学生的姓名、学号(设为主键)、性别和照片(因为我们在设计系统时,主要考虑实现通过前台浏览器对数据库中学生的基本信息进行管理,所以我们在数据库中只保存了学生的一般信息,没有对学生资料更好的进行归类,但是主要的编程思想都是一样的),用户管理表中保存有管理员的用户名和密码,管理员需要通过密码验证才能进入管理员主界面。然后,在Control Panel(控制面板)的ODBC Datasource 模块中,加入System DSN, 取名为xf,并指向test.mdb。最后,创建JSP程序访问数据库。
在Java中,关键的java.sql、javax.sql等类库,提供了JDBC相关及接口程序,因为JDBC是执行SQL的标准应用程序接口规范,所以如何建立一个使用JDBC的应用程序,除应了解前述概念外,还有几个简单而重要的步骤需要掌握。下示为一个JDBC程序,关键部分对应的步骤说明与语句范例。
3.2 SQL Server 2000和与系统相关的SQL 语言介绍
3.2.1 数据定义 DDL(data definition language)
数据定义语言是指对数据的格式和形态下定义的语言,他是每个数据库要建立时候时首先要面对的,举凡数据分哪些表格关系、表格内的有什么栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
1、建表格: create table table_name( column1 datatype [not null] [not null primary key], column2 datatype [not null], ...)说明: datatype --是资料的格式。 nut null --可不可以允许资料有空的(尚未有资料填入)。 primary key --是本表的主键。
2、更改表格 alter table table_name add column column_name datatype 说明:增加一个栏位(没有删除某个栏位的语法。 alter table table_name add primary key (column_name) 说明:更改表得的定义把某个栏位设为主键。 alter table table_name drop primary key (column_name) 说明:把主键的定义删除。
3、建立索引 create index index_name on table_name (column_name) 说明:对某个表格的栏位建立索引以增加查询时的速度。
4、删除 drop table_name drop index_name
3.2.2 数据形态datatypes
smallint 16 位元的整数; interger 32 位元的整数;
decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数,如果没有特别指定,则系统会设为 p=5; s=0 ;
float 32位元的实数; double 64位元的实数; char(n) n 长度的字串,n不能超过 254; varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000;
graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127,这个形态是为了支援两个字元长度的字体,例如中文字;
vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000;
date 包含了 年份、月份、日期; time 包含了 小时、分钟、秒;
timestamp 包含了 年、月、日、时、分、秒、千分之一秒。
3.2.3 SOL Server 2000数据库的物理体系
数据型(Data):包含有除text、ntext、imange外的所有数据行;
索引(Idex):所含内容为索引条目;
文本/图像(Text/image):text、ntext、image数据。
3.2.4 数据操作 dml(data manipulation language)
数据定义好之后接下来的就是数据的操作。数据的操作不外乎增加数据(insert)、查询数据(query)、更改数据(update) 、删除数据(delete)四种模式,以下分别介绍他们的语法:
1、增加数据:insert into table_name (column1,column2,...) values ( value1,value2, ...)
说明:
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name 也可以是景观 view_name。
2、查询数据:
select column1,columns2,... from table_name
说明:把table_name 的特定栏位资料全部列出来
select * from table_name where column1 = *** [and column2 > yyy] [or column3 <> zzz]
说明:
1.´*´表示全部的栏位都列出来。
2.where 之後是接条件式,把符合条件的资料列出来。
select column1,column2 from table_name order by column2 [desc]
说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大排列。
3、更改数据: update table_name set column1=´***´ where conditoins
说明:
1.更改某个栏位设定其值为´***´。
2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。
4、删除资料: delete from table_name where conditions
说明:删除符合条件的资料。
3.3基于JSP实现图片的数据库存储与显示
这一模块是我们对系统设计的重点和难点。数据库应用程序,特别是基于WEB的数据库应用程序,常会涉及到图片信息的存储和显示。在设计过程中,我们考虑过将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,在JSP中建立相应的数据源,利用数据库访问技术处理图片信息。但是,如果我们想动态的显示图片,上述方法就不能满足需要了。我们必须把图片存入数据库,然后通过编程动态地显示我们需要的图片。实际操作中,可以利用JSP的编程模式来实现图片的数据库存储和显示。下面给出了在本系统中调用数据库中学生照片并显示照片的程序以及接收由浏览器发送过来的请求将学生照片存储到数据库中,并附带有程序的分析。
//读取图片源代码
try {
String id=request.getParameter("id"); //获得学生的id
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动程序
}catch(ClassNotFoundException e) //捕获异常
{
out.println("not found!");
}
Connection conn=DriverManager.getConnection("jdbc:odbc:xf");//连接数据库
Statement stmt=conn.createStatement(); //创建SQL指令对象stmt
ResultSet result=null; //建立ResultSet(结果集)对象
result=stmt.executeQuery("select ima from aa where id='"+id+"'");
//执行图片查询语句
if(result.next())
{
int len = 10 * 1024 * 1024; //定义字符数组长度
OutputStream sout=response.getOutputStream(); //建立输出流
InputStream in=result.getBinaryStream(1);//建立输入流
byte b[]=new byte[len];
for(int i=in.read(b);i!=-1;) //对取图片信息
{ //如果i=-1表示图片读取成功或不存在
sout.write(b);
in.read(b);
}
sout.flush(); //强制清出缓冲区
sout.close(); //关闭输出流
}
}catch(SQLException e) //抛出异常
{
out.println(e.toString());
}
将上面的代码保存在xianshi.jsp文件中,在学生信息中通过<img height="185" src="xianshi.jsp?id=<%=id%>" width="141" >将通过上面代码取得的图片显示在页面上,其中id信息通过request请求发送给xianshi.jsp中的id属性。
//存储图片源代码
try {
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e)
{
out.println("not found!");
}
Connection conn= DriverManager.getConnection("jdbc:odbc:xf");
Statement stmt=conn.createStatement();
String name=request.getParameter("1"); //获得学生姓名
name=new String(name.getBytes("8859_1"),"gb2312");//对获取信息进行中文编码
String id=request.getParameter("2");
//id=new String(id.getBytes("8859_1"),"gb2312");
String sex=request.getParameter("3");
sex=new String(sex.getBytes("8859_1"),"gb2312");
String image=request.getParameter("4");
image=new String(image.getBytes("8859_1"),"gb2312");
FileInputStream str=new FileInputStream(image); //建立输入流
String sql="insert aa(name,id,sex,ima) values(?,?,?,?)";//定义数据库添加语句
PreparedStatement rs=conn.prepareStatement(sql);
//建立PreparedStatement对象
rs.setString(1,name); //向表中第1列插入学生姓名
rs.setString(2,id); //输入学生id
rs.setString(3,sex); //输入学生性别
rs.setBinaryStream(4,str,str.available());
//输入照片,str.available()获得图片大小
rs.execute(); //执行插入操作
}catch(SQLException e) //抛出异常
{
out.println(e.toString());
}
4.总结分析
至此该系统基于WEB的数据库应用程序已经完成了。由于考虑到我们设计该系统主要是基于Java的学生信息管理系统,按照老师的要求,在浏览器中实现显示学生基本的文字信息和学生的照片功能,所以在数据库中我们只保存了少许几个学生的一些基本信息,如姓名、学号、性别、照片,并没有花费太多的经历将学生的一些详细资料按学院或其他信息建多个学生信息表,这一点我们也感到非常遗憾。学生信息表设计虽然简单,但是我们处理了一个令很多人都感到困惑的难点,在JSP中,利用数据库访问技术处理图片信息,即基于WEB的动态图片显示。
基于java的学生信息管理系统
----系统前台Web服务
1.课程设计目的及要求
设计目的:
在学习了网络编成等课程后,为了更好的理解其有关原理并熟悉网络编成设计过程,进行了此次课程设计。在设计中主要涉及到数据库的设计及操作过程,也为掌握数据库设计的基本方法并进一步应用奠定了基础。前台浏览器设计部分是通过Dreamwaver工具应用jsp编程来实现界面的设计与修改,从而熟悉网络编程的技术。
设计要求:
设计基于java的学生信息管理系统的前台浏览器服务,包括系统的总界面设计以及系统的功能分析设计,完成系统的整体结构。
2.课程设计软硬件环境
2.1 前台开发工具
本系统是在JSP环境下实现,后台数据库为MS SQL 2000,前台应用JSP技术,JSP全称为JAVA SERVER PAGES,也就是[JAVA 服务端网页]的意思,JSP是一种集成HTML及JAVA程序于一体的网页技术,让网页设计者能够轻易而有弹性地建立互联网应用程序。JSP称为网页,但它结合JAVA的SERVLET服务端小程序技术,因此称为JSP程序也可以。其中使用到tomcat工具.tomcat可说是一个国际级的JSP服务器,也可以称为JSP容器(CONTAINER)或JSP引擎。tomcat可融入Apache服务器中,而Apache可安装于Unix、Linus、NT、WINDOWS等操作平台,由此可见JSP是跨平台的。
JSP技术有以下的优点:
1. 写一次可到处执行
2. 组件可重复使用
3. 可将静态及动态内含隔开
4. 支持脚本语言及动作
5. 可通过信息网站存取一层次企业应用程序信息
Tomcat需要配置两个配置文件,即server.xml和web.xml。server.xml是tomcat的主配置文件,完成两个目标:提供tomcat组件的初始配置和说明tomcat的结构、含义,使得tomcat通过实例化组件完成启动及构建自身。
2.2开发平台的选择
本系统基于JSP的环境下,所以必须安装支持运行JSP环境运行的环境,首先我们必须安装一个JAVA环境,因为在编译JSP代码时必须有JAVA语言编译器。
2.2.1首先我们简要介绍一下JAVA
JAVA是一种面向对象的程序语言,不仅能够编写小应用程序实现嵌入网页的声音和动画功能,而且还能够应用于独立的大中型应用程序,其强大的网络功能能够把整个Internet作为一个统一的运行平台,极大地拓展了传统单机或Client/Server模式应用程序的外延和内涵。
1. 数据封装(ENCAPSULATION)
将数据分成私用(private)、保护(protected)、公用(public)等,达到数据保密的目的。
2. 继承(inheritance)
有继承的关系后,父类(super class)中的数据(data)或方法(method)其子类(subclass)就有继承使用,子类的子类也可以继承使用,达到数据重复使用(reuse)的目的。
3. 多态性(polymorphism)
JAVA是一种分布式程序语言、JAVA是一种跨平台的程序语言、JAVA是一种网络语言、
JAVA是一种WEB的程序语言。
2.2.2 JAVA语言的安装
JAVA系统一般包含四个部分
1. JAVA环境(ENVIRONMENT)、
2. JAVA语言(LANGUAGE)、
3. JAVA API应用程序接口(APPLICATION PROGRAMMING INTERFACE)、
4. JAVA类库(CLASS LIBRARIES)
JDK是Java Develop Kit的简称,意为JAVA的开发工具。JDK有多个版本,可以很方便地从SUN站点(http://www.sun.com/product/JDK/ )或其他国内软件站点中获取。我们在设计中下载的是比较新的版本J2SDK1.4.2,详细的安装步骤可以参阅http://java.sun.com/j2se/1.4.2/install-windows.html
简要说明:
1、下载。下载完毕文件名称为:J2SDK_1_4_2_<version>-windows-586.exe。这里<version>代表当前下载的版本号。
2、安装。直接运行下载文件,建议安装目录为D盘根目录,安装完毕J2SDK根目录为D:\j2sdk1.4.2_05。也可以安装在其它自定义目录下。
3、环境变量配置。
1)确认登陆Windows帐号为管理员级别帐号
2)鼠标右击[我的电脑]-弹出菜单中选择[属性]-弹出对话框中选择[高级]-点击[环境变量]
3)下面操作在[系统变量]中进行,如果系统变量已存在相同变量名且包含相同变量值,则跳过该步操作;如果系统变量已存在相同变量名但未包含相同变量值,则添加该变量值(用英文“;”隔开);如果系统变量不存在相同变量名,则按如下操作[新建]变量名并赋变量值。
[新建]变量名:Java_Home 变量值:D:\j2sdk1.4.2_05
[新建]变量名:Path 变量值:%Java_Home%\bin
[新建]变量名:ClassPath 变量值:
.;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar;%Java_Home%\lib\htmlconverter.jar(注意:变量值中“.”一定不能缺少)
最后重启计算机,完成J2SDK配置。
2 . 2 . 3安装TOMCAT
我们在开发该系统时用到了Jakarta-Tomcat-5这个版本,下面就以Jakarta-Tomcat-5 为例简单介绍tomcat的安装及配置。
http://jakarta.apache.org/tomcat/index.html可以下载到较新的版本软件、文档及详细安装指南。
简要说明:
1、 下载。下载WindowsNT/2K/XP版Tomcat安装版
2、 安装。请首先确认,您已安装J2SDK或JDK或JRE,如果没有安装,请先安装。如果已安装并配置完毕,请继续下面步骤:
直接运行下载软件,按提示安装。
注意:在选择组建时,请务必将Service选中。这样将在安装完毕后自动启动Tomcat服务。
建议安装在D:\Tomcat<version>(这里以D:\Tomcat 5.0.28为例)目录下。
3、 环境变量配置。
1)确认登陆Windows帐号为管理员级别帐号
2)鼠标右击[我的电脑]-弹出菜单中选择[属性]-弹出对话框中选择[高级]-点击[环境变量]
3)下面操作在[系统变量]中进行,如果系统变量已存在相同变量名且包含相同变量值,则跳过该步操作;如果系统变量已存在相同变量名但未包含相同变量值,则添加该变量值(用英文“;”隔开);如果系统变量不存在相同变量名,则按如下操作[新建]变量名并赋变量值。
[新建]变量名:Tomcat_Home 变量值:D:\Tomcat 5.0.28
[新建]变量名:Path 变量值:%Tomcat_Home%\bin
[新建]变量名:ClassPath 变量值:%Tomcat_HOME%\common\lib
最后重启计算机,完成Tomcat配置。
补充:
如果计算机仅安装JRE,而未安装JDK,Tomcat仍然能够运行,但是Tomcat将无法编译JSP。这样如果需要编译JSP,就必须将% Java_Home%\lib\tools.jar文件拷贝到%Tomcat_Home%\commom\lib目录下(建议已安装JDK的用户也补充此操作)。
2.2.4 测试TOMCAT是否安装成功
1、Tomcat运行的端口号默认为8080,可以修改,注意Tomcat自己有一个独立的HTTP服务器,它必须使用一个还未被使用的端口号,用$TOMCAT_PORT标识,修改方法如下:
1)打开$TOMCATconfserver.xml;
2)修改ContextManager:
2、双击$TOMCAT目录下的startup.bat来启动Tomcat;
3、在浏览器上输入http://localhost:$TOMCAT_PORT/,能看到Apache Tomcat/5.0.28这一页就表示Tomcat安装成功了;
4、点击Servlet Example进入Servlet界面,应该能执行Servlet。
5、点击JSP Example进入JSP界面,应该能执行JSP了,若不能,修改$TOMCATconfstart.bat:加上SET JAVA_HOME=D:j2sdk1.4.2_05即可。
2.2.5 WEB服务配置
在设计系统之前,先配置一个WEB服务器:在TOMCAT目录下的webapps文件夹下创建一个根目录jsp,在该目录下再创建一个WEB-INF子目录,在该目录下配置一个web.xml文件,先配置该文件默认内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
</web-app>
将系统所有要用到的程序放在%Tomcat_HOME%\webapps\jsp目录下,创建好数据库并配置好数据源后,打开浏览器,在地址栏中输入http://localhost:$TOMCAT_PORT/jsp/index.jsp 就可以登录到该系统的首页了。
2.3 前台开发语言JSP简介
一)、JSP的优点
1、将内容的生成和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的,例如请求帐户信息或者特定的一瓶酒的价格)。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。
在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。
2、生成可重用的组件
绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeansTM组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。
3、采用标识简化页面开发
Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。
通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。
4、将内容的生成和显示进行分离
与SERVLETS相比,JSP能提供所有SERVLETS功能,但它比用println书写和修改HTML更方便。此外,你可以更明确的进行分工,WEB页面设计人员编写HTML,只需要留出地方让SERVLETS程序员插入动态部分即可。
5、 由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。
6、 作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。
二)、JSP指令和脚本元素
1、JSP指令是为JSP引擎而设计的。他们并不直接产生任何可见输出,而只是告诉引擎如何处理其余JSP页面。这些指令始终被括在 “<%@ ?%>”标记中。两个最重要的指令是“pagePage”和“Include”。几乎在所有JSP页面顶部都会看到“Page”指令。尽管不是必须的,但它可以让你指定:到何处查找起支持作用的Java类别:
<%@ page import="java.util.Date" %>
出现Java运行问题时,将网上冲浪者引向何处:
<%@ page errorPage="errorPage.jsp" %>
还有你是否需要管理用户的会话级信息,这些信息可能来自多个网页述:
<%@ page session="true" %>
“Include”指令可以把你的内容分成更多可管理的元素,比如包括一个普通页面页眉或页脚的元素。包含的网页可以是一个固定的HTML 页面或更多的JSP内容:
<%@ include file="filename.jsp" %>
2、JSP声明用来让你定义页面级变量,以保存信息或定义JSP页面的其余部分可能需要的支持方法。如果你发现代码太多,通常最好把它们写成一个独立的Java类别。声明一般都在“<%! ?%>”标记中。一定要以分号(;)结束变量声明,因为任何内容都必须是有效的Java语句:
<%! int i=0; %>
3、有了JSP表达式,表达式评估结果会被转换成一个字符串,并且被直接包括在输出页面之内。JSP 表达式包含在“<%= ?%>” 标记中,没有分号,除非在加引号的字符串部分使用分号。
<%= i %>
<%= "Hello" %>
4、代码片段/脚本片段(Scriptlets) JSP代码片段或脚本片段是嵌在“<% ?%>”标记中的。这种Java代码在Web服务器响应请求时就会运行。在脚本片段周围可能是原始的HTML或XML语句,在这些地方,代码片段可以使你创建条件执行代码,或要用到另外一段代码的代码。例如,以下的代码组合使用表达式和代码片段,显示H1、H2、H3和H4标记中的字符串“Hello”。代码片段并不局限于一行源代码:
<% for (int i=1; i<=4; i++) { %>
<H<%=i%>>Hello</H<%=i%>>
<% } %>
5、在JSP中嵌入式注释。尽管你始终可以在文件中加入HTML注释,但用户在查看页面源代码时会看到这些注释。如果你不想让用户看到它,你就应该将其嵌入“<%-- ?--%>” 标记中:
<%-- comment for server side only --%>
JSP还有三类主要的元素:Scripting elements,Directives,和 Actions.使用Scripting elements您可以定义最终转换为Servlet的部分,Directives 使您可以控制这个Servlet的整体结构,而Actions使您可以指定可重用的已有组件,另外,还可控制JSP引擎的运行。
3. 课程设计内容
系统页面制作包括网页的美工设计以及程序的编写,首先网页的设计要符合系统的需要不偏不倚,要做到恰到好处。
页面制作的基本要素可分为四部分
1. 页面风格总体设计
2. 页面内容位置安排
3. 系统投入使用的生命周期,以及需要达到的效果如何。
4. 系统所需的时间投入安排
这些都是我在本次课程设计中,总结出系统制作的一些基本要点。
本系统的美工设计采用颜色比较鲜明、简洁。
其次本系统在系统内容上尽量做到简单明了,使用户能够在最少的时间内熟悉系统的基本模块。
一)、需求分析
随着学校向全国及至世界范围的持续扩张,学生人数的增加,对于学生的信息管理也越来越复杂,要求也越来越高,因此需要一个全面、详细的信息管理系统,以便完成对学生信息的管理。无纸化的环境是技术时代的一个梦想,也是许多学校和公司越来越意识到的一个真实世界。以前是由学生档案和公告栏来提供各种信息及通告新的变化,而现在这个繁杂的工作已被网站和内部计算机网络所取代。使得学生信息的管理更方便、安全。
根据调查得知,现在广大学生进行信息提交的主要方式是基于文件、表格等纸介质的手工处理,学生信息管理部门信息处理工作量大,容易出错,且管理方面因人而异。然而学校网上学生信息管理系统应该覆盖各个所需功能,使各级管理人员和广大教职工在信息系统的辅助下进行工作,提高管理的整体水平。使得学生信息管理更方便。
学生信息管理系统,可以用集中的数据库将与人力资源管理相关的信息全面、有机地联系起来,有效地减少了信息更新和查找中的重复劳动,保证了信息的相容性,从而大大地提高了工作效率,还能使原来不可能提供的分析报告成了可能。在采用和实施学生信息管理系统之后,就会将依赖于人的过程改为依赖于计算机系统的过程。学校管理人员只要获取了相应的权限,就可以随时进入系统,直接查阅相应的信息。
采用和实施学生信息管理系统不仅仅是为了提高工作效率。应该看到,在实施学生信息管理系统后,经过整合的、较为全面、准确、一致和相容的信息不仅可以让学校领导对本学校学生资源的现状有一个比较全面和准确的认识,同时也可以生成综合的分析报表供学校领导人在决策时参考。
二)、系统设计
1)、系统的功能概述
本系统主要可以实现以下一些功能:
=用户身份的选择:用户进入系统进行查询和处理数据,首先要选择登录身份,可以选择的登录身份有访客登陆和管理员登录两种。
访客登录:只能查询浏览信息。
管理员登陆:可以查询、修改数据还可以添加、删除信息以及对管理员登陆用户及密码的修改、添加、删除。
=管理员注册
=增加学生的基本信息数据:其中包括了对学生相片的上传,并保存在数据库中。
=修改各种数据:根据学生学号修改信息。
=查询数据:从数据库中调出固定学号的详细信息 。
=删除数据:删除一个学号学生的所有信息。
2)、系统数据流程图
该系统所包含的所有功能流程图如下所示:
3)、全部页面文件清单
三)、系统的具体实现
[ 1)、管理员验证
一个完善的管理系统。不仅能够提供数据库的访问能力,还应当提供一定的安全机制,以保证系统安全及信息的保密工作。本系统的安全机制主要体现在以下几个方面:
通过注册界面将用户提交的注册信息保存在b表中,确定只有注册的用户才能访问。
通过管理员登录界面读取用户提交的登录信息并与已经保存在b表中的用户信息进行检查,以决定该用户是否可以访问本系统。
(1)注册界面
为了方便管理,不同的管理员可以注册不同的用户名及密码来进入管理员系统功能,注册信息将提交到数据库中。注册页面是为了保证规定权限的管理员才能对学生信息进行修改、删除、添加等功能。注册界面如下:
如果新注册的用户名已经存在数据库中,则系统会出现提示信息“该用户名已经存在”。注册成功时,系统同样会提示注册成功,并将新注册的信息提交到数据库中,用户就可以通过新的用户名及密码进入到管理员登录界面。
(2)、登录界面
对于已经注册的管理员,在进入管理系统之前先要进行登录,在下面的登录界面经过身份验证后才能进入系统管理界面。只有有正确用户名及密码的管理员才能进入管理员界面,对数据库中的学生信息进行添加、修改及删除等功能。
输入的用户名与密码首先与数据库中的数据进行比较,存在的用户可以直接进入管理员界面完成管理员功能,如果信息错误系统将会提示用户名或密码输入错误并返回。
[ 2)、增加学生基本信息数据
通过管理员身份验证后,管理员进入的就是学生信息增加的页面,在该页面中输入要增加的学生相关信息并提交,写入到aa学生信息表中。同时这个界面还包括管理员能够使用的其它功能,如信息的查询、修改和删除等功能。其工作界面如下:
输入的学生信息可以包括学生的姓名、性别、学号以及照片,其中学号为主键,如果输入了相同的学号,系统将不写入数据库,会出现提示页面,该学号已存在。
[ 3)、查询数据
查询数据,该部分是通过用户输入的欲查询的学生学号来查询该学生的详细信息。用户输入学号后如果数据库中不存在该学号的学生,系统将会提示该学生不存在信息。如果存在该学生系统将会输出该学生的详细信息,包括学生姓名、学号、性别、照片,学生详细信息显示如下:
[ 4)、修改数据
同时,管理员还可以对已有的学生信息进行修改。这个部分是通过输入学生的学号,再将所要修改的资料输入页面,提交后即可更改学生的信息,将提交的信息在数据库中保存。对于输入的错误学号或者不存在的学号系统同样会提示输入错误并返回。其界面风格也与前面的界面相似。
[ 5)、删除数据
一样的,管理员对删除学生信息也是通过输入的学号将所要删除的学生的学号输入其中,从而来删除学生的信息,即从数据库中删除。对于输入错误的学号系统也会提示输入错误,查询后再输的信息。
以上是对学生信息管理系统的各个功能介绍,其具体实现代码请参看附录。
4.总结分析
本系统自完成时即投入到系统测试中,如系统中的各个漏洞以及即时弥补,由于时间仓促有个别地方又不足之处请谅解。首先本系统在目前的调试中,基本达到了当初的设计要求,设计上基本合理,功能基本完善,能够做到各项的查询,删除,添加,修改等基本功能。其次本系统代码在附录中只给出了一部分,还有很大一部分仍显得比较神秘,但是代码的主要轮廓应该比较清晰。相信大家看完后还是会有对我们的编程思想有相当的了解。
通过对网络编程的学习,以及应用工具对jsp的学习,我们初步掌握了通过编程实现学生信息管理系统的主要核心,实现了一个简单的学生信息管理系统。
由于时间,以及对工具的使用并不熟悉等原因,我们设计的学生信息管理系只完成了几个主要的功能实现,还存在着一些问题有待解决,系统设计的还不够精致同时也存在着很多的不足与缺陷,这还需要更我们进一步的完善。
首先是管理员的注册功能,这个功能应当设计在管理员系统管理内部,以保证其安全性,控制其注册范围,并不是任何人都能注册该项目只有通过管理员才能注册新的、认可的管理员,这就保证了管理系统的安全性、保密性。
其次是学生的详细信息,在这个部分中录入的信息并不全面,只是最基本的信息,主要的就是完成了照片的录入。这部分还可以增加更多的学生信息,保证学生信息的完整性。
在这个学生管理系统的页面设计中,也有许多的不足,页面设计很简单,但不够精致,这些都需要去完善的,同时还应该再增加些通告栏,让学生及教师及时的知道最新的信息。
对于这个系统的种种不足之处需要我们更进一步的去完善。其中的不足有待更进一步的弥补,这些都需要在使用发现与修改。希望用户能够多提意见。
5. 参考文献
[1]JSP编程指南 电子工业出版社 [美]Karl、Danny、Timothy/编著
[2] Tomcat与Java Web开发技术详解 电子工业出版社 孙卫琴 李洪成编著
[3]JSP深入编程 北京希望出版社 黄理 曹林 张勇/编著
[4]JSP高级编程 北京希望出版社 黄理 曹林 张勇/编著
[5]21天学通Java2(第二版)人民邮电出版社 [美]Laura Lemay、Rogers Cadenhead/编著
[6]JSP交互网站实务经典 中国青年出版社 林邦杰/编著
[7]Java程序设计——EJB、XML与数据库 清华大学出版社 庄幸隆编著
[8]jsp程序设计与实例分析教程 清华大学出版社 姜晓铭 陈武等编著
附录
下面是该系统中主要功能的核心程序代码:
1)、管理员注册,并将注册信息存入数据库主要代码:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>验证</title>
……
</head>
<body>
……
<%
ResultSet result=null;
PreparedStatement ps;
String name=null;
name = request.getParameter("textfield");
String password = request.getParameter("1");
String repass=request.getParameter("2");
if(!password.equals(repass))
{%>
<span class="style1">您两次输入的密码不符,请重输!</span><a href="zhuce.jsp">返回</a>
<%}else
{if(name==""){%>
</p>
<p><span class="style1">输入的用户名不能为空!</span><a href="zhuce.jsp">返回</a>
<%--<jsp:forward page="zhuce.jsp"/>--%>
<%}else{
try {
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){out.println("not found!");}
Connection conn= DriverManager.getConnection("jdbc:odbc:xf");
Statement stmt=conn.createStatement();
String queryString="select * from b where username='"+name+"'";
result=stmt.executeQuery(queryString);
if(result.next())
{%>
</p>
<p><span class="style1">该用户名已经存在!</span><a href="zhuce.jsp">返回</a>
<%}
else
{ps=conn.prepareStatement("insert b(username,psw) values(?,?)");
ps.setString(1,name);
ps.setString(2,password);
ps.executeUpdate();
%>
</p>
<p><span class="style1">恭喜!注册成功!</span><a href="denglu.jsp">返回</a>
<%} }
catch(SQLException e){out.println(e.toString());} } } %></p>
</div>
</body>
</html>
2)、 管理员登录
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>验证信息</title>
</head>……
<body>
<%
String xx = request.getParameter("textfield");
String password = request.getParameter("textfield2");
%>
<%
ResultSet result=null;
try {%>
<%try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){out.println("not found!");}
Connection conn= DriverManager.getConnection("jdbc:odbc:xf");
Statement stmt=conn.createStatement();
String queryString="select * from b where username='"+xx+"'and psw='"+password+"'";
result=stmt.executeQuery(queryString);
if(result.next()){
%>
<jsp:forward page="shuru.jsp"/>
<%}else
%>
<p align="center" class="style1">输入错误:</p>
<p align="center" class="style1 style4"><span class="style3"><span class="style7">您输入的用户名或密码错误!</span><a href="denglu.jsp">返回</a></span></p>
<%}
catch(SQLException e){out.println(e.toString());} %>
</body>
</html>
3)、信息查询
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>查询</title>
……
</head>
<body>
<%try {
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){out.println("not found!");}
Connection conn= DriverManager.getConnection("jdbc:odbc:xf");
Statement stmt=conn.createStatement();
String id=request.getParameter("textfield");%>
<% ResultSet rs=stmt.executeQuery("select name,sex from aa where id='"+id+"'");
if(rs.next()){%>
……
<td width="25%" rowspan="4"><p align="center"><a href="index.jsp">返回首页</a></p>
<p> </p>
<p> </p>
<p> </p></td>
<td width="37%" height="88"><div align="left">
<p class="style2"> </p>
<p class="style2">该学生信息如下:</p>
</div></td>
<td width="38%" rowspan="4">
<p align="left" class="style10"> </p>
<p align="left"><span class="style10">照片:</span></p>
<p align="left"><img height="185" src="xianshi.jsp?id=<%=id%>" width="141" ></p></td>
</tr>
<tr>
<td height="57">姓名:<%=rs.getString(1)%></td>
</tr>
<tr>
<td height="58">性别:<%=rs.getString(2)%></td>
</tr>
<tr>
<td height="62">学号:<%=id%></td>
</tr>
</table>
<div align="center">
……
<%}else
{%>
</p>
<table width="54%" height="104" border="0" cellspacing="0">
<tr>
<td><div align="center"><img src="images/3087.gif" width="66" height="101"><span class="style8"><span class="style9">该学号不存在,请确认输入!</span><a href="chaxun.jsp">返回</a></span></div></td>
</tr>
</table>
<p><span class="style8"></span></p>
<%} }
catch(SQLException e){out.println(e.toString());} %>
</div>
</body>
</html>
照片显示(xianshi.jsp)的代码:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" import="java.util.*" import="java.text.*" import="java.io.*"errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>图片输出</title>
</head>
<body>
<%
try { String id=request.getParameter("id");
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){out.println("not found!");}
Connection conn= DriverManager.getConnection("jdbc:odbc:xf");
Statement stmt=conn.createStatement();
ResultSet result=null;
result=stmt.executeQuery("select ima from aa where id='"+id+"'");
if(result.next())
{
int len = 10 * 1024 * 1024;
OutputStream sout=response.getOutputStream();
InputStream in=result.getBinaryStream(1);
byte b[]=new byte[len];
for(int i=in.read(b);i!=-1;)
{sout.write(b);
in.read(b);
}
sout.flush();
sout.close();
}
%>
<%--if(result.next()){
Blob b=result.getBlob("ima");
long size=b.length();
byte[] bs=b.getBytes(0,(int)size);
response.setContentType("image/jpeg");
ServletOutputStream outs=response.getOutputStream();
outs.write(bs);
outs.flush();
result.close();
}
else{
result.close();
response.sendError(1,"erro!");}--%>
<%
}
catch(SQLException e){out.println(e.toString());} %>
</body>
</html>
关于数据库中照片的存储与显示源代码分析详见后台数据库设计报告。
4)、 修改信息
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>修改</title>
……
</head>
<body>
<div align="center">
……
<%
ResultSet result=null;
String id=request.getParameter("textfield");
String name=request.getParameter("textfield2");
name=new String(name.getBytes("8859_1"),"gb2312");
String sex=request.getParameter("select");
sex=new String(sex.getBytes("8859_1"),"gb2312");%>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:xf");
//建立数据库链接,jspdata为ODBC数据源名称
//建立Statement对象
Statement st =
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String queryString="select * from aa where id='"+id+"'";
result=st.executeQuery(queryString);
if(result.next())
{
String sql="update aa set name='"+name+"',sex='"+sex+"' where id='"+id+"'";
st.executeUpdate(sql);
st.close();
con.close();
%>
</p>
<p><span class="style1"><span class="style2">恭喜!成功!</span><a href="xiugai.jsp">返回</a></span>
<%}
else {%></p>
<p class="style1"> </p>
<p class="style1"> </p>
<p class="style1"><span class="style2">该学号不存在!</span><a href="xiugai.jsp">返回</a>
<%}%></p>
</div>
</body>
</html>
5)、信息删除
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>删除</title>
……
</head>
<body>
<div align="center">
<%
String id=request.getParameter("textfield");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:xf");
Statement st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=st.executeQuery("select * from aa where id='"+id+"'");
if(rs.next())
{
String sql="delete from aa where id='"+id+"'";
st.executeUpdate(sql);
st.close();
con.close();
%>
<p><span class="style1">恭喜!成功!</span><a href="shanchu.jsp" class="style2">返回</a>
<%}else{%>
</p>
<p> </p>
<p> </p>
<p> </p>
<p><span class="style1">该学号不存在,请确认输入!</span><a href="shanchu.jsp" class="style2">返回</a>
<%}%></p>
</div>
</body>
</html>
6)、信息添加
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>信息录入</title>
<style type="text/css">
……
</head>
<body>
<table width="100%" height="491" border="0" cellspacing="0">
<tr >
<td height="90" colspan="2"><div align="center"><span class="style4">学生信息管理系统</span></div></td>
</tr>
<tr>
<td width="27%"><p align="center"><span class="style5"><a href="index.jsp">返回首页</a></span></p>
<p align="center" class="style5"><a href="chaxun.jsp">信息查询</a></p>
<p align="center" class="style5"><a href="xiugai.jsp">信息修改</a></p>
<p align="center"><span class="style5"><a href="shanchu.jsp">信息删除</a></span></p>
<p> </p></td>
<td width="73%">
<form name="form1" method="post" action="jieshou.jsp">
<p><span class="style3"> 姓名</span>:
<input type="text" name="1" size="15">
</p>
<p> <span class="style3"> 学号</span>:
<input type="text" name="2" size="15">
</p>
<p><span class="style3"> 性别</span>:
<select name="3">
<option>男</option>
<option>女</option>
</select>
</p>
<p><span class="style3"> 照片</span>:
<input type="file" name="4">
</p>
<p>
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</p>
<p> </p>
</form>
<p></p></td>
</tr>
</table>
</body>
</html>
Jieshou.jsp文件:接收用户添加的学生各项信息,将其存入数据库。
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" import="java.util.*" import="java.text.*" import="java.io.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>接收新信息</title>
……
</head>
<body>
……
<%try {
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){out.println("not found!");}
Connection conn= DriverManager.getConnection("jdbc:odbc:xf");
Statement stmt=conn.createStatement();
String name=request.getParameter("1");
name=new String(name.getBytes("8859_1"),"gb2312");
String id=request.getParameter("2");
id=new String(id.getBytes("8859_1"),"gb2312");
String sex=request.getParameter("3");
sex=new String(sex.getBytes("8859_1"),"gb2312");
String image=request.getParameter("4");
image=new String(image.getBytes("8859_1"),"gb2312");
String queryString="select * from aa where id='"+id+"'";
ResultSet result=stmt.executeQuery(queryString);
if(result.next())
{%>
</p>
<p class="style2 style3"> </p>
<p class="style2 style3"> <span class="style4">该学号已经存在!</span>
<a href="shuru.jsp">返回</a>
<%}
else
{
FileInputStream str=new FileInputStream(image);
String sql="insert aa(name,id,sex,ima) values(?,?,?,?)";
PreparedStatement rs=conn.prepareStatement(sql);
rs.setString(1,name);
rs.setString(2,id);
rs.setString(3,sex);
rs.setBinaryStream(4,str,str.available());
rs.execute();
%>
</p>
<p class="style2 style3"> <span class="style4">恭喜,数据已存进数据库!
</span><a href="shuru.jsp">返回</a>
<%}
}
catch(SQLException e){out.println(e.toString());} %>
</p>
<p> </p>
<p> </p>
</body>
</html>
课题:基于java的学生信息管理系统
小组成员分组情况:
组长:刘亮 20034440437 (03级4班)
后台数据库设计 前台浏览器服务设计
小组长:刘 亮 20034440437 (4班) 小组长:徐 锋 20034440403 (4班)
颜富文 20034440414 (4班) 杨 静 20034440443 (4班)
唐 仁 20034440419 (4班) 曾 理 20034440424 (4班)
张 琦 20034440303 (3班) 邹卫军 20034440434 (4班)
竺 超 20034440305 (3班)
工作情况介绍:
在这次课程设计中,将小组成员分成两个部分。
首先,后台数据库设计是本次课程设计的核心部分,主要由刘亮和彦富文负责徐锋辅助完成。实现Web数据库的应用程序设计主要完成基于JSP的数据库中图片的存储与显示。
其次,前台界面设计是由徐锋和杨静负责完成。包括界面风格设计以及系统的整体结构框架设计。