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);
}
先谢谢各位大神来这里看看,指点指点,{:7_142:}{:9_234:} @kklloo 来看看,很久没用vc了:cry 版主大人指点指点{:9_221:} 百日维新 发表于 2015-1-5 23:30
@kklloo 来看看,很久没用vc了
版主大人指点指点{:5_100:} struct xueshen
{
int num; //学号
char ming; //姓名
int shu; //数学
int nu; //语文
struct xueshen *next;
};
不要把姓名定义成指针,改成char就ok了:big #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 00:28
{:9_240:}你还自己写了一个。我看他那个可能是指针问题。如果用到指针的话。而且他只有一个图,我也看不出来什么。 绝对是指针的问题,明显指到某禁区了!!!!!! kklloo 发表于 2015-1-6 10:07
你还自己写了一个。我看他那个可能是指针问题。如果用到指针的话。而且他只有一个图,我也看 ...
就是在他原来的地方调试:big 百日维新 发表于 2015-1-6 10:59
就是在他原来的地方调试
{:9_240:}最开始打开没有代码 这会儿代开居然有了。 kklloo 发表于 2015-1-6 10:59
最开始打开没有代码 这会儿代开居然有了。
那怪我咯 百日维新 发表于 2015-1-6 00:28
%c手动加\0改成%s自动加\0 月光虾 发表于 2015-1-6 12:01
%c手动加\0改成%s自动加\0
聪明{:5_108:} 百日维新 发表于 2015-1-6 00:08
struct xueshen
{
int num; //学号
这是结构体吧,根本就没见到这一段有用到指针,如果用结构体的话可以使用结构体数组,每一个学生使用一套信息,而且char mign,这里不用改变 734543358 发表于 2015-1-6 15:08
这是结构体吧,根本就没见到这一段有用到指针,如果用结构体的话可以使用结构体数组,每一个学生使用一套 ...
请看楼主的源码,这里原来是char *ming :big
页:
[1]