| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 916 人关注过本帖
标题:请好心人帮我看一下这个程序
取消只看楼主 加入收藏
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
请好心人帮我看一下这个程序
做的是一个学生选课系统
明明没有错误,但是运行了之后录入了课程和学生然后选好课之后,一旦查看学生的选课情况就会出现乱码,程序停止运行。。。
帮我看看吧~!看一下有什么不合适的地方?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N1,N2;
struct course
{
    int num1;        //课程编号
    char name1[20];  
    int people;                   //选此门课程的人数
    struct course *next;            //结构体指针
};
struct student
{
    int num2;
    char name2[20];
    int nelenum[50];//所选课程编号
    struct student * next;
};

struct course * head1;
struct student * head2;

void insert(struct course *incourse)             //增加课程信息
{
    struct course *p0,*p1,*p2;
    p1=head1;
    p0=incourse;
    if(head1==NULL)
    {
        head1=p0;
        p0->next=NULL;
    }
    else
    {
        while((p0->num1>p1->num1) && (p1->next!=NULL))
        {
            p2=p1;
            p1=p1->next;
        }
        if(p0->num1<=p1->num1)
        {
            if(head1==p1)
                head1=p0;
            else
                p2->next=p0;
            p0->next=p1;
        }
        else
        {
            p1->next=p0;
            p0->next=NULL;
        }
    }
    N1=N1+1;
}
void delc(int num1)             //删除课程信息
{
    struct course *p1,*p2;
    if(head1==NULL)
    {
        printf("\n无法删除!\n");
        goto end;
    }
    p1=head1;
    while(num1!=p1->num1 && p1->next!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }
    if(num1==p1->num1)
    {
        if(p1==head1)
            head1=p1->next;
        else
            p2->next=p1->next;
        printf("已删除\n");
        N1=N1-1;
    }
    else
        printf("没有此课程\n");
    end:;
}
void managementc()             //课程信息管理函数
{
    struct course * p1;
    int i,num1;
    printf("\t\t\t课程信息管理\n");
    printf("1.添加课程\n");
    printf("2.删除课程\n");
    printf("3.返回\n");
    printf("请输入1-3:\n");
    scanf("%d",&i);
    switch(i)
    {
    case 1:{p1=(struct course *)malloc(sizeof(struct course));
        printf("课程编号\t课程名称\n");
        scanf("%d%s",&p1->num1,p1->name1);
        p1->people=0;
        insert(p1);
           }      break;
    case 2:printf("请输入您要删除的课程编号:\n");
        scanf("%d",&num1);
        delc(num1);      break;
    case 3:break;
    }
}

void inserts(struct student * incouse)             //增加学生信息
{
    struct student *p0,*p1,*p2;
    p1=head2;
    p0=incouse;
    if(head2==NULL)
    {
        head2=p0;
        p0->next=NULL;
    }
    else
    {
        while((p0->num2>p1->num2) && (p1->next!=NULL))
        {
            p2=p1;
            p1=p1->next;
        }
        if(p0->num2 <= p1->num2)
        {
            if(head2==p1) head2=p0;
            else p2->next=p0;
            p0->next=p1;
        }
        else
        {
            p1->next=p0;
            p0->next=NULL;}
    }
    N2=N2+1;
}
void dels(int num2)                   //删除学生信息
{
    struct student *p1,*p2;
    if(head2==NULL)
    {
        printf("\n无法删除\n");
        goto end;
    }
    p1=head2;
    while(num2!=p1->num2 && p1->next!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }
    if(num2==p1->num2)
    {
        if(p1==head2)
            head2=p1->next;
        else
            p2->next=p1->next;
        printf("已删除\n");
        N2=N2-1;
    }
    else
        printf("没有此学生编号\n");
end:;
}
void managements()          //学生信息管理函数
{
    struct student * p1;
    int i,num2;
    printf("\t\t\t学生信息管理\n");
    printf("1.添加学生信息\n");
    printf("2.删除学生信息\n");
    printf("3.返回主菜单\n");
    printf("请选择1-3:\n");
    scanf("%d",&i);
    switch(i)
    {
    case 1:{p1=(struct student *)malloc(sizeof(struct student));
   
        printf("num\tname\n");
        scanf("%d%s",&p1->num2,p1->name2);
        inserts(p1);}break;
    case 2:{printf("请输入您要删除的学生编号:\n");
        scanf("%d",&num2);
        dels(num2);
           }    break;
    case 3:break;
    }
}
void elect()             //学生选课
{
    struct student * s;
    struct course * p;
    int a,i,b;
    printf("请输入您的学号:\n");
    scanf("%d",&a);
    s=head2;
    while((s->num2)!=a&&s->next!=NULL) s=s->next;
    if(s->num2!=a)
    {
        printf("您的信息不存在,请重新输入:\n");
        goto end;
    }

    printf("请输入您要选修的课程编号\n");
    scanf("%d",&b);
    for(i=0;(s->nelenum[i])==0;i++);
    s->nelenum[i]=b;
    p=head1;
    while((p->num1)!=b)
        p=p->next;
    for(i=0;(s->nelenum[i])!=0;i++);
    s->nelenum[i]=b;
    (p->people)++;
   
    (p->people)++;
end:;
}
void back()              //学生退课
{
    struct student * p;
    struct course * p1;
    int b,i,j,a;
    printf("请输入您的学号:\n");
    scanf("%d",&a);
    p=head2;
    while(p->num2!=a&&p!=NULL) p=p->next;
    if(p==NULL)
        printf("您的信息不存在:\n");
    else
    {
        printf("请输入您要退选的课程:\n");
        scanf("%d",&b);
        p1=head1;
        while(p1->num1!=b) p1=p1->next;
        for(i=0;p->nelenum[i]!=b;i++);
        for(j=i;p->nelenum[j]!=0;j++)
            p->nelenum[j]=p->nelenum[j+1];
        p->nelenum[--j]=0;
        
        (p1->people)--;
        printf("succeed!\n");
    }
}
void elective()             //学生选课信息管理
{
    int i;
    printf("\t\t\t学生选课信息管理\n");
    printf("1.选课\n");
    printf("2.退课\n");
    printf("3.返回主菜单\n");
    printf("请输入1-3:\n");
    scanf("%d",&i);
    switch(i)
    {
    case 1:elect();break;
    case 2:back();break;
    case 3:break;
    }
}
void listc()                 //浏览课程信息
{
    struct course * p;
    p=head1;
    printf("课程编号    课程名称   选课人数\n");
    while(p!=NULL)
    {
        printf("%d%s%d\n",p->num1,p->name1,p->people);
        p=p->next;
    }
}
void lists()                     //浏览学生信息
{
    struct student * p;
    int a;
    p=head2;
    printf("学生编号     学生姓名      所选课程编号\n");
    while(p!=NULL)
    {
        printf("%d%s%d",p->num2,p->name2,p->nelenum);
        

        for(a=0;p->nelenum[a]!=0&&a<14;a++)
            printf("%d",p->nelenum[a]);
        printf("\n");
        p=p->next;
    }
}
void intoc()                       //存储课程信息
{
    FILE * fp;
    struct course * p;
    char filepath[30];
    printf("输入路径:");
    getchar();
    gets(filepath);
    if((fp=fopen(filepath,"w"))==NULL)
    {
        printf("\无法储存!");
        exit(0);
    }
    p=head1;
    while(p!=NULL)
    {
        fprintf(fp,"%d%s%d\n",p->num1,p->name1,p->people);
        p=p->next;
    }
    fclose(fp);
    printf("已储存入%s文件!\n",filepath);
}
void intos()                            //存储学生信息
{
    FILE * fp;
    struct student * p;
    char filepath[30];
    printf("请输入路径:");
    getchar();
    gets(filepath);
    if((fp=fopen(filepath,"wt"))==NULL)
    {
        printf("\n 无法储存!");
        exit(0);
    }
    p=head2;
    while(p!=NULL)
    {
        fwrite(p,sizeof(struct student),1,fp);
        p=p->next;
    }
    fclose(fp);
    printf("已储存入 %s文件!\n",filepath);
}
void into()                      //信息存储函数
{
    int i;
    printf("\t\t\t信息存储\n");
    printf("1.课程信息存储\n");
    printf("2.学生信息存储t\n");
    printf("3.返回主菜单\n");
    printf("请输入1-3\n");
    scanf("%d",&i);
    switch(i)
    {
    case(1):intoc();break;
    case(2):intos();break;
    case(3):break;
    }
}
void store()                             //信息存储浏览函数
{
    int i;
    printf("\t\t信息存储和浏览\n");
    printf("1.课程信息浏览\n");
    printf("2.学生信息浏览\n");
    printf("3.信息存储\n");
    printf("4.返回主菜单\n");
    printf("请输入1-4:\n");
    scanf("%d",&i);
    switch(i)
    {
    case(1):listc();break;
    case(2):lists();break;
    case(3):into();break;
    case(4):break;
    }
}
void search1()                      //按学生编号查找学生信息
{
    int a,b;
    struct student * p;
    printf("请输入学生编号");
    scanf("%d",&a);
    p=head2;
    printf("学号       学生姓名    所选课程编号\n");
    while(p!=NULL)
    {
        if(p->num2==a)
        {
            printf("%d%s%d",p->num2,p->name2,p->nelenum);
            for(b=0;p->nelenum[b]!=0&&b<14;b++)
                printf("%d",p->nelenum[b]);
        }
        p=p->next;
    }
}
void search2()                         //按学生姓名查找学生信息
{
    char name[20];
    struct student * p;
    printf("请输入要查找的学生姓名:");
    scanf("%s",name);
    p=head2;
    printf("学号       学生姓名     所选课程编号\n");
    while(p!=NULL)
    {
        if(strcmp(name,p->name2)==0)
        {
            printf("%d%s%d",p->num2,p->name2,p->nelenum);
            
        }
        p=p->next;
    }
}
void search()                      //学生信息查找主函数
{
    int i;
    printf("\t\t\t学生信息查找");
    printf("\n1.按学号查找");
    printf("\n2.按姓名查找");
    printf("\n3.返回主菜单");
    printf("\n请输入1-3:");
    scanf("%d",&i);
    switch(i)
    {
    case 1:search1();break;
    case 2:search2();break;
    case 3:break;}}
void main()                     //主函数
{
    int i;
start:
    printf("\t\t\t*****************************\n");
    printf("\n\t\t\t\t欢迎使用此系统!\n");
    printf("\t\t\t*****************************\n");
    printf("\n");
    printf("\t\t菜单:\n");   
    printf("\t\t\t1.课程信息管理\n");
    printf("\t\t\t2.学生信息管理\n");
    printf("\t\t\t3.学生选课\n");
    printf("\t\t\t4.信息存储与浏览\n");
    printf("\t\t\t5.查找学生信息\n");
    printf("\t\t\t6.退出系统");
    printf("\t\t\t\n请输入1-6:\n");
    scanf("%d",&i);

      if(i<1||i>6)
      {
        printf("请重新输入:\n");
        goto start;
      }

    switch(i)
    {
    case 1:system("cls"); managementc();goto start;break;
    case 2:system("cls"); managements();goto start;break;
    case 3:system("cls"); elective();goto start;break;
    case 4:system("cls"); store();goto start;break;
    case 5:system("cls"); search();goto start;break;
    case 6:{system("cls");
           }
        printf("Thank you!\n\nBye-Bye!\n");
    }

}
搜索更多相关主题的帖子: include course people 结构体 
2014-05-10 22:06
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 3 楼 top398
你好,可以麻烦你帮我修改一下嘛?我也不大会,学的也不是很好~
2014-05-11 10:31
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 3 楼 top398
确实是选课部分出现了问题,可是要怎么改?
2014-05-11 10:48
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 6 楼 top398
就是1和2 都没问题,用到4查询学生信息的时候比如要按学生学号或者是姓名查询的时候,出来的学生姓名和学号都对,但是所修课程编号就是一堆像是430811287907987079898709870980798789....不知道为什么,我看了一下应该是没有错误,我找不出
2014-05-11 22:02
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 10 楼 top398
谢谢,你说的这个地方我已经改了
2014-05-12 09:59
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 8 楼 top398
这是个C语言的课程设计
说实话,我也不大会,你说我没有初始化数组,刚刚我在学生信息的结构体里视图初始化了一下,但是这样之后就出现错误了

你能帮我修改一下么?后天就要答辩了,我实在是不会修改。。。
2014-05-12 10:03
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 13 楼 top398
这个具体难改吗?可否加QQ问一下你?
2014-05-12 19:27
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 16 楼 top398
按照你说的这样添加了两处,可是这样之后进去了添加学生信息的时候就出错了,就停止了。
呜呜~~是为什么呀?
2014-05-13 13:19
稳重的小蘑菇
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 18 楼 top398
恩恩,这样就行了~!你真厉害!谢谢你啦~!
2014-05-13 16:56
快速回复:请好心人帮我看一下这个程序
数据加载中...
 
   



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

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