下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
公共自行车的发展现状与对策
0公共交通质量不断恶化,为公共交通压力越来越大。在这也节点,设置了一个规范的《地铁》、《对于随着人们生活水平的提高,私家车的数量也越来越多。私家车普及的同时,对我们的生活环境造成了巨大的破坏,城市交通的压力越来愈大。为了缓解以上情况,公共交通逐渐流行起来,公交、轻轨、地铁相继出现。而近年来,公共自行车系统逐渐进入人们的视线,它可以有效减轻城市交通你那个压力,能做到真正意义上的节能减排,并且可以解决公共交通系统“最后一公里”的问题本文为了为用户提供便利的公共自行车服务1系统规划根据需求分析结果,本系统可分为两大部分:用户端和权限端。本系统使用Xcode开发环境进行开发,采用Swift语言实现2系统的主要功能和实现2.1用户端程序执行2.1.1gnupwell合作界面的实现用户在未登录状态下打开App会首先进入登录及注册界面。当用户打开该软件时,首先加载的是SignInViewController。首次使用需要注册账户,点击该控制器中的注册按钮,会跳转至SignUpViewController,在该界面中,用户可输入想要注册的用户名和密码,点击完成注册按钮后,该数据会保存至LeanCloud中,并且该数据的position的值会默认设置为user。完成注册后系统会自动返回登录控制器,在该控制器中用户可以输入用户名与密码,系统会将用户输入的值与数据库中的值进行比较,若用户名和密码均正确则会跳转至下一个UIViewController。当用户成功登录后,使用UserDefaults保存一个用于判断是否成功登录的Key,Key的值为布尔型。当用户下一次打开软件时,会首先判断该Key的值,当值为true时则会自动登录。2.1.2基于性能的地图代理用户成功登录后会进入地图界面,该界面及相关功能的运行效果如图2所示。登录成功后,会跳转至MapViewController。本系统使用的地图服务是高德地图,导入高德地图SDK后,定义MAMapView类并将其添加至该控制器的view中。使用高德地图的地图代理(MAMapViewDelegate)、搜索代理(AMapSearchDelegate)、步行导航代理(AMapNaviWalkManagerDelegate)并重写其相应代理方法,从而实现定位、查找自行车、路线规划等功能。在重写步行导航代理方法时计算出距离与步行时间,并当成功规划出路线时,将其在自定义的NotificationView中显示。2.1.3用车请求的获取用户点击扫码用车按钮进入扫码界面,如图3所示。用户通过点击地图界面的扫码用车按钮跳转进入ScanViewController,在该控制器中,重写viewDidAppear方法,在该方法中调用系统摄像头用于二维码识别。导入AVFoundation框架,通过重写AVCaptureMetadataOutputObjectsDelegate的代理方法实现扫码功能。扫码成功后,在handleCodeResult方法中获取扫码结果即车牌号,基于该车牌号新建用车请求记录对象并保存至数据库的UsageRecord表中。在viewDidLoad方法中,新建AVQuery类的变量query,初始化query的className为UsageRecord,并将其注册为AVLiveQuery类进行订阅,使用AVLiveQueryDelegate代理中的objectDidUpdate方法可以监控对象是否发生变化。当操作员批准用车请求后,对象的isApproved值会发生改变,objectDidUpdate方法便会被调用。因此重写objectDidUpdate方法,当调用该方法时会将扫码成功时保存的对象传入下一个UIViewController中,并调用present方法进行跳转。点击打开手电筒按钮可以打开手机的手电筒,该方法主要是通过更改AVCaptureDevice.TorchMode的状态实现对手电筒的监控。2.1.4uearquerad软件界面介绍用户点击手动输入车牌按钮进入该界面,如图4所示。在某些特殊情况下会出现无法进行扫码的情况,用户可以通过点击扫码界面的手动输入车牌按钮跳转至HandViewController。该控制器同样需要订阅AVQuery为实时更新类AVLiveQuery,该部分的实现方法与扫码界面相同。该控制器中的主要控件有输入框textField和用车按钮useButton。由于车牌号长度通常为4-8位,因此在重写该控制器的viewDidLoad方法时需要使用NotificationCenter对textField的字符长度进行监控:(1)当textField输入字符的长度小于4时,useButton不可点击;(2)当字符长度为4-8位时,useButton可以点击,点击事件与扫码界面的handleCodeResult方法一致;(3)当输入字符大于8时,字符串将被截取前八位,从而实现字符限制功能。2.1.5控制器界面显示用户提交的用车请求通过后会进入获取解锁码界面,如图5所示。当操作员审批通过用车请求时,系统会跳转至UnlockViewController,并在跳转方法实现的同时将上一控制器保存的对象赋值给本控制器的unlockObject变量。重写viewDidAppear方法,根据unlockObject的plate_number的值即车牌号,从数据库中获取相应的解锁码,并赋值给UILabel.text从而显示在界面上。当结束用车时,需要向操作员提交归还请求,实现方法与扫码界面和手动输入车牌界面中提交用车请求类似,当操作员处理归还请求后,会更改对象的isReturn的值,该控制器中的objectDidUpdate方法会被调用,弹出标题为“归还成功”的提示框。2.1.6车辆报修信息的获取用户点击立即报修按钮进入报修界面,如图6所示。点击获取解锁码界面的立即报修按钮跳转至RepairViewController。跳转方法调用的同时,将UnlockViewController中unlockObject的plate_number的值传入该控制器中。用户可以在textView中对车辆情况进行描述。点击submitButton可以将报修信息作为RepairRecord表的对象保存到数据库中。保存时该对象isRepaired的值默认保存为false。2.2访问权限的结束2.2.1静态单元格添加该界面的控制器为ListViewController。在storyBoard中为该控制器拖入一个UITableView,并对将单元格进行自定义。新建ListTableViewCell类关联自定义的单元格,在控制器中调用cellForRowAt方法为tableView注册该自定义单元格。当界面加载完成后,在cellForRowAt方法中获取UsageRecord表中的所有数据,并根据行数(indexPath.row)作为下标获取每一行需要显示的对象。调用didSelectRowAt方法,根据对象isApproved和isReturn的值实现不同的点击方法:(1)当isApproved值为false时,该记录为用车请求,单元格preview的背景颜色为红色,点击单元格会更改值为true,即批准用户用车;(2)当isApproved值为true且isReturn值为false时,该记录为归还请求,单元格preview的背景颜色为蓝色,点击单元格会更改isReturn的值为true,即归还成功;(3)当isApproved和isReturn的值均为true时,意味该条记录已经过期,单元格preview的背景颜色为绿色,单元格无法点击。操作员端界面及相关功能的运行效果如图7所示。2.2.2rowat方法该界面的控制器为RepairViewController。该界面的详细设计与操作员端类似,新建RepairTableViewCell关联自定义单元格,在cellForRowAt方法中获取RepairRecord表中的所有数据。在didSelectRowAt方法中,当对象isRepaired的值为false时,维修员可以通过点击单元格将值更改为true。当值为true时,意味着该报修记录已经处理,单元格无法点击。创建refreshControl继承UIRefreshControl,重写viewDidLoad方法并将其与tableView进行关联。调用addTarget方法为下拉刷新组件添加方法,当维修员下拉列表时,会重新获取数据并刷新列表。维修员端界面及相关功能的运行结果如图8所示。2.2.3sition变量的处理该界面的主控制器为ManagerViewController,主界面如图9所示。该控制器中的主要组件为用于显示管理员端功能的静态UITableView。各功能具体设计如下:(1)查询用户信息、操作员信息、维修员信息:点击这三个单元格时,控制器会调用UINavigationViewController.pushViewController方法跳转至UserInfoViewController。点击不同的单元格,会对该控制器中position变量进行不同的赋值。该控制器的设计与操作员端、维修员端基本相同,区别在于获取数据时会根据position的值获取相应身份的用户信息数据,如图10所示。(2)点击UserInfoViewController中addButton会跳转至CreateUserViewController,在该控制器中管理员可以创建新的权限端账号。两个UITextField分别用于输入用户名和密码,positionSegmentedCotrol用于选择账号身份。点击saveButton将调用AVOject.saveInBackground方法将新的账号信息保存至UserInfo表中。passwordTextField中的值可以为空,此时保存的默认密码为12345678,如图11所示。(3)查询自行车信息:点击该单元格时会跳转至BicycleViewController,在该控制器加载完成时会获取所有自行车牌号和相应的解锁码,设计方法基本同上。点击车牌号单元格会跳转至BicycleManagerViewController,在该控制器中可以修改传入车牌号对应的解锁码,如图12所示。(4)查询用车记录、维修记录:点击这两个单元格会跳转至RecordViewController,根据点击的单元格索引,对该控制器中的record变量进行赋值。设计方法基
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度毛竹产业扶贫项目承包合同3篇
- 2025版教育信息化项目实施及合作保密协议3篇
- 二零二五年度园林绿化养护与节水技术应用合同3篇
- 2025版学校门卫服务及校园安全防范协议2篇
- 2025年度新型城镇化项目卖方信贷贷款合同
- 二零二五版毛竹砍伐与生态旅游项目投资合作协议2篇
- 2025年度数据中心外接线用电环保责任合同
- 二零二五年度GRC构件定制化设计与施工服务合同3篇
- 二零二五年度公司自愿离婚协议书编制指南
- 个人借款抵押车全面合同(2024版)2篇
- 2025届高考语文复习:散文的结构与行文思路 课件
- 电网调度基本知识课件
- 拉萨市2025届高三第一次联考(一模)语文试卷(含答案解析)
- 《保密法》培训课件
- 回收二手机免责协议书模板
- (正式版)JC∕T 60023-2024 石膏条板应用技术规程
- (权变)领导行为理论
- 2024届上海市浦东新区高三二模英语卷
- 2024年智慧工地相关知识考试试题及答案
- GB/T 8005.2-2011铝及铝合金术语第2部分:化学分析
- 不动产登记实务培训教程课件
评论
0/150
提交评论