好友信息管理C代码.docx
- 文档编号:8248896
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:20
- 大小:19.72KB
好友信息管理C代码.docx
《好友信息管理C代码.docx》由会员分享,可在线阅读,更多相关《好友信息管理C代码.docx(20页珍藏版)》请在冰豆网上搜索。
好友信息管理C代码
#include"stdio.h"/*标准输入输出函数库*/
#include"stdlib.h"/*标准函数库*/
#include"string.h"/*字符串函数库*/
#include"conio.h"/*屏幕操作函数库*/
#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/*标记为telebook*/
{
charnum[4];/*编号*/
charname[10];/*姓名*/
charphonenum[15];/*电话号码*/
charaddress[20];/*地址*/
}TELEBOOK;
voidmenu()/*主菜单*/
{
system("cls");/*调用DOS命令,清屏.与clrscr()功能相同*/
textcolor(13);/*在文本模式中选择新的字符颜色*/
gotoxy(10,5);/*在文本窗口中设置光标*/
cprintf("Thetelephone-bookManagementSystem\n");
gotoxy(10,8);
cprintf("*************************Menu********************************\n");
gotoxy(10,9);
cprintf("*1inputrecord2displayrecord*\n");
gotoxy(10,10);
cprintf("*3deleterecord4searchrecord*\n");
gotoxy(10,11);
cprintf("*5modifyrecord6insertrecord*\n");
gotoxy(10,12);
cprintf("*7sortrecord8saverecord*\n");
gotoxy(10,13);
cprintf("*0quitsystem*\n");
gotoxy(10,14);
cprintf("*************************************************************\n");
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
/*格式化输出表头*/
voidprintheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
/*格式化输出表中数据*/
voidprintdata(TELEBOOKpp)
{
TELEBOOK*p;
p=&pp;
printf(FORMAT,DATA);
}
/*显示数组temp[]中存储的电话簿记录,内容为telebook结构中定义的内容*/
voidDisp(TELEBOOKtemp[],intn)
{
inti;
if(n==0)/*表示没有电话簿记录*/
{
printf("\n=====>Nottelephonerecord!
\n");
getchar();
return;
}
printf("\n\n");
printheader();/*输出表格头部*/
i=0;
while(i { printdata(temp[i]); i++; printf(HEADER3); } getchar(); } voidWrong()/*输出按键错误信息*/ { printf("\n\n\n\n\n***********Error: inputhaswrong! pressanykeytocontinue**********\n"); getchar(); } voidNofind()/*输出未查找此记录的信息*/ { printf("\n=====>Notfindthistelephonerecord! \n"); } /************************************************************* 作用: 用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值 参数: findmess[]保存要查找的具体内容;nameorphonenum[]保存按什么在数组中查找; **************************************************************/ intLocate(TELEBOOKtemp[],intn,charfindmess[],charnameorphonenum[]) { inti=0; if(strcmp(nameorphonenum,"phonenum")==0)/*按电话号码查询*/ { while(i { if(strcmp(temp[i].phonenum,findmess)==0)/*若找到findmess值的电话号码*/ returni; i++; } } elseif(strcmp(nameorphonenum,"name")==0)/*按姓名查询*/ { while(i { if(strcmp(temp[i].name,findmess)==0)/*若找到findmess值的姓名*/ returni; i++; } } return-1;/*若未找到,返回一个整数-1*/ } /*输入字符串,并进行长度验证(长度 voidstringinput(char*t,intlens,char*notice) { charn[255]; do{ printf(notice);/*显示提示信息*/ scanf("%s",n);/*输入字符串*/ if(strlen(n)>lens)printf("\nexceedtherequiredlength! \n"); /*进行长度校验,超过lens值重新输入*/ }while(strlen(n)>lens); strcpy(t,n);/*将输入的字符串拷贝到字符串t中*/ } /*增加电话簿记录*/ intAdd(TELEBOOKtemp[],intn) { charch,num[10]; inti,flag=0; system("cls"); Disp(temp,n);/*先打印出已有的电话簿信息*/ while (1)/*一次可输入多条记录,直至输入编号为0的记录才结束添加操作*/ { while (1)/*输入记录编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/ { stringinput(num,10,"inputnumber(press'0'returnmenu): ");/*格式化输入编号并检验*/ flag=0; if(strcmp(num,"0")==0)/*输入为0,则退出添加操作,返回主界面*/ {returnn;} i=0; while(i { if(strcmp(temp[i].num,num)==0) { flag=1; break; } i++; } if(flag==1)/*提示用户是否重新输入*/ {getchar(); printf("==>Thenumber%sisexisting,tryagain? (y/n): ",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') continue; else returnn; } else {break;} } strcpy(temp[n].num,num);/*将字符串num拷贝到temp[n].num中*/ stringinput(temp[n].name,15,"Name: "); stringinput(temp[n].phonenum,15,"Telephone: "); stringinput(temp[n].address,15,"Adress: "); saveflag=1; n++; } returnn; } /*按编号或姓名,查询电话簿记录*/ voidQur(TELEBOOKtemp[],intn) { intselect;/*1: 按姓名查,2: 按电话号码查,其他: 返回主界面(菜单)*/ charsearchinput[20];/*保存用户输入的查询内容*/ intp=0; if(n<=0)/*若数组为空*/ { system("cls"); printf("\n=====>Notelephonerecord! \n"); getchar(); return; } system("cls"); printf("\n=====>1Searchbyname=====>2Searchbytelephonenumber\n"); printf("pleasechoice[1,2]: "); scanf("%d",&select); if(select==1)/*按姓名查询*/ { stringinput(searchinput,10,"inputtheexistingname: "); p=Locate(temp,n,searchinput,"name"); /*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/ if(p! =-1)/*若找到该记录*/ { printheader(); printdata(temp[p]); printf(END); printf("pressanykeytoreturn"); getchar(); } else Nofind(); getchar(); } elseif(select==2)/*按电话号码查询*/ { stringinput(searchinput,15,"inputtheexistingtelephonenumber: "); p=Locate(temp,n,searchinput,"phonenum"); if(p! =-1) { printheader(); printdata(temp[p]); printf(END); printf("pressanykeytoreturn"); getchar(); } else Nofind(); getchar(); } else Wrong(); getchar(); } /*删除电话簿记录: 先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/ intDel(TELEBOOKtemp[],intn) { intsel; charfindmess[20]; intp=0,i=0; if(n<=0) {system("cls"); printf("\n=====>Notelephonerecord! \n"); getchar(); returnn; } system("cls"); Disp(temp,n); printf("\n=====>1Deletebyname=====>2Deletebytelephonenumber\n"); printf("pleasechoice[1,2]: "); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"inputtheexistingname: "); p=Locate(temp,n,findmess,"name"); getchar(); if(p! =-1) { for(i=p+1;i { strcpy(temp[i-1].num,temp[i].num); strcpy(temp[i-1].name,temp[i].name); strcpy(temp[i-1].phonenum,temp[i].phonenum); strcpy(temp[i-1].address,temp[i].address); } printf("\n==>deletesuccess! \n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } elseif(sel==2)/*先按电话号码查询到该记录所在的数组元素的下标值*/ { stringinput(findmess,15,"inputtheexistingtelephonenumber: "); p=Locate(temp,n,findmess,"phonenum"); getchar(); if(p! =-1) { for(i=p+1;i { strcpy(temp[i-1].num,temp[i].num); strcpy(temp[i-1].name,temp[i].name); strcpy(temp[i-1].phonenum,temp[i].phonenum); strcpy(temp[i-1].address,temp[i].address); } printf("\n=====>deletesuccess! \n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } returnn; } /*修改电话簿记录。 先按输入的联系人姓名查询到该记录, 然后提示用户修改该记录编号之外的值,编号不能修改*/ voidModify(TELEBOOKtemp[],intn) { charfindmess[20]; intp=0; if(n<=0) {system("cls"); printf("\n=====>Notelephonenumberrecord! \n"); getchar(); return; } system("cls"); printf("modifytelephonebookrecorder"); Disp(temp,n); stringinput(findmess,10,"inputtheexistingname: ");/*输入并检验该姓名*/ p=Locate(temp,n,findmess,"name");/*查询到该数组元素,并返回下标值*/ if(p! =-1)/*若p! =-1,表明已经找到该数组元素*/ { printf("Number: %s,\n",temp[p].num); printf("Name: %s,",temp[p].name); stringinput(temp[p].name,15,"inputnewname: "); printf("Name: %s,",temp[p].phonenum); stringinput(temp[p].phonenum,15,"inputnewtelephone: "); printf("Name: %s,",temp[p].address); stringinput(temp[p].address,30,"inputnewaddress: "); printf("\n=====>modifysuccess! \n"); getchar(); Disp(temp,n); getchar(); saveflag=1; } else {Nofind(); getchar(); } return; } /*插入记录: 按编号查询到要插入的数组元素的位置,然后在该记录编号之后插入一个新数组元素。 */ intInsert(TELEBOOKtemp[],intn) { charch,num[10],s[10];/*s[]保存插入点位置之前的记录编号,num[]保存输入的新记录的编号*/ TELEBOOKnewinfo; intflag=0,i=0,kkk=0; system("cls"); Disp(temp,n); while (1) {stringinput(s,10,"pleaseinputinsertlocationaftertheNumber: "); flag=0;i=0; while(i { if(strcmp(temp[i].num,s)==0){kkk=i;flag=1;break;} i++; } if(flag==1) break;/*若编号存在,则进行插入之前的新记录输入操作*/ else {getchar(); printf("\n=====>Thenumber%sisnotexisting,tryagain? (y/n): ",s); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {returnn;} } } /*以下新记录的输入操作与Add()相同*/ while (1) {stringinput(num,10,"inputnewNumber: "); i=0;flag=0; while(i { if(strcmp(temp[i].num,num)==0){flag=1;break;} i++; } if(flag==1) { getchar(); printf("\n=====>Sorry,Thenumber%sisexisting,tryagain? (y/n): ",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {returnn;} } else break; } strcpy(newinfo.num,num);/*将字符串num拷贝到newinfo.num中*/ stringinput(newinfo.name,15,"Name: "); stringinput(newinfo.phonenum,15,"Telephone: "); stringinput(newinfo.address,15,"Adress: "); saveflag=1;/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/ for(i=n-1;i>kkk;i--)/*从最后一个组织元素开始往向移一个元素位置*/ { strcpy(temp[i+1].num,temp[i].num); strcpy(temp[i+1].name,temp[i].name); strcpy(temp[i+1].phonenum,temp[i].phonenum); strcpy(temp[i+1].address,temp[i].address); } strcpy(temp[kkk+1].num,newinfo.num);/*在kkk的元素位置后插入新记录*/ strcpy(temp[kkk+1].name,newinfo.name); strcpy(temp[kkk+1].phonenum,newinfo.phonenum); strcpy(temp[kkk+1].address,newinfo.address); n++; Disp(temp,n); printf("\n\n"); getchar(); returnn; } /*利用选择排序法实现数组的按记录编号或姓名的升序排序*/ voidSelectSort(TELEBOOKtemp[],intn) { inti=0,j=0,flag=0,indexmin,select; charcharflag[10]; TELEBOOKnewinfo; if(n<=0) {system("cls"); printf("\n=====>Nottelephonerecord! \n"); getchar(); return; } system("cls"); Disp(temp,n);/*显示排序前的所有记录*/ printf("==>1SORTBYNUMBER==>2SORTBYNAME\n"); printf("pleasechoice[1,2]: "); scanf("%d",&select); if(select==1)/*按记录编号排序*/ { for(i=0;i { flag=32767;indexmin=0; for(j=i;j {if(atoi(temp[j].num) {flag=atoi(temp[j].num); indexmin=j; } } strcpy(newinfo.nu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 好友 信息管理 代码