[计算机软件及应用]酒店查询系统报告.doc

上传人:音乐台 文档编号:1992129 上传时间:2019-01-29 格式:DOC 页数:33 大小:2.61MB
返回 下载 相关 举报
[计算机软件及应用]酒店查询系统报告.doc_第1页
第1页 / 共33页
[计算机软件及应用]酒店查询系统报告.doc_第2页
第2页 / 共33页
[计算机软件及应用]酒店查询系统报告.doc_第3页
第3页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[计算机软件及应用]酒店查询系统报告.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]酒店查询系统报告.doc(33页珍藏版)》请在三一文库上搜索。

1、2011-2012学年第二学期移动平台应用与开发课程设计报告 学 院: 计算机科学与工程学院 班 级: 109030902 姓 名: 赵 宇 学 号: 10903090230 指导教师: 贺筠 罗颂 刘峰 陈媛 时间: 2012 年 6 月目 录第一章 课程设计的内容及要求.211 项目背景212 课程设计的内容213 课程设计的要求214 个人在课程设计中承担的主要工作2第二章 关键技术及相关原理介绍32.1 关键技术介绍32.2 相关原理介绍3第三章设计思路及相关关键问题的解决办法43.1 应用程序设计思路43.2 模块分类43.3 分工情况43.4 个人关键问题的解决办法4第四章模块功能

2、及关键源代码14第五章 运行结果演示说明17第六章 总结及心得体会21参考文献22第一章 课程设计的内容及要求1.1项目背景近 20 年来,移动通信系统的发展及更新换代真是让人眼花缭乱。因为,只有移动通信才能满 足人们日益增长的随时随地进行信息交流的需求。 移动通信的最终目标是实现任 何人可以在任何地点、任何时间与其它任何人进行任何方式的通信。 随着移动通信与 Internet 的飞速发展及相互融合,GPRS 使无线网络高速接 入到 Internet 成为现实, 移动用户从而可以享受到 Internet 提供的服务。 这样, 移动终端不再仅是通讯网络的终端,还将成为互联网的终端。3G 时代,移

3、动互 联网将会超脱 WAP 的限制,覆盖更加广泛的应用范围,现阶段主体的互联网是 基于手机终端盒移动通信网络的 WAP 市场。所以做手机端的产品开发将会是以 个很好的前景。目前市场上的手机主要有 IOS,Android,WP7,以成为三足鼎 立的局势。在这种局面下,通过分析,我选择了 Android。21 世纪是一个科技发展迅速的时代,随着科技的迅速发展,3G 移动互联网 技术迅速的在这个世纪崛起。现在 3G 通信已经成为最前沿的移动通信技术。随 着互联网的移动化的加速, 手机和其他移动终端的开发也迎来的新的高潮,他们 已经成为了移动互联网的未来。 手机已经成为人们生活的不可缺少的工具,无论

4、是工作、 上班、 坐车、 旅游等等。 手机上的应用给人们的生活带来的极大的方便。 像手机地图,手机淘宝,已经成为手机上的必装应用。因此我选择了手机端的酒 店查询系统,为一些生活外出,或者旅游的人在住宿吃饭上提供方便,相信这项 应用一定会被很多人所应用。 12 课程设计的内容本系统采用了 Windows7 系统下 Android1.6 开发平台作为开发平台。整体语言使用 Java 语言进行开发。用SQLite手动建立了数据库,并进行了对数据库的各种操作。本系统主要是用于查询酒店信息。本系统包括两个方面的功能:一是管理员的功能,二是用户的功能。管理员主要功能:通过界面添加酒店信息, 新增酒店。用户

5、的功能:可以注册账号。可通过输入酒店名查询酒店信息。当登陆后可以显示个人信息。选中某一个酒店后, 如果房间仍有空闲, 可以提交订单, 提交订单成功后, 数据库里记录会更改, 该房间可用数量减一。13 课程设计的要求输入输出描述:注册输入:当用户点击注册按钮后弹出注册页面,输入注册信息后,点击确定按钮,会把输入的注册信息存入数据库。登陆输入:当输入正确的账号和密码后会登陆系统,并且可以查看个人信息。查询输入输出:当用户在查询页面输入酒店名字后点击查询按钮后,可以显示出酒店的信息。订单输入输出:当用户下达订单后,会把订单数据存入数据库,并且会在个人信息中显示出个人订单。采用什么技术来开发:主要用到

6、了数据库存储技术,用SQLite建立数据库。用到SQLiteDatabase类封装了非常多的方法,用以建立,删除数据库。SQLiteOpenHelper类用来建立,更新和打开数据库。用DBAdapter类对数据库进行操作。还用到了一些界面控件:TextView,EditText,Button,RadioButton,ListView,abHost等控件。用到了界面布局技术:主要是用到了线性布局,相对布局。14 个人在课程设计中承担的主要工作第二章 关键技术及相关原理介绍2.1 关键技术介绍SQLite;界面控件;界面布局2.2 相关原理介绍SQLiteSQLite 一个非常流行的嵌入式数据库,

7、它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite。SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。 图1 SQLite 内部结构SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。SQLite 和其他数据库最大的不同就是对数据类型的

8、支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对于熟悉 SQL 的开发人员来时,在 An

9、droid 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。Activites 可以通过 Content Provider 或者 Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteO

10、penHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对

11、象填充表和初始化数据。 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。类似 INSERT, UPDATE, DELETE,有两种方法使用 SELECT 从 SQLite 数据库检索数据。使用 rawQuery() 直接调用 SELECT 语句;使用 query() 方法构建一个查询。正如 API 名字,rawQuery() 是最简单的解决方法。通过这个方法你就可以调用 SQL SELECT 语句。query() 方法用 SELECT 语句段构建查询。SELECT

12、语句内容作为 query() 方法的参数,比如:要查询的表名,要获取的字段名,WHERE 条件,包含可选的位置参数,去替代 WHERE 条件中位置参数的值,GROUP BY 条件,HAVING 条件。不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你可以:通过使用 getCount() 方法得到结果集中有多少记录;通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;通过getColumnNames() 得到字段名;通过 getColumnIndex() 转换成字段号;通过

13、 getString(),getInt() 等方法得到给定字段当前记录的值;通过 requery() 方法重新执行查询得到游标;通过 close() 方法释放游标资源;界面控件TextView和EditText:TextView是一种用于显示字符串的控件,EditText是用来输入和编辑字符串的控件。EditText继承于TextView所以EditText是一个具有编辑功能的TextView。Button:Button是一种按钮控件,用户能够在该控件上点击,并后引发相应的事件处理函数。RadioButton:RadioButton是仅可以选择一个选项的控件。ListView:ListView

14、是一种用于垂直显示的列表控件,如果显示内容过多,则会出现垂直滚动条。TabHost:Tab标签页是界面设计时经常使用的界面控件,可以实现多个分页之间的快速切换,每个分页可以显示不同的内容。界面布局线性布局:所有的子元素都按照垂直或水平的顺序在界面上排列。如果垂直排列,每行仅包含一个界面元素,如果水平排列,则每列仅包含一个界面元素。相对布局:能通过指定界面元素与其他元素的相对位置关系,确定界面中所有元素的布局位置。第3章 设计思路及相关关键问题的解决办法3.1 应用程序设计思路 酒店查询系统的功能包括酒店查询、预订、管理员管理、普通用户管理以及快捷菜单。考虑到本系统需要经常切换页面,为了方便就将

15、主要页面采用了TabActivity,以用来调用各个功能模块。 数据库方面采用android内嵌的sqlite3。3.2 模块分类 酒店查询模块、酒店预订模块、超级管理员模块、普通用户模块、登录模块、注册模块、关于模块、menu快捷菜单。3.3 分工情况赵宇:整体框架搭建、数据库设计、用户注册实现、酒店添加实现、 查询和订单界面布局及实现、代码整合。何谐:登录界面布局及实现、欢迎界面布局及实现、用户信息布局、软件测试。杨博:管理员界面布局、欢迎界面图片制作、软件测试、数据库设计检查。3.4 个人关键问题的解决办法 在最初框架搭建的时候考虑到用户操作的便利,我采用了TabActivity作为软件

16、的主界面来调用各个重要Acitivity。解决方式如下:public class HotelOrderSystem extends TabActivity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); /tab不写setContent TabHost tabHost =getTabHost();tabHost.addTab(tabHost.newTabSpec

17、(TAB1).setIndicator(酒店查询).setContent(new Intent(this,HotelSelect.class);tabHost.addTab(tabHost.newTabSpec(TAB2).setIndicator(酒店预订).setContent(new Intent(this,HotelOrder.class);tabHost.addTab(tabHost.newTabSpec(TAB3).setIndicator(个人信息).setContent(new Intent(this,Login.class); 在三个tabHost中都将其Content指向了

18、另外的Activity,TabActivity就成了显示框架,不做具体操作。 在数据库设计时,我采用了代码建库的方式,以下是SQL脚本:/用户信息表建立脚本private static final String DB_CREATE_USER=create table + USER_INFO_TABLE+(+USER_ID+ integer primary key autoincrement,+USER_ACCOUNT+ text not null,+USER_PASS+ text not null,+USER_NAME+ text not null,+USER_PHONE+ text not

19、null);/管理员信息表建立脚本private static final String DB_CREATE_ADMIN=create table +ADMIN_INFO_TABLE+(+ADMIN_ID+ integer primary key autoincrement,+ADMIN_ACCOUNT+ text not null,+ADMIN_PASS+ text not null,+ADMIN_NAME+ text not null,+ADMIN_PHONE+ text not null);/酒店信息表建立脚本private static final String DB_CREATE_H

20、OTEL=create table +HOTEL_INFO_TABLE+(+HOTEL_ID+ integer primary key autoincrement,+HOTEL_NAME+ text not null,+HOTEL_DISTRICT+ text not null,+HOTEL_LEVEL+ text not null,+HOTEL_PHONE+ text not null,+HOTEL_ROOM+ integer not null);/订单表建立脚本private static final String DB_CREATE_ORDER=create table +ORDER_T

21、ABLE+(+ORDER_ID+ integer primary key autoincrement,+USER_ID+ integer not null,+HOTEL_ID+ integer not null,+START_TIME+TimeStamp not null default (datetime(now,localtime),+END_TIME+ date);每个表的第一列是其唯一标识ID列,采用了autoincrement标识方式,而订单表的U_id和H_id是来自于UserInfo表和HotelInfo表的外键。数据字典:Database HCDBTable UserInfo用

22、户编号用户账号用户密码用户姓名用户电话U_idU_userU_passU_nameU_phoneintvarchar(20)varchar(10)varchar(10)varchar(11)identity(1,1)not nullnot nullnot nullnot nullprimary keyTable AdminInfo管理员编号管理员账号管理员密码管理员姓名管理员电话A_idA_userA_passA_nameA_phoneintvarchar(20)varchar(10)varchar(10)varchar(11)identity(1,1)not nullnot nullnot

23、nullnot nullprimary keyTable HotelInfo酒店编号酒店名酒店区域酒店星级酒店电话酒店空房数H_idH_nameH_districtH_levelH_phoneH_roomintvarchar(20)varchar(10)varchar(3)varchar(11)intidentity(1,1)not nullnot nullnot nullnot nullnot nullprimary keyTable OrderTable订单编号用户编号酒店编号预定时间过期时间O_idU_idH_idstarttimeendtimeintintintdatetimedate

24、timeidentity(1,1)not nullnot nullnot nullnot nullprimary keyforeign keyforeign key第四章模块功能及关键源代码/*赵宇 10903090230 2012/6/27 *数据库帮助类 */public class DBHelper extends SQLiteOpenHelper/数据库private static final String DB_NAME=hotel.db;/用户信息表private static final String USER_INFO_TABLE = UserInfo;/管理员信息表priva

25、te static final String ADMIN_INFO_TABLE=AdminInfo;/酒店信息表private static final String HOTEL_INFO_TABLE=HotelInfo;/订单表private static final String ORDER_TABLE=OrderTable;private static final int DB_VERSION=1;/用户信息表列名public static final String USER_ID = U_id;public static final String USER_ACCOUNT = U_us

26、er;public static final String USER_PASS = U_pass;public static final String USER_NAME = U_name;public static final String USER_PHONE = U_phone;/管理员信息表列名public static final String ADMIN_ID = A_id;public static final String ADMIN_ACCOUNT = A_user;public static final String ADMIN_PASS = A_pass;public s

27、tatic final String ADMIN_NAME = A_name;public static final String ADMIN_PHONE = A_phone;/酒店信息表列名public static final String HOTEL_ID = H_id;public static final String HOTEL_NAME = H_name;public static final String HOTEL_DISTRICT = H_district;public static final String HOTEL_LEVEL = H_level;public sta

28、tic final String HOTEL_PHONE = H_phone;public static final String HOTEL_ROOM = H_room;/订单表列名/public static final String USER_ID = U_id;/public static final String HOTEL_ID = H_id;public static final String ORDER_ID = O_id;public static final String START_TIME = starttime;public static final String E

29、ND_TIME = endtime;private SQLiteDatabase db;public DBHelper(Context context) super(context, DB_NAME, null, DB_VERSION);/ TODO Auto-generated constructor stub/用户信息表建立脚本private static final String DB_CREATE_USER=create table + USER_INFO_TABLE+(+USER_ID+ integer primary key autoincrement,+USER_ACCOUNT+

30、 text not null,+USER_PASS+ text not null,+USER_NAME+ text not null,+USER_PHONE+ text not null);/管理员信息表建立脚本private static final String DB_CREATE_ADMIN=create table +ADMIN_INFO_TABLE+(+ADMIN_ID+ integer primary key autoincrement,+ADMIN_ACCOUNT+ text not null,+ADMIN_PASS+ text not null,+ADMIN_NAME+ tex

31、t not null,+ADMIN_PHONE+ text not null);/酒店信息表建立脚本private static final String DB_CREATE_HOTEL=create table +HOTEL_INFO_TABLE+(+HOTEL_ID+ integer primary key autoincrement,+HOTEL_NAME+ text not null,+HOTEL_DISTRICT+ text not null,+HOTEL_LEVEL+ text not null,+HOTEL_PHONE+ text not null,+HOTEL_ROOM+ in

32、teger not null);/订单表建立脚本private static final String DB_CREATE_ORDER=create table +ORDER_TABLE+(+ORDER_ID+ integer primary key autoincrement,+USER_ID+ integer not null,+HOTEL_ID+ integer not null,+START_TIME+TimeStamp not null default (datetime(now,localtime),+END_TIME+ date);Overridepublic void onCr

33、eate(SQLiteDatabase db) / TODO Auto-generated method stub/打开或者创建数据库/db.openOrCreateDatabase(DB_NAME,null);/db.execSQL(DB_CREATE_USER);/db.execSQL(DB_CREATE_ADMIN);/db.execSQL(DB_CREATE_HOTEL);/db.execSQL(DB_CREATE_ORDER);Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion

34、) / TODO Auto-generated method stub/如果存在表则删除/db.execSQL(DROP TABLE IF EXISTS +DB_CREATE_USER);/db.execSQL(DROP TABLE IF EXISTS +DB_CREATE_ADMIN);/db.execSQL(DROP TABLE IF EXISTS +DB_CREATE_HOTEL);/db.execSQL(DROP TABLE IF EXISTS +DB_CREATE_ORDER);/重新建立数据库/onCreate(db);/本方法用于打开数据库,db为SQLiteDatabase实例

35、public void open()throws SQLiteExceptiontryLog.i(2, 1);db = this.getWritableDatabase();Log.i(2, 1);catch(SQLiteException ex)Log.i(2, 1);db = this.getReadableDatabase();Log.i(2, 1);/本方法用于关闭数据库,db为SQLiteDatabase实例public void close()if(db!=null)db.close();db=null;/本方法用于查询酒店信息public String select()db=th

36、is.getReadableDatabase();Log.i(ers,1);/实例化游标,以获取数据表Cursor cursor=db.query(HotelInfo, new StringH_name,H_district,H_level,H_phone,H_room, null, null, null, null,null);Log.i(ers,2);int resultCounts=0;/获取元祖数量resultCounts=cursor.getCount();if (resultCounts = 0 | !cursor.moveToFirst() return false;elsere

37、turn true;/return cursor;/本方法用于插入酒店数据,db为SQLiteDatabase实例public long insert(String Title,String FIELD_TITLE,String TABLE_NAME)db=this.getWritableDatabase();ContentValues cv=new ContentValues(); cv.put(FIELD_TITLE0, Title0);cv.put(FIELD_TITLE1, Title1);cv.put(FIELD_TITLE2, Title2);cv.put(FIELD_TITLE3

38、, Title3);cv.put(FIELD_TITLE4, Title4);/cv.put(FIELD_TITLE5, Title5);long row=db.insert(TABLE_NAME, null, cv);return row;/本方法用于插入用户信息,db为SQLiteDatabase实例public long insert2(String Title,String FIELD_TITLE,String TABLE_NAME)db=this.getWritableDatabase();ContentValues cv=new ContentValues(); cv.put(FI

39、ELD_TITLE0, Title0);cv.put(FIELD_TITLE1, Title1);cv.put(FIELD_TITLE2, Title2);cv.put(FIELD_TITLE3, Title3);/cv.put(FIELD_TITLE4, Title4);/cv.put(FIELD_TITLE5, Title5);long row=db.insert(TABLE_NAME, null, cv);return row;/本方法用于删除数据public void delete(int id,String FIELD_TITLE,String TABLE_NAME)db=this.

40、getWritableDatabase();String where=FIELD_TITLE+=?;String whereValue=Integer.toString(id);db.delete(TABLE_NAME, where, whereValue);/本方法用于更新数据public void update(int id,String FIELD_TITLE,String Title,String TABLE_NAME)db=this.getWritableDatabase();String where=FIELD_TITLE+=?;String whereValue=Integer.

41、toString(id);ContentValues cv=new ContentValues(); cv.put(FIELD_TITLE, Title);db.update(TABLE_NAME, cv, where, whereValue);/本方法用于检测登录信息是否正确public Boolean ComparePassWordByName(String TableName, String columns,String NameType,String PassType,String name,String pwd) /一个游标,用于查询数据库里的数据Cursor cursor = db

42、.query(TableName, columns, NameType + = + +name+,null, null, null, null);String password=;int resultCounts = cursor.getCount();/假如说没查到数据,就返回falseif (resultCounts = 0 | !cursor.moveToFirst() return false;/加入查到了数据for (int i = 0; i resultCounts; i+) /获取密码password = cursor.getString(cursor.getColumnIndex(PassType); cursor.moveToNext();/对比用户输入的密码和数据库里面的密码if(pwd.equals(password)/匹配成功返回truereturn true;else /匹配失败返回fa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1