数据结构通讯录系统源代码Word格式.docx
《数据结构通讯录系统源代码Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构通讯录系统源代码Word格式.docx(20页珍藏版)》请在冰点文库上搜索。
k=k->
size++;
returnsize;
/*返回其大小*/
voidDataWrite(SLNode*head)
inti;
FILE*fp;
fp=fopen("
Addresslist.dat"
"
wb+"
//打开文件,覆盖以前的文件
for(i=0;
i<
Length(head);
i++)
fwrite(p,sizeof(SLNode),1,fp);
p=p->
fclose(fp);
//关闭文件
voidLoad(SLNode*head)/*初始化*/
SLNode*q,*p,*m;
intcount=0;
rb"
//以读的方式打开二进制文件
//rewind(fp);
if(fp==NULL)
fp=fopen("
if(fp!
=NULL)
{
printf("
通讯录打开失败!
创建新的通讯录!
}
else
创建新的通讯录失败!
exit(0);
else
q=(SLNode*)malloc(sizeof(SLNode));
while(fread(q,sizeof(SLNode),1,fp))
//fread(q,sizeof(SLNode),1,fp);
if(ferror(fp))
{
printf("
error!
break;
}
p=head;
m=(SLNode*)malloc(sizeof(SLNode));
strcpy(m->
name,q->
name);
telnum,q->
telnum);
address,q->
address);
count++;
m->
next=p->
/*将新结点插入队头结点*/
p->
next=m;
memset(q,'
\0'
sizeof(SLNode));
printf("
\t\t\t\t通讯录总联系人数:
%d\n"
Length(head));
intPrintAll(SLNode*head)/*打印所有出所有联系人信息*/
SLNode*q;
q=head->
if(q==NULL)
通讯录为空!
return-1;
for(i=0;
i<
i++)//逐个打印联系人信息
编号:
%d\t姓名:
%s\t号码:
%s\t地址:
%s\n"
i+1,q->
q=q->
return0;
voidANParam(SLNode*head)
/*在带头结点的单链表head的第i(0《i《size)个结点前插入一个存放数据元素x的结点*/
/*插入成功则返回1,失败则返回0*/
SLNode*p,*q;
q=(SLNode*)malloc(sizeof(SLNode));
/*生成新结点由指针p指示*/
请输入新联系人姓名:
"
fflush(stdin);
gets(q->
请输入新联系人的电话号码:
请输入新联系人的地址:
p=head;
q->
p->
next=q;
DataWrite(head);
//将信息以覆盖方式重新写入通讯录中
添加成功!
voidAWParam(SLNode*head,chartelnum[11],charname[10],charaddress[256])//带形参的添加函数
strcpy(q->
name,name);
telnum,telnum);
address,address);
voidDelete(SLNode*head)/*删除带头结点的单链表head的第i(1~n,n为结点个数)个结点*/
/*删除结点的元素有x带回,删除成功返回1,否则返回0*/
SLNode*p,*s;
intchoice,i,m,ret;
if(PrintAll(head))//如果通讯录为空,则无法删除,退出返回主菜单
return;
m=Length(head);
//求当前通讯录人数
请输入你要删除联系人的前面编号:
ret=scanf("
%d"
&
choice);
while(!
ret||choice>
m||choice<
1)//判断输入是否为数字,是否为,若否,则重新输入
请正确输入你要删除联系人的前面编号!
fflush(stdin);
ret=scanf("
p=head;
i=0;
//由于我们打印出来时是由1开始,所以此处定义为0
while(p->
next!
next->
i<
(choice-1))//查找所选择编号前一个结点
p=p->
i++;
s=p->
next=p->
free(s);
//将更新的数据重新写入文件中
删除成功!
voidSBName(SLNode*head)/*查找函数,如果不存在,可添加*/
intchoice;
chartelnum[11],name[10],address[256];
p=head->
请输入你要查找联系人的姓名:
gets(name);
if(!
strcmp(p->
name,name))
姓名:
%s\t电话:
p->
name,p->
telnum,p->
break;
p=p->
if(p==NULL)
错误!
所查找联系人不在通讯录,是否将该联系人添加至通讯录?
请按0确认添加,否则不添加\n"
scanf("
//判断输入是否为数字,且数字范围是1~m之间,否则重新输入
choice)
该联系人姓名:
name);
请输入该联系人的电话:
fflush(stdin);
gets(telnum);
请输入该联系人的地址:
gets(address);
AWParam(head,telnum,name,address);
voidSBTell(SLNode*head)/*查找函数,如果不存在,可添加*/
chartelnum[20],name[10],address[256];
请输入你要查找联系人的号码:
gets(telnum);
telnum,telnum))
该联系人电话号码:
telnum);
请输入该联系人的姓名:
gets(name);
voidDestroy(SLNode**head)
/*因为单链表的结点空间是在程序运行中申请的,而系统只负责自动收回程序中静态分配的内存空间,所以在程序退出前释放动态申请的内存空间*/
SLNode*p,*p1;
p=*head;
while(p!
=NULL)/*通过循环释放所有的动态开辟的内存空间*/
p1=p;
free(p1);
*head=NULL;
voidAlter(SLNode*head)
intchoice,num,i,m;
if(PrintAll(head))//通讯录为空无法进行修改,退出返回主菜单
请输入你要更改的信息人的前面编号:
//获取当前通讯录人数
i=scanf("
num);
//判断是否输入数字
while(!
i||num>
m||num<
1)//判断输入是否为数字,若否,则重新输入
请正确输入你要更改的信息人的前面编号!
//p指向第一个联系人
for(i=0;
if((i+1)==num)
lable1:
请输入你要更改的信息:
1、姓名\t2、号码\t3、地址\t0、全部修改\n"
m=scanf("
while(!
m||choice>
3||choice<
0)//判断输入是否为数字,若否,则重新输入
请正确输入选项!
fflush(stdin);
m=scanf("
switch(choice)
case1:
请输入新姓名:
gets(p->
case2:
请输入新号码:
case3:
请输入新地址:
default:
以下是刚更改的信息,请确认:
是否继续更改该联系人?
继续修改请按0,否则保存修改!
输入:
scanf("
if(!
gotolable1;
else
DataWrite(head);
//将修改后的文件全部写入通讯录中
intmenu()
intret,i;
\t\t******************通讯录******************\n\n"
\t\t1、查找联系人\t"
2、添加联系人\n\n"
\t\t3、显示所有联系人信息\t"
4、删除联系人\n\n"
\t\t5、更改联系人信息\t"
6、退出\n\n"
\t\t**************请选择相应功能**************\n"
\t\t输入对应功能编号:
ret);
i||ret>
6||ret<
1)//判断输入是否为数字,若否,则重新输入
\t\t请正确输入功能编号!
i=scanf("
returnret;
voidDeleteAll(SLNode*head)
//已创建新的文件覆盖以前的文件,一达到清除目的
Destroy(&
head);
Initiate(&
//初始化单链表,创建新的头结点
清除成功!
测试主函数:
#include<
stdio.h>
stdlib.h>
string.h>
windows.h>
#include"
LinkList.h"
intmain()
intchoice=0,ret;
SLNode*head;
chars[500]="
\t\t**谢谢使用**\n"
a[]="
\t\t华中农业大学楚天学院通讯录系统\n"
;
system("
title华中农业大学楚天学院通讯录系统"
color30"
while(choice<
strlen(a))
putchar(a[choice]);
Sleep(80);
choice++;
Load(head);
while
(1)
switch(menu())
case1:
system("
cls"
if(head->
next==NULL)
break;
请选择查找方式:
1、姓名\t2、电话号码\t3、退出\n"
ret=scanf("
while(!
3||choice<
1)
{
printf("
输入有误!
请正确选择查找方式!
fflush(stdin);
ret=scanf("
}
switch(choice)
case1:
SBName(head);
break;
case2:
SBTell(head);
case3:
default:
case2:
ANParam(head);
case3:
PrintAll(head);
case4:
请选择删除方式:
1、清空通讯录\t2、删除指定联系人\n"
ret=scanf("
ret||choice<
1||choice>
2)
输入错误!
请正确选择删除方式!
if(choice==1)
DeleteAll(head);
elseif(choice==2)
Delete(head);
case5:
Alter(head);
case6:
choice=0;
while(choice<
strlen(s))
putchar(s[choice]);
Sleep(80);
choice++;
default:
请重新输入!
//清除动态申请空间
pause"
return0;