通讯录的制作(数据结构C语言版)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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){

相关文档
最新文档