本程序是我初学C语言时的结课作业,获得了优秀评分。
功能
通讯录的添加联系人、删除指定联系人、修改指定联系人、查找指定联系人、浏览所有联系人、将联系人信息存储到文件中。
菜单如下
源码如下(先自己建立一个工程,复制以下代码即可,另外,需在自己的工程目录里面建立一个名为:通讯录.txt 的文件)
如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100 //最多只能存100条信息
typedef struct Person
{
char name[100];
int age;
char phone[100];
char address[100];
}Person;//定义结构体,包含的个人信息
typedef struct MailList
{
Person data[N];//通讯录容量
int count;//计数
}MailList;//定义结构体,包含计数和通讯录容量大小
void InitiBook(MailList *p);//初始化通讯录
void AddContact(MailList *p);//添加联系人
void DeleteContact(MailList *p);//删除联系人
void SeekContact(MailList *p);//查找联系人
void ModifyContact(MailList *p);//修改联系人
void ShowContact(MailList *p);//浏览全部联系人
void SaveContact(MailList *p);//存储所有联系人信息到文件中
void LoadContact(MailList *p);//把文件中已有的联系人信息加载到通讯录中
int main()
{
int choice;
MailList Book;//定义结构体
InitiBook(&Book);//初始化通讯录
while(1)
{
printf("******************************************\n");
printf("****** 欢迎来到通讯录管理系统 ******\n");
printf("****** 0.退出系统 ******\n");
printf("****** 1.添加单个联系人信息 ******\n");
printf("****** 2.删除指定联系人信息 ******\n");
printf("****** 3.查找指定联系人信息 ******\n");
printf("****** 4.修改指定联系人信息 ******\n");
printf("****** 5.浏览所有联系人信息 ******\n");
printf("****** 6.存储所有信息到文件 ******\n");
printf("******************************************\n");
printf("请选择0~6:");
scanf("%d",&choice);
if(choice==0)
{
SaveContact(&Book);//以防万一,在退出前存储联系人信息到文件中
printf("感谢您的使用!\n");
break;
}
if(choice>6 || choice<0)
{
printf("输入有误,请重新输入!\n");
printf("请选择0~6:");
scanf("%d",&choice);
}
switch(choice)
{
case 1:
AddContact(&Book);
system("pause"); //按任意键继续
system("cls") ;//清屏函数
break;
case 2:
DeleteContact(&Book);
system("pause"); //按任意键继续
system("cls") ;//清屏函数
break;
case 3:
SeekContact(&Book);
system("pause"); //按任意键继续
system("cls") ;//清屏函数
break;
case 4:
ModifyContact(&Book);
system("pause"); //按任意键继续
system("cls") ;//清屏函数
break;
case 5:
ShowContact(&Book);
system("pause"); //按任意键继续
system("cls") ;//清屏函数
break;
case 6:
SaveContact(&Book);
printf("存储成功!\n");
system("pause"); //按任意键继续
system("cls") ;//清屏函数
break;
default:
printf("输入有误!\n");
break;
}
}
return 0;
}
void InitiBook(MailList *p)//初始化通讯录
{
p->count=0;
LoadContact(p);//调用加载函数,从文件中加载联系人信息
}
void AddContact(MailList *p)//添加联系人信息
{
if((p->count)>N)//判断容量是否已满
{
printf("容量已满,无法添加!\n");
}
else
{
printf("请输入姓名:");
scanf("%s",&p->data[p->count].name);
printf("请输入年龄:");
scanf("%d",&p->data[p->count].age);
printf("请输入电话:");
scanf("%s",&p->data[p->count].phone);
printf("请输入地址:");
scanf("%s",&p->data[p->count].address);
p->count++;//添加成功,计数加一
printf("添加成功!\n");
}
}
void DeleteContact(MailList *p)//删除联系人信息
{
int i,judge;
char name[100];
printf("请输入需要删除的人姓名:");
scanf("%s",&name);
for(i=0;i<p->count;i++)
{
if(strcmp(name,p->data[i].name)==0)
{
p->data[i]=p->data[i+1];//后一个人的信息覆盖前一个人的信息
judge=1;
}
}
if(judge==1)
{
printf("删除成功!\n");
p->count--;//删除成功后,计数减一
}
else
{
printf("该联系人不存在,无法删除!\n");
}
}
void SeekContact(MailList *p)//查找联系人信息
{
int i,choice,judge=0;
int age;
char name[100];
char phone[20];
char address[100];
printf("按哪项查找?\n");
printf("1、姓名 2、年龄 3、电话 4、地址\n");
printf("请选择1~4:");
scanf("%d",&choice);
if(choice==1)
{
printf("请输入姓名:");
scanf("%s",&name);
for(i=0;i<p->count;i++)
{
if(strcmp(name,p->data[i].name)==0)
{
printf("查找成功,该联系人信息为:\n");
printf("姓名:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
judge=1;
}
}
if(judge!=1)
{
printf("该联系人不存在!\n");
}
}
else if(choice==2)
{
printf("请输入年龄:");
scanf("%d",&age);
for(i=0;i<p->count;i++)
{
if(age==p->data[i].age)
{
printf("查找成功,该联系人信息为:\n");
printf("姓名:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
judge=1;
}
}
if(judge!=1)
{
printf("该联系人不存在!\n");
}
}
else if(choice==3)
{
printf("请输入电话:");
scanf("%s",&phone);
for(i=0;i<p->count;i++)
{
if(strcmp(phone, p->data[i].phone)==0)
{
printf("查找成功,该联系人信息为:\n");
printf("姓名:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
judge=1;
}
}
if(judge!=1)
{
printf("该联系人不存在!\n");
}
}
else if(choice==4)
{
printf("请输入地址:");
scanf("%s",&address);
for(i=0;i<p->count;i++)
{
if(strcmp(address, p->data[i].address)==0)
{
printf("查找成功,该联系人信息为:\n");
printf("姓名:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
judge=1;
}
}
if(judge!=1)
{
printf("该联系人不存在!\n");
}
}
else
{
printf("输入有误!\n");
}
}
void ModifyContact(MailList *p)//修改联系人信息
{
int i,judge=0,judge1=0;
int choice;
char name[100];
printf("请输入你要修改的联系人的姓名:");
scanf("%s",&name);
for(i=0;i<p->count;i++)
{
if(strcmp(name,p->data[i].name)==0)
{
printf("该联系人信息为:\n");
printf("名字:%s\t年龄:%d\t电话:%s\t地址:%s\n",p->data[i].name,p->data[i].age,p->data[i].phone,p->data[i].address);
printf("你需要修改该联系人什么信息?\n");
printf("1、名字\n");
printf("2、年龄\n");
printf("3、电话\n");
printf("4、地址\n");
printf("请选择1~4:");
scanf("%d",&choice);
while(1)
{
switch(choice)
{
case 1:
printf("请输入新名字:");
scanf("%s",&p->data[i].name);
printf("修改成功!\n");
judge1=1;
break;
case 2:
printf("请输入新年龄:");
scanf("%d",&p->data[i].age);
printf("修改成功!\n");
judge1=1;
break;
case 3:
printf("请输入新电话:");
scanf("%s",&p->data[i].phone);
printf("修改成功!\n");
judge1=1;
break;
case 4:
printf("请输入新地址:");
scanf("%s",&p->data[i].address);
printf("修改成功!\n");
judge1=1;
break;
default:
printf("输入有误,请选择1~4:");
judge1=2;
break;
}
if(judge1==2)
{
scanf("%d",&choice);
}
else if(judge1==1)
{
break;
}
}
judge=1;
}
if(1==judge)
{
break;
}
}
if(1!=judge)
{
printf("此人的信息不存在,无法修改\n");
}
}
void ShowContact(MailList *p)//浏览全部联系人信息
{
int i;
if(p->count>0)
{
printf("全部联系人信息如下:\n");
for(i=0;i<p->count;i++)
{
printf("名字:%s\t",p->data[i].name);
printf("年龄:%d\t",p->data[i].age);
printf("电话:%s\t",p->data[i].phone);
printf("地址:%s\n",p->data[i].address);
}
}
else
{
printf("通讯录空空如也!\n");
}
}
void SaveContact(MailList *p)//存储所有联系人信息到文件中
{
FILE *fp;
int i;
if((fp=fopen("通讯录.txt","wb"))==NULL)
{
printf("cannot open this file!\n");
exit(0);
}
for(i=0;i<p->count;i++)
{
fwrite(&(p->data[i]),sizeof(Person),1,fp);
}
fclose(fp);
}
void LoadContact(MailList *p)//把文件已有的联系人信息加载到通讯录中
{
int i;
FILE *fp1;
Person templd = {0};
if((fp1=fopen("通讯录.txt","rb"))==NULL)
{
printf("cannot open this file!\n");
exit(0);
}
while(fread(&templd,sizeof(Person),1,fp1))
{
p->data[p->count] = templd;
p->count++;
}
fclose(fp1);
/*
if(p->count>0)
{
printf("全部联系人信息如下:\n");
for(i=0;i<p->count;i++)
{
printf("名字:%s\t",p->data[i].name);
printf("年龄:%d\t",p->data[i].age);
printf("电话:%s\t",p->data[i].phone);
printf("地址:%s\n",p->data[i].address);
}
}
else
{
printf("通讯录空空如也!\n");
}*/
}