学生管理系统1.0

     大一要结束了,自然到了写c语言结课大作业的时候了。昨天帮一个高中同学写了他的大作业,也就是今天的学生管理系统1.0--毫无美感和技术的代码堆砌。我自己的大作业老师还没布置下来,不过估计比这个难,所以它就是未来的1.1版本。

     接下来,还是万年不变的贴代码时间(只有一个main函数)。其中为了让那位同学好写实验报告,只是简单的三个函数,所以有很多的代码复用问题,导致代码冗余,望大神勿喷。

     因为大作业布置时就给了相应的信息文件,所以直接引用就可以了,已经附在代码下方。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
	int num;
	char name[20];
	double math_score;
	double eng_score;
	double com_score;
	double sum;
	double ave;
}stu;
typedef struct pstudent
{
	char num[10];
	char name[10];
}pstu;
void find_preppy()
{
	FILE *fp1,*fp2,*fp3;
	stu *s1[50],*s2[50];
	pstu *s3[50];
	int i=0;
	int j=0;
	int sum1,sum2,sum3;
	if((fp1=fopen("class1.txt","r+"))==NULL)
	{
		printf("error open\n");
	}
	if((fp2=fopen("class2.txt","r+"))==NULL)
	{
		printf("error open\n");
	}
	if((fp3=fopen("preppy.txt","r+"))==NULL)
	{
		printf("error open\n");
	}
	while(!feof(fp1))
	{
		s1[i]=(stu*)malloc(sizeof(stu));
		fscanf(fp1,"%d",&s1[i]->num);
		fscanf(fp1,"%s",s1[i]->name);
		fscanf(fp1,"%lf",&s1[i]->math_score);
		fscanf(fp1,"%lf",&s1[i]->eng_score);
		fscanf(fp1,"%lf",&s1[i]->com_score);
		i++;
	}
	sum1=i;
	i=0;
	while(!feof(fp2))
	{
		s2[i]=(stu*)malloc(sizeof(stu));
		fscanf(fp2,"%d",&s2[i]->num);
		fscanf(fp2,"%s",s2[i]->name);
		fscanf(fp2,"%lf",&s2[i]->math_score);
		fscanf(fp2,"%lf",&s2[i]->eng_score);
		fscanf(fp2,"%lf",&s2[i]->com_score);
		i++;
	}
	sum2=i;
	i=0;
	while(!feof(fp3))
	{
		s3[i]=(pstu*)malloc(sizeof(pstu));
		fscanf(fp3,"%s",s3[i]->num);
		fscanf(fp3,"%s",s3[i]->name);
		i++;
	}
	sum3=i;
	for(i=0;i<sum1;i++)
	{
		s1[i]->sum=s1[i]->math_score+s1[i]->eng_score+s1[i]->com_score;
		s1[i]->ave=s1[i]->sum/3;
	}
	for(i=0;i<sum2;i++)
	{
		s2[i]->sum=s2[i]->math_score+s2[i]->eng_score+s2[i]->com_score;
		s2[i]->ave=s2[i]->sum/3;
	}
	for(i=0;i<sum1;i++)
	{
		for(j=0;j<sum3;j++)
		{
			if(strcmp(s1[i]->name,s3[j]->name)==0)
			{
				if(s1[i]->com_score>=40)
				{
					printf("%d ",s1[i]->num);
					printf("%s ",s1[i]->name);
					printf("%.2lf\n",s1[i]->com_score);
				}
			}
		}
	}

	for(i=0;i<sum2;i++)
	{
		for(j=0;j<sum3;j++)
		{
			if(strcmp(s2[i]->name,s3[j]->name)==0)
			{
				if(s2[i]->com_score>=40)
				{
					printf("%d ",s2[i]->num);
					printf("%s ",s2[i]->name);
					printf("%.2lf\n",s2[i]->com_score);
				}
			}
		}
	}
	fclose(fp1);
	fclose(fp2);
	fclose(fp3);
}
void find_top()
{
	FILE *fp1,*fp2,*fp3;
	stu *s[50];
	int i=0;
	int j=0;
	int total=0;
	int tnum;
	char tname[50];
	double tmath,teng,tcom,tsum,tave;
	if((fp1=fopen("class1.txt","r+"))==NULL)
	{
		printf("error open\n");
	}
	if((fp2=fopen("class2.txt","r+"))==NULL)
	{
		printf("error open\n");
	}
	if((fp3=fopen("top10.txt","r+"))==NULL)
	{
		printf("error open\n");
	}
	while(!feof(fp1))
	{
		s[i]=(stu*)malloc(sizeof(stu));
		fscanf(fp1,"%d",&s[i]->num);
		fscanf(fp1,"%s",s[i]->name);
		fscanf(fp1,"%lf",&s[i]->math_score);
		fscanf(fp1,"%lf",&s[i]->eng_score);
		fscanf(fp1,"%lf",&s[i]->com_score);
		i++;
	}
	while(!feof(fp2))
	{
		s[i]=(stu*)malloc(sizeof(stu));
		fscanf(fp2,"%d",&s[i]->num);
		fscanf(fp2,"%s",s[i]->name);
		fscanf(fp2,"%lf",&s[i]->math_score);
		fscanf(fp2,"%lf",&s[i]->eng_score);
		fscanf(fp2,"%lf",&s[i]->com_score);
		i++;
	}
	total=i;
	for(i=0;i<total;i++)
	{
		s[i]->sum=s[i]->math_score+s[i]->eng_score+s[i]->com_score;
		s[i]->ave=s[i]->sum/3;
	}
	for(i=0;i<total-1;i++)
	{
		for(j=0;j<total-i-1;j++)
		{
			if(s[j]->ave<s[j+1]->ave)
			{
				tnum=s[j]->num;
				s[j]->num=s[j+1]->num;
				s[j+1]->num=tnum;
				strcpy(tname,s[j]->name);
				strcpy(s[j]->name,s[j+1]->name);
				strcpy(s[j+1]->name,tname);
				tmath=s[j]->math_score;
				s[j]->math_score=s[j+1]->math_score;
				s[j+1]->math_score=tmath;
				teng=s[j]->eng_score;
				s[j]->eng_score=s[j+1]->eng_score;
				s[j+1]->eng_score=teng;
				tcom=s[j]->com_score;
				s[j]->com_score=s[j+1]->com_score;
				s[j+1]->com_score=tcom;
				tsum=s[j]->sum;
				s[j]->sum=s[j+1]->sum;
				s[j+1]->sum=tsum;
				tave=s[j]->ave;
				s[j]->ave=s[j+1]->ave;
				s[j+1]->ave=tave;
			}
			
		}
	}
	for(i=0;i<10;i++)
	{
		fprintf(fp3,"%d ",s[i]->num);
		fprintf(fp3,"%s\n",s[i]->name);
	}

	fclose(fp1);
	fclose(fp2);
	fclose(fp3);
}
void student_group()
{
	FILE *fp1;
	stu *s[50];
	int group[15][3];
	int total;
	int i=0;
	int j=0;
	int flag=0;
	int k=0;
	int tnum;
	char tname[50];
	double tmath,teng,tcom,tsum,tave;
	if((fp1=fopen("class1.txt","r+"))==NULL)
	{
		printf("error open\n");
	}
	while(!feof(fp1))
	{
		s[i]=(stu*)malloc(sizeof(stu));
		fscanf(fp1,"%d",&s[i]->num);
		fscanf(fp1,"%s",s[i]->name);
		fscanf(fp1,"%lf",&s[i]->math_score);
		fscanf(fp1,"%lf",&s[i]->eng_score);
		fscanf(fp1,"%lf",&s[i]->com_score);
		i++;
	}
	total=i;
	for(i=0;i<total-1;i++)
	{
		for(j=0;j<total-i-1;j++)
		{
			if(s[j]->math_score<s[j+1]->math_score)
			{
				tnum=s[j]->num;
				s[j]->num=s[j+1]->num;
				s[j+1]->num=tnum;
				strcpy(tname,s[j]->name);
				strcpy(s[j]->name,s[j+1]->name);
				strcpy(s[j+1]->name,tname);
				tmath=s[j]->math_score;
				s[j]->math_score=s[j+1]->math_score;
				s[j+1]->math_score=tmath;
				teng=s[j]->eng_score;
				s[j]->eng_score=s[j+1]->eng_score;
				s[j+1]->eng_score=teng;
				tcom=s[j]->com_score;
				s[j]->com_score=s[j+1]->com_score;
				s[j+1]->com_score=tcom;
				tsum=s[j]->sum;
				s[j]->sum=s[j+1]->sum;
				s[j+1]->sum=tsum;
				tave=s[j]->ave;
				s[j]->ave=s[j+1]->ave;
				s[j+1]->ave=tave;
			}
			
		}
	}
	for(i=0;i<10;i++)
	{
		group[i][0]=s[i]->num;
	}
	for(i=0;i<total-1;i++)
	{
		for(j=0;j<total-i-1;j++)
		{
			if(s[j]->eng_score>s[j+1]->eng_score)
			{
				tnum=s[j]->num;
				s[j]->num=s[j+1]->num;
				s[j+1]->num=tnum;
				strcpy(tname,s[j]->name);
				strcpy(s[j]->name,s[j+1]->name);
				strcpy(s[j+1]->name,tname);
				tmath=s[j]->math_score;
				s[j]->math_score=s[j+1]->math_score;
				s[j+1]->math_score=tmath;
				teng=s[j]->eng_score;
				s[j]->eng_score=s[j+1]->eng_score;
				s[j+1]->eng_score=teng;
				tcom=s[j]->com_score;
				s[j]->com_score=s[j+1]->com_score;
				s[j+1]->com_score=tcom;
				tsum=s[j]->sum;
				s[j]->sum=s[j+1]->sum;
				s[j+1]->sum=tsum;
				tave=s[j]->ave;
				s[j]->ave=s[j+1]->ave;
				s[j+1]->ave=tave;
			}
			
		}
	}
	for(i=0;i<10;i++)
	{
		group[i][1]=s[i]->num;
	}
	
	for(i=0;i<total;i++)
	{
		for(j=0;j<10;j++)
		{
			if(s[i]->num==group[j][0]||s[i]->num==group[j][1])
			{
				flag=1;
				break;
			}
		}
		if(flag==1)
		{
			flag=0;
			continue;
		}
		if(flag==0)
		{
			group[k][2]=s[i]->num;
			k++;
		}
	}
	for(i=0;i<10;i++)
	{
		printf("%d ",group[i][0]);
		printf("%d ",group[i][1]);
		printf("%d\n",group[i][2]);
	}
	fclose(fp1);
}
int main()
{
    int n;
    while(1)
   {
        printf("\t\t学生管理系统\n");
        printf("1.查找预科生\n");
        printf("2.查找前十名\n");
        printf("3.学生分组\n");
        printf("0.退出\n");
        printf("请输入你选择的功能序号:");
        scanf("%d",&n);
        if(n==1)
            find_preppy();
        if(n==2)
            find_top();
        if(n==3)
            student_group();
        if(n==0)
            exit(1);
   }
    return 0;
}

其中class1.txt文件内容如下

10101 m1    91    90    74
10102 m2    72    85    85
10103 m3    66    47    80
10104 m4    80    87    88
10105 m5    72    91    62
10106 m6    84    48    51
10107 m7    90    80    81
10108  m8    87    84    77
10109  m9    77    99    65
10110  m10   81    83    52
10111  m11   90    94    79
10112  m12   74    92    88
10113  m13   75    80    84
10114  m14   52    64    87
10115  m15   75    67    78
10116  m16   76    79    42
10117  m17   68    95    72
10118  m18   68    95    67
10119  m19   80    67    36
10120  m20   80    58    93
10121  m21   82    60    76
10122  m22   83    80    36
10123  m23   76    94    82
10124  m24   74    75    91
10125  m25   84    71    85
10126  m26   90    90    85
10127  m27   91    70    86
10128  m28   80    93    95
10129  m29   91    66    91
10130  m30   69    83    90

class2.txt文件内容如下

10201  m31   92    80    74
10202  m32   82    65    85
10203  m33   76    52    84
10204  m34   90    76    88
10205  m35   62    79    65
10206  m36   84    50    58
10207  m37   90    77    81
10208  m38   85    86    77
10209  m39   67    99    65
10210  m40   81    86    72
10211  m41   90    94    79
10212  m42   64    92    88
10213  m43   85    79    84
10214  m44   52    64    87
10215  m45   75    67    38
10216  m46   76    80    72
10217  m47   78    95    72
10218  m48   68    85    67
10219  m49   85    68    46
10220  m50   80    55    93
10221  m51   92    66    76
10222  m52   86    82    71
10223  m53   77    93    80
10224  m54   80    75    91
10225  m55   84    54    85
10226  m56   88    90    88
10227  m57   96    69    88
10228  m58   92    93    95
10229  m59   98    69    90
10230  m60   76    85    92

preppy.txt文件内容如下

s10104 m4
s10110 m10
s10119 m19
s10205 m35
s10206 m36
s10215 m45
s10219 m49

代码编译执行后结果如图


    至此, 这个简易的学生管理系统到此结束。其中的不足,希望各位大佬指正出来,谢谢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值