通讯录管理.docx

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

通讯录管理.docx

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

通讯录管理.docx

通讯录管理

2通讯录管理

2.1系统分析

2.1.1功能需求分析

通讯录管理系统的开发工具采用VisualC++6.0,主要功能是对联系人的信息进行添加、显示、查找、删除、更新、保存等功能。

系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用对应函数完成系统提供的管理功能。

主要功能需求描述如下:

1.系统主控平台:

允许用户选择想要进行的操作,包括输入添加联系人信息、显示联系人信息、查找联系人信息、删除联系人信息、更新联系人信息、保存到文件和退出系统等。

2.添加联系人信息:

用户根据提示输入联系人的姓名、性别、电话、手机、传真、地址及邮编等。

输入完一条联系人信息,提示用户是否继续输入下一条联系人信息或者继续其他操作。

允许输入多条联系人的信息。

输入完的联系人信息暂时保存在单链表中,等待下一步的操作。

3.显示联系人信息:

在选择了显示联系人信息后,将刚输入的联系人信息从单链表中调出来显示,如果没有数据,则提示无联系人信息。

4.查找联系人信息:

可以根据联系人姓名从单链表中对所有联系人的信息进行查询,如果没有查询到任何信息,系统给出提示信息。

5.删除联系人信息:

首先提示用户输入要删除的联系人的姓名,系统根据用户输入的信息在单链表中查到,如果找到,直接删除该联系人全部信息,如果没找到,系统给出提示信息。

6.修改联系人信息:

首先提示用户输入要进行修改操作的学号,如果单链表中有该学生的信息存在,则提示用户输入要修改的联系人的信息,并将修改结果重新存储在单链表中。

如果没有找到要修改的联系人信息,系统将给出提示。

7.文件保存:

本模块的功能是将单链表中的信息存储到文本文件中。

系统将提示用户输入文本文件名,确认后将单链表中存储的联系人的信息。

8.退出,退出系统。

2.1.2功能模块设计

1.添加联系人(add函数)

首先建立单链表,调用input_person()函数输入联系人信息,将用户输入的联系人信息存储到单链表中,提示用户是否继续输入,用户输入“Y”或“y”,则调用add()函数实现添加联系人的操作。

用户输入“N”或“n”,则返回主菜单界面。

2.显示联系人

将单链表中的联系人信息打印出来,单链表不为空时,循环调用print_person()函数打印每个联系人信息。

3.查找联系人

首先提示用户输入要查找的联系人姓名,根据用户输入的姓名在单链表中利用strcmp()函数逐个查找。

如果找到该联系人,调用print_person()函数显示查找到的联系人信息,如果没找到给出提示信息。

4.删除联系人

首先提示用户输入要删除的联系人姓名,根据用户的输入在单链表中查找该联系人是否存在,如果存在,调用print_person()函数显示该联系人信息,提示用户是否确认删除该联系人,用户输入“Y”或“y”,则删除该联系人,否则提示用户是否继续删除的操作,用户输入“Y”或“y”,则在此调用delete()函数进行删除操作。

5.更新联系人

首先提示用户输入要更新的联系人姓名,根据用户的输入在单链表中查找该联系人是否存在,如果存在,先调用print_person()函数显示该联系人信息,在调用input_person()函数输入新的数据。

最后提示用户是否继续更新的操作,用户输入“Y”或“y”,则在此调用update()函数进行删除操作。

6.保存到文件

首先提示用户输入要保存的文件名,文件将保存在程序目录下。

系统将单链表中的联系人信息保存在刚才输入的文件中,并给出“保存成功”的提示信息。

7.退出系统

将单链表中的数据全部释放掉,防止内存泄露,退出系统。

通讯录管理的功能模块图如图4-1所示。

2.2设计说明

2.2.1预处理

#include/*标准输入输出函数库*/

#include/*标准函数库*/

#defineMAX_NAME11

#defineMAX_SEX3

#defineMAX_BIRTHDAY9

#defineMAX_TEL21

#defineMAX_MOBILE21

#defineMAX_FAX21

#defineMAX_ADDRESS101

#defineMAX_POSTAL_CODE7

2.2.2数据类型定义

定义一个结构体类型_person,使用typedef语句定义一个新类型person,结构体中包括联系人姓名、性别、出生日期、电话、手机、传真、地址及邮编共8个成员。

typedefstruct_person

{

charname[MAX_NAME];/*姓名*/

charsex[MAX_SEX];/*性别*/

charbirthday[MAX_BIRTHDAY];/*出生日期*/

chartel[MAX_TEL];/*电话*/

charmobile[MAX_MOBILE];/*手机*/

charfax[MAX_FAX];/*传真*/

charaddress[MAX_ADDRESS];/*地址*/

charpostal_code[MAX_POSTAL_CODE];/*邮编*/

}person;

定义一个结构体类型_addr_book,使用typedef语句定义一个新类型addr_book,结构体中包括一个存储联系人基本信息的结构体变量per和指向下一个联系人的指针变量。

typedefstruct_addr_book

{

personper;/*联系人基本信息*/

struct_addr_book*next;

}addr_book;

定义一个头结点,将其初始化为空。

addr_book*first=NULL;/*addr_book结构体,链表的头结点,置空*/

2.2.3函数及变量声明

1.主要处理函数声明

函数声明部分包括了主要函数的声明。

主要有添加联系人函数、显示联系人信息函数、查找联系人函数、删除联系人函数、更新联系人函数、保存到文件和退出函数8个功能函数。

voidadd();/*添加联系人函数*/

voidshow();/*显示联系人函数*/

voidsearch();/*查找联系人函数*/

voiddelete();/*删除联系人函数*/

voidupdate();/*更新联系人函数*/

voidsave();/*保存到文件*/

voidquit();/*退出*/

2.辅助函数声明

为了完成系统功能,特编写了一些辅助功能的小函数,包括打印主菜单函数、取链表中最后一个值的函数、打印联系人信息函数和输入联系人信息函数。

下面是这部分函数的声明。

intprint_menu();/*打印主菜单界面*/

addr_book*get_last(addr_book*from);/*取得链表最后一个值*/

voidprint_person(person*p);/*显示一个联系人信息*/

voidinput_person(person*p);/*提示输入一个联系人具体信息*/

3.常量声明

以下是主菜单要显示的字符的声明。

charmenu[]=

"+=====================================================+\n"

"|通讯簿管理系统|\n"

"+-----------------------------------------------------+\n"

"|1添加联系人|\n"

"|2显示所有联系人|\n"

"|3查找联系人|\n"

"|4删除联系人|\n"

"|5更新联系人|\n"

"|6保存联系人|\n"

"|7退出系统|\n"

"+=====================================================+\n";

2.2.4主函数

主函数中,首先调用打印主菜单界面函数print_menu(),打印主菜单,等待用户输入1~7中的任一数值,根据用户的输入在switch语句中选择相应的操作,分别是用户输入1,调用添加联系人函数(add())添加联系人信息,输入2调用显示联系人函数(show())显示已输入的联系人信息,输入3调用查找联系人函数(search())按姓名查找联系人信息,输入4调用删除联系人函数(delete())删除联系人信息,输入5调用更新联系人函数(update())修改联系人信息,输入6调用保存函数(save())保存联系人信息,输入7调用退出函数(quit())退出系统。

程序清单:

intmain()

{

intflg=1;

while(flg)

{

switch(print_menu()){

case1:

add();

break;

case2:

show();

break;

case3:

search();

break;

case4:

delete();

break;

case5:

update();

break;

case6:

save();

break;

case7:

quit();

break;

}

}

}

2.2.5主要函数功能介绍

1.添加新记录

函数名称:

add。

函数功能:

用户在主菜单中选择1的时候调用此函数,用来输入联系人的基本信息。

处理过程:

(1)首先创建一个结构体指针变量new_addr,并将其next指针置空,其余信息使用memset函数置0。

(2)判断单链表是否有数据,如果有,即first==NULL,则置new_addr为头结点;否则调用函数get_last找到单链表中的最后一个结点last,将new_addr连接到最后一个结点last的后面;

(3)调用函数input_person完成一个联系人信息的输入;

(4)提示用户是否继续输入联系人信息,如果用户输入“y”或“Y””,表示继续输入,则调用本函数;否则返回主函数。

程序清单:

voidadd()

{

charinput='N';

addr_book*last=NULL;

addr_book*new_addr=(addr_book*)malloc(sizeof(addr_book));

/*将new_addr中的前addr_book个长度的初值设置为0*/

memset(new_addr,0,sizeof(addr_book));

new_addr->next=NULL;

if(first==NULL)

{

first=new_addr;

}

else

{

last=get_last(first);

last->next=new_addr;

}

input_person(&(new_addr->per));

printf(">继续输入?

(Y继续,N返回菜单)");

getchar();

input=getchar();

if(input=='Y'||input=='y')

{

add();

}

}

2.显示联系人信息

函数名称:

show。

函数功能:

用户在主菜单中选择2的时候调用此函数,用来显示联系人的基本信息。

处理过程:

(1)首先定义一个指针变量p指向头结点first;

(2)在单链表未结束时((p!

=NULL)反复调用函数print_person逐个打印联系人信息;

(3)如果单链表中没有数据,系统给出提示。

(4)返回主函数。

程序清单:

voidshow()

{

inti=0;

addr_book*p=first;

while(p!

=NULL)

{

i++;

printf("*****第%d个联系人***********************************\n",i);

print_person(&(p->per));

p=p->next;

}

if(i==0)

{

printf("没有联系人!

");

}

printf("按任意键返回菜单...");

getchar();

getchar();

}

3.查找联系人信息

函数名称:

search。

函数功能:

用户在主菜单中选择3的时候调用此函数,根据联系人姓名查找相关信息。

处理过程:

(1)首先定义一个指针变量p指向头结点first;

(2)输入要查找的联系人姓名,根据姓名在单链表中逐个查找联系人信息;如果找到,调用函数print_person显示该联系人信息,否则给出提示信息;

(3)提示用户是否查找,如果用户输入“y”或“Y”,表示继续查找,则调用本函数;否则返回主函数。

程序清单:

voidsearch()

{

intcount=0;

charinput='N';

charname[MAX_NAME]={0};

addr_book*p=first;

printf(">请输入要查找的联系人姓名(最大%d个字符):

",MAX_NAME-1);

scanf("%s",name);

while(p!

=NULL)

{

if(strcmp(p->per.name,name)==0)

{

print_person(&(p->per));

count++;

}

p=p->next;

}

if(count==0)

{

printf("没有找到姓名为%s的人.",name);

}

printf("继续查找吗?

(Y继续查找,N返回菜单)");

getchar();

input=getchar();

if(input=='Y'||input=='y')

{

search();

}

}

4.删除联系人信息

函数名称:

delete。

函数功能:

用户在主菜单中选择4的时候调用此函数,根据联系人姓名删除该联系人相关信息。

处理过程:

(1)首先定义一个指针变量p指向头结点first,定义一个p1,将其置空;

(2)输入要删除的联系人姓名,根据姓名在单链表中逐个查找联系人信息;如果没找到,系统给出提示信息,否则进行删除操作:

1)如果要删除的结点p是头结点,则将p->next赋值给first,即first=p->next,直接删除;

2)如果要删除的接点不是头结点,先设置p1指向头结点,然后在循环体中判断p1的后续结点是不是p,借助p1删除结点p,即p1->next=p->next;

3)释放结点p。

(3)提示用户是否删除操作,如果用户输入“y”或“Y”,表示继续删除,调用本函数;否则返回主函数。

程序清单:

voiddelete()

{

intcount=0;

charinput='N';

charname[MAX_NAME]={0};

addr_book*p=first;

addr_book*p1=NULL;

printf(">请输入要删除的联系人姓名(最大%d个字符):

",MAX_NAME-1);

scanf("%s",name);

while(p!

=NULL)

{

if(strcmp(p->per.name,name)==0)

{

print_person(&(p->per));

count++;

break;

}

p=p->next;

}

if(count==0)

{

printf("没有姓名为%s的人.",name);

}

else

{

printf("确定要删除姓名为[%d]的联系人么?

(Y确认,N取消)",name);

getchar();

input=getchar();

if(input=='Y'||input=='y')

{

if(p==first)

{

first=p->next;

}

else

{

p1=first;

while(p1!

=NULL)

{

if(p1->next==p)

{

p1->next=p->next;

break;

}

p1=p1->next;

}

}

free(p);

}

}

printf("继续删除其它联系人吗?

(Y继续删除,N返回菜单)");

getchar();

input=getchar();

if(input=='Y'||input=='y')

{

delete();

}

}

5.更新联系人信息

函数名称:

update。

函数功能:

用户在主菜单中选择5的时候调用此函数,输入联系人姓名,更新其相关信息。

处理过程:

(1)首先定义一个指针变量p,指向头结点first;

(2)输入要更新的联系人姓名,根据姓名在单链表中逐个查找联系人信息;如果找到,调用函数print_person显示该联系人信息,对于找到的联系人调用函数input_person更新其基本信息,如果没找到给出提示信息;

(3)提示用户是否更新的操作,如果用户输入“y”或“Y”,表示继续更新,则调用本函数;否则返回主函数。

程序清单:

voidupdate()

{

intcount=0;

charinput='N';

charname[MAX_NAME]={0};

addr_book*p=first;

printf(">请输入要更新的联系人姓名(最大%d个字符):

",MAX_NAME-1);

scanf("%s",name);

while(p!

=NULL)

{

if(strcmp(p->per.name,name)==0)

{

print_person(&(p->per));

count++;

break;

}

p=p->next;

}

if(count==0)

{

printf("没有找到姓名为%s的人.",name);

}

else

{

input_person(&(p->per));

}

printf("继续更新其它联系人吗?

(Y继续更新,N返回菜单)");

getchar();

input=getchar();

if(input=='Y'||input=='y')

{

update();

}

}

6.保存联系人信息

函数名称:

save。

函数功能:

用户在主菜单中选择6的时候调用此函数,将单链表中的联系人信息保存到文件中。

处理过程:

(1)首先定义一个指针变量p指向头结点first;

(2)输入文件名,在循环体中利用函数fprintf逐个将单链表中的联系人的信息保存到文件中;

(3)否则返回主函数。

程序清单:

voidsave()

{

FILE*fp;

charfile[100];

addr_book*p=first;

printf("请输入文件名:

");

scanf("%s",file);

fp=fopen(file,"w");

while(p!

=NULL)

{

fprintf(fp,"%s,%s,%s,%s,%s,%s,%s,%s\n",

p->per.name,p->per.sex,p->per.birthday,

p->per.tel,p->per.mobile,p->per.fax,p->per.address,p->per.postal_code);

p=p->next;

}

fclose(fp);

printf("保存成功!

\n按任意键返回菜单..\n");

getchar();

getchar();

}

/*退出*/

voidquit()

{

addr_book*pdel=first;

addr_book*p=NULL;

if(pdel==NULL)

{

exit(0);

}

/*如果pdel的next指针不为空,表示有下一条数据*/

/*先将p指向pdel,释放掉pdel,再将p重复给pdel*/

while(pdel->next!

=NULL)

{

p=pdel->next;

free(pdel);

pdel=p;

}

free(pdel);/*如果pdel的next指针为空,表示没有下一条数据,直接删除该结点*/

exit(0);

}

2.2.6辅助函数功能介绍

1.显示主菜单界面

函数名称:

print_menu。

函数功能:

显示主菜单界面。

处理过程:

等待用户输入1~7中的任一数据,如果用户输入的1~7之外的数据,则给出出错的提示信息,提示用户再次输入,直到输入正确为止,并将用户输入的值返回。

程序清单:

intprint_menu()

{

intselected=0;

system("cls");

printf(menu);

printf(">请选择[1-7]:

");

scanf("%d",&selected);

if(selected<1||selected>7)

{

printf("错误的选择!

(请输入1-7).按任意键继续...");

getchar();

getchar();

}

returnselected;

}

2.显示主菜单界面

函数名称:

input_person。

函数功能:

提示用户输入相关联系人信息。

程序清单:

intprint_menu()

{

intselected=0;

system("cls");

printf(menu);

printf(">请选择[1-7]:

");

scanf("%d",&selected);

if(selected<1||selected>7)

{

printf("错误的选择!

(请输入1-7).按任意键继续...");

getchar();

getchar();

}

returnselected;

}

intprint_menu()

{

intselected=0

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

当前位置:首页 > 党团工作 > 其它

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

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