标题:自己写的通讯录 朋友说用链表更简单 可是我试了好久都写不出 求指导
只看楼主
小小难
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-1-3
结帖率:0
已结贴  问题点数:20 回复次数:6 
自己写的通讯录 朋友说用链表更简单 可是我试了好久都写不出 求指导
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct
    {
        char score;               /*编号*/
        char name[10];            /*姓名*/
        char num[15];             /*号码*/
        char email[20];            /*邮箱*/
        char age[8];                /*年龄*/
        char adds[20];                /*住址*/
    }Person;

Person pe[80];                        
int menu_select()
    {
        char c;
        do{
        system("cls");
        printf("\t\t *****通讯录***** \n");                              
        printf("\t\t┌───────┐\n");                  
        printf("\t\t│ 1. 添加记录  │\n");
        printf("\t\t│ 2. 显示记录  │\n");
        printf("\t\t│ 3. 删除记录  │\n");
        printf("\t\t│ 4. 查询记录  │\n");
        printf("\t\t│ 5. 修改记录  │\n");
        printf("\t\t│ 6. 保存记录  │\n");
        printf("\t\t│ 0. 退出程序  │\n");
        printf("\t\t└───────┘\n");
        printf("\t\t请您选择(0-6):");
        c=getchar();  
        }while(c<'0'||c>'6');
        return(c-'0');
    }

int Input(Person per[],int n)
{
    int i=0;
    char sign,x[10];                     
    while(sign!='n'&&sign!='N')
    {
        printf("\t编号:");
        scanf("\t%d",&per[n+i].score);
        printf("\t姓名:");
        scanf("\t%s",per[n+i].name);
        printf("\t年龄:");
        scanf("\t%s",per[n+i].age);
        printf("\t电话号码:");
        scanf("\t%s",per[n+i].num);
        printf("\t通讯住址:");
        scanf("\t%s",per[n+i].adds);
        printf("\t电子邮箱:");
        scanf("\t%s",per[n+i].email);

        gets(x);   
        printf("\n\t是否继续添加?(Y/N)");
        scanf("\t%c",&sign);
        i++;
    }
    return(n+i);
}

void Display(Person per[],int n)                                         
{
    int i;
    printf("----------------------------------------------------------------------\n");                          /*格式*/
    printf("编号  姓名  年龄    电话号码     通讯地址        电子邮箱\n");
    printf("----------------------------------------------------------------------\n");
    for(i=1;i<n+1;i++)                                                            
    {
        printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email);
        if(i>1&&i%10==0)                                                         
        {
            printf("\t-----------------------------------\n");
            printf("\t");
            system("pause");
            printf("\t-----------------------------------\n");
        }
    }
    printf("----------------------------------------------------------------------\n");
    system("pause");
}



int Delete_a_record(Person per[],int n)
{
    char s[20];
    int i=0,j;
    printf("\t请输入想删除记录中的名字:");
    scanf("%s",s);
    while(strcmp(per[i].name,s)!=0&&i<n) i++;
    if(i==n)
    {
        printf("\t通讯录中没有此人!\n");
        return(n);
    }
    for(j=i;j<n-1;j++)
    {
        strcpy(per[j].num,per[j+1].num);
        strcpy(per[j].name,per[j+1].name);
        strcpy(per[j].age,per[j+1].age);
        strcpy(per[j].adds,per[j+1].adds);
        strcpy(per[j].email,per[j+1].email);
        per[j].score=per[j+1].score;
    }
    printf("\t\t\t已经成功删除!\n");
    return(n-1);
}

void Query_a_record(Person per[],int n)
{
   
    int m;
    printf("\t\n请选择查询方式:\n");
    printf("\t┌──────┐\n");
    printf("\t│1------姓名 │\n");
    printf("\t│2------电话 │\n");
    printf("\t│3------地址 │\n");
    printf("\t│4------返回 │\n");
    printf("\t└──────┘\n");
    printf("请选择:");
    scanf("%d",&m);
    while(m!=1&&m!=2&&m!=3&&m!=4)
    {
        printf("输入错误,请重新选择:");
        scanf("%d",&m);
    }

    if(m==1)
    {
        char s[20];
        int i=0;
        printf("\t请输入想查询的姓名:");
        scanf("\t%s",s);
        while(strcmp(per[i].name,s)!=0&&i<n) i++;
        if(i==n)
        {
            printf("\t通讯录中没有此人!\n");
            return;
        }
        printf("\t此人编号: %d\n",per[i].score);
        printf("\t此人年龄: %s\n",per[i].age);
        printf("\t电话号码: %s\n",per[i].num);
        printf("\t通讯地址: %s\n",per[i].adds);
        printf("\t电子邮箱: %s\n",per[i].email);
    } ;

    if(m==2)
    {
        char s[20];
        int i=0;
        printf("\t请输入想查询的电话:");
        scanf("\t%s",s);
        while(strcmp(per[i].num,s)!=0&&i<n) i++;
        if(i==n)
        {
            printf("\t通讯录中没有此人!\n");
            return;

        }
        printf("\t此人编号: %d\n",per[i].score);
        printf("\t此人姓名: %s\n",per[i].name);
        printf("\t此人年龄: %s\n",per[i].age);
        printf("\t通讯地址: %s\n",per[i].adds);
        printf("\t电子邮箱: %s\n",per[i].email);
    } ;

    if(m==3)
    {
        char s[20];
        int i=0;
        printf("\t请输入想查询的地址:");
        scanf("\t%s",s);
        while(strcmp(per[i].adds,s)!=0&&i<n) i++;
        if(i==n)
        {
            printf("\t通讯录中没有此人!\n");
            return;
        }
        printf("\t此人编号: %d\n",per[i].score);
        printf("\t此人姓名: %s\n",per[i].name);
        printf("\t此人年龄: %s\n",per[i].age);
        printf("\t电话号码: %s\n",per[i].num);
        printf("\t电子邮箱: %s\n",per[i].email);
    } ;
}


void Change(Person per[],int n)
{
    char s[20];
    int i=0;
    printf("\t请输入想修改的记录中的名字:");
    scanf("%s",s);
    while(strcmp(per[i].name,s)!=0&&i<n) i++;
    if(i==n)
    {
        printf("\t通讯录中没有此人!\n");
        return;
    }
    printf("\t编号:");
    scanf("\t%d",&per[i].score);
    printf("\t姓名:");
    scanf("\t%s",per[i].name);
    printf("\t年龄:");
    scanf("\t%s",per[i].age);
    printf("\t电话号码:");
    scanf("\t%s",per[i].num);
    printf("\t通讯住址:");
    scanf("\t%s",per[i].adds);
    printf("\t电子邮箱:");
    scanf("\t%s",per[i].email);
    printf("\t修改成功!");
}


void WritetoText(Person per[],int n)            
{
    int i=0;
    FILE *fp;                                           /*定义文件指针*/
    char filename[20];                                  /*定义文件名*/
    printf("\t保存到文件\n");                          /*输入文件名*/
    printf("\t请输入所保存的文件名:");
    scanf("\t%s",filename);
    if((fp=fopen(filename,"w"))==NULL)                  
    {
        printf("\t无法打开文件\n");
        system("pause");
        return;
    }
    fprintf(fp,"******************************************通讯录******************************************\n");
    fprintf(fp,"编号     姓名   年龄      电话号码           通讯地址             电子邮箱\n");
    fprintf(fp,"------------------------------------------------------------------------------------------\n");
    while(i<n)
    {
        fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email);
        i++;
    }
    fprintf(fp,"------------------------------------------------------------------------------------------\n");
    fprintf(fp,"***************************************共有%d条记录****************************************\n",n);
    fclose(fp);                                         /*关闭文件*/
    printf("保存成功!\n");
}

void main()                                         /*主函数*/
{
    int n=0;
    for(;;)
    {
        switch(menu_select())
        {
        case 1:
        printf("\n\t添加记录到通讯录\n");                         /*添加记录*/
        n=Input(pe,n);
        break;

        case 2:
        printf("\n\t\t\t    通讯录记录表\n");                      /*显示记录*/
        Display(pe,n);
        break;
        
        case 3:
        printf("\n\t从通讯录中删除记录\n");
        n=Delete_a_record(pe,n);                                  /*删除记录*/
        printf("\t");
        system("pause");
        break;

        case 4:
        printf("\n\t在通讯录中查找记录\n");
        Query_a_record(pe,n);                                      /*查找记录*/
        printf("\t");
        system("pause");
        break;
        
        case 5:
        printf("\n\t修改通讯录中的记录\n");
        Change(pe,n);                                             /*修改数据*/
        printf("\t");
        system("pause");
        break;

        case 6:
        printf("\n\t保存功能\n");
        WritetoText(pe,n);                                         /*保存数据*/
        printf("\t");
        system("pause");
        break;

        case 0:
        printf("\n\t\t谢谢使用,再见!\n");                         /*结束程序*/
        printf("\n\t\t");
        //system("pause");
        exit(0);
        }
    }
}
搜索更多相关主题的帖子: include 通讯录 system email 朋友 
2014-01-03 11:06
小小难
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-1-3
得分:0 
2014-01-03 11:08
小小难
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-1-3
得分:0 
2014-01-03 11:08
小小难
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-1-3
得分:0 
2014-01-03 11:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:7 
聽你朋友瞎掰,鏈表增刪數據簡單,但隨機查詢數據效率低呢,通訊錄查詢用的多還是增刪用的多?

授人以渔,不授人以鱼。
2014-01-03 13:59
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
得分:7 
使用链表只是减少你打开关闭文件的次数,。。。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-01-03 17:31
lleon
Rank: 2
等 级:论坛游民
帖 子:25
专家分:43
注 册:2013-10-28
得分:7 
现在内存这么大,开个大数组最方便。
如果要兼顾增删查的速度,就用avl树。
2014-01-03 17:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-426061-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019317 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved