C编写的通讯录

<C语言大全>中演示使用fread()与fwrite()方便的读/写大量数据而编写的通讯录

/*A simple mailing list example using an array of structures*/
#include<stdio.h>
#include<stdlib.h>

#define MAX 100

struct addr{
    char name[30];
    char street[40];
    char city[20];
    char state[3];
    unsigned long int zip;
}add_list[MAX];

void init_list(void),enter(void);
void delete(void),list(void);
void load(void),save(void);
int menu_select(void),find_free(void);

int main(void)
{
    char choice;
    init_list();/*initialize the structure array*/
    for(;;){
        choice=menu_select();
        switch(choice){
            case 1:enter();
                break;
            case 2:delete();
                break;
            case 3:list();
                break;
            case 4:save();
                break;
            case 5:load();
                break;
            case 6:exit(0);
            }
        }
        return 0;
}

/*Initialize the list*/
void init_list(void)
{
     register int t;
     for(t=0;t<MAX;++t)
         add_list[t].name[0]='0';
     }

/*Get a menu selection*/
int menu_select(void)
{
    char s[80];
    int c;
   
    printf("1.Enter a name/n");
    printf("2.Delete a name/n");
    printf("3.List the file/n");
    printf("4.Save the file/n");
    printf("5.Load the file/n");
    printf("6.Quit/n");
    do{
        printf("/nEnter your choice:");
        gets(s);
        c=atoi(s);
        }while(c<0||c>6);
      return c; 
    }

/*Input addresses into the list*/
void enter(void)
{
     int slot;
     char s[80];
    
     slot=find_free();
    
     if(slot==-1){
             printf("/nList Full");
             return;        
         }
     printf("Enter name:");
    
     gets(add_list[slot].name);
    
     printf("Enter street:");
     gets(add_list[slot].street);
    
     printf("Enter city:");
     gets(add_list[slot].city);
    
     printf("Enter state:");
     gets(add_list[slot].state);
    
     printf("Enter zip:");
     gets(s);
     add_list[slot].zip=strtoul(s,'/0',10);
     }

/*Find an unused structure*/
int find_free(void)
{
    register int t;
   
    for(t=0;add_list[t].name[0]&&t<MAX;++t);
   
    if(t==MAX)
        return -1;/*no slots free*/
    return t;
    }

/*Delete an address*/
void delete(void)
{
     register int slot;
     char s[80];
    
     printf("enter record # :");
     gets(s);
     slot=atoi(s);
     if(slot>=0&&slot<MAX)
         add_list[slot].name[0]='/0';
     }

/*Display the list on the screen*/
void list(void)
{
     register int t;
    
     for(t=0;t<MAX;++t){
         if(add_list[t].name[0]){
             printf("%s/n",add_list[t].name);
             printf("%s/n",add_list[t].street);
             printf("%s/n",add_list[t].city);
             printf("%s/n",add_list[t].state);
             printf("%s/n",add_list[t].zip);
             }
         }
         printf("/n/n");
     }

/*Save the list*/
void save(void)
{
     FILE *fp;
     register int i;
    
     if((fp=fopen("maillist","wb"))==NULL)
         printf("Cannot open file/n");
         return;
    
     for(i=0;i<MAX;i++)
         if(*add_list[i].name)
             if(fwrite(&add_list[i],sizeof(struct addr),1,fp)!=1)
                 printf("File write error/n");
     fclose(fp);
     }

/*Load the file*/
void load(void)
{
     FILE *fp;
     register int i;
    
     if((fp=fopen("maillist","rb"))==NULL){
         printf("Cannot open file/n");
         return;
     }
    
     init_list();
     for(i=0;i<MAX;i++)
         if(fread(&add_list[i],sizeof(struct addr),1,fp)!=1){
             if(feof(fp))break;
             printf("File read error/n");
         }
     fclose(fp);
     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值