关于信息系统设计与开发——案例:VIP系统
一、关于信息系统设计与开发
信息系统开发流程先对需求分析系统分析,设计数据库,设计程序,再对测试数据进行测试。
在程序设计中运用了接口:定义一个接口,可以有多种实现。变量声明为接口变量,调用接口方法,以后切换实现类的时候,原有代码不用修改。
继承:定义一个类做为父类,将一些共有的属性和方法定义在这个类中,当某一个类需要使用到这些方法和属性的时候,就可以直接通过extends关键字就可以直接调用父类中的成员变量和方法,方便快捷。
重写:在子类中可以根据需要对从基类中继承来的方法进行重写,重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西。
二、案例: VIP系统
1、VIP客户信息系统包括以下内容:
- 建立客户信息数据库;
- 客户基本信息管理,包括客户名称、电话、账号、缴费等;
- 客户消费信息管理,包括消费金额,VIP客户等级信息等;
- 信息的Web查询;
- 系统的接口。
2、信息系统开发的主要任务
- 需求分析:需求分析是对信息系统应该具有的功能,性能的分析。
- 系统分析:是从信息系统的内部来分析信息系统的构成要素和结构。
- 系统设计:系统设计的任务是确定VIP客户信息系统的设计模型。
- 系统实现:测试的信息系统实物。
- 测试:对信息系统进行各方面测试。
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、密码隐性显示
关于信息系统设计与开发——案例:VIP系统的更多相关文章
- SpringBoot开发案例从0到1构建分布式秒杀系统
前言 最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路.俗话说,脱离案例讲架构都是耍流氓,最终使用SpringBoot模拟实现了部分秒杀场 ...
- p2p视频点播系统开发案例――Myseelite
项目地址:http://sourceforge.net/projects/myseelite/ 1. MySee公司倡导的开源项目,目前国内功能最强大的一个开源系统. 2. 一个直播(也支持轮播.点播 ...
- [转载]基于UML的需求分析和系统设计(完整案例和UML图形演示)
小序: 从学生时代就接触到UML,几年的工作中也没少使用,各种图形的概念.图形的元素和属性,以及图形的画法都不能说不熟悉.但是怎样在实际中有效地使用UML使之发挥应有的作用,怎样捕捉用户心中的需求并转 ...
- 《实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)》
<实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)> 基本信息 作者: 徐康明 辛洪郁 出版社:电子工业出版社 ISBN:9787121221378 上架时间:2014 ...
- 【推荐】使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享 在开始讲解之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的U ...
- 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery ...
- 使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享
使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享 使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享 在开始讲解之前,我们先来看一下什 ...
- 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)
第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...
- (转)使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享
原文地址:http://www.cnblogs.com/huyong/archive/2013/09/24/3334848.html 使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工 ...
随机推荐
- 小乌龟 coding 克隆、提交一直提示无权限
因为之前设置过账号,但是网上各种命令行清除都没有用,进入小乌龟设置删除全局配置,系统配置,保存就可以克隆等操作了
- tamptermonkey 脚本初步尝试
刚开始接触tamptermonkey 主要用于基于浏览器的数据采集 基本都是js基础 这里是采集表格里的内容, 构造json, 然后post发送到后台 如果加入定时刷新功能就可以随时或是按照固定或是随 ...
- 线程和进程PYTHON
基本概念: 计算机一次只能运行一个进程,而一个进程又可以有多个线程,例如百度网盘的上传和下载. 1.线程的创建 .调用threading模块 .创建线程theading.Threads(target ...
- 算法练习LeetCode初级算法之其他
位1的个数 解法一: class Solution { // you need to treat n as an unsigned value public int hammingWeight(int ...
- ubuntu16.04安装Navicate
1. http://download2.navicat.com/download/navicat100_mysql_en.tar.gz 2. tar -zxvf /home/rain/dow ...
- node.js的Promise库-bluebird示例
前两天公司一哥们写了一段node.js代码发给我,后面特意提了一句“写的不太优雅”.我知道,他意思是回调嵌套回调,因为当时比较急也就没有再纠结.然而内心中总记得要解决这个问题.解决node.js的回调 ...
- 过滤器(Filter)与拦截器(Interceptor )区别
目录 过滤器(Filter) 拦截器(Interceptor) 拦截器(Interceptor)和过滤器(Filter)的区别 拦截器(Interceptor)和过滤器(Filter)的执行顺序 拦截 ...
- 【aardio】]SQL创建、读写 excel
import access; var db,err = access( "/test.xls" ) //文件不存在可自动创建 //创建表 if( ! db.existsTable( ...
- GUI学习之四——QWidget控件学习总结
上一章将的QObject是PyQt里所有控件的基类,并不属于可视化的控件.这一章所讲的QWidget,是所有可视化控件的基类. QWidget包含下面几点特性 a.控件是用户界面的最小的元素 b.每个 ...
- 合适IT人的健身技巧
合适IT人的健身技巧: 健身益寿生活十条 虽然遗传学家说人的平均寿命可长达120岁,但本世纪人的寿命远远达不到这个数字^有鉴于此,国外一批医生.心理学家和营养学家制定了健身益寿生活10条准则,认为如能 ...