本文实例为大家分享了C语言通讯录管理系统课程设计,供大家参考,具体内容如下

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
struct Sign{
    char name[8];
    char sex[4];
    char birthday[12];
    char phone[11];
    char postcode[7];
    char addr[30];
    struct Sign *next;
  }pe;
  char PhoneCop[4] ;

//结构体
struct Sign *p1,*p2,*head;
FILE *fp;
void ShowMenu(){
  system("color 1F");
  printf("#################     通讯录管理系统 v1.0  ###################\n");
  printf("#####################################################################\n");
  printf("#                                  #\n");
  printf("#      1-----------------信息录入-------------------      #\n");
  printf("#                                  #\n");
  printf("#      2-----------------信息查询-------------------      #\n");
  printf("#                                  #\n");
  printf("#      3-----------------信息查看-------------------      #\n");
  printf("#                                  #\n");
  printf("#      4-----------------信息修改-------------------      #\n");
  printf("#                                  #\n");
  printf("#      5-----------------信息统计-------------------      #\n");
  printf("#                                  #\n");
  printf("#      6-----------------退出系统-------------------      #\n");
  printf("#                                  #\n");
  printf("#####################################################################\n");
  printf("#   POWER BY *************  兰州理工大学   201407      #\n");
  printf("#####################################################################\n");

};
void HeadShow()
{
  printf("#################     通讯录管理系统 v1.0  ###################\n");
  printf("---------------------------------------------------------------------\n");

}
void FileLoading()
{
    if((fp=fopen("txl.dat","rb"))==NULL)
  {
    printf("文件操作错误,请检查是否有权限操作文件!");
    Sleep(3000);
    exit(1);
  }
  p1=(struct Sign*)malloc(sizeof(struct Sign));
  p1->next=NULL;
  head=p1;
  while(!feof(fp))
  {
    if(fread(p1,sizeof(struct Sign),1,fp)!=1)
      break;
    p2=(struct Sign*)malloc(sizeof(struct Sign));
    p2->next=NULL;
    p1->next=p2;
    p1=p2;
  }
  fclose(fp);
}
void add()
{
  char ch;
  if((fp==fopen("txl.dat","ab+"))!=1)
  {
    printf("文件打开失败");
    exit(1);
  }
  while(1)
  {  system("cls");
    printf("请输入__\n");
    p2=(struct Sign*)malloc(sizeof(struct Sign));
    p2->next=NULL;
    printf("姓名:");scanf("%s",pe.name);
    printf("性别:");scanf("%s",pe.sex);
    printf("生日:");scanf("%s",pe.birthday);
    printf("电话号码:");scanf("%s",pe.phone);
    printf("邮编:");scanf("%s",pe.postcode);
    printf("地址:");scanf("%s",pe.addr);
    strcpy(p1->name,pe.name);
    strcpy(p1->sex,pe.sex);
    strcpy(p1->birthday,pe.birthday);
    strcpy(p1->phone,pe.phone);
    strcpy(p1->postcode,pe.postcode);
    strcpy(p1->addr,pe.addr);
    p1->next=p2;
    p1=p2;
    if(fwrite(&pe,sizeof(struct Sign),1,fp)!=1)
      printf("写入错误");
    printf("输入E或e来结束输入?");
    getchar();
    ch=getchar();
    if(ch=='e'||ch=='E')
      break;

  }
  fclose(fp);
}
void SaveChange()
{
  if((fp==fopen("txl.dat","w"))!=1)
  {
    printf("文件打开失败");
    exit(1);
  }
  p1=head;
  while(p1->next!=NULL)
  {
    if(fwrite(p1,sizeof(struct Sign),1,fp)!=1)
      printf("写入错误");
    p1=p1->next;

  }
  fclose(fp);
}
void AllShow()
{
  HeadShow();
  printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n","姓名","性别","生日","电话","邮编","地址");
  printf("---------------------------------------------------------------------\n");
  p1=head;
  while(p1->next!=NULL)
  {
    printf("%10.8s %6.6s %10.12s %11.11s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr);
    p1=p1->next;

  }

}

void AllNum()
{  int i=0;
  HeadShow();
  printf("     共有记录条数为:  \n");
  printf("---------------------------------------------------------------------\n");
  p1=head;
    while(p1->next!=NULL)
  {
    i++;
    p1=p1->next;

  }
  printf("     %d         \n",i);
  printf("---------------------------------------------------------------------\n");

  printf("     共有联通用户为:  \n");
  printf("---------------------------------------------------------------------\n");
  p1=head;
  i=0;
    while(p1->next!=NULL)
  {
    strncpy(PhoneCop,p1->phone,3);
    if(strcmp(PhoneCop,"130")==0||strcmp(PhoneCop,"131")==0||strcmp(PhoneCop,"132")==0||strcmp(PhoneCop,"155")==0||strcmp(PhoneCop,"156")==0||strcmp(PhoneCop,"185")==0||strcmp(PhoneCop,"186")==0)
      i++;
    p1=p1->next;

  }
  printf("     %d         \n",i);
  printf("---------------------------------------------------------------------\n");
  printf("     共有移动用户为:  \n");
  printf("---------------------------------------------------------------------\n");
  p1=head;
  i=0;
    while(p1->next!=NULL)
  {
    strncpy(PhoneCop,p1->phone,3);
    if(strcmp(PhoneCop,"134")==0||strcmp(PhoneCop,"135")==0||strcmp(PhoneCop,"136")==0||strcmp(PhoneCop,"137")==0||strcmp(PhoneCop,"138")==0||strcmp(PhoneCop,"139")==0||strcmp(PhoneCop,"150")==0||strcmp(PhoneCop,"151")==0||strcmp(PhoneCop,"152")==0||strcmp(PhoneCop,"157")==0||strcmp(PhoneCop,"158")==0||strcmp(PhoneCop,"159")==0||strcmp(PhoneCop,"187")==0||strcmp(PhoneCop,"188")==0)
      i++;
    p1=p1->next;

  }
  printf("     %d         \n",i);
  printf("---------------------------------------------------------------------\n");
    printf("     共有电信用户为:  \n");
  printf("---------------------------------------------------------------------\n");
  p1=head;
  i=0;
    while(p1->next!=NULL)
  {
    strncpy(PhoneCop,p1->phone,3);
    if(strcmp(PhoneCop,"180")==0||strcmp(PhoneCop,"189")==0||strcmp(PhoneCop,"133")==0||strcmp(PhoneCop,"153")==0)
      i++;
    p1=p1->next;

  }
  printf("     %d         \n",i);
  printf("---------------------------------------------------------------------\n");
}
void CheckFace()
{  int Check_key;
  printf("###########     通讯录管理系统 v1.0  ################\n");
  printf("############################################################\n");
  printf("#                             #\n");
  printf("#         1------按姓名查询            #\n");
  printf("#                             #\n");
  printf("#         2------按电话号码查询          #\n");
  printf("#                             #\n");
  printf("#         3------综合查询             #\n");
  printf("#                             #\n");
  printf("#         4------退出查询模块           #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("############################################################\n");
  printf("#  POWER BY *************  兰州理工大学   201407   #\n");
  printf("############################################################\n");

}
void Selelctname()
{  system("cls");
  HeadShow();
  printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n","姓名","性别","生日","电话","邮编","地址");
  printf("---------------------------------------------------------------------\n");
  p1=head;
  char FindName[8];
  int i=0;
  printf("请输入要查询的姓名:");
  scanf("%s",&FindName);
  while(p1->next!=NULL)
  {
    if(strcmp(p1->name,FindName)==0)
      {printf("%10.8s %6.6s %10.10s %11.14s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr);
      i++;
      }
    p1=p1->next;

  }
  printf("共 %d 条\n",i);
  system("pause");
}

void Selelctphone()
{  system("cls");
  HeadShow();
  printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n","姓名","性别","生日","电话","邮编","地址");
  printf("---------------------------------------------------------------------\n");
  p1=head;
  char phone[11];
  int i=0;
  printf("请输入要查询的电话号码:");
  scanf("%s",&phone);
  while(p1->next!=NULL)
  {
    if(strcmp(p1->phone,phone)==0)
      {printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr);
      i++;
      }
    p1=p1->next;

  }
  printf("共 %d 条\n",i);
  system("pause");
}
void Selelctall()
{  system("cls");
  HeadShow();
  printf("%10.8s %6.6s %10.10s %11.4s %9.7s %16.6s \n","姓名","性别","生日","电话","邮编","地址");
  printf("---------------------------------------------------------------------\n");
  p1=head;
  char all[30];
  int i=0;
  printf("请输入任意一项要查询的内容:");
  scanf("%s",&all);
  while(p1->next!=NULL)
  {
    if(strcmp(p1->name,all)==0||strcmp(p1->sex,all)==0||strcmp(p1->birthday,all)==0||strcmp(p1->phone,all)==0||strcmp(p1->postcode,all)==0||strcmp(p1->addr,all)==0)
      {printf("%10.8s %6.6s %10.10s %11.11s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr);
      i++;
      }
    p1=p1->next;

  }
  printf("共 %d 条\n",i);
  system("pause");
}
void Change()
{  char ChangeName[8];
  int changekey;
  system("cls");
  HeadShow();
  int i,y=0;
  p1=p2=head;
  printf("请输入你要修改的条目的姓名:");
  scanf("%s",&ChangeName);
    getchar();
  while(p1!=NULL)
  {
  if(strcmp(p1->name,ChangeName)==0)
    {  printf("%10.8s %6.6s %10.10s %11.11s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr);
      printf("您要修改的是这条记录吗?1---是|2---否\n");
      scanf("%d",&i);
      if(i==1)
      { y=1;
      printf("你要修改的通讯录为:\n");
      printf("%10.8s %6.6s %10.10s %11.11s %9.7s %16.16s \n",p1->name,p1->sex,p1->birthday,p1->phone,p1->postcode,p1->addr);
      printf("请选择您的操作   1---删除|2---修改\n");
      scanf("%d",&changekey);
      if(changekey==1)
       {
        if(p1==head)
         {head=p1->next;
         free(p1);
         }
         else
         {
        p2->next=p1->next;
        free(p1);
        SaveChange();

       }

    }
    else if(changekey==2)
    {
      printf("姓名:");scanf("%s",p1->name);
      printf("性别:");scanf("%s",p1->sex);
      printf("生日:");scanf("%s",p1->birthday);
      printf("电话:");scanf("%s",p1->phone);
      printf("邮编:");scanf("%s",p1->postcode);
      printf("地址:");scanf("%s",p1->addr);
      SaveChange();
      printf("\n OK!  \n");
    }
      }

    }
  else if(strcmp(p1->name,ChangeName)&&(p1->next)==NULL)
    {
      i=0;

    }
    p2=p1;
    p1=p1->next;
  }

   if(y==0)
  {
    printf("对不起,没有找到要修改的通讯名单,请检查你要修改的姓名是否正确\n");
  }


  system("pause");
}
void ExirShow()
{
  system("color 0E");
  printf("###########     通讯录管理系统 v1.0  ################\n");
  printf("############################################################\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("#           谢谢使用!              #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("#                             #\n");
  printf("############################################################\n");
  printf("#  POWER BY *************  兰州理工大学   201407   #\n");
  printf("############################################################\n");

}
void ErrorShow()
{  int errortime=5;
  system("color 0E");
  for(errortime=5;errortime>0;errortime--)
    {printf("\r输入错误!请仔细检查!将在%d秒后返回",errortime);
     Sleep(1000);
    }

}
int main()
{  int key;
  int Ex_key;
  int Check_key;
  char a[10];
  if((fp=fopen("txl.dat","ab"))==NULL)
  {
    printf("文件操作错误,请检查是否有权限操作文件!");
    Sleep(3000);
    exit(1);
  }
  fclose(fp);
  FileLoading();
  while(1){
  ShowMenu();
  gets(a);
  key=atoi(a);
  if(key==1)
    {system("cls");
    add();
    }
  else if(key==2)
    {  system("cls");

      system("color 0E");
    while(1)
       {
      system("color 0E");
      CheckFace();
      printf("请输入你的选择:\n");
      gets(a);
      Check_key=atoi(a);
      if(Check_key==1)
        Selelctname()
      ;
      else if(Check_key==2)
        Selelctphone()
      ;
      else if(Check_key==3)
        Selelctall()
      ;
      else if(Check_key==4)

      break;
      else
      ErrorShow();
      system("cls");
      system("color 1F");
      getchar();

    }


    }

  else if(key==3)   //2013级 耿。。
  {  system("color 0E");
    system("cls");
    AllShow();
    system("pause");
  }
  else if(key==4)
    {
      system("color 0A");
      Change();


    }
  else if(key==5)
    {
    system("color 5F");
    system("cls");
    AllNum();
    system("pause");
     }
  else if(key==6)
    {
    system("cls");
    ExirShow();
    Sleep(1000);
    exit(0);
    }

  else

    ErrorShow();
    system("cls");
    system("color 1F");
    getchar();
  }


}

比较简单就是用到了链表和文件操作,其中统计联通和移动人数的那里其实只用一个循环就可以。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

02-06 17:37
查看更多