月光虾 发表于 2015-1-5 22:39:32

C语言 学生管理系统

本帖最后由 月光虾 于 2015-1-5 22:39 编辑

下面代码哪里错了#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

#define LEN sizeof(struct xueshen)

struct xueshen
{
      int num;      //学号
      char *ming;   //姓名
      int shu;          //数学
      int nu;         //语文
      struct xueshen *next;
};
struct xueshen *scan();       //新建学生管理A


void print(struct xueshen *head);      //输出学生信息
int n;                      //全局变量
void main()
{
      struct xueshen *jigou;
      char select;            //选择变量
      jigou=NULL;
      while(1)
      {
                printf("欢迎进入学生管理系统。\n");
                printf("A(新建学生信息) D(删除) I(插入) M(修改) Q(查询) P(全部名单) E(退出)\n");
               
                scanf("%c",&select);
               
                switch(select)
                {
                case 'a':
                case 'A':jigou=scan(); break;   //新建学生信息a
                case 'd':
      //      case 'D':jigou=del(jigou); break;   //删除学生信息d
                case 'm':
      //      case 'M':jigou=modify(jigou); break; //修改学生信息m
                case 'q':
      //      case 'Q':query(jigou); break;//查询学生信息q
                case 'i':
      //      case 'I':jigou=insert(jigou);break;//插入学生信息i
                case 'p':
                case 'P':print(jigou);break;   //打印全部学生信息p
                case 'e':
                case 'E':exit(0); break;
               
                default:printf("选择错误,重新选择。\n"); //break;
                }

                printf("\n");
               
      }
                system("pause");               
}

struct xueshen *scan()//创建函数
{
      struct xueshen *head;
      struct xueshen *p1,*p2;
      
      p1=p2=(struct xueshen *)malloc(LEN);//创建第一个结构点
      head=p1;
      
      printf("学号:");
      scanf("%d",&p1->num);
    printf("姓名:");
      scanf("%s",&p1->ming);
      printf("数学成绩:");
      scanf("%d",&p1->shu);
      printf("语文成绩");
      scanf("%d",&p1->nu);
      head=NULL;
      while(p1->num)
      {
                n++;
                if(n==1)
                {
                        head=p1;
                }
                else
                {
                        p2->next=p1;                        
                }
                p2=p1;
                p1=(struct xueshen *)malloc(LEN);   //创建新结点给p1
                printf("学号:");
                scanf("%d",&p1->num);
                printf("姓名:");
             scanf("%s",&p1->ming);
                printf("数学成绩:");
                scanf("%d",&p1->shu);
                printf("语文成绩:");
                scanf("%d",&p1->nu);
      }
      p2->next=NULL;
      return head;
}

void print(struct xueshen *head)   //打印函数
{

      struct xueshen *p1;
      p1=head;

                printf("\n共有%d位学生名单。\n",n);
                do
                {
                        printf("\n学号%d\n姓名%s\n数学成绩%d\n语文成绩%d\n",p1->num,p1->ming,p1->shu,p1->nu);
                        p1=p1->next;         //赋下一个地址
                }while(p1);      
}




月光虾 发表于 2015-1-5 22:39:33

先谢谢各位大神来这里看看,指点指点,{:7_142:}{:9_234:}

百日维新 发表于 2015-1-5 23:30:46

@kklloo 来看看,很久没用vc了:cry

月光虾 发表于 2015-1-5 23:40:48

版主大人指点指点{:9_221:}

月光虾 发表于 2015-1-5 23:43:28

百日维新 发表于 2015-1-5 23:30
@kklloo 来看看,很久没用vc了


版主大人指点指点{:5_100:}

百日维新 发表于 2015-1-6 00:08:40

struct xueshen
{
      int num;      //学号
      char ming;   //姓名
      int shu;          //数学
      int nu;         //语文
      struct xueshen *next;
};

不要把姓名定义成指针,改成char就ok了:big

百日维新 发表于 2015-1-6 00:28:27

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

#define LEN sizeof(struct xueshen)

struct xueshen
{
      int num;      //学号
      char ming;   //姓名
      int shu;          //数学
      int nu;         //语文
      struct xueshen *next;
};
struct xueshen *scan();       //新建学生管理A


void print(struct xueshen *head);      //输出学生信息
int n;                      //全局变量
void main()
{
      struct xueshen *jigou;
      char select;            //选择变量
      jigou=NULL;
      while(1)
      {
                printf("欢迎进入学生管理系统。\n");
                printf("A(新建学生信息) D(删除) I(插入) M(修改) Q(查询) P(全部名单) E(退出)\n");
                scanf("%c",&select);
               
                switch(select)
                {
                getchar();
                getchar();
                getchar();
                case 'a':
                case 'A':jigou=scan(); break;   //新建学生信息a
                case 'd':
      //      case 'D':jigou=del(jigou); break;   //删除学生信息d
                case 'm':
      //      case 'M':jigou=modify(jigou); break; //修改学生信息m
                case 'q':
      //      case 'Q':query(jigou); break;//查询学生信息q
                case 'i':
      //      case 'I':jigou=insert(jigou);break;//插入学生信息i
                case 'p':
                case 'P':print(jigou);break;   //打印全部学生信息p
               
                case 'e':
                case 'E':exit(0); break;
               
                default:printf("选择错误,重新选择。\n"); //break;
                }

                printf("\n");
               
      }
                system("pause");               
}

struct xueshen *scan()//创建函数
{
      struct xueshen *head;
      struct xueshen *p1,*p2;
      
      p1=p2=(struct xueshen *)malloc(LEN);//创建第一个结构点
      head=p1;
      
      printf("学号:");
      scanf("%d",&p1->num);
      printf("姓名:");
      scanf("%s",&p1->ming);
      printf("数学成绩:");
      scanf("%d",&p1->shu);
      printf("语文成绩:");
      scanf("%d",&p1->nu);
      
      head=NULL;
      while(p1->num)
      {
                n++;
                if(n==1)
                {
                        head=p1;
                }
                else
                {
                        p2->next=p1;                        
                }
                p2=p1;
                p1=(struct xueshen *)malloc(LEN);   //创建新结点给p1
                  printf("学号:");
                  scanf("%d",&p1->num);
                  printf("姓名:");
                  scanf("%s",&p1->ming);
                  printf("数学成绩:");
                  scanf("%d",&p1->shu);
                  printf("语文成绩:");
                  scanf("%d",&p1->nu);
            //printf("\n学号%d\n姓名%s\n数学成绩%d\n语文成绩%d\n",*p1->num,p1->ming,p1->shu,p1->nu);
               
      }
      p2->next=NULL;
      return head;
}

void print(struct xueshen *head)   //打印函数
{

      struct xueshen *p1;

            p1=head;

                printf("\n共有%d位学生名单。\n",n);

                while(p1)
                {
                        printf("\n学号%d\n姓名%s\n数学成绩%d\n语文成绩%d\n",p1->num,p1->ming,p1->shu,p1->nu);

                        p1=p1->next;         //赋下一个地址
            };      
}

康小泡 发表于 2015-1-6 10:07:01

百日维新 发表于 2015-1-6 00:28


{:9_240:}你还自己写了一个。我看他那个可能是指针问题。如果用到指针的话。而且他只有一个图,我也看不出来什么。

hacker.jin 发表于 2015-1-6 10:44:55

绝对是指针的问题,明显指到某禁区了!!!!!!

百日维新 发表于 2015-1-6 10:59:09

kklloo 发表于 2015-1-6 10:07
你还自己写了一个。我看他那个可能是指针问题。如果用到指针的话。而且他只有一个图,我也看 ...

就是在他原来的地方调试:big

康小泡 发表于 2015-1-6 10:59:50

百日维新 发表于 2015-1-6 10:59
就是在他原来的地方调试

{:9_240:}最开始打开没有代码 这会儿代开居然有了。

百日维新 发表于 2015-1-6 11:31:21

kklloo 发表于 2015-1-6 10:59
最开始打开没有代码 这会儿代开居然有了。

那怪我咯

月光虾 发表于 2015-1-6 12:01:49

百日维新 发表于 2015-1-6 00:28


%c手动加\0改成%s自动加\0

百日维新 发表于 2015-1-6 13:31:56

月光虾 发表于 2015-1-6 12:01
%c手动加\0改成%s自动加\0

聪明{:5_108:}

734543358 发表于 2015-1-6 15:08:29

百日维新 发表于 2015-1-6 00:08
struct xueshen
{
      int num;      //学号


这是结构体吧,根本就没见到这一段有用到指针,如果用结构体的话可以使用结构体数组,每一个学生使用一套信息,而且char mign,这里不用改变

百日维新 发表于 2015-1-6 15:33:59

734543358 发表于 2015-1-6 15:08
这是结构体吧,根本就没见到这一段有用到指针,如果用结构体的话可以使用结构体数组,每一个学生使用一套 ...

请看楼主的源码,这里原来是char *ming :big
页: [1]
查看完整版本: C语言 学生管理系统