⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pro.c

📁 C语言开发的通讯录
💻 C
📖 第 1 页 / 共 2 页
字号:
              if(indx<n&&strcmp(temp.name,psn[indx].name)==0) 
                 { 
        temp=psn[indx];  
                  printf("\n\nPlease input new information,Esc back to menu:\n\n"); 
                  printf("name:"); 
                  cnt=rtnstr(psn[indx].name,2,13);if(cnt==0){psn[indx]=temp;clrscr();return;} 
                  printf("\n\nphonenumber:"); 
                  cnt=rtnstr(psn[indx].tel,7,12);if(cnt==0){psn[indx]=temp;clrscr();return;} 
                  printf("\n\nemail:"); 
                  cnt=rtnstr(psn[indx].eml,7,21);if(cnt==0){psn[indx]=temp;clrscr();return;} 
                  printf("\n\ndepartment:"); 
 
  
                   cnt=rtnstr(psn[indx].dpmnt,2,21);if(cnt==0){psn[indx]=temp;clrscr();return;} 
                 } 
               else {clrscr(); printf(" Index error!"); return;} 
             } 
    clrscr(); 
    if(num>0){printf(" Modified a record! name:%s->%s",temp.name,psn[indx].name);savstate=0;n--;} 
    else printf(" The name %s do not exist!",str); 
  } 

void print(struct person psn[],int n)                              /*显示所有记录。由pgup、pgdn、home、end及上下键控制*/ 
  { 
   int i,k=0,l=0,j=n/10+(n%10?1:0); char ch; 
   do 
     { 
       printf("\n name::         phonenumber::   email::                 department::\n\n"); 
       for(i=k*10+l;i<(k+1)*10+l;i++) 
         { if(i==n)break; 
         printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt); 
         } 
       if(l%10==0) {gotoxy(1,24);cprintf(" Press Esc back to menu.      page %d / %d ",k+l/10+1,j);} 
       else {gotoxy(1,24);cprintf(" Press Esc back to menu.      (%d pages)",j);}        
       do 
         { ch=getch(); 
           if(ch==0) 
          { ch=getch(); 
            if(ch==pgdn&&((k+1)*10+l<n))k++; 
            if(ch==pgup&&(k*10+l>=10))k--;else if(ch==pgup)ch=home; 
                    if(ch==home){k=0;l=0;} 
                    if(ch==end){k=j-1;l=0;} 
            if(ch==upkey&&(k*10+l>0))l--; 
                    if(ch==dnkey&&(k*10+l<n-1))l++; 
            break; 
          } 
         }while(ch!=Esc); 
       if(ch==Esc) break;clrscr(); 
     }while(1);clrscr(); 
  } 

void find(struct person psn[],int n)              /*查找记录。直接输入姓名或电话,则显示匹配内容,姓名为纯数字者不显示*/ 
  { 
     int i,num=0,cnt=1; char str[15]; 
     printf("\n\n\n Please input the name or phonenumber you want to find:\n\n"); 
     printf(" name or phone:"); 
     cnt=rtnstr(str,2,14);str[14]='\0'; if(cnt==0)return; 
     for(i=0;str[i]!='\0';i++) 
       if(str[i]<48||str[i]>57) 
    { 
      for(i=0;i<n;i++) 
        if(strcmp(psn[i].name,str)==0) 
          { num++; 
         if(num==1)printf("\n\n name::         phonenumber::   email::                 department::\n\n"); 
         printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt); 
           } 
      if(num==0) {clrscr();printf("Can't find any record in accordance with %s!",str);return;} 
      gotoxy(2,24); cprintf("Press any key to cotinue."); 
      getch(); clrscr(); return; 
    } 
     for(i=0;i<n;i++) 
      if(strcmp(psn[i].tel,str)==0) 
        { num++; 
         if(num==1)printf("\n\n name::         phonenumber::   email::                 department::\n\n"); 
         printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt); 
        } 
      if(num==0) {clrscr();printf("Can't find any record in accordance with %s!",str);return;} 
      gotoxy(2,24); cprintf("Press any key to cotinue."); 
      getch(); clrscr(); return; 
  } 


void save(struct person psn[],int n)                                                /*保存记录。若磁盘故障或已满则退出*/ 
  { FILE *fp; int i; 
 
 
  
     if(savstate==1)return; 
    if((fp=fopen("C:\\zhyx.c","wb"))==NULL) 
      { 
       printf(" Cannot open file!");return; 
      } 
   for(i=0;i<=n;i++) if(fwrite(&psn[i],sizeof(struct person),1,fp)!=1)                        /*多保存了一项,但没必要*/ 
   {printf(" File error!");fclose(fp);return;} 
   savstate=1;printf(" Records saved!"); 
   fclose(fp); 
 } 
main()                                                            /*主函数。有两重循环,第一重打印菜单,第二重处理按键*/ 
{ 
 int i,n=0,ex=0,y=8; char ch; 
 struct person psn[100]; 
 for(i=0;i<100;i++) 
   { strcpy(psn[i].name,"\0"); 
     strcpy(psn[i].tel,"\0"); 
     strcpy(psn[i].eml,"\0"); 
     strcpy(psn[i].dpmnt,"\0"); 
   } 
 n=readrecord(psn,n); 
 do 
   { 
    gotoxy(2,4); cprintf("#################################"); 
    gotoxy(2,5); cprintf("#                               #"); 
    gotoxy(2,6); cprintf("# A: add new records.           #"); 
    gotoxy(2,7); cprintf("#                               #"); 
    gotoxy(2,8); cprintf("# D: delete certain records.    #"); 
    gotoxy(2,9); cprintf("#                               #"); 
    gotoxy(2,10);cprintf("# O: order them.                #"); 
    gotoxy(2,11);cprintf("#                               #"); 
    gotoxy(2,12);cprintf("# M: modify a record.           #"); 
    gotoxy(2,13);cprintf("#                               #"); 
    gotoxy(2,14);cprintf("# P: print all.                 #"); 
    gotoxy(2,15);cprintf("#                               #"); 
    gotoxy(2,16);cprintf("# F: find certaen records.      #"); 
    gotoxy(2,17);cprintf("#                               #"); 
    gotoxy(2,18);cprintf("# S: save.                      #"); 
    gotoxy(2,19);cprintf("#                               #"); 
    gotoxy(2,20);cprintf("# Esc: exit.                    #"); 
    gotoxy(2,21);cprintf("#                               #"); 
    gotoxy(2,22);cprintf("#################################"); 
    y=8;y=barup(y); 
    gotoxy(2,24);cprintf("Please choose a menu form the table above."); 
    do 
     { ch=getch(); 
       if(ch==0)                                                   /*若按部分非字符键,可能是移动光条,y值跟踪光条改变*/ 
 { 
  ch=getch(); 
  switch(ch) 
            { 
     case upkey: 
     y=barup(y);ch=0;break; 
     case dnkey: 
     y=bardn(y);ch=0; 
            } 
          } 
       if(ch==Enter) 
           { 
            switch(y)                                                                       /*光条对应y值,y值对应字符*/ 
              { 
       case 6: ch='a';break; 
               case 8: ch='d';break; 
               case 10: ch='o';break; 
       case 12: ch='m';break; 
               case 14: ch='p';break; 
               case 16: ch='f';break; 
               case 18: ch='s';break; 
               case 20: ch=Esc;break; 
              } 
           } 
       switch(ch)                                                                   /*对不同字符调用相应函数或其它操作*/ 
 { case 'a': 
           case 'A': 
    { clrscr(); n=add(psn,n); 
      ch=Enter; break; 
    } 
   case 'd': 
   case 'D': 
    { clrscr(); n=delete(psn,n); 
      ch=Enter; break; 
    } 
   case 'o': 
           case 'O': 
    { clrscr(); order(psn,n); 
      ch=Enter; break; 
    } 
   case 'm': 
           case 'M': 
    { clrscr(); modify(psn,n); 
      ch=Enter; break; 
    } 
   case 'p': 
           case 'P': 
    { clrscr(); print(psn,n); 
      ch=Enter; break; 
    } 
   case 'f': 
           case 'F': 
    { clrscr(); find(psn,n); 
      ch=Enter; break; 
    } 
   case 's': 
           case 'S': 
    { clrscr(); save(psn,n); 
      ch=Enter; break; 
    } 
           case Esc:                                             /*退出时的处理。按Y保存后退出,N直接退出,Esc返回程序*/ 
    { clrscr();ex=1; 
      if(savstate==0) 
{ gotoxy(5,5); cprintf("Records not saved! save(y/n)? Cancel: Esc"); 
  do{ ch=getch(); 
      if(ch=='n'||ch=='N')savstate=1; 
      if(ch=='y'||ch=='Y')save(psn,n); 
                      if(ch==Esc){ex=0;break;} 
    }while(savstate!=1); 
} 
      clrscr(); ch=Enter; break; 
    } 
 } 
     }while(ch!=Enter); 
    if(ex==1)break; 
   }while(1); 
 clrscr(); 
}                 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -