大一要结束了,自然到了写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
代码编译执行后结果如图
至此, 这个简易的学生管理系统到此结束。其中的不足,希望各位大佬指正出来,谢谢。