软件工程答辩文档
长沙理工大学
《软件系统设计基础》报告
基于安卓的旅游APP系统设计与实现
马光亚
学院计通学院专业软件工程
班级软件14-3 学号201416080332
学生姓名马光亚指导教师周旸
课程成绩完成日期2016年7月1日
实训成绩评定
学院计通学院专业软件32工程
班级软件14-3学号201416080332
学生姓名马光亚指导教师周旸
课程成绩完成日期 2016.7.1
指导教师对学生在实训中的评价
指导教师对实训的评定意见
软件系统设计基础实训任务书计通学院软件工程专业
基于安卓旅游手机APP系统设计与实现
学生姓名:马光亚指导老师:周旸
摘要随着科技的发展和社会的进步,手机已成为人们生活和工作中的不可缺少的一部分。设计一个现代的旅游手机APP系统势在必得。
旅游手机APP系统是常用的手机系统之一,它的实现主要由两部分组成:界面UI 设计及编程与MVC框架搭建的开发。由此得到了一个基本满足游客对景点信息,价格和一些信息的了解的系统。
关键词旅游手机APP;JAVA;Andrroid
Android for Design and implementation of APP system
Student name: 马光亚Advisor:周旸
Abstract with the development of science and technology and the progress of the society, mobile phones have become an indispensable part of people's life and work. Design a modern mobile phone APP system is to win.
Mobile phone APP system is one of the commonly used mobile phone system, its realization is mainly composed of two parts: the interface UI design and programming with the MVC framework to build the development. This has been a basic to meet the tourist attractions information, price and some information about the understanding of the system.
Keywords mobile phone JAVA; APP; Andrroid
1绪论
1.1课题研究的背景和意义
随着社会的发展,经济水平的不断提高,手机的使用越来越普及。同时伴随着移动互联网技术的发展,手机的功能也变得越来越丰富。手机旅游app很流行,但是大众化的旅游方式屡见不鲜,市场目前需要的是创新,即私人化定制旅游。80后为旅游消费者主力军,且调查显示,18-30岁的游客偏多,旅游不再走马观花,而是休闲放松,一定要根据游客自己的特点制定的属于他自己的旅行计划。人们越来越追求品质生活的追求,旅游者为了追求更好的物质享受和精神方面的满足,不再仅仅是局限于单纯的观光游览,而转向休闲度假与文化欣赏,并把参与性、体验性融入其中,使得旅游消费具有愉悦性、综合性等特性。专门制定一份属于他自己的旅游计划,避开了大众化的旅游方案。这是我们的优势,也是我们战胜其他旅游app,成为“为你而游”的一个重要法宝。
1.2 系统介绍
此旅游手机APP系统主要采用的是eclipse和安卓模拟器做为前台开发工具。以操作便捷、界面友好、灵活、实用为出发点,设计采用了模块化设计方法。系统实现了以下基本功能:
用户登录:可以实现用户账号的登陆。
用户注册:实现了对游客的信息注册。
景点信息的删除添加:删除添加景点信息。
旅游手机app系统具有如下一些特点:
方便性:游客以及工作人员能够及时了解景点情况,以便完成需要的工作。
稳定性:系统性能稳定。
操作性强:由于系统及面简洁,使用容易很便于用户操作。
1.3 开发工具及运行环境
所用到的开发工具及环境有:Eclipse,javasdk ,androidsdk,adt。
Eclipse 是一个开放源代码的、基于java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
Eclipse 开发环境(即 Eclipse 主窗口内的全部内容)称为工作台(workbench)。在这个主窗口中,有各种各样的面板,称为视图(View),视图中可显示控制台的输出、项目的概要信息等等。多个视图常常堆叠成记事簿的形式,可通过标签页来选择。除了视图之外,工作台中还有一个特殊的面板,称为编辑器(editor),这个地方可以编辑各种不同类型的文档,如源代码等。
2系统分析
2.1 需求分析的目的
软件的需求分析必须要有对原业务的一个深入了解、提取、抽象、升华的过程,管理软件需求分析尤其如此。
软件的需求分析是从用户的业务中提取出软件系统能够帮助用户解决的业务问题,通过对用户业务问题的分析,规划出我们的软件产品。这个步骤是对用户业务需求的一个升华,是一个把用户业务管理流程优化,转化为软件产品,从而提升管理而实现的质的飞跃,这一步是否成功,直接关系到开发出来的软件产品能否得到用户认可,顺利交付给客户,客户能否真正运用我们的产品帮助他解决业务或管理问题。
按照软件工程对软件开发过程的描述,需求阶段我们可以细分为需求调研和需求分析两个小阶段,需求调研需要充分细致的了解客户目标,用户业务内容、流程等,这是一个对需求的采集过程,是进行需求分析的基础准备。当我们已经了解、理解了用户的业务,于是可以开始分析需求了。
2.2需求分析
通过调查,要求系统需要有以下功能:
系统登录
新游客注册
景点信息管理
系统退出
2.3可行性分析
手机旅游APP系统使旅游行业走上了科学化、系统化的道路。
(1)经济可行性
使用手机旅游APP系统能够极大的节约旅游宣传工作的运行成本。主要体现
在:使用手机旅游APP系统能够减少工作人员数量,从而降低人力成本;实用
手机旅游APP系统可以减少对景点信息维护的成本
(2)技术可行性
目前国内外软硬件产品和技术发展迅速.服务器,操作系统等相关资源技术
容易获得并有较大的选择余地,而且在本系统软硬件要求适中,因此现有条
件在技术层面上完全可以满足要求
3 系统设计
3.1 设计目标
本系统是针对游客旅游过程进行设计的,主要实现如下目标:
合法用户可以登录此系统;
新用户可注册;
可以对景点信息进行管理。
3.2数据库概念结构设计
将从需求分析中得到的数据信息抽象为概念模型,经分析可得到E-R模型。
信息表
图3-3用户表3.3系统功能结构图
4系统主要功能模块实现
4.1登录界面
进入系统必须经过登录,用户输入用户名和密码后,系统会查询数据表Users,如果用户存在且密码正确,则根据用户的类型决定用户可以进行的操作。如果用户不存在或密码错误则提示用户名或密码错误,并要求用户重新输入。见图4-1。
图4-1 用户登录
4.2注册界面
此界面是进入相应功能模块的入口,相应功能是否可用取决于用户的类型。见图4-2。
图4-2注册界面
4.3浏览景点
图4-3景点信息
4.4删除景点信息
图4-4删除景点信息4.5退出系统提示
图4-5退出提示
5 系统测试
软件工程的根本目标是开发出高质量的完全符合用户需要的软件。因此,通过测试发现错误之后还必须诊断并改正错误,这才是测试的目的。
软件测试的目标为:
测试是为了发现程序中的错误而执行程序的过程。
好5的测试方案是极可能发现迄今为止尚未发现的错误。
成功的测试是发现了至今为止尚未发现的错误的测试。
测试方法:
白盒法其测试的前提是把测试的对象看作一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息设计或选择测试用例,对程序所有逻辑路径进行测试。
黑盒法其测试前提是把测试的对象看作一个黑盒子,测试人员完全不考虑程序的内部结构和特性。只依据程序的需求分析规格说明,检查程序的功能是否符合它的功能说明。
软件测试按4个步骤进行,即单元测试、集成测试、确认测试、系统测试。软件测试在软件生命周期中横跨两个阶段。通常在编写出每个模块之后就对它作必要的测试,模块的编写者和测试者是同一个人,编码和模块测试属于软件生命周期的同一个阶段。在这个阶段结束之后,对系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。
由于程序的编写由我一个人独立完成,程序的流程已经非常清楚。因此,我在系统的测试中主要采用的测试方法是“白盒测试”,在编写过程中也出现过很多错误,甚至根本无法运行下去,常采用在程序中的设置断点,逐步缩小范围并最终找到问题的解。在测试的过程中,我尽量站在用户的角度考虑问题,假如我是用户如何才能更方便,假如我在某一时刻进行某种操作会产生什么结果,大量进行假设。并请同学帮忙作为用户试使用系统并提出建议意见。在所有模块功能完成后,先测试了一个模块的功能,能够实现后,再对其它模块进行编写、测试,在这个过程中,往往又会返回到刚才的模块,再次改进。如此反复当所有模块测试完成后,便对子系统分别测试,输入大量数据并尽可能多的假设“非正常情况”以测试系统的健壮性。待这些测试都通过后就对整个系统进行测试。我所采用的测试方式属于集成测试中的渐增式测试,这种方法实际上同时完成单元测试和集成测试,其优点有:
1.利用已测试过的模块作为测试软件,开销小。
2.模块间的接口错误可以较早发现。
3.在测试时,如发现错误往往和最近加进来的那个模块有关。
4.已测试的模块可以在新的条件下再次检验,使测试更彻底。
6结论
本文重点讨论了“旅游手机APP”的设计方法和过程。全文共分以下几部分进行叙述:第一部分为绪论,简单的介绍了课题研究的背景和意义、系统介绍、开发工具及用到的一些理论知识;第二部分为系统分析,通过调查得出需求分析,从经济性和技术性两方面对系统的可行性进行了分析;第三部分系统设计,首先提出系统的设计目标,概念结构设计和逻辑结构设计,最后得出项目规划和系统功能结构图即总体设计;第四部分系统主要功能模块实现,介绍了主要模块的操作及实现的功能,加以少量的代码和界面图形,给读者一个清晰的认识;第五部分为系统测试;第六部分为设计总结,简要说明了该系统的实现过程,及自己在这次锻炼过程中的感受;第七部分为致谢;最后是附录,列出了系统实现过程中用到的一些主要代码。
在本次设计的全过程中,我对所学的知识有了一个比较系统的认识和理解。在设计中我才知自己掌握的知识还远远不够,将理论知识应用到实践中去,总会出现各种问题,不是理论没掌握好,而是光知道书本上的知识是远远不够的,一定要把理论知识和实践结合起来。把学到的知识应用到实践中去,多做多练,才可以把理论的精华发挥出来。知识不是知道,了解就好,一定让它在现实生活中得到充分的应用,从而解决一些问题,这才是学习的根本目的。而且计算机是一门非常复杂且庞大的学科,一项课题往往需要多项技术才可以完成的。在设计阶段,通过对课题的深入分析与研究,迫使我对技术有一定的了解。在遇到问题时,得到了指导老师与同学的悉心帮助,使我感受到集体的力量是无穷的。
我十分珍惜这次锻炼的机会,我按部就班的完成了自己的设计任务,但由于自己的知识水平有限,设计时间又较短,所以该系统还有许多不尽如人意的地方,比如用户界面不够美观等问题,都有待进一步改善。对于这些不足之处,恳请老师多多指教!当今的社会是竞争的社会,而人才的竞争则是竞争的焦点,课程设计对我们来说,是一次很好的锻炼,使我们各方面的能力都有了很大的提高,为我们将来踏出校门,走上社会增强了能力与自信!
7结论致谢
在本次课程设计中,首先要感谢周旸老师的悉心指导,给予我许多新的思想和宝贵的意见。周旸老师严谨的治学态度、勤奋的工作作风和平易近人的处事风范,给我留下了深刻的印象,时时教育着我并使我终身受益!值此论文完稿之际,特此向老师致以衷心的感谢!
同时,感谢我们软件工程系的领导和老师们给我提供的良好环境和学习机会,感谢老师和同学们对我的关心和帮助。
最后,感谢老师在百忙之中抽出宝贵时间来审阅我的论文,谢谢老师的指导。
8附录
公共类代码:
package cn.android.trval.activity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.android.trval.R;
import https://www.360docs.net/doc/5e14604194.html,yout;
import https://www.360docs.net/doc/5e14604194.html,.ProductManager;
import https://www.360docs.net/doc/5e14604194.html,erManager;
import cn.android.trval.model.Product;
import https://www.360docs.net/doc/5e14604194.html,er;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import https://www.360docs.net/doc/5e14604194.html,youtInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends ListActivity {
private Context context = null;
private LayoutInflater inflater = null;
private User loginUser = null;
private UserManager userManager = null;
// 定义一些创建对话框类型的标志
private static final int DIALOG_EXIT = -1; // 代表按下返回健弹出的对话框
private static final int DIALOG_LOGIN = 1; // 代表是登录对话框private static final int DIALOG_REG = 2; // 代表用户注册对话框
// 定义关于ListView相关常量
private static final int PAGESIZE = 5; // 每次取几条记录
private int pageIndex = 0; // 用于保存当前是第几页,0代表第一页private ProductManager productManager = null;
private List
private ListView lvProduct = null;
private MyAdapter adapter = null;
protected Menu myMenu;
public static Map
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init(); // 系统初使化
showDialog(DIALOG_LOGIN); // 调出登录对话框
// setContentView(https://www.360docs.net/doc/5e14604194.html,yout.main);
// showDialog(DIALOG_REG);
}
/**
* 初使化系统数据
*/
private void init() {
context = this;
this.inflater = LayoutInflater.from(this);
userManager = new UserManager();
pageIndex = 0;
}
/**
* 初始化系统界面
*/
private void initMainUI() {
productManager = new ProductManager();
products = productManager.getProdcutByPager(pageIndex,
PAGESIZE);
lvProduct = getListView();
// setContentView(https://www.360docs.net/doc/5e14604194.html,yout.main);
adapter = new MyAdapter(context);
lvProduct.setItemsCanFocus(true);
setListAdapter(adapter);
lvProduct.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
switch ((int) id) {
case -1: // 添加
Tool.ShowMessage(context, "添加!");
break;
case -2: // 更多
adapter.more();
break;
default:
// Tool.ShowMessage(context, id + "");
ViewHolder viewHolder = (ViewHolder) view.getTag();
// CheckBox chkIn = (CheckBox)
// view.findViewById(R.id.chkIn);
if (viewHolder.cBox != null) {
viewHolder.cBox.toggle();
Tool.ShowMessage(context, id + "");
isSelected.put(position - 1,
viewHolder.cBox.isChecked());
}
break;
}
}
});
}
@Override
protected Dialog onCreateDialog(int id) { Dialog dialog = this.buildDialog(id);
return dialog;
}
/**
* 根据不同的ID创建不同的对话框
*
* @param flag
* @return
*/
private Dialog buildDialog(int flag) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
switch (flag) {
case DIALOG_LOGIN:
createLoginDialog(builder);
break;
case DIALOG_EXIT:
createExitDialog(builder);
break;
case DIALOG_REG:
createRegistDialog(builder);
break;
default:
break;
}
return builder.create();
}