通讯录

来源:互联网 发布:临床数据采集系统 编辑:程序博客网 时间:2024/04/18 18:23

 /*c语言描述,wintc   windows xp  sp2下运行成功*/

 

#include<stdio.h>
struct person
{
    char name[20];
    char tel[15];
    char addr[50];
};
char filename[20];
FILE *fp;

void create();
void output();
void search();
void append();
void modify();
void delete();


void main()
{
    int m;

    create();
    while (1)
    {
        printf("/n/n添加,请按1");
        printf("/n查找,请按2");
        printf("/n修改,请按3");
        printf("/n删除,请按4");
        printf("/n输出,请按5");
        printf("/n退出,请按0/n");


        scanf("%d",&m);
        if(m>=0&&m<=5)
        {
         switch(m)
            {
              case 1:append(); break;
              case 2:search(); break;
              case 3:modify(); break;
              case 4:delete(); break;
              case 5:output(); break;
              case 0:exit(0);
            }
        printf("/n/n操作完毕,请再次选择");
        }
        else
        printf("/n/n选择错误,请再次选择");
    }
}

/*创建一个通讯录*/
void create()
{
    struct person one;
    long sl;
    printf("/n请输入通讯录名字:");
    scanf("%s",filename);

    if((fp=fopen(strcat(filename,".txt"),"w"))==NULL)
    {
        printf("/n不能建立通讯录");
        exit(1);
    }
    fprintf(fp,"%-10s%-20s%-50s/n","姓名","电话号码","住址");
    printf("/n请输入姓名,电话号码,及住址(以0结束)/n");
    scanf("%s",one.name);
    while (strcmp(one.name,"0"))
    {
        scanf("%s%s",one.tel,one.addr);
        fprintf(fp,"%-10s%-20s%-50s/n",one.name,one.tel,one.addr);
        scanf("%s",one.name);
    }
    fclose(fp);
}
/*输出整个通讯录*/
void output()
{
    struct person one;
    if((fp=fopen(filename,"r"))==NULL)
    {
        printf("/n不能打开通讯录!");
        exit(2);
    }
    printf("/n/n%20s/n","通讯录");
    while (!feof(fp))
    {
        fscanf(fp,"%s%s%s/n",one.name,one.tel,one.addr);
        printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
    }
    fclose(fp);
}
/*添加一个记录*/
void append()
{
    struct person one;
    if((fp=fopen(filename,"a"))==NULL)
    {
        printf("/n不能打开通讯录!");
        exit(3);
    }
    printf("/n请输入要添加的姓名,电话及住址/n");
    scanf("%s%s%s",one.name,one.tel,one.addr);
    fprintf(fp,"%-10s%-20s%-50s/n",one.name,one.tel,one.addr);
    fclose(fp);
   
}
?*查找某一条记录*/
void search()
{
    int k=0;
    char namekey[8];
    struct person one;

    printf("/n请输入姓名:");
    scanf("%s",namekey);
    if((fp=fopen(filename,"rb"))==NULL)
    {
        printf("/n不能打开通讯录!");
        exit(4);
    }
    while(!feof(fp))
    {
        fscanf(fp,"%s%s%s/n",one.name,one.tel,one.addr);
        if(!strcmp(namekey,one.name))
        {
            printf("/n/n已查到,记录为 ");
            printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
            k=1;
        }
    }
    if(!k)
        printf("/n/n对不起,通讯录中没有此人的记录");
    fclose(fp);
}

/*修改某一条记录*/
void modify()
{
    int m,k=0;
    long offset;
    char namekey[8];
    struct person one;

    printf("/n请输入姓名:");
    scanf("%s",namekey);
    if((fp=fopen(filename,"r+"))==NULL)
    {
        printf("/n不能打开通讯录!");
        exit(5);
    }
    while(!feof(fp))
    {
        offset=ftell(fp);
        fscanf(fp,"%s%s%s/n",one.name,one.tel,one.addr);
        if(!strcmp(namekey,one.name))
        {
            k=1;
            break;
        }
    }
    if (k)
    {
        printf("/n已查到,记录为:");
        printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
        printf("/n请输入新姓名,电话号码及住址");
        scanf("%s%s%s/n",one.name,one.tel,one.addr);
        fseek(fp,offset,SEEK_SET);
        printf("%ld",ftell(fp));
        fprintf(fp,"%-10s%-20s%-50s/n",one.name,one.tel,one.addr);
    }
    else
        printf("/n对不起,通讯录中没有此人的记录");
    fclose(fp);
}
/*删除一条记录*/
void delete()
{
    int m,k=0,flag;
    long offset1,offset2;
    char namekey[8],valid[4];
    struct person one;

    printf("请输入姓名:");
    scanf("%s",namekey);
    if((fp=fopen(filename,"r+"))==NULL)
    {
        printf("/n不能打开通讯录!");
        exit(6);
    }
    while(!feof(fp))
    {
        offset1=ftell(fp);
        fscanf("%s%s%s/n",one.name,one.tel,one.addr);
        if(!strcmp(namekey,one.name))
        {
            k=1;
            break;
        }
    }
    if(k)
    {
        printf("/n已查到,记录为:");
        printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
        printf("/n确实要删除,按1,不删除,按0:");
        scanf("%d",&m);
        if(m)
        {
            fseek(fp,offset1,SEEK_SET);
            fprintf(fp,"%-10s%-20s%-50s/n","","","");
        }
    }
    else
        printf("/n对不起,通讯录中没有此人的记录");
    fclose(fp);
}