要求:
1、程序功能
编程实现一个基础的成绩管理系统。
2、设计目的
通过本程序综合掌握结构体类型、指针、链表、函数、文件等知识的综合使用。
3、功能要求(可扩充功能)
(1)实现简单的菜单设计,如下所示:
1 添加学生信息
2 显示学生信息
3 查找学生信息
4 插入学生信息
5 删除学生信息
6 成绩计算
7 按总分降序输出
0 退出
(2)每个学生的信息至少包括姓名、学号、3门课程的成绩、班级等信息。
(3)“添加学生信息”:输入新的学生信息以后,系统将把相关信息存储到文件中。以班级为单位存放到不同的文件中。至少有3个班,每个班级至少10个学生。
(4)“显示学生信息”:系统将从文件中读取数据,按要求显示所有的学生信息。为使界面美观,可考虑用二维表格的形式输出。
(5)“查找学生信息”:可进一步设计,如按姓名查找或按学号查找,或者查找某门课程的最高/最低成绩、或者在所有学生中查找平均分最高/最低的学生信息等。
(6)“插入学生信息”:根据学号顺序进行插入。
(7)“删除学生信息”:可进一步设计,根据姓名删除还是根据学号删除。删除前显示该条记录,并提交用户确认。
(8)“成绩计算”:可扩充,如计算每个学生的总分、平均分;计算每个班级每门课程的平均分。
(9)“按总分降序输出”:可扩展,按总分降序或升序。
学生根据需求可以扩展。
可供参考。如果也问题或好的意见记得提出来哟。让学习编程更加群有趣。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE* fp1, * fp2, * fp3;
typedef struct node
{
int id;
char name[20];
int score[3];
int s_class;
double average;
double sum;
union
{
int s_id;
char s_name[20];
}resault;
}STU;
STU stu[300],a;
int menu()
{
int op;
printf("\n***************************************************************************************************\n");
printf("*----------------------------------------学生信息管理系统-----------------------------------------*\n");
printf("* 1 添加学生信息 *\n");
printf("* 2 显示学生信息 *\n");
printf("* 3 查找学生信息 *\n");
printf("* 4 插入学生信息 *\n");
printf("* 5 删除学生信息 *\n");
printf("* 6 成绩计算 *\n");
printf("* 7 按总分降序显示 *\n");
printf("* 0 退出 *\n");
printf("***************************************************************************************************\n");
printf("\n");
printf("请输入选项->");
scanf("%d", &op);
return op;
}
//添加学生信息
void AddInformation()
{
while (1)
{
int n,cnt = 0;
int i = 0;
printf("请输入添加学生班级(1-3),输入0退出:");
scanf("%d", &n);
//根据班级打开不同的文件
switch (n)
{
case 1:
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "a")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
printf("输入学号:"); scanf("%d", &stu[i].id);
while (stu[i].id)
{
printf("输入姓名:"); scanf("%s", stu[i].name);
stu[i].s_class = n;
printf("输入三门成绩:"); scanf("%d %d %d", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
stu[i].average = stu[i].sum / 3;
fwrite(stu, sizeof(STU), 1, fp1);
printf("输入学号:");
scanf("%d", &stu[i].id);
}
fclose(fp1);
break;
case 2:
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "a")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
printf("输入学号:"); scanf("%d", &stu[i].id);
while (stu[i].id)
{
printf("输入姓名:"); scanf("%s", stu[i].name);
stu[i].s_class = n;
printf("输入三门成绩:"); scanf("%d %d %d", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
stu[i].average = stu[i].sum / 3;
fwrite(stu, sizeof(STU), 1, fp2);
printf("输入学号:");
scanf("%d", &stu[i].id);
}
fclose(fp2);
break;
case 3:
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "a")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
printf("输入学号:"); scanf("%d", &stu[i].id);
while (stu[i].id)
{
printf("输入姓名:"); scanf("%s", stu[i].name);
stu[i].s_class = n;
printf("输入三门成绩:"); scanf("%d %d %d", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
stu[i].average = stu[i].sum / 3;
fwrite(stu, sizeof(STU), 1, fp3);
printf("输入学号:");
scanf("%d", &stu[i].id);
}
fclose(fp3);
break;
}
if (n == 0)
break;
}
}
//显示学生信息
void PrintInformation()
{
int n, i = 0;
while (1)
{
printf("输入要显示的班级(1-3),退出输入0:"); scanf("%d", &n);
switch (n)
{
case 1:
i = 0;
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "r")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
printf("\n***********************************************************************************************\n");
printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*\n");
while (fread(&stu[i], sizeof(STU), 1, fp1) == 1)
{
printf("* %-3d ", i + 1);
printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
i++;
}
printf("***********************************************************************************************\n");
printf("\n");
fclose(fp1);
break;
case 2:
i = 0;
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "r")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
printf("\n***********************************************************************************************\n");
printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*\n");
while (fread(&stu[i], sizeof(STU), 1, fp2) == 1)
{
printf("* %-3d ", i + 1);
printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
i++;
}
printf("***********************************************************************************************\n");
printf("\n");
fclose(fp2);
break;
case 3:
i = 0;
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "r")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
printf("\n***********************************************************************************************\n");
printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*\n");
while (fread(&stu[i], sizeof(STU), 1, fp3) == 1)
{
printf("* %-3d ", i + 1);
printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
i++;
}
printf("***********************************************************************************************\n");
printf("\n");
fclose(fp3);
break;
}
if (n == 0)
break;
}
}
//按姓名查找
void searchN3()
{
int i = 0;
int n = 1;
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "r")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp3) == 1)
{
if (strcmp(a.resault.s_name, stu[i].name) == 0)
{
printf("\n******************************************************************************************\n");
printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*\n");
printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
printf("******************************************************************************************\n");
printf("\n");
n = 0;
break;
}
i++;
}
fclose(fp3);
if (n != 0)
{
printf("\n******************************************************\n");
printf("* 没有这个学生! *\n");
printf("******************************************************\n");
printf("\n");
}
}
void searchN2()
{
int i = 0;
int n = 1;
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "r")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp2) == 1)
{
if (strcmp(a.resault.s_name, stu[i].name) == 0)
{
printf("\n******************************************************************************************\n");
printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*\n");
printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
printf("******************************************************************************************\n");
printf("\n");
n = 0;
break;
}
i++;
}
fclose(fp2);
if (n != 0)
searchN3();
}
void searchN1()
{
int i = 0;
int n = 1;
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "r")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp1) == 1)
{
//若在第一个文件里找到了,就不用往下找
//如在第一个文件里找不到,就开始在第二个文件里找
if (strcmp(a.resault.s_name, stu[i].name) == 0)
{
printf("\n******************************************************************************************\n");
printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*\n");
printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
printf("******************************************************************************************\n");
printf("\n");
n = 0;
break;
}
i++;
}
fclose(fp1);
if (n != 0)
searchN2();
}
//按学号查找
void search3()
{
int i = 0;
int n = 1;
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "r")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp3) == 1)
{
if (a.resault.s_id == stu[i].id)
{
printf("\n******************************************************************************************\n");
printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*\n");
printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
printf("******************************************************************************************\n");
printf("\n");
n = 0;
break;
}
i++;
}
fclose(fp3);
if (n != 0)
{
printf("\n******************************************************\n");
printf("* 没有这个学生! *\n");
printf("******************************************************\n");
printf("\n");
}
}
void search2()
{
int i = 0;
int n = 1;
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "r")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp2) == 1)
{
if (a.resault.s_id == stu[i].id)
{
printf("\n******************************************************************************************\n");
printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*\n");
printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
printf("******************************************************************************************\n");
printf("\n");
n = 0;
break;
}
i++;
}
fclose(fp2);
if (n != 0)
search3();
}
void search1()
{
int i = 0;
int n = 1;
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "r")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp1) == 1)
{
//若在第一个文件里找到了,就不用往下找
//如在第一个文件里找不到,就开始在第二个文件里找
if (a.resault.s_id == stu[i].id)
{
printf("\n******************************************************************************************\n");
printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*\n");
printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
printf("******************************************************************************************\n");
printf("\n");
n = 0;
break;
}
i++;
}
fclose(fp1);
if (n != 0)
search2();
}
//学生信息查找
void SearchInformation()
{
char ch;
while (1)
{
printf("用学号查到输入I,用姓名查找输入N,退出输入0:");
gets();
scanf("%c", &ch);
if (ch == 'N')
{
printf("请输入查找学生姓名:");
scanf("%s", a.resault.s_name);
searchN1(); //调用第一个按姓名查找函数
}
else if (ch == 'I')
{
printf("请输入查找学生学号:");
scanf("%d", &a.resault.s_id);
search1(); //调用第一个按学号查找函数
}
else if (ch == '0')
{
printf("\n****************************************************\n");
printf("* 查找结束! *\n");
printf("****************************************************\n");
printf("\n");
break;
}
}
}
//插入学生信息
void InsertInformation()
{
int n=1, m;
int cnt = 0;
int c = 0;
int id;
int i = 0, j = 0;
char name[20];
int score[3];
double average, sum = 0;
printf("请输入插入学生的班级(1-3)和位置(1-10):");
scanf("%d %d", &n, &m);
if (m > 10)
m = 10;
printf("输入学号:"); scanf("%d", &id);
printf("输入姓名:"); scanf("%s", name);
printf("输入三门课程:"); scanf("%d %d %d", &score[0], &score[1], &score[2]);
sum = score[0] + score[1] + score[2];
average = sum / 3;
switch (n)
{
case 1:
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "r")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i < m; i++) //查找要出入的位置
{
if ((m - 1) == i) //如果找到了,这个位置开始所有元素往后移动一次
{
c = 1;
for (j = cnt; j > i; j--)
{
stu[j].id = stu[j - 1].id;
strcpy(stu[j].name, stu[j - 1].name);
stu[j].s_class = stu[j - 1].s_class;
stu[j].score[0] = stu[j - 1].score[0];
stu[j].score[1] = stu[j - 1].score[1];
stu[j].score[2] = stu[j - 1].score[2];
stu[j].average = stu[j - 1].average;
stu[j].sum = stu[j - 1].sum;
}
//在这个位置进行更新
stu[i].id = id;
strcpy(stu[i].name, name);
stu[i].s_class = n;
stu[i].score[0] = score[0];
stu[i].score[1] = score[1];
stu[i].score[2] = score[2];
stu[i].average = average;
stu[i].sum = sum;
break;
}
}
if (c == 0) //如果没找到,就在最后加一个学生信息
{
stu[i + 1].id = id;
strcpy(stu[i].name, name);
stu[i + 1].s_class = n;
stu[i + 1].score[0] = score[0];
stu[i + 1].score[1] = score[1];
stu[i + 1].score[2] = score[2];
stu[i + 1].average = average;
stu[i + 1].sum = sum;
}
fclose(fp1);
//更新完以后,更新文件,以“w”方式打开
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "w")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
fwrite(stu, sizeof(STU), cnt + 1, fp1); //再次把所有信息写在文件里
fclose(fp1);
printf("\n********************************************\n");
printf("* 插入信息成功! *\n");
printf("********************************************\n");
printf("\n");
break;
case 2:
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "r")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i < m; i++)
{
if ((m - 1) == i)
{
c = 1;
for (j = cnt; j > i; j--)
{
stu[j].id = stu[j - 1].id;
strcpy(stu[j].name, stu[j - 1].name);
stu[j].s_class = stu[j - 1].s_class;
stu[j].score[0] = stu[j - 1].score[0];
stu[j].score[1] = stu[j - 1].score[1];
stu[j].score[2] = stu[j - 1].score[2];
stu[j].average = stu[j - 1].average;
stu[j].sum = stu[j - 1].sum;
}
stu[i].id = id;
strcpy(stu[i].name, name);
stu[i].s_class = n;
stu[i].score[0] = score[0];
stu[i].score[1] = score[1];
stu[i].score[2] = score[2];
stu[i].average = average;
stu[i].sum = sum;
break;
}
}
if (c == 0)
{
stu[i + 1].id = id;
strcpy(stu[i].name, name);
stu[i + 1].s_class = n;
stu[i + 1].score[0] = score[0];
stu[i + 1].score[1] = score[1];
stu[i + 1].score[2] = score[2];
stu[i + 1].average = average;
stu[i + 1].sum = sum;
}
fclose(fp2);
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "w")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
fwrite(stu, sizeof(STU), cnt + 1, fp2);
fclose(fp2);
printf("\n********************************************\n");
printf("* 插入信息成功! *\n");
printf("********************************************\n");
printf("\n");
break;
case 3:
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "r")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i < m; i++)
{
if ((m - 1) == i)
{
c = 1;
for (j = cnt; j > i; j--)
{
stu[j].id = stu[j - 1].id;
strcpy(stu[j].name, stu[j - 1].name);
stu[j].s_class = stu[j - 1].s_class;
stu[j].score[0] = stu[j - 1].score[0];
stu[j].score[1] = stu[j - 1].score[1];
stu[j].score[2] = stu[j - 1].score[2];
stu[j].average = stu[j - 1].average;
stu[j].sum = stu[j - 1].sum;
}
stu[i].id = id;
strcpy(stu[i].name, name);
stu[i].s_class = n;
stu[i].score[0] = score[0];
stu[i].score[1] = score[1];
stu[i].score[2] = score[2];
stu[i].average = average;
stu[i].sum = sum;
break;
}
}
if (c == 0)
{
stu[i + 1].id = id;
strcpy(stu[i].name, name);
stu[i + 1].s_class = n;
stu[i + 1].score[0] = score[0];
stu[i + 1].score[1] = score[1];
stu[i + 1].score[2] = score[2];
stu[i + 1].average = average;
stu[i + 1].sum = sum;
}
fclose(fp3);
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "w")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
fwrite(stu, sizeof(STU), cnt + 1, fp3);
fclose(fp3);
printf("\n********************************************\n");
printf("* 插入信息成功! *\n");
printf("********************************************\n");
printf("\n");
break;
}
}
//删除学生信息
void Deletesearch3(int* p)
{
int i = 0, j = 0;
int cnt = 0;
int c = 0;
int n = 1;
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "r")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i <= cnt; i++) //查找要出入的位置
{
if (stu[i].id == *p) //如果找到了,这个位置开始所有元素往后移动一次
{
c = 1;
for (j = i; j < cnt; j++)
{
stu[j].id = stu[j + 1].id;
strcpy(stu[j].name, stu[j + 1].name);
stu[j].s_class = stu[j + 1].s_class;
stu[j].score[0] = stu[j + 1].score[0];
stu[j].score[1] = stu[j + 1].score[1];
stu[j].score[2] = stu[j + 1].score[2];
stu[j].average = stu[j + 1].average;
stu[j].sum = stu[j + 1].sum;
}
break;
}
}
fclose(fp3);
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "w")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
if (c != 1)
{
fwrite(stu, sizeof(STU), cnt, fp3); //再次把所有信息写在文件里
printf("\n******************************************************************\n");
printf("* 没有发现学生信息! *\n");
printf("******************************************************************\n");
printf("\n");
}
else
{
fwrite(stu, sizeof(STU), cnt - 1, fp3); //再次把所有信息写在文件里
printf("\n******************************************************************\n");
printf("* 删除学生信息成功! *\n");
printf("******************************************************************\n");
printf("\n");
}
fclose(fp3);
}
void Deletesearch2(int* p)
{
int i = 0, j = 0;
int cnt = 0;
int c = 0;
int n = 1;
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "r")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i <= cnt; i++) //查找要出入的位置
{
if (stu[i].id == *p) //如果找到了,这个位置开始所有元素往后移动一次
{
c = 1;
for (j = i; j < cnt; j++)
{
stu[j].id = stu[j + 1].id;
strcpy(stu[j].name, stu[j + 1].name);
stu[j].s_class = stu[j + 1].s_class;
stu[j].score[0] = stu[j + 1].score[0];
stu[j].score[1] = stu[j + 1].score[1];
stu[j].score[2] = stu[j + 1].score[2];
stu[j].average = stu[j + 1].average;
stu[j].sum = stu[j + 1].sum;
}
break;
}
}
fclose(fp2);
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "w")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
if (c != 1)
{
fwrite(stu, sizeof(STU), cnt, fp2); //再次把所有信息写在文件里
Deletesearch3(p);
}
else
{
fwrite(stu, sizeof(STU), cnt - 1, fp2); //再次把所有信息写在文件里
printf("\n******************************************************************\n");
printf("* 删除学生信息成功! *\n");
printf("******************************************************************\n");
printf("\n");
}
fclose(fp2);
}
void Deletesearch1(int* p)
{
int i = 0, j = 0;
int cnt = 0;
int c = 0;
int n = 1;
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "r")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i <= cnt; i++) //查找要出入的位置
{
if (stu[i].id ==*p ) //如果找到了,这个位置开始所有元素往后移动一次
{
c = 1;
for (j = i; j < cnt; j++)
{
stu[j].id = stu[j + 1].id;
strcpy(stu[j].name, stu[j + 1].name);
stu[j].s_class = stu[j + 1].s_class;
stu[j].score[0] = stu[j + 1].score[0];
stu[j].score[1] = stu[j + 1].score[1];
stu[j].score[2] = stu[j + 1].score[2];
stu[j].average = stu[j + 1].average;
stu[j].sum = stu[j + 1].sum;
}
break;
}
}
fclose(fp1);
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "w")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
if (c != 1)
{
fwrite(stu, sizeof(STU), cnt, fp1); //再次把所有信息写在文件里
Deletesearch2(p);
}
else
{
fwrite(stu, sizeof(STU), cnt - 1, fp1); //再次把所有信息写在文件里
printf("\n******************************************************************\n");
printf("* 删除学生信息成功! *\n");
printf("******************************************************************\n");
printf("\n");
}
fclose(fp1);
}
void DeleteInformation()
{
int id;
printf("输入要删掉的学生学号:"); scanf("%d", &id);
Deletesearch1(&id);
}
//计算成绩
void CountScore()
{
int i = 0;
int n = 0;
double ave_class1[3] = { 0 }, ave_class2[3] = { 0 }, ave_class3[3] = { 0 };
double sum_score[3] = { 0 };
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "r")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
i = 0;
while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) //先从文件里读出来
{
sum_score[0] = sum_score[0] + stu[i].score[0];
sum_score[1] = sum_score[1] + stu[i].score[1];
sum_score[2] = sum_score[2] + stu[i].score[2];
i++;
}
n = i ;
ave_class1[0] = sum_score[0] / n;
ave_class1[1] = sum_score[1] / n;
ave_class1[2] = sum_score[2] / n;
fclose(fp1);
printf("\n*************Class1***************\n");
printf("* average score1=%0.2lf *\n", ave_class1[0]);
printf("* average score2=%0.2lf *\n", ave_class1[1]);
printf("* average score3=%0.2lf *\n", ave_class1[2]);
printf("**********************************\n");
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "r")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
i = 0;
sum_score[0] = 0;
sum_score[1] = 0;
sum_score[2] = 0;
while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) //先从文件里读出来
{
sum_score[0] = sum_score[0] + stu[i].score[0];
sum_score[1] = sum_score[1] + stu[i].score[1];
sum_score[2] = sum_score[2] + stu[i].score[2];
i++;
}
n = i;
ave_class2[0] = sum_score[0] / n;
ave_class2[1] = sum_score[1] / n;
ave_class2[2] = sum_score[2] / n;
fclose(fp2);
printf("\n*************Class2***************\n");
printf("* average score1=%0.2lf *\n", ave_class2[0]);
printf("* average score2=%0.2lf *\n", ave_class2[1]);
printf("* average score3=%0.2lf *\n", ave_class2[2]);
printf("**********************************\n");
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "r")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
i = 0;
sum_score[0] = 0;
sum_score[1] = 0;
sum_score[2] = 0;
while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) //先从文件里读出来
{
sum_score[0] = sum_score[0] + stu[i].score[0];
sum_score[1] = sum_score[1] + stu[i].score[1];
sum_score[2] = sum_score[2] + stu[i].score[2];
i++;
}
n = i;
ave_class3[0] = sum_score[0] / n;
ave_class3[1] = sum_score[1] / n;
ave_class3[2] = sum_score[2] / n;
fclose(fp3);
printf("\n*************Class3***************\n");
printf("* average score1=%0.2lf *\n", ave_class3[0]);
printf("* average score2=%0.2lf *\n", ave_class3[1]);
printf("* average score3=%0.2lf *\n", ave_class3[2]);
printf("**********************************\n");
printf("\n");
}
//按总分降序输出
void SortInformation()
{
int i = 0, j = 0;
int cnt = 0;
int max = 0;
char name[20];
int score[3], id;
double sum = 0, average = 0;
if ((fp1 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class1.txt", "r")) == NULL)
{
printf("Open file Class1 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i < cnt; i++)
{
max = i;
for (j = i + 1; j < cnt; j++)
{
if (stu[max].sum < stu[j].sum)
max = j;
}
if (max != i)
{
id = stu[i].id; stu[i].id = stu[max].id; stu[max].id = id;
strcpy(name, stu[i].name); strcpy(stu[i].name, stu[max].name); strcpy(stu[max].name, name);
score[0] = stu[i].score[0]; stu[i].score[0] = stu[max].score[0]; stu[max].score[0] = score[0];
score[1] = stu[i].score[1]; stu[i].score[1] = stu[max].score[1]; stu[max].score[1] = score[1];
score[2] = stu[i].score[2]; stu[i].score[2] = stu[max].score[2]; stu[max].score[2] = score[2];
average = stu[i].average; stu[i].average = stu[max].average; stu[max].average = average;
sum = stu[i].sum; stu[i].sum = stu[max].sum; stu[max].sum = sum;
}
}
printf("\n***********************************************************************************************\n");
printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*\n");
for (i = 0; i < cnt; i++)
{
printf("* %-3d ", i + 1);
printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
}
printf("***********************************************************************************************\n");
printf("\n");
fclose(fp1);
i = 0;
cnt = 0;
if ((fp2 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class2.txt", "r")) == NULL)
{
printf("Open file Class2 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i < cnt; i++)
{
max = i;
for (j = i + 1; j < cnt; j++)
{
if (stu[max].sum < stu[j].sum)
max = j;
}
if (max != i)
{
id = stu[i].id; stu[i].id = stu[max].id; stu[max].id = id;
strcpy(name, stu[i].name); strcpy(stu[i].name, stu[max].name); strcpy(stu[max].name, name);
score[0] = stu[i].score[0]; stu[i].score[0] = stu[max].score[0]; stu[max].score[0] = score[0];
score[1] = stu[i].score[1]; stu[i].score[1] = stu[max].score[1]; stu[max].score[1] = score[1];
score[2] = stu[i].score[2]; stu[i].score[2] = stu[max].score[2]; stu[max].score[2] = score[2];
average = stu[i].average; stu[i].average = stu[max].average; stu[max].average = average;
sum = stu[i].sum; stu[i].sum = stu[max].sum; stu[max].sum = sum;
}
}
printf("\n***********************************************************************************************\n");
printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*\n");
for (i = 0; i < cnt; i++)
{
printf("* %-3d ", i + 1);
printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
}
printf("***********************************************************************************************\n");
printf("\n");
fclose(fp2);
i = 0;
cnt = 0;
if ((fp3 = fopen("F:\\visual studio C language\\Small Grade Management System\\Class3.txt", "r")) == NULL)
{
printf("Open file Class3 error!\n");
exit(1);
}
while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) //先从文件里读出来
{
i++;
}
cnt = i;
for (i = 0; i < cnt; i++)
{
max = i;
for (j = i + 1; j < cnt; j++)
{
if (stu[max].sum < stu[j].sum)
max = j;
}
if (max != i)
{
id = stu[i].id; stu[i].id = stu[max].id; stu[max].id = id;
strcpy(name, stu[i].name); strcpy(stu[i].name, stu[max].name); strcpy(stu[max].name, name);
score[0] = stu[i].score[0]; stu[i].score[0] = stu[max].score[0]; stu[max].score[0] = score[0];
score[1] = stu[i].score[1]; stu[i].score[1] = stu[max].score[1]; stu[max].score[1] = score[1];
score[2] = stu[i].score[2]; stu[i].score[2] = stu[max].score[2]; stu[max].score[2] = score[2];
average = stu[i].average; stu[i].average = stu[max].average; stu[max].average = average;
sum = stu[i].sum; stu[i].sum = stu[max].sum; stu[max].sum = sum;
}
}
printf("\n***********************************************************************************************\n");
printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*\n");
for (i = 0; i < cnt; i++)
{
printf("* %-3d ", i + 1);
printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *\n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum);
}
printf("***********************************************************************************************\n");
printf("\n");
fclose(fp3);
}
int main()
{
int choice;
while (1)
{
choice = menu();
switch (choice)
{
case 1:AddInformation(); break;
case 2:PrintInformation(); break;
case 3:SearchInformation(); break;
case 4:InsertInformation(); break;
case 5:DeleteInformation(); break;
case 6:CountScore(); break;
case 7:SortInformation(); break;
case 0:
printf("\n******************************************************************\n");
printf("* 程序结束! *\n");
printf("******************************************************************\n");
printf("\n"); return 0; break;
}
}
}