首页 > 用户发贴区 > 编程问题提问区 > 请帮忙!看看!谢谢
2007
07-10

请帮忙!看看!谢谢

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<ctype.h>
#define Max 500
 
typedef  struct
{  char  name[10]; 
   char  city[30]; 
   char  units[25]; 
   int   tele[20];  
}PAD;


/*函数原形说明*/
char Menubar();
void List(PAD t[],int n);
void Order();
void SearchN(PAD t[],int n);
int Find(PAD t[],int n,int b,char *s,char cl);
int Insert(PAD t[],int n);
int Append(PAD t[],int n);
void Editrec(PAD t[],int n);
int DeleteN(PAD t[],int n);
void Sort(PAD t[],int n);
void Save(PAD t[],int n);
int Load(PAD t[],int n);
int Join(PAD t[],int n);
void Display(PAD temp);


 


 


void main()
{ PAD adr[Max];
  int count=0;
  count=Load(adr,count);
  for(;;)
  { switch(Menubar())
     {  /*选择功能号1~4,查询并显示记录*/
    case ’1′:List(adr,count);  break;         /*按页显示全部记录*/
    case ’2′:Order();  break;                 /*按序号显示记录*/
       case ’3′:SearchN(adr,count); break;       /*按姓名查找显示记录*/
     
      /*选择功能号4~7,编辑记录*/
    case ’4′:count=Insert(adr,count);  break; /*插入记录*/
       case ’5′:count=Append(adr,count);  break; /*增加记录*/
    case ’6′:Editrec(adr,count);  break;   /*修改记录*/
       case ’7′:count=DeleteN(adr,count); break; /*按姓名删除记录*/
  /*选择功能号~11,文件操作*/
    case ’8′:Sort(adr,count);  break;         /*按姓名排序*/
       case ’9′:Save(adr,count);  break;         /*保存记录*/
       case ’10′:Load(adr,count);  break;         /*从文件中读取数据*/
    case ’11′:count=Join(adr,count);  break;   /*合并通讯录*/
    case ’0′:exit(0);                         /*跳出循环,中止程序运行*/
  }
  }
}


char Menubar()
{  char c=’0′;
   printf(“\n***************    欢迎进入通讯录查询系统    ***************\n\n”);
   printf(“      1.显示通讯录”);
   printf(“      2.按序号显示记录\n”);
   printf(“      3.按姓名查找显示记录\n”);
   printf(“      4.查找记录\n”);
   printf(“      5.插入记录\n”);
   printf(“      6.增加记录\n”);
   printf(“      7.修改记录\n”);
   printf(“      8.按姓名删除记录\n”);
   printf(“      9.按姓名排序\n”);
   printf(“      A.保存电话薄\n”);
   printf(“      B.从文件中读取数据\n”);
   printf(“      C.合并通讯录\n”);
   printf(“      0.退出系统  \n”);
   printf(“\n***********************************************\n”);
   printf(“\n  请输入选项(0~C):”);
   do{scanf(“%c”,&c);
      c=toupper(c);
   }while(!(c>=’0′&&c<=’9′||c==’A'||c==’B'||c==’C'));
   return c;
}


int Init(PAD t[])
{  int i,n;
   printf(“\n请输入需要录入的条数:  \n”);
   scanf(“%d”,&n);
   printf(“按顺序输入记录,各项内容之间用空格隔开,按回车键结束一条记录。\n”);
   printf(“序 号   姓  名   城   市    单    位    电  话   \n”);
   printf(“————————————————–\n”);
   for(i=0;i<n;i++)
   {  printf(“%-5d”,i+1);
      scanf(“%s%s%s%s”,t[i].name,t[i].city,t[i].units,t[i].tele);
   }
   return n;
}


/*显示通讯录*/
void List (PAD t[],int n)
{  int i;
   printf(“\n\n**************电话本****************\n\n”);
   printf(” 姓 名   城  市    单  位       电  话   \n”);
   printf(“—————————————–\n”);
   for(i=0;i<n;i++)
     printf(“%-10s%-30%-25%-20\n”,t[i].name,t[i].city,t[i].units,t[i].tele);
   if((i+1)%10==0)
   {  printf(“按任意键显示下一页…\n”);
     
   }
 printf(“\n**************显示结束*****************\n”);
}



/*按序号显示文件*/
void Order()
{  int id,n;
   PAD t;
   FILE  *fp;
   if((fp=fopen(“record.txt”,”rt”))==NULL)
   {  printf(“不能打开通讯录文件! \n”);
      exit(1);
   }
   printf(“请输入序号…\n”);
   scanf(“%d”,&id);   /*输入序号*/
   fscanf(fp,”%d\r\n”,&n);  /*从文件中读入记录数*/
   if(id>0&&id<=n)
   {   fseek(fp,(id-1)*(sizeof(PAD)+3),1);
       fscanf(fp,”%10s%30s&25s%20s”,t.name,t.city,t.units,t.tele);
    printf(“姓 名   城    市   单   位   电    话   \n”);
    printf(“————————————-\n”);
    Display(t);
 }
 else
   printf(“序号 %d非法!!!\n “,id);
   fclose(fp);
}


/*按姓名查找通讯录*/
void SearchN(PAD t[],int n)
{  char  s[20];
   int i;
   printf(“请输入姓名,按回车结束: “);
   scanf(“%s”,s);
   i=Find(t,n,0,s,’N');
   if(i<n-1)
      printf(“查无此人! \n”);
   else
   {   printf(“姓 名   城    市   单   位   电    话   \n”);
       printf(“————————————-\n”);
   while (i<n)
       {  Display(t[i]);
          i=Find(t,n,i+1,s,’N');
  }
  printf(“**************   结束  *************\n”);
 }
}



/*快速查找姓名或分类为k的记录*/
void  Find(PAD t[],int n,int b,char *s,char cy)
{  int i;
   for(i=b;i<n;i++)
   {  if (cy==’N')    /*按姓名查找*/
   {        if(strcmp(s,t[i].name)==0)
        break;
      }
      else if (cy==’L')
      {  if(strcmp(s,t[i].city)==0)
            break;
      }
   }
   return i;
}



/*插入记录*/
int  Insert(PAD t[],int n)
{  PAD temp;
   int i,j;
   char s[20];  /*确定插入位置*/
   printf(“请输入新插入的记录:\n”);
   printf(“姓 名   城    市   单   位   电    话   \n”);      
   printf(“————————————-\n”);
   scanf(“%s%s%s%s”,t[i].name,t[i].city,t[i].units,t[i].tele);
   printf(“请输入姓名,新记录将插入到此人前面:”);
   scanf(“%s”,s);
   i=find(t,n,o,s,’N');
   for(j=n-1;j>=i;j–)
   {  strcpy(t[j+1].name,t[j].name);
      strcpy(t[j+1].city,t[j].city);
      strcpy(t[j+1].units,t[j].units);
      strcpy(t[j+1].tele,t[j].tele);
   }
   strcpy(t[i].name,temp.name);
   strcpy(t[i].city,temp.city);
   strcpy(t[i].units,temp.units);
   strcpy(t[i].tele,temp.tele);
   n++;
   return n;
}


/*增加记录*/
int Append(PAD t[],int n)
{  printf(“请输入新增加的记录\n”);
   printf(“姓 名   城    市   单   位   电    话   \n”);      
   printf(“————————————-\n”);
   scanf(“%s%s%s%s”,t[n].name,t[n].city,t[n].units,t[n].tele);
   return n+1;
}



/*修改记录*/
void  Editrec(PAD t[],int n)
{   int i;
    char s[20],ch’Y';
    printf(“请输入姓名,确定需要修改的记录:”);
    scanf(“%s”,s);
    i=find(t,n,o,s,’N');
    if(i>n-1)
    printf(“未找到此人的相关记录。\n”);
  else
  {  printf(“姓 名   城    市   单   位   电    话   \n”);      
     printf(“————————————-\n”);
 while  (i<n)
{  Display(t[i]);
       printf(“确认是否修改本记录(Y修改/N取消)?\n”);
       scanf(“%*c%c”,&ch);
   ch=toupper(ch);
       if(ch==’Y')
       {scanf(“%s%s%%s%s”,t[i].name,t[i].city,t[i].units,t[i].tele);
       break;
      else
        i=find(t,n,i+1,s,’N');
      }
   }



/*按姓名删除记录*/
int  DeleteN(PAD t[],int n)
{  char s[20];
   char  ch=’N';
   int i=0,j;
   printf(“请输入姓名,此人的记录将被清除:  \n”);
   scanf(“%s”,s);
   while (i<n)
   {   i=Find(t,n,i,s’N');
       if(i>n-1)
       {  printf(“未找到此人的相关记录。 \n”);
       break;
       }
       else
       {   printf(“姓 名   城    市   单   位   电    话   \n”);      
           printf(“————————————-\n”);
           Display(t[i]);
           printf(“确认是否删除此人记录(Y删除/N取消)?\n”);
           scanf(“%*c%c”,&ch);
           ch=toupper(ch);
           if(ch==’Y')
           {  for(j=i+1;j<n;j++)
              {  strcpy(t[j-1].name,t[j].name);
                 strcpy(t[j-1].city,t[j].city);
                 strcpy(t[j-1].units,t[j].units);
                 strcpy(t[j-1].tele,t[j].tele);
              }
           n–;
           }
       }
       i++;
   }
     return n;
}



/*按姓名排序*/
void  Sort(PAD t[],int n)
{  int i,j,k;
   PAD  temp;
   printf(“正在排序,请稍候….\n”);
   for(i=0;i<n-1;i++)
   {  k=i;
      for(j=i;j<n;j++)
        if((strcmp(t[j].name,t[k].name))<0)
          k=j;
      if  (k!=i)
      {  strcpy(temp.name,t[k].name);
         strcpy(temp.city,t[k].city);
         strcpy(temp.units,t[k].units);
         strcpy(temp.tele,t[k].tele);
         strcpy(t[k].name,t[i].name);
         strcpy(t[k].city,t[i].city);
         strcpy(t[k].units,t[i].units);
         strcpy(t[k].name,t[i].name);
         strcpy(t[i].city,temp.city);
         strcpy(t[i].units,temp.units);
         strcpy(t[i].tele,temp.tele);
         strcpy(t[i].tele,temp.tele);
      }
   }
     printf(“已完成排序操作!\n”);
}


/*+保存电话簿*/
void  Save(PAD  t[],int n)
{  int i;
   FILE *fp;
   if((fp=fopen(“record.txt”,”wt”))==NULL)
   {  printf(“保存文件失败! \n”);
      exit(1);
   }
   printf(“\n正在保存文件….\n”);
   fprintf(fp,”%d”,n);
   fprintf(fp,”\r\n”);
   for(i=0;i<n;i++)
   {  fprintf(fp,”%-10s%-30s%-25s-%-20s”,t[i].name,t[i].city,t[i].units,t[i].tele);
      fprintf(fp,”\r\n”);
   }
   fclose(fp);
   printf(“****文件已经保存成功!****\n”);
}


/*从文件中读取数据*/
int  Load(PAD t[],int len)
{  int i,n;
   FILE *fp;
   if((fp=fopen(“record.txt”,”rt”))==NULL)
   {  printf(“尚未建立通讯录,请先建通讯录。 \n”);
      len=init(t);
   Save(t, len);
   fp=fopen(“record.txt”,”rt”);
   }
   fscanf(fp,”%d”,&n);
   for(i=0;i<n;i++)
      fscanf(fp, “%10s%30s&25s%20s”,t[i].name,t[i].city,t[i].units,t[i].tele);
   fclose(fp);
   return  n;
}
 


/*合并通讯录*/
int  Join (PAD t[],int n)
{  char inputfile[20];
   FILE  *fp;
   int i,cn;
   print(“请输入需要并入的文件名,格式为 c:\\pt\\fi.txt:\n”);
   scanf(“%s”,inputfile);
   if((fp=fopen(inputfile,”rt”))==NULL)
   {  printf(“不能打开文件,合并完成! \n”);
      getchar();
      return n;
   }
   fscanf(fp,”%d”,&cn);
   if (cn>0&&cn<MAX)
   {  for (i=0;i<cn;i++)
      fscanf(fp,”%10s%30s&25s%20s\n”,t[i+n].name,t[i+n].city,t[i+n].units,t[i+n].tele);
      n=n+cn;
  fclose(fp);
  save(t,n);
   }
   return  n;
}


请帮忙!看看!谢谢》有 3 条评论

  1. xstar 说:

    错误提示?

  2. 吕吕MAX 说:

    运行后里边有20多个错误。。。。看提示改也改不了

    我是刚学的。大一的。要交实习。做了好长时间才弄出来。结果有好多错误

  3. xstar 说:

    把错误提示发上来!

留下一个回复