#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct Student)
typedef struct Student
{
int num;
char name[10];
float math;
float en;
float c;
float sum;
float aver;
struct Student *next;
}STU;
STU *input(STU* head)
{
int n=0;
STU *p1,*p2,*pt;
if(head==NULL)
{
p1=p2=(STU*)malloc(LEN);
printf("第1个同学\n");
printf("输入学号:");
scanf("%d",&p1->num );
printf("输入姓名:");
scanf("%s",&p1->name );
printf("输入数学成绩:");
scanf("%f",&p1->math );
printf("输入英语成绩:");
scanf("%f",&p1->en );
printf("输入C语言成绩:");
scanf("%f",&p1->c );
p1->sum =p1->math +p1->en +p1->c ;
p1->aver =p1->sum /3;
printf("*************************\n");
while(1)
{
n++;
if(n==1) head=p1;
else p2->next =p1;
p2=p1;
p1=(STU*)malloc(LEN);
printf("第%d个同学\n",n+1);
printf("输入学号:");
scanf("%d",&p1->num );
if(p1->num ==0) break;
printf("输入姓名:");
scanf("%s",&p1->name );
printf("输入数学成绩:");
scanf("%f",&p1->math );
printf("输入英语成绩:");
scanf("%f",&p1->en );
printf("输入C语言成绩:");
scanf("%f",&p1->c );
p1->sum =p1->math +p1->en +p1->c ;
p1->aver =p1->sum /3;
printf("*************************\n");
}
p2->next =NULL;
}
else
{
pt=head;
p1=(STU*)malloc(LEN);
printf("插入一个学生的成绩\n");
printf("输入学号:");
scanf("%d",&p1->num );
if(p1->num ==0)
{
free(p1);
return(head);
}
printf("输入姓名:");
scanf("%s",&p1->name );
printf("输入数学成绩:");
scanf("%f",&p1->math );
printf("输入英语成绩:");
scanf("%f",&p1->en );
printf("输入C语言成绩:");
scanf("%f",&p1->c );
p1->sum =p1->math +p1->en +p1->c ;
p1->aver =p1->sum /3;
printf("*************************\n");
do
{
if(p1->num <head->num )
{
p1->next =pt;
head=p1;
break;
}
else if(pt->next ==NULL)
{
pt->next =p1;
p1->next =NULL;
break;
}
else if(p1->num >pt->num &&p1->num <pt->next->num )
{
p1->next =pt->next ;
pt->next =p1;
break;
}
pt=pt->next ;
}while (pt!=NULL);
printf("输入完成\n");
}
return(head);
}
void output(STU *pt)
{
while(pt!=NULL)
{
printf("学号: ");
printf(" %d\n",pt->num );
printf("姓名: ");
printf(" %s\n",pt->name );
printf("数学成绩: ");
printf(" %4.2f\n",pt->math );
printf("英语成绩: ");
printf(" %4.2f\n",pt->en );
printf("C语言成绩: ");
printf("%4.2f\n",pt->c );
printf("总分: ");
printf(" %4.2f\n",pt->sum );
printf("平均分: ");
printf(" %4.2f\n",pt->aver );
printf("*************************\n");
pt=pt->next ;
}
}
STU *cancel(STU *head)
{
STU *p1,*p2;
char name2[8];
p1=p2=head;
if(p1==NULL) printf("\n链表为空!!!!!!!!\n\n");
else
{
printf("输入要删除的名字\n");
scanf("%s",&name2);
while(1)
{
if(strcmp(p1->name ,name2)==0)
{
if(p2==head)
{
head=head->next ;
free(p1);
p1=p2=NULL;
printf("删除成功\n\n");
}
else
{
p2->next =p1->next ;
free(p1);
p1=p2=NULL;
}
break;
}
else if(p1->next ==NULL)
{
printf("\n无该数据!!!!!!!!\n\n");
break;
}
p2=p1;
p1=p1->next;
}
return(head);
}
}
void search(STU *head)
{
STU *pt;
int num1;
char name1[8];
pt=head;
if(pt==NULL) printf("\n链表为空!!!!!!!!\n\n");
else
{
printf("输入要查询的学号或姓名\n");
if(!scanf("%d",&num1))
{
scanf("%s",&name1);
}
while(1)
{
if(strcmp(pt->name ,name1)==0||pt->num ==num1)
{
printf("学号: ");
printf(" %d\n",pt->num );
printf("姓名: ");
printf(" %s\n",pt->name );
printf("数学成绩: ");
printf(" %4.2f\n",pt->math );
printf("英语成绩: ");
printf(" %4.2f\n",pt->en );
printf("C语言成绩: ");
printf("%4.2f\n",pt->c );
printf("总分: ");
printf(" %4.2f\n",pt->sum );
printf("平均分: ");
printf(" %4.2f\n",pt->aver );
printf("*************************\n");
break;
}
else if(pt->next ==NULL)
{
printf("\n无该数据!!!!!!!!\n\n");
break;
}
pt=pt->next;
}
}
}
void sta(STU *pt)
{
int number;
float cout=0,sums=0;
while(pt!=NULL)
{
if(pt->aver >=60)
{
number++;
}
sums=pt->aver +sums;
cout++;
pt=pt->next ;
}
printf("及格人数为:%d\n班级平均分为:%4.2f\n",number,sums/cout);
}
int main()
{
STU *head;
head=NULL;
int i=0;
while(1)
{
printf("***学生成绩管理系统***\n"
"1-----输入\n"
"2-----显示\n"
"3-----删除\n"
"4-----查询\n"
"5-----退出\n" );
printf("输入选项:");
scanf("%d",&i);
getchar();
switch(i)
{
case 1:head=input(head);break;
case 2:output(head);break;
case 3:cancel(head);break;
case 4:search(head);break;
case 5:sta(head);break;
default:printf("错误\n\n");
}
}
}
练习10 学生成绩管理与统计
最新推荐文章于 2024-08-04 20:05:01 发布