关于信息系统设计与开发——案例:VIP系统

一、关于信息系统设计与开发

  信息系统开发流程先对需求分析系统分析,设计数据库,设计程序,再对测试数据进行测试。

  在程序设计中运用了接口:定义一个接口,可以有多种实现。变量声明为接口变量,调用接口方法,以后切换实现类的时候,原有代码不用修改。

  继承:定义一个类做为父类,将一些共有的属性和方法定义在这个类中,当某一个类需要使用到这些方法和属性的时候,就可以直接通过extends关键字就可以直接调用父类中的成员变量和方法,方便快捷。

  重写:在子类中可以根据需要对从基类中继承来的方法进行重写,重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西。

二、案例: VIP系统

1、VIP客户信息系统包括以下内容:

  1. 建立客户信息数据库;
  2. 客户基本信息管理,包括客户名称、电话、账号、缴费等;
  3. 客户消费信息管理,包括消费金额,VIP客户等级信息等;
  4. 信息的Web查询;
  5. 系统的接口。

2、信息系统开发的主要任务

  1. 需求分析:需求分析是对信息系统应该具有的功能,性能的分析。
  2. 系统分析:是从信息系统的内部来分析信息系统的构成要素和结构。
  3. 系统设计:系统设计的任务是确定VIP客户信息系统的设计模型。
  4. 系统实现:测试的信息系统实物。
  5. 测试:对信息系统进行各方面测试。

3、项目搭建

1)创建maven项目
选择aptach的maven-archetype-webapp
填入groupID,artifactId等
确认项目名称
maven插件会自动生成项目结构

2)添加其他目录
在src/main下添加java目录,设置为源码根目录
注: 有需要的话可以在src下载添加测试相关代码目录test

建立如下目录结构
com.xxx.common 公共代码
com.xxx.vip
entity 实体
dao 数据访问层
function 业务层
web 表现层
-formbean
-handler

在webapp下添加
static目录用于存放静态资源,如图片,js,css等
放入jquery和bootstrap

在web-inf目录添加views目录,用于存放jsp等视图文件

修改web.xml(webapp/WEB-INF/web.xml)中的文档声明
复制apache-tomcat-8.5.33\conf\web.xml中的说明 字符编码和版本两部分
3)修改项目和模块的语言级别为1.8
默认的LanguageLevel和JavaCompiler都是1.5

在pom.xml中添加如下代码,指定maven编译插件maven-compiler-plugin的版本
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>

4、集成springmvc
在http://mvnrepository.com/网站搜索依赖库
1)在pom.xml中添加依赖
spring-mvc
servlet-api
jstl
2)在src/main/resources目录下添加spring-mvc.xml配置文件
a)添加注解驱动<mvc:annotation-driven >
b)注册视图解析器
c)扫描mvc组件

3)在web.xml中配置spring-mvc前端控制器DispatcherServlet
a)配置随服务器启动而初始化
b)配置参数contextConfigLocation,指向spring-mvc的路径
c)配置servlet-mapping
仅处理*.do请求
4)web.xml配置请求和应答字符编码处理过滤器
CharacterEncodingFilter

5)配置404,500,欢迎界面等特殊页面(略)
6)编写测试案例

5、集成Spring
1)添加spring依赖

2)编写配置文件spring-context.xml
扫描业务层组件
3)在web.xml中配置ContextLoaderListener监听器,启用Spring容器
配置contextConfigLocation,指定spring-context.xml路径
6、集成c3p0
1)添加依赖
c3p0(http://mvnrepository.com/artifact/com.mchange/c3p0),
jdbc-mysql
2)在spring-context中定义c3p数据源ComboPooledDataSource
配置属性
基础信息
driverClass/jdbcurl/user/password
连接数相关
initialPoolSize/minPoolSize/maxPoolSize/acquireIncrement
其他属性请参见相关文档
7、配置声明式事务管理
1)添加依赖
spring-tx
spring-jdbc
2)在spring-context中 配置数据源事务管理DataSourceTransactionManager
指定数据源
3)在spring-context中 指定通过注解控制事物
<tx:annotation-driven>
指定事务管理器

错误transaction-manager is not allowed here 解决办法 同spring-mvc.xml文件出错https://blog.csdn.net/yuynim/article/details/79738802)

8、集成mybatis
1)添加依赖
mybatis(mybatis核心包)
mybatis-spring(mybatis与Spring整合的核心包)
pagehelper(分页查询)
cglib(从mybatis查找不冲突的版本)
2)编写mybatis配置文件
相关配置
<setting name="cacheEnabled" value="true"/>
<setting name="defaultStatementTimeout" value="3000"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="proxyFactory" value="CGLIB"/>
<setting name="lazyLoadingEnabled" value="true" />
集成分页插件
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql" />
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样 -->
<property name="offsetAsPageNum" value="true" />
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true" />
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型) -->
<property name="pageSizeZero" value="true" />
</plugin>
3)在spring-context.xml中配置SqlSessionFactoryBean
指定数据源
指定mybatis配置文件路径
指定mapper文件路径
4)在spring-context.xml配置扫描mapper生成dao(MapperScannerConfigurer)
指定SqlSessionFactoryBean
指定要扫描的包
9、编写一个登录示例
编写实体
编写mapper
编写function
编写handler

entity是数据库表抽象出来的类,它和数据库中的表是完全对应的;

dao类是针对数据库进行直接操作(调用entity);
functiong(service)是业务逻辑层(通过调用dao层类来操作数据库数据);

web(action)是表示层,控制页面的跳转(负责调用业务逻辑的服务组件);

https://www.cnblogs.com/adamJin/p/6930122.html

10、完成功能:登录、注销、修改密码
关键技术点:
1)注销时要失效session,重定向到登录界面

2)修改密码功能注意验证两次密码是否一致,新密码和旧密码不能一样

3)密码修改完成后需要重定向到登录页面重新登录

4)frame跳到登录页面时需要控制登录页面不能被包含
关键代码:
if(window.top!==window){
window.top.location.href=window.location.href;
}
5)密码需要加密

11、退出登录
1.在loginHandler.java中添加“退出登录”参考图片“1-退出登录”
2.新建一个公共dao接口:AbstractDao,参考图片“2-公共Dao接口”
3.修改UserDao接口,参考图片“3-修改UserDao”
4.修改UserDaoMapper.xml文件,参考图片“4-修改UserDaoMapper”
5.修改UserFunctionImpl类,参考图片“5-修改UserFunctionImpl”

测试 登录 和 退出登录
12、修改密码
6.修改LoginHandler.java,参考图片“6-修改LoginHandler”
7.修改UserFunction接口,添加修改密码的方法,参考“7-修改UserFunction接口”
8.把ThisSystemUtil.java 重构 重命名为 AssertThrowUtil.java,然后修改,添加一些公共方法,参考图“8-完成AssertThrowUtil类”
9.完成UserFunctionImpl类,实现密码修改的方法,参考图片“9-完成UserFunctionImpl类”
10.修改login页面,参考图片“10-修改login页面”,代码如下
<script>
if(window.top!=window){
window.top.location.href=window.location.href
}
</script>

测试 修改密码
13、密码加密
11.完成公共类加密算法,如图“11-公共类加密算法”,然后再修改UserFunctionImpl类,验证密码之前先应用加密算法。
测试 修改密码
15、密码隐性显示

上一篇:深入理解JVM结构


下一篇:2021最新深度学习之TensorFlow:入门、原理与进阶实战 中文pdf版+源码下载