我按你的要求写了个,你参考下。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define IS INFO stu[N]
#define N 8 // 最大的人数
int n = 0; // 实际输入的人数,做全局变量
typedef struct XS
{
int ID;
char name[8];
float score[5];
float total;
}INFO;
INFO stu[N];
void input();
void save();
void load();
void total_sort();
void ID_sort();
int main()
{
input(stu);
total_sort(stu);
save(stu);
load(stu);
ID_sort(stu);
save(stu);
load(stu);
return 0;
}
void input(IS)
{
int i = 0, j, flag = 1;
char ch;
float sum = 0;
while (flag)
{
scanf("%d%s", &stu[i].ID, stu[i].name);
for (j = 0; j < 5; j++)
{
scanf("%f", &stu[i].score[j]);
if (stu[i].score[j] < 0 || stu[i].score[j] > 100)
{
printf("输入不正确,请重新输入:");
scanf("%f", &stu[i].score[j]);
}
sum += stu[i].score[j];
}
stu[i].total = sum;
sum = 0;
n++;
i++;
if (n == N) break;
printf("你是否要继?(Y / N):");
scanf(" %c", &ch);
if (ch == 'n' || ch == 'N')
flag = 0;
else flag = 1;
}
system("cls");
}
void total_sort(IS) // 总分从高到低排序
{
int i, j, k;
INFO temp;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i; j < n; j++)
{
if (stu[k].total < stu[j].total)
k = j;
if (k != i)
{
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
}
printf("现在按总分排序:\n");
}
void ID_sort(IS) // 按学号从小到大排序
{
int i, j, k;
INFO temp;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i; j < n; j++)
{
if (stu[k].ID > stu[j].ID)
k = j;
if (k != i)
{
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
}
printf("现在按学号排序:\n");
}
void save(IS)
{
FILE *fp;
int i;
if ((fp = fopen("cj.dat", "wb")) == NULL)
{
printf("Can not open file!\n");
return ;
}
for (i = 0; i < n; i++)
if (fwrite(&stu[i], sizeof(struct XS), 1, fp) != 1)
printf("File write error!\n");
fclose(fp);
}
void load(IS)
{
FILE *fp;
int i, j;
if ((fp = fopen("cj.dat", "rb")) == NULL)
{
printf("Can not open file!\n");
return ;
}
printf("学号 姓名 英语 高数 马哲 计算机 电子技 总成绩\n");
printf("------------------------------------------------------------------\n");
for (i = 0; i < n; i++)
{
fread(&stu[i], sizeof(struct XS), 1, fp);
printf("%-3d\t%s", stu[i].ID, stu[i].name);
for (j = 0; j < 5; j++)
printf("\t%-3.1f", stu[i].score[j]);
printf(" \t%-3.1f", stu[i].total);
printf("\n");
}
fclose(fp);
}
[
本帖最后由 有容就大 于 2012-1-4 21:06 编辑 ]