通讯录的制作(数据结构C语言版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通讯录的设计
一、设计思路:
经过一个学期的程序设计学习,我逐渐了解了计算机的基本原理和c语言的基本常识,并可以逐渐自己来实现一些简单的程序任务。此次程序设计我选择了通讯录设计,通过函数、结构体的定义以及一些基本操作运用,经过一个多月的编写、调试、测试,最终完成了该程序的设计。以下为我的设计思路:首先,确定通讯录的功能,我初步设计了六项功能:输入(程序中对应 enter ())、删除(程序中对应delete())、显示通讯录(程序中对应list())、搜索(程序中对应search())、保存(程序中对应save())、装载(程序中对应 load())。
其次,对于存储的数据结构,我则主要选择了一下几个方面的信息:姓名、性别年龄、籍贯、手机、下一个指针(用于链表的操作与实现)、当前指针(用于链表的操作与实现)。
二、程序源代码:
#include
struct address{ /*创建一个address结构*/
char name[10]; /*姓名*/
char sex[2]; /*性别*/
char age[2]; /*年龄*/
char native[10]; /*籍贯*/
char telephone[12]; /*手机*/
struct address *next; /*下一个入口的指针*/
struct address *prior; /*当前记录的指针*/
} list_entry;
struct address *start; /*指向列表中第一个入口*/
struct address *last; /*指向列表中最后一个入口*/
void
enter(),display(),search(),save(),loa d();
menu_select(),list(),delet(),inp uts();
main()
{
char s[20],choice;
struct address *info;
start=last=NULL; /*列表长度清零*/
for(;;) { /*列循环的一个用法*/
switch(menu_select()){
case 1: enter(); /*输入1,进入enter()程序,是输入通讯录*/
break;
case 2:delet(); /*输入2,进入delete()程序,是删除一个记录*/
break;
case 3:list(); /*输入3,进入list()程序,是列表显示通信录*/
break;
case 4:search(); /*输入4,进入search()程序,搜索一个街道*/
break;
case 5:save(); /*输入5,保存列表到磁盘文件*/
break;
case 6:load(); /*输入6,从磁盘文件读入列表*/
break;
case 7:return(0);
}
}
}
/*选择一个选项*/
menu_select()
{
char s[20];
int c;
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);
return c;
}
/*输入名字和地址*/
void enter()
{
struct address *info,*dls_store();
for(;;){
info=(struct address *) malloc(sizeof(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;
int count;
{
char p[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);
}
/*产生一个又链接表,当一个新元素插入到列表的开始时,一个指向第一个元素的指针被返回*/
struct address *dls_store(i,top) /*存贮顺序*/
struct address *i;