中易网

c语言通讯录编写

答案:1  悬赏:30  
解决时间 2021-01-12 19:11
c语言通讯录编写
最佳答案
#include
#include
#include
#include //包含system函数头文件
#define LEN sizeof(struct student)
struct student
{
char num[20];//ID号码
char name[100];//用户姓名
char phone[20];//电话号码
char home[100];//通讯地址
char birthday[20];//出生日期
struct student *next;
};
void face(void)//功能选择面板
{
printf("********************************************************************");
printf("\t\t\t\t☆★☆★☆★~_~~_~~_~☆★☆★☆★\n");
printf("\n\t\t\t☆★欢迎使用阿冬子通讯录☆★");
printf("\n\n\t☆★选择你需要操作的功能:☆★(现无记录,建议先填加记录)★☆\n");
printf("\n");
printf("\t\t\t1.【增加通讯录信息〗\n");
printf("\t\t\t2.〖显示通讯录中所有记录】\n");
printf("\t\t\t3.【删除需要删除的信息〗\n");
printf("\t\t\t4.〖以名字查询所需的信息】\n");
printf("\t\t\t5.【保存通讯录中的所有记录到指定文件中〗\n");
printf("\t\t\t6.〖退出不保存!!】\n");
printf("\n");
printf("\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★");
printf("\n\n********************************************************************\n\n");
}
void print(struct student *head)
{
struct student *p;
p=head;
system("CLS");//调用DOS命令CLS能够清屏
printf("*************************************************************\n");
printf("==================== → 用户信息记录表 ← ===================\n");
printf("*************************************************************\n");
if(head!=NULL)
do
{
printf("联系人ID号码:%s\n",p->num);
printf("联系人姓名:%s\n",p->name);
printf("联系人电话号码:%s\n",p->phone);
printf("学生地址:%s\n",p->home);
printf("联系人出生日期:%s\n",p->birthday);
printf("********************************************************\n");
p=p->next;
}while(p!=NULL);
else
{
printf("对不起!!没有任何联系人记录!!\n\n");
printf("=============================================================\n");
}
}
//增添电子通讯录中的内容,即创建连表过程
struct student *append(struct student *head)
{
struct student *p0=NULL,*p1,*p2;//p0为要插入的新节点
p1=head;
p2=head;
system("CLS");
printf("\n\n***********************************************************\n");
printf("\t\t你能在此目录下创建并添加联系人信息");
printf("\n***********************************************************\n");
p0=(struct student *)malloc(LEN);
printf("请输入联系人ID号码:");
gets(p0->num);
printf("请输入联系人姓名:");
gets(p0->name);
printf("请输入联系人电话号码:");
gets(p0->phone);
printf("请输入联系人地址:");
gets(p0->home);
printf("请输入联系人出生日期:");
gets(p0->birthday);
//对插入的节点排序,按姓名的拼音顺序
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL))
{p2=p1;p1=p1->next;}
if((strcmp(p0->name,p1->name))<=0)
{
if(head==p1)
head=p0;
else
p2->next=p0;
p0->next=p1;
}
else
{p1->next=p0;p0->next=NULL;}

printf("恭喜你!!成功添加了联系人信息!!");
printf("\n************************************************************\n");
printf("\n\n");

}
return(head);

}

//电子通讯录的维护(删除),通过输入联系人ID号码删除联系人数据
struct student *del(struct student *head)
{
struct student *p1,*p2;
char num[12];
system("CLS");
printf("\n\n************************************************************\n");
printf("================= → 用户信息记录删除功能 ← ===============\n");
printf("************************************************************\n");
printf("输入要删除的联系人ID号码:");
gets(num);
p1=head;
if (head==NULL)
{
printf("很抱歉!!没有任何联系人纪录!!\n");
printf("\n*******************************************************\n");
return(head);
}
while(p1!=NULL)
{
if(strcmp(p1->num,num)==0)
{
if(p1==head)
head=p1->next;
else p2->next=p1->next;
free(p1);
printf("删除记录成功!!\n");
return(head);
}
p2=p1;
p1=p1->next;
}
printf("对不起!!没有要删除的联系人纪录!!\n");
return(head);
}

//电子通讯录的查找,关键字为用户姓名;
void search(struct student *head)
{
struct student *p1,*p2;
char name[20];
p1=head;
p2=p1;
system("CLS");
printf("\n**************************************************************\n");
printf("================ → 用户信息记录查询功能 ← ==================\n");
printf("**************************************************************\n");
printf("输入要查找联系人的姓名:");
gets(name);
while(p1!=NULL)
{
if(strcmp(p1->name,name)==0)
{
printf("联系人ID号码:");
puts(p1->num);
printf("联系人姓名:");
puts(p1->name);
printf("联系人电话号码:");
puts(p1->phone);
printf("联系人地址:");
puts(p1->home);
printf("联系人出生日期:");
puts(p1->birthday);
printf("\n=============================================================\n");
break;
}
p2=p1;
p1=p1->next;
}
if(p1==NULL)
printf("对不起!!没有该联系人的纪录!!\n");

}
//电子通讯录的记录存盘操作,使用文件指针;
void save(struct student *head)
{
FILE *fp,*fp1;
struct student *p;
p=head;
fp=fopen("record.txt","w");
fp1=fopen("record1.txt","w");
fprintf(fp1,"=============== → 用户信息记录表 ← =================\n");

while(p!=NULL)
{
//首先把数据保存在record.txt中,这是提供给load函数用的数据
//fprintf(fp," %s %s %s %s %s %s",p->num,p->name,p->phone,p->email,p->home,p->birthday);
//然后把数据保存在record1.txt中,这是能提供直接查询看的,有比较友好的画面
fprintf(fp1,"====================================================\n");
fprintf(fp1,"联系人ID号码:%s\n",p->num);
fprintf(fp1,"联系人姓名:%s\n",p->name);
fprintf(fp1,"联系人电话:%s\n",p->phone);
fprintf(fp1,"联系人家庭地址:%s\n",p->home);
fprintf(fp1,"联系人出生日期:%s\n",p->birthday);
p=p->next;
}
fprintf(fp1,"*************************************************************\n");
fclose(fp1);
fclose(fp);
printf("\n\n恭喜你!!成功储存,你能在record1.txt找到相应纪录\n");
printf("**************************************************************\n");
printf("PRESS ANY KEY TO EXIT.\n\n");
getchar();
exit(1);
}
//电子通讯录的记录读盘操作,使用文件指针;
struct student *load(void)
{
FILE *fp;
struct student *head=NULL,*p1=NULL,*p2=NULL;
char c;
int i;
fp=fopen("record.txt","r");
for(i=1;(c=fgetc(fp))!=-1;i++)
{
p1=(struct student *)malloc(LEN);
//fscanf(fp,"%s %s %s %s %s %s",p1->num,p1->name,p1->phone,p1->email,p1->home,p1->birthday);
if(i==1)
{head=p1;p2=p1;}
else
{p2->next=p1;p2=p1;}
}
if(p1==NULL)
{fclose(fp);return(head);}
p2->next=NULL;
fclose(fp);
return(head);
}

main()
{
FILE *fp1,*fp2;
int c;//功能选择需要的号码
system("cls");
system("color2f");
system("cls");
struct student *head=NULL;
if ((fp1=fopen("record.txt","r"))==NULL)
{
fp2=fopen("record.txt","w");//如果不存在record.txt就创建一个
fclose(fp2);
}
head=load();
while(1)
{
face();
printf("选择你需要操作的功能号码:");
scanf("%d",&c);
getchar();
switch(c)
{
case 1:head=append(head);break;
case 2:print(head);break;
case 3:head=del(head);break;
case 4:search(head);break;
case 5:save(head);break;
case 6:exit(0);break;
default :printf("Enter error!!\n");
}
//printf("*****************\n");
printf("◇◆请按ENTER返回功能操作菜单◇◆\n");
//printf("*****************\n");
getchar();
system("CLS");

}

}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
用心之至是什么意思
帮我想个游戏名字 球球大作战 霸气 搞笑的
一次转身,一场烟火,再没有回不了的青春永驻
听说柿子和螃蟹不能一起吃,吃了有什么坏处
如何在时间轴中添加行为?
公司不让我加班以各种理由把我开除怎久办?
那个笔记本可以输出4k的视频,外接4k显示器
只想知道你有没我爱过我
淘宝的蚂蚁花呗我的还款日是每月的九号,如果
去面试时,考官问你还有什么问题时,该怎么回
按1:1比例录取是什么意思?2:3呢?
博爱县民族育才学校地址在什么地方,我要处理
一个联通的一个TP LINK的 怎么设置
太阳你是粉刷匠吗
如果一个男人每天都和你聊天,但是聊天内容却
推荐资讯
中国电信(东瀛路营业厅)地址在哪,我要去那里
浙江嘉兴这城市好吗?
暗棕色是什么颜色,亲们求图片
1806Makeupstudio地址有知道的么?有点事想过
龙木阁认为怎么样,有什么优势吗
求PS4蝙蝠侠阿甘骑士dlc蝙蝠女下载链接
60千克除以3等于什么
东芝l600-k01 怎么还原系统?在线等。
这个手拿图片怎么p的?
C:\Users\King\AppData\Roam
斯威特洗衣鞋包奢品国际5H养护馆地址在哪,我
能用NaOH溶液分离的离子是() A.Cr3+和Al3+ B.
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?