通讯录结构体
typedef struct record//定义通讯录结构体
{
int num; //序号
char name[20]; //名字
char birthday[10]; //生日
char post[10]; //邮编
char phone[15]; //电话
char address[20]; //家庭住址
}stu;
链表部分,插入使用头插法
typedef struct LNode//创建链表
{
stu stu1;
struct LNode *next;
}LinkList;
LinkList *creatList()//初始化链表
{
LinkList *head;
head=(LinkList*)malloc(sizeof(LinkList));
head->next=NULL;
}
LinkList *creatNode(stu stu1)//创建结点
{
LinkList *newNode;
newNode=(LinkList*)malloc(sizeof(LinkList));
newNode->stu1=stu1;
newNode->next=NULL;
return newNode;
}
void insertNodebyhead(LinkList *head,stu stu1)//插入结点
{
LinkList *newpeople=creatNode(stu1);
newpeople->next=head->next;
head->next=newpeople;
}
文件部分
void writeInfoToFile(LinkList *head)//写入文件
{
FILE *fp=fopen("通讯.txt","w+");
LinkList *pMove=head->next;
while(pMove)
{
fprintf(fp,"序号:%d\n",pMove->stu1.num);
fprintf(fp,"名字:%s\n",pMove->stu1.name);
fprintf(fp,"电话:%s\n",pMove->stu1.phone);
fprintf(fp,"生日:%s\n",pMove->stu1.birthday);
fprintf(fp,"家庭住址:%s\n",pMove->stu1.address);
fprintf(fp,"邮编:%s\n",pMove->stu1.post);
pMove=pMove->next;
}
fclose(fp);
}
stu stu1;
LinkList *newpeople=creatNode(stu1);
LinkList *head=creatList();
void readInfoFromFile(LinkList *head)//读取文件
{
FILE *fp;
char a[100];
fp=fopen("通讯.txt","rb");
if(fp==NULL)
{
fp=fopen("通讯.txt","w+");
}
while(fscanf(fp,"%s",a)!=EOF)
{
printf("%s\n",a);
}
fclose(fp);
}
menu菜单
void menu()//菜单
{
printf("********通讯录管理系统*********\n"
"* 0.使用说明书 *\n"
"* 1.查询全部联系人 *\n"
"* 2.修改联系人信息 *\n"
"* 3.删除联系人信息 *\n"
"* 4.增加联系人信息 *<-----------------我是菜单\n"
"* 5.查找联系人信息 *\n"
"* 6.查找联系人组信息 *\n"
"* 7.查询已保存的联系人 *\n"
"* 8.正常退出 *\n"
"******** 请选择功能 **********");
}
效果展示图
主函数及主要功能部分
void begin()
{
while(1)
{
menu();
int a;
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case 0:usingbook();break;
case 1:link_order();printList();break;
case 2:changeList();break;
case 3:deleteList1();break;
case 4:InputList();
writeInfoToFile(head);break;
case 5:findList1();break;
case 6:findList2();break;
case 7:readInfoFromFile(head);
system("pause");
system("cls");break;
case 8:exit(0);break;
default:printf(" 输入错误!!!请仔细阅读功能列表");
system("pause");
system("cls");
}
}
}
int main()//主函数
{
system("color 97");
welcome();
system("pause");
system("cls");
begin();
return 0;
}
全部代码展示
#include
#include
#include
#include
typedef struct record//定义通讯录结构体
{
int num; //序号
char name[20]; //名字
char birthday[10]; //生日
char post[10]; //邮编
char phone[15]; //电话
char address[20]; //家庭住址
}stu;
int nu; //序号
char nam[20]; //名字
char birthda[10]; //生日
char pos[10]; //邮编
char phon[15]; //电话
char addres[20];
typedef struct LNode//创建链表
{
stu stu1;
struct LNode *next;
}LinkList;
LinkList *creatList()//初始化链表
{
LinkList *head;
head=(LinkList*)malloc(sizeof(LinkList));
head->next=NULL;
}
LinkList *creatNode(stu stu1)//创建结点
{
LinkList *newNode;
newNode=(LinkList*)malloc(sizeof(LinkList));
newNode->stu1=stu1;
newNode->next=NULL;
return newNode;
}
void insertNodebyhead(LinkList *head,stu stu1)//插入结点
{
LinkList *newpeople=creatNode(stu1);
newpeople->next=head->next;
head->next=newpeople;
}
void writeInfoToFile(LinkList *head)//写入文件
{
FILE *fp=fopen("通讯.txt","w+");
LinkList *pMove=head->next;
while(pMove)
{
fprintf(fp,"序号:%d\n",pMove->stu1.num);
fprintf(fp,"名字:%s\n",pMove->stu1.name);
fprintf(fp,"电话:%s\n",pMove->stu1.phone);
fprintf(fp,"生日:%s\n",pMove->stu1.birthday);
fprintf(fp,"家庭住址:%s\n",pMove->stu1.address);
fprintf(fp,"邮编:%s\n",pMove->stu1.post);
pMove=pMove->next;
}
fclose(fp);
}
stu stu1;
LinkList *newpeople=creatNode(stu1);
LinkList *head=creatList();
void readInfoFromFile(LinkList *head)//读取文件
{
FILE *fp;
char a[100];
fp=fopen("通讯.txt","rb");
if(fp==NULL)
{
fp=fopen("通讯.txt","w+");
}
while(fscanf(fp,"%s",a)!=EOF)
{
printf("%s\n",a);
}
fclose(fp);
}
void link_order()//序号排序
{
LinkList *pb, *pf, temp;
pf=head->next;
while(pf->next!=NULL){
pb=pf->next;
while(pb!=NULL){
if(pf->stu1.num>pb->stu1.num){
temp=*pf;
*pf=*pb;
*pb=temp;
temp.next=pf->next;
pf->next=pb->next;
pb->next=temp.next;
}
pb=pb->next;
}
pf=pf->next;
}
return;
}
void InputList()//输入模块
{
stu stu1;
LinkList *pMove=head->next;
LinkList *newpeople=creatNode(stu1);
newpeople->next=head->next;
head->next=newpeople;
printf("请输入序号:");
scanf("%d",&newpeople->stu1.num);
printf("请输入名字:");
scanf("%s",newpeople->stu1.name);
printf("请输入电话:");
scanf("%s",newpeople->stu1.phone);
printf("请输入生日:");
scanf("%s",newpeople->stu1.birthday);
printf("请输入家庭住址:");
scanf("%s",newpeople->stu1.address);
printf("请输入邮编:");
scanf("%s",newpeople->stu1.post);
system("pause");
system("cls");
}
void printList()//(打印/查询) 模块
{
LinkList *pMove = head->next;
if(pMove==NULL)
{
printf("通讯录中无联系人,请添加!");
system("pause");
system("cls");
return;
}
while(pMove!=NULL)
{
printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
printf("_______________\n");
pMove=pMove->next;
}
printf("\n");
system("pause");
system("cls");
}
void deleteList1()//删除单人模块
{
stu stu1;
int num;
printf("请输入要删除的联系人序号:");
fflush(stdin);
scanf("%d",&num);
LinkList* posNode=head->next;
LinkList* posFrontNode=head;
if(posNode==NULL)
{
printf("数据为空!\n");
system("pause");
system("cls");
return;
}
while(posNode->stu1.num!=num)
{
posFrontNode=posNode;
posNode=posNode->next;
if(posNode==NULL)
{
printf("输入错误!\n");
system("pause");
system("cls");
return;
}
}
posFrontNode->next=posNode->next;
free(posNode);
system("pause");
system("cls");
}
void changeList(){
LinkList* pMove=head->next;
printf("请输入要修改联系人的姓名:");
char name[100];
scanf("%s",name);
int choose;
if(pMove!=NULL){
while(strcmp(pMove->stu1.name,name)==0){
printf("你想要修改的信息选项1.序号 2.姓名 3.电话 4.生日 5.家庭住址 6.邮编 7.退出修改\n");
fflush(stdin);
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("请输入你要修改的序号\n");
fflush(stdin);
scanf("%d",&nu);
stu1.num=nu;
printf("修改成功!\n");
break;
case 2:
printf("请输入你要修改的姓名\n");
fflush(stdin);
scanf("%s",nam);
strcpy(pMove->stu1.name,nam);
printf("修改成功!\n");
break;
case 3:
printf("请输入你要修改的电话\n");
fflush(stdin);
scanf("%s",phon);
strcpy(pMove->stu1.phone,phon);
printf("修改成功!\n");
break;
case 4:
printf("请输入你要修改的生日\n");
fflush(stdin);
scanf("%s",birthda);
strcpy(pMove->stu1.birthday,birthda);
printf("修改成功!\n");
break;
case 5:
printf("请输入你要修改的家庭住址\n");
fflush(stdin);
scanf("%s",addres);
strcpy(pMove->stu1.address,addres);
printf("修改成功!\n");
break;
case 6:
printf("请输入你要修改的邮编\n");
fflush(stdin);
scanf("%s",pos);
strcpy(pMove->stu1.post,pos);
printf("修改成功!\n");
break;
case 7:system("pause");
system("cls");
return;
default:
printf("请输入正确的选项!\n");
break;
}
}
}
else
{
printf("通讯录为空,无法修改");
}
}
void fkey2()//家庭地址查询子钥匙
{
LinkList *pMove =head->next;
char b[20];
printf("请输入家庭住址:");
fflush(stdin);
scanf("%s",b);
while(pMove)
{
if(strcmp(b,pMove->stu1.address)==0)
{
printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
printf("_______________\n");
}
else
{
printf("没有找到符合该条件联系人!");
return;
}
pMove=pMove->next;
}
}
void fkey1()//邮编查询子钥匙
{
LinkList *pMove =head->next;
char b[20];
printf("请输入邮编:");
fflush(stdin);
scanf("%s",b);
while(pMove)
{
if(strcmp(b,pMove->stu1.post)==0)
{
printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
printf("_______________\n");
}
else
{
printf("没有找到符合该条件联系人!");
return;
}
pMove=pMove->next;
}
}
void findList2()//查询模块2(联系人组)
{
int b;
printf("请选择你的查询方式:1.邮编查询:2.家庭住址查询");
fflush(stdin);
scanf("%d",&b);
switch(b)
{
case 1:fkey1();break;
case 2:fkey2();break;
}
system("pause");
system("cls");
}
void Fkey1()//姓名查询子钥匙
{
LinkList *pMove =head->next;
char b[20];
printf("请输入姓名:");
fflush(stdin);
scanf("%s",b);
while(pMove)
{
if(strcmp(b,pMove->stu1.name)==0)
{
printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
return;
}
pMove=pMove->next;
}
printf("没有找到符合该条件联系人!");
}
void Fkey2()//电话查询子钥匙
{
LinkList *pMove =head->next;
char b[20];
printf("请输入电话:");
fflush(stdin);
scanf("%s",b);
while(pMove)
{
if(strcmp(b,pMove->stu1.phone)==0)
{
printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
return;
}
pMove=pMove->next;
}
printf("没有找到符合该条件联系人!");
}
void findList1()//查询模块1(联系人)
{
int b;
printf("请选择你的查询方式:1.姓名查询2.电话号码查询:");
fflush(stdin);
scanf("%d",&b);
switch(b)
{
case 1:Fkey1();break;
case 2:Fkey2();break;
}
system("pause");
system("cls");
}
void usingbook()
{
printf("本程序可用于通讯录人员的录入与查询\n并且在录入后会自动保存\n可支持单人姓名,电话号码查询\n也可支持根据家庭住址,邮编查询联系人组\n");
system("pause");
system("cls");
}
void menu()//菜单
{
printf("********通讯录管理系统*********\n"
"* 0.使用说明书 *\n"
"* 1.查询全部联系人 *\n"
"* 2.修改联系人信息 *\n"
"* 3.删除联系人信息 *\n"
"* 4.增加联系人信息 *<-----------------我是菜单\n"
"* 5.查找联系人信息 *\n"
"* 6.查找联系人组信息 *\n"
"* 7.查询已保存的联系人 *\n"
"* 8.正常退出 *\n"
"******** 请选择功能 **********");
}
void welcome()//欢迎系统
{
char a[20];
printf("欢迎进入通讯录管理系统,请输入通行账号:\n");
scanf("%s",a);
printf("Joker,欢迎!");
}
void begin()
{
while(1)
{
menu();
int a;
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case 0:usingbook();break;
case 1:link_order();printList();break;
case 2:changeList();break;
case 3:deleteList1();break;
case 4:InputList();
writeInfoToFile(head);break;
case 5:findList1();break;
case 6:findList2();break;
case 7:readInfoFromFile(head);
system("pause");
system("cls");break;
case 8:exit(0);break;
default:printf(" 输入错误!!!请仔细阅读功能列表");
system("pause");
system("cls");
}
}
}
int main()//主函数
{
system("color 97");
welcome();
system("pause");
system("cls");
begin();
return 0;
}