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