我按你的要求写了个,你参考下。
#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 编辑 ]