精品C语言程序设计用指针链表实现的通讯录小程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/**********************************
*准备工作*
**********************************/
#include
#include
#include
#include
typedef struct address
{ char name[10];
char petname[10];
char telnum[15];
char QQnum[12];
char Address[20];
struct address *next;
}ADDR;
#define LEN sizeof(ADDR)
#define ASK(p) do{\
p=(ADDR*)malloc(sizeof(ADDR));\
if(p==NULL) {printf("memory fail!"); exit(-1);}\
}while(0)
/*函数声明*/
void handle_menu(ADDR *);
int menu_select(void);
ADDR* new_addrBook(ADDR *);
ADDR *slstore(ADDR *);
void display(ADDR *);
ADDR *load(void);
void save(ADDR *);
void free_nodes(ADDR *);
void search_record(ADDR *);
void update_record(ADDR *);
ADDR *delete_record(ADDR *);
ADDR *sort_record(ADDR *);
void link_files(void);
void quit(ADDR *);
int count=0; //声名全集记录计数变量
int savedTag=0; //记录是否已保存的标志
*主函数*
**********************************/
void main()
{
printf("\n");
printf("\t\t\t******************************\n");
printf("\t\t\t* 这是一个*\n");
printf("\t\t\t* 简单的通讯录程序*\n");
printf("\t\t\t* 可以对通讯录进行简单管理*\n");
printf("\t\t\t* 欢迎使用通讯录*\n");
printf("\t\t\t******************************\n\n");
handle_menu(NULL);
}
*菜单处理函数*
*参数top:当前通讯录链表的表头*
**********************************/
void handle_menu(ADDR *top)
{
while(1 )
{
switch(menu_select())
{ case 0: //新建通讯录
top=new_addrBook(top);
break;
case 1: //读取记录
free_nodes(top); //首先销毁原来链表所占用的内存
top=load();
case 2: //显示记录
display(top);
break;
case 3: //增加记录
top=slstore(top);
break;
case 4: //查询记录
search_record(top);
break;
case 5: //修改记录
update_record(top);
break;
case 6: //删除记录
top=delete_record(top);
break;
case 7: //保存记录
save(top);
break;
case 8: //连接文件
link_files();
break;
case 9: //结束运行
quit(top);
break;
case 10:
top=sort_record(top); //记录整理
}
}
}
/**********************************
*菜单选择函数*
*返回所选功能对应的数字*
**********************************/
int menu_select()
{
char s[2];
char s[2];
printf("\n*****************************");
printf("<微型通讯录主菜单>");
printf("*****************************\n");
printf("* 0.新建记录\t1.读取记录\t2.显示记录\t3.增加记录\t4.查询记录*\n");
printf("* 5.修改记录\t6.删除记录\t7.保存记录\t8.连接文件\t9.结束运行*\n");
printf("*\t\t卐
printf("\n****************************");
printf("<左边数字对应着功能>");
printf("****************************\n\n");
printf("请选择功能序号:");
while(1)
{
gets(s);
if(s[0]=='\0')
{
printf("启动ZKN小助手!");
return 10;
}
else
{
if(s[1])
printf("\n输入有误,请重选功能:");
else
{
if(!isdigit(s[0])) //isdigit(s[0]):当s[0]为数字非0~9时,返回零值
printf("\n输入有误,请重选功能:");