基于Android和SSH的旅游自助系统APP设计

发布于:2022-12-23 ⋅ 阅读:(315) ⋅ 点赞:(0)

目录
一、 详细设计 1
【需求分析】 1
五类地方旅游类App下载量分布图 1
六大商店地方旅游类App下载量分布图 2
【可行性分析】 2
【用例建模】 3
【流程图】 4
【系统分析】 4
【时序图】 5
【ER图】 5
【数据库设计】 7
二、关键技术说明 8
三、模块测试 9
【可行性分析】
经济可行性:
设备
服务器:Linux系统的阿里云服务器
PC机:开发电脑3台
数据库:MySQL。
建模工具:Rotational Rose 2003

技术可行性:
版本控制系统:SVN
前端:Bootstrap框架、Html5+CSS3、JavaScript、Ajax
后台:Struts2框架、Hibernate框架、Spring框架
设计模式:拟采用单例模式、适配器和外观模式
算法:AES加密算法、MD5加密算法、路径规划算法

社会因素可行性分析:
所有软件都选用正版.
所有技术资料都由提出方保管。
合同制定确定违约责任.
用户使用可行性分析
二、关键技术说明
说明:将项目使用到的关键技术,本文转载自http://www.biyezuopin.vip/onews.asp?id=15211核心算法进行说明,可以配少量的代码进行说明。
版本控制系统:SVN
前端:Bootstrap框架、Html5+CSS3、JavaScript、Ajax
后台:Struts2框架、Hibernate框架、Spring框架
设计模式:拟采用单例模式、适配器和外观模式
算法:AES加密算法、MD5加密算法、路径规划算法

package com.tsc.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;

public class MyListView extends ListView {
	boolean allowDragTop = true; // 如果是true,则允许拖动至底部的下一页
	float downY = 0;
	boolean needConsumeTouch = true; // 是否需要承包touch事件,needConsumeTouch一旦被定性,则不会更改

	public MyListView(Context arg0) {
		this(arg0, null);
	}

	public MyListView(Context arg0, AttributeSet arg1) {
		this(arg0, arg1, 0);
	}

	public MyListView(Context arg0, AttributeSet arg1, int arg2) {
		super(arg0, arg1, arg2);
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		if (ev.getAction() == MotionEvent.ACTION_DOWN) {
			downY = ev.getRawY();
			needConsumeTouch = true; // 默认情况下,listView内部的滚动优先,默认情况下由该listView去消费touch事件
			allowDragTop = isAtTop();
		} else if (ev.getAction() == MotionEvent.ACTION_MOVE) {
			if (!needConsumeTouch) {
				// 在最顶端且向上拉了,则这个touch事件交给父类去处理
				getParent().requestDisallowInterceptTouchEvent(false);
				return false;
			} else if (allowDragTop) {
				// needConsumeTouch尚未被定性,此处给其定性
				// 允许拖动到底部的下一页,而且又向上拖动了,就将touch事件交给父view
				if (ev.getRawY() - downY > 2) {
					// flag设置,由父类去消费
					needConsumeTouch = false;
					getParent().requestDisallowInterceptTouchEvent(false);
					return false;
				}
			}
		}

		// 通知父view是否要处理touch事件
		getParent().requestDisallowInterceptTouchEvent(needConsumeTouch);
		return super.dispatchTouchEvent(ev);
	}

	/**
	 * 判断listView是否在顶部
	 * 
	 * @return 是否在顶部
	 */
	private boolean isAtTop() {
		boolean resultValue = false;
		int childNum = getChildCount();
		if (childNum == 0) {
			// 没有child,肯定在顶部
			resultValue = true;
		} else {
			if (getFirstVisiblePosition() == 0) {
				// 根据第一个childView来判定是否在顶部
				View firstView = getChildAt(0);
				if (Math.abs(firstView.getTop() - getTop()) < 2) {
					resultValue = true;
				}
			}
		}

		return resultValue;
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到