| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1253 人关注过本帖
标题:一个有关线性表的 程序, 电话簿程序
取消只看楼主 加入收藏
zhuchenxi
Rank: 1
等 级:新手上路
帖 子:61
专家分:6
注 册:2011-4-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
一个有关线性表的 程序, 电话簿程序
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
#define ERROR 0
#define OK 1
#define RL 100

typedef struct{
    char *name[RL];
    char *phonenum[RL];
    int DHB_length;
}dianhuabu;


int creat_dianhuabu(dianhuabu *P,int Length)//创建电话簿
{
    int i;
    for(i=0;i<Length;i++){
        P->phonenum[i]=(char *)malloc(20*sizeof(char));
         printf("电话号码%d:",i+1);
        scanf("%s",P->phonenum[i]);
        P->name[i]=(char *)malloc(Length*20*sizeof(char));
         printf("姓名%d:",i+1);
        scanf("%s",P->name[i]);
    }
    P->DHB_length=Length;
    return OK;
}

int Inserti(dianhuabu *P)//删除操作
{
    int i,j;
    char CR_phone[20]={'\0'},CR_name[20]={'\0'};
    printf("请输入插入位置:");
    scanf("%d",&i);
    if(i<1||i>P->DHB_length+1) return ERROR;
    printf("请输入插入的电话号码:");
    scanf("%s",CR_phone);
    printf("请输入插入的姓名:");
    scanf("%s",CR_name);
    P->phonenum[P->DHB_length]=(char *)malloc(20*sizeof(char));
    P->name[P->DHB_length]=(char *)malloc(20*sizeof(char));
    if(!P->phonenum[P->DHB_length]||!P->name[P->DHB_length]) return ERROR;
    for(j=P->DHB_length;j>=i;j--){
        P->phonenum[j]=P->phonenum[j-1];
        P->name[j]=P->name[j-1];
    }
    strcpy(P->phonenum[i-1],CR_phone);
    strcpy(P->name[i-1],CR_name);
    P->DHB_length++;
    return OK;
}

int Deletei(dianhuabu *P)//插入操作
{
    int i,j;
    printf("请输入删除位置:");
    scanf("%d",&i);
    if(i<1||i>P->DHB_length) return ERROR;
    for(j=i;j<=P->DHB_length;j++){
        P->phonenum[i-1]=P->phonenum[i];
        P->name[i-1]=P->name[i];
    }
    P->DHB_length--;
    return OK;
}

int PrintfP(dianhuabu *P)//输出
{
    int i;
    printf("电话簿目前存储数量为:%d\n",P->DHB_length);
    for(i=0;i<P->DHB_length;i++){
        printf("电话号码%d:%s   姓名%d:%s\n",i+1,P->phonenum[i],i+1,P->name[i]);
    }
    return OK;
}

int main()
{
    int length,caozuo;
    dianhuabu Q;
    printf("创建电话簿\n\n请输入电话簿用户数量:");
    scanf("%d",&length);
    creat_dianhuabu(&Q,length);
    while(1){
        printf("请选择您想对电话簿进行的操作:\n1、delete(删除).\n2、insert(插入).\n3、printfP(输出电话簿).\n4、end(不进行任何操作).\n\n");
        printf("请选择您要进行的操作:");
        scanf("%d",&caozuo);
        printf("\n");
        if(caozuo==4) break;
        if(caozuo==3){
            PrintfP(&Q);
        }
        if(caozuo==2){
            Inserti(&Q);
        }            
        if(caozuo==1){
            Deletei(&Q);
        }
    }
    free(&Q);
    return 0;
}

这个是程序就是  在插入操作时,不知道什么原因,有些数据也会一样,删除操作,只要删除位置是 第一个位置,也会变成所有数据变成一样。





这个程序也是电话簿,不过时用的链表 存储的
# include<stdio.h>
# include<stdlib.h>
#define OK 1
#define ERROR 0

typedef struct dianhuabu{
    char phonenum[20];
    char name[20];
    struct dianhuabu *next;
}dianhuabu,*DianHuaBu;

int creat_dianhuabu(DianHuaBu P,int *Len)
{
    int i;
    printf("请逐个输入用户的电话号码和姓名\n");
    for(i=0;i<*Len;i++){
        P->next=(dianhuabu *)malloc(20*sizeof(char)+20*sizeof(char)+sizeof(DianHuaBu));
        P=P->next;
        printf("电话号码%d:",i+1);
        scanf("%s",&P->phonenum);
        printf("姓名%d:",i+1);
        scanf("%s",&P->name);
    }
    printf("\n");
    return OK;
}

int Delete_i(DianHuaBu P,int *Len)
{
    int j,i;
    printf("请输入删除位置:");
    scanf("%d",&i);
    if(i<0||i>*Len) return ERROR;
    for(j=0;j<i-1;j++){
        P=P->next;
    }
    P->next=P->next->next;
    (*Len)--;
    return OK;
}

int Inserti(DianHuaBu P,int *Len)
{
    int i,j;
    DianHuaBu CR;
    printf("请输入插入位置:");
    scanf("%d",&i);
    if(i<1||i>(*Len)+1) return ERROR;
    for(j=0;j<i-1;j++){
           P=P->next;
    }
    CR=(dianhuabu *)malloc(20*sizeof(char)+20*sizeof(char)+sizeof(DianHuaBu));
    printf("请输入插入的电话号码:");
    scanf("%s",&CR->phonenum);
    printf("请输入插入的姓名:");
    scanf("%s",&CR->name);
    CR->next=P->next,P->next=CR;
    (*Len)++;
    free(CR);
    return OK;
}

int printfP(DianHuaBu P,int *Len)
{
    int i;
    printf("电话薄目前的存储个数为:%d\n",*Len);
    for(i=0;i<*Len;i++){
        P=P->next;
        printf("电话号码%d:%s       姓名%d:%s\n",i+1,P->phonenum,i+1,P->name);
    }
    printf("\n\n\n");
    return OK;
}

int freeP(DianHuaBu P,int *Len)
{
    int i;
    for(i=0;i<*Len;i++){
        free(P);
        P=P->next;
    }
    return OK;
}

int main()
{
    int length,*q,caozuo;
    DianHuaBu Q,CR;
    Q=(dianhuabu *)malloc(20*sizeof(char)+20*sizeof(char)+sizeof(DianHuaBu));
    CR=(dianhuabu *)malloc(20*sizeof(char)+20*sizeof(char)+sizeof(DianHuaBu));
    Q->next=NULL;
    printf("创建电话簿\n\n请输入电话簿用户数量:");
    scanf("%d",&length);
    q=&length;
    creat_dianhuabu(Q,q);
    while(1){
        printf("请选择您想对电话簿进行的操作:\n1、delete(删除).\n2、insert(插入).\n3、printfP(输出电话簿).\n4、end(不进行任何操作).\n\n");
        printf("请选择您要进行的操作:");
        scanf("%d",&caozuo);
        printf("\n");
        if(caozuo==4) break;
        if(caozuo==3){
            printfP(Q,q);
        }
        if(caozuo==2){
            Inserti(Q,q);
        }            
        if(caozuo==1){
            Delete_i(Q,q);
        }
    }
    freeP(Q,q);
    return 0;
}

这个问题就是 只要连续插入 数据,数据就会出错。。。






求解决

[ 本帖最后由 zhuchenxi 于 2011-9-19 20:25 编辑 ]
搜索更多相关主题的帖子: include 电话号码 电话簿 
2011-09-19 15:20
zhuchenxi
Rank: 1
等 级:新手上路
帖 子:61
专家分:6
注 册:2011-4-28
收藏
得分:0 
回复 4楼 寒风中的细雨
谢谢版主大人啊,
所有操作问题都解决了
还有个 问题就是

那个用 链表写的 电话簿
在输入  4  结束操作时 就会弹出这个 框
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-09-20 09:46
快速回复:一个有关线性表的 程序, 电话簿程序
数据加载中...
 
   



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

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