学生管理系统

//学生管理系统,加入文件
#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]);
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值