Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2226460
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类: C/C++

2011-07-28 09:11:47

  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "string.h"
  4. #include "conio.h" //包含这个getch()方法
  5. #define M 50
  6. typedef struct
  7. {
  8.    char name[20]; /*姓名*/
  9.    char ***[10]; /*性别*/
  10.    char birth[15]; /*出生年月*/
  11.    char units[30]; /*工作单位*/
  12.    char studylevel[20]; /*学历*/
  13.    char officenumber[15]; /*办公电话*/
  14.    char homenumber[15]; /*住宅电话*/
  15.    char homeaddress[30]; /*家庭住址*/
  16. }ADDRESS;

  17. /*显示指定的一条记录*/
  18. void mprint(ADDRESS temp)
  19. {
  20.    printf("\n****************************************************************************\n");
  21.    printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
  22.    printf("----------------------------------------------------------------------------\n");
  23.    printf("%-8s%4s%13s%8s%7s%12s%12s%8s\n",temp.name,temp.***,temp.birth,temp.units,
  24.           temp.studylevel,temp.officenumber,temp.homenumber,temp.homeaddress);
  25.    printf("*********************************end****************************************\n");
  26. }

  27. /*输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
  28. int enter(ADDRESS t[])
  29. {
  30.    int i,n;
  31.    system("cls");
  32.    printf("********************************************************************************\n");
  33.    printf("请确定您要输入的记录数\n"); /*提示信息*/
  34.    scanf("%d",&n); /*输入记录数*/
  35.    if(n>0)
  36.    {
  37.         printf("请输入您的通讯录记录\n\n"); /*提示输入记录*/
  38.        printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
  39.        printf("--------------------------------------------------------------------------\n");
  40.        for(i=0;i<n;i++)
  41.         {
  42.         scanf("%s%s%s%s%s%s%s%s",t[i].name,t[i].***,t[i].birth,t[i].units,
  43.           t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*输入记录*/
  44.         printf("-------------------------------------------------------------------------\n");
  45.         }
  46.        printf("信息录入成功!");
  47.        return n; /*返回记录条数*/
  48.    }
  49.    if(n<=0) printf("对不起,您输入的记录数不正确\n");exit(0);
  50. }

  51. /*显示记录,参数为记录数组和记录条数*/
  52. void list(ADDRESS t[],int n)
  53. {
  54.     int i;
  55.    system("cls");
  56.    printf("\n*********************************通讯录***********************************\n");
  57.    printf(" 总共有%d 条记录 \n",n);
  58.    printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
  59.    printf("--------------------------------------------------------------------------\n");
  60.    for(i=0;i<n;i++)
  61.    {
  62.          printf("%-8s%4s%13s%8s%7s%12s%12s%8s\n",t[i].name,t[i].***,t[i].birth,t[i].units,
  63.           t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress);
  64.          if((i+1)%10==0)
  65.          {
  66.               printf("请输入任意键继续....\n");
  67.               getchar();
  68.          }
  69.    }
  70.    printf("**********************************结束************************************\n");
  71. }

  72. /*按姓名查找函数,参数为记录数组和记录条数以及姓名s */
  73. int namefind(ADDRESS t[],int n,char *s)
  74. {
  75.    int i;
  76.    for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
  77.    {
  78.       if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/
  79.        return i; /*相等,则返回该记录的下标号,程序提前结结束*/
  80.    }
  81.    return i; /*返回i值*/
  82. }

  83. /*按办公电话查找函数,参数为记录数组和记录条数以及办公电话s */
  84. int officenumberfind(ADDRESS t[],int n,char *s)
  85. {
  86.    int i;
  87.    for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
  88.    {
  89.       if(strcmp(s,t[i].officenumber)==0) /*记录中的办公电话和待比较的办公电话是否相等*/
  90.        return i; /*相等,则返回该记录的下标号,程序提前结结束*/
  91.    }
  92.    return i; /*返回i值*/
  93. }
  94. /*按住宅电话查找函数,参数为记录数组和记录条数以及住宅电话s */
  95. int homenumberfind(ADDRESS t[],int n,char *s)
  96. {
  97.    int i;
  98.    for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
  99.    {
  100.       if(strcmp(s,t[i].homenumber)==0) /*记录中的住宅电话和待比较的住宅电话是否相等*/
  101.        return i; /*相等,则返回该记录的下标号,程序提前结结束*/
  102.    }
  103.    return i; /*返回i值*/
  104. }

  105. /*删除记录函数,参数为记录数组和记录条数*/
  106. int delet(ADDRESS t[],int n)
  107. {
  108.    char s[20]; /*要删除记录的姓名*/
  109.    int ch=0;
  110.    int i,j;
  111.    printf("请输入您要删除的记录的姓名\n"); /*提示信息*/
  112.    scanf("%s",s);/*输入姓名*/
  113.    i=namefind(t,n,s); /*调用namefind函数*/
  114.    if(i>n-1) /*如果i>n-1超过了数组的长度*/
  115.       printf("对不起,没有找到要删除的记录!\n"); /*显示没找到要删除的记录*/
  116.    else
  117.    {
  118.       mprint(t[i]); /*调用输出函数显示该条记录信息*/
  119.       printf("您确认要删除该条记录么?(1.是/0.否)\n"); /*确认是否要删除*/
  120.       scanf("%d",&ch); /*输入一个整数或*/
  121.       if(ch==1) /*如果确认删除整数*/
  122.       {
  123.       for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/
  124.       {
  125.          strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/
  126.          strcpy(t[j-1].***,t[j].***); /*将后一条记录的性别拷贝到前一条*/
  127.          strcpy(t[j-1].birth,t[j].birth); /*将后一条记录的生日拷贝到前一条*/
  128.          strcpy(t[j-1].units,t[j].units); /*将后一条记录的工作单位拷贝到前一条*/
  129.          strcpy(t[j-1].studylevel,t[j].studylevel); /*将后一条记录的学历拷贝到前一条*/
  130.          strcpy(t[j-1].officenumber,t[j].officenumber); /*将后一条记录的办公电话拷贝到前一条*/
  131.          strcpy(t[j-1].homenumber,t[j].homenumber); /*将后一条记录的住宅电话拷贝到前一条*/
  132.          strcpy(t[j-1].homeaddress,t[j].homeaddress); /*将后一条记录的家庭地址拷贝到前一条*/
  133.       }
  134.       n--; /*记录数减*/
  135.       printf("记录删除成功!\n");
  136.       }
  137.    }
  138.    return n; /*返回记录数*/
  139. }

  140. /*修改记录函数,参数为记录数组和记录条数*/
  141. void rewrite(ADDRESS t[],int n)
  142. {
  143.    char s[20]; /*要修改记录的姓名*/
  144.    int ch=0;
  145.    int i;
  146.    printf("请输入您要修改的通讯录的姓名:\n"); /*提示信息*/
  147.    scanf("%s",s);/*输入姓名*/
  148.    i=namefind(t,n,s); /*调用namefind函数*/
  149.    if(i>n-1) /*如果i>n-1超过了数组的长度*/
  150.       printf("对不起,没有找到要修改的记录!\n"); /*显示没找到要修改的记录*/
  151.    else
  152.    {
  153.       mprint(t[i]); /*调用输出函数显示该条记录信息*/
  154.       printf("您确定要修改这条记录么?(1.是/0.否)\n"); /*确认是否要修改*/
  155.       scanf("%d",&ch); /*输入一个整数或*/
  156.       if(ch==1) /*如果确认修改整数为*/
  157.        {
  158.            printf("请输入新的记录\n");
  159.           printf("***************************************************************************\n");
  160.           printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
  161.           printf("---------------------------------------------------------------------------\n");
  162.           scanf("%s%s%s%s%s%s%s%s",t[i].name,t[i].***,t[i].birth,t[i].units,
  163.                 t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*输入修改信息*/
  164.           printf("---------------------------------------------------------------------------\n");
  165.            printf("记录修改成功!\n");
  166.        }
  167.    }
  168. }

  169. /*插入记录函数,参数为结构体数组和记录数*/
  170. int add(ADDRESS t[],int n) /*插入函数,参数为结构体数组和记录数*/
  171. {
  172.    ADDRESS temp; /*新插入记录信息*/
  173.    int i,j;
  174.    char s[20]; /*确定插入在哪个记录之前*/
  175.    printf("请输入您要插入的记录\n");
  176.    printf("***************************************************************************\n");
  177.    printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
  178.    printf("---------------------------------------------------------------------------\n");
  179.    scanf("%s%s%s%s%s%s%s%s",temp.name,temp.***,temp.birth,temp.units,
  180.           temp.studylevel,temp.officenumber,temp.homenumber,temp.homeaddress); /*输入插入信息*/
  181.    printf("---------------------------------------------------------------------------\n");
  182.    printf("请输入您要插入位置的姓名\n");
  183.    scanf("%s",s); /*输入插入位置的姓名*/
  184.    i=namefind(t,n,s); /*调用namefind,确定插入位置*/
  185.   
  186.    for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/
  187.    {
  188.       strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/
  189.       strcpy(t[j+1].***,t[j].***); /*当前记录的性别拷贝到后一条*/
  190.       strcpy(t[j+1].birth,t[j].birth); /*当前记录的出生年月拷贝到后一条*/
  191.       strcpy(t[j+1].units,t[j].units); /*当前记录的单位拷贝到后一条*/
  192.       strcpy(t[j+1].studylevel,t[j].studylevel); /*当前记录的出生年月拷贝到后一条*/
  193.       strcpy(t[j+1].officenumber,t[j].officenumber); /*当前记录的办公电话拷贝到后一条*/
  194.       strcpy(t[j+1].homenumber,t[j].homenumber); /*当前记录的住宅电话拷贝到后一条*/
  195.       strcpy(t[j+1].homeaddress,t[j].homeaddress); /*当前记录的家庭地址拷贝到后一条*/
  196.    }
  197.       strcpy(t[j].name,temp.name); /*将新插入记录的姓名拷贝到第i个位置*/
  198.       strcpy(t[j].***,temp.***); /*将新插入记录的性别拷贝到第i个位置*/
  199.       strcpy(t[j].birth,temp.birth);/*将新插入记录的出生年月拷贝到第i个位置*/
  200.       strcpy(t[j].units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/
  201.       strcpy(t[j].studylevel,temp.studylevel);/*将新插入记录的学历拷贝到第i个位置*/
  202.       strcpy(t[j].officenumber,temp.officenumber);/*将新插入记录的办公电话拷贝到第i个位置*/
  203.       strcpy(t[j].homenumber,temp.homenumber);/*将新插入记录的住宅电话拷贝到第i个位置*/
  204.       strcpy(t->homeaddress,temp.homeaddress);/*将新插入记录的家庭地址拷贝到第i个位置*/
  205.       n++; /*记录数加*/
  206.       printf("记录插入成功!\n");
  207.        return n; /*返回记录数*/
  208. }

  209. /*保存函数,参数为结构体数组和记录数*/
  210. void save(ADDRESS t[],int n)
  211. {
  212.    int i;
  213.    FILE *fp; /*指向文件的指针*/
  214.    if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/
  215.    {
  216.       printf("文件不能打开!\n");/*没打开*/
  217.       exit(1); /*退出*/
  218.    }
  219.    fprintf(fp,"%d",n); /*将记录数写入文件*/
  220.    fprintf(fp,"\r\n"); /*将换行符号写入文件*/
  221.    for(i=0;i<n;i++)
  222.    {
  223.       fprintf(fp,"%-8s%4s%13s%8s%7s%12s%12s%8s",t[i].name,t[i].***,t[i].birth,t[i].units,
  224.           t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress);/*格式写入记录*/
  225.       fprintf(fp,"\r\n"); /*将换行符号写入文件*/
  226.    }
  227.    fclose(fp);/*关闭文件*/
  228. }

  229. /*读入函数,参数为结构体数组*/
  230. int load(ADDRESS t[])
  231. {
  232.    int i,n;
  233.    FILE *fp; /*指向文件的指针*/
  234.    if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/
  235.    {
  236.       printf("对不起,不能打开文件!\n"); /*不能打开*/
  237.       exit(1); /*退出*/
  238.    }
  239.    fscanf(fp,"%d",&n); /*读入记录数*/
  240.    for(i=0;i<n;i++)
  241.       fscanf(fp,"%s%s%s%s%s%s%s%s",t[i].name,t[i].***,t[i].birth,t[i].units,
  242.           t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*按格式读入记录*/
  243.    fclose(fp); /*关闭文件*/
  244.    return n; /*返回记录数*/
  245. }

  246. /*按序号显示记录函数*/
  247. void display(ADDRESS t[])
  248. {
  249.    int id,n=0;
  250.    FILE *fp; /*指向文件的指针*/
  251.    if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/
  252.    {
  253.       printf("对不起,不能打开文件!\n"); /*不能打开文件*/
  254.       exit(1); /*退出*/
  255.    }
  256.    printf("请输入您要查找的序号...\n"); /*显示信息*/
  257.    scanf("%d",&id); /*输入序号*/
  258.    fscanf(fp,"%d",&n); /*从文件读入记录数*/
  259.    if((id>=0)&&(id<n)) /*判断序号是否在记录范围内*/
  260.    {
  261.       fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/
  262.       mprint(t[id]); /*调用输出函数显示该记录*/
  263.       printf("\r\n");
  264.    }
  265.    else
  266.       printf("对不起,你要查询的序号不存在!\n通讯录内共有%d 条记录!\n ",id); /*如果序号不合理显示信息*/
  267.    fclose(fp); /*关闭文件*/
  268. }

  269. /*按姓名排序函数,参数为结构体数组和记录数*/
  270. void namesort(ADDRESS t[],int n)
  271. {
  272.    int i,j,flag;
  273.    ADDRESS temp; /*临时变量做交换数据用*/
  274.    for(i=0;i<n;i++)
  275.    {
  276.       flag=0; /*设标志判断是否发生过交换*/
  277.       for(j=0;j<n-1;j++)
  278.       if((strcmp(t[j].name,t[j+1].name))>0) /*比较大小*/
  279.       {
  280.       flag=1;
  281.       strcpy(temp.name,t[j].name); /*交换记录*/
  282.       strcpy(temp.***,t[j].***);
  283.       strcpy(temp.birth,t[j].birth);
  284.       strcpy(temp.units,t[j].units);
  285.       strcpy(temp.studylevel,t[j].studylevel);
  286.       strcpy(temp.officenumber,t[j].officenumber);
  287.       strcpy(temp.homenumber,t[j].homenumber);
  288.       strcpy(temp.homeaddress,t[j].homeaddress);
  289.       strcpy(t[j].name,t[j+1].name);
  290.       strcpy(t[j].***,t[j+1].***);
  291.       strcpy(t[j].birth,t[j+1].birth);
  292.       strcpy(t[j].units,t[j+1].units);
  293.       strcpy(t[j].studylevel,t[j+1].studylevel);
  294.       strcpy(t[j].officenumber,t[j+1].officenumber);
  295.       strcpy(t[j].homenumber,t[j+1].homenumber);
  296.       strcpy(t[j].homeaddress,t[j+1].homeaddress);
  297.       strcpy(t[j+1].name,temp.name);
  298.       strcpy(t[j+1].***,temp.***);
  299.       strcpy(t[j+1].birth,temp.birth);
  300.       strcpy(t[j+1].units,temp.units);
  301.       strcpy(t[j+1].studylevel,temp.studylevel);
  302.       strcpy(t[j+1].officenumber,temp.officenumber);
  303.       strcpy(t[j+1].homenumber,temp.homenumber);
  304.       strcpy(t[j+1].homeaddress,temp.homeaddress);
  305.       }
  306.       if(flag==0)break; /*如果标志为,说明没有发生过交换循环结束*/
  307.    }
  308.    printf("按姓名排序成功!\n"); /*显示排序成功*/
  309. }

  310. /*按工作单位排序函数,参数为结构体数组和记录数*/
  311. void unitssort(ADDRESS t[],int n)
  312. {
  313.    int i,j,flag;
  314.    ADDRESS temp; /*临时变量做交换数据用*/
  315.    for(i=0;i<n;i++)
  316.    {
  317.       flag=0; /*设标志判断是否发生过交换*/
  318.       for(j=0;j<n-1;j++)
  319.       if((strcmp(t[j].units,t[j+1].units))>0) /*比较大小*/
  320.       {
  321.       flag=1;
  322.       strcpy(temp.name,t[j].name); /*交换记录*/
  323.       strcpy(temp.***,t[j].***);
  324.       strcpy(temp.birth,t[j].birth);
  325.       strcpy(temp.units,t[j].units);
  326.       strcpy(temp.studylevel,t[j].studylevel);
  327.       strcpy(temp.officenumber,t[j].officenumber);
  328.       strcpy(temp.homenumber,t[j].homenumber);
  329.       strcpy(temp.homeaddress,t[j].homeaddress);
  330.       strcpy(t[j].name,t[j+1].name);
  331.       strcpy(t[j].***,t[j+1].***);
  332.       strcpy(t[j].birth,t[j+1].birth);
  333.       strcpy(t[j].units,t[j+1].units);
  334.       strcpy(t[j].studylevel,t[j+1].studylevel);
  335.       strcpy(t[j].officenumber,t[j+1].officenumber);
  336.       strcpy(t[j].homenumber,t[j+1].homenumber);
  337.       strcpy(t[j].homeaddress,t[j+1].homeaddress);
  338.       strcpy(t[j+1].name,temp.name);
  339.       strcpy(t[j+1].***,temp.***);
  340.       strcpy(t[j+1].birth,temp.birth);
  341.       strcpy(t[j+1].units,temp.units);
  342.       strcpy(t[j+1].studylevel,temp.studylevel);
  343.       strcpy(t[j+1].officenumber,temp.officenumber);
  344.       strcpy(t[j+1].homenumber,temp.homenumber);
  345.       strcpy(t[j+1].homeaddress,temp.homeaddress);
  346.       }
  347.       if(flag==0)break; /*如果标志为,说明没有发生过交换循环结束*/
  348.    }
  349.    printf("按工作单位排序成功!\n"); /*显示排序成功*/
  350. }

  351. /*复制文件*/
  352. void copy()
  353. {
  354.    char outfile[20]; /*目标文件名*/
  355.    int i,n;
  356.    ADDRESS t[1024]; /*定义临时变量*/
  357.    FILE *sfp,*tfp; /*定义指向文件的指针*/
  358.    if((sfp=fopen("record.txt","rb"))==NULL) /*打开记录文件*/
  359.    {
  360.       printf("对不起,不能打开您所需要的文件!\n"); /*显示不能打开文件信息*/
  361.       exit(1); /*退出*/
  362.    }
  363.    printf("请输入目标文件名,例如:c:\\f1\\te.txt:\n"); /*提示信息*/
  364.    scanf("%s",outfile); /*输入目标文件名*/
  365.    if((tfp=fopen(outfile,"wb"))==NULL) /*打开目标文件*/
  366.    {
  367.       printf("对不起,不能打开您所需要的文件!\n"); /*显示不能打开文件信息*/
  368.       exit(1); /*退出*/
  369.    }
  370.    fscanf(sfp,"%d",&n); /*读出文件记录数*/
  371.    fprintf(tfp,"%d",n);/*写入目标文件数*/
  372.    fprintf(tfp,"\r\n"); /*写入换行符*/
  373.    for(i=0;i<n;i++)
  374.    {
  375.       fscanf(sfp,"%s%s%s%s%s%s%s%s",t[i].name,t[i].***,t[i].birth,t[i].units,
  376.          t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*读入记录*/
  377.       fprintf(tfp,"%-8s%4s%13s%8s%7s%12s%12s%8s",t[i].name,t[i].***,t[i].birth,t[i].units,
  378.           t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*写入记录*/
  379.       fprintf(tfp,"\r\n"); /*写入换行符*/
  380.    }
  381.    fclose(sfp); /*关闭源文件*/
  382.    fclose(tfp); /*关闭目标文件*/
  383. }

  384. /*按姓名查找记录*/
  385. void namesearch(ADDRESS t[],int n)
  386. {
  387.   char s[20]; /*保存待查找姓名字符串*/
  388.   int i; /*保存查找到结点的序号*/
  389.   printf("请输入您要查找的姓名\n");
  390.   scanf("%s",s); /*输入待查找姓名*/
  391.   for(i=0;i<n;i++)
  392.   {
  393.        if(strcmp(s,t[i].name)==0)
  394.        {
  395.        if(i==n)
  396.          printf("对不起,没有找到您所需要的记录!\n");
  397.       else
  398.            mprint(t[i]); /*找到,调用显示函数显示记录*/
  399.        }
  400.   }
  401. }

  402. /*按工作单位查找记录*/
  403. void unitssearch(ADDRESS t[],int n)
  404. {
  405.   char s[30]; /*保存待查找工作单位字符串*/
  406.   int i; /*保存查找到结点的序号*/
  407.   printf("请输入您要查找的工作单位\n");
  408.   scanf("%s",s); /*输入待查找工作单位*/
  409.   for(i=0;i<n;i++)
  410.   {
  411.        if(strcmp(s,t[i].units)==0)
  412.        {
  413.        if(i==n)
  414.          printf("对不起,没有找到您所需要的记录!\n");
  415.       else
  416.            mprint(t[i]); /*找到,调用显示函数显示记录*/
  417.        }
  418.   }
  419. }

  420. /*按办公电话电话查找记录*/
  421. void officenumbersearch(ADDRESS t[],int n)
  422. {
  423.   char s[15]; /*保存待查找办公电话字符串*/
  424.   int i; /*保存查找到结点的序号*/
  425.   printf("请输入您要查找的办公电话\n");
  426.   scanf("%s",s); /*输入待查找办公电话*/
  427.   i=officenumberfind(t,n,s);/* 调用officenumberfind函数,得到一个整数*/
  428.   if(i==n)
  429.       printf("对不起,没有找到您需要的记录!\n");
  430.   else
  431.       mprint(t[i]); /*找到,调用显示函数显示记录*/
  432. }

  433. /*按住宅电话电话查找记录*/
  434. void homenumbersearch(ADDRESS t[],int n)
  435. {
  436.   char s[15]; /*保存待查找住宅电话字符串*/
  437.   int i; /*保存查找到结点的序号*/
  438.   printf("请输入您要查找的住宅电话\n");
  439.   scanf("%s",s); /*输入待查找住宅电话*/
  440.   i=homenumberfind(t,n,s);/* 调用homenumberfind函数,得到一个整数*/
  441. if(i==n)
  442.       printf("对不起,没有找到您需要的记录!\n");
  443. else
  444.       mprint(t[i]); /*找到,调用显示函数显示记录*/
  445. }

  446. /*通讯录信息浏览及排序功能*/
  447. void showpaixu(ADDRESS adr[],int length)
  448. {
  449.     int choice;
  450. menu1:
  451.    system("cls");
  452.    printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  453.    printf(" 1. 全部显示通讯录信息\n\n");
  454.    printf(" 2. 按序号显示通讯录信息\n\n");
  455.    printf(" 3. 按姓名排序\n\n");
  456.    printf(" 4. 按工作单位排序\n\n");
  457.    printf(" 0. 返回上一级菜单\n\n");
  458.    printf(" ********************************************************************\n");
  459.    printf(" 请选择(0~4)\n ");
  460.    scanf("%d",&choice);
  461.    switch(choice)
  462.    {
  463.      case 1: length=load(adr);
  464.              list(adr,length);
  465.               printf(" 请按任意键返回...\n");
  466.             getch();
  467.             break; /*显示全部记录*/
  468.      case 2: length=load(adr);
  469.              display(adr);
  470.               printf(" 请按任意键返回...\n");
  471.             getch();break; /*按序号显示记录*/
  472.      case 3: length=load(adr);
  473.              namesort(adr,length);
  474.               save(adr,length);
  475.               printf(" 请按任意键返回...\n");
  476.             getch();
  477.               break; /*按姓名排序*/
  478.      case 4: length=load(adr);
  479.              unitssort(adr,length);
  480.              save(adr,length);
  481.               printf(" 请按任意键返回...\n");
  482.             getch();
  483.              break; /*按工作单位排序*/
  484.      case 0: return;
  485.    }
  486.    goto menu1;
  487. }

  488. /*通讯录信息查找功能*/
  489. void chazhao(ADDRESS adr[],int length)
  490. {
  491.     int choice;
  492. menu2:
  493.    system("cls");
  494.    printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  495.    printf(" 1. 通过姓名查找\n\n");
  496.    printf(" 2. 通过工作单位查找\n\n");
  497.    printf(" 3. 通过办公电话查找\n\n");
  498.    printf(" 4. 通过家庭电话查找\n\n");
  499.    printf(" 0. 返回上一级菜单\n\n");
  500.    printf(" ********************************************************************\n");
  501.    printf(" 请选择(0~4)\n ");
  502.    scanf("%d",&choice);
  503.    switch(choice)
  504.    {
  505.      case 1: length=load(adr);
  506.              namesearch(adr,length);
  507.               printf(" 请按任意键返回...\n");
  508.             getch();
  509.               break; /*按姓名查找记录*/
  510.      case 2: length=load(adr);
  511.               unitssearch(adr,length);
  512.               printf(" 请按任意键返回...\n");
  513.             getch();
  514.              break; /*按工作单位查找记录*/
  515.      case 3: length=load(adr);
  516.              officenumbersearch(adr,length);
  517.               printf(" 请按任意键返回...\n");
  518.             getch();
  519.               break; /*按办公电话查找记录*/
  520.      case 4: length=load(adr);
  521.              homenumbersearch(adr,length);
  522.               printf(" 请按任意键返回...\n");
  523.             getch();
  524.               break; /*按住宅电话查找记录*/
  525.      case 0: return;
  526.    }
  527.    goto menu2;
  528. }

  529. /*通讯录信息变更功能*/
  530. void biangeng(ADDRESS adr[],int length)
  531. {
  532.      int choice;
  533. menu3:
  534.    system("cls");
  535.    printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  536.    printf(" 1. 删除记录\n\n");
  537.    printf(" 2. 修改记录\n\n");
  538.    printf(" 3. 添加记录\n\n");
  539.    printf(" 0. 返回上一级菜单\n\n");
  540.    printf(" ********************************************************************\n");
  541.    printf(" 请选择(0~3)\n ");
  542.    scanf("%d",&choice);
  543.    switch(choice)
  544.    {
  545.      case 1: length=load(adr);
  546.              length=delet(adr,length);
  547.               save(adr,length);
  548.               printf(" 请按任意键返回...\n");
  549.             getch();
  550.               break; /*删除记录*/
  551.      case 2: length=load(adr);
  552.              rewrite(adr,length);
  553.               save(adr,length);
  554.               printf(" 请按任意键返回...\n");
  555.             getch();
  556.               break; /*修改记录*/
  557.      case 3: length=load(adr);
  558.              length=add(adr,length);
  559.               save(adr,length);
  560.               printf(" 请按任意键返回...\n");
  561.             getch();
  562.               break; /*插入记录*/
  563.      case 0: return;
  564.    }
  565.    goto menu3;
  566. }

  567. /*通讯录及文件操作功能*/
  568. void wenjian(ADDRESS adr[],int length)
  569. {
  570.      int choice;
  571. menu4:
  572.    system("cls");
  573.    printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  574.    printf(" 1. 导入文件到通讯录\n\n");
  575.    printf(" 2. 把当前文件复制到新文件上\n\n");
  576.    printf(" 0. 返回上一级菜单\n\n");
  577.    printf(" ********************************************************************\n");
  578.    printf(" 请选择(0~2)\n ");
  579.    scanf("%d",&choice);
  580.    switch(choice)
  581.    {
  582.      case 1: length=load(adr);
  583.              printf("您已经成功的导入文件到通讯录!\n");
  584.             printf(" 请按任意键返回...\n");
  585.             getch();break;
  586.      case 2: copy();
  587.              printf("复制成功!\n");
  588.             printf(" 请按任意键返回...\n");
  589.             getch();break;
  590.      case 0: return;
  591.    }
  592.    goto menu4;
  593. }

  594. /*关于*/
  595. void about()
  596. {
  597.      system("color 87");
  598.      system("cls");
  599.      printf("\n\n\n\n 《通讯录信息管理系统》\n\n\n");
  600.      printf(" *****************************************\n\n\n");
  601.      printf(" 版权所有(C) 2008-2009 DIY软件\n\n\n");
  602.      printf(" 制作人:朱学健、张玮、薛昌萍\n\n\n");
  603.      printf(" *****************************************\n\n\n");
  604.      printf(" 请按任意键返回主菜单...");
  605.      getch();
  606. }

  607. /******主函数开始*******/
  608. void main()
  609. {
  610.     int choice;
  611.     int length; /*保存记录长度*/
  612.     ADDRESS adr[1024]; /*定义结构体数组*/
  613. menu:
  614.      system("color f9");
  615.      system("cls");
  616.       printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  617.       printf(" 请选择以下通讯录管理功能:\n\n");
  618.       printf(" 1. 通讯录信息输入\n\n");
  619.       printf(" 2. 通讯录信息浏览及排序\n\n");
  620.       printf(" 3. 通讯录信息查询\n\n");
  621.       printf(" 4. 通讯录信息更改\n\n");
  622.       printf(" 5. 通讯录及文件操作\n\n");
  623.       printf(" 6. 关于通讯录信息管理系统\n\n");
  624.       printf(" 0. 退出通讯录管理系统\n\n");
  625.       printf(" ********************************************************************\n");
  626.       printf(" 请选择(0~6)\n ");
  627.       scanf("%d",&choice);
  628.       switch(choice)
  629.       {
  630.         case 1: length=enter(adr);
  631.                 save(adr,length);
  632.                 printf("\n 请按任意键返回...\n");
  633.                getch();break;/*输入记录*/
  634.         case 2: showpaixu(adr,length);break;
  635.         case 3: chazhao(adr,length);break;
  636.         case 4: biangeng(adr,length);break;
  637.         case 5: wenjian(adr,length);break;
  638.         case 6: about();break;/*关于*/
  639.         case 0: return;exit(0); /*如返回值为则程序结束*/
  640.       }
  641.       goto menu;
  642. }
阅读(798) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~