/*基于C-Free 5.0*/
#include"stdio.h"
#include"stdlib.h"
#include"ctype.h"
#include"process.h"
#include"string.h"
#include"conio.h"
typedef struct node
{
char name[10];
char age[3];
char sex[5];
char telephonenumber[20];
char adress[50];
struct node *link;
}STU;
STU *head=NULL;/*全局变量head,指向链表的头地址*/
/*函数申明*/
STU *Creat();
STU *First_Add(STU *h);/*添加第一个联系人,返回第一个节点的头指针*/
STU *Futher_Add(STU *front);/*添加联系人,返回添加结点的首地址*/
STU *Search(STU *h,char *x);/*查找联系人,返回查找节点的头指针*/
STU *FSearch(STU *h,char *x);/*查找所查联系人的前节点,返回前节点的指针*/
void OutPut(STU *search);/*输出一条记录*/
void Delete(char *x);/*删除一条记录*/
void AllShow(STU *h);/*显示所有联系人*/
void SaveRecord(STU *head);/*将记录保存到c:\通讯录.txt中*/
void End();/*退出函数*/
/*程序的主函数*/
int main()
{
char s[20];
int i;
STU *h=NULL,*search=NULL;
char _name[10];
head=Creat();
while(1)
{
system("cls");/*TC2.0中用 clrscr(),以下类似*/
printf("\t\t-----------**\1欢迎来到通讯录系统\1**--------\n");
printf("\t\t 版本号:1.0 作者: ** \n");
printf("\t\t-------------------------------------------\n");
printf("\t\t-------------------主要功能----------------\n");
printf("\t\t 1: \2 |* 添加首个联系人 *| \2 \n");
printf("\t\t 2: \2 |* 追加联系人 *| \2 \n");
printf("\t\t 3: \2 |* 查找联系人 *| \2 \n");
printf("\t\t 4: \2 |* 删除联系人 *| \2 \n");
printf("\t\t 5: \2 |* 显示所有联系人 *| \2 \n");
printf("\t\t 6: \2 |* 保存到文件 *| \2 \n");
printf("\t\t 0: \2 |* 退 出 *| \2 \n");
printf("\t\t \3\7 友情提示:请输入0~6来选择功能:");
do{
scanf("%s",s);
i=atoi(s);
}while(i<0||i>6);/*输入不在0~6之间,重输入*/
switch(i)
{
case 1:system("cls");h=First_Add(head);break;
case 2:{
system("cls");
if(head->link==NULL) printf("\1\7警告:请先创建第一个联系人!\n");
else h=Futher_Add(h);
getch();
}break;
case 3:{
system("cls");
printf("\7小提示:请输入您要查找人的姓名:\n");
scanf("%s",_name);
search=Search(head,_name);
if(search!=NULL)
{
printf("*姓名* *年龄* *性别* *电话号码* *地址* \n");
OutPut(search);
printf("***********************************结束**********************************\n");
}
else printf("\7很遗憾,没有查到这个人哪!...\n");
getch();
}break;
case 4:{
system("cls");
printf("\7小提示:请输入您要删除人的姓名:\n");
scanf("%s",_name);
Delete(_name);
getch();
}break;
case 5:{
system("cls");
printf("*姓名* *年龄* *性别* *电话号码* *地址* \n");
AllShow(head);
printf("***********************************结束***********************************\n");
getch();
}break;
case 6:system("cls");SaveRecord(head);break;
case 0:End();break;
}
}
return 0;
}
STU *Creat() /*创建头结点,返回头指针*/
{
STU *h;
if((h=(STU *)malloc(sizeof(STU)))==NULL)
{
printf("\7警告:内存空间无法分配!\n");
exit(0);
}
h->name[0]='\0';
h->age[0]='\0';
h->sex[0]='\0';
h->telephonenumber[0]='\0';
h->adress[0]='\0';
h->link=NULL;
return h;
}
STU *First_Add(STU *h)/*添加第一个联系人,返回第一个节点的头指针*/
{
STU *s;
if((s=(STU *)malloc(sizeof(STU)))==NULL)
{
printf("\7警告:内存空间无法分配!\n");
exit(0);
}
h->link=s;
printf("\1请输入以下信息:\n");
printf("*姓名* *年龄* *性别* *电话号码* *地址* \n");
printf("-------------------------------------------------------------------------\n");
scanf("%s%s%s%s%s",s->name,s->age,s->sex,s->telephonenumber,s->adress);
printf("\2\7 恭喜你,首个联系人创建成功!\2\n");
printf("\3温馨提示:按任意键继续...");
getch();
s->link=NULL;
return s;
}
STU *Futher_Add(STU *front)/*添加联系人,返回结点的首地址*/
{
STU *s;
system("cls");
if((s=(STU *)malloc(sizeof(STU)))==NULL)
{
printf("\7警告:内存空间无法分配!\n");
exit(0);
}
front->link=s;
printf("*姓名* *年龄* *性别* *电话号码* *地址* \n");
printf("-------------------------------------------------------------------------\n");
scanf("%s%s%s%s%s",s->name,s->age,s->sex,s->telephonenumber,s->adress);
printf("\2\7 恭喜你,一个联系人添加成功!\2\n");
printf("\3温馨提示:按任意键继续...");
getch();
s->link=NULL;
return s;
}
/*查找函数,返回查找到结点的头指针,若没查到,返回NULL*/
STU *Search(STU *h,char *x)
{
STU *p;
char *name;
system("cls");
p=h->link;
while(p!=NULL)
{
name=p->name;
if(strcmp(name,x)==0) return p;
else p=p->link;
}
return p;
}
/*查找函数,返回查找结点前结点的首地址,若没查到,返回最后结点的首地址*/
STU *FSearch(STU *h,char *x)
{
STU *p,*s;
char *name;
system("cls");
s=h;
p=h->link;
while(p!=NULL)
{
name=p->name;
if(strcmp(name,x)==0) return s;
else
{
p=p->link;
s=s->link;
}
}
return s;
}
void OutPut(STU *search)/*输出一条记录*/
{
printf("-------------------------------------------------------------------------\n");
printf("%-12s%-12s%-12s%-15s%-12s\n",search->name,search->age,search->sex,search->telephonenumber,search->adress);
}
void Delete(char *x)/*删除联系人*/
{
STU *p=NULL,*fp=NULL;
p=Search(head,x);
system("cls");
if(p==NULL) printf("\2通讯录中没有这个人呀!...");
else{
fp=FSearch(head,x);
fp->link=p->link;
free(p);
printf("\2\7提示:联系人成功删除!");
}
}
void AllShow(STU *h)/*显示所有联系人*/
{
STU *p=h->link;
while(p!=NULL)
{
OutPut(p);
p=p->link;
}
}
void SaveRecord(STU *h)/*将记录保存到c:通讯录.txt中*/
{
STU *p=h->link;
FILE *fp=NULL;
printf("\7记录正在保存到C:\\通讯录.txt中……\n");
if((fp=fopen("C:\\通讯录.txt","w"))==NULL)
{
printf("\7文件无法打开哦……\n");/*没打开*/
exit(1); /*退出*/
}
fprintf(fp,"*姓名* *年龄* *性别* *电话号码* *地址* \r\n");
fprintf(fp,"-------------------------------------------------------------------------\r\n");
while(p!=NULL)
{
fprintf(fp,"%-12s%-12s%-12s%-15s%-12s\r\n",p->name,p->age,p->sex,p->telephonenumber,p->adress);
fprintf(fp,"-------------------------------------------------------------------------\r\n");
p=p->link;
}
fclose(fp);
printf("\n\2\7提示:文件成功保存到C:\\通讯录.txt中!\n");
getch();
}
void End()/*退出函数*/
{
system("cls");
char s[20];
int i=0;
printf("\t\t\7您是否将通讯录信息保存到文件啦?\n");
printf("\t\t\3 1:我已经保存好了啊!\n");
printf("\t\t\3 2:没呢,请帮我保存!\n");
printf("\t\t\3 3:我不想保存了…… \n");
printf("\t\t\1 请选择:");
do{
scanf("%s",s);
i=atoi(s);
}while(i<1||i>3);
switch(i)
{
case 1:break;
case 2:SaveRecord(head);break;
case 3:break;
}
exit(0);
}
我以前写的,交流交流哈。。。