C语言通讯录管理系统设计 第2页
图1 功能模块图
2.2.2 模块设计与介绍
对本系统的功能进行分析后可作如下的模块化设计:
输入模块实现功能:按顺序将有姓名(name )、街道(street)、城市(city)、邮编(eip)、国家(state)依次输入,并建立链表将其连接。当输入数据完毕时ESC或Enter,输入结束。
删除模块实现功能:在已经存储的文件中删除指定的通信录信息,并释放内存空间。删除所有相关通信录信息。
查找模块实现功能:在已经存储的文件中查找指定的通信录信息。可以按照查找货品姓名方法进行。
输出模块实现功能:在输入特定的文件名之后,输出该文件中所包含的全部通信录信息。
保存模块实现功能:进行上述操作后,都要进行保存操作,链表中的信息以文件形式被长期。保存。
载入模块实现功能:将磁盘上的数据文件载入链表。
主序模块实现功能:完成系统的界面处理,包括开始界面和主菜单界面2.3 算法设计
2.3.1 Add( )增加模块
输入模块,其实就是一个建立链表的操作模块。
建立链表的具体操作就是逐一输入各结点数据,并建立其前后相链的关系。图2 增加模块流程图
void add()
{
struct address *info;
for (;;){
info=(struct address *)malloc(sizeof(list_entry));
if (!info){
printf("\nout of memory");
return;
}
inputs("\nName:",info->name,15);
if (!info->name[0]) break;
inputs("Street:",info->street,15);
inputs("City:",info->city,15);
inputs("State:",info->state,15);
inputs("Eip:",info->eip,15);
start=dls_store(info,start);
}
2.3.2 Delet( )删除模块
删除模块:删除链表节点,通过此节点指针的上一个节点找到此节点next指针,删除节点指针p和后续节点指针p->next,后把next指向p->next。在释放p指针。要完成的是链表的删除操作,只需修改链表中要删除结点的前一个结点的链指针。使之指向被删除结点的后面一个结点即可。
delete()
{
struct address *info;
char s[80];
printf("\nInput name(delete):");
gets(s);
info=find(s);
if (info) {
if (start==info){
start=info->next;
if (start)
start->prior=NULL;
else
last=NULL;
}
else{
info->prior->next=info->next;
if(info!=last)
info->prior->next=info->prior;
else
last=info->prior;
}
free(info);
}
}
struct address *find(char *name)
{
struct address *info;
info=start;
while(info){
if(!strcmp(name,info->name)) return info;
info=info->next;
}
printf("Name not found\n");
return NULL;}
上一页 [1] [2] [3] [4] [5] [6] 下一页