首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-07-09 
急需解答学生管理系统问题我的2,3,6,7功能不能实现但代码我觉得是对的,录入信息转到前面功能就报错,为什么

急需解答 学生管理系统问题
我的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有越界

热点排行