设计性实验报告.docx
- 文档编号:9901312
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:56
- 大小:1.58MB
设计性实验报告.docx
《设计性实验报告.docx》由会员分享,可在线阅读,更多相关《设计性实验报告.docx(56页珍藏版)》请在冰豆网上搜索。
设计性实验报告
综合性设计性实验报告
实验项目名称:
图书管理App软件
所属课程名称:
无线与移动网络终端开发
学生姓名/学号:
魏连莹041440512薛欢欢041440513
杨紫舒041440514张蒙041440515
董迎顺041440516黄骏滨041440519
李俊041440521
学生所在班级:
网络14405班
依托实验室:
综C701
实验学期:
2017年大三下学期
计算机科学技术学院
实验名称
综合实验 无线与移动端开发的综合设计
实验地点
综C701
实验日期
2017-6-21
一、实验目的:
本设计是在学习Android平台软件开发的课程基础上进行的一次综合实践。
通过本综合设计,让学生们巩固有关Android平台软件开发的知识,也考查学生的学习情况。
二、实验内容
使用eclipse编写android的代码。
本软件为图书管理员通过移动平台来对图书进行一系列的操作,方便用户随时查看图书情况。
图书管理系统总的来说分为图书类别管理和图书信息管理。
图书类别管理主要编辑图书的类别,查询图书类别,删除图书类别;图书信息管理,主要包括添加图书,查询图书,返回主界面,并且每个图书都有详细描述,包括条形码、图书类别、图书名称、图书图片。
3、实验截图、操作步骤
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
(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{ publicList intbookClassId,TimestamppublishDate){ List 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="updateB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 实验 报告