1、 /*电话号码*/char address20; /*地址*/TELEBOOK;void menu() /*主菜单*/system(cls); /*调用DOS命令,清屏.与clrscr()功能相同*/textcolor(13); /*在文本模式中选择新的字符颜色*/gotoxy(10,5); /*在文本窗口中设置光标*/cprintf( The telephone-book Management System ngotoxy(10,8); *Menu*ngotoxy(10,9); * 1 input record 2 display record *ngotoxy(10,10); * 3 de
2、lete record 4 search record *ngotoxy(10,11); * 5 modify record 6 insert record *ngotoxy(10,12); * 7 sort record 8 save record *ngotoxy(10,13); * 0 quit system *ngotoxy(10,14); *n/*cprintf()送格式化输出至文本窗口屏幕中*/*格式化输出表头*/void printheader() printf(HEADER1); printf(HEADER2); printf(HEADER3); /*格式化输出表中数据*/vo
3、id printdata(TELEBOOK pp) TELEBOOK* p; p=&pp; printf(FORMAT,DATA);/*显示数组temp中存储的电话簿记录,内容为telebook结构中定义的内容*/void Disp(TELEBOOK temp,int n)int i;if(n=0) /*表示没有电话簿记录*/ printf(n=Not telephone record!n getchar(); return;printf(nnprintheader(); /*输出表格头部*/i=0;while(in) /*逐条输出数组中存储的电话簿记录*/ printdata(tempi);
4、 i+;getchar();void Wrong() /*输出按键错误信息*/nnnnn*Error:input has wrong! press any key to continue*nvoid Nofind() /*输出未查找此记录的信息*/Not find this telephone record!/*作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值参数:findmess保存要查找的具体内容; nameorphonenum保存按什么在数组中查找;*/int Locate(TELEBOOK temp,int n,char findmess,char nameorph
5、onenum)int i=0;if(strcmp(nameorphonenum,phonenum)=0) /*按电话号码查询*/ while(in) if(strcmp(tempi.phonenum,findmess)=0) /*若找到findmess值的电话号码*/ return i; else if(strcmp(nameorphonenum,name)=0) /*按姓名查询*/ if(strcmp(tempi.name,findmess)=0) /*若找到findmess值的姓名*/return -1; /*若未找到,返回一个整数-1*/*输入字符串,并进行长度验证(长度lens) pr
6、intf(n exceed the required length! n /*进行长度校验,超过lens值重新输入*/ while(strlen(n)lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/ /*增加电话簿记录*/int Add(TELEBOOK temp,int n) char ch,num10; int i,flag=0; system( Disp(temp,n); /*先打印出已有的电话簿信息*/ while(1) /*一次可输入多条记录,直至输入编号为0的记录才结束添加操作*/ while(1) /*输入记录编号,保证该编号没有被使用,若输入编号为
7、0,则退出添加记录操作*/ stringinput(num,10,input number(press 0return menu): /*格式化输入编号并检验*/ flag=0; if(strcmp(num,0)=0) /*输入为0,则退出添加操作,返回主界面*/ return n; i=0;n) /*查询该编号是否已经存在,若存在则要求重新输入一个未被占用的编号*/ if(strcmp(tempi.num,num)=0) flag=1; break; if(flag=1) /*提示用户是否重新输入*/ getchar();=The number %s is existing,try agai
8、n?(y/n):,num);%c,&ch); if(ch=y|ch=Y) continue; else return n; break; strcpy(tempn.num,num); /*将字符串num拷贝到tempn.num中*/ stringinput(tempn.name,15,Name: stringinput(tempn.phonenum,15,Telephone: stringinput(tempn.address,15,Adress: saveflag=1; n+;/*按编号或姓名,查询电话簿记录*/void Qur(TELEBOOK temp,int n)int select;
9、 /*1:按姓名查,2:按电话号码查,其他:返回主界面(菜单)*/char searchinput20; /*保存用户输入的查询内容*/int p=0;if(n1 Search by name =2 Search by telephone numbern please choice1,2:scanf(%dselect);if(select=1) /*按姓名查询*/ stringinput(searchinput,10,input the existing name: p=Locate(temp,n,searchinput, /*在数组temp中查找编号为searchinput值的元素,并返回该
10、数组元素的下标值*/ if(p!=-1) /*若找到该记录*/ printheader(); printdata(tempp); printf(END);press any key to return Nofind();else if(select=2) /*按电话号码查询*/ stringinput(searchinput,15,input the existing telephone number:=-1)else Wrong(); /*删除电话簿记录:先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/int Del(TELEBOOK temp,int n)int sel;
11、char findmess20;int p=0,i=0;=0) system(Disp(temp,n);1 Delete by name =2 Delete by telephone numbernsel);if(sel=1) stringinput(findmess,10, p=Locate(temp,n,findmess, for(i=p+1;idelete success! n-;else if(sel=2) /*先按电话号码查询到该记录所在的数组元素的下标值*/ stringinput(findmess,15,/*修改电话簿记录。先按输入的联系人姓名查询到该记录, 然后提示用户修改该记
12、录编号之外的值,编号不能修改*/void Modify(TELEBOOK temp,int n)No telephone number record! return ;modify telephone book recorderstringinput(findmess,10, /*输入并检验该姓名*/p=Locate(temp,n,findmess, /*查询到该数组元素,并返回下标值*/if(p!=-1) /*若p!=1,表明已经找到该数组元素*/Number:%s,n,tempp.num);%s,tempp.name); stringinput(tempp.name,15,input ne
13、w name:,tempp.phonenum); stringinput(tempp.phonenum,15,input new telephone:,tempp.address); stringinput(tempp.address,30,input new address:modify success! Nofind();return ;/*插入记录:按编号查询到要插入的数组元素的位置,然后在该记录编号之后插入一个新数组元素。*/int Insert(TELEBOOK temp,int n) char ch,num10,s10; /*s保存插入点位置之前的记录编号,num保存输入的新记录的
14、编号*/ TELEBOOK newinfo; int flag=0,i=0,kkk=0; while(1) stringinput(s,10,please input insert location after the Number:n) /*查询该编号是否存在,flag=1表示该编号存在*/ if(strcmp(tempi.num,s)=0) kkk=i;flag=1;break; if(flag=1) /*若编号存在,则进行插入之前的新记录输入操作*/The number %s is not existing,try again?,s); continue; /*以下新记录的输入操作与Ad
15、d()相同*/ stringinput(num,10,input new Number:flag=0; if(strcmp(tempi.num,num)=0) flag=1;Sorry,The number %s is existing,try again? strcpy(newinfo.num,num); /*将字符串num拷贝到newinfo.num中*/ stringinput(newinfo.name,15, stringinput(newinfo.phonenum,15, stringinput(newinfo.address,15, /*在main()有对该全局变量的判断,若为1,
16、则进行存盘操作*/ for(i=n-1;ikkk;i-) /*从最后一个组织元素开始往向移一个元素位置*/ strcpy(tempi+1.num,tempi.num); strcpy(tempi+1.name,tempi.name); strcpy(tempi+1.phonenum,tempi.phonenum); strcpy(tempi+1.address,tempi.address); strcpy(tempkkk+1.num,newinfo.num); /*在kkk的元素位置后插入新记录*/ strcpy(tempkkk+1.name,newinfo.name); strcpy(tem
17、pkkk+1.phonenum,newinfo.phonenum); strcpy(tempkkk+1.address,newinfo.address);/*利用选择排序法实现数组的按记录编号或姓名的升序排序*/void SelectSort(TELEBOOK temp,int n)int i=0,j=0,flag=0,indexmin,select;char charflag10;TELEBOOK newinfo; /*显示排序前的所有记录*/ =1 SORT BY NUMBER =2 SORT BY NAMEnif(select=1) /*按记录编号排序*/ for(i=0;n-1;i+) flag=32767;indexmin=0; for(j=i;jj+) if(atoi(tempj.num)flag) flag=atoi(tempj.num); indexmin=j; strcpy(newinfo.nu
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1