简易电子通讯录,有姓名,电子邮箱,家庭住址,电话四个属性,可以进行修改联系人,查询所有联系人,删除联系人,根据姓名查询联系人,添加联系人,保存联系人到txt文件,退出通讯录。
(我使用的是vs2010版本)
准备工作:
1.在D盘(可以在别的盘,对应的代码要一致)建立一个record.txt文件,自行输入一些联系人信息,结束加上stop,如下所示:
2.在文件的属性页,配置属性,c/c++,预处理器,预处理器定义中修改为 _CRT_SECURE_NO_WARNINGS,如下图:
程序代码
1.头文件以及结构体定义
#include<stdio.h>
#include<string.h>
#define N 100
int i=0;
struct record
{
char name[20];
char email[30];
char homeaddr[60];
char telephone[13];
}records[N];
2.从txt文件中读取人员信息
void Data_Up()
{
FILE*fp;
fp=fopen("d:\\record.txt","at+");
for(i=0;i<10000;i++)
{
fscanf(fp,"%s %s %s %s\n",records[i].name,records[i].email,records[i].homeaddr,records[i].telephone);
if(strcmp(records[i].name,"stop")==0)break;
}
fclose(fp);
}
3.将修改后的联系人信息存入txt文件中
void Data_Save()
{
int j=0;
FILE*fp;
fp=fopen("d:\\record.txt","w+");
for(j=0;j<=i;j++)
{
fprintf(fp,"%s %s %s %s\n",records[j].name,records[j].email,records[j].homeaddr,records[j].telephone);
}
fprintf(fp,"stop");
fclose(fp);
}
4.将所有联系人信息输出
void Data_Show(int n)
{
printf("第%d位联系人的基本信息如下:\n姓名:%s ,电子邮箱:%s ,地址:%s ,电话号码:%s \n",n,records[n].name,records[n].email,records[n].homeaddr,records[n].telephone);
}
5.添加联系人(根据姓名长短排序)
void Add_People(char name[20])
{
int j=0,n=i;
for(j=0;j<=i;j++)
{
if(strcmp(records[j].name,name)>0)break;
}
for(n=i;n>=j;n--)
{
strcpy(records[n+1].name,records[n].name);
strcpy(records[n+1].email,records[n].email);
strcpy(records[n+1].homeaddr,records[n].homeaddr);
strcpy(records[n+1].telephone,records[n].telephone);
}
i++;
strcpy(records[j].name,name);
printf("\n请输入联系人邮件:");
scanf("%s",records[j].email);
printf("\n请输入联系人家庭地址:");
scanf("%s",records[j].homeaddr);
printf("\n请输入联系人电话:");
scanf("%s",records[j].telephone);
printf("添加成功!\n");
}
6.根据姓名搜索联系人
int Search_Name(char namestr[20])
{
int j;
for(j=0;j<=i;j++)
{
if(strcmp(namestr,records[j].name)==0)break;
}
return j;
}
7.修改联系人信息
void Change(char name[20])
{
int n,m;
char string[60];
n=Search_Name(name);
if(n>i)
{
printf("您查找的联系人不存在!\n");
return ;
}
Data_Show(n);
printf("请选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!\n\n");
scanf("%d",&m);
while(m!=5)
{
switch(m)
{
case 1:printf("请输入新的姓名:");
scanf("%s",string);
strcpy(records[n].name,string);break;
case 2:printf("请输入新的邮箱:");
scanf("%s",string);
strcpy(records[n].email,string);break;
case 3:printf("请输入新的家庭地址:");
scanf("%s",string);
strcpy(records[n].homeaddr,string);break;
case 4:printf("请输入新的电话:");
scanf("%s",string);
strcpy(records[n].telephone,string);break;
case 5:return ;
}
printf("请继续选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!\n\n");
scanf("%d",&m);
}
}
8.删除联系人
void DeletePeo()
{
char nametemp[20];
int tp,n;
if(i<0)
{
printf("\n没有删除的记录\n");return ;
}
printf("请输入您要查找的联系人姓名:");
scanf("%s",nametemp);
n=Search_Name(nametemp);
if(n==-1)
{
printf("查找失败!\n");return ;
}
printf("确认要删除吗?确认按1,否则按任意键返回上一级菜单!\n");
scanf("%d",&tp);
if(tp==1)
{
int j;
for(j=n+1;j<=i;j++)
{
strcpy(records[j-1].name,records[j].name);
strcpy(records[j-1].email,records[j].email);
strcpy(records[j-1].homeaddr,records[j].homeaddr);
strcpy(records[j-1].telephone,records[j].telephone);
}
i--;
}
else return;
}
9.主函数
void main()
{
int ch,m,n,tp;
char nametemp[20];
struct record records[N]={0};
Data_Up();
i--;
printf("电子通讯录:\n");
printf("请选择您需要的操作\n");
printf("1->修改;\n2->查看所有联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->退出\n\n");
scanf("%d",&ch);
while(ch!=7)
{
switch(ch)
{
case 1:printf("请输入要修改的联系人姓名:");
scanf("%s",nametemp);
Change(nametemp);break;
case 2:for(m=0;m<=i;m++)Data_Show(m);break;
case 3:DeletePeo();break;
case 4:printf("请输入要查询的联系人姓名:");
scanf("%s",nametemp);
n=Search_Name(nametemp);
if(n>i)printf("没有您要找的联系人!\n");
else Data_Show(n);break;
case 5:printf("请输入待添加的联系人姓名:");
scanf("%s",nametemp);Add_People(nametemp);break;
case 6:getchar();
printf("保存数据吗?确定按键8,否则按任意选择其他操作!\n");
scanf("%d",&tp);if(tp==8)Data_Save();break;
case 7:return ;
}
printf("n1->修改;\n2->查看所有联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->退出\n\n");
scanf("%d",&ch);
}
}