• 简易 (I/O)版本通讯录


      1 #include <stdio.h>
      2 #include<assert.h>
      3 //#include<malloc.h>
      4 #include<string.h> 
      5 #include<windows.h>
      6 
      7 #define MailSize 100
      8 #define MaxName 10
      9 #define MaxAdress 20
     10 #define MaxPhone 20
     11 
     12 struct Person{
     13     char name[MaxName];
     14     int age;
     15     char sex;
     16     char adress[MaxAdress];
     17     char phone[MaxPhone];
     18 };
     19 typedef struct Mail{
     20     int ExistNum;
     21     //int MaxNum;
     22     struct Person peo[MailSize];
     23 }ML,*MailList;
     24 
     25 enum mem_infor{
     26     Name=1,
     27     Age,
     28     Sex,
     29     Adress,
     30     Phone,
     31 };
     32 void Show_member(MailList s){
     33     int i=0;
     34     if(0 == s->ExistNum){
     35         printf("Mail is Null!");
     36         return ;
     37     }    
     38     printf("-------------------------------------------------
    ");
     39     printf("|Name  | Age| Sex  |Adress           |  Phone   |   
    ");
     40 
     41     while(i<s->ExistNum){
     42        printf("%-10s",s->peo[i].name);
     43        printf("%-5d",s->peo[i].age);
     44        printf("%-5c",s->peo[i].sex);
     45        printf("%-20s",s->peo[i].adress);
     46        printf("%-20s",s->peo[i].phone); 
     47        printf("
    ");
     48        i++;
     49     }
     50     
     51 }
     52 void Add_member(MailList s,int num){
     53     char na[5],sex,adr[10],pho[10];
     54     int a;
     55     printf("
    Input: Name + Age + Sex(M/W) + Adress + Phone:>
    ");
     56     for(int i=s->ExistNum;i<s->ExistNum+num;++i){
     57         scanf("%s  %d  %c  %s  %s",na,&a,&sex,adr,pho); 
     58         strcpy(s->peo[i].name,na);
     59         s->peo[i].age=a;
     60         s->peo[i].sex=sex;
     61         strcpy(s->peo[i].adress,adr);
     62         strcpy(s->peo[i].phone,pho);
     63     }
     64     s->ExistNum+=num;    
     65     printf("
    Add Successful!
    ");    
     66 }
     67 int Research_member(const MailList s,char *na){
     68     assert(na);
     69     assert(s);
     70     for(int i=0;i<s->ExistNum;++i){
     71         if(!strcmp(s->peo[i].name,na) )
     72         return i;
     73     }
     74     return -1;
     75 }
     76 void  Delet_member(MailList s,char *na){
     77     assert(s);
     78     assert(na);
     79     int locate=Research_member(s,na);
     80     if(locate<0) {
     81         printf("
    Delet failed !");
     82         return ;
     83     }
     84     for(int i=locate;i<s->ExistNum;++i){
     85         s->peo[i]=s->peo[i+1];
     86     }
     87     s->ExistNum--;
     88     printf("Delet Successful!
    ");            
     89 }
     90 void swap(struct Person* p1,struct Person* p2){
     91     struct Person tmp;
     92     tmp=*p1;
     93     *p1=*p2;
     94     *p2=tmp;
     95 }
     96 void Sort_member(MailList s){
     97     assert(s);
     98     MailList ret=s;
     99     for(int i=0;i<s->ExistNum-1;++i){
    100         for(int j=i;j<s->ExistNum;++j){
    101             if(strcmp(ret->peo[i].name,ret->peo[j].name)>0 )
    102             swap(&ret->peo[i],&ret->peo[j]);   //交换两个结构体 
    103         }
    104     }
    105     printf("
    Sort Successful !");
    106  }
    107 
    108 void Clear_member(MailList s){
    109     s->ExistNum=0;
    110     printf("
    Clear.....");
    111     Sleep(500);
    112     printf("
    Clear finished!");
    113 }
    114 void Modify_member(MailList s){
    115     assert(s);
    116     char na[10],sex,adr[10],pho[10];
    117     int a,option,locate;
    118     if(s->ExistNum <= 0){
    119         printf("通讯录为空,无法修改!");
    120         return;
    121     } 
    122     printf("
    选择修改位置:");
    123      scanf("%d",&locate);    
    124     if(locate < s->ExistNum && locate>=0){
    125         printf("******************************
    ");
    126         printf("* 1--姓名   2--年龄  3--性别 *
    ");
    127         printf("* 4--住址            5--电话 *
    "); 
    128         printf("******************************
    ");
    129         choose:
    130         printf("
    请选择修改:>");
    131         scanf("%d",&option);
    132         switch(option){
    133             case Name:{
    134                 printf("
    姓名修改为:");
    135                 scanf("%s",na);
    136                 strcpy(s->peo[locate].name,na);
    137                 break;
    138             }
    139             case Age:{
    140                 printf("年龄修改为:"); 
    141                 scanf("%d",&a);
    142                 s->peo[locate].age=a;
    143                 break;
    144             }
    145             case Sex:{
    146                 printf("性别修改为:"); 
    147                 scanf("%c",&sex);
    148                 s->peo[locate].sex=sex;
    149                 break;
    150             }
    151             case Adress:{
    152                 printf("住址修改为:"); 
    153                 scanf("%s",adr);
    154                 strcpy(s->peo[locate].adress,adr);
    155                 break;
    156             }
    157             case Phone:{
    158                 printf("
    电话修改为:"); 
    159                 scanf("%s",pho);
    160                 strcpy(s->peo[locate].phone,pho);
    161                 break;
    162             }
    163             default:
    164                 printf("
    选择错误!");
    165                 goto choose    ;
    166         }    
    167         printf("
    Successful !");
    168     }     
    169     else{
    170         printf("
    无法修改!"); 
    171     }
    172 }
    173 void LoadFile(MailList s){
    174     int i=0;
    175     FILE *rfp=fopen("MailList.bin","rb");  //读取二进制文件 
    176     if(rfp == NULL){
    177         perror("open faild");
    178         exit(1); 
    179     } 
    180     struct Person tmp = {0};
    181     while(fread(&tmp,sizeof(struct Person),1,rfp)){
    182       s->peo[i] = tmp;    
    183        i++;    
    184     }
    185     if(0 == i){
    186         printf("空文件!");
    187     }
    188     else{
    189         s->ExistNum = i;
    190         Show_member(s);
    191     }
    192     fclose(rfp);
    193 } 
    194 void SaveToFile(MailList s){
    195     FILE *wfp=fopen("MailList.bin","wb");   //为文件写入二进制流 
    196     if(wfp == NULL){
    197         perror("NULL ");
    198         exit(1);
    199     }
    200     for(int i=0;i<s->ExistNum;++i){
    201         fwrite(&s->peo[i],sizeof(struct Person),1,wfp);
    202     }
    203     printf("Save Success!");
    204     fclose(wfp);
    205 } 
    206 int main(){
    207                              
    208     ML mail;
    209     mail.ExistNum = 0;    //初始化为0 
    210     int option;
    211     printf("  	****************** MailList **********************
    ");
    212     printf("  	* 1--Input Information      2--Delet Information * 
    ");
    213     printf("  	* 3--Search Information     4--Show  Information *
    ");
    214     printf("  	* 5--Sort                   6--Clear Information *
    ");
    215     printf("  	* 7--Modify Information     8--Save              *
    ");
    216     printf("  	* 9--Load Information       0--Eixt              *
    ");
    217     printf("  	**************************************************
    ");
    218     while(1){
    219         printf("
    Please Choose:");
    220         scanf("%d",&option);
    221         switch(option){
    222           case 1:
    223           {    
    224             int num; 
    225             printf("
    录入人数:");scanf("%d",&num);
    226             Add_member(&mail,num);
    227           }
    228           break;    
    229            case 2:{
    230                char na[10];
    231                printf("
    输入删除人名:");
    232                scanf("%s",na);
    233                Delet_member(&mail,na);
    234                break;
    235             }
    236            case 3:{
    237                char na[10];
    238                printf("
    输入查找人名:");
    239                scanf("%s",na);
    240                int ret=Research_member(&mail,na);
    241                if(ret<0)
    242                  printf("
    没找到!");
    243                else
    244                  printf("
    找到了!位置在:%d",ret); 
    245                break;
    246              }
    247             case 4:
    248                 Show_member(&mail);
    249                 break;
    250             case 5:
    251                 Sort_member(&mail);        
    252                  break;
    253             case 6:
    254                 Clear_member(&mail);
    255                 break;
    256             case 7:
    257                 Modify_member(&mail);
    258                 break;  
    259             case 8:
    260                 SaveToFile(&mail);
    261                 break;
    262             case 9:
    263                 LoadFile(&mail);
    264                 break;
    265             case 0:
    266                 exit(0);
    267                 break; 
    268             default:
    269                 break ;
    270         }
    271    }
    272     return 0;
    273 } 

    比较挫版本。

    Esh!
  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/tp-16b/p/7997871.html
Copyright © 2020-2023  润新知