`
sunting_bcwl
  • 浏览: 94191 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C语言评分小系统

阅读更多
此小程序的功能:
    1.输入各评委的评分,去掉一个最高分,去掉一个最低分,计算平均分;
    2.查看以前的评分记录;
    3.退出。

#include <stdio.h>
#include <time.h>

#define MAXSIZE 50

float data[MAXSIZE];    //存放评分的数据
int length = 0;         //存放评分的实际人数,每次可能不相等

void init()
{
    int i;
    for(i=0; i<MAXSIZE; i++)
    {
        data[i] = 0;
    }
    length = 0;
}

void caculate()
{
    init();     //先初始化data,免得被上次遗留的数据影响
    float f;
    printf("Please input the score by order with space or enter seperated, use -1 to end:\n");
    scanf("%f", &f);
    while(f != -1)
    {
        data[length++] = f;
        scanf("%f", &f);
    }

    //去掉最大值和最小值,计算剩下数据的平均值
    int k;
    float sum, max, min, average;
    sum = max = min = data[0];
    for(k=1; (k<length)&&(data[k]>max); k++)
        max = data[k];
    for(k=1; (k<length)&&(data[k]<min); k++)
        min = data[k];

    for(k=1; k<length; k++)
    {
        sum += data[k];
    }
    average = (sum-max-min)/(length-2);

    printf("All the score is: \n\t");
    for(k=0; k<length; k++)
    {
        printf("%.2f ", data[k]);
    }
    printf("\n");
    printf("And the average result is: %.2f\n\n", average);

    //将这次的数据保存在磁盘文件中,以便下次访问
    FILE *fp = fopen("average.dat", "ab");
    if(!fp) perror("Error open file...");
    //先把大小存放
    fwrite(&length, sizeof(int), 1, fp);
    fwrite(data, sizeof(float), 50, fp);
    fwrite(&average, sizeof(float), 1, fp);
    //同时保存评分的时间
    time_t t;
    time(&t);
    fwrite(&t, sizeof(t), 1, fp);
    fclose(fp);
}

void showHistory()
{
    FILE *fp = fopen("average.dat", "rb");
    if(!fp)
    {
        printf("There is no any history data.\n\n");
        return;
    }
    //计算文件大小,以便确定有多少条记录
    fseek(fp, 0L, 2);
    long size = ftell(fp);
    if(size==0)
    {
        printf("There is no any history data.\n\n");
        return;
    }

    printf("The history data is: \n\t");
    fseek(fp, 0L, 0);

    //每条记录有204个字节,于是可以算出记录数
    int count = size / 212;
    int i=0;
    float d[50];
    float average;
    int l;
    time_t t;
    struct tm *tp = NULL;
    while(i++<count)
    {
        fread(&l, sizeof(int), 1, fp);
        fread(d, sizeof(float), 50, fp);
        fread(&average, sizeof(float), 1, fp);
        fread(&t, sizeof(t), 1, fp);

        printf("(%d).  评委打分:", count-i+1);
        int j=0;
        for(; j<l; j++)
        {
            printf("%.2f  ", d[j]);
        }
        tp = localtime(&t);
        printf("\n\t\t评分时间:%d-%d-%d %d:%d:%d\t平均分:%.2f\n\t", tp->tm_year+1990, tp->tm_mon+1, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec, average);
    }

    printf("\n\n");

    fclose(fp);
}

void showMenu()
{
    printf("Please enter the number below:\n");
    printf("\t1. Input data and caculate the result... \n");
    printf("\t2. View the history input...\n");
    printf("\t3. Exit...\n");

    int select;
    scanf("%d", &select);

    if(select == 1)
        caculate();
    else if(select == 2)
        showHistory();
    else if(select == 3)
        exit(0);
    else return;
}

int main()
{
    while(1)
        showMenu();

    return 0;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics