C语言课程设计通讯录管理系统方案.docx
《C语言课程设计通讯录管理系统方案.docx》由会员分享,可在线阅读,更多相关《C语言课程设计通讯录管理系统方案.docx(14页珍藏版)》请在冰豆网上搜索。
C语言课程设计通讯录管理系统方案
#include
#include
#include
#defineMAX_NAME11
#defineMAX_SEX3
#defineMAX_BIRTHDAY9
#defineMAX_TEL21
#defineMAX_MOBILE21
#defineMAX_FAX21
#defineMAX_ADDRESS101
#defineMAX_POSTAL_CODE7
typedefstruct_person
{
charname[MAX_NAME];
charsex[MAX_SEX];
charbirthday[MAX_BIRTHDAY];
chartel[MAX_TEL];
charmobile[MAX_MOBILE];
charfax[MAX_FAX];
charaddress[MAX_ADDRESS];
charpostal_code[MAX_POSTAL_CODE];
}person;
typedefstruct_addr_book
{
personper;
struct_addr_book*next;
}addr_book;
addr_book*first=NULL;
voidadd();
voidshow();
voidsearch();
voiddelete();
voidupdate();
voidsave();
voidquit();
intprint_menu();
addr_book*get_last(addr_book*from);
voidprint_person(person*p);
voidinput_person(person*p);
charmenu[]=
"+=====================================================+\n"
"|通讯薄管理系统|\n"
"+-----------------------------------------------------+\n"
"|1添加联系人|\n"
"|2显示所有联系人|\n"
"|3查找联系人|\n"
"|4删除联系人|\n"
"|5更新联系人|\n"
"|6保存联系人|\n"
"|7退出系统|\n"
"+=====================================================+\n";
intmain()
{
intflg=1;
while(flg)
{
switch(print_menu())
{
case1:
add();
break;
case2:
show();
break;
case3:
search();
break;
case4:
delete();
break;
case5:
update();
break;
case6:
save();
break;
case7:
quit();
break;
}
}
}
voidadd()
{
charinput='N';
addr_book*last=NULL;
addr_book*new_addr=(addr_book*)malloc(sizeof(addr_book));
memset(new_addr,0,sizeof(addr_book));
new_addr->next=NULL;
if(first==NULL)
{
first=new_addr;
}
else
{
last=get_last(first);
last->next=new_addr;
}
input_person(&(new_addr->per));
printf(">继续输入?
(Y继续,N返回菜单)");
getchar();
input=getchar();
if(input=='y'||input=='Y')
{
add();
}
}
voidshow()
{
inti=0;
addr_book*p=first;
while(p!
=NULL)
{
i++;
printf("*****第%d个联系人******************************\n",i);
print_person(&(p->per));
p=p->next;
}
if(i==0)
{
printf("没有联系人!
");
}
printf("按回车键返回菜单");
getchar();
getchar();
}
voidsearch()
{
intcount=0;
charinput='N';
charname[MAX_NAME]={0};
addr_book*p=first;
printf(">请输入要查找的联系人姓名(最大%d个字符):
",MAX_NAME-1);
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->per.name,name)==0)
{
print_person(&(p->per));
count++;
}
p=p->next;
}
if(count==0)
{
printf("没有找到姓名为%s的联系人",name);
}
printf("继续查找吗?
(Y继续查找,N返回菜单)");
getchar();
input=getchar();
if(input=='y'||input=='Y')
{
search();
}
}
voiddelete()
{
intcount=0;
charinput='N';
charname[MAX_NAME]={0};
addr_book*p=first;
addr_book*p1=NULL;
printf(">请输入要删除的联系人姓名(最大%d个字符):
",MAX_NAME-1);
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->per.name,name)==0)
{
print_person(&(p->per));
count++;
}
p=p->next;
}
if(count==0)
{
printf("没有找到姓名为%s的联系人",name);
}
else
{
printf("确定要删除姓名为[%d]的联系人吗?
(Y确认,N取消)",name);
getchar();
input=getchar();
if(input=='y'||input=='Y')
{
if(p==first)
{
first=p->next;
}
else
{
p1=first;
while(p1!
=NULL)
{
if(p1->next==p)
{
p1->next=p->next;
break;
}
p1=p1->next;
}
}
free(p);
}
}
printf("继续删除其他联系人吗?
(Y继续删除,N返回菜单)");
getchar();
input=getchar();
if(input=='y'||input=='Y')
{
delete();
}
}
voidupdate()
{
intcount=0;
charinput='N';
charname[MAX_NAME]={0};
addr_book*p=first;
printf(">请输入要更新的联系人姓名(最大%d个字符):
",MAX_NAME-1);
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->per.name,name)==0)
{
print_person(&(p->per));
count++;
break;
}
p=p->next;
}
if(count==0)
{
printf("没有找到姓名为%s的人",name);
}
else
{
input_person(&(p->per));
}
printf("继续更新联系人吗?
(Y继续更新,N返回菜单)");
getchar();
input=getchar();
if(input=='y'||input=='Y')
{
update();
}
}
voidsave()
{
FILE*fp;
charfile[100];
addr_book*p=first;
printf("请输入文件名:
");
scanf("%s",file);
fp=fopen(file,"w");
while(p!
=NULL)
{
fprintf(fp,"%s,%s,%s,%s,%s,%s,%s\n",p->per.name,p->per.sex,p->per.birthday,p->per.tel,p->per.mobile,p->per.fax,p->per.address,p->per.postal_code);
p=p->next;
}
fclose(fp);
printf("保存成功\n按任意键返回菜单..\n");
getchar();
getchar();
}
voidquit()
{
addr_book*pdel=first;
addr_book*p=NULL;
if(pdel==NULL)
{
exit(0);
}
while(pdel->next!
=NULL)
{
p=pdel->next;
free(pdel);
pdel=p;
}
free(pdel);
exit(0);
}
intprint_menu()
{
intselected=0;
system("cls");
printf(menu);
printf("请选择[1~7]:
");
scanf("%d",&selected);
if(selected<1||selected>7)
{
printf("错误的选择!
(请输入1~7).按回车键继续...");
getchar();
getchar();
}
returnselected;
}
voidinput_person(person*p)
{
printf(">请输入联系人信息:
\n");
printf("请输入姓名(最大长度%d个字符):
",MAX_NAME-1);
scanf("%s",p->name);
printf("请输入性别(最大长度%d个字符):
",MAX_SEX-1);
scanf("%s",p->sex);
printf("请输入出生日期(最大长度%d个字符):
",MAX_BIRTHDAY-1);
scanf("%s",p->birthday);
printf("请输入电话(最大长度%d个字符):
",MAX_TEL-1);
scanf("%s",p->tel);
printf("请输入手机(最大长度%d个字符):
",MAX_MOBILE-1);
scanf("%s",p->mobile);
printf("请输入传真(最大长度%d个字符):
",MAX_FAX-1);
scanf("%s",p->fax);
printf("请输入地址(最大长度%d个字符):
",MAX_ADDRESS-1);
scanf("%s",p->address);
printf("请输入邮编(最大长度%d个字符):
",MAX_POSTAL_CODE-1);
scanf("%s",p->postal_code);
}
voidprint_person(person*p)
{
printf("姓名:
%s\t性别:
%s\t生日:
%s\n",p->name,p->sex,p->birthday);
printf("电话:
%s\n",p->tel);
printf("手机:
%s\n",p->mobile);
printf("传真:
%s\n",p->fax);
printf("地址:
%s\n",p->address);
printf("邮编:
%s\n",p->postal_code);
printf("\n");
}
addr_book*get_last(addr_book*from)
{
addr_book*p=from;
while(p->next!
=NULL)
{
p=p->next;
}
returnp;
}