通讯录管理系统071何荣贤.docx
《通讯录管理系统071何荣贤.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统071何荣贤.docx(18页珍藏版)》请在冰豆网上搜索。
通讯录管理系统071何荣贤
《数据结构》实验报告
题目:
实验七通讯录管理系统
学号:
2010810071
成
绩
班级:
计算1013
日期:
2011.12.13
姓名:
何荣贤
指导老师:
杨艳华
一、实验目的:
本次的实验目的在于使读者深入了解查找表的特性,掌握各种查找方法,以便在实际问题背景下灵活运用他们;并且回顾文件操作的使用。
二、实验环境:
本次试验在VC++环境下调试。
三、实验内容与完成情况:
1.问题描述
编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。
2.基本要求
一个完整的系统应具有以下功能:
⑴每个记录包含姓名、电话号码、住址等个人信息;
⑵将建立的通讯录以磁盘文件的形式存储,所有的通讯录管理活动均以文件操作的方式进
行;
⑶在查找通讯录中的记录时,以记录的“姓名”为查找关键字进行查找。
3.程序代码
#include
#include
#include
#include
#defineheader1"|---------------------电话簿-----------------------|\n"
#defineheader2"|num|name|phonenum|address|\n"
#defineheader3"|-------|----------|---------------|---------------|\n"
#defineend"|----------------------结束------------------------|"
#defineN100
typedefstructtele
{
intnum;
charname[10];
charphonenum[15];
charaddress[20];
}telebook;
voidmenu()
{
system("cls");
printf("\n\n\n");/*输出主菜单*/
printf("\t\t|*****欢迎进入电话薄管理系统!
*****|\n");
printf("\t\t|********************menu********************|\n");
printf("\t\t||\n");
printf("\t\t|1增加2读取|\n");
printf("\t\t||\n");
printf("\t\t|3查找4修改|\n");
printf("\t\t||\n");
printf("\t\t|5删除6排序|\n");
printf("\t\t||\n");
printf("\t\t|0退出|\n");
printf("\t\t|********************************************|\n");
}
voidprintheader()/*输出菜单头*/
{
printf(header1);
printf(header2);
printf(header3);
}
intadd(telebooktemp[])
{
inti;intm=0;
FILE*fp;
system("cls");
if((fp=fopen("D:
\\rex.txt","ab+"))==NULL)
{
printf("打开文件有误!
");
exit(0);
}
printf("每次输入一百个人的信息!
\n");
printf("如果输入0退出输入!
\n");
for(i=m;i<(100+m);i++)
{
printf("num:
");
scanf("%d",&temp[i].num);
if(temp[i].num==0)
break;
printf("name:
");
scanf("%s",&temp[i].name);
printf("phonenum:
");
scanf("%s",&temp[i].phonenum);
printf("address:
");
scanf("%s",&temp[i].address);
fwrite(&temp[i],sizeof(structtele),1,fp);
}
m+=100;
fclose(fp);
system("cls");
return0;
}
intread(telebooktemp[])
{
intcount,i;
FILE*fp;
system("cls");
if((fp=fopen("D:
\\rex.txt","ab+"))==NULL)
{
printf("打开文件有误!
");
exit(0);
}
printheader();
for(count=0;fread(&temp[count],sizeof(structtele),1,fp)==1;count++);/*读取文件内信息的个数。
*/
if(count==0)
printf("\n\n\n\t\t文件内没有信息!
\n\n\n");
for(i=0;iprintf("|%-7d|%-10s|%-15s|%-15s|\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].address);
printf(end);
fclose(fp);
return0;
}
intfind1(telebooktemp[])/*电话号码查询*/
{
inti,count,t=0;charn[20];
FILE*fp;
system("cls");
read(temp);
printf("\n");
if((fp=fopen("D:
\\rex.txt","ab+"))==NULL)
{
printf("打开文件有误!
");
exit(0);
}
printf("输入要查找的号码:
");
scanf("%s",n);
printf("\n\n");
printheader();
getchar();
for(count=0;fread(&temp[count],sizeof(structtele),1,fp)==1;count++);/*读取文件内信息的个数。
*/
for(i=0;i{
if(strcmp(temp[i].phonenum,n)==0)
{
t=1;
printf("|%-7d|%-10s|%-15s|%-15s|\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].address);
/*输出查询到的信息*/
}
}
if(t==0)
{
printf("\a\n\n\t\t没有要查找的信息..........!
\n\n\n");
printf(end);
return0;
}
printf(end);
fclose(fp);
return0;
}
intfind2(telebooktemp[])/*姓名查询*/
{
inti,count,t=0;
chara[20];
FILE*fp;
system("cls");
read(temp);
printf("\n");
if((fp=fopen("D:
\\rex.txt","ab+"))==NULL)
{
printf("打开文件有误!
");
exit(0);
}
printf("输入要查找的名字:
");
scanf("%s",a);
getchar();
printf("\n\n");
printheader();
for(count=0;fread(&temp[count],sizeof(structtele),1,fp)==1;count++);/*读取文件内信息的个数。
*/
for(i=0;i{
if(strcmp(temp[i].name,a)==0)
{
t=1;
printf("|%-7d|%-10s|%-15s|%-15s|\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].address);
/*输出查询到的信息*/
}
}
if(t==0)
{
printf("\a\n\n\t\t没有要查找的信息..............!
\n\n\n");
printf(end);
return0;
}
printf(end);
fclose(fp);
return0;
}
voidfind()
{
intn;
telebookmessage1[20];
system("cls");
printf("\n");
while
(1)
{/*输出查找函数主菜单*/
printf("\n\n\n\n");
printf("|-------查找功能------|\n");
printf("||\n");
printf("|1按电话号码查找|\n");
printf("||\n");
printf("|2按姓名查找|\n");
printf("||\n");
printf("|0退出|\n");
printf("||\n");
printf("|---------结束--------|\n");
printf("输入您的查找方式:
");
scanf("%d",&n);
switch(n)
{
case1:
find1(message1);break;
case2:
find2(message1);break;
case0:
return;break;
}
getchar();
system("cls");
}
}
intchange(telebooktemp[])
{
inti,count,t=0;
FILE*fp;
structtelene[10];
system("cls");
read(temp);
printf("\n");
printf("按序号修改\n");
if((fp=fopen("D:
\\rex.txt","ab+"))==NULL)
{
printf("打开文件有误!
");
exit(0);
}
printf("输入新内容:
\n");
printf("num:
");
scanf("%d",&ne[0].num);
printf("name:
");
scanf("%s",&ne[0].name);
printf("phonenum:
");
scanf("%s",&ne[0].phonenum);
printf("address:
");
scanf("%s",&ne[0].address);
for(count=0;fread(&temp[count],sizeof(structtele),1,fp)==1;count++);/*读取文件内信息的个数。
*/
fclose(fp);
for(i=0;i{
if(temp[i].num==ne[0].num)/*用新信息替换*/
{
t=1;
temp[i].num=ne[0].num;
strcpy(temp[i].name,ne[0].name);
strcpy(temp[i].phonenum,ne[0].phonenum);
strcpy(temp[i].address,ne[0].address);
getchar();
printf("\n\n\t\t\t修改成功..........!
");
}
}
if(t==0)
{
getchar();
printf("\n\n\t\t\t没有要修改的信息.........!
");
return0;
}
fp=fopen("D:
\\rex.txt","wb+");
for(i=0;ifwrite(&temp[i],sizeof(structtele),1,fp);
fclose(fp);
return0;
}
intdel(telebooktemp[])
{
inti,j,count,t=0;charname1[20];
FILE*fp;
system("cls");
read(temp);
printf("\n");
if((fp=fopen("D:
\\rex.txt","ab+"))==NULL)
{
printf("打开文件有误!
");
exit(0);
}
printf("输入要删除的人名:
");
scanf("%s",name1);
for(count=0;fread(&temp[count],sizeof(structtele),1,fp)==1;count++);/*读取文件内信息的个数。
*/
fclose(fp);
for(i=0;i{
if(strcmp(temp[i].name,name1)==0)
{
for(j=i;j{/*删除找到的信息*/
t=1;
temp[j].num=temp[j+1].num;
strcpy(temp[j].name,temp[j+1].name);
strcpy(temp[j].phonenum,temp[j+1].phonenum);
strcpy(temp[j].address,temp[j+1].address);
}
count--;
printf("\n\n\n\t\t\t删除成功..................!
");
}
}
if(t==0)
{
getchar();
printf("\a\n\n\n\t\t\t没有要删除的信息..................!
");
return0;
}
getchar();
fp=fopen("D:
\\rex.txt","wb+");
for(i=0;ifwrite(&temp[i],sizeof(structtele),1,fp);
fclose(fp);
return0;
}
intpaixu(telebooktemp[])
{
inti,j,count;
telebooktmp;
FILE*fp;
system("cls");
read(temp);
printf("\n");
fp=fopen("D:
\\rex.txt","ab+");
for(count=0;fread(&temp[count],sizeof(structtele),1,fp)==1;count++);/*读取文件内信息的个数。
*/
fclose(fp);
for(i=0;i{
for(j=count-2;j>=i;j--)
if(temp[j+1].num{
tmp=temp[j+1];
temp[j+1]=temp[j];
temp[j]=tmp;
}
}
fp=fopen("D:
\\rex.txt","wb+");
for(i=0;ifwrite(&temp[i],sizeof(structtele),1,fp);
fclose(fp);
read(temp);
return0;
}
voidmain()
{
telebookmessage[N];
intn;
while
(1)
{
menu();
printf("输入您的选择:
");
scanf("%d",&n);
getchar();
switch(n)
{
case1:
add(message);break;
case2:
read(message);break;
case3:
find();break;
case4:
change(message);break;
case5:
del(message);break;
case6:
paixu(message);break;
case0:
exit(0);break;
}
getchar();
}
printf("pressentercontinue...............");
}
4.结果显示:
四、实验小结及体会:
1、本实验使我能更熟练地运用文件、指针进行程序设计。
2、本实验使我更深入了解了查找表的特性,掌握了各种查找方法