随着科技的高速发展,智能手机开始普及,在这个互联网高速发展的世界里,人们需要对你所熟悉的亲朋好友的联系方式记录,因此,通讯录系统可以极大方便人们查找和更新联系人信息
具体代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#define Phone "contact.txt"
#define Phone_Backup "contact_backup.txt"
//通讯录管理系统
//1.主页单
//2.查找联系人
//3.添加联系人
//4.修改联系人
//5.删除联系人
//6.退出系统
/**结构体**/
//定义一个联系人结构体
struct contact {
char name[50];//姓名
char phone[20];//电话
};
/*函数声明*/
void write();//文件保存联系人
void menu();//主菜单
void fnd();//查找联系人
void add();// 添加联系人
void modify();//修改联系人
void del();//删除联系人
struct contact contacts[1000];//定义结构体数组
int a = 0;//联系人数量
//主菜单
void menu(){
printf(" 个人通讯录管理系统\n");
printf(" 1.查找联系人\n");
printf(" 2.添加联系人\n");
printf(" 3.修改联系人\n");
printf(" 4.删除联系人\n");
printf(" 5.退出\n");
printf(" 请选择(1-5):");
}
//添加联系人
void add() {
struct contact con;
printf("请输入联系人:");
scanf("%s", con.name);
printf("请输入联系人手机号:");
scanf("%s", con.phone);
FILE* fp;
if ((fp = fopen(Phone, "ab+")) == NULL) fp = fopen(Phone, "w");
if (fwrite(&con, sizeof(struct contact), 1, fp) == 1) {
printf("添加成功\n");
a++;//更新联系人数量
}
system("pause");
fclose(fp);
}
//查找联系人
void search() {
struct contact con;
printf("请输入要查找的联系人:");
char temp_name[50];
scanf("%s", temp_name);
FILE* fp;
fp = fopen(Phone, "rb");
while (fread(&con, sizeof(struct contact), 1, fp) == 1)
{
if (strcmp(con.name, temp_name) == 0) {
printf("%s%s%s%s%s", "联系人姓名:", con.name,"\n联系人电话:",con.phone,"\n");
}
}
if(strcmp(con.name, temp_name) != 0){
printf("未找到该联系人\n");
}
system("pause");
fclose(fp);
}
//修改联系人
void modify() {
struct contact con;
printf("请输入要修改的联系人:");
char temp_name[50];
char temp_Phone[20];
scanf("%s", temp_name);
printf("请输入要修改的联系人电话:");
scanf("%s", temp_Phone);
FILE* fp;
FILE* new_fp;
if ((new_fp = fopen(Phone_Backup, "ab+")) == NULL) new_fp = fopen(Phone_Backup, "w");
fp = fopen(Phone, "rb");
while (fread(&con, sizeof(struct contact), 1, fp) == 1)
{
if (strcmp(con.name, temp_name) == 0) {
strcpy(con.phone, temp_Phone);
}
fwrite(&con, sizeof(struct contact), 1, new_fp);
}
fclose(fp);
fclose(new_fp);
if (remove(Phone) == 0) {
if (rename(Phone_Backup, "contact.txt") == 0) printf("修改成功\n");
else perror("error:");
}
else perror("错误:");
system("pause");
}
//写入文件
void write() {
//打开文件
FILE* fp;
if ((fp = fopen("contact.txt", "ab+")) == 0) {
fp = fopen("contact.txt", "wb");
}
struct contact con;
if (fwrite(&con, sizeof(struct contact),1, fp) == 0){
printf("写入成功");
}
fclose(fp);
return;
}
//删除联系人
void del(){
FILE *fp;
char name[20];
char ch[2];
int a=0;
if((fp=fopen(Phone,"r+"))==NULL) //contacts.txt文件不存在
{
printf("文件不存在!\n");
return;
}
while(!feof(fp)) if(fread(&contacts[a],sizeof(struct contact),1,fp)==1) a++;
fclose(fp);
if(a==0)
{
printf("文件中没有记录!\n"); //data.txt文件存在,但里面没有内容
return;
}
printf("请输入要删除的联系人的名字:\n");
scanf("%s",name);
for(int i=0;i<a;i++){
if(strcmp(contacts[i].name,name)==0){
printf("找到了这条记录,是否删除?(y/n):\n");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
{
for(int j=i;j<a;j++)
contacts[j]=contacts[j+1];/*将后一个记录移到前一个记录的位置*/
a--;/*记录的总个数减1*/
if((fp=fopen(Phone,"wb"))==NULL)
{
printf("文件不存在\n");
return;
}
for(int j=0;j<a;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
if(fwrite(&contacts[j] ,sizeof(struct contact),1,fp)!=1)
{
printf("can not save!\n");
getch();
}
fclose(fp);
printf("删除成功!\n");
}else{
printf("找到了记录,选择不删除!");
}
break;
}
}
}
//主函数
int main(){
int code;
printf("请输入登录密码:");
scanf("%d",&code);
while(code!=123456){
printf("密码错误,请重新输入密码!\n");
printf("请重新输入密码:");
scanf("%d",&code);
}
system("color f0\n");//白底黑字
while(1){
system("cls");
menu();
int n;
printf("请选择:");
scanf("%d", &n);
switch(n){
case 1:
search();
break;
case 2:
add();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:return 0;
break;
default:
break;
}
//system("pause");
}
return 0;
}
注意事项:
1.利用结构体数组保存数据
2.while循环可以不用写,保存数据时可以用到文件存储,这时可以加上while用于读取文件