进阶项目8.3-学生成绩系统

任务和代码:在前面工作的基础拟出新的需求,将程序用一个“菜单”组织起来(如图所示),做成一个“学生成绩管理系统”之类的应用程序。

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;
}



程序运行结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值