iOS开发之《归属地查询》软件的抛砖引玉

移动开发 iOS
学习iOS开发有一段时间了,可能很多人也会有一样的想法,究竟自己现在能写出点什么看上去能算是应用的程序,我在左思右想之后,用了8个小时,写了这个归属地查询软件,我想说的是,这个软件从代码上看其实很简单,学了iOS开发一段时间的人都应该能写出来,无非就是从一个textfield接收一个电话号码,之后对电话号码稍加转换,之后是用数据库查询。

学习iOS开发有一段时间了,可能很多人也会有一样的想法,究竟自己现在能写出点什么看上去能算是应用的程序,我在左思右想之后,用了8个小时,写了这个归属地查询软件,我想说的是,这个软件从代码上看其实很简单,学了iOS开发一段时间的人都应该能写出来,无非就是从一个textfield接收一个电话号码,之后对电话号码稍加转换,之后是用数据库查询。

在这里呢,我们输入的号码,无非就是几种(可能是客服电话,10XXXX;可能是固话:0XXxxxxxxxx,和0XXXxxxxxxxx,这里我们允许用户只输入区号(0XX,0XXX);可能是移动电话:1XXxxxxxxxx,861XXxxxxxxxx,+861XXxxxxxxxx,这里我们同样允许用户输入电话号码的前7位,即(1XXxxxx,861XXxxxx,+861XXxxxx)),其余输入我们一律视为格式不正确输入,显示内容为:输入的手机号码,归属地,运营商,城市区号;

我们需要一个数据库,如果想做做练习,大家可以自己随便写一个数据库,

这里我会为大家展示一些核心的代码:

***段代码:拷贝数据库

 

  1. -(void)DoCopyDatabase{ 
  2.     NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory,NSUserDomainMask, YES);  
  3.     NSString *documentsDirectory = [paths objectAtIndex:0];      
  4.     NSString *documentLibraryFolderPath = [documentsDirectory stringByAppendingPathComponent:@"location_Numbercity_citynumber.db"];  
  5.     if ([[NSFileManager defaultManager] fileExistsAtPath:documentLibraryFolderPath]) {  
  6.     }else {  
  7.         NSString *resourceSampleImagesFolderPath =[[NSBundle mainBundle]  
  8.                                                    pathForResource:@"location_Numbercity_citynumber"  
  9.                                                    ofType:@"db"];  
  10.         NSData *mainBundleFile = [NSData dataWithContentsOfFile:resourceSampleImagesFolderPath];  
  11.         [[NSFileManager defaultManager] createFileAtPath:documentLibraryFolderPath  
  12.                                                 contents:mainBundleFile  
  13.                                               attributes:nil]; 
  14.     } 

这段代码,在Documents文件夹下没有我们的数据库的时候将数据库拷贝到该位置。

第二段代码:数据的整理操作

 

  1. - (IBAction)SearchButton:(id)sender { 
  2.     [textfieldyourphonenumber resignFirstResponder]; 
  3.     mylabelmobile.text = @""
  4.     mylabellocation.text = @""
  5.     mylabelphonenumber.text = @""
  6.     mylabelzonecode.text = @""
  7.      
  8.     NSString *findPhonenumber = @""
  9.     NSString *findPhoneNumberMobile = @""
  10.     NSString *findPhoneNumberIsACall = @""
  11.     NSString *findPhoneNumberIsMobile = @""
  12.      
  13.     NSInteger phonenumberlength = [textfieldyourphonenumber.text length]; 
  14.     if (phonenumberlength == 3 || 
  15.         phonenumberlength == 4 || 
  16.         phonenumberlength == 5 || 
  17.         phonenumberlength == 7 || 
  18.         phonenumberlength == 11||  
  19.         phonenumberlength == 12|| 
  20.         phonenumberlength == 13|| 
  21.         phonenumberlength == 14)  
  22.     { 
  23.         NSString *tempstring = textfieldyourphonenumber.text; 
  24.         if ((phonenumberlength == 14) && ([tempstring characterAtIndex:0] == '+') &&([tempstring characterAtIndex:1] == '8')&&([tempstring characterAtIndex:2] == '6')&&([tempstring characterAtIndex:3] == '1'))  
  25.         { 
  26.             NSMutableString *tempstring02 = [NSMutableString stringWithString:tempstring]; 
  27.             NSRange range; 
  28.             range.location = 0; 
  29.             range.length = 3; 
  30.             [tempstring02 deleteCharactersInRange:range]; 
  31.             NSString *tempstring03 = [tempstring02 stringByPaddingToLength:7 withString:nil startingAtIndex:0]; 
  32.             NSString *findPhonenumberFull = [tempstring02 stringByPaddingToLength:11 withString:nil startingAtIndex:0]; 
  33.             mylabelphonenumber.text = findPhonenumberFull; 
  34.             findPhoneNumberMobile = [tempstring02 stringByPaddingToLength:3 withString:nil startingAtIndex:0]; 
  35.             findPhonenumber = tempstring03; 
  36.         }else if 
  37. }else if (((phonenumberlength == 12) && ([tempstring characterAtIndex:0] == '0'))||((phonenumberlength == 4) && ([tempstring characterAtIndex:0] == '0'))) { 
  38.             NSMutableString *tempstring02 = [NSMutableString stringWithString:tempstring]; 
  39.             mylabelphonenumber.text = tempstring02; 
  40.             NSMutableString *tempstring03 = [[NSMutableString alloc] initWithCapacity:1]; 
  41.             [tempstring03 appendString:[tempstring02 stringByPaddingToLength:4 withString:nil startingAtIndex:0]]; 
  42.             mylabelzonecode.text = tempstring03; 
  43.             NSRange range; 
  44.             range.location = 0; 
  45.             range.length = 1; 
  46.             [tempstring03 deleteCharactersInRange:range]; 
  47.             findPhoneNumberIsACall = tempstring03; 
  48.         }else if 
  49. }else if ((phonenumberlength == 5) &&([tempstring characterAtIndex:0] == '1')) { 
  50.             mylabelphonenumber.text = tempstring; 
  51.             findPhoneNumberIsMobile = tempstring; 
  52.         }else { 
  53.             [self PhoneNumberError]; 
  54.         } 
  55.     }else { 
  56.         [self PhoneNumberError]; 
  57.     } 
  58.     if ([findPhonenumber length] ==7 && [findPhoneNumberMobile length] ==3)  
  59.     { 
  60.         [self SelectInfoByPhone:findPhonenumber WithMobile:findPhoneNumberMobile]; 
  61.     }else if ([findPhoneNumberIsACall length] == 3||[findPhoneNumberIsACall length] == 4) 
  62.     { 
  63.         [self SelectInfoByCall:findPhoneNumberIsACall]; 
  64.  
  65.     }else if ([findPhoneNumberIsMobile length] == 5) 
  66.     { 
  67.         NSInteger findPhoneNumberIsMobileInt = [findPhoneNumberIsMobile intValue]; 
  68.         [self SelectInfoByPhoneNumberIsMobile:findPhoneNumberIsMobileInt]; 
  69.     } 
  70.     textfieldyourphonenumber.text = @""

这里我为大家展示了部分对数据操作代码,省略的代码与其他大同小异,所以我们就提供一个特殊的5位,和移动电话,和固话,各一段操作。

第三段代码:查询数据库

 

  1. -(void)SelectInfoByPhone:(NSString *)phonenumber WithMobile:(NSString *)phonemobile 
  2.     NSString *SelectWhatMobile = @"SELECT mobile FROM numbermobile where uid="
  3.     NSString *SelectWhatMobileFull = [SelectWhatMobile stringByAppendingFormat:phonemobile]; 
  4.     sqlite3 *database; 
  5.     if (sqlite3_open([[self FindDatabase] UTF8String], &database) 
  6.         != SQLITE_OK) { 
  7.         sqlite3_close(database); 
  8.         NSAssert(0, @"Failed to open database"); 
  9.     } 
  10.     sqlite3_stmt *stmt; 
  11.     if (sqlite3_prepare_v2(database, [SelectWhatMobileFull UTF8String], -1, &stmt, nil) == SQLITE_OK) { 
  12.         while (sqlite3_step(stmt) == SQLITE_ROW) { 
  13.             int mobilenumber = sqlite3_column_int(stmt, 0); 
  14.             if (mobilenumber) { 
  15.                 NSString *mobileNumberString = [NSString stringWithFormat:@"%d",mobilenumber]; 
  16.                 NSString *SelectWhatMobileName = @"SELECT mobile FROM mobilenumber WHERE uid="
  17.                 NSString *SelectWhatMobileNameFull = [SelectWhatMobileName stringByAppendingFormat:mobileNumberString]; 
  18.                 sqlite3_stmt *stmt2; 
  19.                 if (sqlite3_prepare_v2(database, [SelectWhatMobileNameFull UTF8String], -1, &stmt2, nil) == SQLITE_OK) { 
  20.                     while (sqlite3_step(stmt2) == SQLITE_ROW) { 
  21.                         char *mobilename = (char *)sqlite3_column_text(stmt2, 0); 
  22.                         NSString *mobilenamestring = [[NSString alloc] initWithUTF8String:mobilename]; 
  23.                         if (mobilenamestring!= NULL) { 
  24.                             mylabelmobile.text = mobilenamestring; 
  25.                         } 
  26.                     } 
  27.                 }sqlite3_finalize(stmt2); 
  28.                  
  29.             } 
  30.         } 
  31.         sqlite3_finalize(stmt); 
  32.     } 
  33.     sqlite3_stmt *stmt3; 
  34.     NSString *SelectCityNumberByPhoneNumber = @"SELECT city FROM phonenumberwithcity WHERE uid="
  35.     NSString *SelectCityNumberByPhoneNumberFull = [SelectCityNumberByPhoneNumber stringByAppendingFormat:phonenumber]; 
  36.     if (sqlite3_prepare_v2(database, [SelectCityNumberByPhoneNumberFull UTF8String], -1, &stmt3, nil) == SQLITE_OK) { 
  37.         if (sqlite3_step(stmt3) == SQLITE_ROW) { 
  38.             int citynumber = sqlite3_column_int(stmt3, 0); 
  39.             NSString *citynumberNSString = [NSString stringWithFormat:@"%d",citynumber];  
  40.             if (citynumberNSString != nil) { 
  41.                 NSString *SelectCityNameAndCtiyZoneByCityBumber = @"SELECT city,zone FROM citywithnumber WHERE uid="
  42.                 NSString *SelectCityNameAndCtiyZoneByCityBumberFull = [SelectCityNameAndCtiyZoneByCityBumber stringByAppendingFormat:citynumberNSString]; 
  43.                 sqlite3_stmt *stmt4; 
  44.                 if (sqlite3_prepare_v2(database, [SelectCityNameAndCtiyZoneByCityBumberFull UTF8String], -1, &stmt4, nil) == SQLITE_OK) { 
  45.                     if (sqlite3_step(stmt4) == SQLITE_ROW) { 
  46.                         char *cityname = (char *)sqlite3_column_text(stmt4, 0); 
  47.                         int cityzonecode = sqlite3_column_int(stmt4, 1); 
  48.                         NSString *cityNameNSString = [[NSString alloc] initWithUTF8String:cityname]; 
  49.                         NSString *cityzonecodeNnumber = [@"0" stringByAppendingFormat:@"%d",cityzonecode]; 
  50.                         if (cityNameNSString != nil && cityzonecodeNnumber != nil) { 
  51.                             mylabellocation.text = cityNameNSString; 
  52.                             mylabelzonecode.text = cityzonecodeNnumber; 
  53.                         } 
  54.                     }else { 
  55.                         [self PhoneNumberError]; 
  56.                     } 
  57.                     sqlite3_finalize(stmt4); 
  58.                 } 
  59.             } 
  60.         }else { 
  61.             [self PhoneNumberError]; 
  62.         } 
  63.         sqlite3_finalize(stmt3); 
  64.     } 
  65.      
  66.     sqlite3_close(database); 
  67.      
  68.      
  69.      

上面代码,对移动电话的查询方法

同样我们还有-(void)SelectInfoByCall:(NSString *) callnumber和-(void)SelectInfoByPhoneNumberIsMobile:(NSInteger)PhoneNumberIsMobile

在这里我不做太多的讲解,因为在程序内使用的都是特别基础的语法,我们还可以再继续写下去,比如添加读取最近的10条通话,供用户选择等等等等,程序运行图片我会在周一为大家添加上

责任编辑:张叶青 来源: 开源社区
相关推荐

2016-12-02 19:14:16

数据科学大数据

2010-07-01 09:38:31

jQuery

2009-06-26 15:56:26

2015-10-15 09:33:55

3Dtouch苹果游戏开发

2023-09-14 15:37:11

2011-03-11 15:31:52

数据中心虚拟接入

2010-04-12 16:24:15

Oracle表查询

2010-06-18 13:56:10

SQL Server日

2009-10-09 14:24:27

2009-05-18 10:57:35

.NETString特性

2014-06-17 09:42:05

软件开发软件设计

2009-08-24 09:55:24

C#集成开发环境

2022-07-20 15:10:38

Docker大数据平台

2010-10-26 09:23:03

Web Service

2012-06-12 09:53:14

HTML5

2016-10-14 13:10:35

2009-07-01 09:41:00

无线路由器固件番茄固件

2011-08-10 10:06:54

存储过程SQL Server IP地址归属地查询

2010-07-23 16:03:36

SQL Server存

2022-05-10 08:59:25

IP网络
点赞
收藏

51CTO技术栈公众号