读书人

急需解答 学生管理系统有关问题

发布时间: 2013-07-09 09:50:47 作者: rapoo

急需解答 学生管理系统问题
我的2,3,6,7功能不能实现但代码我觉得是对的,录入信息转到前面功能就报错,为什么?
# include<stdio.h>
# include"malloc.h"
# include<string.h>
# include<stdlib.h>
typedef struct st
{
int num;
char name[10];
int g1;// 成绩1
int g2;//成绩2
int g3;//成绩3
struct st*next;
}node,*pnode;


void menu()
{
printf("\n");
printf("\t\t|********欢迎进入学生信息管理系统******* |\t\t\t");
printf("\t\t| 1.录入学生信息 |\t\t\t");
printf("\t\t| 2.显示学生信息 |\t\t\t");
printf("\t\t| 3.查询学生信息 |\t\t\t");
printf("\t\t| 4.修改学生信息 |\t\t\t");
printf("\t\t| 5.添加学生信息 |\t\t\t");
printf("\t\t| 6.删除学生信息 |\t\t\t");
printf("\t\t| 7.统计学生信息 |\t\t\t");
printf("\t\t| 0.退出 |\t\t\t");
printf("\t\t|****************************************|\t\t\t");
printf("请输入您所选的选项(0--7):");

}
void luru(pnode l)
{
int i=0;
int j=0;
int number=0;
char name1[10]="zhang san";
int cg1,mg1,eg1;
cg1=eg1=mg1=0;
printf("请输入学生个数");
scanf("%d",&i);
for(;j<i;j++)
{
pnode pnew=(pnode)malloc(sizeof(node));//分配新节点
printf("请输入学号:");
scanf("%d",&number);
fflush(stdin) ;
pnew->num=number;
printf("请输入姓名:");
fflush(stdin) ;
scanf("%s",name1);
strcpy(pnew->name,name1);
printf("请输入三门功课成绩(输入数据用空格隔开):成绩1,成绩2,成绩3");
scanf("%d %d %d",&cg1,&mg1,&eg1);
pnew->g1=cg1;


pnew->g2=mg1;
pnew->g3=eg1;
l->next =pnew->next;
l->next = pnew;
l = pnew;
}
}
void traver(pnode l)
{

while(l->next!=NULL)
{
printf("学号:%d ",l->next->num);
printf("姓名:%s ",l->next->name);
printf("成绩1:%d ",l->next->g1);
printf("成绩2:%d ",l->next->g2);
printf("成绩3:%d ",l->next->g3);
l=l->next;
}
}
void chaxun(pnode l)
{
pnode p;
int i;
p= l->next;
printf("请输入学号:");
scanf("%d",&i);
while(p!=NULL)
{
if(i==p->num)
{
printf("姓名:%s ",p->name);
printf("成绩1:%d ",p->g1);
printf("成绩2:%d ",p->g2);
printf("成绩3:%d ",p->g3);
}
p=p->next;
}
}
void xiugai(pnode l)
{
pnode p=l->next;
int k1,k2,k3;
char name[10];
printf("请输入姓名:");
scanf("%s",name);
printf("请依次输入修改后的成绩(从成绩1到成绩3)输入数据用空格隔开");
scanf("%d %d %d",&k1,&k2,&k3);
fflush(stdin) ;
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
p->g1=k1;
p->g2=k2;
p->g3=k3;
}
p=p->next;
}
}
void add(pnode l)
{
int k,j;
int num,h1,h2,h3;
char name[10];
j=0;
printf("请输入要添加的学生人数");
scanf("%d",&k);
for(;j<k;j++)
{
pnode pnew = (pnode)malloc(sizeof(node));
printf("请输入学号");
scanf("%d",&num);
printf("请输入姓名");
scanf("%s",name);
printf("请输入成绩(从成绩1到成绩3)输入数据用空格隔开");
scanf("%d %d %d",&h1,&h2,&h3);
pnew->num = num;
strcpy(pnew->name,name);//判断姓名是否一致
pnew->g1=h1;
pnew->g2=h2;
pnew->g3=h3;
pnew->next=l->next;
l->next=pnew;
}
}
void deletelist(pnode l)
{
int i;
pnode p= l->next;
printf("请输入学号:");
scanf("%d",&i);
if(p->num==i)
{
l->next=p->next;
free(p);
return;
}
while(p!=NULL)
{
if(p->next->num==i)
{
p->next=p->next->next;//将当前结点的后一个结点放在当前结点的前一个结点


free(p->next);
}
p=p->next;
}
}
void tongji(pnode l)
{
int i=0;
int sum1,sum2,sum3;

int averge1,averge2,averge3;
sum1=sum2=sum3=0;
averge1=averge2=averge3=0;
while(l->next!=NULL)
{
i++;
sum1=sum1+l->next->g1;
sum2=sum2+l->next->g2;
sum3=sum3+l->next->g3;
l=l->next;
}
averge1=sum1/i;
averge2=sum2/i;
averge3=sum3/i;
printf("学生人数为%d人\n",i);
printf("成绩1平均分为%d\n",averge1);
printf("成绩2平均分为%d\n",averge2);
printf("成绩3平均分为%d\n",averge3);
fflush(stdin) ;
}
void main()
{
int i;
pnode head=(pnode)malloc(sizeof(node));
head->next=NULL;
menu();
while(1)
{
scanf("%d",&i);

switch(i)
{
case 1:
luru(head);
break;

case 2:
traver(head);

break;

case 3:
chaxun(head);

break;

case 4:
xiugai(head);
break;
case 5:
add(head);
break;
case 6:
deletelist(head);
break;
case 7:
tongji(head);
break;
case 0:
exit(0);

}
}
system("pause");

}













[解决办法]
具体错误是什么


录入信息后 你需要确保其他功能能正常访问你保存的数据
[解决办法]
0xC0000005有越界

读书人网 >C语言

热点推荐