通讯录管理系统设计.docx

上传人:b****3 文档编号:4930550 上传时间:2022-12-11 格式:DOCX 页数:21 大小:227.53KB
下载 相关 举报
通讯录管理系统设计.docx_第1页
第1页 / 共21页
通讯录管理系统设计.docx_第2页
第2页 / 共21页
通讯录管理系统设计.docx_第3页
第3页 / 共21页
通讯录管理系统设计.docx_第4页
第4页 / 共21页
通讯录管理系统设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

通讯录管理系统设计.docx

《通讯录管理系统设计.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统设计.docx(21页珍藏版)》请在冰豆网上搜索。

通讯录管理系统设计.docx

通讯录管理系统设计

一.需求分析

设计题目:

实现通讯录管理系统

设计要求:

自学C语言中有关链表及外部文件的内容,设计出通讯录管理系统。

要求如下所述:

建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;;

能够提供添加、删除和修改通讯录信息的功能;

能够提供按不同方式查询的功能;如按姓名或年龄、电话等查询;

将通讯录保存在文件中;

能够按表格方式输出通讯录信息。

系统功能需求分析:

由于通讯录涉及到多个不同类型的数据组合成一个有机的整体,故考虑到使用结构体来表述。

又链表能够动态地进行存储分配的一种结构,根据需要开辟新的内存,没有浪费系统的内存资源,故采用链表结构。

由于系统比较复杂,采用模块化方式可以大大减少编译时的困难。

整个程序包括主函数在内共使用了13个函数,分别实现了,创建、查找、删除、存储、读取等功能。

二.概要设计

系统总体设计框架及系统功能模块图:

三.详细设计:

主要功能模块的算法设计及工作流程图:

.创建通讯录:

通过对结构体中各个变量相应的赋值达到创建通讯录的目的。

通过对malloc的应用以及链表的结构可以连续的进行多组通讯录的建立。

N-S流程图:

 

.插入新条目:

插入一个新的条目可以通过调用创建通讯录时的enter函数即可,加入了读取和保存函数。

N-S流程图:

.删除条目:

利用一个strcmp函数找到应该删除的项,新建两个节点,将删除后的前后两个节点连接起来,使断开的链表连续。

最后使用free()函数达到删除的目的。

N-S流程图:

.查找条目:

利用strcmp函数可以查找到自己想要的条目。

使用了两个函数组合的形式达到了查找的目的。

N-S流程图:

.find():

.search():

.显示条目:

读取存储的文件后,输出第一个节点后,可以利用结构体中链表的特性*next指向下一点,从而很方便将整个链表输出。

N-S流程图:

.保存:

使用fopen,fclose,fwrite等函数可以实现保存文件功能。

N-S流程图:

四.主要源程序代码:

#include

#include

#include

#include

structaddress

{

charnum[30];

charname[50];

charage[10];

charphone[50];

charadd[50];

charemail[50];

structaddress*next;

};

structaddress*head;

inti;

intmenu_select()

{

inta;

charc[20];

printf("\t请选择功能:

\n\n");

printf("\t1.新建并输入通讯录\n");

printf("\t2.添加记录\n");

printf("\t3.按姓名查找通讯地址\n");

printf("\t4.删除一个人的记录\n");

printf("\t5.显示通讯录\n");

printf("\t0.退出\n");

do

{

printf("\t请输入数字选择对应的功能:

");

scanf("%d",&a);

gets(c);

}while(a<0||a>5);

returna;

}

voidinputs(char*prompt,char*s,unsignedcount)

{

charp[255];

do

{

printf(prompt);

gets(p);

if(strlen(p)>count)

printf("\t输入越界了!

\n");

}while(strlen(p)>count);

strcpy(s,p);

}

structaddress*put_in(structaddress*i,structaddress*head)

{

structaddress*pbefore,*p;

if(head==NULL)

{

head=i;

head->next=NULL;

returnhead;

}

p=head;

pbefore=NULL;

while(p)

{

if(strcmp(p->name,i->name)<0)

{

pbefore=p;

p=p->next;

}

else

{

if(p==head)

{

i->next=head;

head=i;

returnhead;

}

pbefore->next=i;

i->next=p;

returnhead;

}

}

pbefore->next=i;

i->next=NULL;

returnhead;

}

voidenter()

{

structaddress*info;

while

(1)

{

info=(structaddress*)malloc(sizeof(structaddress));

if(!

info)

{

printf("\t内存不足!

\n");

return;

}

inputs("\t请输入姓名(输入为空时结束):

",info->name,49);

if(!

*info->name)

{

free(info);

printf("\n\n\t输入通讯记录结束!

\n\n");

return;

}

inputs("\t请输入编号:

",info->num,29);

inputs("\t请输入年龄:

",info->age,9);

inputs("\t请输入电话:

",info->phone,49);

inputs("\t请输入地址:

",info->add,49);

inputs("\t请输入电邮:

",info->email,49);

head=put_in(info,head);

}

}

voidsave()

{

structaddress*info;

FILE*fp;

charfilename[80]="love";

if(head)

{

if(!

(fp=fopen(filename,"wb")))

{

printf("\t发生异常,请重试!

\n");

exit(0);

}

printf("\t正在保存文件!

\n");

info=head;

while(info)

{

fwrite(info,sizeof(structaddress),1,fp);

info=info->next;

}

fclose(fp);

}

else

printf("\t目前没有通讯信息可以保存!

\n\n");

}

voiddisplay(structaddress*info)

{

printf("\t%2d.编号:

%s\n",++i,info->num);

printf("\t姓名:

%s\n",info->name);

printf("\t年龄:

%s\n",info->age);

printf("\t电话:

%s\n",info->phone);

printf("\t地址:

%s\n",info->add);

printf("\t电邮:

%s\n",info->email);

printf("\n");

}

voidload(char*filename)

{

structaddress*info,*pbefore=NULL;

FILE*fp;

while(head)

{

info=head;

head=head->next;

free(info);

}

if(!

(fp=fopen(filename,"rb")))

{

printf("\t发生异常,请重试!

\n");

return;

}

printf("\t正在装入文件,请等待!

\n");

info=(structaddress*)malloc(sizeof(structaddress));

if(!

info)

{

printf("\t内存不足!

\n");

return;

}

head=info;

while(!

feof(fp))

{

if(fread(info,sizeof(structaddress),1,fp)!

=1)

break;

info->next=(structaddress*)malloc(sizeof(structaddress));

if(!

info->next)

{

printf("\t内存不足!

\n");

return;

}

pbefore=info;

info=info->next;

}

pbefore->next=NULL;

free(info);

printf("\t已成功装入文件!

\n\n");

fclose(fp);

}

voidlist()

{

structaddress*info;

charfilename[80]="love";

load(filename);

i=0;

info=head;

while(info)

{

display(info);

info=info->next;

}

printf("\n\n");

}

structaddress*find()

{

structaddress*info;

charfilename[80]="love";

charname[20];

while(head)

{

info=head;

head=head->next;

free(info);

}

load(filename);

info=head;

inputs("\t请输入你想要找的姓名:

",name,19);

while(info)

{

if(!

strcmp(name,info->name))

returninfo;

info=info->next;

}

returnNULL;

}

voidsearch()

{

structaddress*info;

if(info=find())

{

printf("\n\n\t查询结果为:

\n\n");

printf("\t编号:

%s\n",info->num);

printf("\t姓名:

%s\n",info->name);

printf("\t年龄:

%s\n",info->age);

printf("\t电话:

%s\n",info->phone);

printf("\t地址:

%s\n",info->add);

printf("\t电邮:

%s\n",info->email);

printf("\n");

}

else

printf("\t查无此人!

\n\n");

}

structaddress*tell(char*name)

{

structaddress*info;

info=head;

while(info)

{

if(!

strcmp(name,info->name))

returninfo;

info=info->next;

}

returnNULL;

}

voidresave(char*filename)

{

structaddress*info;

FILE*fp;

if(!

(fp=fopen(filename,"wb")))

{

printf("\t发生错误,请重试!

\n");

return;

}

if(head)

{

printf("\t正在更新通讯录数据!

\n");

info=head;

while(info)

{

if(fwrite(info,sizeof(structaddress),1,fp)!

=1)

return;

info=info->next;

}

printf("\t成功更新通讯录!

\n");

fclose(fp);

}

else

printf("\t已经没有了通讯录信息!

\n\n");

}

voiddel()

{

structaddress*info,*pbefore=NULL,*p;

charname[20],filename[80]="love";

load(filename);

if(!

head)return;

inputs("\t请输入要删除的姓名:

",name,19);

info=tell(name);

if(info)

{

p=head;

while(p!

=info)

{

pbefore=p;

p=p->next;

}

if(p==head)

head=head->next;

else

pbefore->next=p->next;

free(info);

resave(filename);

printf("\t已成功删除名字为%s的通讯记录!

\n",name);

}

else

printf("\t查无此人!

\n");

}

voidinsert()

{

charfilename[80]="love";

load(filename);

if(!

head)return;

enter();

resave(filename);

}

voidmain()

{

head=NULL;

structaddress*t=NULL;

while

(1)

{

switch(menu_select())

{

case1:

enter();;save();break;

case2:

insert();break;

case3:

search();break;

case4:

del();break;

case5:

list();break;

case0:

exit(0);break;

while(head)

{

t=head;

head=head->next;

free(t);

}

printf("\t程序已结束!

\n");

exit(0);

}

}

}

五.调试分析:

请选择功能:

1.新建并输入通讯录

2.添加记录

3.按姓名查找通讯地址

4.删除一个人的记录

5.显示通讯录

0.退出

请输入数字选择对应的功能:

1

请输入姓名(输入为空时结束):

tom

请输入编号:

1

请输入年龄:

19

请输入电话:

12345

请输入地址:

wust

请输入电邮:

123@

正在保存文件!

请选择功能:

1.新建并输入通讯录

2.添加记录

3.按姓名查找通讯地址

4.删除一个人的记录

5.显示通讯录

0.退出

请输入数字选择对应的功能:

2

正在装入文件,请等待!

已成功装入文件!

请输入姓名(输入为空时结束):

jack

请输入编号:

2

请输入年龄:

20

请输入电话:

56789

请输入地址:

wust

请输入电邮:

234@

正在更新通讯录数据!

成功更新通讯录!

请选择功能:

1.新建并输入通讯录

2.添加记录

3.按姓名查找通讯地址

4.删除一个人的记录

5.显示通讯录

0.退出

请输入数字选择对应的功能:

5

正在装入文件,请等待!

已成功装入文件!

1.编号:

2

姓名:

jack

年龄:

20

电话:

56789

地址:

wust

电邮:

234@

2.编号:

1

姓名:

tom

年龄:

19

电话:

12345

地址:

wust

电邮:

123@

请选择功能:

1.新建并输入通讯录

2.添加记录

3.按姓名查找通讯地址

4.删除一个人的记录

5.显示通讯录

0.退出

请输入数字选择对应的功能:

3

正在装入文件,请等待!

已成功装入文件!

请输入你想要找的姓名:

tom

查询结果为:

编号:

1

姓名:

tom

年龄:

19

电话:

12345

地址:

wust

电邮:

123@

请选择功能:

1.新建并输入通讯录

2.添加记录

3.按姓名查找通讯地址

4.删除一个人的记录

5.显示通讯录

0.退出

请输入数字选择对应的功能:

4

正在装入文件,请等待!

已成功装入文件!

请输入要删除的姓名:

tom

正在更新通讯录数据!

成功更新通讯录!

已成功删除名字为tom的通讯记录!

请选择功能:

1.新建并输入通讯录

2.添加记录

3.按姓名查找通讯地址

4.删除一个人的记录

5.显示通讯录

0.退出

请输入数字选择对应的功能:

5

正在装入文件,请等待!

已成功装入文件!

1.编号:

2

姓名:

jack

年龄:

20

电话:

56789

地址:

wust

电邮:

234@

请选择功能:

1.新建并输入通讯录

2.添加记录

3.按姓名查找通讯地址

4.删除一个人的记录

5.显示通讯录

0.退出

请输入数字选择对应的功能:

0

六.课程设计小结:

通过对这个课程设计任务的完成,我对C语言的学习有了进一步的提高。

第一次对这种比较大的程序的设计,遇到了许多的困难。

而以前在编写小程序时能够避免的小错误(如分号等)在这次编写中出现了很多。

在设计实现要求的一些功能时碰到了很多的障碍,但最后在同学和朋友的帮助下终于还是实现了。

这也说明编程的能力就是在程序的一个个错误的修正中得到提高,程序亦会随之趋近于完善。

C语言是计算机编程语言中最基础的语言,务必要熟练掌握。

在今后的学习中,也要多多练习编写这样的程序,使自己的能力得到更大的进步。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1