//
// main.m
// 通讯录
//
// Created by zw on 15/8/11.
// Copyright (c) 2015年 zw. All rights reserved.
//
//功能说明:
//add:添加联系人
//del:删除联系人
//change:修改联系人
//find:查找联系人
//sequ:对联系人进行排序
//remove:删除通讯录文件
//show:显示通讯录
//quit:退出程序
//注意:我的排序是专门做的一个功能选择,如果需要排的时候请进行sequ操作
//说明1:为了调试方便,我采用的是命令行的方式来选择操作,而没有用1、2、3、4、5、6选项来进行操作
//说明2:以后做进一步改进时,对代码进行封装
#import <Foundation/Foundation.h>
#import "CZWMethod.h"
int main(int argc,const char * argv[]) {
@autoreleasepool {
NSFileManager* f=[NSFileManagerdefaultManager];
NSFileHandle* file=nil;
NSString* path=@"./person.plist";
NSString* userName=nil;
NSString* userName1=nil;
NSString* userCompany=nil;
NSString* userCompany1=nil;
NSString* userPhone=nil;
NSString* userPhone1=nil;
NSString* userEmail=nil;
NSString* userEmail1=nil;
NSString* user=nil;
NSString* user1=nil;
NSString* filetmp=nil;
NSString* list=nil;
NSArray* listItems=nil;
NSMutableArray* listItems1=nil;
NSMutableData* buff=[[NSMutableDataalloc] init];
char* op=malloc(10);
char* name=malloc(10);
char* company=malloc(20);
char* phone=malloc(20);
char* email=malloc(20);
char* name1=malloc(10);
char* company1=malloc(20);
char* phone1=malloc(20);
char* email1=malloc(20);
memset(op, 0,10);
memset(name, 0,10);
memset(company, 0,20);
memset(phone, 0,20);
memset(email, 0,20);
memset(name1, 0,10);
memset(company1, 0,20);
memset(phone1, 0,20);
memset(email1, 0,20);
char tmp='\0';
int i=0;
int j=0;
NSLog(@"使用方法说明:");
NSLog(@"add:添加联系人");
NSLog(@"del:删除联系人");
NSLog(@"change:修改联系人");
NSLog(@"find:查找联系人");
NSLog(@"sequ:对联系人进行排序");
NSLog(@"remove:删除通讯录文件");
NSLog(@"show:显示通讯录");
NSLog(@"quit:退出程序");
NSLog(@"注意:我的排序是专门做的一个功能选择,如果需要排的时候请进行sequ操作");
NSLog(@"说明1:为了调试方便,我采用的是命令行的方式来选择操作,而没有用1、2、3、4、5、6选项来进行操作!");
NSLog(@"说明2:以后做进一步改进时,对代码进行封装!");
while(1)
{
memset(op, 0,10);
printf("请输入操作方式(add、del、change、find、sequ、remove、show、quit):");
scanf("%s",op);
//用于接收一个多余的回车字符
scanf("%c",&tmp);
//添加联系人
if(0==strcmp(op,"add"))
{
memset(name, 0,10);
memset(company, 0,20);
memset(phone, 0,20);
memset(email, 0,20);
printf("请输入姓名:");
scanf("%s",name);
printf("请输入公司:");
scanf("%s",company);
printf("请输入电话:");
scanf("%s",phone);
printf("请输入mail:");
scanf("%s",email);
userName=[NSStringstringWithCString:name encoding:NSUTF8StringEncoding];
buff=[[NSMutableDataalloc] init];
if(![f fileExistsAtPath:path])
{
[fcreateFileAtPath:path contents:buff attributes:nil];
}
list=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
listItems=[listcomponentsSeparatedByString:@"@"];
//类似下面for代码需要注意长度边界,从文件读出的最后一个元素是建议文件时写入的buff,它才是最后一个元素
for(i=0;i<=listItems.count-1;i=i+4){
while(NSOrderedSame==[userNamecompare:listItems[i]])
{
memset(name, 0,10);
memset(company, 0,20);
memset(phone, 0,20);
memset(email, 0,20);
printf("此人已经存在,请重新输入姓名:");
scanf("%s",name);
printf("请输入公司:");
scanf("%s",company);
printf("请输入电话:");
scanf("%s",phone);
printf("请输入mail:");
scanf("%s",email);
userName=[NSStringstringWithCString:name encoding:NSUTF8StringEncoding];
}
}
if(i==listItems.count+3)
{
buff=[NSMutableDatadataWithBytes:name length:strlen(name)];
[buffappendBytes:"@"length:strlen("@")];
[buffappendBytes:company length:strlen(company)];
[buffappendBytes:"@"length:strlen("@")];
[buffappendBytes:phone length:strlen(phone)];
[buffappendBytes:"@"length:strlen("@")];
[buffappendBytes:email length:strlen(email)];
[buffappendBytes:"@"length:strlen("@")];
file=[NSFileHandlefileHandleForWritingAtPath:path];
if(false==file)
{
NSLog(@"文件打开写失败!");
}else{
[fileseekToEndOfFile];
[filewriteData:buff];
[filecloseFile];
NSLog(@"添加联系人成功!");
}
}
}
//删除联系人
else if(0==strcmp(op,"del"))
{
if(![f fileExistsAtPath:path])
{
NSLog(@"还没有通讯录,请先添加联系人以便建立通讯录!");
}else{
memset(name, 0,10);
memset(company, 0,20);
memset(phone, 0,20);
memset(email, 0,20);
printf("请输入要删除的姓名:");
scanf("%s",name);
userName=[NSStringstringWithCString:name encoding:NSUTF8StringEncoding];
if([f fileExistsAtPath:path])
{
list=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
listItems=[listcomponentsSeparatedByString:@"@"];
//查找看是否存在此人,如果存在此人才进行删除操作
for(i=0;i<=listItems.count-1;i=i+4)
{
if(NSOrderedSame==[userNamecompare:listItems[i]])
{
user=[listItems[i]stringByAppendingFormat:@"@%@@%@@%@@",listItems[i+1],listItems[i+2],listItems[i+3]];
filetmp=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSString* deltmp=[filetmp stringByReplacingOccurrencesOfString:user withString:@""];
NSData* buff1=[deltmp dataUsingEncoding:NSUTF8StringEncoding];
[fremoveItemAtPath:path error:nil];
[fcreateFileAtPath:path contents:buff1 attributes:nil];
NSLog(@"删除联系人成功!");
break;
}
if(i==listItems.count-1 &&NSOrderedSame!=[userName compare:listItems[i]])
{
NSLog(@"对不起,没有找到你要删除的联系人!");
}
}
}else{
NSLog(@"没有通讯录文件,请先添加联系人创建通讯录!");
}
}
}
//修改联系人
else if(0==strcmp(op,"change"))
{
if(![f fileExistsAtPath:path])
{
NSLog(@"还没有通讯录,请先添加联系人以便建立通讯录!");
}else{
memset(name1, 0,10);
memset(company1, 0,20);
memset(phone1, 0,20);
memset(email1,0, 20);
memset(name, 0,10);
memset(company, 0,20);
memset(phone, 0,20);
memset(email, 0,20);
printf("请输入要修改的姓名:");
scanf("%s",name);
userName=[NSStringstringWithCString:name encoding:NSUTF8StringEncoding];
list=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
listItems=[listcomponentsSeparatedByString:@"@"];
//查找通讯录看是否有这样一个联系人
for(j=0;j<=listItems.count-1;j=j+4)
{
if(NSOrderedSame==[userNamecompare:listItems[j]])
{
memset(name1, 0,10);
memset(company1, 0,20);
memset(phone1, 0,20);
memset(email1, 0,20);
printf("请输入修改后的姓名:");
scanf("%s",name1);
printf("请输入修改后的公司:");
scanf("%s",company1);
printf("请输入修改后的电话:");
scanf("%s",phone1);
printf("请输入修改后的mail:");
scanf("%s",email1);
userName1=[NSStringstringWithCString:name1 encoding:NSUTF8StringEncoding];
//如果修改后的人有重名,就进行处理
for(i=0;i<=listItems.count-1;i=i+4){
while(NSOrderedSame==[userName1compare:listItems[i]])
{
printf("此人已经存在,请重新输入姓名:");
scanf("%s",name1);
printf("请输入公司:");
scanf("%s",company1);
printf("请输入电话:");
scanf("%s",phone1);
printf("请输入mail:");
scanf("%s",email1);
userName1=[NSStringstringWithCString:name encoding:NSUTF8StringEncoding];
}
}
if(i==listItems.count+3)
{
user=[listItems[j]stringByAppendingFormat:@"@%@@%@@%@@",listItems[j+1],listItems[j+2],listItems[j+3]];
userName1=[NSStringstringWithCString:name1 encoding:NSUTF8StringEncoding];
userCompany1=[NSStringstringWithCString:company1 encoding:NSUTF8StringEncoding];
userPhone1=[NSStringstringWithCString:phone1 encoding:NSUTF8StringEncoding];
userEmail1=[NSStringstringWithCString:email1 encoding:NSUTF8StringEncoding];
user1=[userName1stringByAppendingFormat:@"@%@@%@@%@@",userCompany1,userPhone1,userEmail1];
filetmp=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
NSString* usertmp=[filetmp stringByReplacingOccurrencesOfString:user withString:user1];
NSData* buff2=[usertmp dataUsingEncoding:NSUTF8StringEncoding];
[fremoveItemAtPath:path error:nil];
[fcreateFileAtPath:path contents:buff2 attributes:nil];
NSLog(@"联系人信息修改成功!");
break;
}
}
if(j==listItems.count-1 &&NSOrderedSame!=[userName compare:listItems[j]])
{
NSLog(@"对不起,没有找到你要修改的联系人!");
}
}
}
}
//查找联系人并显示信息
else if(0==strcmp(op,"find"))
{
if(![f fileExistsAtPath:path])
{
NSLog(@"还没有通讯录,请先添加联系人以便建立通讯录!");
}else{
memset(name, 0,10);
printf("请输入要查找的姓名:");
scanf("%s",name);
userName=[NSStringstringWithCString:name encoding:NSUTF8StringEncoding];
list=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
listItems=[listcomponentsSeparatedByString:@"@"];
for(i=0;i<=listItems.count-1;i=i+4){
if(NSOrderedSame==[userNamecompare:listItems[i]])
{
NSLog(@"姓名:%@公司:%@电话:%@ mail:%@",listItems[i],listItems[i+1],listItems[i+2],listItems[i+3]);
}
}
}
}
//删除通讯录
else if(0==strcmp(op,"remove"))
{
if([f fileExistsAtPath:path])
{
[fremoveItemAtPath:path error:nil];
NSLog(@"成功删除通讯录!");
}else{
NSLog(@"通讯录还不存在,不需要删除通讯录!");
}
}
//对联系人姓名进行排序
else if(0==strcmp(op,"sequ"))
{
list=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
listItems=[listcomponentsSeparatedByString:@"@"];
listItems1=[NSMutableArrayarrayWithArray:listItems];
//对姓名进行排序
for(i=0;i<listItems1.count-5;i=i+4)
{
for(j=i;j<listItems1.count-5;j=j+4)
{
if(NSOrderedDescending==[listItems1[j]compare:listItems1[j+4]])
{
[listItems1exchangeObjectAtIndex:j withObjectAtIndex:j+4];
[listItems1exchangeObjectAtIndex:j+1withObjectAtIndex:j+5];
[listItems1exchangeObjectAtIndex:j+2withObjectAtIndex:j+6];
[listItems1exchangeObjectAtIndex:j+3withObjectAtIndex:j+7];
}
}
}
NSLog(@"排序成功!");
//用数组进入文件后,它是自动生成相应的xml文件
//[listItems1 writeToFile:path atomically:YES];
buff=[[NSMutableDataalloc] init];
for(i=0;i<=listItems1.count-2;i++)
{
//[listItems1[i] cStringUsingEncoding:NSUTF8StringEncoding];
[buff appendBytes:[listItems1[i]cStringUsingEncoding:NSUTF8StringEncoding]length:strlen([listItems1[i]cStringUsingEncoding:NSUTF8StringEncoding])];
[buffappendBytes:@"@"length:strlen("@")];
}
[fremoveItemAtPath:path error:nil];
[fcreateFileAtPath:path contents:buff attributes:nil];
}
//显示联系人
else if(0==strcmp(op,"show"))
{
printf("通讯录显示如下:\n");
if(![f fileExistsAtPath:path])
{
NSLog(@"还没有通讯录,请先添加联系人以便建立通讯录!");
}else{
list=[NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
//NSLog(@"%@",list);
listItems=[listcomponentsSeparatedByString:@"@"];
for(i=0;i<listItems.count-1;i=i+4){
NSLog(@"姓名:%@公司:%@电话:%@ mail:%@",listItems[i],listItems[i+1],listItems[i+2],listItems[i+3]);
}
//NSLog(@"长度:%lu",listItems.count);
}
}
//退出程序
else if(0==strcmp(op,"quit"))
{
NSLog(@"程序退出!再见!");
free(op);
free(name);
free(company);
free(phone);
free(email);
free(name1);
free(company1);
free(phone1);
free(email1);
return 0;
}
//操作之外的情况
else{
printf("请从(add、del、change、find、sequ、remove、show、quit)中选择你需要的操作!\n");
}
}
}
return 0;
}