最终修订的成绩管理系统
现在发现的问题是统计有错,文件的存储和读写有点问题,跑程序有烫,但是文件里又是对的希望大神们帮忙改改,谢谢!有点急


哈哈哈哈
程序代码:
#include"stdio.h"
#include"string.h"
#define N 2
struct infor
{
int ID;
char name[10];
char position[10];
int age;
int grade;
char level[10];
};
void scanfs(struct infor people1[N], int flag)
{
int m, n, i;
printf("\n\t请输入员工信息\n工号\t姓名\t岗位\t年龄\t成绩\n");
for (m = 0; m < N; m++)
{
scanf("%d%s%*c%s%*c%d%d", &people1[m].ID, people1[m].name, people1[m].position, &people1[m].age, &people1[m].grade);
}
for (i = 0; i < N; i++)
{
if (people1[i].grade >= 90)
strcpy(people1[i].level, "优秀");
if ((people1[i].grade > 79) && (people1[i].grade<90))
strcpy(people1[i].level, "良好");
if ((people1[i].grade > 69) && (people1[i].grade<80))
strcpy(people1[i].level, "中等");
if ((people1[i].grade > 59) && (people1[i].grade<70))
strcpy(people1[i].level, "及格");
if (people1[i].grade < 60)
strcpy(people1[i].level, "不及格");
}
for (n = 0; n < 41; n++)
{
printf("*");
if (n == 40)
{
printf("\n");
}
}
}
void printfs(struct infor people2[N], int flag)
{
int n, i;
if (flag == 0)
{
printf("请先输入员工信息(先输入1再输入员工信息)\n");
for (i = 0; i < 41; i++)
{
printf("*");
if (i == 40)
{
printf("\n");
}
}
return;
}
printf("工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
for (i = 0; i < N; i++)
{
if (people2[i].grade >= 90)
strcpy(people2[i].level, "优秀");
if ((people2[i].grade > 79) && (people2[i].grade<90))
strcpy(people2[i].level, "良好");
if ((people2[i].grade > 69) && (people2[i].grade<80))
strcpy(people2[i].level, "中等");
if ((people2[i].grade > 59) && (people2[i].grade<70))
strcpy(people2[i].level, "及格");
if (people2[i].grade < 60)
strcpy(people2[i].level, "不及格");
}
for (n = 0; n < N; n++)
{
printf("%d\t%s\t%s\t%d\t%d\t%s\n", people2[n].ID, people2[n].name, people2[n].position, people2[n].age, people2[n].grade, people2[n].level);
}
for (i = 0; i < 41; i++)
{
printf("*");
if (i == 40)
{
printf("\n");
}
}
}
void tongji(struct infor people[N], int flag)
{
int n, i, 优秀, 良好, 中等 , 及格, 不及格;
优秀=良好=中等=及格=不及格=0;
if (flag == 0)
{
printf("请先输入员工信息(先输入1再输入员工信息)\n");
for (n = 0;n<41;n++)
{
printf("*");
if (n == 40)
printf("\n");
}
return;
}
for (i = 0; i < N; i++)
{
if (people[i].grade >= 90)
优秀++;
if (people[i].grade > 79 && people[i].grade < 90)
良好++;
if (people[i].grade > 69 && people[i].grade < 80)
中等++;
if (people[i].grade > 59 && people[i].grade < 70)
及格++;
if (people[i].grade < 60)
不及格++;
}
printf("优秀的人有%d个\n良好的人有%d个\n中等的人有%d个\n及格的人有%d个\n不及格的人有%d个\n", '优秀', '良好','中等','及格','不');
for (n = 0; n < 41; n++)
{
printf("*");
if (n == 40)
{
printf("\n");
}
}
}
void chakan(struct infor people[N], int flag)
{
int n, i, max, min;
if (flag == 0)
{
printf("请先输入员工信息(先输入1再输入员工信息)\n");
for (n = 0; n < 41; n++)
{
printf("*");
if (n == 40)
{
printf("\n");
}
}
return;
}
max = min = 0;
for (i = 0; i < N; i++)
{
for (i = 0; i < N; i++)
{
if (people[i].grade >= 90)
strcpy(people[i].level, "优秀");
if ((people[i].grade > 79) && (people[i].grade<90))
strcpy(people[i].level, "良好");
if ((people[i].grade > 69) && (people[i].grade<80))
strcpy(people[i].level, "中等");
if ((people[i].grade > 59) && (people[i].grade<70))
strcpy(people[i].level, "及格");
if (people[i].grade < 60)
strcpy(people[i].level, "不及格");
if (people[i].grade >= people[max].grade)
max = i;
if (people[i].grade <= people[min].grade)
min = i;
}
printf("\t\t工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
printf("最高成绩的员工\t%d\t%s\t%s\t%d\t%d\t%s\n", people[max].ID, people[max].name, people[max].position, people[max].age, people[max].grade, people[max].level);
printf("最低成绩的员工\t%d\t%s\t%s\t%d\t%d\t%s\n", people[min].ID, people[min].name, people[min].position, people[min].age, people[min].grade, people[min].level);
}
for (n = 0; n < 41; n++)
{
printf("*");
if (n == 40)
{
printf("\n");
}
}
}
void gengzheng(struct infor people[N], int flag)
{
int n, a, i, f, x, m;
if (flag == 0)
{
printf("请输入员工信息\n");
return;
}
for (i = 0;; i++)
{
for (n = 0; n < 41; n++)
{
printf("*");
if (n == 40)
{
printf("\n");
}
}
if (flag == 0)
{
printf("请先输入员工信息(先输入1再输入员工信息)\n");
for (n = 0; n < 41; n++)
{
printf("*");
if (n == 40)
{
printf("\n");
}
}
return;
}
for (i = 0; i < N; i++)
{
if (people[i].grade >= 90)
strcpy(people[i].level, "优秀");
if ((people[i].grade > 79) && (people[i].grade < 90))
strcpy(people[i].level, "良好");
if ((people[i].grade > 69) && (people[i].grade < 80))
strcpy(people[i].level, "中等");
if ((people[i].grade > 59) && (people[i].grade < 70))
strcpy(people[i].level, "及格");
if (people[i].grade < 60)
strcpy(people[i].level, "不及格");
}
printf("工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
for (i = 0; i < N; i++)
{
printf("%d\t%s\t%s\t%d\t%d\t%s\n", people[i].ID, people[i].name, people[i].position, people[i].age, people[i].grade, people[i].level);
}
printf("请输入更改信息员工的工号\n");
scanf("%d", &x);
for (n = 0; n < 41; n++)
{
printf("*");
if (n == 40)
{
printf("\n");
}
}
for (n = 0, m = 0; n<N; n++, m++)
{
if (x == people[n].ID)
{
f = n;
for (i = 0;; i++)
{
printf("1.改正工号\n2.改正名字\n3.改正岗位\n4.改正年龄\n5.改正成绩\n0.改正完毕\n");
scanf("%d", &a);
switch (a)
{
case 1:printf("请输入改正的工号\n"), scanf("%d", &people[f].ID); break;
case 2:printf("请输入改正的名字\n"), scanf("%s", people[f].name); break;
case 3:printf("请输入改正的岗位\n"), scanf("%s", people[f].position); break;
case 4:printf("请输入改正的年龄\n"), scanf("%d", &people[f].age); break;
case 5:printf("请输入改正的成绩\n"), scanf("%d", &people[f].grade); break;
case 0:for (i = 0; i < 41; i++)
{
printf("*");
if (i == 40)
{
printf("\n");
}
}return; break;
}
printf("工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
for (i = 0; i < N; i++)
{
if (people[i].grade >= 90)
strcpy(people[i].level, "优秀");
if ((people[i].grade > 79) && (people[i].grade < 90))
strcpy(people[i].level, "良好");
if ((people[i].grade > 69) && (people[i].grade < 80))
strcpy(people[i].level, "中等");
if ((people[i].grade > 59) && (people[i].grade < 70))
strcpy(people[i].level, "及格");
if (people[i].grade < 60)
strcpy(people[i].level, "不及格");
}
for (i = 0;i < N; i++)
{
printf("%d\t%s\t%s\t%d\t%d\t%s\n", people[i].ID, people[i].name, people[i].position, people[i].age, people[i].grade, people[i].level);
}
for (i = 0; i < 41; i++)
{
printf("*");
if (i == 40)
{
printf("\n");
}
}
}
}
}
if (m == n)
printf("输入的工号错误,无此员工\n");
}
}
void paixu(struct infor people[N], int flag)
{
if (flag == 0)
{
printf("请先输入员工信息\n");
for (int n = 0; n < 41; n++)
{
for (int n = 0; n<41; n++)
{
printf("*");
if (n == 40)
printf("\n");
}
return;
}
}
int mark[N], i, mid, a, j;
for (int n = 0; n<41; n++)
{
printf("*");
if (n == 40)
printf("\n");
}
for (int m = 0;; m++)
{
printf("1.按照学号排序\n2.按照成绩排序\n3.按照年龄排序\n0.退出排序\n");
for (i = 0; i < N; i++)
{
mark[i] = i;
}
scanf("%d", &a);
switch (a)
{
case 1:for (j = 1; j < N - 1; j++)
{
for (i = 0; i < N - j; i++)
{
if (people[mark[i]].ID > people[mark[i + 1]].ID)
{
mid = mark[i] + mark[i + 1];
mark[i] = mid - mark[i];
mark[i + 1] = mid - mark[i];
}
}
}; break;
case 2:for (j = 1; j < N - 1; j++)
{
for (i = 0; i < N - j; i++)
{
if (people[mark[i]].grade > people[mark[i + 1]].grade)
{
mid = mark[i] + mark[i + 1];
mark[i] = mid - mark[i];
mark[i + 1] = mid - mark[i];
}
}
}; break;
case 3:for (j = 1; j < N - 1; j++)
{
for (i = 0; i < N - j; i++)
{
if (people[mark[i]].age > people[mark[i + 1]].age)
{
mid = mark[i] + mark[i + 1];
mark[i] = mid - mark[i];
mark[i + 1] = mid - mark[i];
}
}
}; break;
case 0:return; break;
}
for (i = 0; i < N; i++)
{
if (people[i].grade >= 90)
strcpy(people[i].level, "优秀");
if ((people[i].grade > 79) && (people[i].grade < 90))
strcpy(people[i].level, "良好");
if ((people[i].grade > 69) && (people[i].grade < 80))
strcpy(people[i].level, "中等");
if ((people[i].grade > 59) && (people[i].grade < 70))
strcpy(people[i].level, "及格");
if (people[i].grade < 60)
strcpy(people[i].level, "不及格");
}
printf("工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
for (i = 0; i < N; i++)
{
printf("%d\t%s\t%s\t%d\t%d\t%s\n", people[mark[i]].ID, people[mark[i]].name, people[mark[i]].position, people[mark[i]].age, people[mark[i]].grade, people[mark[i]].level);
}
for (int n = 0; n<41; n++)
{
printf("*");
if (n == 40)
printf("\n");
}
}
}
void chucun(struct infor people[N], int flag)
{
FILE*fp;
char address[20], abc[100];
int i;
if (flag == 0)
{
printf("请先输入员工信息\n");
for (i = 0; i < 41; i++)
{
printf("*");
if (i == 40)
{
printf("\n");
}
}
}
printf("请输入存放路径:");
scanf("%s", address);
strcpy(abc, "工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
fp = fopen(address, "w");
fprintf(fp, "%s", abc);
for (i = 0; i < N; i++)
{
fprintf(fp, "%d\t%s\t%s\t%d\t%d\t%s\n", people[i].ID, people[i].name, people[i].position, people[i].age, people[i].grade, people[i].level);
}
fclose(fp);
for (i = 0; i < 41; i++)
{
printf("*");
if (i == 40)
{
printf("\n");
}
}
}
void duxie(struct infor people[N], int flag)
{
FILE*fp;
char abc[100], address[20];
int i;
printf("请输入读取路径:");
scanf("%s", address);
fp = fopen(address, "r");
strcpy(abc, "工号\t姓名\t岗位\t年龄\t成绩\t等级\n");
fscanf(fp, "%s", abc);
for (i = 0; i < N; i++)
{
fscanf(fp, "%d\t%s\t%s\t%d\t%d\t%s\n", people[i].ID, people[i].name, people[i].position, people[i].age, people[i].grade, people[i].level);
}
fclose(fp);
for (i = 0; i < 41; i++)
{
printf("*");
if (i == 40)
{
printf("\n");
}
}
}
void menu()
{
struct infor people[N];
int n, m, flag = 0, it;
do
{
puts("\t\t*********************************************");
puts("\t\t*********************************************");
puts("\t\t**************学生成绩系统菜单***************");
puts("\t\t*********************************************");
puts("\t\t********************************************************************");
puts("\t\t******* 1--输入并显示员工信息 ****");
puts("\t\t******* 2--统计各等级员工各有多少人 ****");
puts("\t\t******* 3--查询考核得分最高和最低员工信息 ****");
puts("\t\t******* 4--查询并修改员工信息 ****");
puts("\t\t******* 5--按需求对员工信息进行排序 ****");
puts("\t\t******* 6--将员工信息存储到硬盘上 ****");
puts("\t\t******* 7--从硬盘上读取员工信息 ****");
puts("\t\t******* 8--退出当前程序 ****");
puts("\t\t********************************************************************");
mark:
printf("请选择服务种类(0~8): [ ]\b\b");
scanf("%d", &n);
if (n<1 || n>8)
{
//system("cls");
printf("选择错误! 请重新选择!\n");
m = 1;
}
else
{
m = 0;
}
}
while (m==1);
{
switch (n)
{
case 1: scanfs(people, flag), flag = 1;
printfs(people, flag); break;
case 2: tongji(people, flag); break;
case 3:chakan(people, flag); break;
case 4:gengzheng(people, flag), flag = 1; break;
case 5:paixu(people, flag); break;
case 6:chucun(people, flag); break;
case 7:duxie(people, flag), flag = 1; break;
case 8:return 0; break;
default:printf("输入错误!"); break;
}
}
printf("\n是否继续运行菜单\n");
printf("1.继续运行\n");
printf("0.退出\n");
scanf("%d", &it);
switch (it)
{
case 1:
goto mark;
break;
case 0:
break;
}
}
int main()
{// struct infor people1[N];
// int flag;
menu();
// scanfs( people1[N], flag);//输入员工信息声明
// printfs(people2[N], flag);//显示员工信息声明
/// tongji(people[N], flag);//统计各等级人数并输出声明
// chakan(people[N], flag);//查询最高最低声明
// gengzheng(people[N], flag);//更正员工信息
// paixu(people[N], flag);
// chucun(people[N], flag);
// duxie(people[N], flag);
return 0;
}









