成绩记录包含:学生姓名、老师姓名、科目、分数、
可以输入入任意条成绩记录,输入以后,可以进行如下查询:
1. 输入学生姓名,输出这个人的成绩记录,最高分、最低分记录和平均分
2. 输入科目,输出该科不及格的学生姓名
示例,输入如下成绩记录:
学生1 老师1 科目1 79
学生1 老师1 科目2 80
学生1 老师2 科目3 81
学生2 老师1 科目2 65
学生3 老师2 科目3 65
学生4 老师2 科目3 50
学生5 老师2 科目3 55
输入:学生1,显示
科目1 79
科目2 80
科目3 81
最高分:科目3 81 最低分:科目1 79 平均分:80
输入:科目3,显示
不及格人员:学生4,学生5
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*************************************************************************************************************************
** File Name: Students.c
** Summary: Manage Of The Students
** Create: 2016-04-27
** Author: Shang Lu
** Update history:
** NO. Author Date Content
** 1. Shang Lu 2016-04-27 Finished
*************************************************************************************************************************/
#include<stdio.h>
#include<string.h>
/* ============================ Version =============================================================================== */
#define MaxNumOfStu 10
#define MaxNumOfCou 10
/* course message */
struct course{
int grades;
char CouName[10];
}course[MaxNumOfCou];
/* student message*/
struct Student{
char teacher[10];
char StuName[10];
struct course Course[MaxNumOfCou];
}Student[MaxNumOfStu];
/* =======================================================================================================================
** Function Name : MesOfStu
** Process Timing : In Routine
** Summary : Show the Student's message
** Arguments[Input] : char *array1,struct Student student[],int NumOfStu;
** Arguments[Output]: 学生课程及分数,最低分,最高分,平均分
** Return Value : -
======================================================================================================================= */
void MesOfStu(char *array1,struct Student student[],int NumOfStu){
int i=0,j=0;
int Up=0,Low=100,Ave=0;
int Up1=0,Low1=0;
int t=0;
for(i=0; i<NumOfStu; i++){
j=0;
if(strcmp(array1,student[i].StuName)==0){
while(student[i].Course[j].CouName[0] != NULL){
printf("%s %d\n",student[i].Course[j].CouName,student[i].Course[j].grades);
if(student[i].Course[j].grades<Low){
Low=student[i].Course[j].grades;
Low1=j;
}
if(student[i].Course[j].grades>Up){
Up=student[i].Course[j].grades;
Up1=j;
}
Ave+=student[i].Course[j].grades;
j++;
t++;
}
}
}
printf("最高分:%s %d 最低分:%s %d 平均分:%d\n",student[NumOfStu].Course[Up1].CouName,Up,student[NumOfStu].Course[Low1].CouName,Low,Ave/t);
}
/* =======================================================================================================================
** Function Name : MesOfCou
** Process Timing : In Routine
** Summary : Show the Course's message
** Arguments[Input] : char *array1,struct Student student[],int NumOfStu;
** Arguments[Output]: 课程不及格的人员
** Return Value : -
======================================================================================================================= */
void MesOfCou(char *array1, struct Student student[], int NumOfStu){
int i=0,j=0;
printf("不及格人员:");
//printf("%s\n",array1);
for(i=0; i<NumOfStu; i++){
j=0;
while(student[i].Course[j].CouName[0]!=NULL){
if(strcmp(array1,student[i].Course[j].CouName)==0){
if(student[i].Course[j].grades<60){
printf("%s ",student[i].StuName);
}
}
j++;
}
}
printf("\n");
}
/* =======================================================================================================================
** Function Name : main
** Process Timing : program start
** Summary : Manage Of The Students
** Arguments[Input] : 所有学生的课程记录
** Arguments[Output]: -
** Return Value : 0
======================================================================================================================= */
int main(){
char ch;
char array1[10]="0";
char array2[10]="0";
int i=0,j=0;
int Cou=0;
int flag=0;
int x=0;
int NumOfStu=0;
struct Student student[MaxNumOfStu];
for(i=0; i<MaxNumOfStu; i++){
for(j=0; j<MaxNumOfCou; j++){
student[i].StuName[0]=NULL;
student[i].teacher[0]=NULL;
student[i].Course[j].CouName[0]=NULL;
student[i].Course[j].grades=0;
}
}
printf("输入成绩记录,以'#'作为结束。\n");
i=0;
ch=getchar();
do{
if(ch != ' '&&ch != '\n'){
array1[i++]=ch;
}
if(ch == ' '|| ch=='\n'){
flag++;
if(flag == 1){
for(j=0;j<i;j++){
student[NumOfStu].StuName[j]=array1[j];
}
student[NumOfStu].StuName[j]='\0';
Cou=0;
i=0;
}
if(flag == 2){
for(j=0;j<i;j++){
student[NumOfStu].teacher[j]=array1[j];
}
student[NumOfStu].teacher[j]='\0';
i=0;
}
if(flag == 3){
for(j=0;j<i;j++){
student[NumOfStu].Course[Cou].CouName[j]=array1[j];
}
student[NumOfStu].Course[Cou].CouName[j]='\0';
i=0;
}
if(flag == 4){
x=(array1[0]-'0')*10+array1[1]-'0';
student[NumOfStu].Course[Cou].grades=x;
Cou++;
NumOfStu++;
i=0;
}
}
if(ch == '\n'){
flag=0;
}
}while ((ch=getchar())!='#');
printf("输入学生查看信息:");
scanf("%s",&array1);
MesOfStu(array1,student,NumOfStu);
printf("输入科目查看信息:");
scanf("%s",&array2);
MesOfCou(array2,student,NumOfStu);
while(1);
return 0;
}