畢業(yè)論文-基于iOS平臺(tái)的客戶端應(yīng)用之食安檢的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
畢業(yè)論文-基于iOS平臺(tái)的客戶端應(yīng)用之食安檢的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
畢業(yè)論文-基于iOS平臺(tái)的客戶端應(yīng)用之食安檢的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
畢業(yè)論文-基于iOS平臺(tái)的客戶端應(yīng)用之食安檢的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
畢業(yè)論文-基于iOS平臺(tái)的客戶端應(yīng)用之食安檢的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

河北農(nóng)業(yè)大學(xué)本科畢業(yè)論文(設(shè)計(jì))題目:基于iOS平臺(tái)的客戶端應(yīng)用之食安檢的設(shè)計(jì)與實(shí)現(xiàn) 學(xué)院:信息科學(xué)與技術(shù)學(xué)院專業(yè)班級(jí):軟件工程1001班學(xué)號(hào): 學(xué)生姓名: 指導(dǎo)教師姓名: 指導(dǎo)教師職稱:講師 二O一四年五月二十九日基于iOS平臺(tái)的客戶端應(yīng)用之食安檢的設(shè)計(jì)與實(shí)現(xiàn)摘要在我們的生活中,存在著各種各樣的食物。在提倡綠色食品、健康食品的今天,還是有一些食品存在嚴(yán)重安全隱患。接連不斷發(fā)生的惡性食品安全事故卻引發(fā)了人們對(duì)食品安全的高度關(guān)注,要重新審視這一已上升到國家公共安全高度的問題,更要加大對(duì)食品安全的監(jiān)管力度。食品安全關(guān)系到廣大人民群眾的身體健康和生命安全,關(guān)系到經(jīng)濟(jì)健康發(fā)展和社會(huì)穩(wěn)定,關(guān)系到政府和國家的形象。食品安全已成為衡量人民生活質(zhì)量、社會(huì)管理水平和國家法制建設(shè)的一個(gè)重要方面。于是一款成熟的食品安全檢測(cè)的APP的研究與設(shè)計(jì)開發(fā)已經(jīng)成為了市場(chǎng)不可或缺的一部分,并且有著廣闊的發(fā)展前景。本次設(shè)計(jì)項(xiàng)目食安檢,基于蘋果iOS系統(tǒng),利用智能手機(jī)實(shí)現(xiàn)食品安全檢測(cè)的功能。畢業(yè)設(shè)計(jì)完成時(shí),整個(gè)應(yīng)用界面簡單明了,操作簡潔。用戶不僅能夠看到自己購買的食品是否安全、符合國家標(biāo)準(zhǔn),還能夠進(jìn)行其他產(chǎn)品的搜索,讓用戶能夠?qū)τ谧约嘿徺I的食品吃得舒心,買的放心。本設(shè)計(jì)所使用的開發(fā)環(huán)境是Xcode,使用的編程語言是Objective-C。項(xiàng)目主要功能包括產(chǎn)品的展示、搜索以及條形碼掃描。關(guān)鍵詞:iOS系統(tǒng);食品安全;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:創(chuàng)建查詢對(duì)象NSFetchRequest*request=[[NSFetchRequestalloc]init];[requestsetEntity:entify];//3:查詢用戶NSArray*lines=[coreData.managedObjectContextexecuteFetchRequest:requesterror:nil];returnlines;}4.4分類頁面設(shè)計(jì)圖4-4-1為一級(jí)分類的界面。一級(jí)分類的界面由UITableView構(gòu)成,每一個(gè)UITableViewCell顯示的為每一類的圖標(biāo)和名稱。當(dāng)點(diǎn)擊每一個(gè)UITableVIewCell或者是向左滑動(dòng)時(shí),就會(huì)顯示出對(duì)應(yīng)類的二級(jí)分類。之所以會(huì)出現(xiàn)這樣的效果是因?yàn)樵诖薝ITablView上添加了UISwipeGestureRecognizer手勢(shì),并且定義了手勢(shì)的方向?yàn)閁ISwipeGestureRecognizerDirectionLeft(此枚舉表示可識(shí)別的手勢(shì)方向?yàn)橄蜃螅┖蚒ISwipeGestureRecognizerDirectionRight(此枚舉表示可識(shí)別的方向?yàn)橄蛴遥?。?dāng)向右滑動(dòng)時(shí),就會(huì)隱藏二級(jí)分類。 圖4-4-1一級(jí)分類界面圖4-4-2為點(diǎn)擊了一級(jí)分類(肉及肉制品分類)顯示出二級(jí)分類界面的效果。二級(jí)界面也是使用UITableView進(jìn)行顯示的。但是使用-(UIView*)tableView:(UITableView*)tableViewviewForHeaderInSection:(NSInteger)section來表示二級(jí)主分類視圖,使用UITableViewCell來表示二級(jí)子分類。當(dāng)點(diǎn)擊某一個(gè)二級(jí)子分類時(shí),就會(huì)跳轉(zhuǎn)回搜索界面,自動(dòng)在搜索框顯示二級(jí)子分類的內(nèi)容,并且自動(dòng)進(jìn)行搜索。圖4-4-2顯示二級(jí)子分類的界面下面為顯示和隱藏二級(jí)子界面的代碼://展開右邊的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食品掃描頁面設(shè)計(jì)下圖4-5-1為沒有物品置于掃描界面,食品掃描頁面的狀態(tài)。圖4-5-2為有條形碼置于掃描界面時(shí),掃描界面鎖定掃描的物品時(shí)的裝填。圖4-5-1沒有物品置于掃描界面的狀態(tài)圖4-5-2有條形碼置于掃描界面的狀態(tài)首先最主要的掃描功能的實(shí)現(xiàn)是通過ZBar庫中的ZBarReadrView來實(shí)現(xiàn)的。先判斷當(dāng)前的設(shè)備是否支持?jǐn)z像頭,如果不支持那么提示用戶當(dāng)前設(shè)備不支持掃描,如果支持那么就初始化一個(gè)ZBarReaderView的對(duì)象,然后設(shè)置此對(duì)象的代理為當(dāng)前的ViewController。再調(diào)用此-(void)readerView:(ZBarReaderView*)readerViewdidReadSymbols:(ZBarSymbolSet*)symbolsfromImage:(UIImage*)image代理方法,當(dāng)監(jiān)控到有條形碼在攝像頭下,那么就會(huì)通過constzbar_symbol_t*symbol=zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);NSString*symbolStr=[NSStringstringWithUTF8String:zbar_symbol_get_data(symbol)];這兩句代碼獲取到條形碼的編碼,然后將定時(shí)器銷毀,使掃描條不再晃動(dòng)。之后用此條形碼的編碼進(jìn)行數(shù)據(jù)請(qǐng)求,如果請(qǐng)求到有數(shù)據(jù),那么就跳轉(zhuǎn)到商品詳情頁面,顯示食品的具體信息;如果沒有數(shù)據(jù)那么就彈出一個(gè)UIAlertView提示用戶,沒有此產(chǎn)品的信息。點(diǎn)擊確定,用戶重新進(jìn)行掃描商品。掃描界面由上至下,分別為寫有“將條形碼圖像置于矩形方框內(nèi)、離手機(jī)攝像頭10CM左右,系統(tǒng)就會(huì)自動(dòng)識(shí)別”的UILabel,以及一個(gè)UIImageView的白色掃描框和一個(gè)由UIImageView組成的綠色掃描條、一個(gè)由UIButton實(shí)現(xiàn)的手動(dòng)輸入按鈕。UIImageview實(shí)現(xiàn)的掃描條,為了讓掃描條效果更加逼真,實(shí)現(xiàn)來回晃動(dòng)的效果,開啟一個(gè)NSTimer定時(shí)器,首先讓掃描條置于最上方,然后upOrdown的狀態(tài)置為NO,表示掃描條處于向下掃描狀態(tài),當(dāng)掃描條的y值為390時(shí),將upOrdown的狀態(tài)置為YES,使得掃描條向上運(yùn)動(dòng)。這樣循環(huán)往復(fù),就形成了掃描條不斷上下掃描的狀態(tài)。最下邊的UIButton點(diǎn)擊可以進(jìn)入到輸入條形碼的界面。在此界面包括一個(gè)輸入條形碼的UITextField和一個(gè)確定、取消的UIButton。當(dāng)輸入完畢條形碼,點(diǎn)擊確定的UIButton,可以進(jìn)行數(shù)據(jù)請(qǐng)求;點(diǎn)擊取消按鈕直接返回到掃描界面。在此界面加入了UITapGestureRecognizer手勢(shì),當(dāng)點(diǎn)擊屏幕的時(shí)候,會(huì)隱藏UINavigationBar和UITabBar;再次點(diǎn)擊又會(huì)顯示出來。具體代碼如下:-(void)viewDidLoad{[superviewDidLoad];[selfinitTitleViewWithTitle:@"掃描"];self.navigationItem.leftBarButtonItem=nil;self.view.backgroundColor=[UIColorwhiteColor];//創(chuàng)建掃描視圖readview=[ZBarReaderViewnew];//初始化readview.backgroundColor=[UIColorblueColor];readview.frame=CGRectMake(0,0,kScreenWidth,self.view.height);//改變framereadview.readerDelegate=self;//設(shè)置delegatereadview.allowsPinchZoom=YES;//不使用Pinch手勢(shì)變焦readview.torchMode=0;//關(guān)閉閃關(guān)燈//是否pinch手勢(shì)聚焦[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個(gè)人中心頁面設(shè)計(jì)個(gè)人中心頁面主要包括注冊(cè)、登錄、歷史記錄、清除緩存、修改密碼、注銷等功能。圖4-6-1為未登錄前的個(gè)人中心界面。圖4-6-2為登錄后的個(gè)人中心界面。圖4-6-1未登錄的個(gè)人中心界面圖4-6-2登錄后的個(gè)人中心界面此界面主要介紹清除緩存,上傳頭像以及歷史記錄三個(gè)功能。首先,清除緩存功能。因?yàn)槭称返膱D片都緩存到了本地的文件夾下,所以清除緩存此欄會(huì)通過NSString*path=[NSHomeDirectory()stringByAppendingPathComponent:@"Library/Caches/ImageCache"];size=[UIUtilscountDirectorySize:path];來計(jì)算緩存的大小,并且顯示在UITableViewCell的最右端。當(dāng)點(diǎn)擊此cell,會(huì)調(diào)用UIAlertView,如果選擇確定,就會(huì)執(zhí)行如下代碼://使用SDImageCache計(jì)算緩存[[SDImageCachesharedImageCache]clearDisk];[selfgetSizeWithCacheData];NSIndexPath*indexPath=[NSIndexPathindexPathForRow:1inSection:0];[_tableViewreloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationFade];將緩存清除,并且刷新當(dāng)前的UITableViewCell,重新統(tǒng)計(jì)緩存的大小。其次,上傳頭像功能。當(dāng)點(diǎn)擊用戶頭像就會(huì)彈出UIActionSheet,讓用戶選擇相冊(cè)還是相機(jī)。無論用戶選擇相冊(cè)還是相機(jī)都會(huì)創(chuàng)建一個(gè)UIImagePickerController對(duì)象。當(dāng)用戶選擇相冊(cè),那么sourceType就為UIImagePickerControllerSourceTypePhotoLibrary;當(dāng)用戶選擇相機(jī),sourceType就UIImagePickerControllerSourceTypeCamera,并且設(shè)置此對(duì)象的delegate為當(dāng)前的ViewController,之后彈出模態(tài)視圖。具體調(diào)用代理實(shí)現(xiàn)資源選擇的方法見代碼:-(void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingMediaWithInfo:(NSDictionary*)info{//關(guān)閉相冊(cè)選取控制器[pickerdismissViewControllerAnimated:YEScompletion:^{//獲取到媒體的類型NSString*mediaType=[infoobjectForKey:UIImagePickerControllerMediaType];//判斷選取的資源是否為視頻if([mediaTypeisEqualToString:@"public.movie"]){//獲取到媒體的URL地址NSURL*url=[infoobjectForKey:UIImagePickerControllerMediaURL];//創(chuàng)建視頻播放器MPMoviePlayerViewController*moviePlayer=[[MPMoviePlayerViewControlleralloc]initWithContentURL:url];[selfpresentMoviePlayerViewControllerAnimated:moviePlayer];}//判斷選取的資源是否為相片elseif([mediaTypeisEqualToString:@"public.image"]){//獲取到選取的照片數(shù)據(jù)//獲取原始圖片UIImage*image=[infoobjectForKey:UIImagePickerControllerOriginalImage];NSData*data=UIImageJPEGRepresentation(image,0.8);[userDefaultsetObject:dataforKey:@"image"];[userDefaultsynchronize];iconimage=image;[_tableViewreloadData];}}];}最后,介紹歷史記錄功能模塊(見圖4-6-3)。此界面主要使用了UITableView來展示之前使用coreData進(jìn)行管理的數(shù)據(jù),從數(shù)據(jù)庫中讀取出來并顯示。下面具體介紹此數(shù)據(jù)的存儲(chǔ)和讀取的機(jī)制:第一,首先當(dāng)用戶點(diǎn)擊首界面的產(chǎn)品進(jìn)行商品詳情界面或者是通過搜索商品,點(diǎn)擊產(chǎn)品名稱進(jìn)入商品詳情界面,此信息就會(huì)通過-(BOOL)addLookAtData:(LookAtRecord*)lookAtRecord方法存儲(chǔ)到數(shù)據(jù)庫中。存儲(chǔ)的內(nèi)容包括三個(gè)字段:foodId,dateString以及foodName。第二,當(dāng)用戶點(diǎn)擊到個(gè)人中心界面后,選擇歷史記錄,就會(huì)進(jìn)入歷史記錄界面。如果用戶之前進(jìn)行過第一步的操作,那么此時(shí)歷史記錄界面就會(huì)顯示之前查過的產(chǎn)品的名稱以及查看的時(shí)間。此信息是通過-(NSArray*)findAllLookAt方法來獲得的。第三,當(dāng)用戶點(diǎn)擊某一條產(chǎn)品查看的歷史記錄時(shí),就會(huì)通過獲取的foodId拼接接口,發(fā)送請(qǐng)求,并跳轉(zhuǎn)到商品詳情頁面展示此詳情。第四,當(dāng)用戶點(diǎn)擊某一條產(chǎn)品歷史記錄后面的“X”時(shí),就會(huì)調(diào)用-(BOOL)deleteLookAtData:(NSString*)foodId方法,將產(chǎn)品歷史記錄首先從數(shù)據(jù)庫中刪除,當(dāng)刪除成功后,重新刷新界面,顯示新的歷史記錄列表。以上就是整個(gè)歷史記錄的存儲(chǔ)、讀取和刪除的過程。下面是具體的代碼:-(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];//將數(shù)據(jù)同步到文件中return[coreData.managedObjectContextsave:nil];}-(NSArray*)findAllLookAt{//1:創(chuàng)建實(shí)體描述對(duì)象NSEntityDescription*entify=[NSEntityDescriptionentityForName:@"LookAtRecord"inManagedObjectContext:coreData.managedObjectContext];//2:創(chuàng)建查詢對(duì)象NSFetchRequest*request=[[NSFetchRequestalloc]init];[requestsetEntity:entify];//3:查詢用戶NSArray*lines=[coreData.managedObjectContextexecuteFetchRequest:requesterror:nil];returnlines;}-(LookAtRecord*)findLookAtRecordWithName:(NSString*)foodId{//1:創(chuàng)建實(shí)體描述對(duì)象NSEntityDescription*entify=[NSEntityDescriptionentityForName:@"LookAtRecord"inManagedObjectContext:coreData.managedObjectContext];//2:創(chuàng)建查詢對(duì)象NSFetchRequest*request=[[NSFetchRequestalloc]init];[requestsetEntity:entify];//3:使用謂詞定義查詢條件//NS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論