实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
实现功能:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
程序说明:
分模块实现
Phonelist.h 头文件——存放函数声明
fun.c ——函数实现
test.c——主函数
!Phonelist.h!
//Phonelist.h
#pragmaonce
#ifndef__ARROPT_H__
#define__ARROPT_H__
typedef struct PHONE
{char Name[10]; int Age; char Sex[3];//男/女char Tele[13];char Address[20];//struct PHONE *next;
}PHONE,*Phone;
void ADD(PHONE*p);//添加
int DEL(Phone p,char*);//删除
void SEEK(Phone p,char*);//查找
void REVISE(Phone p,char*);//修改
void SHOW(Phone p);//显示
void FREE_ALL(Phone p);//清空
void SORT(Phone p,constsize_t);//用快排排序必须将结构体第一个成员设为 Name,才可以实现
void menu();
#endif //__ARROPT_H__
fun.c ——函数实现
//fun.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"Phonelist.h"
#defineMAX 1000//通讯录最大存储人数//*****************添加**************
voidADD(Phone p){printf("请输入要录入联系人的姓名\n");scanf_s("%s",p->Name,10);//用scanf_s 函数实现字符串的输入
printf("请输入要录入联系人的性别(男/女)\n");
scanf_s("%s",p->Sex,3);
printf("请输入要录入联系人的年龄\n");scanf_s("%d",&p->Age);printf("请输入要录入联系人的电话\n");
scanf_s("%s",p->Tele,13);printf("请输入要录入联系人的住址\n");scanf_s("%s",p->Address,20);}//****************删除**************************
intDEL(Phone p,char*name){inti=0;inttmp=0;Phone j=p;while(i++<MAX)
{if(strcmp(j->Name,name)==0){j->Age=0;tmp=1;break;}j++;}if(tmp==1){printf("%s信息删除成功!\n",name);return1;}
else{printf("%s信息删除失败,无此人!\n",name);return0;}}//*********查找*************voidshow_one(Phone j){printf("Name: %s ",j->Name);printf(" Age: %d ",j->Age);
printf(" Tele: %s ",j->Tele);printf(" Sex: %s ",j->Sex);printf(" Address: %s \n",j->Address);}
void SEEK(Phone p,char*name){inti=0;inttmp=0;Phone j=p;while(i++<MAX)
{if(strcmp(j->Name,name)==0){tmp=1;break;}j++;}if(tmp==1){printf("%s信息存在!\n",name);show_one(j);}
else printf("%s信息查找失败,无此人!\n",name);}//***********修改**********
void REVISE(Phone p,char*name){inti=0;inttmp=0;Phone j=p;while(i++<MAX){if(strcmp(j->Name,name)==0){ADD(j);tmp=1;break;}j++;}if(tmp==1)printf("%s信息修改成功!\n",name);
else printf("%s信息修改失败,无此人!\n",name);}//************显示所有联系人********voidSHOW(Phone p){Phone j=p;inti=0;intcount=0;while(i++<MAX){if(j->Age!=0){show_one(j);count++;}j++;}
if(0==count)printf("通讯录里还没有人,请选择1,添加您的好友\n");}//************清空****************voidFREE_ALL(Phone p){Phone j=p;inti=0;while(i<MAX&&j->Age!=0){j->Age=0;j++;}
printf("通讯录已清空!\n");}//*************以名字排序所有联系人********voidSORT(Phone p,constsize_t num){qsort(p,num,sizeof(*p),strcmp);//用快排排序必须将结构体第一个成员设为 Name,才可以实现}//***************菜单******************voidmenu(){printf("***********************************************\n");
printf("* MENU *\n");printf("***********************************************\n");printf("* 1.添加联系人信息 *\n");printf("* 2.删除指定联系人信息 *\n");printf("* 3.查找指定联系人信息 *\n");printf("* 4.修改指定联系人信息 *\n");printf("* 5.显示所有联系人信息 *\n");printf("* 6.清空所有联系人 *\n");
printf("* 7.以名字排序所有联系人 *\n");printf("* 0.退出 *\n");printf("***********************************************\n");printf("***********************************************\n");printf("请输入选择序号:->");}
test.c——主函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"Phonelist.h"
#define
MAX 1000PHONE PEO[MAX]={0};intmain(){intchoose=1;inti=0;intret=0;while(choose){menu();scanf_s("%d",&choose);charname[10];if(choose>=0&&choose<8)
{switch(choose){i=0;case1:if(PEO[i].Age==0&&i<MAX)//设:若Age信息为"0"则对应信息为空
ADD(&PEO[i++]);break;case2:printf("请输入要删除学生的名字\n");
scanf_s("%s",name,10);ret=DEL(PEO,name);if(ret==1)i--;break;case3:printf("请输入要查找学生的名字\n");
scanf_s("%s",name,10);SEEK(PEO,name);break;case4:printf("请输入要修改学生的名字\n");
scanf_s("%s",name,10);REVISE(PEO,name);break;case5:SHOW(PEO);break;
case6:FREE_ALL(PEO);break;case7:SORT(PEO,i-1);printf("排序结果: \n");SHOW(PEO);break;default:break;}}}system("pause");return0;}