//学生管理系统,加入文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define studen 30
#define zifu 99
#define xueke 6
//struct
typedef struct student{
char mingzi[zifu];
int number;
int goal[xueke];
}STU;
void gsum(int n, int s, STU stu[], int gsums[]);
void gaver(int n, int s, int gsums[], float gavers[]);
void nsum(int n, int s, STU stu[], int nsums[]);
void naver(int n, int s, int nsums[], float navers[]);
void menu(void);
void record(STU stu[], int n, int s);
void goalorder(STU stu[], int n, int nsums[], float navers[], int (*compare)(int a, int b));
void swap(int *x, int *y);
void swapf(float *x, float *y);
int ascending(int a, int b);
int descending(int a, int b);
void swapchar(char x[], char y[]);
void swapstruct(STU *a, STU *b);
void numberorder(STU stu[], int n, int s, int nsums[], float navers[], int (*compare)(int a, int b));
void nameorder(int n, int nsums[], float navers[], STU stu[]);
void Serach(int n, int s, STU stu[]);
void serachname(int n, int s, STU stu[]);
void analy(int n, float navers[]);
void List(int n, int s, int nsums[], float navers[], int gsums[], float gavers[], STU stu[]);
void WriteFile(int n, int s, int nsums[], float navers[], int gsums[], float gavers[], STU stu[]);
void ReadFile(int nsums[], float navers[], int gsums[], float gavers[], STU stu[], int *n, int *s);
int main()
{
int Enter, n, s, gsums[xueke], nsums[studen];
float gavers[xueke], navers[studen];
nsums[0]=0;
gsums[0]=0;
printf("Please Input students sums:\n");
scanf("%d", &n);
printf("Please Input subject sums:\n");
scanf("%d", &s);
printf("\n");
STU stu[studen];
do{
menu();
scanf("%d", &Enter);
printf("\n");
switch (Enter)
{
case 1:
{
record(stu, n, s);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 2:
{
gsum(n, s, stu, gsums);
gaver(n, s, gsums, gavers);
int i;
for(i=0; i<s; i++)
{
printf("\t===subject(%d) sums:%d===\n", i+1, gsums[i]);
printf("\t===subject(%d) avers:%f===\n", i+1, gavers[i]);
}
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 3:
{
nsum(n, s, stu, nsums);
naver(n, s, nsums, navers);
int i;
for(i=0; i<n; i++)
{
printf("\t===student(%d) sums:%d===\n", i+1, nsums[i]);
printf("\t===student(%d) avers:%f===\n", i+1, navers[i]);
}
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 4:
{
if(nsums[0] == 0)
{
nsum(n, s, stu, nsums);
naver(n, s, nsums, navers);
}
goalorder(stu, n, nsums, navers, descending);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 5:
{
if(nsums[0] == 0)
{
nsum(n, s, stu, nsums);
naver(n, s, nsums, navers);
}
goalorder(stu, n, nsums, navers, ascending);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 6:
{
numberorder(stu, n, s, nsums, navers, ascending);
int i, j;
for(i=0; i<n; i++)
{
printf("\t===student name:%s", stu[i].mingzi);
printf(",student number:%d===\n", stu[i].number);
for(j=0; j<s; j++)
{
printf("\t===subject(%d):%d===\n", j+1, stu[i].goal[j]);
}
}
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 7:
{
nameorder(n, nsums, navers, stu);
int i, j;
for(i=0; i<n; i++)
{
printf("\t===student name:%s", stu[i].mingzi);
printf(",student number:%d===\n", stu[i].number);
for(j=0; j<s; j++)
{
printf("\t===subject(%d):%d===\n", j+1, stu[i].goal[j]);
}
}
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 8:
{
Serach(n, s, stu);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 9:
{
serachname(n, s, stu);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 10:
{
if(nsums[0] == 0)
{
nsum(n, s, stu, nsums);
naver(n, s, nsums, navers);
}
analy(n, navers);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 11:
{
if(nsums[0] == 0)
{
nsum(n, s, stu, nsums);
naver(n, s, nsums, navers);
}
if(gsums[0] == 0)
{
gsum(n, s, stu, gsums);
gaver(n, s, gsums, gavers);
}
List(n, s, nsums, navers, gsums, gavers, stu);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 12:
{
if(nsums[0] == 0)
{
nsum(n, s, stu, nsums);
naver(n, s, nsums, navers);
}
if(gsums[0] == 0)
{
gsum(n, s, stu, gsums);
gaver(n, s, gsums, gavers);
}
WriteFile(n, s, nsums, navers, gsums, gavers, stu);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 13:
{
ReadFile(nsums, navers, gsums, gavers, stu, &n, &s);
printf("\t===Return menu===\n");
printf("\n");
continue;
}
case 0:
{
Enter = 14;
continue;
}
default:
{
printf("Error\n");
continue;
}
}
}while(Enter != 14);
}
//Function
void gsum(int n, int s, STU stu[], int gsums[])
{
int j, k;
for(j=0; j<s; j++)
{
gsums[j]=0;
for(k=0; k<n; k++)
{
gsums[j]+=stu[k].goal[j];
}
}
}
void gaver(int n, int s, int gsums[], float gavers[])
{
int i;
for(i=0; i<s; i++)
{
gavers[i]= (gsums[i]*1.0) / (n*1.0);
}
}
void nsum(int n, int s, STU stu[], int nsums[])
{
int j, k;
for(j=0; j<n; j++)
{
nsums[j]=0;
for(k=0; k<s; k++)
{
nsums[j]+=stu[j].goal[k];
}
}
}
void naver(int n, int s, int nsums[], float navers[])
{
int i;
for(i=0; i<n; i++)
{
navers[i]= (nsums[i]*1.0) / (s*1.0);
}
}
void menu()
{
printf("\t1. Input record\n");
printf("\t2. Calculate total and average score of every course\n");
printf("\t3. Calculate total and average score of every student\n");
printf("\t4. Sort in descending order by total score of every student\n");
printf("\t5. Sort in asending order by total score of every student\n");
printf("\t6. Sort in ascending order by number\n");
printf("\t7. Sort in dictionary order by name\n");
printf("\t8. Search by number\n");
printf("\t9. Search by name\n");
printf("\t10. Statistic analysis\n");
printf("\t11. List record\n");
printf("\t12. Write to a file\n");
printf("\t13. Read from a file\n");
printf("\t0. Exit\n");
printf("\n");
printf("Please enter your choice(such as Input 1):\n");
printf("\n");
}
void record(STU stu[], int n, int s)
{
int i,j;
for(i=0; i<n; i++)
{
printf("Input number(%d)\n", i+1);
scanf("%d", &stu[i].number);
}
printf("\n");
for(i=0; i<n; i++)
{
for(j=0; j<s; j++)
{
printf("Input students(%d) subject(%d)\n", i+1, j+1);
scanf("%d", &stu[i].goal[j]);
}
}
printf("\n");
getchar();
for(i=0; i<n; i++)
{
printf("Input name(%d)\n", i+1);
gets(stu[i].mingzi);
}
}
void goalorder(STU stu[], int n, int nsums[], float navers[], int (*compare)(int a, int b))
{
int i, j, k;
for(i=0; i<n-1; i++)
{
k = i;
for(j=i+1; j<n; j++)
{
if((*compare)(nsums[j], nsums[k]))
{
k=j;
}
if(k!=i)
{
swap(&nsums[k], &nsums[i]);
swapf(&navers[k], &navers[i]);
swapstruct(&stu[k], &stu[i]);
}
}
}
for(i=0; i<n; i++)
{
printf("\t===student name:%s", stu[i].mingzi);
printf(",student number:%d,student score:%d===\n", stu[i].number, nsums[i]);
}
}
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void swapf(float *x, float *y)
{
float temp;
temp = *x;
*x = *y;
*y = temp;
}
int ascending(int a, int b)
{
return a < b;
}
int descending(int a, int b)
{
return a > b;
}
void swapchar(char x[], char y[])
{
char temp[zifu];
strcpy(temp, x);
strcpy(x, y);
strcpy(y, temp);
}
void swapstruct(STU *a, STU *b)
{
STU temp;
temp = *a;
*a = *b;
*b = temp;
}
void numberorder(STU stu[], int n, int s, int nsums[], float navers[], int (*compare)(int a, int b))
{
int i, j, k;
for(i=0; i<n-1; i++)
{
k = i;
for(j=i+1; j<n; j++)
{
if((*compare)(nsums[j], nsums[k]))
{
k=j;
}
if(k!=i)
{
swap(&nsums[k], &nsums[i]);
swapf(&navers[k], &navers[i]);
swapstruct(&stu[k], &stu[i]);
}
}
}
}
void nameorder(int n, int nsums[], float navers[], STU stu[])
{
int i,j;
int p[6];
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(strcmp(stu[j].mingzi, stu[i].mingzi) < 0)
{
swap(&nsums[i], &nsums[j]);
swapf(&navers[i], &navers[j]);
swapstruct(&stu[i], &stu[j]);
}
}
}
}
void Serach(int n, int s, STU stu[])
{
int h, i, j, c;
printf("input students number:\n");
scanf("%d", &h);
for(i=0; i<n; i++)
{
if(stu[i].number == h)
{
printf("\t===student name:%s, student number:%d===\n",stu[i].mingzi, stu[i].number);
for(j=0; j<s; j++)
{
printf("\t===subject(%d):%d===\n", j+1, stu[i].goal[j]);
}
++c;
}
}
if(c==0)
{
printf("Sorry, Not Find\n");
}
printf("\t===Serach Complete===\n");
}
void serachname(int n, int s, STU stu[])
{
int i, j, c;
char h[zifu];
printf("input students name:\n");
getchar();
gets(h);
for(i=0; i<n; i++)
{
if(strcmp(stu[i].mingzi, h) == 0)
{
printf("\t===student name:%s, student number:%d===\n",stu[i].mingzi, stu[i].number);
for(j=0; j<s; j++)
{
printf("\t===subject(%d):%d===\n", j+1, stu[i].goal[j]);
}
++c;
}
}
if(c==0)
{
printf("Sorry, Not Find\n");
}
printf("\t===Serach Complete===\n");
}
void analy(int n, float navers[])
{
int i,A=0,B=0,C=0,D=0,E=0;
float a,b,c,d,e,N;
for(i=0; i<n; i++)
{
if(navers[i]<=100 && navers[i]>=90)
{
A+=1;
}
else if(navers[i]<=89 && navers[i]>=80)
{
B+=1;
}
else if(navers[i]<=79 && navers[i]>=70)
{
C+=1;
}
else if(navers[i]<=69 && navers[i]>=60)
{
D+=1;
}
else
{
E+=1;
}
}
N=n*1.0;
a=A*100.0/N;
b=B*100.0/N;
c=C*100.0/N;
d=D*100.0/N;
e=E*100.0/N;
printf("level best:%d, %.2f%%\n", A, a);
printf("level good:%d, %.2f%%\n", B, b);
printf("level middle:%d, %.2f%%\n", C, c);
printf("level pass:%d, %.2f%%\n", D, d);
printf("level failure:%d, %.2f%%\n", E, e);
}
void List(int n, int s, int nsums[], float navers[], int gsums[], float gavers[], STU stu[])
{
int i, k;
for(i=0; i<n; i++)
{
printf("\t===student name:%s, student number:%d===\n", stu[i].mingzi, stu[i].number);
for(k=0; k<s; k++)
{
printf("\t===project(%d):%d===\n", k+1, stu[i].goal[k]);
}
printf("\t===student sums:%d, student avers:%f===\n\n", nsums[i], navers[i]);
}
for(i=0; i<s; i++)
{
printf("\t===subject(%d) sums:%d, subject(%d) avers:%f===\n", i+1, gsums[i], i+1, gavers[i]);
}
}
void WriteFile(int n, int s, int nsums[], float navers[], int gsums[], float gavers[], STU stu[])
{
FILE *fp;
int i, k;
if((fp = fopen("score.txt", "w")) == NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
fprintf(fp, "%d %d\n", n, s);
for(i=0; i<n; i++)
{
fprintf(fp, "\t=== student name:%s ===\n", stu[i].mingzi);
fprintf(fp, "\t=== student number:%d ===\n", stu[i].number);
for(k=0; k<s; k++)
{
fprintf(fp, "\t=== project(%d):%d ===\n", k+1, stu[i].goal[k]);
}
fprintf(fp, "\t=== student sums:%d ===\n\n", nsums[i]);
fprintf(fp, "\t=== student avers:%f ===\n\n", navers[i]);
}
for(i=0; i<s; i++)
{
fprintf(fp, "\t=== subject(%d) sums:%d ===\n", i+1, gsums[i]);
fprintf(fp, "\t=== subject(%d) avers:%f ===\n", i+1, gavers[i]);
}
fclose(fp);
}
void ReadFile(int nsums[], float navers[], int gsums[], float gavers[], STU stu[], int *sn, int *ss)
{
FILE *fp;
int i, k, v;
if((fp = fopen("score.txt", "r")) == NULL)
{
printf("Failure to open score.txt!\n");
exit(0);
}
fscanf(fp, "%d %d", sn, ss);
for(i=0; i<*sn; i++)
{
fscanf(fp, "\t=== student name:%s ===\n", stu[i].mingzi);
fscanf(fp, "\t=== student number:%d ===\n", &stu[i].number);
for(k=0; k<*ss; k++)
{
fscanf(fp, "\t=== project(%d):%d ===\n", &v, &stu[i].goal[k]);
}
fscanf(fp, "\t=== student sums:%d ===\n\n", &nsums[i]);
fscanf(fp, "\t=== student avers:%f ===\n\n", &navers[i]);
}
for(i=0; i<*ss; i++)
{
fscanf(fp, "\t=== subject(%d) sums:%d ===\n", &v, &gsums[i]);
fscanf(fp, "\t=== subject(%d) avers:%f ===\n", &v, &gavers[i]);
}
fclose(fp);
for(i=0; i<*sn; i++)
{
printf("\t===student name:%s, student number:%d===\n", stu[i].mingzi, stu[i].number);
for(k=0; k<*ss; k++)
{
printf("\t===project(%d):%d===\n", k+1, stu[i].goal[k]);
}
printf("\t===student sums:%d, student avers:%f===\n\n", nsums[i], navers[i]);
}
for(i=0; i<*ss; i++)
{
printf("\t===subject(%d) sums:%d, subject(%d) avers:%f===\n", i+1, gsums[i], i+1, gavers[i]);
}
}
学生管理系统
最新推荐文章于 2022-10-16 19:07:53 发布