- 浏览: 11257 次
- 性别:
- 来自: 深圳
最近访客 更多访客>>
最新评论
-
zhaozhihang:
SearchModel 贴出来呗……
Struts 2 动态高级检索的实现 -
Admin86:
有2个朋友 1年8K 主要还是看能力和机遇吧 杭州的
深圳的javaer们,进来聊聊 -
weixiaozhe:
楼主牛阿,2年8K,
深圳的javaer们,进来聊聊 -
kewell543:
我倒是想知道为什么‘华为和腾讯算了’
深圳的javaer们,进来聊聊 -
starcheney:
目前,广大网友和深圳的企业纷纷表示压力很大!
深圳的javaer们,进来聊聊
程序详细说明书
一,程序综述
本程序主要实现了对学生信息的添加、删除、修改和查询(包括精确查询和模糊查询)。用户可以通过本程序实现对学生信息的综合管理。程序采用的是B/S结构,用户界面是基于浏览器的,用户在浏览器上完成对学生信息的综合管理。程序的主要Struts+Hibernate+Spring.
程序采用MVC架构,降低了耦合度。Struts充当程序的表现层,Hibernate充当持久层,Spring为逻辑层。采用的开发环境为MyEclipse,后台采用MySql数据库保存数据,采用tomcat作服务器.
二,程序功能说明
1,学生信息的添加
本程序实现了对学生信息的添加,在程序界面上,用户输入合法的学生信息,程序可以完成对用户输入信息的保存。程序还能对用户输入数据的合法性进行有效性检查。当用户输入的学生信息的姓名为空,学生的学号已经存在,邮箱、电话、身份证的格式不正确时,程序都能智能识别,避免了无效数据的提交。
2,学生信息的删除
本程序实现了对学生信息的删除,用户可以根据自己的需要,对那些不需要的学生信息进行删除操作。程序采用删除前先确定的方式,可以减少用户的误操作。
3,学生信息的修改
当学生信息有变动,需要修改时,用户可以通过本程序完成。用户点击修改学生信息按钮,进入学生信息修改页面。在该页面,用户可以根据自己的需要,对学生信息进行修改。程序还能识别用户的误操作,比如用户输入的数据不合法时(用户输入的姓名为空,学号已存在,邮箱、电话、身份证格式不正确),程序能够做出相应的响应,减少了用户的误操作。
4,学生信息的查询
本程序实现了对学生信息的组合查询,包括精确查询和模糊查询。在程序的查询界面上,用户可以在姓名,班级,学号输入信息,实现对学生信息的组合查询。用户还可以根据自己的需要选择查询的类型,可以是模糊查询和精确查询中的任意一种。程序还实现了对查询结果的分页显示。对一些不同的信息用不同的颜色以示区别。比如:学生性别为男时,蓝色显示。状态为未注册或休学时,高亮显示(红色显示)。当用户把鼠标放在学生的姓名上时,可以显示学生的简介信息。
三,程序详细设计说明
1,建立数据库
本程序采用的数据库是MySql数据库。
建立一个名为stu的数据库。sql语句如下:
create database stu;
在stu数据库下,创建名为student的数据库表。student表包括的字段有:学生ID、姓名、班级、学号、状态、性别、邮箱、电话、身份证、简介、创建时间和最后修改时间。其中ID号为学生的唯一标识,是学生表的主键,学生姓名不能为空,学生学号必须是唯一的,学生信息的创建时间不能为空。基于上述一些条件,建表语句如下:
数据库字段名称 特殊要求
唯一id 主键
姓名 name varchar(50) 不能为空
性别 sex int(2) 不为空,只有两种状态:男、女
学号 studentid varchar(50) 不能为空,值唯一
班级 class varchar(50)
身份证 idcard varchar(18)
电话 phone varchar(500)
邮箱 email varchar(500)
状态 tate int(2) 不为空,暂时有三种状态:已注册、未注册、休学
简介 introduction varchar(5000)
创建时间 createtime datetime 不为空
最后修改lastedittime datetime
create table student(
id int(11) auto_increment,
name varchar(50) not null, 姓名字段name
sex int(2) not null, 性别字段
studentid varchar(50) not null, 学号字段
class varchar(50) , 班级字段
idcard varchar(18) , 身份证字段
phone varchar(500) , 电话字段
email varchar(500) , 邮箱字段
state int(2) not null, 状态字段
introduction varchar(5000) , 简介字段
createtime datetime not null, 创建时间字段
lastedittime datetime , 最后修改时间字段
primary key(id), id主键
unique(studentid) 学号必须是唯一的
);
2,编写student表对应的JAVABEAN,代码如下:
package com.student.model;
import java.util.Date;
/**
* Student entity.
*
* @author MyEclipse Persistence Tools
*/
public class Student implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private Integer sex;
private String studentid;
private String class_;
private String idcard;
private String phone;
private String email;
private Integer state;
private String introduction;
private Date createtime;
private Date lastedittime;
// Constructors
/** default constructor */
public Student() {
}
/** minimal constructor */
public Student(String name, Integer sex, String studentid, Integer state,
Date createtime) {
this.name = name;
this.sex = sex;
this.studentid = studentid;
this.state = state;
this.createtime = createtime;
}
/** full constructor */
public Student(String name, Integer sex, String studentid, String class_,
String idcard, String phone, String email, Integer state,
String introduction, Date createtime, Date lastedittime) {
this.name = name;
this.sex = sex;
this.studentid = studentid;
this.class_ = class_;
this.idcard = idcard;
this.phone = phone;
this.email = email;
this.state = state;
this.introduction = introduction;
this.createtime = createtime;
this.lastedittime = lastedittime;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return this.sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public String getStudentid() {
return this.studentid;
}
public void setStudentid(String studentid) {
this.studentid = studentid;
}
public String getClass_() {
return this.class_;
}
public void setClass_(String class_) {
this.class_ = class_;
}
public String getIdcard() {
return this.idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getState() {
return this.state;
}
public void setState(Integer state) {
this.state = state;
}
public String getIntroduction() {
return this.introduction;
}
public void setIntroduction(String introduction) {
this.introduction = introduction;
}
public Date getCreatetime() {
return this.createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public Date getLastedittime() {
return this.lastedittime;
}
public void setLastedittime(Date lastedittime) {
this.lastedittime = lastedittime;
}
}
3,因为本程序使用的是Hibernate实现持久层,故建立student表的映射文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.student.model.Student" table="student" catalog="stu">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="50" not-null="true" />
</property>
<property name="sex" type="java.lang.Integer">
<column name="sex" not-null="true" />
</property>
<property name="studentid" type="java.lang.String">
<column name="studentid" length="50" not-null="true" unique="true" />
</property>
<property name="class_" type="java.lang.String">
<column name="class" length="50" />
</property>
<property name="idcard" type="java.lang.String">
<column name="idcard" length="18" />
</property>
<property name="phone" type="java.lang.String">
<column name="phone" length="500" />
</property>
<property name="email" type="java.lang.String">
<column name="email" length="500" />
</property>
<property name="state" type="java.lang.Integer">
<column name="state" not-null="true" />
</property>
<property name="introduction" type="java.lang.String">
<column name="introduction" length="5000" />
</property>
<property name="createtime" type="java.util.Date">
<column name="createtime" length="19" not-null="true" />
</property>
<property name="lastedittime" type="java.util.Date">
<column name="lastedittime" length="19" />
</property>
</class>
</hibernate-mapping>
4,编写访问数据库的DAO,实现对数据的增加、删除、修改、查找功能。先编写DAO 接口,StudentDAO.java,代码如下:
package com.student.dao;
import java.util.List;
import com.student.model.Page;
import com.student.model.State;
import com.student.model.Student;
public interface StudentDao {
/**
* 添加学生记录
* @param s
*/
public void save(Student s);
/**
* 修改一条学生记录
* @param s
*/
public void edit(Student s);
/**
* 根据ID号取得一条学生记录
* @param id
* @return
*/
public Student findById(Integer id);
/**
* 根据ID号来删除一条学生记录
* @param id
*/
public void deleteById(Integer id);
/**
* 判断学号是不是已经在数据库中存在
* @param studentId
* @return
*/
public boolean isStudentIdExit(String studentId);
/**
* 得到学生信息的总记录数
* @param totalCountSQL
* @param args
* @return
*/
public long getTotalSize(String totalCountSQL,String [] args);
/**
* 根据学号得到记录
* @param id
* @return
*/
public Student getStudentByStudentid(String id);
/**
* 查询指定页的学生记录
* @param p
* @param s
* @return
*/
public List <Student> getStudents(Page p,State s);
}
5,编写程序的业务逻辑层StudentManager,接口代码如下:
package com.student.service;
import java.util.List;
import com.student.dao.StudentDao;
import com.student.exception.StudentException;
import com.student.model.Page;
import com.student.model.State;
import com.student.model.Student;
public interface StudentManager {
/**
* 添加学生记录
* @param s
*/
public void save(Student s) throws StudentException;
/**
* 修改一条学生记录
* @param s
*/
public void edit(Student s) throws StudentException;
/**
* 根据ID号取得一条学生记录
* @param id
* @return
*/
public Student findById(Integer id) throws StudentException;
/**
* 根据ID号来删除一条学生记录
* @param id
* @throws StudentException
*/
public void deleteById(Integer id) throws StudentException;
/**
* 判断学号是不是已经在数据库中存在
* @param studentId
* @return
*/
public boolean isStudentIdExit(String studentId) throws StudentException;
/**
* 得到学生信息的总记录数
* @param totalCountSQL
* @param args
* @return
*/
public long getTotalSize(String totalCountSQL,String [] args) throws StudentException;
/**
* 根据学号得到记录
* @param id
* @return
*/
public Student getStudentByStudentid(String id) throws StudentException;
/**
* 查询指定页的学生记录
* @param p
* @param s
* @return
*/
public List <Student> getStudents(Page p,State s) throws StudentException;
}
6,该程序采用Struts开源框架,编写其配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="searchForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="studentId2" type="java.lang.String" />
<form-property name="type2" type="java.lang.String" />
<form-property name="clazz2" type="java.lang.String" />
<form-property name="name2" type="java.lang.String" />
<form-property name="flag" type="java.lang.String" />
</form-bean>
<form-bean name="addForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="phone" type="java.lang.String" />
<form-property name="sex" type="java.lang.String" />
<form-property name="state" type="java.lang.String" />
<form-property name="email" type="java.lang.String" />
<form-property name="clazz" type="java.lang.String" />
<form-property name="studentid" type="java.lang.String" />
<form-property name="introduction" type="java.lang.String" /
<form-property name="idcard" type="java.lang.String" />
<form-property name="name" type="java.lang.String" />
</form-bean>
<form-bean name="editForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="phone" type="java.lang.String" />
<form-property name="sex" type="java.lang.String" />
<form-property name="state" type="java.lang.String" />
<form-property name="email" type="java.lang.String" />
<form-property name="clazz" type="java.lang.String" />
<form-property name="studentid" type="java.lang.String" />
<form-property name="introduction" type="java.lang.String" /
<form-property name="idcard" type="java.lang.String" />
<form-property name="name" type="java.lang.String" />
</form-bean>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
<action attribute="searchForm" input="/search.jsp"
name="searchForm" path="/search" scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/search.jsp" />
</action>
<action attribute="addForm" input="/add.jsp" name="addForm"
path="/add" validate="true" scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/search.do" />
</action>
<action path="/delete"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/search.do" />
</action>
<action attribute="editForm" input="/edit.jsp" name="editForm"
path="/edit" scope="request" validate="true"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/search.do" />
</action>
<action path="/goedit"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="go" path="/edit.jsp" />
</action>
</action-mappings>
<message-resources
parameter="com.student.struts.ApplicationResources" />
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/action-servlet.xml" />
</plug-in>
</struts-config>
7,编写Spring配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/stu"></property>
<property name="username" value="root"></property>
<property name="password" value="123"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/student/model/Student.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>studentManager</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="studentDao" class="com.student.dao.StudentDaoHibernate"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="studentManager"
class="com.student.service.StudentManagerImpl" abstract="false"
lazy-init="default" autowire="default" dependency-check="default">
<property name="studentDao">
<ref bean="studentDao" />
</property>
</bean>
</beans>
8,编写web配置文件,web.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
四,总结
本程序采用的是Struts+Spring+Hibernate架构,降低了代码间的耦合度,程序的可扩展性得到了大大的提高。程序在编写时,对可能出现的异常进行了捕获,增加了程序的健壮性。本程序实现的功能比较简单,但其遵循了MVC的设计思想,Model层,View层,control层实现了很好的分离,大大减低了将来的维护难度。
一,程序综述
本程序主要实现了对学生信息的添加、删除、修改和查询(包括精确查询和模糊查询)。用户可以通过本程序实现对学生信息的综合管理。程序采用的是B/S结构,用户界面是基于浏览器的,用户在浏览器上完成对学生信息的综合管理。程序的主要Struts+Hibernate+Spring.
程序采用MVC架构,降低了耦合度。Struts充当程序的表现层,Hibernate充当持久层,Spring为逻辑层。采用的开发环境为MyEclipse,后台采用MySql数据库保存数据,采用tomcat作服务器.
二,程序功能说明
1,学生信息的添加
本程序实现了对学生信息的添加,在程序界面上,用户输入合法的学生信息,程序可以完成对用户输入信息的保存。程序还能对用户输入数据的合法性进行有效性检查。当用户输入的学生信息的姓名为空,学生的学号已经存在,邮箱、电话、身份证的格式不正确时,程序都能智能识别,避免了无效数据的提交。
2,学生信息的删除
本程序实现了对学生信息的删除,用户可以根据自己的需要,对那些不需要的学生信息进行删除操作。程序采用删除前先确定的方式,可以减少用户的误操作。
3,学生信息的修改
当学生信息有变动,需要修改时,用户可以通过本程序完成。用户点击修改学生信息按钮,进入学生信息修改页面。在该页面,用户可以根据自己的需要,对学生信息进行修改。程序还能识别用户的误操作,比如用户输入的数据不合法时(用户输入的姓名为空,学号已存在,邮箱、电话、身份证格式不正确),程序能够做出相应的响应,减少了用户的误操作。
4,学生信息的查询
本程序实现了对学生信息的组合查询,包括精确查询和模糊查询。在程序的查询界面上,用户可以在姓名,班级,学号输入信息,实现对学生信息的组合查询。用户还可以根据自己的需要选择查询的类型,可以是模糊查询和精确查询中的任意一种。程序还实现了对查询结果的分页显示。对一些不同的信息用不同的颜色以示区别。比如:学生性别为男时,蓝色显示。状态为未注册或休学时,高亮显示(红色显示)。当用户把鼠标放在学生的姓名上时,可以显示学生的简介信息。
三,程序详细设计说明
1,建立数据库
本程序采用的数据库是MySql数据库。
建立一个名为stu的数据库。sql语句如下:
create database stu;
在stu数据库下,创建名为student的数据库表。student表包括的字段有:学生ID、姓名、班级、学号、状态、性别、邮箱、电话、身份证、简介、创建时间和最后修改时间。其中ID号为学生的唯一标识,是学生表的主键,学生姓名不能为空,学生学号必须是唯一的,学生信息的创建时间不能为空。基于上述一些条件,建表语句如下:
数据库字段名称 特殊要求
唯一id 主键
姓名 name varchar(50) 不能为空
性别 sex int(2) 不为空,只有两种状态:男、女
学号 studentid varchar(50) 不能为空,值唯一
班级 class varchar(50)
身份证 idcard varchar(18)
电话 phone varchar(500)
邮箱 email varchar(500)
状态 tate int(2) 不为空,暂时有三种状态:已注册、未注册、休学
简介 introduction varchar(5000)
创建时间 createtime datetime 不为空
最后修改lastedittime datetime
create table student(
id int(11) auto_increment,
name varchar(50) not null, 姓名字段name
sex int(2) not null, 性别字段
studentid varchar(50) not null, 学号字段
class varchar(50) , 班级字段
idcard varchar(18) , 身份证字段
phone varchar(500) , 电话字段
email varchar(500) , 邮箱字段
state int(2) not null, 状态字段
introduction varchar(5000) , 简介字段
createtime datetime not null, 创建时间字段
lastedittime datetime , 最后修改时间字段
primary key(id), id主键
unique(studentid) 学号必须是唯一的
);
2,编写student表对应的JAVABEAN,代码如下:
package com.student.model;
import java.util.Date;
/**
* Student entity.
*
* @author MyEclipse Persistence Tools
*/
public class Student implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private Integer sex;
private String studentid;
private String class_;
private String idcard;
private String phone;
private String email;
private Integer state;
private String introduction;
private Date createtime;
private Date lastedittime;
// Constructors
/** default constructor */
public Student() {
}
/** minimal constructor */
public Student(String name, Integer sex, String studentid, Integer state,
Date createtime) {
this.name = name;
this.sex = sex;
this.studentid = studentid;
this.state = state;
this.createtime = createtime;
}
/** full constructor */
public Student(String name, Integer sex, String studentid, String class_,
String idcard, String phone, String email, Integer state,
String introduction, Date createtime, Date lastedittime) {
this.name = name;
this.sex = sex;
this.studentid = studentid;
this.class_ = class_;
this.idcard = idcard;
this.phone = phone;
this.email = email;
this.state = state;
this.introduction = introduction;
this.createtime = createtime;
this.lastedittime = lastedittime;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return this.sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public String getStudentid() {
return this.studentid;
}
public void setStudentid(String studentid) {
this.studentid = studentid;
}
public String getClass_() {
return this.class_;
}
public void setClass_(String class_) {
this.class_ = class_;
}
public String getIdcard() {
return this.idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getState() {
return this.state;
}
public void setState(Integer state) {
this.state = state;
}
public String getIntroduction() {
return this.introduction;
}
public void setIntroduction(String introduction) {
this.introduction = introduction;
}
public Date getCreatetime() {
return this.createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public Date getLastedittime() {
return this.lastedittime;
}
public void setLastedittime(Date lastedittime) {
this.lastedittime = lastedittime;
}
}
3,因为本程序使用的是Hibernate实现持久层,故建立student表的映射文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.student.model.Student" table="student" catalog="stu">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="50" not-null="true" />
</property>
<property name="sex" type="java.lang.Integer">
<column name="sex" not-null="true" />
</property>
<property name="studentid" type="java.lang.String">
<column name="studentid" length="50" not-null="true" unique="true" />
</property>
<property name="class_" type="java.lang.String">
<column name="class" length="50" />
</property>
<property name="idcard" type="java.lang.String">
<column name="idcard" length="18" />
</property>
<property name="phone" type="java.lang.String">
<column name="phone" length="500" />
</property>
<property name="email" type="java.lang.String">
<column name="email" length="500" />
</property>
<property name="state" type="java.lang.Integer">
<column name="state" not-null="true" />
</property>
<property name="introduction" type="java.lang.String">
<column name="introduction" length="5000" />
</property>
<property name="createtime" type="java.util.Date">
<column name="createtime" length="19" not-null="true" />
</property>
<property name="lastedittime" type="java.util.Date">
<column name="lastedittime" length="19" />
</property>
</class>
</hibernate-mapping>
4,编写访问数据库的DAO,实现对数据的增加、删除、修改、查找功能。先编写DAO 接口,StudentDAO.java,代码如下:
package com.student.dao;
import java.util.List;
import com.student.model.Page;
import com.student.model.State;
import com.student.model.Student;
public interface StudentDao {
/**
* 添加学生记录
* @param s
*/
public void save(Student s);
/**
* 修改一条学生记录
* @param s
*/
public void edit(Student s);
/**
* 根据ID号取得一条学生记录
* @param id
* @return
*/
public Student findById(Integer id);
/**
* 根据ID号来删除一条学生记录
* @param id
*/
public void deleteById(Integer id);
/**
* 判断学号是不是已经在数据库中存在
* @param studentId
* @return
*/
public boolean isStudentIdExit(String studentId);
/**
* 得到学生信息的总记录数
* @param totalCountSQL
* @param args
* @return
*/
public long getTotalSize(String totalCountSQL,String [] args);
/**
* 根据学号得到记录
* @param id
* @return
*/
public Student getStudentByStudentid(String id);
/**
* 查询指定页的学生记录
* @param p
* @param s
* @return
*/
public List <Student> getStudents(Page p,State s);
}
5,编写程序的业务逻辑层StudentManager,接口代码如下:
package com.student.service;
import java.util.List;
import com.student.dao.StudentDao;
import com.student.exception.StudentException;
import com.student.model.Page;
import com.student.model.State;
import com.student.model.Student;
public interface StudentManager {
/**
* 添加学生记录
* @param s
*/
public void save(Student s) throws StudentException;
/**
* 修改一条学生记录
* @param s
*/
public void edit(Student s) throws StudentException;
/**
* 根据ID号取得一条学生记录
* @param id
* @return
*/
public Student findById(Integer id) throws StudentException;
/**
* 根据ID号来删除一条学生记录
* @param id
* @throws StudentException
*/
public void deleteById(Integer id) throws StudentException;
/**
* 判断学号是不是已经在数据库中存在
* @param studentId
* @return
*/
public boolean isStudentIdExit(String studentId) throws StudentException;
/**
* 得到学生信息的总记录数
* @param totalCountSQL
* @param args
* @return
*/
public long getTotalSize(String totalCountSQL,String [] args) throws StudentException;
/**
* 根据学号得到记录
* @param id
* @return
*/
public Student getStudentByStudentid(String id) throws StudentException;
/**
* 查询指定页的学生记录
* @param p
* @param s
* @return
*/
public List <Student> getStudents(Page p,State s) throws StudentException;
}
6,该程序采用Struts开源框架,编写其配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="searchForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="studentId2" type="java.lang.String" />
<form-property name="type2" type="java.lang.String" />
<form-property name="clazz2" type="java.lang.String" />
<form-property name="name2" type="java.lang.String" />
<form-property name="flag" type="java.lang.String" />
</form-bean>
<form-bean name="addForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="phone" type="java.lang.String" />
<form-property name="sex" type="java.lang.String" />
<form-property name="state" type="java.lang.String" />
<form-property name="email" type="java.lang.String" />
<form-property name="clazz" type="java.lang.String" />
<form-property name="studentid" type="java.lang.String" />
<form-property name="introduction" type="java.lang.String" /
<form-property name="idcard" type="java.lang.String" />
<form-property name="name" type="java.lang.String" />
</form-bean>
<form-bean name="editForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="phone" type="java.lang.String" />
<form-property name="sex" type="java.lang.String" />
<form-property name="state" type="java.lang.String" />
<form-property name="email" type="java.lang.String" />
<form-property name="clazz" type="java.lang.String" />
<form-property name="studentid" type="java.lang.String" />
<form-property name="introduction" type="java.lang.String" /
<form-property name="idcard" type="java.lang.String" />
<form-property name="name" type="java.lang.String" />
</form-bean>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
<action attribute="searchForm" input="/search.jsp"
name="searchForm" path="/search" scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/search.jsp" />
</action>
<action attribute="addForm" input="/add.jsp" name="addForm"
path="/add" validate="true" scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/search.do" />
</action>
<action path="/delete"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/search.do" />
</action>
<action attribute="editForm" input="/edit.jsp" name="editForm"
path="/edit" scope="request" validate="true"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/search.do" />
</action>
<action path="/goedit"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="go" path="/edit.jsp" />
</action>
</action-mappings>
<message-resources
parameter="com.student.struts.ApplicationResources" />
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/action-servlet.xml" />
</plug-in>
</struts-config>
7,编写Spring配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/stu"></property>
<property name="username" value="root"></property>
<property name="password" value="123"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/student/model/Student.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>studentManager</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="studentDao" class="com.student.dao.StudentDaoHibernate"
abstract="false" lazy-init="default" autowire="default"
dependency-check="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="studentManager"
class="com.student.service.StudentManagerImpl" abstract="false"
lazy-init="default" autowire="default" dependency-check="default">
<property name="studentDao">
<ref bean="studentDao" />
</property>
</bean>
</beans>
8,编写web配置文件,web.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
四,总结
本程序采用的是Struts+Spring+Hibernate架构,降低了代码间的耦合度,程序的可扩展性得到了大大的提高。程序在编写时,对可能出现的异常进行了捕获,增加了程序的健壮性。本程序实现的功能比较简单,但其遵循了MVC的设计思想,Model层,View层,control层实现了很好的分离,大大减低了将来的维护难度。
- 学生信息管理系统程序说明文档.pdf (128.7 KB)
- 下载次数: 25
相关推荐
4. **面向对象编程**:Python支持面向对象编程,可能用类来封装学生信息、课程和成绩,实现对象的创建、访问和修改。 5. **用户界面**:虽然这是一个精简版,但可能仍包括一个简单的命令行界面或者图形用户界面...
学生成绩管理系统是教育机构中不可或缺的一部分,它旨在提高教学管理效率,确保数据的安全性和准确性。该系统结合了多种功能,包括成绩录入、查询、修改和统计,实现了学生成绩信息管理的自动化、系统化和规范化。 ...
学籍管理系统是教育信息化进程中的重要组成部分,它旨在优化学校管理流程,提高工作效率,确保学生信息的准确性和安全性。本文档主要围绕“学生学籍管理系统”的设计、分析和实现进行阐述,探讨了系统开发的背景、...
### 山东大学软件学院2021级Web数据管理复习精简版 #### 知识点概述 本文档旨在帮助山东大学软件学院2021级的学生们复习Web数据管理的相关知识点,主要包括爬虫的基本概念、爬虫的实现原理、爬虫框架的设计原则...
CAJViewer6.0精简版是一款专门用于阅读和处理特定格式文件的软件,主要针对学术文献和期刊,尤其在教育和科研领域中广泛应用。它能够打开并浏览PDF、NH、CAJ、CAA、TEB以及KDH等多种类型的文档。下面我们将详细探讨...
【描述】虽然描述很简洁,但我们可以推测这个系统可能包括一些基本功能,如记录学生信息、安排教学计划、跟踪教学进度、管理家教资源等。"简装版"暗示了这可能是一个精简版的软件,减少了非必要的复杂性,以便于快速...
本文档介绍了北华航天工业学院运动会管理系统的设计,特别是数据收集与整理子系统的设计。该系统是基于C/S架构的软件应用产品,使用NetBeans进行界面的设计,采用三层架构设计模式,后端数据库使用Mysql。 该系统...
SQL Server 2008 R2 Express是微软公司推出的一款轻量级、免费的数据库管理系统,它是SQL Server系列的一个重要版本,特别适合小型企业和个人开发者用于学习和开发。这款数据库系统包含了丰富的功能,足以满足许多...
本软件是一个比较小的管理系统,主要用户是在校大学生,而我们这个团队开发水平有限,对于能否推向市场不能做出过多保证,因此,经费的要求不高。 三、外部接口需求 本系统不需要特定的外部接口需求。 3.1 用户...
SpringBoot是Spring框架的一个精简版,它内置了Tomcat服务器,简化了配置,使得开发过程更为快速和便捷。Vue.js则是一种轻量级的前端JavaScript框架,以其组件化开发和易用性著称,对于构建用户界面特别适合。 系统...
- "说明文档.txt":可能包含了运行项目所需的步骤、环境配置、依赖库等详细信息,帮助用户快速上手。 - "Java项目说明书.zip":可能是一个Java项目的源代码压缩包,包含了SpringBoot应用的所有源代码和配置文件,是...
由于给定的信息主要涉及到一个学生的毕业设计说明书,我们可以推测这份文档可能涵盖了软件开发的多个方面。以下是基于这些文件名可能包含的知识点的详细说明: 1. **毕业设计说明书**:通常,毕业设计是高等教育中...
S52精简版意味着该版本在保持基本功能的基础上,尽可能地简化了硬件配置,使得成本更低廉、更易于普及。 ### 二、DXP资料解读 DXP(Design Explorer)是一种广泛使用的PCB设计软件,主要用于电路板的设计与制造。...
相比试用版、精简版或学生版,完整版可能提供更全面的服务和支持。 7. **文档和帮助**: - 压缩包内可能包含使用手册、快速入门指南、API文档等,这些文档将帮助用户了解如何操作和利用pta3000。如果软件是编程...
项目选择了SpringBoot作为基础框架,这是一个由Pivotal团队维护的Spring框架精简版,简化了Spring应用的初始搭建以及开发过程。SpringBoot内置了Tomcat服务器,可以快速启动并运行Web应用。 2. 数据存储: 使用...
标题中提到的“minix2.pdf”暗示了本文档可能包含了有关MINIX 2.0操作系统的相关信息。MINIX是由安德鲁·坦尼鲍姆教授开发的一个类UNIX操作系统,它主要用于教育目的。它的设计对后续的操作系统,特别是LINUX的开发...
该标题提到的“Mini Version Program Guide”可能是指对Cavium处理器编程指南的精简版或者入门级指南。 描述中提到的“多核处理器编程手册”意味着手册内容会涉及多核处理器编程的技术细节和方法论。这不仅包括了...
1. **毕业设计**:这表明该系统是一个学生在毕业前完成的综合性项目,通常涵盖了软件工程的多个阶段,如需求分析、设计、编码、测试和文档编写。 2. **Java**:Java是系统的主要开发语言,以其跨平台和稳定性著称,...
"共1页"说明这份PDF文件只有一页,可能是因为内容简洁,或者学院对于此类登记表有精简处理的要求。 然而,压缩包子文件的文件名称列表中出现的“赚钱项目”,与标题和描述中的内容不相符,这可能是一个错误,或者是...