数据结构 通讯录
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计报告
2010年01月03日
目录
1、需求分析 (3)
问题描述 (3)
基本要求 (3)
2、概要设计 (3)
数据结构 (3)
程序模块 (3)
3、详细设计 (4)
4、测试与分析 (8)
5、总结 (8)
6、附录(原程序清单) (10)
1.需求分析
数据结构课程主要是研究非数值计算的程序设计中所出现的计算机操作对象以及它们之间的关系和操作的学科。学习数据结构是为了将实际问题中所涉及的对象在计算机表示出来并对它们进行处理。通过课程设计可以提高思维能力、促进综合应用能力和专业素质的提高。
1.1问题描述
现代人社会交往越来越多,人们随身携带有通讯录,对通讯录进行必要的管理,对人们实现快速查询记录提供了极大的方便。考虑到要对通讯录进行快速检索,所以采用C语言来实现通讯录查找系统。要求的模块包括:插入、查找、删除、修改、保存。人机界面友好,使用图形化界面,菜单的选择用动画显示。
1.2基本要求
(1)输入的形式与输入值的范围
name 字符
phone 字符
ad 字符
(2)输出的形式
姓名、电话号码及住址以字符输出
(3)程序所能达到的功能
1)记录姓名、地址、电话项
2)查找并显示给定电话号码的记录
2.概要设计
1)数据结构
依据给定的通讯录信息和数据格式,链表结点必须用结构实现。结构类型的层次结构:typedef struct node
{char name[20];
char ad[50];
char phone[20];
struct node *next;
}slink;
2)程序模块
主函数
Main()
建立通讯录
slink * creslink(int n)
通讯者的插入
int insert(slink *head,char n[],slink *x)
通讯者的删除
int delete(slink *head,char n[])
通讯者的查询
int search(slink *head,char n[])
通讯录表的输出
int output(slink *head)
3.详细设计
通讯录的建立
slink * creslink(int n)
{slink *head,*p,*s;
int i;
if(n<1) return NULL;
p=head=(slink *)malloc(sizeof(slink));
printf("请依次输入联系人的姓名、地址和电话:\n"); for(i=1;i<=n;i++)
{s=(slink *)malloc(sizeof(slink));
fflush(stdin);
scanf("%s%s%s",&s->name,&s->ad,&s->phone);
p->next=s;
p=s;
}
p->next=NULL;
printf("通讯录已保存\n");
printf("按任意键继续...\n");
getch();
return head;
}
通讯者的插入
int insert(slink *head,char n[],slink *x) {slink *p,*q;
p=head;
while(p->next!=NULL)
{p=p->next;
if(strcmp(p->name,n)==0)
{q=(slink *)malloc(sizeof(slink)); strcpy(q->name,x->name);
strcpy(q->ad,x->ad);
strcpy(q->phone,x->phone);
q->next=p->next;
p->next=q;
printf("插入成功\n");
printf("按任意键继续...\n");
getch();
return 1;}
}
printf("所要插入的位置不存在\n"); printf("按任意键继续...\n");
getch();
return 0;
}
通讯者的删除
int delete(slink *head,char n[]) {slink *p,*q;
p=head;
while(p->next!=NULL)
{q=p;
p=p->next;
if(strcmp(p->name,n)==0)
{q->next=q->next->next;
printf("删除成功!\n");
printf("按任意键继续...\n");
getch();
return 1;}
}
return 0;
}
通讯者的查询
int search(slink *head,char n[])
{slink *p;
p=head;
while(p->next!=NULL)
{p=p->next;
if(strcmp(p->name,n)==0)
{printf("姓名地址电话\n");
printf("%-20s%-30s%-20s \n",p->name,p->ad,p->phone); printf("查询成功\n");
printf("按任意键继续...\n");
getch();
return 1;
}
}
printf("通讯录中没有此联系人!\n");
printf("按任意键继续...\n");
getch();
return 0;
}
通讯录表的输出
int output(slink *head)
{slink *p;
if(head->next==NULL)
{printf("通讯录空!\n");
printf("按任意键继续...\n");
getch();
return 0;}
p=head->next;
printf("姓名地址电话\n");
while(p!=NULL)
{printf("%-20s%-30s%-20s\n",p->name,p->ad,p->phone); p=p->next;}
printf("输出成功\n");
printf("按任意键继续...\n");
getch();
return 1;
}