/*
//* 题目:学生成绩统计程序 要求:1.结构中包含学生数据:学号、姓名、物理分数、数学分数、外语分数、计算机分数
//* 2.设计函数实现以下功能:A、登入学生信息 B、显示所有学生信息
//* C、统计每科最高分、最低分 D、输出不及格人数 不及格学生数据 E、菜单
*/
#include"stdio.h"
#include"stdlib.h"
/* 指针实现 */
int n; // 储存链表空间
struct Student
{
int SchoolNumber;
char Name[20];
long Grade_phy,Grade_math,Grade_eng,Grade_com;
struct Student *next;
};
struct Student *Input()
{
n=0;
struct Student *head,*tail,*p;
head=NULL;
tail=(struct Student*)malloc(sizeof(struct Student));
p=tail;
printf("请分别输入学号、姓名、物理成绩、数学成绩、外语成绩、计算机成绩(请用逗号“,”隔开)\n");
scanf("%d,%s,%ld,%ld,%ld,%ld",&p->SchoolNumber,p->Name,&p->Grade_phy,&p->Grade_math,&p->Grade_eng,&p->Grade_phy);
while(p->SchoolNumber!=0)
{
n++;
if(n==1) head=p;
else tail->next=p;
tail=p;
p=(struct Student *)malloc(sizeof(struct Student));
printf("请分别输入学号、姓名、物理成绩、数学成绩、外语成绩、计算机成绩(请用逗号“,”隔开)\n");
scanf("%d,%s,%ld,%ld,%ld,%ld",&p->SchoolNumber,p->Name,&p->Grade_phy,&p->Grade_math,&p->Grade_eng,&p->Grade_phy);
}
tail->next=NULL;
return head;
}
struct Student *Print(struct Student *head)
{
struct Student *p;
p=head;
if(p==NULL) printf("现在学生数据信息为空,请添加学生信息,谢谢!");
else{
printf("现在一共有%d条学生数据:\n",n);
while(p)
{
printf("学号 姓名 物理成绩 数学成绩 外语成绩 计算机成绩\n");
printf("%d %s %ld %ld %ld %ld\n",p->SchoolNumber,p->Name,p->Grade_phy,p->Grade_math,p->Grade_eng,p->Grade_phy);
p=p->next;
}
}
}
struct Student *Ou(struct Student *head)
{
long min_phy,min_math,min_eng,min_com;
long max_phy,max_math,max_eng,max_com;
int max_count,min_count,fail_count=0,count=0;//用于记录最高分
//long temp //用于交换使用
struct Student *p;
p=head;
//用于给定各科max和min的初值 =>把第一个数据的人给的数值赋给它们
min_phy=p->Grade_phy; max_phy=min_phy;
min_math=p->Grade_math; max_math=min_math;
min_eng=p->Grade_eng; max_eng=min_eng;
min_com=p->Grade_com; max_com=min_com;
//首先计算物理成绩的最高分和最低分
while(p)
{
if(p->Grade_phy<60)
{
printf("\n%s同学在这次物理考试中不及格\n不及格分数为:%ld\n",p->Name,p->Grade_phy);
fail_count++;
}
if(p->Grade_phy<=min_phy)
min_count=count;
if(p->Grade_phy>=max_phy)
max_count=count;
count++;
p=p->next;
}
//输出不及格人数并初始化 fail_count
printf("该科不及格人数为:%d\n\n",fail_count);
fail_count=0;
//输出该科分数最高学生的数据
p=head+max_count;
printf("恭喜%s同学在这次物理考试里面单科成绩最高\n分数为:%ld\n",p->Name,p->Grade_phy);
p=head+min_count;
printf("%s同学在这次物理考试里面分数最低\n分数为:%ld\n请好好努力\n",p->Name,p->Grade_phy);
p=head;
count=0;
//首先计算数学成绩的最高分和最低分
while(p)
{
if(p->Grade_math<60)
{
printf("\n%s同学在这次数学考试中不及格\n不及格分数为:%ld\n",p->Name,p->Grade_math);
fail_count++;
}
if(p->Grade_math<=min_math)
min_count=count;
if(p->Grade_math>=max_math)
max_count=count;
count++;
p=p->next;
}
//输出不及格人数并初始化 fail_count
printf("该科不及格人数为:%d\n\n",fail_count);
fail_count=0;
//输出该科分数最高学生的数据
p=head+max_count;
printf("恭喜%s同学在这次数学考试里面单科成绩最高\n分数为:%ld\n",p->Name,p->Grade_math);
p=head+min_count;
printf("%s同学在这次数学考试里面分数最低\n分数为:%ld\n请好好努力\n",p->Name,p->Grade_math);
p=head;
count=0;
//首先计算英语成绩的最高分和最低分
while(p)
{
if(p->Grade_eng<60)
{
printf("\n%s同学在这次英语考试中不及格\n不及格分数为:%ld\n",p->Name,p->Grade_eng);
fail_count++;
}
if(p->Grade_eng<=min_eng)
min_count=count;
if(p->Grade_eng>=max_eng)
max_count=count;
count++;
p=p->next;
}
//输出不及格人数并初始化 fail_count
printf("该科不及格人数为:%d\n\n",fail_count);
fail_count=0;
//输出该科分数最高学生的数据
p=head+max_count;
printf("恭喜%s同学在这次英语考试里面单科成绩最高\n分数为:%ld\n",p->Name,p->Grade_eng);
p=head+min_count;
printf("%s同学在这次英语考试里面分数最低\n分数为:%ld\n请好好努力\n",p->Name,p->Grade_eng);
p=head;
count=0;
//首先计算计算机成绩的最高分和最低分
while(p)
{
if(p->Grade_com<60)
{
printf("\n%s同学在这次计算机考试中不及格\n不及格分数为:%ld\n",p->Name,p->Grade_com);
fail_count++;
}
if(p->Grade_com<=min_com)
min_count=count;
if(p->Grade_com>=max_com)
max_count=count;
count++;
p=p->next;
}
//输出该科分数最高学生的数据
p=head+max_count;
printf("恭喜%s同学在这次计算机考试里面单科成绩最高\n分数为:%ld\n",p->Name,p->Grade_com);
p=head+min_count;
printf("%s同学在这次计算机考试里面分数最低\n分数为:%ld\n请好好努力\n",p->Name,p->Grade_com);
}
void Menu()
{
printf("**************************************\n");
printf("*****欢迎使用学生成绩统计系统*********\n");
printf("**************************************\n");
printf("*******1.登入学生信息*****************\n");
printf("**************************************\n");
printf("*******2.显示所有学生信息*************\n");
printf("**************************************\n");
printf("*******3.统计每科分数*****************\n");
printf("**************************************\n");
printf("*******0.退出系统*********************\n");
printf("**************************************\n");
}
main()
{
Menu();
struct Student *head;
int select;
printf("\n请根据菜单选择\n");
scanf("%d\n",&select);
while(select)
{
switch(select){
case 1:head=Input();break;
case 2:Print(head);break;
case 3:Ou(head);break;
}
Menu();
printf("\n请根据菜单选择\n");
scanf("%d\n",&select);
}
}