设计性实验报告.docx

上传人:b****5 文档编号:11884349 上传时间:2023-04-08 格式:DOCX 页数:57 大小:1.71MB
下载 相关 举报
设计性实验报告.docx_第1页
第1页 / 共57页
设计性实验报告.docx_第2页
第2页 / 共57页
设计性实验报告.docx_第3页
第3页 / 共57页
设计性实验报告.docx_第4页
第4页 / 共57页
设计性实验报告.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

设计性实验报告.docx

《设计性实验报告.docx》由会员分享,可在线阅读,更多相关《设计性实验报告.docx(57页珍藏版)》请在冰豆网上搜索。

设计性实验报告.docx

设计性实验报告

 

综合性设计性实验报告

 

实验工程名称:

图书管理App软件

所属课程名称:

无线与移动网络终端开发

学生XX/学号:

魏连莹041440512薛欢欢041440513

杨紫舒041440514X蒙041440515

董迎顺041440516黄骏滨041440519

李俊041440521

学生所在班级:

网络14405班   

依托实验室:

综C701

实验学期:

2017年大三下学期

 

计算机科学技术学院

实验名称

综合实验 无线与移动端开发的综合设计

实验地点

综C701

实验日期

2017-6-21

一、实验目的:

本设计是在学习Android平台软件开发的课程根底上进展的一次综合实践。

通过本综合设计,让学生们稳固有关Android平台软件开发的知识,也考察学生的学习情况。

二、实验内容

使用eclipse编写android的代码。

本软件为图书管理员通过移动平台来对图书进展一系列的操作,方便用户随时查看图书情况。

图书管理系统总的来说分为图书类别管理和图书信息管理。

图书类别管理主要编辑图书的类别,查询图书类别,删除图书类别;图书信息管理,主要包括添加图书,查询图书,返回主界面,并且每个图书都有详细描述,包括条形码、图书类别、图书名称、图书图片。

三、实验截图、操作步骤

1、图书管理的数据库设计

图1数据库设计图

数据库说明:

此图书管理一共分了三个数据表,第一个为图书表,里面包含了条形码〔主键〕、图书名称、图书类别,价格,库存数量、出版日期、图书封面等属性;第二个为用户表,里面包含了,用户ID〔主键〕,用户名称、用户密码、和地址;第三个是图书类别表,包含了图书类别ID〔主键〕,图书类别名称,它的主键图书类别ID是图书表的外键。

2、程序框架

图2程序框架图

程序框架说明:

左侧为效劳器的数据操作框架,对前台页面传入的数据在后台进展增删改查操作,并且对前台传过来的用户信息在数据库中进展比照,比照成功之后才可以进展登录;右侧为用户端的设计,就是用户能看见的安卓页面设计都在这里进展编写,界面设计都在layout里面,然后对界面的相应控件进展绑定,把适配器代码写在activity包里。

在效劳端和客户端相结合这才能很好地完成整个工程。

3、用户登录,用户可以输入用户名和密码通过登录进入主页面,然后在进展图书的操作,登录的效果图如下:

图3用户登录图

图4登录成功图

实现功能:

用户登录

实现方法:

此模块为登录模块,使用了TextView、EditText、Button等控件来实现整体布局。

在此布局中,采用了线性布局的构造来对页面的根本控件进展排布。

在LoginActivity.java中声明登录,重置按钮:

privateButtoncancelBtn,loginBtn,然后再去声明用户名和密码框登录:

privateEditTextuserEditText,pwdEditText;接着在设置顶部标题:

setTitle(手机客户端-登录);之后设置当前Activity页面布局:

setContentView(R.layout.login_system);通过这个FindViewById方法实例化四个组件:

loginBtn、cancelBtn、userEditText、pwdEditText。

然后给loginBtn、cancelBtn绑定OnClickListener()事件,通过url=HttpUtil.BASE_URL+"Login-

Servlet?

userName="+URLEncoder.encode〔....〕将数据传到后台,后台判断此用户是否存在并判断密码是否正确,在后台的LoginServlet.java中运用spl语句查询用户表,如果存在返回0,如不存在返回空。

如果用户登录成功,那么调用Toast.make

Text(getApplicationContext(),"登入成功",1).show()打印数据,然后进入根据intent.setClass(LoginActivity.this,MainMenuActivity.class);这个语句进入MainMenuActivity的页面。

4、查询功能,此块为模糊查询,用户可以根据小的信息量进展图书的查询,效果图如下:

图5模糊查询图

图6查询结果图

实现功能:

查询功能

实现方法:

模糊查询,即输入一个字符,输出所有存在该字符的路径。

在BookListActivity.java中,创立了三个按钮,“添加图书〞、“查询图书〞、“返回主界面〞,点击“查询图书〞按钮,通过intent.setClass(BookListActivity.this,BookQueryActivity.class);启动BookQueryActivity,并将BookListActivity先finish,等待之后在使用。

加载BookQueryActivity,设置当前Activity界面布局setContentView(R.layout.book_query)。

设置页面布局,为实现多种查询,我们设置了条形码、图书名称、图书类别和出版日期四个TextView,条形码和图书名称,使用EditText输入查询字符;图书类别那么使用Spinner控件,Spinner提供了从一个数据集合中快速选择一项值的方法;出版日期,使用日期控件DatePicker;创立复选框CheckBox,可选择出版日期是否参与查询。

最后创立“查询〞Button完成布局。

在BookQueryActivity中初始化book_query.xml布局中的几个控件。

判断获取到的几个重要字段对应的组件EditView填入的值不是为空,并通过queryConditionBook.set

Barcode(ET_barcode.getText().toString());queryConditionBook.setBookName

(ET_bookName.getText().toString());获取查询参数,通过DatepublishDate=newDate(dp_publishDate.getYear()-1900,dp_publishDate.getMonth(),dp_publishDate.getDayOfMonth());获取出版日期。

将可选内容与ArrayAdapter连接起来,bookClassId_adapter=newArrayAdapter(this,android.R.layout.simple_spinner_item,m);设置图书类别下拉列表的风格,spinner_bookClassId.setAdapter

(bookClassId_adapter);添加事件Spinner事件监听,pinner_bookClassId.setOn

ItemSelectedListener(newBookClassIdSpinnerSelectedListener());设置默认值,pinner_bookClassId.setVisibility(View.VISIBLE);添加图书按钮,btnQuery.set

OnClickListener(newOnClickListener()。

5、添加图书信息功能,把图书添加进来,效果如下:

图7添加图书信息图

实现功能:

图书添加功能

实现方法:

在BookListActivity.java中,创立了三个按钮,添加图书、查询图书、返回主界面点击添加图书按钮,通过Intent.setClass(BookListActivity.this,BookAddActivity.class)启动BookAddActivity,并将BookListActivity先finish,等待之后在使用。

加载BookAddActivity,设置当前Activity界面布局setContentView(R.Layout.book_add)。

在BookAddActivity中初始化xml布局中的几个控件。

判断获取到的几个重要字段对应的组件EditView填入的值不是为空,并通过bookService.AddBook(book),将页面上获取到的Book对象作为参数传递,并调用Service层中的方法。

AddBook()中,使用HttpUtil.SendPostRequest(url,params,

〞UTF-8”);向效劳器发送一条Http报文,类型为Post请求,并创立一个字节数组对象byte[]resultByte,获取从效劳端响应回的数据。

一般做更新操作时,效劳端传回的result数据是一个字符串,例如“图书添加成功!

〞或“图书添加失败!

〞。

然后将result传回Activity,并通过Toast.makeTest()在布局中打印出来。

6、添加图书类别功能,增添图书的多样性,实现效果如下:

图8图书类别页面

图9进入添加页面

图10添加成功图

实现功能:

添加图书类别

实现方法:

在BookClassListActivity.java中创立选项菜单,分别是“添加图书类别〞、“返回主界面〞两个选项,点击“添加图书类别〞选项,通过intent.setClass(BookClassListActivity.this,BookClassAddActivity.class);启动BookClassAddActivity,并将BookClassListActivity先关闭,等待之后再使用。

加载BookClassAddActivity.java,设置当前activity界面布局setContentView(R.layout.bookclass_add)。

在BookClassAddActivity中初始化xml布局中的控件。

有两个Button控件“确定〞、“重新填写〞和一个EditText控件。

在EditText控件中填写添加的书籍类别,点击“确定〞按钮。

判断获取类别名称的控件EditText填入的值是否为空,使用HttpUtil.SendPostRequest(url,params,"UTF-8");向效劳器发送一条Http报文,类型为post请求,将params里的类别名称作为参数传递,并调用Service层中的方法。

在Service层中,BookClassDAO中的AddBookClass()方法,将BookClassAddActivity中通过post请求获取到的值,通过SQL语句添加到数据库中,并通过在BookClassAddActivity中创立的字节数组对象byte[]resultByte,获取从效劳端响应回的数据。

从效劳端传回的的result数据为一个字符串,“图书类别添加成功〞或“图书类别添加失败〞。

然后将result传回Activity,并通过Toast.makeTest()在布局中打印出来。

7、删除图书类别功能,把不喜欢的图书分类删除掉,实现效果如下:

图11长按显示上下问菜单图

图12成功删除图

实现功能:

删除图书类别

实现方法:

在BookClassListActivity.java中创立上下文菜单,分别是“添加图书类别〞、“返回主界面〞两个选项“删除图书类别〞、“编辑图书类别〞,这里我负责的是删除图书类别这一局部。

添加长按点击功能lv.setOnCreateContextMenuListener(bookClassListItemListener);长按想要删除的图书类别,会弹出上下文菜单,点击“删除图书类别〞选项,先通过contextMenuInfo.position获取选中行位置,再通过选中行的位置用hashMap.get("bookClassId").toString()获取它的图书类别编号。

最后调用dialog()方法,会有提示弹出框弹出“确认删除吗?

〞字样。

点击“确认〞,用HttpUtil.SendPostRequest(url,params,"UTF-8");向效劳器发送一条Http报文,类型为post请求,将params里的类别名称作为参数传递,并调用Service层中的方法。

在Service层中,BookClassDAO中的DeleteBookClass()方法,将BookClassAddActivity中通过post请求获取到的值,通过SQL语句从数据库中删除,并通过在BookClassAddActivity中创立的字节数组对象byte[]resultByte,获取从效劳端响应回的数据。

从效劳端传回的的result数据为一个字符串,“图书类别删除成功!

〞或“图书类别删除失败〞。

然后将result传回Activity,并通过Toast.makeTest()在布局中打印出来。

8、编辑图书信息功能,用户可以对图书的信息进展修改,实现效果如下:

图13选编辑图书信息图

图14进展编写图

图15图书更新图

实现功能:

修改图书信息

实现方法:

长按菜单,触发响应函数onContextItemSelected(MenuItemitem),点击编辑图书信息按钮,调用BookEditActivity.Java文件,初始化当前Activity界面布局,通过findViewById方法实例化组件,将图书信息回显到EditText中,图书的类别通过调用bookClassService.GetAllBookClass();获取所有图书类别。

点击确定按钮时触发监听事件,事件中对图书的名称、价格、库存、图片进展验证,

使用HttpUtil.SendPostRequest(url,params,〞UTF-8”);向效劳器发送一条Http报文,类型为Post请求,并创立一个字节数组对象byte[]resultByte,获取从效劳端响应回的数据。

上传图书信息时调用业务层UpdateBook(book);操作完成后返回到图书管理界面。

9、编辑图书类别功能,用户可以对图书的类别进展修改,实现效果如下:

图16选择编辑图书类别图

图17编辑图书类别图

图18更新成功图

实现功能:

修改图书类别

实现方法:

界面上有四个数据,“计算机类〞“历史类〞“法律类〞“文学类〞,长按其中任何一个数据都会触发btnUpdate.setOnClickListener(newOnClickListener()方法,跳到bookclass_edit.xml,弹出子菜单,子菜单里有两个按钮

text="更新"android:

id="+id/BtnUpdate"....../>

text="取消"android:

id="+id/BtnCancle"......./>选择更新选项,弹出"手机客户端-修改图书信息〞页面,程序跳到BookEditActivity.java调用的onCreate方法,通过setContentView(R.layout.book_edit);设置当前Activity界面布局,通过findViewById方法实例化组件,使用btnUpdate=(Button)findViewById(R.id.BtnUpdate);修改图书类别,在类别名称选择框里面把第八个“法律类〞进展修改为“法律类啊〞。

点击更新按钮,程序会使用HttpUtil.SendPostRequest(url,params,〞UTF-8”);向效劳器发送一条Http报文,类型为Post请求,并创立一个字节数组对象byte[]resultByte,获取从效劳端响应回的数据。

做更新操作成功后时,效劳端传回的result数据是一个字符串,“图书类别更新成功!

〞。

然后将result传回Activity,并通过printStackTrace()在布局中打印出来。

四、实验代码

1、后台BookDAO.java的代码:

publicclassBookDAO{

publicListQueryBook(Stringbarcode,StringbookName,

intbookClassId,TimestamppublishDate){

ListbookList=newArrayList();

DBdb=newDB();

Stringsql="select*fromBookwhere1=1";

if(!

barcode.equals(""))

sql+="andbarcodelike'%"+barcode+"%'";

if(!

bookName.equals(""))

sql+="andbookNamelike'%"+bookName+"%'";

if(bookClassId!

=0)

sql+="andbookClassId="+bookClassId;

if(publishDate!

=null)

sql+="andpublishDate='"+publishDate+"'";

try{

ResultSetrs=db.executeQuery(sql);

while(rs.next()){

Bookbook=newBook();

book.setBarcode(rs.getString("barcode"));

book.setBookClassId(rs.getInt("bookClassId"));

book.setBookImage(rs.getString("bookImage"));

book.setBookName(rs.getString("bookName"));

book.setCount(rs.getInt("count"));

book.setPrice(rs.getFloat("price"));

book.setPublishDate(rs.getTimestamp("publishDate"));

bookList.add(book);

}

}catch(Exceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally{

db.all_close();

}

returnbookList;

}

/*传入图书对象,进展图书的添加业务*/

publicStringAddBook(Bookbook){

DBdb=newDB();

Stringresult="";

try{

/*如果所有验证通过就执行sql插入新商品信息*/

StringsqlString="insertintoBook(barcode,bookName,bookClassId,price,count,publishDate,bookImage)values('";

sqlString+=book.getBarcode()+"','";

sqlString+=book.getBookName()+"',";

sqlString+=book.getBookClassId()+",";

sqlString+=book.getPrice()+",";

sqlString+=book.getCount()+",'";

sqlString+=book.getPublishDate()+"','";

sqlString+=book.getBookImage()+"')";

db.executeUpdate(sqlString);

result="图书添加成功!

";

}catch(Exceptione){

e.printStackTrace();

result="图书添加失败";

}finally{

db.all_close();

}

returnresult;

}

/*删除图书*/

publicStringDeleteBook(Stringbarcode){

DBdb=newDB();

Stringresult="";

try{

StringsqlString="deletefromBookwherebarcode='"+barcode

+"'";

db.executeUpdate(sqlString);

result="图书删除成功!

";

}catch(Exceptione){

e.printStackTrace();

result="图书删除失败";

}finally{

db.all_close();

}

returnresult;

}

/*根据条形码获取到图书信息*/

publicBookGetBook(Stringbarcode){

Bookbook=null;

DBdb=newDB();

Stringsql="select*fromBookwherebarcode='"+barcode+"'";

try{

ResultSetrs=db.executeQuery(sql);

if(rs.next()){

book=newBook();

book.setBarcode(rs.getString("barcode"));

book.setBookClassId(rs.getInt("bookClassId"));

book.setBookImage(rs.getString("bookImage"));

book.setBookName(rs.getString("bookName"));

book.setCount(rs.getInt("count"));

book.setPrice(rs.getFloat("price"));

book.setPublishDate(rs.getTimestamp("publishDate"));

}

}catch(Exceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally{

db.all_close();

}

returnbook;

}

/*更新图书信息*/

publicStringUpdateBook(Bookbook){

DBdb=newDB();

Stringresult="";

try{

Stringsql="updateBooksetbookN

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

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1