zuixin电话簿管理系统代码.docx
- 文档编号:12052886
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:26
- 大小:20.30KB
zuixin电话簿管理系统代码.docx
《zuixin电话簿管理系统代码.docx》由会员分享,可在线阅读,更多相关《zuixin电话簿管理系统代码.docx(26页珍藏版)》请在冰豆网上搜索。
zuixin电话簿管理系统代码
最新的C语言代码
#include
#include
#include
#include
/*****预定义*********************************/
#defineHEADER1"-------------------TELEPHONEBOOK-------------------------\n"
#defineHEADER2"|num|name|phonenumber|address|\n"
#defineHEADER3"|---------|-----------|----------------|-------------------|\n"
#defineFORMAT"%-10s|%-10s|%-15s|%-20s|\n"
#defineDATAp->num,p->name,p->phonenum,p->address
#defineEND"----------------------------------------------------------------\n"
#defineN100
/*************定义全局变量***********************/
intsaveflag=0;//是否需要存盘的标志变量
/******定义系统的数据结构---电话簿相关信息组成的结构体***********/
typedefstructtelebook
{
intnum;//编号
charname[15];//姓名
charphonenum[15];//电话号码
charaddress[20];//地址
}TELEBOOK;
/*********用户自定义函数原型说明*************************/
voidmenu();
voidDisp(TELEBOOKtemp[],intn);
voidWrong();
intAdd(TELEBOOKtemp[],intn);
voidQur(TELEBOOKtemp[],intn);
intDel(TELEBOOKtemp[],intn);
voidModify(TELEBOOKtemp[],intn);
intInsert(TELEBOOKtemp[],intn);
voidSelectSort(TELEBOOKtemp[],intn);
voidSave(TELEBOOKtemp[],intn);
/**********************主函数******************************/
voidmain()
{
TELEBOOKtele[N];//定义了N条电话簿记录
FILE*fp;//定义文件指针
intselect;//保存选择结果变量
charch;//保存(y,Y,n,N)
intcount=0;
fp=fopen(".\\telephonebook4.dat","ab+");//以追加方式打开二进制文件c:
\telephonebook4.data,可读可写,若此文件不存在,则会自动创建此文件
if(fp==NULL)
{
printf("\n=====>cannotopenfile!
\n");
exit(0);//程序退出函数,exit(0)为正常退出,在头文件stdlib.h里
}
while(!
feof(fp))
{
if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1)//一次从文件读取一条电话簿记录
count++;
}
fclose(fp);//关闭文件
printf("\n==>openfilesuccess,thetotalrecordsnumberis:
%d.\n",count);
getchar();
//menu();
while
(1)
{
system("cls");
menu();
printf("\nPleaseEnteryourchoice(0~9):
");
scanf("%d",&select);
if(select==0)
{
if(saveflag==1)//对数组的数据有修改且未存盘
{
fflush(stdin);
getchar();
printf("\n==>Whethersavethemodifiedrecordtofile?
(y/n):
");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(tele,count);//保存记录至文件
}
printf("\n===>thankyouforuseness!
");
fflush(stdin);
getchar();
break;
}
switch(select)
{
case1:
count=Add(tele,count);//增加电话簿记录
break;
case2:
system("cls");
Disp(tele,count);//显示电话簿记录
break;
case3:
count=Del(tele,count);//删除电话簿记录
break;
case4:
Qur(tele,count);//查询电话簿记录
break;
case5:
Modify(tele,count);//修改电话簿记录
break;
case6:
count=Insert(tele,count);//插入电话簿记录
break;
case7:
SelectSort(tele,count);//排序电话簿记录
break;
case8:
Save(tele,count);//保存电话簿记录
break;
default:
Wrong();
fflush(stdin);
getchar();//按键有误,必须为数值0~9
break;
}
}
}
/****************主菜单界面********************************/
//用户进入电话簿管理系统时,需要显示主菜单,提示用户进行选择,完成相应任务。
此函数被主函数调用。
/**********************************************************/
voidmenu()
{
system("cls");//清屏,与clrscr()功能相同
printf("Thetelephone-bookManagementSystem\n");
printf("*************************************Menu***********************************\n");
printf("*1inputrecord2displayrecord*\n");
printf("*3deleterecord4searchrecord*\n");
printf("*5modifyrecord6insertrecord*\n");
printf("*7sortrecord8saverecord*\n");
printf("*0quitsystem\n");
printf("******************************************************************************\n");
}
/****************显示电话簿记录*******************************/
//显示从数组temp第一个元素开始的n条记录
/***************************************************************/
//输出表格头部,单独在一个函数里实现
voidprintheader()
{
printf("-----------------------TELEPHONEBOOK---------------------------\n");
printf("|num|name|phonenumber|address|\n");
printf("|----------|---------------|---------------|--------------------|\n");
}
voidDisp(TELEBOOKtemp[],intn)
{
inti;
if(n==0)
{
printf("\n=======>Nottelephonerecord!
\n");
fflush(stdin);
getchar();
return;
}
printf("\n\n\n\n");
printheader();//输出表格的头部
for(i=0;i { printf("|%-10d|%-15s|%-15s|%-20s|\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].address); printf("|----------|---------------|---------------|--------------------|\n"); } fflush(stdin); getchar(); } /****************输出按键错误信息*****************************/ voidWrong() { printf("\n***********Error: inputhaswrong! pressanykeytocontinue************\n"); fflush(stdin); getchar(); } /****************增加电话簿记录*******************************/ //调用Add(TELEBOOKtemp[],intn)函数,完成在数组temp中添加电话簿记录的功能。 //在刚进入电话簿管理系统时,若默认的数据文件为空,则从数组的头部开始增加记录; //否则,将此记录添加在数组的尾部。 /***************************************************************/ ////////////////////////////////////////////////////////////////////////////// //专门的字符串输入函数,减少代码的重复率 voidstringinput(char*t,intlens,char*notice) { charn[255]; do { printf(notice); scanf("%s",n); if(strlen(n)>=lens) printf("\n长度超出,请重新输入。 \n"); }while(strlen(n)>=lens); strcpy(t,n);//将输入的字符串拷贝到字符串t中 } ////////////////////////////////////////////////////////// intAdd(TELEBOOKtemp[],intn) { intnumber; inti=0; //charch[20]; intflag=0; charch1; Disp(temp,n);//先打印出已有的电话簿记录 //printf("请输入增加的电话簿的编号: \n"); while (1) { while (1) { printf("请输入增加的电话簿的编号: \n"); scanf("%d",&number); if(number==0) returnn; while(i { if(temp[i].num==number) { flag=1; break; } i++; } if(flag==1) { printf("此编号已经存在,是否继续增加? (y/n: )"); fflush(stdin); scanf("%c",&ch1); if(ch1=='y'||ch1=='Y') continue; else returnn; } else break; } temp[n].num=number; //在输入姓名、电话号码、地址的时候,输入的都是字符串,而且都要判断长度超出的情况,为了 //减少代码重复率,专门编写一个输入字符串的函数,通过调用这个函数实现字符串的输入。 /*printf("请输入姓名: "); while (1) { scanf("%s",ch); if(strlen(ch)>=15) printf("长度超出,请重新输入.\n"); else break; } strcpy(temp[n].name,ch); printf("请输入电话号码: "); while (1) { scanf("%s",ch); if(strlen(ch)>=15) printf("长度超出,请重新输入.\n"); else break; } strcpy(temp[n].phonenum,ch); printf("请输入地址: "); while (1) { scanf("%s",ch); if(strlen(ch)>=20) printf("长度超出,请重新输入.\n"); else break; } strcpy(temp[n].address,ch); */ stringinput(temp[n].name,15,"请输入姓名"); stringinput(temp[n].phonenum,15,"请输入电话号码: "); stringinput(temp[n].address,20,"请输入地址: "); saveflag=1; n++; } returnn; } /************************记录查找定位函数**************************/ //在对记录进行查询、修改、删除的时候,都要进行记录的定位操作,因此,将 //记录的定位操作作为一个单独的函数进行处理,这样可以节省代码率,优化代码质量 //以下Locate()函数完成了记录的查找定位功能,可以按联系人查找或者按电话号码查找 //findmess[]保存要查找的具体内容,nameorphonenum[]保存按什么在数组中查找 /******************************************************************/ intLocate(TELEBOOKtemp[],intn,charfindmess[],charnameorphonenum[]) { inti=0; //printf("%s%s\n",nameorphonenum,findmess); if(strcmp(nameorphonenum,"phonenum")==0)//按电话号码查询 { for(i=0;i if(strcmp(temp[i].phonenum,findmess)==0) returni; } elseif(strcmp(nameorphonenum,"name")==0)//按姓名查询 { for(i=0;i if(strcmp(temp[i].name,findmess)==0) returni; } return-1;//若未找到,则返回-1 } /****************查询电话簿记录*******************************/ //调用Qur(TELEBOOKtemp[],intn)函数,完成在数组temp中查询电话簿记录的功能。 //当用户执行查询任务时,系统会提示用户进行查询字段的选择,即根据联系人姓名或电话 //号码进行查询。 若此记录存在,则会以表格形式打印输出此条记录信息。 /***************************************************************/ voidQur(TELEBOOKtemp[],intn) { intselect;//1,按姓名查询2按电话号码查询其他,返回主界面 charch[20];//保存用户输入的查询内容 intp; if(n==0)//若数组为空 { printf("\n=======>Nottelephonerecord! \n"); fflush(stdin); getch(); return; } printf("\n====>1Searchbyname====>2Searchbytelephonenumber\n"); printf("Pleasechoice[1,2]: "); scanf("%d",&select); if(select==1)//按姓名查询 { stringinput(ch,15,"请输入要查询的姓名: "); p=Locate(temp,n,ch,"name");//利用Locate函数查找符合ch内容的记录,并将记录的下标返回 if(p! =-1) { printheader(); printf("|%-10d|%-15s|%-15s|%-20s|\n",temp[p].num,temp[p].name,temp[p].phonenum,temp[p].address); printf("|----------|---------------|---------------|--------------------|\n"); printf("pressanykeytoreturn"); getch(); } else { printf("Therecordisnotfound\n"); getch(); } } elseif(select==2)//按电话号码查询 { stringinput(ch,15,"请输入要查询的电话号码: "); p=Locate(temp,n,ch,"phonenum");//利用Locate函数查找符合ch内容的记录,并将记录的下标返回 if(p! =-1) { printheader(); printf("|%-10d|%-15s|%-15s|%-20s|\n",temp[p].num,temp[p].name,temp[p].phonenum,temp[p].address); printf("|----------|---------------|---------------|--------------------|\n"); printf("pressanykeytoreturn"); getch(); } else { printf("Therecordisnotfound\n"); getch(); } } else { Wrong(); getch(); } } /****************删除电话簿记录*******************************/ //调用Del(TELEBOOKtemp[],intn)函数删除电话簿记录的功能。 可以根据 //电话簿姓名删除,也可以按电话号码删除。 /***************************************************************/ intDel(TELEBOOKtemp[],intn) { intselect; charch[20],ch0; intp,i; if(n==0) { printf("\n=====>notelephonenumrecord.\n"); getch(); returnn; } printf("删除之前的电话簿记录为: \n"); Disp(temp,n); printf("\n======>1DEletebyname=====>2Deletebyphone\n"); scanf("%d",&select); if(select==1)//按姓名删除 { stringinput(ch,15,"请输入要删除的电话簿记录的姓名: "); p=Locate(temp,n,ch,"name"); if(p! =-1) { printf("\n要删除的电话簿记录为: \n"); printheader(); printf("|%-10d|%-15s|%-15s|%-20s|\n",temp[p].num,temp[p].name,temp[p].phonenum,temp[p].address); printf("\n确认要删除? y/n: "); fflush(stdin); scanf("%c",&ch0); if(ch0=='y'||ch0=='Y') { for(i=p+1;i temp[i-1]=temp[i]; n--; printf("\nDeletedsuccess! \n"); saveflag=1; getch(); } el
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- zuixin 电话簿 管理 系统 代码