任务和代码:在前面工作的基础拟出新的需求,将程序用一个“菜单”组织起来(如图所示),做成一个“学生成绩管理系统”之类的应用程序。
main.cpp
/*
文件名:main.c
作者:小风景
完成日期:2016.7.31
问题描述:在前面工作的基础拟出新的需求,将程序用一个“菜单”组织起来(如图所示),做成一个“学生成绩管理系统”之类的应用程序。
程序输出:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"
int main()
{
int iput = 0;
int result = 0;
char file[10] = "score.txt";
char c[5] = "c";
char math[10] = "math";
char eng[10] = "english";
StudentInfo student[1024] = {0}; //定义学生结构体变量存放学生的信息
StudentInfo *p = student; //定义结构指针指向结构体
result = GetStudentScore(p,file);
if(result != 0)
{
printf("get studeng info in error!\n");
exit(1);
}
printf("读取数据完毕\n");
do
{
printf("请选择下面功能:\n");
printf("1.输出成绩单\n");
printf("2.按总分排序并输出成绩单\n");
printf("3.输出获得奖学金同学的名单\n");
printf("4.输出C语言不及格同学名单和C语言成绩\n");
printf("5.输出数学不及格同学名单和数学成绩\n");
printf("6.输出英语不及格同学名单和英语成绩\n");
printf("0.退出\n");
printf("请选择(0-6):");
fflush(stdin);
scanf("%d",&iput);
switch(iput)
{
case 0:
break;
case 1:
output(p);
break;
case 2:
Sort(p);
break;
case 3:
ExcellentStudent(p);
break;
case 4:
BelowGrade(p,c);
break;
case 5:
BelowGrade(p,math);
break;
case 6:
BelowGrade(p,eng);
break;
default:
printf("您的输入不正确\n");
break;
}
}while(iput != 0);
printf("本次使用结束,欢迎您再次使用本系统!\n");
return 0;
}
student.h
#ifndef STUDENT_H_INCLUDED
#define STUDENT_H_INCLUDED
typedef struct Student
{
char num[13];
char name[10];
int c;
int math;
int english;
int grade;
double average;
}StudentInfo;
int GetStudentScore(StudentInfo *student,char *filename);
void output(StudentInfo *student);
int Sort(StudentInfo *student);
int ExcellentStudent(StudentInfo *student);
int Test(StudentInfo *student);
int BelowGrade(StudentInfo *student,char *object);
#endif // STUDENT_H_INCLUDED
student.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"
int number = 0;
int GetStudentScore(StudentInfo *student,char *filename)
{
FILE *fp;
if((fp = fopen(filename,"r")) == NULL)
{
printf("open %s is error",filename);
return -1;
}
while(!feof(fp))
{
fscanf(fp,"%s %s %d %d %d",student->num,student->name,&student->c,&student->math,&student->english);
student->grade = student->c + student->math + student->english;
student->average = student->grade / 3.0;
student++;
number++;
}
fclose(fp);
return 0;
}
/*
函数功能:输出结构体的学生信息
返回值:空。
*/
void output(StudentInfo *student)
{
int i = 0;
for(i = 0;i < number;i++)
{
printf("%8s\t%10s\t%4d\t%4d\t%4d\t%4d\n",student->num,student->name,student->c,
student->math,student->english,student->grade);
student++;
}
printf("\n\n");
return;
}
/*
函数功能:输出排序后的学生信息
返回值:成功返回0。
*/
int Sort(StudentInfo *student)
{
int i = 0;
int j = 0;
int temp = 0;
for(i = 0;i < number - 1;i++)
{
for(j = 0;j < number - i - 1;j++)
{
if((student+j)->grade < (student+j + 1)->grade)
{
temp = (student+j + 1)->grade;
(student+j + 1)->grade = (student+j)->grade;
(student+j)->grade = temp;
}
}
}
output(student);
return 0;
}
/*
函数功能:输出获奖学生的信息
返回值:成功返回0。
*/
int ExcellentStudent(StudentInfo *student)
{
int laststudent = 0;
int i = 0;
int num = 0;
for(i = 0;i < number;i++)
{
//判断输出是否满三十人,当输出满三十人后,后面同学的分数如果和第三十人相同,则也可获奖,输出后面童鞋的信息
if(num == 30)
{
if((student+i)->grade == laststudent)
{
printf("%8s\t%10s\t%4d\t%4d\t%4d\t%4d\n",(student+i)->num,(student+i)->name,(student+i)->c,
(student+i)->math,(student+i)->english,(student+i)->grade);
continue;
}
else
{
break;
}
}
//判断同学是否满足获奖的资格
if(Test(student+i) == 0)
{
num++;
printf("%8s\t%10s\t%4d\t%4d\t%4d\t%4d\n",(student+i)->num,(student+i)->name,(student+i)->c,
(student+i)->math,(student+i)->english,(student+i)->grade);
laststudent = (student+i)->grade;
}
}
printf("\n\n");
return 0;
}
/*
函数功能:成册输入的学生信息师傅满足获奖条件
返回值:空。
*/
int Test(StudentInfo *student)
{
if((student->c < 60) || (student->math < 60) || (student->english < 60))
{
return -1;
}
return 0;
}
/*
函数功能:输出不及格同学的成绩
返回值:0。
*/
int BelowGrade(StudentInfo *student,char *object)
{
int i = 0;
printf("%s不及格的同学有:\n",object);
for(i = 0;i < number;i++)
{
if(!strcmp(object,"c"))
{
if((student + i)->c < 60)
{
printf("%8s\t%8s\t%5d\n",(student+i)->num,(student+i)->name,(student+i)->c);
}
}
else if(!strcmp(object,"math"))
{
if((student + i)->math < 60)
{
printf("%8s\t%8s\t%5d\n",(student+i)->num,(student+i)->name,(student+i)->math);
}
}
else if(!strcmp(object,"english"))
{
if((student + i)->english < 60)
{
printf("%8s\t%8s\t%5d\n",(student+i)->num,(student+i)->name,(student+i)->english);
}
}
else
{
printf("输入参数错误\n");
}
}
printf("\n\n");
return 0;
}
程序运行结果: