大一下第一周实训,C语言程序设计,在众多标题中选了一个我能写出来的,通讯录管理系统这一个很经典的题目,在我心中和学籍管里系统、分数统计系统并列。今天分享通讯录管理系统的代码。
小型通讯录管理系统
设计一个程序实现通讯录的管理,能够实现联系人的添加、查询、删除和显示功能,用数据文件存放通讯录信息。
具体要求如下:
(1)添加功能:根据输入的联系人的姓名、地址、联系方式,QQ号等信息,把该联系人添加到通讯录中;
(2)查询功能:根据联系人的姓名,查找该联系人的信息;
(3)删除功能:根据姓名,从通讯录中删除该联系人的信息;
(4)显示功能:输出所有通讯录信息;
(5)进行系统界面设计,用户通过从键盘输入1到4,可分别实现上述(1)到(4)的功能。
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
struct Sign
{
char name[10];
char addr[20];
char tel[12];
char com[20];
struct Sign *next;
}pe;
struct Sign *p1,*p2,*head;
FILE *fp;
void directory() /*目录函数*/
{
system("color 0D"); /*systemC语言函数库stdlib.h中的一个函数,
color改变颜色,0-9是背景颜色,A-F是前景颜色。*/
printf("\n\n");
printf(" -----欢迎进入通讯录管理系统------\n");
printf(" *********************************\n");
printf(" * 1.添加联系人 *\n");
printf(" * 2.查询联系人 *\n");
printf(" * 3.删除联系人 *\n");
printf(" * 4.显示联系人 *\n");
printf(" * 0.退出通讯录服务; *\n");
printf(" *********************************\n");
printf("\n\n");
}
void add()/*添加联系人*/
{
char ch;
if((fp==fopen("txl.dat","a+"))!=1)
{
printf("文件打开失败");
exit(1);
}
while(1)
{
system("cls");/*cls函数,意指清空屏幕*/
printf("请输入个人信息__\n");
p2=(struct Sign*)malloc(sizeof(struct Sign));/*动态储存空间*/
p2->next=NULL;
printf("姓名:");scanf("%s",pe.name);
printf("地址:");scanf("%s",pe.addr);
printf("电话号码:");scanf("%s",pe.tel);
printf("QQ号或微信号:");scanf("%s",pe.com);
strcpy(p1->name,pe.name);
strcpy(p1->addr,pe.addr);
strcpy(p1->tel,pe.tel );
strcpy(p1->com,pe.com);
p1->next=p2;
p1=p2;
if(fwrite(&pe,sizeof(struct Sign),1,fp)!=1)
printf("写入错误");
printf("输入 E或e 返回主目录\n ");
getchar();
ch=getchar();
if(ch=='e'||ch=='E')
break;
}
fclose(fp);
}
void Selelctname()/*查询信息*/
{
system("cls");
p1=head;
char FindName[8];
int i=0;
printf("\n请输入要查询的姓名:");
scanf("%s",&FindName);
while(p1->next!=NULL)
{
if(strcmp(p1->name,FindName)==0)
{
printf("%10.8s %10.6s %12.10s %15.4s\n","姓名","地址","电话号码","QQ号或微信");
printf("%10.8s %10.6s %12.10s %15.14s\n",p1->name,p1->addr,p1->tel,p1->com);
i++;
}
p1=p1->next;
}
printf("共 %d 条\n",i);
system("pause"); /*pause函数,意指暂停批文件的处理并显示消息*/
}
void Delete()/*删除信息*/
{
char DeleteName[8];
system("cls");
int i,y=0;
p1=p2=head;
printf("请输入你要删除的信息的姓名:");
scanf("%s",&DeleteName);
getchar();
while(p1!=NULL)
{
if(strcmp(p1->name,DeleteName)==0)
{
printf("\n%10.8s %10.6s %12.10s %15.4s\n","姓名","地址","电话号码","QQ号或微信");
printf("\n%10.8s %10.6s %12.10s %15.14s\n",p1->name,p1->addr,p1->tel,p1->com);
y=1;
printf("\n您要删除的是这条记录吗?1---是;2---否\n");
scanf("%d",&i);
if(i==1)
{
if(p1==head)
{
head=p1->next;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
if((fp==fopen("txl.dat","w"))!=1)
{
printf("文件打开失败");
exit(1);
}
p1=head;
while(p1->next!=NULL)
{
if(fwrite(p1,sizeof(struct Sign),1,fp)!=1)
printf("写入错误");
p1=p1->next;
}
fclose(fp);
}
printf("\n OK! \n");
}
else
break;
}
else if(strcmp(p1->name,DeleteName)&&(p1->next)==NULL)
{
i=0;
}
p2=p1;
p1=p1->next;
}
if(y==0)
{
printf("对不起,没有找到要删除的通讯名单,请检查你要删除的姓名是否正确\n");
}
system("pause");
}
void Allshow()/*显示全部通讯录名单*/
{
printf("\n%10.8s %10.6s %12.10s %15.4s\n","姓名","地址","电话号码","QQ号或微信");
p1=head;
while(p1->next!=NULL)
{
printf("\n%10.8s %10.6s %12.10s %15.14s\n",p1->name,p1->addr,p1->tel,p1->com);
p1=p1->next;
}
}
void goodbye()
{
system("color 0E");
printf("\n\n");
printf(" -----欢迎进入通讯录管理系统------\n");
printf(" *********************************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 谢谢使用!bye bye *\n");
printf(" * *\n");
printf(" * *\n");
printf(" *********************************\n");
printf("\n\n");
}
void error()
{
system("color 0C");
system("cls");
printf("\n\n");
printf(" -----欢迎进入通讯录管理系统------\n");
printf(" *********************************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 输入错误!请仔细检查! *\n");
printf(" * *\n");
printf(" * *\n");
printf(" *********************************\n");
printf("\n\n");
system("pause");
}
int main()
{
int n;
if((fp=fopen("txl.dat","a"))==NULL)
{
printf("File open error!\n");
exit(1);
}
fclose(fp);
if((fp=fopen("txl.dat","r"))==NULL)
{
printf("File open error!\n");
exit(1);
}
p1=(struct Sign*)malloc(sizeof(struct Sign));
p1->next=NULL;
head=p1;
while(!feof(fp))
{
if(fread(p1,sizeof(struct Sign),1,fp)!=1)
break;
p2=(struct Sign*)malloc(sizeof(struct Sign));
p2->next=NULL;
p1->next=p2;
p1=p2;
}
fclose(fp);
while(1)
{
directory();
printf(" 输入你想要应用的功能(0-4):");
printf(" ");
scanf("%d",&n);
if(n==0)
{
system("cls");
goodbye();
exit(0);
}
else if(n==1)
{
system("color 0E");
system("cls");
add();
}
else if(n==2)
{
system("color 0C");
system("cls");
Selelctname();
}
else if(n==3)
{
system("color 0A");
Delete();
}
else if(n==4)
{
system("color 0B");
system("cls");
Allshow();
system("pause");
}
else
error();
system("cls");
getchar();
}
}