##C语言 简单学生成绩管理系统 适用初学者
<textarea readonly="readonly" name="code" class="c">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 30
#define M 6
typedef struct student
{
long studentID;
char studentName[10];
int score[M];
}STUDENT;
void PrintMenu();
void InputScore(STUDENT stu[], int n, int m);
void CourseSumAndAver(STUDENT stu[], int n, int m, int sum[], float aver[]);
void PrintCourseSumAndAver(int m, int sum[], float aver[]);
void StudentSumAndAver(STUDENT stu[], int n, int m, int sum[], float aver[]);
void PrintStudentSumAndAver(STUDENT stu[], int n, int sum[], float aver[]);
void SortFromHighToLow(STUDENT stu[], int sum[], int n);
void SortFromLowToHigh(STUDENT stu[], int sum[], int n);
void SortByID(STUDENT stu[], int n);
void SortByName(STUDENT stu[], int n);
void PrintScore(STUDENT stu[], int n, int m);
int SearchByID(STUDENT stu[], int n, int a);
int SearchByName(STUDENT stu[], int n, char b[]);
void PrintRankAndScore(STUDENT stu[], int m, int pos);
void AnalySizeDate(STUDENT stu[], int n, int m);
void PrintFinalResult(STUDENT stu[], int n, int m);
void WritetoFILE(STUDENT stu[], int n);
int ReadfromFile(STUDENT stu[]);int main()
{
STUDENT stu[N];
int choice;
char pos;
int n, m, a;
int sum[N] = {0};
float aver[] = {0.0};
char b[10]; printf("hou many student?\n");
scanf("%d", &n);
printf("hou many subject?\n");
scanf("%d", &m); PrintMenu();
while(1)
{
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("输入每个学生的学号,姓名,各科成绩:\n");
InputScore(stu, n, m);
break;
case 2:
printf("每门课程的总分及平均分\n");
CourseSumAndAver(stu, n, m, sum, aver);
PrintCourseSumAndAver(m, sum, aver);
break;
case 3:
printf("每个学生的总分就平均分\n");
StudentSumAndAver(stu, n, m, sum, aver);
PrintStudentSumAndAver(stu, n, sum, aver);
break;
case 4:
printf("按每个学生总分由高到低排名次表\n");
StudentSumAndAver(stu, n, m, sum, aver);
SortFromHighToLow(stu, sum, n);
PrintScore(stu, n, m);
break;
case 5:
printf("按每个学生总分由低到高排名次表\n");
StudentSumAndAver(stu, n, m, sum, aver);
SortFromLowToHigh(stu, sum, n);
PrintScore(stu, n, m);
break;
case 6:
printf("按学号由小到大排成绩表\n");
SortByID(stu, n);
PrintScore(stu, n, m);
break;
case 7:
printf("按姓名的字典顺序排成绩表\n");
SortByName(stu, n);
PrintScore(stu, n, m);
break;
case 8:
printf("输入学号:\n");
scanf("%ld", &a);
StudentSumAndAver(stu, n, m, sum, aver);
SortFromHighToLow(stu, sum, n);
SearchByID(stu, n, a);
PrintRankAndScore(stu, m ,pos);
break;
case 9:
printf("输入姓名:\n");
scanf("%s", b);
StudentSumAndAver(stu, n, m, sum ,aver);
SortFromHighToLow(stu, sum, n);
SearchByName(stu, n, b);
PrintRankAndScore(stu, m, pos);
break;
case 10:
printf("各类别人数及所占百分比:\n");
AnalySizeDate(stu, n, m);
break;
case 11:
printf("总成绩表:\n");
PrintFinalResult(stu, n, m);
CourseSumAndAver(stu, n, m, sum, aver);
PrintCourseSumAndAver(m, sum, aver);
break;
case 12:
printf("每个学生的信息写入文件:\n");
WritetoFILE(stu, n);
break;
case 13:
printf("从文件中读出每个学生的记录信息并显示:\n");
ReadfromFile(stu);
break;
case 0:
exit(0);
default:
printf("error!\n"); }
}
return 0;
}
void PrintMenu()
{
printf("------------------------------------------------------\n");
printf("----------------学生成绩管理系统v6.0------------------\n");
printf("------------------------------------------------------\n");
printf("1.Input record\n");
printf("2.Caculate total and average score of every course\n");
printf("3.Caculate total and average score of every student\n");
printf("4.Sort in descending order by total score of every student\n");
printf("5.Sort in ascending order by total score of every student\n");
printf("6.Sort in asacending order by number\n");
printf("7.Sort in dictionary order by name\n");
printf("8.Search by number\n");
printf("9.Search by name\n");
printf("10.Statistic analysis for every course\n");
printf("11.List record\n");
printf("12.Write to a file\n");
printf("13.Read from a file\n");
printf("0.Exit\n");
printf("please enter your choice\n");
}
void InputScore(STUDENT stu[], int n, int m)
{
int i, j;
for(i = 0; i < n; i++)
{
scanf("%ld", &stu[i].studentID);
scanf("%s", stu[i].studentName);
for(j = 0; j < m; j++)
{
scanf("%d", &stu[i].score[j]);
}
}
}
void CourseSumAndAver(STUDENT stu[], int n, int m, int sum[], float aver[])
{
int i, j;
for(i = 0; i < m; i++)
{
sum[i] = 0;
for(j =0 ; j < n; j++)
{
sum[i] += stu[i].score[j];
}
aver[i] = (float)sum[i] / n;
}
}
void PrintCourseSumAndAver(int m, int sum[], float aver[])
{
int i;
for(i = 0; i < m; i++)
{
printf("No.%d sum: %4d aver: %2f\n", i+1, sum[i], aver[i]);
}
}
void StudentSumAndAver(STUDENT stu[], int n, int m, int sum[], float aver[])
{
int i, j;
for(i = 0; i < n; i++)
{
sum[i] = 0;
for(j = 0; j < m; j++)
{
sum[i] += stu[i].score[j];
}
aver[i] = (float)sum[i] / m;
}
}
void PrintStudentSumAndAver(STUDENT stu[], int n, int sum[], float aver[])
{
int i;
for(i = 0; i < n; i++)
{
printf("No.%d %10ld %6s", i+1, stu[i].studentID, stu[i].studentName);
printf("sum: %4d aver: %2f\n", sum[i], aver[i]);
}
}
void SortFromHighToLow(STUDENT stu[], int sum[], int n)
{
int i, j, pos;
for(i = 0; i < n-1; i++)
{
pos = i;
for(j =i+1; j < n; j++)
{
if(sum[j] < sum[pos])
{
pos = j;
}
}
if(pos != i)
{
STUDENT temp;
temp = stu[pos];
stu[pos] = stu[i];
stu[i] = temp; int temp1;
temp1 = sum[pos];
sum[pos] = sum[i];
sum[i] = temp1; }
}
}
void SortFromLowToHigh(STUDENT stu[], int sum[], int n)
{
int i, j, pos;
for(i = 0; i < n-1; i++)
{
pos = i;
for(j =i+1; j < n; j++)
{
if(sum[j] > sum[pos])
{
pos = j;
}
}
if(pos != i)
{
STUDENT temp;
temp = stu[pos];
stu[pos] = stu[i];
stu[i] = temp; int temp1;
temp1 = sum[pos];
sum[pos] = sum[i];
sum[i] = temp1;
}
}
}
void SortByID(STUDENT stu[], int n)
{
int i, j, pos;
for(i = 0 ; i < n-1; i++)
{
pos = i;
for(j = i+1; j < n; j++)
{
if(stu[j].studentID < stu[pos].studentID)
{
pos = j;
}
}
if(pos != i)
{
STUDENT temp;
temp = stu[i];
stu[i] = stu[pos];
stu[pos] = temp;
}
}
}
void SortByName(STUDENT stu[], int n)
{
int i, j, pos;
for(i = 0 ; i < n-1; i++)
{
pos = i;
for(j = i+1; j < n; j++)
{
if(strcmp(stu[j].studentName, stu[pos].studentName))
{
pos = j;
}
}
if(pos != i)
{
STUDENT temp;
temp = stu[i];
stu[i] = stu[pos];
stu[pos] = temp;
}
}
}
void PrintScore(STUDENT stu[], int n, int m)
{
int i, j;
for(i = 0; i < n; i++)
{
printf("No.%d %10ld %6s", i+1, stu[i].studentID, stu[i].studentName);
for(j = 0; j < m; j++)
{
printf("%4d", stu[i].score[j]);
}
printf("\n");
}
}
int SearchByID(STUDENT stu[], int n, int a)
{
int i, pos;
for(i = 0; i < n; i++)
{
if(a == stu[i].studentID)
{
return i;
}
}
}
int SearchByName(STUDENT stu[], int n, char b[])
{
int i, pos;
for(i = 0; i < n; i++)
{
if(strcmp(b, stu[i].studentName) == 0)
{
return i;
}
}
}
void PrintRankAndScore(STUDENT stu[], int m, int pos)
{
int i;
printf("此学生分数:");
for(i = 0; i < m; i++)
{
printf("%4d", stu[pos].score[i]);
}
printf("此学生名次:%d\n", pos+1);
}
void AnalySizeDate(STUDENT stu[], int n, int m)
{
int tag, i, j;
int count [M][5] = {0};
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
tag = stu[j].score[i]/10;
switch(tag)
{
case 0:
count[i][0]++;
break;
case 1:
count[i][1]++;
break;
case 3:
count[i][2]++;
break;
case 4:
count[i][3]++;
break;
case 5:
count[i][4]++;
}
}
}
for(i = 0; i < m; i++)
{
printf("No.%d\n", i+1);
printf("优秀人数:%d 所占百分比:%2f%%\n", count[i][0], ((float)count[i][0]/n)*100);
printf("良好人数:%d 所占百分比:%2f%%\n", count[i][1], ((float)count[i][1]/n)*100);
printf("中等人数:%d 所占百分比:%2f%%\n", count[i][2], ((float)count[i][2]/n)*100);
printf("及格人数:%d 所占百分比:%2f%%\n", count[i][3], ((float)count[i][3]/n)*100);
printf("不及格人数:%d 所占百分比:%2f%%\n", count[i][4], ((float)count[i][4]/n)*100);
printf("\n");
}
}
void PrintFinalResult(STUDENT stu[], int n, int m)
{
int i, j;
for(i = 0; i < n; i++)
{
printf("%10ld %6s", stu[i].studentID, stu[i].studentName);
for(j = 0; j < m; j++)
{
printf("%4d", stu[i].score[j]);
}
printf("\n");
}
}
void WritetoFILE(STUDENT stu[], int n)
{
FILE *fp;
if((fp = fopen("student.txt", "w"))== NULL)
{
printf("Fail to open student.txt!\n");
exit(0);
}
fwrite(stu, sizeof(STUDENT), n, fp);
fclose(fp);
}
int ReadfromFile(STUDENT stu[])
{
FILE *fp;
int i;
if((fp = fopen("student.txt","w")) == NULL)
{
printf("Failure to open student.txt!\n");
exit(0);
}
i = 0;
while(fread(&stu[i], sizeof(STUDENT), 1, fp) != 0)
{
i++;
}
fclose(fp);
printf("Total student is %d.\n", i-1);
return i;
}