版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于蓝牙的考勤系统-用户界面设计基于蓝牙的考勤系统摘要随着教育的普及,大学生的数量也越来越多。不同于初高中的管理,大学更偏向于自主学习。且高校流行选分制度班级流动性增强,因此大学生获得了更多课程选择上的自由度,班级概念弱化,因此学生有着充裕的时间可以去做自己喜欢的项目,从而在自己喜欢的项目上大放异彩,但是在这种情况下,学院管理难度变大。有些学生过于放纵导致对上课产生厌倦情绪,因此产生了逃课,代名互相顶替等行为。而且有些老师淡化管理,进一步纵容了这种行为。在传统的考勤方式比如口头点名,在学生人数太多情况下很难有效检测这些行为。因此,为了杜绝这种行为,基于蓝牙的考勤系统被广泛的应用起来。本设计虽然叫基于蓝牙的考勤系统,但蓝牙只负责签到,连接信息交互这方面的功能,其他数据的交互只要靠app和服务端完成。本文主要描述在设计的工作原理和各个模块的内容。本设计以数据库和服务端的交互和作为核心,让学生的蓝牙名称改为自己学号,让设备自己进行搜寻和定位,从而确定学生状态。mysql是服务端的数据库主要用来处理登录、注册、收发通知sqlite为本地数据库,主要用来存储蓝牙通讯的签到以及请假的数据。对于缺勤的学生做出特殊标记且显示出勤率,事后打包信息传送给相关管理人员。这种方法能提高学生出勤率,也能改善教学质量。而且比口头点名更加现代
化.。关键词:蓝牙考勤;数据库;服务端;BluetoothManagementSystemBasedon-UserInterfaceDesignAbstractWiththepopularizationofeducation,thenumberofcollegestudentsisincreasing.Differentfromthemanagementofjuniorandseniorhighschools,universitiespreferautonomouslearning.Inaddition,theclassmobilityofthepopularselectionandscoringsystemincollegesisenhanced,socollegestudentshavemorefreedomincourseselectionandclassconceptisweakened.Althoughthereisplentyoftimetodotheprojectstheylike,soastoshineintheprojectstheylike,inthiscase,theschoolmanagementbecomesmoredifficult.Somestudentsaresoindulgentthattheygetboredofclasses,sotheyskipclassesandsubstituteforeachother.Andsometeachersdownplaythemanagement,furthercondoningthiskindofbehavior.Intraditionalattendancemethodssuchasoralrollcall,itisdifficulttodetectthesebehaviorseffectivelywhentherearetoomanystudents.Therefore,inordertoeliminatethiskindofbehavior,bluetoothbasedattendancesystemiswidelyused.Althoughthisdesigniscalledabluetooth-basedattendancesystem,bluetoothisonlyresponsibleforcheck-in,connectioninformationinteraction,otherdatainteractionaslongastheappandtheservertocomplete.Thispapermainlydescribestheworkingprincipleinthedesignandthecontentofeachmodule.Thedesignofthedatabaseandserversideoftheinteractionandasthecore,letthestudents'bluetoothnamechangedtotheirstudentnumber,letthedevicetosearchandlocate,soastodeterminethestatusofstudents.Mysqlisaserver-sidedatabasemainlyusedtohandlelogin,registration,sendandreceivenotificationsqliteisalocaldatabase,mainlyusedtostorethebluetoothcommunicationcheck-inandleavedata.Studentswhoareabsentfromschoolarespeciallymarkedandtheirattendanceisdisplayed.Theinformationisthenpackagedandsenttotherelevantmanagement.Thismethodcanimprovestudentattendanceandthequalityofteaching.Andit'smoremodernthanaverbalrollcallKeywords:Database;BluetoothManagermentSystem;Clinet-sideSystem目录61541前言 1TOC\o"1-3"\h\u61541.1本设计的目的、意义及应达到的技术要求 153231.2本设计在国内外的发展概况及存在的问题 1297351.3本设计应解决的主要问题 257362搭建环境及工具 257362.1关于AndroidStudio 2274172.1.1介绍 213722.1.2环境搭建 2198372.2关于MyEclipse 2206202.2.1介绍 252432.3关于Mysql 27772.3.1介绍 2254082.3.2环境搭建 3281992.4操作系统选择 3320682.4.1关于Android 3269172.4.2Android架构 381352.4.3Andr应用程序oid开发的四个主要模块 4315522.5语言JAVA 4246163设计原理 5110454用户界面设计 5322594.1用户界面设计的原则 5181994.1.1界面整洁 5202864.1.2通用性 5213324.1.3合理的界面布局 5239074.14界面设计使用到的布局属性 6308335教师学生界面设计 10181805.1注册界面 10229845.2欢迎界面 10197025.3查询请假界面 10154085.4工具栏界面 11293485.5登录界面 11265165.6关于系统界面 1145605.7左滑小菜单 11169345.8教师功能界面 1113975.9学生功能界面 12231036接口设计 12278227考勤签到设计原理 13317878总结工作与展望 1319909参考文献 147029谢辞 161前言在现代化信息管理的时代下,教育工作者可用蓝牙考勤系统进行签到。学生可以进行请假,进而更好安排自己的学习计划。老师端不仅可以通过考勤检查学生到勤状况,还可以发布群消息。不仅节省了人工成本,还提高了效率。本设计的基于蓝牙的考勤系统是基于app和服务端交互,蓝牙之间连接。课题针对用户界面设计,意在做出互动性强的界面。REF_Ref26720\r\h[1]1.1本设计的目的、意义及应达到的技术要求目前,考勤签到多采占用时间长效率的口头签到,这样易造成课堂学生学习时间减少,时间花在考勤。为了造就一个良好的教学环境,本设计易在完成一个先进高效的蓝牙考勤系统,并使用Android设计一个一致性高,受众广,易上手,界面切换迅速,字体颜色分布看着舒适的界面。选择一个主要色调作为APP的主题色。让操作达到简单舒适的范畴,合理传达视觉元素,达到信息对于用户来说一目了然。1.2本设计在国内外的发展概况及存在的问题近年来随着大学生数量增多,考勤任务变得越来越兼巨,拖延时间也长。教师也不可能每节必点名,这样引起学生的侥幸心理,对学生的学习和发展无疑是种巨大的影响。而改变机制使得点名时间大幅度减少,效率变高。而用户界面设计也是不可或缺的一环,因为考勤的顺利与否会影响积极性(用户体验),所以优化用户使用感受,尽量使用户感受傻瓜式体验。因为企业学习都是追求效率,时间就是金钱,在这种基础上蓝牙考勤系统越来越普及。无论国内还是国外,在不久的将来,口头点名这类地效率低下的方式最终将被淘汰。REF_Ref28558\r\h[4]在国外,app的设计更加人性化,他们把用户体验作为最终目标,打造了许多让人爱不释手的app。那些app下载率都高居不下,见到有趣十分减压,它由许多元素组成,譬如俏皮的文字,适宜的画面,完美的组合成了这个app,多次使用视觉手法,引发人们的共鸣。所以一个好的用户体验是用户对这个app的直观感受,不夸张地说一个良好的互动的的确确能影响到用户对其的使用积极性,从而引发一系列相关连锁问题。本设计以安卓为平台,以点名app为媒介,找到符合大众视觉需求的界面样式。以舒适简洁好用出发。但是受限于某些限制,国内设计的操作系统在经验和性能上与国外还有一定差距,手机用户界面没有国外那么人性化,缺少良性互动,缺少实用性。所以应该想方设法增加客户粘。1.3本设计应解决的主要问题打造用户喜欢的用户界面,根据用户的使用习惯设计界面,如阅读习惯,信息语言使用是否恰当,数据对齐排列,屏幕各类图标摆放适宜。减少app中广告植入,过多的广告植入不在用户的享受范围内,而且app应该简单好用,减少复杂的操作和过多的页数。拉近app与客户的距离,应该为了针对该app的专用人群添加该人群熟悉的元素。2.1关于AndroidStudio2.1.1介绍AndroidStudio是Google这家技术公司推出的,用于给Android这个需要合适工作环境的工具用于开发应用和调试的集成工具。2.1.2环境搭建下载安装AndroidStudio。(可不选择安装VirtualDevice)。设定使用Custom,可按照自己的喜好设置。安装路径不能出现中文,因为AndroidStudio的默认语言中没有中文。根据自己喜好选择内存。第一次安装会自动配置gradle。2.2关于MyEclipse2.2.1介绍MyEclipse是一个包含几乎所有Java所学特殊功能于一体开发环境。是高效开发的选择,从JavaSpring到RESTWeb服务再到Maven均可在MyEclipse中统一开发。它有着强大的JavaEE优势,也可在WebSphere、WebLogic、Tomcat、Glassfish这种使XE"有着强大的JavaEE优势,也可在WebSphere、WebLogic、Tomcat、Glassfish这种使"\t"请参阅"用各种应用系列服务器。该软件没有什么特殊之处。但自带的tomcat并没有那么好用,需自己安装一个7x的,导入路即可。再启动服务器, 下方Console可显示内容与相关信息。2.3关于Mysql2.3.1介绍MYsql是一个数据存放的仓库。为了方便管理和使用数据库中的数据,数据被按照早就编写好的规律存放。在数据库对数据的管理下,用户日常的操作将更加有效且组织化,也更加易于管理。它由5部分组合成。数据库服务器。数据库,数据表,字段和行。SQL,结构化查询与程序的应用设计语言,是一种有着不寻常目的编程语言,用于存取查询,更新,管理数据库系统。2.3.2环境搭建将Mysql的安装路径配置到Path环境变量中。安装的时候避免中文路径。设置端口为3306.。将字符集设置值为默认的字符其集。2.4操作系统选择2.4.1关于Android2007年刚成立才22个月的Android公司被Google收购并在11月份被Google纳入OHA(OpenHandestAilance),即是所谓的手机开放联盟。它是在Linux系统上建立的,从开发到现在,Android操作系统一直保持着不可思议的进步速率,而它相对于其他操作系统的优势便是其完全开放的代码。在2008年,第一台基于Android的智能手机面向世人。在此次事件之后,Android以凭借着它的优势势不可挡地进入了其他电子设备地开发领域,并在2011年地第一季度成为全球使用最多地操作系统。在2013年,Android成为了这领域当之无愧的霸主。2.4.2Android架构Android的架构可具体分为4部分。因为Android操作系统是基于Linux内核的基底上开发的,所以这层为LinuxKernel。在这一层中使用的是C语言开发的,都是一些设备的驱动程序,这些驱动程序均为最基础且核心的功能,功能相对比较简答。其进程和内存管理还有服务功能都需要linux来驱动,如显示蓝牙照相机音频驱动。而在这层上面为LIibararies和虚拟机所构成。Library包含一些C++和C语言的程序包。有了这些程序包,许多功能各异的组件就可以被利用到,使开发者在开发过程中更加便捷方便。如因为大多程序要用到图片和视频,所以录制功能和解码有媒体文件功能要用到媒体库。以及标准的系统都要用到的C语言库。又因为Android使用Java编程语言,所以其拥有一个安卓核心系统运行库。有对2D底层图像处理的库SGL。不同于SGL,Surface是用于子系统管理且对图像处理上更有建树。Dalvik虚拟机也是这部分的重要组成鹅部分之一,它对于移动的电子设备如平板和智能手机有着与其他设备得天独厚的优势,比如说在有限的组装空间里的芯片储存空间和能快速响应的能力。在这些的上层是应用程序框架(ApplicationFramework),它作为连接程序和linux驱动层能在此基础上开发应用程序,也就是说一个开发人员想要开发应用程序都必须基于开发应用程序框架。在Android程序框架中,而且这必须建立在保证框架是对整个结构没有不良的影响下,为了方便开发人员对程序的访问,一大部分核心重要代码是开放的。因此开发人员在开发不同的应用程序时可以很便捷地互相使用或提供给其他人思路。重复的组件使用减少了,想要替换模块中的组件也更加简单。如内容提供器、通知管理器。最上层即为用户直接接触的程序层(Application),在我们的日常生活中有丰富且功能各异的应用程序。如最基础的电话和短信功,备忘录时间网页浏览功能。或可从Googleplay上下载应用程序其中包括许多开发人员自己开发的程序。使用的语言为JAVA,程序比较灵活不会死板。着这很大程度上归因于用户个人开发和Android本身的核心为同一层次,即构建于安卓系统上的应用程序接口。2.4.3Android应用程序开发的四个主要模块Activity屏幕组件Service服务组件BroadcastReceiver广播接受组件ContentReceiver内容提供者。Activity它时一种包含用户界面的组件,这是用户唯一能看到的,也是进行交互的界面。一个应用程序包含着零个或以上的组件。而在活动组件内又包含多个控件。Textview是用来显示文本的EditText顾名思义就是一个可给用户在程序上编辑信息的组件。Button则用来给予用户监听事件活动的功能。具体点理解Activity就是一个程序上的屏幕之一。Activity有四种活动模式,本设计采用默认standard模式。Service它不属于一个独立进程,属于用户看不见的界面,它让Android实现了后台运行的方案,比较适用于那些一直长时间运行但又不用用户进行交互的任务。有点类似于电脑的后台进程。它不需要任何用户界面的帮助,且当用户打开或切换应用程序时并不会对它造成影响。BroadcasterReceiver用来接收系统或者自身应用程序的广播。比如注册软件时的短信提醒,来电提醒功能,闹铃提醒功能等。在Android的广泛选择中你可以选择自己更加感兴趣的程序进行广播。广播分为有序广播和标准广播。标准广播为完全异步,所有接收器几乎同时接收,效率高,但是不能被拦截。有序广播只有等逻辑执行完才有下一步,有先后顺序,优先级高的先接受且它可拦截广播。ContentProvider应用程序通常只能访问应用内储存的数据,共享的数据则不能对外提供。内容提供者则实现了跨程序间的数据共享。它有一整套完健全的机制去给权限一个程序去访问另一个程序中的属数据,与此同时还能保证数据在操创建一个供给于数据的访问接口2.5语言JAVA目前Java主要应用于中间件的开发--明,Java不适合pc应用程序的开发,其发展逐渐变成在开发手持设备,互联网信息站,及车载计算机的开发.Java的语法与C++语法类似,而且Java是完全的彻底的面向对象的,其中提出了很好的GC(GarbageCollector)垃圾处理机制,防止内存溢出。优点:JAVA语言健壮且安全,使用servlet机制使得编程更加高效不易崩溃。它时多线程工作模式且可移植性好。3设计原理老师与学生之间传递信息使用蓝牙为媒介。服务端则利用Servlet这个用来处置服务器的响应的程序,它是轻量级框架进行HTTP请求和响应的的。响应从教师端或学生端发起到服务端进行处理,再返回到学生或教师端。蓝牙作为每个设备独有地址中的模块是一种载体。4用户界面设计本设计研究内容基于Android这个比较方便使用的系统。设计出来界面内容以XML的格式存储。在研发过程中只需解析这些XML文件,然后再将其中信息补充进相对的界面中。由于本人负责的是用户使用各项功能的见界面设计和界面接口设计。所以本位会着重讲Activity及相关组件。4.1用户界面设计的原则它存在的意义在于它是人与机器交互如进行信息交互对话的中间体。随着高科技的发展,人机交互的方式方法也更加多样化。它有很多种元素构成,比如视觉上和听觉上的交互,用户使用时的操作逻辑。因此界面设计可以说时是一款软件的门面。一个好的人性化设计应该涵盖一下几个方面。REF_Ref26720\r\h[1]4.1.1界面整洁保持界面整齐简洁,一个好的界面一定能让用户轻松地掌握它地使用方法,尽量达到用户感觉不到很复杂地界面存在但能快速区分信息地重要性。4.1.2通用性无论是在此应用内还是与其他app比较起来,大体地布局都应该相似。在整体的界面中应该高度一致,特别是在字体的应用上还有对方块的颜色和放置的位置。这样用户的使用才会更加的舒适整洁。用户熟悉界面后能效率更高的工作或转战于其他app。4.1.3合理的界面布局Android中的各种组件位置的放置是非常有讲究的。为了让的界面看起来舒适,排版应均匀,元素放置不应该全聚集于一处或又过于稀疏。可以合理运用颜色,纹理,对比度和光效来制造美感或引导用户的注意力到重点的事物上。文字在某种意义上是传达文化符号的一种信息,所以可对文字进行艺术效果处理,增强联系结构。在重点想描述部分可是用加粗或者黑体下划线来特别说明。应认真思考重点文字的字体和所放置位置,提高可读性和舒适性。除非想打造一种别样的风格,增加视觉感,不然还是以阅读舒适性为主。为了主流大众符合阅读习惯,大多使用左对齐,也可使文字和图片搭配使用,但是还是要以文字为主图片为辅。图形是比较多用到的一种素材。常用于传达信息的用户头像,代表方向的箭头。在一定程度上减少文字的表达,使得app更加多样化且有趣。同时还要注意对应分辨率的大小。在不同情况下,app要按照严格的设计规定。有时候空间有限,应适当剪裁留下重要部分。颜色选用高辨识度。REF_Ref28872\r\h[2]在进行排版设计中,不仅要靠虑到用户的实际需求还要将想表达的主题信息和视觉要素以适合融洽的方法联系到一起。来自巴塞卢罗那庞培法布拉大学的心理学教授葛思达在研究人类的视觉规律时曾经提到过“最佳视域”这个概念。在一个版面中,它的左和上部分是让人最轻松且容易接收信息的部分,所以设计的时候要注意这两部分的构造。要强调重复性,因为重复的元素不仅可以吸引用户的注意力还能着重强调某种特殊的信息,一般是在用类似和或近似的图片来搭建,可以在律动和放置的位置或者方位上有细微的调整,比只是单一枯燥的重复要好。在构建界面时要注意平衡性,两个有联系的元素上保持视觉的平衡,平衡不一定要完全一样,而是在某些微小特真上改动,大体还是要保持平衡联系性。因为用户对色彩是十分敏感的,选择正确的颜色能影响客户的心理程序,比如本设计为与学习相关的app,所以使用让人冷静的墨绿色。而如,消防栓,和灭火器这种能让用户十分敏感,刺激视觉能让人马上注意啊到的颜色。文化的不同对颜色和文字使用不一样,如西方13被代表恶魔,和中国忌讳谐音。色调统一,能代表开发者对本app的主旨,符合设计心灵学。REF_Ref28271\r\h[5]4.14界面设计使用到的布局属性线性布局:Android操作系统布局中比较常用到且简易的布局方式。在这种布局里,它的子布局按照横线或者竖线排布。并可分配权重。1其中可用orientation设置为水平或者竖直的排列方式。2gravity里面的控件或者字体的对齐方式,子容器相对于父容器的布局,如左对齐或者底部对齐。而layout_gravity指的是该元素本身的布局。同理width控制控件内文本宽度,layout_width控制控制该元素本身的宽度。height和layout_height一样。layout_weight指布局所占比重,可通过更改属性调整屏幕占比。3在Android中有些组件需要一个int值,表示只接收int该类型的值,按照格式必须以@开头。而如果s是@+则表示修改完某些布局后要在文件中生成相应int值,例@+id/bzzb。变量名为/后面的值。但如果文件中已经存在相同名字的变量则会直接使用已经存在的值。常用在一些输入文本上,比如输入id或者密码。4background,为你的组件生成一个背景图也可以全用别的颜色。5divider,分割线。可以用drawable中的图片,也可以shape定义一个。也可以用showDividers来设置分割线所在位置,有none(无分割线)middle(在两控件中间设置分割线)begining(在顶端设置)end(在末端设置分割线)。6fill_parent,wrap_content,match_parent,这三个属性都是用来将视图内容或尺寸的大小及布局作调整的。fill_parent用来强制性的使组件的尺寸填满该布局内的空间.wrap_content用来完整显示整个布局。match_parent与fill_parent一样。7drawable图片资源,通过@drawable可获取已放置在里面的图片资源。许多app自定义的图标和背景图及其开发者要使用的图片转为xml文件里放在drawable中储存。8values。values存放了colors常用默认的颜色值,使用时可调用,每个颜色有专用的代码。Dimen是屏幕中像素的大小,本设计主要用到的是dp。Strings是字符串,提前写好,使用使直接调用即可。Stylenames是本设计的某些控件主要风格。总的来说就是一个已经整合好的资源库随时可以拿出来调用。9layout_margin,指距离父控件的各距离。Padding控制的内容距离四边界的距离。Visibility可设置控件是否可见,可设置为不可见及可见,但不可见仍占据布局。Scrollbar用来设置滚动条,用法很多,可设置为是否可见,滚动方向,背景色,是否有轨道,褪色方向。10Edittext文本编辑。Hint可输入提示信息。在输入账号或者密码的时候经常用到。numeric=integer/decimal当有特殊需求只能输入整数或者小数的时候用到。singleLine=true则为设置只能输入单行。TextColour字体颜色。Textstyle字体。TextColourHint默认字体颜色。Typeface=monospace字体间距。Background背景,可设置为null默认没有。MaxLengtht限制文本长度。CusorVisivle设置光标是否可见。Capitalize设置英文字母大小写类型。可设置为AutoText自动纠正文本错误。Editable是否可编辑。Elipise,TextScaleX=1.5控制字与字之间距离。设置当文字过长时,该控件该如何显示。有如下值设置:”start”—?省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee”——以跑马灯的方式显示(动画横向移动)。11Textview:android:text设置显示文本。android:textappearan设置文字外观。android:textcolor设置文本颜色。android:textcolorhighligh被选中文字的底色,默认为蓝色。android:textcolorhint设置提示信息文字的颜色,默认为灰色。android:textcolorlink文字链接的颜色textscalex设置文字之间间隔,默认为1.0f。android:textsize设置文字大小,推荐度量单位”。textstyle设置字形。android:autolin设置是否当文本为:url链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)android:autotext设置,将自动执行输入值的拼写纠正。此时是无效果的,只在显示输入法并输入的时候起作用。android:buffertyp指定gettext()方式取得的文本类别。android:capitalize设置英文字母大写类型。需要弹出输入法才能看得到。android:cursorvisible设定光标为显示/隐藏,默认显示。android:digits设置允许输入哪些字符。如“1234567890.+-*/%()”android:drawablebottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。android:drawableleft在text的左边输出一个drawable。android:ellipsize设置当文字过长时,该控件该如何显示。有如下值设置:”start”—-省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee”——以跑马灯的方式显示(动画横向移动)android:freezestext设置保存文本的内容以及光标的位置。android:gravity设置文本位置,如设置成“center”,文本将居中显示。android:hinttex为空时显示的文字提示信息,可通过textcolorhint设置提示信息的颜色。android:impositions附加功能,设置右下角ime动作与编辑框相关的动作,如actiondone右下角将显示一个“完成”,而不设置默认是一个回车符号。android:includefontpadding设置文本是否包含顶部和底部额外空白。inputmethod为文本指定输入法,需要完全限定名(完整的包名)。android:inputtype设置文本的类型,用于帮助输入法显示合适的键盘类型。android:linksclickable设置链接是否点击连接,即使设置了autolink。android:ems设置textview的宽度为n个字符的宽度。这里测试为一个汉字字符宽度。12ListView是一个能将数据集合起来以动态滚动方式展示到用户界面View。将具体内容以列表的形式展示并且能够自适应数据内容,然后通过适配器加载到屏幕。如此说来Adapter是用来在View和数据之间传递的。13Button普通按钮ImageButton为图像按钮,为Textview字类,所以它的很多属性可以应用到Button上,通过drawable里的资源StateListDrawable可以将按钮设置成按下去为一个颜色弹起来又为一个颜色。drawable:引用的Drawable位图,我们可以把他放到最前面,就表示组件的正常状态。state_focused:是否获得焦点。state_window_focused:是否获得窗口焦。state_enabled:控件是否可用。state_checkable:控件可否被勾选,state_checked:控件是否被勾选,state_selected:控件是否被选择,针对有滚轮的情况,state_pressed:控件是否被按下,state_active:控件是否处于活动状态。state_single:控件包含多个子控件时,确定是否只显示一个子控件。state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态。state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态。state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态。14ImageView为图像视图,就是用来显示图像的一个组件。值得注意的是background背景通常是为了填充屏幕而进行拉伸。而图像试图属于内容,不会进行拉伸而是按照原图片直接进行填充。且在调整缩放的时候要配合maxWIdth最大宽度和maxHeight最大长度这两个属性一起使用,它才会成功调整。fitXY:对图像的横向与纵向进行独立缩放,使得该图片完全适应ImageView,但是图片的横纵比可能会发生改变。fitStart:保持纵横比缩放图片,知道较长的边与Image的编程相等,缩放完成后将图片放在ImageView的左上角。fitCenter:同上,缩放后放于中间;fitEnd:同上,缩放后放于右下角。center:保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。centerCrop:保持横纵比缩放图片,知道完全覆盖ImageView,可能会出现图片的显示不完全。centerInside:保持横纵比缩放图片,直到ImageView能够完全地显示图片matrix:默认值,不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理15fragment可看作一个小型Activity,组件多管理过于麻烦,此时就要用到fragment进行模块化管理,但fragment不可单独使用,会收到宿主Activity的生命周期影响。Fragment的生命周期和Activity有点类似:三种状态:Resumed:在允许中的Fragment可见,Paused:所在Activity可见,但是得不到焦点,Stoped:①调用addToBackStack(),Fragment被添加到Bcak栈②该Activity转向后台,或者该Fragment被替换/删除,但是停止状态的fragment仍然活着不过对用户不可见。16progressbar是安卓下的进度条,当使用到加载画面的时候或者在看视频的时候进场用到。相对布局:也是Android界面设计里常用到的一种布局。顾名思义就是相对父元素或者兄弟组件来有参照的布置子元素。5教师学生界面设计这次设计的教师主要功能:登录、注册、蓝牙设置、蓝牙连接、分享至第三方、查看考勤、查看请假、发布通知以及打开校园官网、关于和退出系统。本次设计学生主要功能:登录、注册、蓝牙设置、蓝牙连接、分享至第三方、蓝牙签到、蓝牙请假、吊起qq联系老师、接收通知、关于系统、退出系统。本设计建立的Activity主要有介绍本APP应用,添加通知界面,登录界面,查看请假和查看签到界面,注册和加载界面。学生老师操作的界面则为了方便管理使用fragment。5.1注册界面当学生或者老师使用本app时首先应注册一个账号,那么就来到了RegisteActivity。采用了线性布局,界面垂直排布,界面占满整个屏幕,调用了drawable里的背景图作为背景,调用了放在layout里面的考勤签到注册布局.整体让这个小长方形里的元素采用竖直线性结构,具体里面采用相关布局因为元素比较多。包含了工具栏toolbar。使用显目大框和bold字体还有符合主题的颜色作为题目。为了能让用户分清哪个框是填对应什么的,使用了hint提示文字并配上对应图标使左对齐。为了能更清晰的让用户看清填的东西将背景色设置为null。并所有文本左对齐layout_marginLeft。使各布局central_vertical垂直居中。服务器地址需要限制输入文本Digits =0,1,2,3,4,5,6,7,8,9,0,.。最下方是提交BUTTON,button放块设置为比其他输入按键稍大。5.2欢迎界面背景布局为全绿色。有开场动画,先弹出string里面第一串字符串考勤签到app然后再弹出第二串字符串毕设作品。然后就进入主界面。5.3查询请假界面先设置好每个item即每个小项目的的规格。比如查询请假时每个学生的请假信息。然后用ListView加载。如果没有项目将用TestView显示暂无数据记录。查询签到界面项目界面与查询签到界面一样。5.4工具栏界面Toolbar在界面的最上端,为了方便用户使用,存在于每一个界面最上端。采用了相对布局,在每一个界面的最上方都存在工具栏。5.5登录界面将整体设置为好打理的相对布局。在主要界面的上方有加载图标ImageView,在用户填写完账户后弹出。在左上方设置了一个半圆的图标提示用户现在使用的是学生端或教师端。在最下方用Textview设置2020毕业设计作品提示字样。然后include登录表格布局与注册中一样。不过在最下方添加了注册和登录的Button。发布通知界面:最上方是背景图为学校缩略图。往下为三个EditText,分别为发布内容姓名时间。其中发布内容占据板块较大并且都带有hint提示字符。最下方为发布提交Button。5.6关于系统界面有关于系统的介绍和使用的工具,app所拥有功能,开发团队及版本号均使用TextView展示。5.7左滑小菜单在学生或老师主要功能界面有fragment展示学校背景和两个TextView,分别是学校官网和退出系统。在现有的移动用户端中,大多都采用这种形式,不仅与大众群体的习惯有关,这还能整个操作过程变的更加平滑,让用户的操作更加具有流畅性。而且还能再拥挤的屏幕上节省了时间,用户整洁度提高。5.8教师功能界面使用fragment.在登陆界面左上角有可切换为学生端按键。中间有深色底白色字体显示界面的标题。从上到下为符合行业标准的蓝牙地址,账号,密码。并且每个图标必须有特色,不需要字体也可快速分辨出对应图标。登录成功过后下次可记忆最近一次的账号密码。最下面两个功能为注册和登录。最下方字体标明产品来源。登录界面的背景图选用跟app主题颜色相互搭配的图片。在点击登录之后,在教师端打开蓝牙期间可现实加载图案。最上方像许多常规app一样显示当前界面,方便用户查明所在界面。下方为教师可发布的公告。公告需放置于仅大标题下,但字体放小可滚动的提醒作用。显示蓝牙状态,因为此为重要状态显示功能,用生活种红色代表失去连接,绿色代表已连接的状态显示,并且消息窗口可现实与哪位学生连接,并且显示蓝牙地址,连接成功后有灰底黑字小框提示。登陆界面的切换学生端改为显示教师名字。并且可发布Tips。由于该页面功能较多,有蓝牙设置,考勤签到,查看签到,查看请假,发布通知,及关于系统的介绍。所以排版不可过于紧凑,流出舒适空间。因此,功能均采用圆形图标。图标要符合审美比例,字体要与界面大小和相应功能图标和界面比例要符合用审美。在做到这些的基础上尽量简洁。一个良好的用户界面设计应与用户的显示世界感官相贴近。在学生进行请假时,会有白底黑字弹窗提示,下方可选择拒绝或同意。同时操作后会有通知更新。关于系统介绍北京采用北理珠图片。有作品介绍及使用了哪些工具。下方为主要涵盖功能,如教师学生端均有的登陆注册,蓝牙设置,蓝牙连接,分享至第三方,查看考勤,查看请加发通知,校园官网,关于系统,通出系统。而学生端有蓝牙签到请假,接收通知。主要开发工具为AndroidStudio,MyEclipse,My'Sql,Tomcat,NavicatforMySQL等开发工具,还有开发人员和版本号。这些都是为了使用者能更好了解本功能。并且在此界面右上角为第三方分享,方便使用。5.9学生功能界面同样使用fragment除了开启考勤换成了学生的开连接。除了学生端界面改了上面的注释标,发布通知换成了联系老师,查看签到和查到请假换成对应的查看和请假,其他均与教师端基本相同。提示界面:因为提示界面转瞬即逝,所以通常使用fragment。加载界面由TextView显示正在加载和Progressbar进度条即可。分别显示的是在有网络延迟正在加载的“正在玩命加载”界面来提示用户现在的情况和“没有更多了”来提示用户浏览界面已经到头了还有最后出现错误的“出错了”界面,后面还加上猫表情拉近开发者与用户的距离。6接口设计界面接口设计指的就是人机的交互形式。因为虽然我们可以用控件做一个精美的界面,但它仅仅只是界面而已,无法与用户进行互动。所以就要用到Android使用最频繁的监听机制。比如用户填写完了基本信之后点击注册按钮,这时候开始向服务器发送登录请求。其实就是在屏幕的后面,当用户交互时看不见的一些动作。流程:一开始先为事件源注册监听器,一般是组件。然后用户外部的动作触发然后触发事件源的事件。事件源受到影响后会生成对应事件,此时事件监听器将会把事件的参数记录下来,从而对不同的数据进行数据分析,分析后得到事件的处理方法。事件源,事件,事件监听器。主要方法:1直接使用匿名内部类,通常只是用一次,复用性不高,是本设计使用最多的监听方法。2使用内部类,好处是可在该类中进行复用并可直接访问所有界面的组件。3使用外部类,这种形式比较少见,即为创建另一个JAVA文件,但通常会导致代码不够简洁好用。4将Activity作为事件的监听器。5直接绑定到标签,即为在layout布局的文件中将对应的Activity中可以定义一个事件的处理方法 ,相对应组件触发事件的组件即可。7考勤签到设计原理老师与学生之间传递信息使用蓝牙为媒介。服务端则利用Servlet这个用来处置服务器的响应的程序,它是轻量级框架进行HTTP请求和响应的的。响应从教师端或学生端发起到服务端进行处理,再返回到学生或教师端。蓝牙作为每个设备独有地址中的模块是一种载体。8总结工作与展望本文主要针对设计的考勤签到系统和交互界面设计的优点和一些不足进行总结。优点:必要功能健全,使用操作方便,Android系统比较灵活。人和UI界面互动良好,教师可从发布通知,查看考勤情况,也可与学生进行互动。缺点:虽然手机端操作方便,但电脑端还要打开服务器,用户界面比较拥挤,而且接口项目有限,多个学生同时连接可能存在丢失情况,展望:可以拓展更多功能,如签到排名,学生可发弹幕,增加学生与学生及学生和老师之间的良性互动。蓝牙考勤的系统普及关系一定越来越高,app已经广为社会使用。随着技术的更新换代,人机交互的形式也必然更加让用户感同身受。参考文献王鹏飞,移动设备应用软件交互界面设计[D].工业设计工程,2013王延盼,基于安卓的App界面视觉艺术元素的分析与探究[D].艺术与设计学院,2013葛会会,基于蓝牙考勤系统的设计与实现[D].电子与通信工程,2016向小琼,李敏,蒲昱霖,刘海燕,基于蓝牙通信的高校课堂手机考勤管理系统[R],长沙医学院,2018王曦,有关软件中用户界面设计的探讨[N].山东工业技术,2018-10-25(10).附录MyEclipse所用到代码://Food.javapackagecom.bs.bean;//功能说明:publicclassFood{ publicStringid; publicStringuuid; publicStringname; publicStringstate; publicStringtime;}//Like.javapackagecom.bs.bean;publicclassLike{ publicStringid;// publicStringnum;// publicStringname;// publicStringlike;//}//NotifyInfo.javapackagecom.bs.bean;publicclassNotifyInfo{ //通知 publicStringid;// publicStringname;//姓名 publicStringcontent;//内空 publicStringtype;//类型 publicStringtime;//时间 publicNotifyInfo(Stringname,Stringcontent){ super(); =name; this.content=content; }}//RatingBar.javapackagecom.bs.bean;/****功能说明:**/publicclassRatingBar{ publicStringid; publicStringuuid; publicStringname; publicStringstate; publicStringtime;}//Suggestion.javapackagecom.bs.bean;/****功能说明:**/publicclassSuggestion{ publicStringid; publicStringuuid; publicStringname; publicStringstate; publicStringtime;}//User.javapackagecom.bs.bean;publicclassUser{ publicStringuuid;// publicStringname;// publicStringpsd;// publicStringtype;// publicStringlogourl;// publicStringchineseName;//中文名字}//===============================//FunctionServlet.javapackagecom.bs.servlet;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importcom.bs.bean.NotifyInfo;importcom.bs.util.DBUtil;importcom.bs.util.ReqType;importcom.bs.util.RspType;importcom.bs.util.T;/***项目名称:bs002功能说明:多功能管理类*/@SuppressWarnings("serial")publicclassFunctionServletextendsHttpServlet{ privateStringtag="FunctionServlet:"; privateHttpServletResponseresponse; privatebooleanresult; privateListdatalist; privateStringrequestType;//请求参数集 @Override protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doPost(req,resp); } @Override protectedvoiddoPost(HttpServletRequestrequest, HttpServletResponseresponse)throwsServletException,IOException{ this.response=response; request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain;charset=utf-8"); response.setHeader("Pragma","No-Cache"); response.setDateHeader("Expires",0); requestType=newString(request.getParameter("param").getBytes( "iso-8859-1"),"utf-8"); if(!requestType.contains("QueryNotify")){ System.out.println(T.getDateTime()+"====="+tag +"======正在请求获取:"+requestType); } if(requestType.startsWith("Add")||requestType.startsWith("Remove")){ addTypeRequest(requestType); }elseif(requestType.startsWith("Query")){ queryTypeRequest(requestType); }elseif(requestType.startsWith("Delete")){ deleteTypeRequest(requestType); } } /** *新增数据接口 */ privatevoidaddTypeRequest(StringrequestType){ if(requestType.startsWith(ReqType.Add_Notify)){//发布通知 String[]params=requestType.split(":"); NotifyInfonotify=newNotifyInfo(params[1],params[2]); result=DBUtil.addNotify(notify); }else{ return; } if(result){ returnResponseStringData(RspType.SUCC); }else{ returnResponseStringData(RspType.FAIL); } System.out.println("addresult:"+result); } /** *查询数据接口 */ privatevoidqueryTypeRequest(StringrequestType){ if(requestType.startsWith(ReqType.Query_Notify)){ List<NotifyInfo>notify=DBUtil.getFirstNotify(); returnResponseListData(notify,"notify"); } } /** *删除数据接口 */ privatevoiddeleteTypeRequest(StringrequestType){ } privatevoidreturnResponseStringData(Stringresult){ PrintWriterout; try{ out=response.getWriter(); out.print(result); out.flush(); out.close(); }catch(IOExceptione){ e.printStackTrace(); } } privatevoidreturnResponseListData(Listdatalist,Stringtype){ try{ JSONObjectobject=newJSONObject(); JSONArrayarray=newJSONArray(datalist); object.put(type,array); OutputStreamos; os=response.getOutputStream(); OutputStreamWriterosw=newOutputStreamWriter(os,"utf-8"); BufferedWriterbw=newBufferedWriter(osw); bw.write(newString(object.toJSONString().getBytes())); bw.flush(); }catch(IOExceptione){ e.printStackTrace(); } }}//LoginServlet.javapackagecom.bs.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.bs.bean.User;importcom.bs.util.DBUtil;/****功能说明:登录校验**创建时间:2018-6-1下午3:35:29*/@SuppressWarnings("serial")publicclassLoginServletextendsHttpServlet{ privateStringTag="LoginServlet:"; privateUseruser; @Override protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doPost(req,resp); } @Override protectedvoiddoPost(HttpServletRequestrequest, HttpServletResponseresponse)throwsServletException,IOException{ request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain;charset=utf-8"); response.setHeader("Pragma","No-Cache"); response.setDateHeader("Expires",0); Stringparam=newString(request.getParameter("param").getBytes( "iso-8859-1"),"utf-8"); String[]reqArray=param.split(":"); user=newUser(); =reqArray[0]; user.psd=reqArray[1]; Stringresult=DBUtil.checkUser(user); String[]reStrings=result.split(":"); response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain;charset=utf-8"); response.setHeader("Pragma","No-Cache"); response.setDateHeader("Expires",0); PrintWriterout=response.getWriter(); out.print(result); out.flush(); out.close(); switch(Integer.parseInt(reStrings[0])){ case-1: //用户名不存在 response.getWriter().print("用户名不存在"); System.out.println(Tag+"用户名不存在:"+); break; case0://登录成功 response.getWriter().print("登录成功"); System.out.println(Tag+"登录成功:"+); break; case1://密码错误 response.getWriter().print("密码错误"); System.out.println(Tag+"密码错误:"+); break; case2://查询异常 response.getWriter().print("查询异常"); System.out.println(Tag+"查询异常:"+); break; } }}//RegisteServlet.javapackagecom.bs.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.bs.bean.User;importcom.bs.util.DBUtil;/****功能说明:注册**创建时间:2018-6-1下午3:35:29*/@SuppressWarnings("serial")publicclassRegisteServletextendsHttpServlet{ privateStringTag="RegisteServlet:"; privateUseruser; @Override protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ doPost(req,resp); } @Override protectedvoiddoPost(HttpServletRequestrequest, HttpServletResponseresponse)throwsServletException,IOException{ request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain;charset=utf-8"); response.setHeader("Pragma","No-Cache"); response.setDateHeader("Expires",0); Stringparam=newString(request.getParameter("param").getBytes( "iso-8859-1"),"utf-8"); System.out.println(Tag+"收到请求:"+param); String[]reqArray=param.split(":"); user=newUser(); =reqArray[0]; user.psd=reqArray[1]; user.chineseName=reqArray[2]; booleanresult=DBUtil.addUser(user); response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain;charset=utf-8"); response.setHeader("Pragma","No-Cache"); response.setDateHeader("Expires",0); PrintWriterout=response.getWriter(); if(result){ System.out.println(Tag+"注册成功:"+); out.print("0:"+user.chineseName); }else{ System.out.println(Tag+"用户名已存在:"+); out.print("-1"); } out.flush(); out.close(); }}//DBUtil.javapackagecom.bs.util;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importjava.util.UUID;importcom.bs.bean.NotifyInfo;importcom.bs.bean.User;/****数据库连接工具*/publicclassDBUtil{ privatestaticConnectioncon; privatestaticPreparedStatementps; privatestaticResultSetrs; static{ try{ Class.forName("com.mysql.jdbc.Driver"); con=DriverManager .getConnection( "jdbc:mysql://localhost:3306/bs002elm?characterEncoding=utf-8", "root","123"); }catch(ClassNotFoundExceptione){ e.printStackTrace(); }catch(SQLExceptione){ e.printStackTrace(); } } /** *用户注册 * *@paramname *@parampsd *@return */ publicstaticBooleanaddUser(Useru){//TODO Booleanresult=null; List<User>list=DBUtil.getAllUsers(); for(Useruser:list){ if(.equals()){ returnfalse; } } Stringsql="insertintouser(uuid,name,psd,chinese_name)values(?,?,?,?)"; try{ ps=con.prepareStatement(sql); ps.setString(1,UUID.randomUUID().toString()); ps.setString(2,); ps.setString(3,u.psd); ps.setString(4,u.chineseName); result=ps.execute(); }catch(SQLExceptione){ System.out.println
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023届新高考新教材化学人教版一轮训练-第九章第4讲 生物大分子
- 玉溪师范学院《电磁学》2021-2022学年期末试卷
- 2024上海市采暖产品买卖合同
- 盐城师范学院《瑜伽》2022-2023学年第一学期期末试卷
- 盐城师范学院《小型乐队编配》2021-2022学年第一学期期末试卷
- 2024年玻璃微纤维隔热毡项目发展计划
- 2024建筑升降机出租合同
- 2024宅基地买卖合同协议范文
- 2024医院卫生耗材购销合同范本
- 现代化工HSE专项测试题附答案
- 非新生儿破伤风诊疗规范(2024年版)解读
- 微测网题库完整版行测
- 多图中华民族共同体概论课件第十一讲 中华一家与中华民族格局底定(清前中期)根据高等教育出版社教材制作
- 生涯发展报告 (修改版)
- 求职能力展示
- 中国马克思主义与当代思考题(附答案)
- (新版)征信知识竞赛基础题库(500题)
- 金属风管支架重量计算表
- 公司组织架构图模板可编辑
- 电视导演艺术的特性和创新
- 唐宋八大家及生平经历
评论
0/150
提交评论