通讯录的制作(数据结构C语言版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通讯录的设计
一、设计思路:
经过一个学期的程序设计学习,我逐渐了解了计算机的基本原理和c语言的基本常识,并可以逐渐自己来实现一些简单的程序任务。此次程序设计我选择了通讯录设计,通过函数、结构体的定义以及一些基本操作运用,经过一个多月的编写、调试、测试,最终完成了该程序的设计。以下为我的设计思路:
首先,确定通讯录的功能,我初步设计了六项功能:输入(程序中对应enter())、删除(程序中对应delete())、显示通讯录(程序中对应list())、搜索(程序中对应search())、保存(程序中对应save())、装载(程序中对应load())。
其次,对于存储的数据结构,我则主要选择了一下几个方面的信息:姓名、性别年龄、籍贯、手机、下一个指针(用于链表的操作与实现)、当前指针(用于链表的操作与实现)。
二、程序源代码:
#include
structaddress{ /*创建一个address结构*/
charname[10]; /*姓名*/
charsex[2]; /*性别*/
charage[2]; /*年龄*/
charnative[10]; /*籍贯*/
chartelephone[12];/*手机*/
structaddress*next;/*下一个入口的指针*/
structaddress*prior;/*当前记录的指针*/
}list_entry;
structaddress*start;/*指向列表中第一个入口*/
structaddress*last;/*指向列表中最后一个入口*/
voidenter(),display(),search(),s ave(),load();
menu_select(),list(),delet(),inp uts();
main()
{
chars[20],choice;
structaddress*info;
start=last=NULL;/*列表长度清零*/
for(;;){ /*列循环的一个用法*/
switch(menu_select()){
case1:enter(); /*输入1,进入enter()程序,是输入通讯录*/
break;
case2:delet(); /*输入2,进入delete()程序,是删除一个记录*/
break;
case3:list(); /*输入3,进入list()程序,是列表显示通信录*/
break;
case4:search(); /*输入4,进入search()程序,搜索一个街道*/
break;
case5:save(); /*输入5,保存列表到磁盘文件*/
break;
case6:load(); /*输入6,从磁盘文件读入列表*/
break;
case7:return(0);
}
}
}
/*选择一个选项*/
menu_select()
{
chars[20];
intc;
printf("1.输入一个名字(直接回车则退出)\n");
printf("2.删除一个名字\n");
printf("3.列表显示\n");
printf("4.搜索查询\n");
printf("5.保存文件\n");
printf("6.装入文件\n");
printf("7.退出\n");
do{
printf("\n输入您的选择:");
gets(s);
c=atoi(s);
}while(c<0||c>7);
returnc;
}
/*输入名字和地址*/
voidenter()
{
structaddress*info,*dls_sto re();
for(;;){
info=(structaddress*)malloc(si zeof(list_entry));
if(!info){
printf("\n内存溢出");
return;
}
inputs("输入姓名:",info->name,10);
if(!info->name[0])break;
/*名字长度为0,停止输入*/
inputs("输入性别:",info->sex,2);
inputs("输入年龄:",info->age,2);
inputs("输入籍贯:",info->native,10);
inputs("输入电话:",info->telephone,12);
start=dls_store(info,start);
/*保存在第一个记录里*/
} /*输入循环*/
}
inputs(prompt,s,count)/*这个函数用于输入长度为count的一个字符串,用于防止字符串长度超过它的空间,并提出警告*/
char*prompt;
char*s;
intcount;
{
charp[255];
do{
printf(prompt);
/*显示这个函数的字符串*/
gets(p); /*从
键盘获得255个输入*/
if(strlen(p)>count)printf("n字符串超过长度!"); /*如果数组P 中的长度超过调用函数中的参数count,提示*/
}while(strlen(p)>count);
/*如果输入的字符串长度超过count,循环重新输入,否则退出,返回调用者*/
strcpy(s,p); /*s是目标字符串,输出时字符串在s中*/
return(0);
}
/*产生一个又链接表,当一个新元素插入到列表的开始时,一个指向第一个元素的指针被返回*/
structaddress*dls_store(i,top) /*存贮顺序*/
structaddress*i;
/*新的元素*/
structaddress*top;
/*列表中的第一个元素*/ {
structaddress*old,*p;
if(last==NULL){ /*列表中的第一个元素*/
i->next=NULL;
i->prior=NULL;
last=i;
returni;
}
p=top; /*从列表的顶部开始*/
old=NULL;
while(p){
if(strcmp(p->name,i->name)< 0){
old=p;
p=p->next;
}
else{
if(p->prior){