c语言综合练习二


#include "stdio.h"

#include "stdlib.h"
#include <iostream>
#include "string.h"

#include "conio.h" //包含这个getch()方法

#define M 50
using namespace std;
typedef struct

{

   char name[20]; /*姓名*/

   char sex[10]; /*性别*/
   char birth[15]; /*出生年月*/

   char units[30]; /*工作单位*/

   char studylevel[20]; /*学历*/

   char officenumber[15]; /*办公电话*/

   char homenumber[15]; /*住宅电话*/

   char homeaddress[30]; /*家庭住址*/

}ADDRESS;

 

/*显示指定的一条记录*/

void mprint(ADDRESS temp)

{
   printf("\n****************************************************************************\n");

   printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");

   printf("----------------------------------------------------------------------------\n");

   printf("%-8s%4s%13s%8s%7s%12s%12s%8s\n",temp.name,temp.sex,temp.birth,temp.units,

          temp.studylevel,temp.officenumber,temp.homenumber,temp.homeaddress);

   printf("*********************************end****************************************\n");

}

 

/*输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/

int enter(ADDRESS t[])

{

   int i,n;

   system("cls");

   printf("********************************************************************************\n");

   printf("请确定您要输入的记录数\n"); /*提示信息*/

   scanf("%d",&n); /*输入记录数*/

   if(n>0)

   {

        printf("请输入您的通讯录记录\n\n"); /*提示输入记录*/

       printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");

       printf("--------------------------------------------------------------------------\n");

       for(i=0;i<n;i++)

        {

        scanf("%s%s%s%s%s%s%s%s",t[i].name,t[i].sex,t[i].birth,t[i].units,

          t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*输入记录*/

        printf("-------------------------------------------------------------------------\n");

        }
       printf("信息录入成功!");

       return n; /*返回记录条数*/

   }

   if(n<=0) printf("对不起,您输入的记录数不正确\n");exit(0);

}

 

/*显示记录,参数为记录数组和记录条数*/

void list(ADDRESS t[],int n)

{

    int i;

   system("cls");

   printf("\n*********************************通讯录***********************************\n");

   printf(" 总共有%d 条记录 \n",n);

   printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");

   printf("--------------------------------------------------------------------------\n");

   for(i=0;i<n;i++)

   {

         printf("%-8s%4s%13s%8s%7s%12s%12s%8s\n",t[i].name,t[i].sex,t[i].birth,t[i].units,

          t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress);

         if((i+1)%10==0)

         {

              printf("请输入任意键继续....\n");

              getchar();

         }

   }

   printf("**********************************结束************************************\n");

}

 

/*按姓名查找函数,参数为记录数组和记录条数以及姓名s */

int namefind(ADDRESS t[],int n,char *s)

{

   int i;

   for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/

   {

      if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/

       return i; /*相等,则返回该记录的下标号,程序提前结结束*/

   }

   return i; /*返回i值*/

}

 

/*按办公电话查找函数,参数为记录数组和记录条数以及办公电话s */

int officenumberfind(ADDRESS t[],int n,char *s)

{

   int i;

   for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/

   {

      if(strcmp(s,t[i].officenumber)==0) /*记录中的办公电话和待比较的办公电话是否相等*/

       return i; /*相等,则返回该记录的下标号,程序提前结结束*/

   }

   return i; /*返回i值*/

}

/*按住宅电话查找函数,参数为记录数组和记录条数以及住宅电话s */

int homenumberfind(ADDRESS t[],int n,char *s)

{

   int i;

   for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/

   {

      if(strcmp(s,t[i].homenumber)==0) /*记录中的住宅电话和待比较的住宅电话是否相等*/

       return i; /*相等,则返回该记录的下标号,程序提前结结束*/

   }

   return i; /*返回i值*/

}

 

/*删除记录函数,参数为记录数组和记录条数*/

int delet(ADDRESS t[],int n)

{

   char s[20]; /*要删除记录的姓名*/

   int ch=0;

   int i,j;

   printf("请输入您要删除的记录的姓名\n"); /*提示信息*/

   scanf("%s",s);/*输入姓名*/

   i=namefind(t,n,s); /*调用namefind函数*/

   if(i>n-1) /*如果i>n-1超过了数组的长度*/

      printf("对不起,没有找到要删除的记录!\n"); /*显示没找到要删除的记录*/

   else

   {

      mprint(t[i]); /*调用输出函数显示该条记录信息*/

      printf("您确认要删除该条记录么?(1.是/0.否)\n"); /*确认是否要删除*/

      scanf("%d",&ch); /*输入一个整数或*/

      if(ch==1) /*如果确认删除整数*/

      {

      for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/

      {

         strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/

         strcpy(t[j-1].sex,t[j].sex); /*将后一条记录的性别拷贝到前一条*/

         strcpy(t[j-1].birth,t[j].birth); /*将后一条记录的生日拷贝到前一条*/

         strcpy(t[j-1].units,t[j].units); /*将后一条记录的工作单位拷贝到前一条*/

         strcpy(t[j-1].studylevel,t[j].studylevel); /*将后一条记录的学历拷贝到前一条*/

         strcpy(t[j-1].officenumber,t[j].officenumber); /*将后一条记录的办公电话拷贝到前一条*/

         strcpy(t[j-1].homenumber,t[j].homenumber); /*将后一条记录的住宅电话拷贝到前一条*/

         strcpy(t[j-1].homeaddress,t[j].homeaddress); /*将后一条记录的家庭地址拷贝到前一条*/

      }

      n--; /*记录数减*/

      printf("记录删除成功!\n");

      }

   }

   return n; /*返回记录数*/

}

 

/*修改记录函数,参数为记录数组和记录条数*/

void rewrite(ADDRESS t[],int n)

{

   char s[20]; /*要修改记录的姓名*/

   int ch=0;

   int i;

   printf("请输入您要修改的通讯录的姓名:\n"); /*提示信息*/

   scanf("%s",s);/*输入姓名*/

   i=namefind(t,n,s); /*调用namefind函数*/

   if(i>n-1) /*如果i>n-1超过了数组的长度*/

      printf("对不起,没有找到要修改的记录!\n"); /*显示没找到要修改的记录*/

   else

   {

      mprint(t[i]); /*调用输出函数显示该条记录信息*/

      printf("您确定要修改这条记录么?(1.是/0.否)\n"); /*确认是否要修改*/

      scanf("%d",&ch); /*输入一个整数或*/

      if(ch==1) /*如果确认修改整数为*/

       {

           printf("请输入新的记录\n");

          printf("*************************************************************************");

          printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");

          printf("---------------------------------------------------------------------------\n");

          scanf("%s%s%s%s%s%s%s%s",t[i].name,t[i].sex,t[i].birth,t[i].units,

                t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*输入修改信息*/

          printf("---------------------------------------------------------------------------\n");

           printf("记录修改成功!\n");

       }

   }

}

 

/*插入记录函数,参数为结构体数组和记录数*/

int add(ADDRESS t[],int n) /*插入函数,参数为结构体数组和记录数*/

{

   ADDRESS temp; /*新插入记录信息*/

   int i,j;

   char s[20]; /*确定插入在哪个记录之前*/

   printf("请输入您要插入的记录\n");

   printf("***************************************************************************\n");

   printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");

   printf("---------------------------------------------------------------------------\n");

   scanf("%s%s%s%s%s%s%s%s",temp.name,temp.sex,temp.birth,temp.units,

          temp.studylevel,temp.officenumber,temp.homenumber,temp.homeaddress); /*输入插入信息*/
   printf("---------------------------------------------------------------------------\n");

   printf("请输入您要插入位置的姓名\n");

   scanf("%s",s); /*输入插入位置的姓名*/

   i=namefind(t,n,s); /*调用namefind,确定插入位置*/

 

   for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/

   {

      strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/

      strcpy(t[j+1].sex,t[j].sex); /*当前记录的性别拷贝到后一条*/

      strcpy(t[j+1].birth,t[j].birth); /*当前记录的出生年月拷贝到后一条*/

      strcpy(t[j+1].units,t[j].units); /*当前记录的单位拷贝到后一条*/

      strcpy(t[j+1].studylevel,t[j].studylevel); /*当前记录的出生年月拷贝到后一条*/

      strcpy(t[j+1].officenumber,t[j].officenumber); /*当前记录的办公电话拷贝到后一条*/

      strcpy(t[j+1].homenumber,t[j].homenumber); /*当前记录的住宅电话拷贝到后一条*/

      strcpy(t[j+1].homeaddress,t[j].homeaddress); /*当前记录的家庭地址拷贝到后一条*/

   }

      strcpy(t[j].name,temp.name); /*将新插入记录的姓名拷贝到第i个位置*/

      strcpy(t[j].sex,temp.sex); /*将新插入记录的性别拷贝到第i个位置*/

      strcpy(t[j].birth,temp.birth);/*将新插入记录的出生年月拷贝到第i个位置*/

      strcpy(t[j].units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/

      strcpy(t[j].studylevel,temp.studylevel);/*将新插入记录的学历拷贝到第i个位置*/

      strcpy(t[j].officenumber,temp.officenumber);/*将新插入记录的办公电话拷贝到第i个位置*/
      strcpy(t[j].homenumber,temp.homenumber);/*将新插入记录的住宅电话拷贝到第i个位置*/

      strcpy(t->homeaddress,temp.homeaddress);/*将新插入记录的家庭地址拷贝到第i个位置*/

      n++; /*记录数加*/

      printf("记录插入成功!\n");

       return n; /*返回记录数*/

}

 

/*保存函数,参数为结构体数组和记录数*/

void save(ADDRESS t[],int n)

{

   int i;

   FILE *fp; /*指向文件的指针*/

   if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/

   {

      printf("文件不能打开!\n");/*没打开*/

      exit(1); /*退出*/

   }

   fprintf(fp,"%d",n); /*将记录数写入文件*/

   fprintf(fp,"\r\n"); /*将换行符号写入文件*/

   for(i=0;i<n;i++)

   {

      fprintf(fp,"%-8s%4s%13s%8s%7s%12s%12s%8s",t[i].name,t[i].sex,t[i].birth,t[i].units,

          t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress);/*格式写入记录*/

      fprintf(fp,"\r\n"); /*将换行符号写入文件*/

   }

   fclose(fp);/*关闭文件*/

}

 

/*读入函数,参数为结构体数组*/

int load(ADDRESS t[])

{

   int i,n;

   FILE *fp; /*指向文件的指针*/

   if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/

   {

      printf("对不起,不能打开文件!\n"); /*不能打开*/

      exit(1); /*退出*/

   }

   fscanf(fp,"%d",&n); /*读入记录数*/

   for(i=0;i<n;i++)

      fscanf(fp,"%s%s%s%s%s%s%s%s",t[i].name,t[i].sex,t[i].birth,t[i].units,

          t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*按格式读入记录*/

   fclose(fp); /*关闭文件*/

   return n; /*返回记录数*/

}

 

/*按序号显示记录函数*/

void display(ADDRESS t[])

{

   int id,n=0;

   FILE *fp; /*指向文件的指针*/

   if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/

   {

      printf("对不起,不能打开文件!\n"); /*不能打开文件*/

      exit(1); /*退出*/

   }

   printf("请输入您要查找的序号...\n"); /*显示信息*/

   scanf("%d",&id); /*输入序号*/

   fscanf(fp,"%d",&n); /*从文件读入记录数*/

   if((id>=0)&&(id<n)) /*判断序号是否在记录范围内*/

   {

      fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/

      mprint(t[id]); /*调用输出函数显示该记录*/

      printf("\r\n");

   }

   else

      printf("对不起,你要查询的序号不存在!\n通讯录内共有%d 条记录!\n ",id); /*如果序号不合理显示信息*/

   fclose(fp); /*关闭文件*/

}

 

/*按姓名排序函数,参数为结构体数组和记录数*/

void namesort(ADDRESS t[],int n)

{

   int i,j,flag;

   ADDRESS temp; /*临时变量做交换数据用*/

   for(i=0;i<n;i++)

   {

      flag=0; /*设标志判断是否发生过交换*/

      for(j=0;j<n-1;j++)

      if((strcmp(t[j].name,t[j+1].name))>0) /*比较大小*/

      {

      flag=1;

      strcpy(temp.name,t[j].name); /*交换记录*/

      strcpy(temp.sex,t[j].sex);

      strcpy(temp.birth,t[j].birth);

      strcpy(temp.units,t[j].units);

      strcpy(temp.studylevel,t[j].studylevel);

      strcpy(temp.officenumber,t[j].officenumber);

      strcpy(temp.homenumber,t[j].homenumber);

      strcpy(temp.homeaddress,t[j].homeaddress);

      strcpy(t[j].name,t[j+1].name);

      strcpy(t[j].sex,t[j+1].sex);

      strcpy(t[j].birth,t[j+1].birth);

      strcpy(t[j].units,t[j+1].units);

      strcpy(t[j].studylevel,t[j+1].studylevel);

      strcpy(t[j].officenumber,t[j+1].officenumber);

      strcpy(t[j].homenumber,t[j+1].homenumber);

      strcpy(t[j].homeaddress,t[j+1].homeaddress);

      strcpy(t[j+1].name,temp.name);

      strcpy(t[j+1].sex,temp.sex);

      strcpy(t[j+1].birth,temp.birth);

      strcpy(t[j+1].units,temp.units);

      strcpy(t[j+1].studylevel,temp.studylevel);

      strcpy(t[j+1].officenumber,temp.officenumber);

      strcpy(t[j+1].homenumber,temp.homenumber);

      strcpy(t[j+1].homeaddress,temp.homeaddress);

      }

      if(flag==0)break; /*如果标志为,说明没有发生过交换循环结束*/

   }

   printf("按姓名排序成功!\n"); /*显示排序成功*/

}

 

/*按工作单位排序函数,参数为结构体数组和记录数*/

void unitssort(ADDRESS t[],int n)

{

   int i,j,flag;

   ADDRESS temp; /*临时变量做交换数据用*/

   for(i=0;i<n;i++)

   {

      flag=0; /*设标志判断是否发生过交换*/

      for(j=0;j<n-1;j++)

      if((strcmp(t[j].units,t[j+1].units))>0) /*比较大小*/

      {

      flag=1;

      strcpy(temp.name,t[j].name); /*交换记录*/

      strcpy(temp.sex,t[j].sex);

      strcpy(temp.birth,t[j].birth);

      strcpy(temp.units,t[j].units);

      strcpy(temp.studylevel,t[j].studylevel);

      strcpy(temp.officenumber,t[j].officenumber);

      strcpy(temp.homenumber,t[j].homenumber);

      strcpy(temp.homeaddress,t[j].homeaddress);

      strcpy(t[j].name,t[j+1].name);

      strcpy(t[j].sex,t[j+1].sex);

      strcpy(t[j].birth,t[j+1].birth);

      strcpy(t[j].units,t[j+1].units);

      strcpy(t[j].studylevel,t[j+1].studylevel);

      strcpy(t[j].officenumber,t[j+1].officenumber);

      strcpy(t[j].homenumber,t[j+1].homenumber);

      strcpy(t[j].homeaddress,t[j+1].homeaddress);

      strcpy(t[j+1].name,temp.name);

      strcpy(t[j+1].sex,temp.sex);

      strcpy(t[j+1].birth,temp.birth);

      strcpy(t[j+1].units,temp.units);

      strcpy(t[j+1].studylevel,temp.studylevel);

      strcpy(t[j+1].officenumber,temp.officenumber);

      strcpy(t[j+1].homenumber,temp.homenumber);

      strcpy(t[j+1].homeaddress,temp.homeaddress);

      }

      if(flag==0)break; /*如果标志为,说明没有发生过交换循环结束*/

   }

   printf("按工作单位排序成功!\n"); /*显示排序成功*/

}

 

/*复制文件*/

void copy()

{

   char outfile[20]; /*目标文件名*/

   int i,n;

   ADDRESS t[100]; /*定义临时变量*/

   FILE *sfp,*tfp; /*定义指向文件的指针*/

   if((sfp=fopen("record.txt","rb"))==NULL) /*打开记录文件*/

   {

      printf("对不起,不能打开您所需要的文件!\n"); /*显示不能打开文件信息*/

      exit(1); /*退出*/

   }

   printf("请输入目标文件名,例如:c:\\f1\\te.txt:\n"); /*提示信息*/

   scanf("%s",outfile); /*输入目标文件名*/

   if((tfp=fopen(outfile,"wb"))==NULL) /*打开目标文件*/

   {

      printf("对不起,不能打开您所需要的文件!\n"); /*显示不能打开文件信息*/

      exit(1); /*退出*/

   }

   fscanf(sfp,"%d",&n); /*读出文件记录数*/

   fprintf(tfp,"%d",n);/*写入目标文件数*/

   fprintf(tfp,"\r\n"); /*写入换行符*/

   for(i=0;i<n;i++)

   {

      fscanf(sfp,"%s%s%s%s%s%s%s%s",t[i].name,t[i].sex,t[i].birth,t[i].units,

         t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*读入记录*/

      fprintf(tfp,"%-8s%4s%13s%8s%7s%12s%12s%8s",t[i].name,t[i].sex,t[i].birth,t[i].units,

          t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*写入记录*/

      fprintf(tfp,"\r\n"); /*写入换行符*/

   }

   fclose(sfp); /*关闭源文件*/

   fclose(tfp); /*关闭目标文件*/

}

 

/*按姓名查找记录*/

void namesearch(ADDRESS t[],int n)

{

  char s[20]; /*保存待查找姓名字符串*/

  int i; /*保存查找到结点的序号*/

  printf("请输入您要查找的姓名\n");

  scanf("%s",s); /*输入待查找姓名*/

  for(i=0;i<n;i++)

  {

       if(strcmp(s,t[i].name)==0)

       {

       if(i==n)

         printf("对不起,没有找到您所需要的记录!\n");

      else

           mprint(t[i]); /*找到,调用显示函数显示记录*/

       }

  }

}

 

/*按工作单位查找记录*/

void unitssearch(ADDRESS t[],int n)

{

  char s[30]; /*保存待查找工作单位字符串*/

  int i; /*保存查找到结点的序号*/

  printf("请输入您要查找的工作单位\n");

  scanf("%s",s); /*输入待查找工作单位*/

  for(i=0;i<n;i++)

  {

       if(strcmp(s,t[i].units)==0)

       {

       if(i==n)

         printf("对不起,没有找到您所需要的记录!\n");

      else

           mprint(t[i]); /*找到,调用显示函数显示记录*/

       }

  }

}

 

/*按办公电话电话查找记录*/

void officenumbersearch(ADDRESS t[],int n)

{

  char s[15]; /*保存待查找办公电话字符串*/

  int i; /*保存查找到结点的序号*/

  printf("请输入您要查找的办公电话\n");

  scanf("%s",s); /*输入待查找办公电话*/

  i=officenumberfind(t,n,s);/* 调用officenumberfind函数,得到一个整数*/

  if(i==n)

      printf("对不起,没有找到您需要的记录!\n");

  else

      mprint(t[i]); /*找到,调用显示函数显示记录*/

}

 

/*按住宅电话电话查找记录*/

void homenumbersearch(ADDRESS t[],int n)

{

  char s[15]; /*保存待查找住宅电话字符串*/

  int i; /*保存查找到结点的序号*/

  printf("请输入您要查找的住宅电话\n");

  scanf("%s",s); /*输入待查找住宅电话*/

  i=homenumberfind(t,n,s);/* 调用homenumberfind函数,得到一个整数*/

if(i==n)

      printf("对不起,没有找到您需要的记录!\n");

else

      mprint(t[i]); /*找到,调用显示函数显示记录*/

}

 

/*通讯录信息浏览及排序功能*/

void showpaixu(ADDRESS adr[],int length)

{

    int choice;

menu1:

   system("cls");

   printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
   printf(" 1. 全部显示通讯录信息\n\n");

   printf(" 2. 按序号显示通讯录信息\n\n");

   printf(" 3. 按姓名排序\n\n");

   printf(" 4. 按工作单位排序\n\n");

   printf(" 0. 返回上一级菜单\n\n");

   printf(" ********************************************************************\n");
   printf(" 请选择(0~4)\n ");

   scanf("%d",&choice);

   switch(choice)

   {

     case 1: length=load(adr);

             list(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

            break; /*显示全部记录*/

     case 2: length=load(adr);

             display(adr);

              printf(" 请按任意键返回...\n");

            getch();break; /*按序号显示记录*/

     case 3: length=load(adr);

             namesort(adr,length);

              save(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

              break; /*按姓名排序*/

     case 4: length=load(adr);

             unitssort(adr,length);

             save(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

             break; /*按工作单位排序*/

     case 0: return;

   }

   goto menu1;

}

 

/*通讯录信息查找功能*/

void chazhao(ADDRESS adr[],int length)

{

    int choice;

menu2:

   system("cls");

   printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
   printf(" 1. 通过姓名查找\n\n");

   printf(" 2. 通过工作单位查找\n\n");

   printf(" 3. 通过办公电话查找\n\n");

   printf(" 4. 通过家庭电话查找\n\n");

   printf(" 0. 返回上一级菜单\n\n");

   printf(" ********************************************************************\n");
   printf(" 请选择(0~4)\n ");

   scanf("%d",&choice);

   switch(choice)

   {

     case 1: length=load(adr);

             namesearch(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

              break; /*按姓名查找记录*/

     case 2: length=load(adr);

              unitssearch(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

             break; /*按工作单位查找记录*/

     case 3: length=load(adr);

             officenumbersearch(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

              break; /*按办公电话查找记录*/

     case 4: length=load(adr);

             homenumbersearch(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

              break; /*按住宅电话查找记录*/

     case 0: return;

   }

   goto menu2;

}

 

/*通讯录信息变更功能*/

void biangeng(ADDRESS adr[],int length)

{

     int choice;

menu3:

   system("cls");

   printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");

   printf(" 1. 删除记录\n\n");

   printf(" 2. 修改记录\n\n");

   printf(" 3. 添加记录\n\n");

   printf(" 0. 返回上一级菜单\n\n");

   printf(" ********************************************************************\n");
   printf(" 请选择(0~3)\n ");

   scanf("%d",&choice);

   switch(choice)

   {

     case 1: length=load(adr);

             length=delet(adr,length);

              save(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

              break; /*删除记录*/

     case 2: length=load(adr);

             rewrite(adr,length);

              save(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

              break; /*修改记录*/

     case 3: length=load(adr);

             length=add(adr,length);

              save(adr,length);

              printf(" 请按任意键返回...\n");

            getch();

              break; /*插入记录*/

     case 0: return;

   }

   goto menu3;

}

 

/*通讯录及文件操作功能*/

void wenjian(ADDRESS adr[],int length)

{

     int choice;

menu4:

   system("cls");

   printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
   printf(" 1. 导入文件到通讯录\n\n");

   printf(" 2. 把当前文件复制到新文件上\n\n");

   printf(" 0. 返回上一级菜单\n\n");

   printf(" ********************************************************************\n");

   printf(" 请选择(0~2)\n ");

   scanf("%d",&choice);

   switch(choice)

   {

     case 1: length=load(adr);

             printf("您已经成功的导入文件到通讯录!\n");

            printf(" 请按任意键返回...\n");

            getch();break;

     case 2: copy();

             printf("复制成功!\n");

            printf(" 请按任意键返回...\n");

            getch();break;

     case 0: return;

   }

   goto menu4;

}

 

/*关于*/

void about()

{

     system("color 87");

     system("cls");

     printf("\n\n\n\n 《通讯录信息管理系统》\n\n\n");

     printf(" *****************************************\n\n\n");   

    

     printf(" *****************************************\n\n\n");

     printf(" 请按任意键返回主菜单...");

     getch();

}

 

/******主函数开始*******/

int _tmain(int argc, _TCHAR* argv[])


{

    int choice;

    int length; /*保存记录长度*/

    ADDRESS adr[100]; /*定义结构体数组*/

menu:

     system("color f9");

     system("cls");

      printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");

      printf(" 请选择以下通讯录管理功能:\n\n");

      printf(" 1. 通讯录信息输入\n\n");

      printf(" 2. 通讯录信息浏览及排序\n\n");

      printf(" 3. 通讯录信息查询\n\n");

      printf(" 4. 通讯录信息更改\n\n");

      printf(" 5. 通讯录及文件操作\n\n");

      printf(" 6. 关于通讯录信息管理系统\n\n");

      printf(" 0. 退出通讯录管理系统\n\n");

      printf(" ********************************************************************\n");

      printf(" 请选择(0~6)\n ");

      scanf("%d",&choice);

      switch(choice)

      {
        
        case 0: exit(0); /*如返回值为则程序结束*/
        case 1: length=enter(adr);

                save(adr,length);

                printf("\n 请按任意键返回...\n");

               getch();break;/*输入记录*/

        case 2: showpaixu(adr,length);break;

        case 3: chazhao(adr,length);break;

        case 4: biangeng(adr,length);break;

        case 5: wenjian(adr,length);break;

        case 6: about();break;/*关于*/


      }

      goto menu;

}

////////////////////////////////////////
// 功能:打印表格线
// 参数:
// location 表格线的位置, 0 表头线,1 表中线,2 表尾线
// colCount 表格的列数
// colWidth 表格的列宽
/////////////////////////////////////////
void PrintTableLine(int location, int colCount, int colWidth)
{
 //注意:这些是中文符号,所以要用3个字符装(包括/0)
 char lineHead[][3] = {"┌", "├", "└"};
 char lineMid1[][3] = {"─", "─", "─"};
 char lineMid2[][3] = {"┬", "┼", "┴"};
 char lineTail[][3] = {"┐", "┤", "┘"};
 cout << lineHead[location]; //行首
 for (int i = 0; i < colCount; i++)
 {
  for (int j = 0; j < colWidth/2; j++)
  {
   cout << lineMid1[location];
  }
  if (i < colCount - 1) cout << lineMid2[location];
 }
 cout << lineTail[location] << endl; //行尾
}

/////////////////////////////////////////////////////////
// 功能:获取指定二维数组中的最大显示宽度
// 参数:A 二维数组名,rowCount 行数,colCount 列数
/////////////////////////////////////////////////////////
int GetMaxWidth(int* A, int rowCount, int colCount)
{
 int width = 0;
 for (int i = 0; i < rowCount; i++)
 {
  for (int j = 0; j < colCount; j++)
  {
   int c = 1;
   int temp = A[i*rowCount+j];
   while (temp)
   {
    temp /= 10;
    c++;
   }
   width = width < c ? c : width;
  }
 }
 return width;
}

///////////////////////////////////////
// 功能:将二维数组打印成表格样式
// 参数:A 二维数组名,rowCount 行数,colCount 列数
//////////////////////////////////////
void PrintArray(int* A, int rowCount, int colCount)
{
 char tablines[] = {"┌┬┐├┼┤└┴┘─│"};
 int i, j, colWidth;

 //colWidth = GetMaxWidth(A, rowCount, colCount); //获取所有数据中的最大宽度
 colWidth=20;
 //打印表头线
 PrintTableLine(0, colCount, colWidth);

 //打印表格内容
 for (i = 0; i < rowCount; i++)
 {
  if (i > 0) PrintTableLine(1, colCount, colWidth); //打印表中线
  cout << "│"; //行首
  for (j = 0; j < colCount; j++)
  {
   cout.width(colWidth);  //内容按指定宽度输出
   cout << A[i*rowCount+j];
   if (j < colCount - 1 ) cout << "│"; // 表中竖线
  }
  cout << "│" << endl; //行尾
 }

 PrintTableLine(2, colCount, colWidth); //打印表尾
}

//void main()
//{
// int A[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// PrintArray(&A[0][0], 3, 3);
//}

//int _tmain(int argc, _TCHAR* argv[])
//{
// int A[][3] = {{111, 2, 3}, {43, 5, 6}, {7, 8, 9}};
// PrintArray(&A[0][0],3, 3);
// int c;
// cin>>c;
// return 0;
//}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值