1、设计性实验报告综合性设计性实验报告实验工程名称: 图书管理App软件 所属课程名称: 无线与移动网络终端开发 学生XX/学号:魏连莹041440512薛欢欢041440513杨紫舒041440514X 蒙041440515 董迎顺041440516黄骏滨041440519李 俊041440521 学生所在班级:网络14405班 依托实验室: 综C701 实验学期: 2017年大三下学期计算机科学技术学院实验名称综合实验 无线与移动端开发的综合设计实验地点 综C701实验日期2017-6-21一、实验目的:本设计是在学习Android平台软件开发的课程根底上进展的一次综合实践。通过本综合设计,让
2、学生们稳固有关Android平台软件开发的知识,也考察学生的学习情况。二、实验内容使用eclipse编写android的代码。本软件为图书管理员通过移动平台来对图书进展一系列的操作,方便用户随时查看图书情况。图书管理系统总的来说分为图书类别管理和图书信息管理。图书类别管理主要编辑图书的类别,查询图书类别,删除图书类别;图书信息管理,主要包括添加图书,查询图书,返回主界面,并且每个图书都有详细描述,包括条形码、图书类别、图书名称、图书图片。三、实验截图、操作步骤1、图书管理的数据库设计图1 数据库设计图数据库说明:此图书管理一共分了三个数据表,第一个为图书表,里面包含了条形码主键、图书名称、图书
3、类别,价格,库存数量、出版日期、图书封面等属性;第二个为用户表,里面包含了,用户ID主键,用户名称、用户密码、和地址;第三个是图书类别表,包含了图书类别ID主键,图书类别名称,它的主键图书类别ID是图书表的外键。2、程序框架图2 程序框架图程序框架说明:左侧为效劳器的数据操作框架,对前台页面传入的数据在后台进展增删改查操作,并且对前台传过来的用户信息在数据库中进展比照,比照成功之后才可以进展登录;右侧为用户端的设计,就是用户能看见的安卓页面设计都在这里进展编写,界面设计都在layout里面,然后对界面的相应控件进展绑定,把适配器代码写在activity包里。在效劳端和客户端相结合这才能很好地完
4、成整个工程。3、用户登录,用户可以输入用户名和密码通过登录进入主页面,然后在进展图书的操作,登录的效果图如下:图3 用户登录图图4 登录成功图实现功能:用户登录实现方法:此模块为登录模块,使用了TextView 、EditText、Button等控件来实现整体布局。在此布局中,采用了线性布局的构造来对页面的根本控件进展排布。在LoginActivity.java中声明登录,重置按钮:private Button cancelBtn,loginBtn,然后再去声明用户名和密码框登录:private EditText userEditText,pwdEditText;接着在设置顶部标题:setTi
5、tle(手机客户端-登录);之后设置当前Activity页面布局:setContentView(R.layout.login_system);通过这个FindViewById方法实例化四个组件:loginBtn、cancelBtn、userEditText、pwdEditText。然后给loginBtn 、cancelBtn绑定OnClickListener()事件,通过url = HttpUtil.BASE_URL+ Login-Servlet?userName=+ URLEncoder.encode.将数据传到后台,后台判断此用户是否存在并判断密码是否正确,在后台的LoginServlet
6、.java中运用spl语句查询用户表,如果存在返回0,如不存在返回空。如果用户登录成功,那么调用Toast.makeText(getApplicationContext(), 登入成功, 1).show()打印数据,然后进入根据intent.setClass(LoginActivity.this,MainMenuActivity.class);这个语句进入MainMenuActivity的页面。4、查询功能,此块为模糊查询,用户可以根据小的信息量进展图书的查询,效果图如下:图5 模糊查询图图6 查询结果图实现功能:查询功能实现方法:模糊查询,即输入一个字符,输出所有存在该字符的路径。在Book
7、ListActivity.java中,创立了三个按钮,“添加图书、“查询图书、“返回主界面,点击“查询图书按钮,通过intent.setClass(BookListActivity.this, BookQueryActivity.class);启动BookQueryActivity,并将BookListActivity先finish,等待之后在使用。加载BookQueryActivity,设置当前Activity界面布局setContentView(R.layout.book_query)。设置页面布局,为实现多种查询,我们设置了条形码、图书名称、图书类别和出版日期四个TextView,条形码
8、和图书名称,使用EditText输入查询字符;图书类别那么使用Spinner控件,Spinner提供了从一个数据集合中快速选择一项值的方法;出版日期,使用日期控件DatePicker;创立复选框CheckBox,可选择出版日期是否参与查询。最后创立“查询Button完成布局。在BookQueryActivity中初始化book_query.xml布局中的几个控件。判断获取到的几个重要字段对应的组件EditView填入的值不是为空,并通过queryConditionBook.setBarcode(ET_barcode.getText().toString();queryConditionBook
9、.setBookName(ET_bookName.getText().toString();获取查询参数,通过 Date publishDate = new Date(dp_publishDate.getYear()-1900,dp_publishDate.getMonth(),dp_publishDate.getDayOfMonth();获取出版日期。将可选内容与ArrayAdapter连接起来,bookClassId_adapter=newArrayAdapter(this,android.R.layout.simple_spinner_item, m);设置图书类别下拉列表的风格,spi
10、nner_bookClassId.setAdapter(bookClassId_adapter);添加事件Spinner事件监听,pinner_bookClassId.setOnItemSelectedListener(new BookClassIdSpinnerSelectedListener();设置默认值,pinner_bookClassId.setVisibility(View.VISIBLE);添加图书按钮,btnQuery.setOnClickListener(new OnClickListener()。5、添加图书信息功能,把图书添加进来,效果如下:图7 添加图书信息图实现功能:
11、图书添加功能实现方法:在BookListActivity.java中,创立了三个按钮,添加图书、查询图书、返回主界面点击添加图书按钮,通过Intent.setClass(BookListActivity.this, BookAddActivity.class)启动BookAddActivity,并将BookListActivity先finish,等待之后在使用。加载BookAddActivity,设置当前Activity界面布局setContentView(R.Layout.book_add)。在BookAddActivity中初始化xml布局中的几个控件。判断获取到的几个重要字段对应的组件E
12、ditView填入的值不是为空,并通过bookService.AddBook(book),将页面上获取到的Book对象作为参数传递,并调用Service层中的方法。AddBook()中,使用HttpUtil.SendPostRequest(url,params,UTF-8”);向效劳器发送一条Http报文,类型为Post请求,并创立一个字节数组对象byte resultByte,获取从效劳端响应回的数据。一般做更新操作时,效劳端传回的result数据是一个字符串,例如“图书添加成功!或“图书添加失败!。然后将result传回Activity,并通过Toast.makeTest()在布局中打印出
13、来。6、添加图书类别功能,增添图书的多样性,实现效果如下:图8 图书类别页面图9 进入添加页面图10 添加成功图实现功能:添加图书类别实现方法:在BookClassListActivity.java中创立选项菜单,分别是“添加图书类别、“返回主界面两个选项,点击“添加图书类别选项,通过 intent.setClass(BookClassListActivity.this,BookClassAddActivity.class);启动BookClassAddActivity,并将BookClassListActivity先关闭,等待之后再使用。加载BookClassAddActivity.java
14、,设置当前activity界面布局setContentView(R.layout.bookclass_add)。在BookClassAddActivity中初始化xml布局中的控件。有两个Button控件“确定、“重新填写和一个EditText控件。在EditText控件中填写添加的书籍类别,点击“确定按钮。判断获取类别名称的控件EditText填入的值是否为空,使用HttpUtil.SendPostRequest(url, params, UTF-8);向效劳器发送一条Http报文,类型为post请求,将params里的类别名称作为参数传递,并调用Service层中的方法。在Service层
15、中,BookClassDAO中的AddBookClass()方法,将BookClassAddActivity中通过post请求获取到的值,通过SQL语句添加到数据库中,并通过在BookClassAddActivity中创立的字节数组对象byte resultByte,获取从效劳端响应回的数据。从效劳端传回的的result数据为一个字符串,“图书类别添加成功或“图书类别添加失败。然后将result传回Activity,并通过Toast.makeTest()在布局中打印出来。7、删除图书类别功能,把不喜欢的图书分类删除掉,实现效果如下:图11 长按显示上下问菜单图图12 成功删除图实现功能:删除图
16、书类别实现方法:在BookClassListActivity.java中创立上下文菜单,分别是“添加图书类别、“返回主界面两个选项“删除图书类别、“编辑图书类别,这里我负责的是删除图书类别这一局部。添加长按点击功能lv.setOnCreateContextMenuListener(bookClassListItemListener);长按想要删除的图书类别,会弹出上下文菜单,点击“删除图书类别选项,先通过contextMenuInfo.position获取选中行位置,再通过选中行的位置用hashMap.get(bookClassId).toString()获取它的图书类别编号。最后调用dial
17、og()方法,会有提示弹出框弹出“确认删除吗?字样。点击“确认,用HttpUtil.SendPostRequest(url, params, UTF-8);向效劳器发送一条Http报文,类型为post请求,将params里的类别名称作为参数传递,并调用Service层中的方法。在Service层中,BookClassDAO中的DeleteBookClass()方法,将BookClassAddActivity中通过post请求获取到的值,通过SQL语句从数据库中删除,并通过在BookClassAddActivity中创立的字节数组对象byte resultByte,获取从效劳端响应回的数据。从效
18、劳端传回的的result数据为一个字符串,“图书类别删除成功!或“图书类别删除失败。然后将result传回Activity,并通过Toast.makeTest()在布局中打印出来。8、编辑图书信息功能,用户可以对图书的信息进展修改,实现效果如下:图13 选编辑图书信息图图14 进展编写图图15 图书更新图实现功能:修改图书信息实现方法:长按菜单,触发响应函数onContextItemSelected(MenuItem item),点击编辑图书信息按钮,调用BookEditActivity.Java文件,初始化当前Activity界面布局,通过findViewById方法实例化组件,将图书信息回
19、显到EditText中,图书的类别通过调用bookClassService.GetAllBookClass();获取所有图书类别。点击确定按钮时触发监听事件,事件中对图书的名称、价格、库存、图片进展验证,使用HttpUtil.SendPostRequest(url,params,UTF-8”);向效劳器发送一条Http报文,类型为Post请求,并创立一个字节数组对象byte resultByte,获取从效劳端响应回的数据。上传图书信息时调用业务层UpdateBook(book); 操作完成后返回到图书管理界面。9、编辑图书类别功能,用户可以对图书的类别进展修改,实现效果如下:图16 选择编辑图
20、书类别图图17 编辑图书类别图图18 更新成功图实现功能:修改图书类别实现方法:界面上有四个数据,“计算机类“历史类“法律类“文学类,长按其中任何一个数据都会触发btnUpdate.setOnClickListener(new OnClickListener()方法,跳到bookclass_edit.xml,弹出子菜单,子菜单里有两个按钮选择更新选项,弹出手机客户端-修改图书信息页面,程序跳到BookEditActivity.java调用的onCreate方法,通过setContentView(R.layout.book_edit); 设置当前Activity界面布局,通过findViewBy
21、Id方法实例化组件,使用btnUpdate = (Button) findViewById(R.id.BtnUpdate);修改图书类别,在类别名称选择框里面把第八个“法律类进展修改为“法律类啊。点击更新按钮,程序会使用HttpUtil.SendPostRequest(url,params,UTF-8”);向效劳器发送一条Http报文,类型为Post请求,并创立一个字节数组对象byte resultByte,获取从效劳端响应回的数据。做更新操作成功后时,效劳端传回的result数据是一个字符串,“图书类别更新成功!。然后将result传回Activity,并通过printStackTrace(
22、)在布局中打印出来。四、实验代码1、后台BookDAO.java的代码:public class BookDAO public List QueryBook(String barcode, String bookName, int bookClassId, Timestamp publishDate) List bookList = new ArrayList(); DB db = new DB(); String sql = select * from Book where 1=1; if (!barcode.equals() sql += and barcode like % + barc
23、ode + %; if (!bookName.equals() sql += and bookName like % + bookName + %; if (bookClassId != 0) sql += and bookClassId= + bookClassId; if(publishDate!=null) sql += and publishDate= + publishDate + ; try ResultSet rs = db.executeQuery(sql); while (rs.next() Book book = new Book(); book.setBarcode(rs
24、.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 (Exceptio
25、n e) / TODO Auto-generated catch block e.printStackTrace(); finally db.all_close(); return bookList; /* 传入图书对象,进展图书的添加业务 */ public String AddBook(Book book) DB db = new DB(); String result = ; try /* 如果所有验证通过就执行sql插入新商品信息 */ String sqlString = insert into Book(barcode,bookName,bookClassId,price,coun
26、t,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.exe
27、cuteUpdate(sqlString);result = 图书添加成功!; catch (Exception e) e.printStackTrace(); result = 图书添加失败; finally db.all_close(); return result; /* 删除图书 */ public String DeleteBook(String barcode) DB db = new DB(); String result = ; try String sqlString = delete from Book where barcode= + barcode + ; db.exe
28、cuteUpdate(sqlString); result = 图书删除成功!; catch (Exception e) e.printStackTrace(); result = 图书删除失败; finally db.all_close(); return result; /* 根据条形码获取到图书信息 */ public Book GetBook(String barcode) Book book = null; DB db = new DB(); String sql = select * from Book where barcode= + barcode + ; try Result
29、Set rs = db.executeQuery(sql); if (rs.next() book = new Book(); 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 (Exception e) / TODO Auto-generated catch block e.printStackTrace(); finally db.all_close(); return book; /* 更新图书信息 */ public String UpdateBook(Book book) DB db = new DB(); String result = ; try String sql = update Book set bookN
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1