#include
#include
#include
#define LEN sizeof(student)
struct stu
{
int sno;
char name[20];
char gender;
float score[5];
float avg;
float sum;
struct stu *next;
};
typedef struct stu student;
void input(student *p)
{
if(p==NULL) return;
printf("请输入学生学号:\n");
scanf("%d",&p->sno);
getchar();
printf("请输入学生姓名:\n");
gets(p->name);
printf("请输入学生性别:\n");
p->gender=getchar();
printf("请分别输入学生五门成绩\n");
scanf("%f%f%f%f%f",&p->score[0],&p->score[1],&p->score[2],&p->score[3],&p->score[4]);
p->sum = p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4];
p->avg = p->sum/5;
}
void output(student *p)
{
printf("%d %s %c %.2f %.2f %.2f %.2f %.2f\n",p->sno,p->name,p->gender,p->score[0],p->score[1],p->score[2],p->avg,p->sum);
}
void outputs(student *p)
{
p=p->next;
while(p!=NULL)
{
output(p);
p=p->next;
}
}
student * create (int n)
{
student * pHead = (student *)malloc(LEN);
student *pNew,*pTail;
int i;
pHead->next=NULL;
pTail=pHead;
for(i=0;i
{
pNew=(student *)malloc(LEN);
if(pNew==NULL)return pHead;
input(pNew);
pTail->next = pNew;
pNew->next=NULL;
pTail=pNew;
}
return pHead;
}
int del(student *pHead,int sno) //根据学号删除学生结点
{
student *p,*q;//p指向要删除的学生结点 q指向要删除学生结点的上一个结点
p=pHead->next;
q=pHead;
while(p->sno!=sno && p!=NULL)
{
p=p->next;
q=q->next;
}
if(p!=NULL)
{
q->next = p->next;
free(p);
return 0;//0表示删除成功,EOF表示删除不成功,没有找到
}else
{
printf("输入有误\n");
return EOF;
}
}
void destroy(student *pHead)
{
student *p,*q;
p=pHead;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
}
int saveBinary(student *pHead, char *filename)
{
FILE *fp = fopen(filename,"wb");
if(!pHead || !pHead->next || !fp) return EOF;
student *p=pHead->next;
while(p!=NULL)
{
fwrite(p,LE