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

📄 15.c

📁 模拟手机通信录管理系统
💻 C
字号:
#define N 50
#include <stdio.h>
#include <string.h>

/*联系人结构体*/ 
struct contact
{
    char name[10];
    char phone_num[15];
    char category[10];
    char e_mail[25];
    int flag;
}per[N];

void menu();

/*保存函数*/ 
void save(int n)
{
    FILE *fp;
    int i;
    if((fp=fopen("phonenote.txt","wb"))==NULL)
    {
        printf("\nCannot open file\n");
        return ;
    }
    for(i=0;i<n;i++)
     if(per[i].flag!=0)
      if(fwrite(&per[i],sizeof(struct contact),1,fp)!=1)
        printf("file write error!\n");
    fclose(fp);
}

/*加载函数*/ 
int load()
{
    FILE *fp;
    int i;
    if((fp=fopen("phonenote.txt","rb"))==NULL)
    {
        printf("\nCannot open file!\n");
        return 0;
    }
    for(i=0;!feof(fp);i++)
      fread(&per[i],sizeof(struct contact),1,fp);
    fclose(fp);
    return i-1;
}

/*输入姓名*/ 
void name_input(int i,int n)
{
    int k,w1;
    do
    {
        w1=0;
        printf("name:");
        scanf("%s",per[i].name);
        for(k=0;k<n;k++)
          if(k!=i&&strcmp(per[i].name,per[k].name)==0)
          {
              puts("This name is exist. please reinput!\n");
              w1=1;break;
          }
      }
      while(w1==1);        
}

/*输入电话*/ 
void phone_input(int i,int n)
{
    int k,w1;
    do 
    {
        w1=0;
        printf("phonenumber:");
        scanf("%s",per[i].phone_num);
        for(k=0;k<n;k++)
          if(k!=i&&strcmp(per[i].phone_num,per[k].phone_num)==0)
          {
              puts("This phonenumber is exist. please reinput!\n");
              w1=1;break;
          }
      }
      while(w1==1);        
}

/*输入类型*/
void category(int i)
{
    int c;
    printf("category:\n\t1).office\t2).personal\t3).business [ ]\b\b");
    do
    {
        scanf("%d",&c);
        if(c>3||c<1)
        {
            puts("\nChoice error! Please again!");
            getchar();
        }    
    }while(c<1||c>3);
    switch(c)
    {
        case 1:strcpy(per[i].category,"office");break;
        case 2:strcpy(per[i].category,"personal");break;
        case 3:strcpy(per[i].category,"business");break;
    }               
}             

/*输入函数*/ 
void input(int i)
{
    name_input(i,i);
    phone_input(i,i);
    category(i);
    printf("e-mail:");
    scanf("%s",per[i].e_mail);
    per[i].flag=1;    
}    

void printf_face()
{
    printf("\n\tname     phonenumber      category    e_mail     \n");
}

void printf_part()
{
    printf("\n\tname     phonenumber\n");
}    

/*输出*/ 
void printf_one(int i)
{
    printf("%-10s     %-15s      %-10s       %-25s\n",per[i].name,per[i].phone_num,per[i].category,per[i].e_mail);
}

void printf_cate(int i)
{
        printf("%10s     %-15s\n",per[i].name,per[i].phone_num);
}    

void printf_back()
{
    void browse();
    int k,w;
    printf("\n\n\tSuccessful. ^_^\n\n");
    printf("What do you want to do?\n\n\t1).Browse all now\t2).Back:  [ ]\b\b");
    scanf("%d",&w);
    if(w==1)browse();
    else menu();
} 

/*修改函数*/ 
int modify_data(int i,int n)
{
    int c,w1;
    do
    {
        puts("\nmodify by =>\n\n  1).name  2).phonenumber   3).category   4).e-mail\n   5).all data   6).cancel and back");
        printf("Which you needed?: [ ]\b\b");
        scanf("%d",&c);
        if(c>6||c<1)
        {
            puts("\nChoice error! Please again!");
            getchar();
        }
    }
    while(c>8||c<1);
    do
    {
        switch(c)
        {
            case 1:name_input(i,n);break;
            case 2:phone_input(i,n);break;
            case 3:category(i);break;
            case 4:printf("e-mail:");scanf("%s",per[i].e_mail);break;
            case 5:input(i);break;
        }
        puts("\nNOW:\n");
        printf_face();
        printf_one(i);
        printf("\nAre you sure?\n\n\t1).Sure  2).No and remodify  3).Back without save in this time  [ ]\b\b");
        scanf("%d",&w1);
    }
    while(w1==2);
    return w1;
}            

/*输入模块*/ 
void enter() 
{
    int i,n;
    printf("How many persons(0-15)?:");
    scanf("%d",&n);
    printf("\n Enter data now\n\n");
    for(i=0;i<n;i++)
    {
        printf("\n Input %dth person's information.\n",i+1);
        input(i);
    }
    if(i!=0)save(n);
    printf_back();            
}

/*添加模块*/ 
void add()
{
   int i,n,m,k;
   FILE *fp;
   n=load();
   if(n>=15)
     {
         printf("The phone note is full");
         menu();
     }
   else
   {
       printf("How many persons are you want to add(0-%d)?:",15-1-n);
       scanf("%d",&m);
       k=m+n;
       for(i=n;i<k;i++)
       {
           printf("\n Input %dth person information.\n",i-n+1);
           input(i);
       }
       if((fp=fopen("phonenote.txt","ab"))==NULL)
       {
           printf("cannot open file\n");
       }
       for(i=n;i<k;i++)
         if(fwrite(&per[i],sizeof(struct contact),1,fp)!=1)
           printf("file write error\n");
       fclose(fp);
       printf_back();
   }                           
}

/*修改模块*/ 
void modify()
{
    struct contact p;
    int i,n,k,w0=1,w1,w2=0;
    n=load();
    do
    {
        k=-1;
        printf_face();
        for(i=0;i<n;i++)
        {
            if(i!=0&&i%10==0)
            {
                printf("\n\nRemember name which needed modify. press any key to continue ...");
                getch();
                puts("\n\n");
            }
            printf_one(i);
        }
        do
        {
            printf("\n\nEnter name that you want to modify!    name:\nIf you don't want to modify enter NO.");
            scanf("%s",p.name);
            if(strcmp(p.name,"NO")==0)
              menu();              
            for(i=0;i<n;i++)
              if(strcmp(p.name,per[i].name)==0)
              {
                  k=i;p=per[i];
              }
            if(k==-1)printf("\n\nNot exist!please again");
        }while(k==-1);
        printf_face();
        printf_one(k);
        w1=modify_data(k,n);
        if(w1==1)
        {
            printf("\nSuccessful ^_^.\n\nAre you modify another?\n\n\t1).Yes  2).Back with save\t[ ]\b\b");
            scanf("%d",&w0);
            w2=1;
        }
        else
        {
            w0=0;
            if(w2==1)
              per[k]=p;
          }
        if(w0!=1&&w2==1)
          save(n);
    }while(w0==1);
    menu();
}

/*删除模块*/ 
void del()
{
    struct contact p;
    FILE *fp;
    int i,n,k,w0=1;
    n=load();
    do
    {
        k=-1;
        printf_face();
        for(i=0;i<n;i++)
        {
            if(i!=0&&i%10==0)
            {
                printf("\n\nRemember name which needed delete. press any key to continue ...");
                getch();
                puts("\n\n");
            }
            printf_one(i);
        }
        do
        {
            printf("\n\nEnter name that you want to delete!     name:");
            scanf("%s",p.name);
            for(i=0;i<n;i++)
              if(strcmp(p.name,per[i].name)==0)
              {
                  k=i;per[i].flag=0;w0=0;
              }
            if(k==-1)printf("\n\nNot exist!please again");
        }while(k==-1);
        printf_face();
        printf_one(k);
    }while(w0==1);    
    save(n);
    printf_back();                                
}

/*分类查看模块*/ 
void browse_part()
{
    struct contact p;
    int i,n,w0,k,j;
    n=load();
    do
    {
        puts("\n\tWhich category do you want to browse:\n");
        puts("\t\t1).office \t2).personal \t3).bussiness [ ]\b\b");
        scanf("%d",&k);
        if(k<1||k>3)
        {
            w0=1;getchar();
        }
        else w0=0;
    }while(w0==1);
    switch(k)
    {
        case 1:strcpy(p.category,"office");break;
        case 2:strcpy(p.category,"personal");break;
        case 3:strcpy(p.category,"hussiness");break;
    }                      
    printf_part();
    for(i=0,j=0;i<n;i++)
    {
        if(i!=0&&i%10==0)
        {
            printf("\n\nPress any key to continue ...");
            getch();
            puts("\n\n");
        }
        if(strcmp(p.category,per[i].category)==0)
          {
              printf_cate(i);
              j++;
          }    
    }
    printf("\tThere are %d record.\n",j);
    printf("\nPress any key to back ...");
    getch();
    puts("\n\n");
    menu();        
} 

/*查看整个*/
void browse()
{
    int i,n;
    n=load();   
    printf_face();
    for(i=0;i<n;i++)
    {
        if(i!=0&&i%10==0)
        {
            printf("\n\nPress any key to continue ...");
            getch();
            puts("\n\n");
        }
        printf_one(i);
    }    
    printf("\tThere are %d record.\n",n);
    printf("\nPress any key to back ...");
    getch();
    puts("\n\n");
    menu(); 
}                                                       
 
/*菜单*/  
void menu()
{
    int n,w1;
    do
    {
        puts("\n\t\t*************************MENU************************\n\n");
        puts("\t\t\t\t1.Enter new data");
        puts("\t\t\t\t2.Addition data");
        puts("\t\t\t\t3.Modify data");
        puts("\t\t\t\t4.Delete data");
        puts("\t\t\t\t5.Browse all");
        puts("\t\t\t\t6.Browse with category");
        puts("\t\t\t\t7.Exit");
        puts("\n\n\t\t*****************************************************\n");
        printf("Choice your number(1-7): [ ]\b\b");
        scanf("%d",&n);
        if(n<1||n>7)
        {
            w1=1;getchar();
        }
        else w1=0;
    }while(w1==1);
    switch(n)
    {
        case 1:enter();break;
        case 2:add();break;
        case 3:modify();break;
        case 4:del();break;
        case 5:browse();break;
        case 6:browse_part();break;
        case 7:exit(0);
    }
}               

int main()
{
    menu();
    return 0;
}    

⌨️ 快捷键说明

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