当前位置:威尼斯 > 威尼斯人登录网站 > 本程序主要利用C语言中链表和文件的相关知识,

本程序主要利用C语言中链表和文件的相关知识,

文章作者:威尼斯人登录网站 上传时间:2019-09-29

本程序主要利用C语言中链表和文件的相关知识,实现了能够增删改查操作的简易通讯录程序。根目录下的ctt文件是存放通讯录信息的文件,可以直接用文本编辑器打开。但是不要改动固定的格式。代码中,多处出现重复的条件判断,导致代码重复。不过,有机会的话会进行修改。

最近在做iOS系统通讯录备份到服务器,并且可以从服务器中下载备份文件恢复到手机的功能,部分实现细节记录如下。

最近在做iOS系统通讯录备份到服务器,并且可以从服务器中下载备份文件恢复到手机的功能,部分实现细节记录如下。

部分代码如下:

将iphone系统通讯录生成.vcf文件

将iphone系统通讯录生成.vcf文件

/** * @Desc:这是一个实现通讯录的C源代码 * @Author:乌鸟 * @Version:0.1 * @URL:http://huxuemail.web-104.com * @QQ交流群:235173087 */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h>//这里定义的是联合体中字符数组的长度。#define C_NAME_SIZE 10#define C_SEX_SIZE 3#define C_AGE_SIZE 5#define C_PHONE_SIZE 12#define C_QQ_SIZE 12#define C_PROVINCE_SIZE 20#define C_CITY_SIZE 20#define C_COMMENT_SIZE 100//亲,很明显,这是函数说明!void insRecord();//插入一条记录的实现void inputs(char *prompt,char *info,int count);//插入一条记录时,逐行输入信息的实现struct addr *linkNode(struct addr *i,struct addr *top);//输入完一条记录后,将当前的缓冲节点连接到链表中的实现struct addr *find(char *name);//查找出指定的节点的实现void seaRecord();//查找记录的实现void delRecord();//删除记录的实现int selectMenu();//主菜单的实现void disRecord(addr *info);//显示一条记录的实现void disRecords();//显示全部记录的实现void getInfo(); //根据ctt文本中的记录,逐条返回数据项,并实现将信息插入链表,即程序启动的初始化状态的实现void initInputs(char *initInfo[]);//输入完一条记录后,将当前的缓冲节点连接到链表中的实现void saveRecords();//将链表中的信息全部写到磁盘文件中的实现void saveToFile(addr *info);//将每条信息记录放到新建的文件中的实现void editRecord();//修改记录的实现void about();//显示作者信息的实现//全局的东东//联合体struct addr{    char c_name[C_NAME_SIZE];    char c_sex[C_SEX_SIZE];    char c_age[C_AGE_SIZE];    char c_phone[20];    char c_qq[C_QQ_SIZE];    char c_province[C_PROVINCE_SIZE];    char c_city[C_CITY_SIZE];    char c_comment[C_COMMENT_SIZE];    struct addr *next;//pointer to next entry ^^};//全局指针变量,info存储当前缓冲的节点、start和last存储最后一个节点、head存储头节点struct addr *info,*start,*last,*head;//初始化用,与head有关的变量static int n = 0;
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef contacts = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFDataRef vcards = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contacts);
NSString *vcardString = [[NSString alloc] initWithData:(__bridge NSData *)vcards encoding:NSUTF8StringEncoding];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *folderPath = [paths objectAtIndex:0];
NSString *filePath = [folderPath stringByAppendingPathComponent:@"contacts.vcf"];

[vcardString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef contacts = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFDataRef vcards = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contacts);
NSString *vcardString = [[NSString alloc] initWithData:(__bridge NSData *)vcards encoding:NSUTF8StringEncoding];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *folderPath = [paths objectAtIndex:0];
NSString *filePath = [folderPath stringByAppendingPathComponent:@"contacts.vcf"];

[vcardString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

下载:源代码下载地址

运行后系统沙盒Document目录下会生成contacts.vcf文件,上传至服务器即可。

运行后系统沙盒Document目录下会生成contacts.vcf文件,上传至服务器即可。

通讯录恢复:

通讯录恢复:

从服务器下载contents.vcf文件,用系统通讯录程序打开即可恢复至手机。或者代码解析.vcf文件更新通讯录即可。

从服务器下载contents.vcf文件,用系统通讯录程序打开即可恢复至手机。或者代码解析.vcf文件更新通讯录即可。

 NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
 NSString *plistPath = [paths objectAtIndex:0];
 NSString *filePath =[plistPath stringByAppendingPathComponent:@"contacts.vcf"];
 CFDataRef vCardData = (CFDataRef)[filePath dataUsingEncoding:NSUTF8StringEncoding]; 
 ABAddressBookRef book = ABAddressBookCreate();
 ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book);
 CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
 for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
     ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
     ABAddressBookAddRecord(book, person, NULL);
     CFRelease(person);
 }
 CFRelease(vCardPeople);
 CFRelease(defaultSource);
 ABAddressBookSave(book, NULL);
 CFRelease(book);
 NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
 NSString *plistPath = [paths objectAtIndex:0];
 NSString *filePath =[plistPath stringByAppendingPathComponent:@"contacts.vcf"];
 CFDataRef vCardData = (CFDataRef)[filePath dataUsingEncoding:NSUTF8StringEncoding]; 
 ABAddressBookRef book = ABAddressBookCreate();
 ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book);
 CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
 for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
     ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
     ABAddressBookAddRecord(book, person, NULL);
     CFRelease(person);
 }
 CFRelease(vCardPeople);
 CFRelease(defaultSource);
 ABAddressBookSave(book, NULL);
 CFRelease(book);

注意:ABPersonCreateVCardRepresentationWithPeople只适用ios5.0以上系统。

注意:ABPersonCreateVCardRepresentationWithPeople只适用ios5.0以上系统。

有什么问题可以留言问我哟

本文由威尼斯发布于威尼斯人登录网站,转载请注明出处:本程序主要利用C语言中链表和文件的相关知识,

关键词: