| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 553 人关注过本帖
标题:单链表学生系统,帮忙看看错在那里
只看楼主 加入收藏
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:5 
单链表学生系统,帮忙看看错在那里
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct student
{
    char name[10];
    int number;
    int chinese;
    int math;
    int english;
};
typedef struct node
{
    char data;
    struct student a;
    struct node *next;
}node,*linklist;
void createlist(linklist *l)/*创建单链表*/
{
    *l=(linklist)malloc(sizeof(node));/*申请内存*/
    (*l)->next=NULL;/*建立空的单链表*/
    (*l)->data=0;/*初始化数据区*/
}
void charu(linklist *l,int n)/*插入学生信息*/
{
    int i;
    linklist p,s;
    if(n<0||n>(*l)->data+1)
    {
        printf("超出范围,插入位置不合法\n");
        return ;
    }
   
    p=(*l);
    for(i=1;i<n;i++)
    {
        p=(linklist)malloc(sizeof(node));
        printf("请输入学生的姓名:");
        scanf("%s",&(s->a.name));
        printf("请输入学生的学号:");
        scanf("%d",&(s->a.number));
        printf("请输入学生的语文成绩:");
        scanf("%d",&(s->a.chinese));
        printf("请输入学生的数学成绩:");
        scanf("%d",&(s->a.math));
        printf("请输入学生的英语成绩:");
        scanf("%d",&(s->a.english));
        p=p->next;
        s->next=p->next;
        p->next=s;
        (*l)->data++;
    }
}

display(linklist *l)
{
    linklist p;
    p=l->next;
    while(p!=NUll)
    {
        printf("学生的姓名是: %s\n",p->a.name);
        printf("学生的学号是: %d\n",p->a.number);
        printf("学的语文成绩: %d\n",p->a.chinese);
        printf("学的英语成绩: %d\n",p->a.english);
        printf("学的数学成绩: %d\n",p->a.math);
        p=p->next;
    }
}
delete(linklist l,int i)
{
    linklist p,q;
    int n,i;
    p=l;
    printf("请输入删除的位置:");
    scanf("%d",&n);
    if(n<0||n>l->data)
    {
        printf("删除的位置不合法\n");
        return ;
    }
    for(i=1;i<n;i++)
    {
        p=p->next;
        q=p->next;
        p-next=q->next;
        free(q);
        l->data--;
    }
   
}
void chaxun(linklist l)
{
    int n,flag=1;
    linklist p;
    p=l->next;
    printf("输入要查询的学号:\n");
    scanf("%d",&n);
    while(p!=Null)
    {
        if(n==p->a.number)
        {
            printf("学生的姓名是:%s\n",p->a.name);
            printf("学生的学号是:%d\n",p->a.number);
            printf("学生的语文成绩是:%d\n",p->a.chinese);
            printf("学生的数学成绩是:%d\n",p->a.math);
            printf("学生的英语成绩是:%d\n",p->a.english);
            flag=0;
            break;
        }
        p=p->next;
    }
    if(flag)
        printf("查询的学生不存在\n");
    printf("是否重新修改学生信息查询?,输入1修改,输入0不修改:\n);
        scanf("%d",&flag);
    if(flag)
    {
        printf("输入学生的姓名:");
        scanf("%s",&(p->a.name));
        printf("输入学生的学号:");
        scanf("%d",&(p->a.number));
        printf("输入学的语文成绩:");
        scanf("%d",&(p->a.chinese));
        printf("输入学的英语成绩:");
        scanf("%d",&(p->a.english));
        printf("输入学的数学成绩:");
        scanf("%d",&(p->a.math));
    }


void menu()
{
    printf("                 单链表基本操作实验                   \n");
    printf("******************************************************\n");
    printf("请选择命令序号(0-7):                                 *\n");
    printf("*1输入学生信息;                                 *\n");
    printf("*2插入学生信息;                                      *\n");
    printf("*3删除学生信息;                                      *\n");
    printf("*4查询学生信息;                                      *\n");
    printf("*5输出学生信息;                                      *\n");
    printf("*0程序结束.                                          *\n");
    printf("******************************************************\n");
}
void function()
{
int n,i,flag;
    linklist l;
    init(&l);
    for(i=0;i<9;i++)
    {
        printf("输入第%d个学生的信息\n",i+1);
        charu(&l,1);  //头插法创建
    }  
    mean();
    printf("输入要执行的操作:\n");
    scanf("%d",&flag);
    while(flag)
    {
        switch(flag)
        {
        case 1:
            printf("输入要插入的位置:\n");
            scanf("%d",&n);
            charu(&l,n);
            break;
        case 2:
            delete(l);
            break;
        case 3:
            display(l);
            break;
        case 4:
            chaxun(l);
            break;
        default:
            printf("输入无效:\n");
            break;
        }
        mean();
        printf("输入要执行的操作:\n");
        scanf("%d",&flag);  
        case 0:exit(1);break;
        default:
        printf("输入命令错误!请重新输入:\n");
        break;
   
}
int main(void)
{
    function();
    return OK;
}


搜索更多相关主题的帖子: 学生 next include number 
2013-06-02 21:56
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1509
专家分:9241
注 册:2010-3-16
收藏
得分:17 
错误不少。你再看看。
linklist没初始化就用,init(&l);没定义,mean()应该是menu吧,最后的switch(flag)结构不合适,等等...
2013-06-02 23:46
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:17 
函数init(&l)没有定义,初始化失败

C++菜鸟
2013-06-04 09:07
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
收藏
得分:0 
各位帮帮忙,我做了很久的了,数据结构学不好,指导一下嘛

菜鸟也疯狂
2013-06-04 18:53
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
收藏
得分:0 
怎么没人帮我看看的啊

菜鸟也疯狂
2013-06-04 21:12
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:17 
额,错误太多了。。。。很多都是基本的一些不该的错误。。

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-05 00:37
快速回复:单链表学生系统,帮忙看看错在那里
数据加载中...
 
   



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

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