各位大神帮帮我啊~小弟是新人~
就是下面这个程序~0错误~0报警~但是一运行就有错~VC 6环境大家行行好~帮帮忙啊~#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
typedef struct STUDENT
{
char studentNumber[10];//学生学号
char studentName[20];//学生姓名
float mark1;//英语成绩
float mark2;//数学成绩
float mark3;//计算机成绩
struct STUDENT *next;
}STUDENT;
char choose;
STUDENT *headLink;//链表HEAD指针
void ReadInfoFormFile();
void CreateHeadLink();
void DesplayMenu();
STUDENT *MallocNode();
void GetInformation(STUDENT *t);
void OutputInformation();
void DesplayInfoBystudentNumber();
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber();
void CompositorBystudentNumber();
//主函数
int main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
}
/*************************************
函数功能:从文件中读取学生信息到链表中
*************************************/
void ReadInfoFormFile()
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("文件不存在\n");
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,&(p->mark1),&(p->mark2),&(p->mark3))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/*************************************
函数功能:显示菜单,根据用户的输入信息
来完成对应的功能
*************************************/
void DesplayMenu()
{
STUDENT *p;
printf("-------请输入选择相应功能-------\n");
printf("1.排序 (按学号)\n");
printf("2.插入\n");
printf("3.查找 (输入一个学生学号,输出其各科成绩)\n");
printf("4.删除 (从数组中按输入的学号删除该学生)\n");
printf("5.统计\n");
printf("请输入序号进行操作:_\b");
scanf("%c",&choose);
switch(choose)
{
case '1':CompositorBystudentNumber();;break;
case '2':
p=MallocNode();
GetInformation(p);
InsertOneNode(p);break;
case '3':OutputInformation();break;
case '4':DeleteNodeBystudentNumber();;break;
case '5':OutputInformation();;break;
}
DesplayMenu();
}
/*************************************
函数功能:建立链表表头
*************************************/
void CreateHeadLink()
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/*************************************
函数功能:申请一个新结点,并将其初始化
*************************************/
STUDENT *MallocNode()
{
STUDENT * p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
{
return NULL;
}
for(i=0;i<10;i++)
{
p->studentNumber[i]='\0';
}
for(i=0;i<10;i++)
{
p->studentName[i]='\0';
}
for(i=0;i<10;i++)
{
p->studentNumber[i]='\0';
}
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
}
/*************************************
函数功能:取得用户输入的学生信息
*************************************/
void GetInformation(STUDENT *t)
{
printf("请输入学生学号:\n");
scanf("%s",t->studentNumber);
printf("请输入学生姓名:\n");
scanf("%s",t->studentName);
printf("请输入学生第一门成绩:\n");
scanf("%s",t->mark1);
printf("请输入学生第二门成绩:\n");
scanf("%s",t->mark2);
printf("请输入学生第三门成绩:\n");
scanf("%s",t->mark3);
}
/*************************************
函数功能:在链表的结尾处增加一个节点
*************************************/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/*************************************
函数功能:根据用户输入的学生学号显示该
学生信息
*************************************/
void DesplayInfoBystudentNumber()
{
STUDENT *p;
char studentNumber[10];
char flag=0;
p=headLink->next;
printf("请输入学生学号");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("学号\t姓名\t英语\t数学\t计算机\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
{
printf("对不起,不存在学号为%s的学生\n",studentNumber);
}
}
/*************************************
函数功能:输出一个节点的信息
*************************************/
void DesplayOneNode(STUDENT *t)
{
printf("%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->mark1);
printf("%s\t",t->mark2);
printf("%s\t",t->mark3);
printf("%s\t",t->mark1+t->mark2+t->mark3);
printf("%s\t",(t->mark1+t->mark2+t->mark3)/3);
}
/*************************************
函数功能:根据用户输入的学号删除该学生
*************************************/
void DeleteNodeBystudentNumber()
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("请输入要删除的学生学号: ");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在该学号的学生\n");
return;
}
printf("成功删除\n");
}
void CompositorBystudentNumber()
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("现在还没有学生信息,请先输入学生信息\n");
return;
}
while(r)
{
p=r;
q=r->next;
while(q)
{
if(strcmp(q->studentNumber,p->studentNumber)>0)
{
strcpy(exchange.studentNumber,q->studentNumber);
strcpy(exchange.studentName,q->studentName);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
strcpy(p->studentNumber,exchange.studentNumber);
strcpy(p->studentName,exchange.studentName);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
void OutputInformation()
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("现在没有学生信息,请先输入学生信息\n\n");
return;
}
printf("学号\t姓名\t英语\t数学\t计算机\t总成绩\t平均成绩\n\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}