zoukankan      html  css  js  c++  java
  • 简易 (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!
  • 相关阅读:
    SQL中常用的数据类型及简介
    静态方法与非静态方法
    遍历多维数组
    遍历一个三维数组
    冒泡排序-方法2
    关于二分查找分
    冒泡排列-——方法1
    AngularJS 循环查询数组
    AngularJs 指令
    给定一个年月值,返回上个年月值,格式为:YYYY.MM string类型
  • 原文地址:https://www.cnblogs.com/tp-16b/p/7997871.html
Copyright © 2011-2022 走看看