📄 heji.cpp
字号:
//heji 按总成绩驯化排序
#include "heji.h"
void SortByheji()
{
int i, j, k;
Student Tmps;
Student s[SIZE];
int recNumber = 0;
char DataFile[40] = "";
FILE *fp;
//提示用户输入要进行排序的文件名
printf("\nplease input the name of file where data is stored,end with enter key.\n");
gets(DataFile);
//提示用户输入要进行排序的文件名
while (*DataFile == ('\0'))
{
printf("\nplease input the name of file where data is stored,end with enter key.\n");
gets(DataFile);
}
//以读的方式打开文件,如文件不存在,提示错误
fp = fopen(DataFile, "rb");
if (fp == NULL)
{
printf("\nopen file %s fail !end with any key\n", DataFile);
perror("open file fail");
getch();
exit(1);
}
//将文件中要排序的信息存入结构体数组
while ((fread(&Tmps, sizeof(Student), 1, fp)))
{
s[recNumber].Number = Tmps.Number;
strcpy(s[recNumber].Name, Tmps.Name);
s[recNumber].chinesescore = Tmps.chinesescore;
s[recNumber].mathscore = Tmps.mathscore;
s[recNumber].heji = Tmps.heji;
recNumber++;
}
fclose(fp);
//如果文件中有记录,则将各条记录按总成绩值排序
if (recNumber > 1)
{
//用选择排序法进行按总成绩排序
for (i = 0;i < recNumber;i++)
{
k = i;
for (j = i + 1;j < recNumber;j++)
{
if (s[k].heji < s[j].heji)
k = j;
}
Tmps.Number = s[k].Number;
strcpy(Tmps.Name, s[k].Name);
Tmps.chinesescore = s[k].chinesescore;
Tmps.mathscore = s[k].mathscore;
Tmps.heji = s[k].heji;
s[k].Number = s[i].Number;
strcpy(s[k].Name, s[i].Name);
s[k].chinesescore = s[i].chinesescore;
s[k].mathscore = s[i].mathscore;
s[k].heji = s[i].heji;
s[i].Number = Tmps.Number;
strcpy(s[i].Name, Tmps.Name);
s[i].chinesescore = Tmps.chinesescore;
s[i].mathscore = Tmps.mathscore;
s[i].heji = Tmps.heji;
}
//将排序好的结构体记录写入文件
fp = fopen(DataFile, "wb+");
if (fp == NULL)
{
printf("\nset up file %s fail.end with any key.\n", DataFile);
perror("open file fail");
getch();
exit(1);
}
for (i = 0;i < recNumber;i++)
{
if (fwrite(&s[i], sizeof(Student), 1, fp) != 1)
{
printf("\nwrite file %s !end with any key.\n", DataFile);
perror("write file fail");
getch();
exit(1);
}
}
fclose(fp);
}
//显示排序后的文件
printf("the Student's score in file %s is as flow.\n", DataFile);
fp = fopen(DataFile, "rb");
if (fp == NULL)
{
printf("\nopen file %s fail !end with any key\n", DataFile);
perror("open file fail");
getch();
exit(1);
}
printf("\nnumber\tname\tchinesescore\tmathscore\theji\n");
while (fread(&Tmps, sizeof(Student), 1, fp))
{
printf("\n%ld\t%s\t%4.2f\t%4.2f\t%4.2f\n", Tmps.Number, Tmps.Name, Tmps.chinesescore, Tmps.mathscore, Tmps.heji);
}
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -