学生成绩管理系统,计算平均分写入文件

img


~
学生成绩管理系统,读取文件计算平均分写入文件,对平均分进行排序


# include

# include

# include

# include

# include

# define eps 1;

typedef struct

{

char name[50];

int num;

int Chinese;

int Math;

int English;

int sum;

}Node;

Node student[1000];

int n;

char text[50];

int cmp(const void *a, const void *b)

{

return (*(Node *)b).sum > (*(Node *)a).sum?1:-1;

}

int cmpnum(const void *a, const void *b)

{

return (*(Node *)a).num > (*(Node *)b).num?1:-1;

}

void showstudent()

{

void menu();

int i;

printf(" \t姓名\t学号\t语文\t数学\t英语\t总分\n");

for(i=0;i

{

printf("\t%s\t%d\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English,student[i].sum);

}

getch();

menu();

}

void sortnum()

{

void menu();

int i,j,k;

char a[55];

for(i=0;i

{

for(j=0;j

{

if(student[j].num>student[j+1].num)

{

k=student[j].num;

student[j].num=student[j+1].num;

student[j+1].num=k;

k=student[j].Chinese;

student[j].Chinese=student[j+1].Chinese;

student[j+1].Chinese=k;

k=student[j].Math;

student[j].Math=student[j+1].Math;

student[j+1].Math=k;

k=student[j].English;

student[j].English=student[j+1].English;

student[j+1].English=k;

k=student[j].sum;

student[j].sum=student[j+1].sum;

student[j+1].sum=k;

strcpy(a,student[j].name);

strcpy(student[j].name,student[j+1].name);

strcpy(student[j+1].name,a);

}

}

}

showstudent();

getch();

menu();

}

void sortsum()

{

void menu();

qsort(student, n, sizeof(Node), cmp);

showstudent();

getch();

menu();

}

void searchnum(int number)

{

void menu();

int min = 0, max = n-1, mid;

bool escape = false;

qsort(student, n, sizeof(Node), cmpnum);

while(min <= max)

{

mid = (min + max) / 2;

if(student[mid].num > number)

{

max = mid - eps;

}

else if(student[mid].num < number)

{

min = mid + eps;

}

else

{

escape = true;

printf("\t姓名\t学号\t语文\t数学\t英语\t总分\n");

printf("\t%s\t%d\t%d\t%d\t%d\t%d\n", student[mid].name, student[mid].num, student[mid].Chinese, student[mid].Math, student[mid].English, student[mid].sum);

break;

}

}

if(!escape)

{

printf("\t查无此人");

}

getch();

menu();

}

void searchname()

{

void menu();

int i;

for(i=0;i

{

if(strcmp(text,student[i].name)==0)

{

printf("\t姓名\t学号\t语文\t数学\t英语\t总分\n");

printf("\t%s\t%d\t%d\t%d\t%d\t%d\n", student[i].name, student[i].num, student[i].Chinese, student[i].Math, student[i].English, student[i].sum);

break;

}

}

if(i>=n)

{

printf("\t查无此人\n");

}

getch();

menu();

}

void save()

{

void menu();

FILE *fp;

fp=fopen("4.txt","w");

int i;

fprintf(fp, "\t姓名\t学号\t语文\t数学\t英语\t总分\n");

for(i=0;i

{

if(student[i].Chinese<60||student[i].Math<60||student[i].English<60)

{

printf("\t%s\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English);

fprintf(fp,"\t%s\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English);

}

}

printf("\n");

printf("┏━━━━┓\n");

printf("┃保存成功┃\n");

printf("┗━━━━┛\n");

getch();

menu();

}

void menu()

{

int choice;

system("cls");

printf(" 菜单\n");

printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");

printf("┃ 0.退出 ┃\n");

printf("┃ 1.显示学生信息 ┃\n");

printf("┃ 2.显示按学号排序后的学生信息 ┃\n");

printf("┃ 3.显示按总分排序后的学生信息 ┃\n");

printf("┃ 4.按学号查学生各科分数和总分 ┃\n");

printf("┃ 5.按姓名查学生各科分数和总分 ┃\n");

printf("┃ 6.抽取出三科成绩中有补考的学生并保存 ┃\n");

printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

printf(" 选择代码(0,1,2,3,4,5,6): ");

scanf("%d", &choice);

switch(choice)

{

case 0:

{

system("cls");

printf("谢谢使用!\n");

exit(0);

}

case 1:

{

system("cls");

showstudent();

}

case 2:

{

system("cls");

sortnum();

}

case 3:

{

system("cls");

sortsum();

}

case 4:

{

system("cls");

int num;

printf("\t请输入要查找学生的学号:");

scanf("%d", &num);

searchnum(num);

}

case 5:

{

system("cls");

printf("\t请输入要查找学生的姓名:");

scanf("%s", text);

searchname();

}

case 6:

{

system("cls");

save();

}

}

}

int main()

{

void menu();

n = 0;

FILE * fp;

fp=fopen("1.txt","r+");

{

while(fscanf(fp, "%s %d %d %d %d", student[n].name, &student[n].num, &student[n].Chinese, &student[n].Math, &student[n].English)!=EOF)

{

student[n].sum = 0;

student[n].sum += student[n].Chinese;

student[n].sum += student[n].Math;

student[n].sum += student[n].English;

n++;

}

fclose(fp);

}

fp=fopen("2.txt","r+");

{

while(fscanf(fp, "%s %d %d %d %d", student[n].name, &student[n].num, &student[n].Chinese, &student[n].Math, &student[n].English)!=EOF)

{

student[n].sum = 0;

student[n].sum += student[n].Chinese;

student[n].sum += student[n].Math;

student[n].sum += student[n].English;

n++;

}

fclose(fp);

}

menu();

return 0;

}

定义一个结构体存放成绩学号平均分,然后逐行读文件,得到一个链表,计算链表每个节点平均分,再对链表依据平均分排序,最后逐一输出到文件