//添加联系人
/*
思路:
1)提示用户输入联系人姓名
2)接收联系人
3)提示用户输入电话号码
4)接收电话号码
5)确认添加
6)联系人个数+1
7)把联系人信息写入到文件中
*/
void doAdd(){
printf("你选择的是添加联系人,请按提示操作:\n");
printf("请输入联系人姓名:(*主要联系人姓名中间不能有空格)\n");
scanf("%s",contacts[totalContactCount].name);
printf("请输入联系人电话号码:(*主要联系人电话号码中间不能有空格)\n");
scanf("%s",contacts[totalContactCount].telNum);
int flag;
printf("您确认要添加数据吗? 1.确认 0.取消\n");
scanf("%d",&flag);
if (flag) {
totalContactCount++;
writeFile();
}
}
//删除联系人
/*
思路:
1、提示用户输入一个联系人编号
2、判断编号是否合法,编号不能大于联系人个数
3、提示用户再次确认删除
4、开始删除数组元素
1)删除的元素正好是数组的最后一个元素
只需让联系人个数-1
2) 如果删除的元素不是数组的最后一个元素
联系人需要移动
联系人个数-1
5、同步到更新文件中
*/
void doDelete(){
printf("你选择的是删除联系人,请按提示操作:\n");
doList();
int no;
printf("请输入要删除的联系人的编号:\n");
scanf("%d",&no);
if (validateInput(no, 1, totalContactCount)) {
return;
}
int flag ;
printf("删除联系人后,数据将无法恢复,您确认要删除吗?1.确认 0.取消\n");
scanf("%d",&flag);
if (flag) {
if (no == totalContactCount) {
totalContactCount--;
}else{
for (int i=no; i<totalContactCount; i++) {
contacts[i-1]=contacts[i];
}
totalContactCount--;
}
writeFile();
}
}
//修改联系人
/*
思路:
1、提示用户输入修改的信息编号
2、验证编号是否合法
3、输入新的用户名和新的电话号码
4、让用户再次确认修改
5、更新数组信息
6、写入到文件中
*/
void doUpdate(){
printf("你选择的是修改联系人,请按提示操作:\n");
doList();//列出所有的联系人
int no;
printf("请输入要修改的联系人的编号:\n");
scanf("%d",&no);
if (validateInput(no, 1, totalContactCount)) {
return;
}
char name1[NAMELEN];
char tel[NUMLEN];
printf("请输入联系人新的姓名:(*主要联系人姓名中间不能有空格)\n");
scanf("%s",name1);
printf("请输入联系人新的电话号码:(*主要联系人电话号码中间不能有空格)\n");
scanf("%s",tel);
int flag;
printf("确认后,信息将永久修改,您确认修改吗? 1.确认 0.取消\n");
scanf("%d",&flag);
if (flag) {
strcpy(contacts[no-1].name, name1);
strcpy(contacts[no-1].telNum, tel);
//更新到文件中
writeFile();
}
}
//查看所有联系人
/*
思路:
前提:系统已经完成了初始化(如果文件存在则读取文件中的所以数据)
1、首先做一个判断
totalContactCount == 0 // 表示没有联系人
2、如果不等于0
开始遍历,并且输出联系人的信息
*/
void doList(){
printf("你选择的是查看所有联系人,联系人数据如下:\n");
//判断是否为空
if(totalContactCount == 0){
printf("您的通讯录还没有小伙伴~请添加小火伴!\n");
}else{
//遍历格式
printf("编号\t 姓名\t 电话\t \n");
//遍历联系人数组
for (int i=0; i<totalContactCount; i++) {
printf("%d\t %s\t %s\t \n",i+1,contacts[i].name,contacts[i].telNum);
}
}
}
//搜索联系人
/*
思路:
1、提示用户输入要搜索的联系人姓名
2、按照姓名进行查找(遍历)
1)输入的姓名和contacts[i].name进行比较
2)搜索不到
遍历一遍 都没有这个名称 提示查找不到
3、
4、
*/
void doSerchByName(){
printf("你选择的是搜索联系人,请按提示操作:\n");
char name[NAMELEN];
printf("请输入要查找的联系人:\n");
scanf("%s",name);
int i;
for ( i=0; i<totalContactCount; i++) {
if (strcmp(name, contacts[i].name)==0) {
printf("您搜索的联系人 %s 的电话号码是:%s\n",name,contacts[i].name);
break;
}
}
if (i==totalContactCount) {
printf("对不起,查无此人!\n");
}
}
//通讯录初始化
/*
*/
void init(){
FILE *fp = fopen(filePath,"r");
if (fp!=NULL) {
fread(&totalContactCount, sizeof(totalContactCount),1,fp);
for (int i=0; i<totalContactCount; i++) {
fread(&contacts[i], sizeof(Person), 1, fp);
}
}else{
fp = fopen(filePath,"wb");
fwrite(&totalContactCount, sizeof(totalContactCount),1,fp);
printf("通讯录文件创建成功!");
}
//关闭指针文件
fclose(fp);
}
void writeFile(){
FILE *fp = fopen(filePath, "wb");
if (fp!=NULL) {
fwrite(&totalContactCount, sizeof(totalContactCount), 1, fp);
}
for (int i=0; i<totalContactCount; i++) {
fwrite(&contacts[i], sizeof(Person), 1, fp);
}
printf("写文件数据更新成功!\n");
//关闭指针文件
fclose(fp);
} |
|