| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 529 人关注过本帖
标题:关于用链表做的简单信息管理系统出现的问题。
只看楼主 加入收藏
上苍之手
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:314
专家分:1451
注 册:2012-11-24
结帖率:96.3%
收藏
已结贴  问题点数:30 回复次数:8 
关于用链表做的简单信息管理系统出现的问题。
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
typedef struct STU
{
    char name[15];
    char qq[13];
    char phone[13];
    struct STU *next;
} NODE;
int i;
NODE *head = NULL;
void input(int N);
void output();
void research();
void insert();
void del();
void add();
void destory();
int main()
{
    int m;
    static int N;
    printf("请输入人数\n");
    scanf("%d", &N);
    while (1)
    {
        printf("---------------欢迎使用-------------\n");
        printf("|             1,录入信息           |\n");
        printf("|             2,输出信息           |\n");
        printf("|             3,查找信息           |\n");
        printf("|             4,修改信息           |\n");
        printf("|             5,增加信息           |\n");
        printf("|             6,删除信息           |\n");
        printf("|             7.清空信息           |\n");
        printf("------------------------------------\n");
        printf("请选择\n");
        scanf("%d", &m);
        switch (m)
        {
        case 1:
            input(N);
            break;
        case 2:
            output();
            break;
        case 3:
            research();
            break;
        case 4:
            insert();
            break;
        case 5:
            add();
            break;
        case 6:
            del();
            break;
        case 7:
            destory();
            break;
        }
    }
}

void input(int N)
{
    NODE *p, *tail;
    p = (NODE *) malloc(sizeof(NODE));
    printf("请输入第1位学生姓名qq及电话:\n");
    scanf("%s%s%s", p->name, p->qq, p->phone);
    p->next = NULL;
    head = p;
    tail = p;
    for (i = 1; i < N; i++)
    {
        p = (NODE *) malloc(sizeof(NODE));
        printf("请输入第%d位学生姓名qq及手机号:\n", i + 1);
        scanf("%s%s%s", p->name, p->qq, p->phone);
        tail->next = p;
        p->next = NULL;
        tail = p;
    }
    return head;

}

void output()
{
    NODE *p;
    p = head;
    if (p == NULL)
        printf("无记录\n");
    else
    {
        while (p != NULL)
        {
            printf("姓名:%s  qq:%s  电话:%s\n", p->name, p->qq, p->phone);
            p = p->next;
        }
    }
}

void name_re()
{
    char name_1[15];
    NODE *p;
    p = head;
    if (p == NULL)
        printf("无信息\n");
    else
    {
        printf("输入姓名:\n");
        scanf("%s", name_1);
        while(p!=NULL)
        {
            if (strcmp(p->name, name_1) == 0)
            {
                printf("姓名:%s qq:%s 电话:%s\n", p->name, p->qq,
                       p->phone);
                break;
            }
            p = p->next;
        }
    }
}

void qq_re()
{
    char qq_1[13];
    NODE *p;
    p = head;
    if (p == NULL)
        printf("无信息\n");
    else
    {
        printf("输入qq:\n");
        scanf("%s", qq_1);
        while(p!=NULL)
        {
            if (strcmp(p->qq, qq_1) == 0)
            {
                printf("姓名:%s qq:%s 电话:%s\n", p->name, p->qq, p->phone);
                break;
            }
            p = p->next;
        }
    }
}

void phone_re()
{
    char phone_1[15];
    NODE *p;
    p = head;
    if (p == NULL)
        printf("无信息\n");
    else
    {
        printf("输入电话:\n");
        scanf("%s", phone_1);
        while(p!=NULL)
        {
            if (strcmp(p->phone, phone_1) == 0)
            {
                printf("姓名:%s qq:%s 电话:%s\n", p->name, p->qq, p->phone);
                break;
            }
            p = p->next;
        }
    }
}

void research(int N)
{
    int n;
    printf("-------------查找系统-----------------\n");
    printf("           1.姓名查找           \n");
    printf("           2.qq查找              \n");
    printf("           3.电话查找            \n");
    printf("--------------------------------------\n");
    printf("请输入查找方式\n");
    scanf("%d", &n);
    switch (n)
    {
    case 1:
        name_re();
        break;
    case 2:
        qq_re();
        break;
    case 3:
        phone_re();
        break;
    default:
        printf("输入错误\n");
    }
}

void insert()
{
    char name_2[15];
    NODE *p, *p1;
    p = head;
    p1 = head;
    printf("输入需要修改的姓名\n");
    scanf("%s", name_2);
    while(p!=NULL)
    {
        if (strcmp(p->name, name_2) == 0)
        {
            printf("查找成功,请输入信息修改:\n");
            scanf("%s%s%s", p->name, p->qq, p->phone);
            break;
        }
        p = p->next;
    }
}

void add()
{
    NODE *p, *p1;
    p = head;
    int b;
    if (p == NULL)
        printf("请先录入信息\n");
    else
    {
        printf("输入要增加的人数:\n");
        scanf("%d", &b);
        while (p->next != NULL)
        {
            p = p->next;
        }
        for (i = 1; i <= b; i++)
        {
            p1 = (NODE *) malloc(sizeof(NODE));
            printf("输入增加的第%d位学生姓名,qq及电话:\n", i);
            scanf("%s%s%s", p1->name, p1->qq, p1->phone);
            p->next = p1;
            p1->next = NULL;
            p = p1;
        }
    }
}

void del()
{
    char name_3[15];
    NODE *p, *p1;
    p = head;
    p1 = head;
    printf("输入需要删除的姓名\n");
    scanf("%s", name_3);
    while(p!=NULL)
    {
        if (strcmp(p->name, name_3) == 0)
        {
            printf("删除成功\n");
            break;
        }
        p1 = p;
        p = p->next;
    }
    if (p == head)
    {
        head = p->next;
        free(p);
    }
    else
    {
        p1->next = p->next;
        free(p);
    }
}

void destory()
{
    NODE *p = head;
    if (p = NULL)
        printf("无记录清空\n");
    else
    {
        while (p != NULL)
        {
            head= p->next;
            free(p);
            p=head;
        }
    }
}
这个是我用链表做的简单信息管理,但是有两个函数功能模块实现不了,。一个是增加信息,一个是清空信息。。哪里错了。。。?怎么改??
搜索更多相关主题的帖子: void research include insert 
2012-12-30 10:09
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:0 
你这代码貌似编译都有问题哈?
2012-12-30 10:20
上苍之手
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:314
专家分:1451
注 册:2012-11-24
收藏
得分:0 
回复 2楼 crystall
我试了,编译没有问题,但就是那两个函数功能实现不了。。

扬起风帆,从此自信远航。。。。。
2012-12-30 10:28
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:10 
程序代码:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
typedef struct STU
{
    char name[15];
    char qq[13];
    char phone[13];
    struct STU *next;
} NODE;
int i;
NODE *head = NULL;
void input(int N);
void output();
void research(int N);
void insert();
void del();
void add();
void destory();

int main()
{
    int m;
    static int N;
    printf("请输入人数\n");
    scanf("%d", &N);
    while (1)
    {
        printf("---------------欢迎使用-------------\n");
        printf("|             1,录入信息           |\n");
        printf("|             2,输出信息           |\n");
        printf("|             3,查找信息           |\n");
        printf("|             4,修改信息           |\n");
        printf("|             5,增加信息           |\n");
        printf("|             6,删除信息           |\n");
        printf("|             7.清空信息           |\n");
        printf("------------------------------------\n");
        printf("请选择\n");
        scanf("%d", &m);
        switch (m)
        {
        case 1:
            input(N);
            break;
        case 2:
            output();
            break;
        case 3:
            research(N);
            break;
        case 4:
            insert();
            break;
        case 5:
            add();
            break;
        case 6:
            del();
            break;
        case 7:
            destory();
            break;
        }
    }

    return 0;
}

void input(int N)
{
    NODE *p, *tail;
    p = (NODE *) malloc(sizeof(NODE));
    printf("请输入第1位学生姓名qq及电话:\n");
    scanf("%s%s%s", p->name, p->qq, p->phone);
    p->next = NULL;
    head = p;
    tail = p;
    for (i = 1; i < N; i++)
    {
        p = (NODE *) malloc(sizeof(NODE));
        printf("请输入第%d位学生姓名qq及手机号:\n", i + 1);
        scanf("%s%s%s", p->name, p->qq, p->phone);
        tail->next = p;
        p->next = NULL;
        tail = p;
    }

}

void output()
{
    NODE *p;
    p = head;
    if (p == NULL)
        printf("无记录\n");
    else
    {
        while (p != NULL)
        {
            printf("姓名:%s  qq:%s  电话:%s\n", p->name, p->qq, p->phone);
            p = p->next;
        }
    }
}

void name_re()
{
    char name_1[15];
    NODE *p;
    p = head;
    if (p == NULL)
        printf("无信息\n");
    else
    {
        printf("输入姓名:\n");
        scanf("%s", name_1);
        while(p!=NULL)
        {
            if (strcmp(p->name, name_1) == 0)
            {
                printf("姓名:%s qq:%s 电话:%s\n", p->name, p->qq,
                       p->phone);
                break;
            }
            p = p->next;
        }
    }
}

void qq_re()
{
    char qq_1[13];
    NODE *p;
    p = head;
    if (p == NULL)
        printf("无信息\n");
    else
    {
        printf("输入qq:\n");
        scanf("%s", qq_1);
        while(p!=NULL)
        {
            if (strcmp(p->qq, qq_1) == 0)
            {
                printf("姓名:%s qq:%s 电话:%s\n", p->name, p->qq, p->phone);
                break;
            }
            p = p->next;
        }
    }
}

void phone_re()
{
    char phone_1[15];
    NODE *p;
    p = head;
    if (p == NULL)
        printf("无信息\n");
    else
    {
        printf("输入电话:\n");
        scanf("%s", phone_1);
        while(p!=NULL)
        {
            if (strcmp(p->phone, phone_1) == 0)
            {
                printf("姓名:%s qq:%s 电话:%s\n", p->name, p->qq, p->phone);
                break;
            }
            p = p->next;
        }
    }
}

void research(int N)
{
    int n;
    printf("-------------查找系统-----------------\n");
    printf("           1.姓名查找           \n");
    printf("           2.qq查找              \n");
    printf("           3.电话查找            \n");
    printf("--------------------------------------\n");
    printf("请输入查找方式\n");
    scanf("%d", &n);
    switch (n)
    {
    case 1:
        name_re();
        break;
    case 2:
        qq_re();
        break;
    case 3:
        phone_re();
        break;
    default:
        printf("输入错误\n");
    }
}

void insert()
{
    char name_2[15];
    NODE *p, *p1;
    p = head;
    p1 = head;
    printf("输入需要修改的姓名\n");
    scanf("%s", name_2);
    while(p!=NULL)
    {
        if (strcmp(p->name, name_2) == 0)
        {
            printf("查找成功,请输入信息修改:\n");
            scanf("%s%s%s", p->name, p->qq, p->phone);
            break;
        }
        p = p->next;
    }
}

void add()
{
    NODE *p, *p1;
    p = head;
    int b;
    if (p == NULL)
        printf("请先录入信息\n");
    else
    {
        printf("输入要增加的人数:\n");
        scanf("%d", &b);
        while (p->next != NULL)
        {
            p = p->next;
        }
        for (i = 1; i <= b; i++)
        {
            p1 = (NODE *) malloc(sizeof(NODE));
            printf("输入增加的第%d位学生姓名,qq及电话:\n", i);
            scanf("%s%s%s", p1->name, p1->qq, p1->phone);
            p->next = p1;
            p1->next = NULL;
            p = p1;
        }
    }
}

void del()
{
    char name_3[15];
    NODE *p, *p1;
    p = head;
    p1 = head;
    printf("输入需要删除的姓名\n");
    scanf("%s", name_3);
    while(p!=NULL)
    {
        if (strcmp(p->name, name_3) == 0)
        {
            printf("删除成功\n");
            break;
        }
        p1 = p;
        p = p->next;
    }
    if (p == head)
    {
        head = p->next;
        free(p);
    }
    else
    {
        p1->next = p->next;
        free(p);
    }
}

void destory()
{
    NODE *p = head;
    if (p == NULL)
        printf("无记录清空\n");
    else
    {
        while (p != NULL)
        {
            head= p->next;
            free(p);
            p=head;
        }
    }
}
2012-12-30 10:32
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:10 
我着实编译了一下,VC6 编译不过。
1:
//函数声明
void input(int N);
返回值为void类型, 楼主给了返回值

2:
//函数声明
void research();

//函数实现
void research(int N)
{
    int n;
    //...
}

//函数调用
research();

经过测试,增加功能没有问题, 清空功能 是因为你判断的条件
if (p = NULL)
   printf("无记录清空\n");

你这里是在做赋值操作,而不是比较操作,因此不会执行另一个分支。
告诉你一个小技巧,当遇到跟常量做判断时,把常量写在前面,如果你少了一个=号,编译器会报错的。
if(NULL = p)
{
}

if(NULL == p)
{
}
2012-12-30 10:39
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:0 
回复 5楼 crystall
上面发的那个代码你再测试测试
2012-12-30 10:40
上苍之手
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:314
专家分:1451
注 册:2012-11-24
收藏
得分:0 
回复 6楼 crystall
可以啦。。谢啦!!!在问一个问题,
就是如果再case里的函数用指针做参数行不行?
比如 case 1: fun(NODE *head);break;这个行不行?

扬起风帆,从此自信远航。。。。。
2012-12-30 10:50
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:10 
以下是引用上苍之手在2012-12-30 10:50:40的发言:

可以啦。。谢啦!!!在问一个问题,
就是如果再case里的函数用指针做参数行不行?
比如 case 1: fun(NODE *head);break;这个行不行?

可以用指针做为函数的参数

函数声明:

void fun(NODE* pHead);

函数定义:
void fun(NODE* pHead);
{
}

函数调用:
void main()
{
    NODE* pHead = (NODE *) malloc(sizeof(NODE));
    if(NULL == pHead )
   {
     return;
    }

    fun(pHead );
}
2012-12-30 11:27
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:0 
学习了
2013-01-07 02:26
快速回复:关于用链表做的简单信息管理系统出现的问题。
数据加载中...
 
   



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

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