




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河北农业大学本科毕业论文(设计)题目:基于iOS平台的客户端应用之食安检的设计与实现 学院:信息科学与技术学院专业班级:软件工程1001班学号: 学生姓名: 指导教师姓名: 指导教师职称:讲师 二O一四年五月二十九日基于iOS平台的客户端应用之食安检的设计与实现摘要在我们的生活中,存在着各种各样的食物。在提倡绿色食品、健康食品的今天,还是有一些食品存在严重安全隐患。接连不断发生的恶性食品安全事故却引发了人们对食品安全的高度关注,要重新审视这一已上升到国家公共安全高度的问题,更要加大对食品安全的监管力度。食品安全关系到广大人民群众的身体健康和生命安全,关系到经济健康发展和社会稳定,关系到政府和国家的形象。食品安全已成为衡量人民生活质量、社会管理水平和国家法制建设的一个重要方面。于是一款成熟的食品安全检测的APP的研究与设计开发已经成为了市场不可或缺的一部分,并且有着广阔的发展前景。本次设计项目食安检,基于苹果iOS系统,利用智能手机实现食品安全检测的功能。毕业设计完成时,整个应用界面简单明了,操作简洁。用户不仅能够看到自己购买的食品是否安全、符合国家标准,还能够进行其他产品的搜索,让用户能够对于自己购买的食品吃得舒心,买的放心。本设计所使用的开发环境是Xcode,使用的编程语言是Objective-C。项目主要功能包括产品的展示、搜索以及条形码扫描。关键词:iOS系统;食品安全;Objective-C语言;条形码AbstractInourlives,thereisawidevarietyoffoods.Inpromotinggreen,healthyfoodtoday,therearestillsomeseriousfoodsafetyhazards.Malignantfoodsafetyincidentsoccurredoneafteranother,butsparkedgreatconcernaboutfoodsafety,tore-examinethishadrisentotheheightofanationalpublicsafetyissues,butalsotoincreasethefoodsafetysupervision.Foodsafetyisrelatedtothehealthandsafetyofthemasses,relatedtothehealthyeconomicdevelopmentandsocialstability,relatedtotheimageofthegovernmentandthecountry.Foodsafetyhasbecomeanimportantaspectofameasureofthequalityofpeople'slives,socialmanagementandthenationallegalsystem.SoAPPresearchanddesigntodevelopasophisticatedfoodsafetytestinghasbecomeanintegralpartofthemarket,andtherearebroadprospectsfordevelopment.
Thedesignprojectfoodsecurity,basedonApple'siOSsystem,usingsmartphonestoachievefoodsafetytestingfunctions.Upongraduationdesigniscompleted,theentireapplicationinterfaceissimple,simpleoperation.Userscannotonlyseeifitissafetobuytheirownfood,inlinewithnationalstandards,butalsobeabletosearchforotherproducts,allowsuserstobuytheirownfoodtoeatforcomfort,buytherestassured.
ThisdesignisusedinthedevelopmentenvironmentXcode,theprogramminglanguageisObjective-C.Projectfeaturesincludedisplay,searchandbarcodescanningproducts.Keywords:iOSsystem;foodsafety;Objective-Clanguage;barcode目录inManagedObjectContext:coreData.managedObjectContext];//2:创建查询对象NSFetchRequest*request=[[NSFetchRequestalloc]init];[requestsetEntity:entify];//3:查询用户NSArray*lines=[coreData.managedObjectContextexecuteFetchRequest:requesterror:nil];returnlines;}4.4分类页面设计图4-4-1为一级分类的界面。一级分类的界面由UITableView构成,每一个UITableViewCell显示的为每一类的图标和名称。当点击每一个UITableVIewCell或者是向左滑动时,就会显示出对应类的二级分类。之所以会出现这样的效果是因为在此UITablView上添加了UISwipeGestureRecognizer手势,并且定义了手势的方向为UISwipeGestureRecognizerDirectionLeft(此枚举表示可识别的手势方向为向左)和UISwipeGestureRecognizerDirectionRight(此枚举表示可识别的方向为向右)。当向右滑动时,就会隐藏二级分类。 图4-4-1一级分类界面图4-4-2为点击了一级分类(肉及肉制品分类)显示出二级分类界面的效果。二级界面也是使用UITableView进行显示的。但是使用-(UIView*)tableView:(UITableView*)tableViewviewForHeaderInSection:(NSInteger)section来表示二级主分类视图,使用UITableViewCell来表示二级子分类。当点击某一个二级子分类时,就会跳转回搜索界面,自动在搜索框显示二级子分类的内容,并且自动进行搜索。图4-4-2显示二级子分类的界面下面为显示和隐藏二级子界面的代码://展开右边的tableView-(void)zoomInRightTabelView{[UIViewanimateWithDuration:0.2animations:^{_bottomView.left=-kScreenWidth/4;_isStrech=YES;}completion:^(BOOLfinished){[UIViewanimateWithDuration:0.09animations:^{_rightTableView.left=kScreenWidth*7.0/12;_markImageView.right=_rightTableView.left;}completion:^(BOOLfinished){}];}];}//收起右边的tableView-(void)zoonOutRightTabelView{[UIViewanimateWithDuration:0.2animations:^{_bottomView.left=0;_isStrech=NO;}completion:^(BOOLfinished){[UIViewanimateWithDuration:0.09animations:^{_rightTableView.left=kScreenWidth;_markImageView.left=_leftTableView.right-25;}];}];}4.5食品扫描页面设计下图4-5-1为没有物品置于扫描界面,食品扫描页面的状态。图4-5-2为有条形码置于扫描界面时,扫描界面锁定扫描的物品时的装填。图4-5-1没有物品置于扫描界面的状态图4-5-2有条形码置于扫描界面的状态首先最主要的扫描功能的实现是通过ZBar库中的ZBarReadrView来实现的。先判断当前的设备是否支持摄像头,如果不支持那么提示用户当前设备不支持扫描,如果支持那么就初始化一个ZBarReaderView的对象,然后设置此对象的代理为当前的ViewController。再调用此-(void)readerView:(ZBarReaderView*)readerViewdidReadSymbols:(ZBarSymbolSet*)symbolsfromImage:(UIImage*)image代理方法,当监控到有条形码在摄像头下,那么就会通过constzbar_symbol_t*symbol=zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);NSString*symbolStr=[NSStringstringWithUTF8String:zbar_symbol_get_data(symbol)];这两句代码获取到条形码的编码,然后将定时器销毁,使扫描条不再晃动。之后用此条形码的编码进行数据请求,如果请求到有数据,那么就跳转到商品详情页面,显示食品的具体信息;如果没有数据那么就弹出一个UIAlertView提示用户,没有此产品的信息。点击确定,用户重新进行扫描商品。扫描界面由上至下,分别为写有“将条形码图像置于矩形方框内、离手机摄像头10CM左右,系统就会自动识别”的UILabel,以及一个UIImageView的白色扫描框和一个由UIImageView组成的绿色扫描条、一个由UIButton实现的手动输入按钮。UIImageview实现的扫描条,为了让扫描条效果更加逼真,实现来回晃动的效果,开启一个NSTimer定时器,首先让扫描条置于最上方,然后upOrdown的状态置为NO,表示扫描条处于向下扫描状态,当扫描条的y值为390时,将upOrdown的状态置为YES,使得扫描条向上运动。这样循环往复,就形成了扫描条不断上下扫描的状态。最下边的UIButton点击可以进入到输入条形码的界面。在此界面包括一个输入条形码的UITextField和一个确定、取消的UIButton。当输入完毕条形码,点击确定的UIButton,可以进行数据请求;点击取消按钮直接返回到扫描界面。在此界面加入了UITapGestureRecognizer手势,当点击屏幕的时候,会隐藏UINavigationBar和UITabBar;再次点击又会显示出来。具体代码如下:-(void)viewDidLoad{[superviewDidLoad];[selfinitTitleViewWithTitle:@"扫描"];self.navigationItem.leftBarButtonItem=nil;self.view.backgroundColor=[UIColorwhiteColor];//创建扫描视图readview=[ZBarReaderViewnew];//初始化readview.backgroundColor=[UIColorblueColor];readview.frame=CGRectMake(0,0,kScreenWidth,self.view.height);//改变framereadview.readerDelegate=self;//设置delegatereadview.allowsPinchZoom=YES;//不使用Pinch手势变焦readview.torchMode=0;//关闭闪关灯//是否pinch手势聚焦[self.viewaddSubview:readview];[self_initViews];timer=[NSTimerscheduledTimerWithTimeInterval:.02target:selfselector:@selector(animation1)userInfo:nilrepeats:YES];//开始扫描[readviewstart];UITapGestureRecognizer*tapGesture=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tapGestureAction:)];[self.viewaddGestureRecognizer:tapGesture];}-(void)tapGestureAction:(UITapGestureRecognizer*)tapGesture{isTap=!isTap;MainTabBarController*main=(MainTabBarController*)self.tabBarController;if(isTap){[self.navigationControllersetNavigationBarHidden:NOanimated:YES];[mainhiddenTabbar:NO];}else{[self.navigationControllersetNavigationBarHidden:YESanimated:YES];[mainhiddenTabbar:YES];}}4.6个人中心页面设计个人中心页面主要包括注册、登录、历史记录、清除缓存、修改密码、注销等功能。图4-6-1为未登录前的个人中心界面。图4-6-2为登录后的个人中心界面。图4-6-1未登录的个人中心界面图4-6-2登录后的个人中心界面此界面主要介绍清除缓存,上传头像以及历史记录三个功能。首先,清除缓存功能。因为食品的图片都缓存到了本地的文件夹下,所以清除缓存此栏会通过NSString*path=[NSHomeDirectory()stringByAppendingPathComponent:@"Library/Caches/ImageCache"];size=[UIUtilscountDirectorySize:path];来计算缓存的大小,并且显示在UITableViewCell的最右端。当点击此cell,会调用UIAlertView,如果选择确定,就会执行如下代码://使用SDImageCache计算缓存[[SDImageCachesharedImageCache]clearDisk];[selfgetSizeWithCacheData];NSIndexPath*indexPath=[NSIndexPathindexPathForRow:1inSection:0];[_tableViewreloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationFade];将缓存清除,并且刷新当前的UITableViewCell,重新统计缓存的大小。其次,上传头像功能。当点击用户头像就会弹出UIActionSheet,让用户选择相册还是相机。无论用户选择相册还是相机都会创建一个UIImagePickerController对象。当用户选择相册,那么sourceType就为UIImagePickerControllerSourceTypePhotoLibrary;当用户选择相机,sourceType就UIImagePickerControllerSourceTypeCamera,并且设置此对象的delegate为当前的ViewController,之后弹出模态视图。具体调用代理实现资源选择的方法见代码:-(void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingMediaWithInfo:(NSDictionary*)info{//关闭相册选取控制器[pickerdismissViewControllerAnimated:YEScompletion:^{//获取到媒体的类型NSString*mediaType=[infoobjectForKey:UIImagePickerControllerMediaType];//判断选取的资源是否为视频if([mediaTypeisEqualToString:@"public.movie"]){//获取到媒体的URL地址NSURL*url=[infoobjectForKey:UIImagePickerControllerMediaURL];//创建视频播放器MPMoviePlayerViewController*moviePlayer=[[MPMoviePlayerViewControlleralloc]initWithContentURL:url];[selfpresentMoviePlayerViewControllerAnimated:moviePlayer];}//判断选取的资源是否为相片elseif([mediaTypeisEqualToString:@"public.image"]){//获取到选取的照片数据//获取原始图片UIImage*image=[infoobjectForKey:UIImagePickerControllerOriginalImage];NSData*data=UIImageJPEGRepresentation(image,0.8);[userDefaultsetObject:dataforKey:@"image"];[userDefaultsynchronize];iconimage=image;[_tableViewreloadData];}}];}最后,介绍历史记录功能模块(见图4-6-3)。此界面主要使用了UITableView来展示之前使用coreData进行管理的数据,从数据库中读取出来并显示。下面具体介绍此数据的存储和读取的机制:第一,首先当用户点击首界面的产品进行商品详情界面或者是通过搜索商品,点击产品名称进入商品详情界面,此信息就会通过-(BOOL)addLookAtData:(LookAtRecord*)lookAtRecord方法存储到数据库中。存储的内容包括三个字段:foodId,dateString以及foodName。第二,当用户点击到个人中心界面后,选择历史记录,就会进入历史记录界面。如果用户之前进行过第一步的操作,那么此时历史记录界面就会显示之前查过的产品的名称以及查看的时间。此信息是通过-(NSArray*)findAllLookAt方法来获得的。第三,当用户点击某一条产品查看的历史记录时,就会通过获取的foodId拼接接口,发送请求,并跳转到商品详情页面展示此详情。第四,当用户点击某一条产品历史记录后面的“X”时,就会调用-(BOOL)deleteLookAtData:(NSString*)foodId方法,将产品历史记录首先从数据库中删除,当删除成功后,重新刷新界面,显示新的历史记录列表。以上就是整个历史记录的存储、读取和删除的过程。下面是具体的代码:-(BOOL)addLookAtData:(LookAtRecord*)lookAtRecord{if(lookAtRecord==nil){returnNO;}[coreData.managedObjectContextinsertObject:lookAtRecord];return[coreData.managedObjectContextsave:nil];}-(BOOL)deleteLookAtData:(NSString*)foodId{LookAtRecord*lookAtRecord=[selffindLookAtRecordWithName:foodId];if(lookAtRecord==nil){returnNO;}//删除[coreData.managedObjectContextdeleteObject:lookAtRecord];//将数据同步到文件中return[coreData.managedObjectContextsave:nil];}-(NSArray*)findAllLookAt{//1:创建实体描述对象NSEntityDescription*entify=[NSEntityDescriptionentityForName:@"LookAtRecord"inManagedObjectContext:coreData.managedObjectContext];//2:创建查询对象NSFetchRequest*request=[[NSFetchRequestalloc]init];[requestsetEntity:entify];//3:查询用户NSArray*lines=[coreData.managedObjectContextexecuteFetchRequest:requesterror:nil];returnlines;}-(LookAtRecord*)findLookAtRecordWithName:(NSString*)foodId{//1:创建实体描述对象NSEntityDescription*entify=[NSEntityDescriptionentityForName:@"LookAtRecord"inManagedObjectContext:coreData.managedObjectContext];//2:创建查询对象NSFetchRequest*request=[[NSFetchRequestalloc]init];[requestsetEntity:entify];//3:使用谓词定义查询条件//NS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 买卖小车指标合同范例
- 企业加薪合同范例
- 人防车位协议合同范例
- 个人债务转移合同范例格式
- 兄弟财产赠与合同范例
- 乳制品转让合同范例
- 债务处置合同范例
- 智能制造生产线设备升级与性能优化服务合同
- 事业单位人事代理与人才派遣服务合同
- 抖音网红虚拟礼物分成收益执行协议
- 2021年西安经开渭北城市发展集团有限公司招聘笔试试题及答案解析
- 2022年注册规划师实务试题及答案
- 心电监护操作评分标准
- DB62∕T 3176-2019 建筑节能与结构一体化墙体保温系统应用技术规程
- 优秀病例演讲比赛PPT
- GB∕T 25684.5-2021 土方机械 安全 第5部分:液压挖掘机的要求
- 电气炉焊接工艺的自动化控制线设计
- 剪式汽车举升机设计说明
- 中国基层胸痛中心认证标准(第三版)
- 鸡的解剖步骤及病
- 常见食物的性味归经附表
评论
0/150
提交评论