前往BianBan.Net首页

BianBan.Net完美定义智能分班软件标杆

关于编班系统的搜索

编班程序(C语言) screen.width-333)this.width=screen.width-333' src=http://www.fjyxyz.net/Images//banner//20100307085402.swf type=application/x-shockwave-flash height=150 width=990 quality="high"> 网站首页 学校信息 教学天地 教学科研 学科专栏 德育经纬 心理驿站 教师园地 第二课堂 支部建设 教工之家 团员青年 图片中心 资源中心 校务公开 做一个有道德的人 最新消息: 关于组织参加2012年上半年教育技术水平考试的通知全国中小学教育技术水平考试-考生报名网站使用手册.ppt 2012-10-17 扶优培尖 全面提升 2014-02-24 书记勤勉励 培尖再增力 2014-02-20 新起点 新征程 新希望 2014-02-19 我校荣获“福建省教师普法教育活动优秀组织单位”称号 2014-02-14 明目标 找差距 增信心 促提升 2014-02-13 局长早春行 基层调研忙 2014-02-13 站内搜索: 标题 作者 内容 所有 全部类别 德育研究 您目前的位置:学科专栏 > 综合科 字体查看选择: 大 中 小 打印 关闭 编班程序(C语言) ( 发表时间:2010-3-8 12:56:16 访问次数:1401 ) #include<stdio.h>#include<stdlib.h>int bjs,zrs,ksbj,zh,pm; /* bjs-班级数,zrs-总人数,ksbj-开始班级 */int stu[1001][5]; /* 学生信息数组: 0-序号,1-性别,2-通寄,3-总分,4-分到的班级 */ int rul[100][21]; /* 分班结果数组,存储的是每个班级每一座号学生来自学生信息数组的序号 */ long zf[21]={0}; /* 各班总分 */int tj[5][21]; /* 统计数组: 1-男生数,2-女生数,3-通学生数,4-寄宿生数 */float man=0,women=0,tong=0,wtong=0; /* 已分班级的学生男生数、女生数、通学生数及寄宿生数 */ float pman=0,pwomen=0,ptong=0,pwtong=0; /* 已分班级的学生男生、女生、通学生及寄宿生平均值 */ int bjsx[21]; /* 当前学生最应分到的班级依次为bjsx[1]、bjsx[2]…(依平均分要求) */ /* 使班级按总分从小到大排序,得到数组bjsx[]各元素的值 */int pxbj(){ int i,j; int mc[21],cfkg[21]; for (i=0;i<=bjs;i++) mc[i]=cfkg[i]=0; for (i=1;i<=bjs;i++) { pm=1; for (j=1;j<=bjs;j++) if (zf[j]<zf[i]) pm++; while (cfkg[pm]) pm++; mc[i]=pm; cfkg[pm]=1; } for (i=1;i<=bjs;i++) for (j=1;j<=bjs;j++) if (mc[j]==i) { bjsx[i]=j; break; } return 0;} int init(){ int i,m,j; FILE *fp1; fp1=fopen("xsxxin.txt","r"); fscanf(fp1,"%d%d%d",&zrs,&bjs,&ksbj); /* 读入总人数、班级数及开始班级值 */ for(i=1;i<=zrs;i++) /* 读入每个学生信息,并保存照顾对象的信息 */ { fscanf(fp1,"%d%d%d%d%d",&stu[i][0],&stu[i][1],&stu[i][2],&stu[i][3],&stu[i][4]); /* 读入一条学生信息 */ if(stu[i][4]) /* 如果是照顾对象 */ { /* 更新统计数组 */ if(stu[i][1]) { tj[1][stu[i][4]]++; man++; } else { tj[2][stu[i][4]]++; women++; } if(stu[i][2]) { tj[3][stu[i][4]]++; tong++; } else { tj[4][stu[i][4]]++; wtong++; } zh=(i-1)/bjs+1; while (rul[zh][stu[i][4]])zh++; /* 选择照顾对象的座号 */ rul[zh][stu[i][4]]=i; /* 更新结果数组 */ if(zh>(zrs-1)/bjs+1) /* 如果座号溢出 */ { m=zh; while (rul[m][stu[i][4]]) m--; /* 寻找未照顾的座号 */ if(m<1) /* 未找到,程序安全退出 */ { printf("%d班照顾对象太多,程序自动退出!",stu[i][4]+ksbj-1); system("pause"); return 0; } while (m<zh) /* 找到有未照顾的座号,更新结果数组 */ { rul[m][stu[i][4]]=rul[m+1][stu[i][4]]; m++; } rul[m][stu[i][4]]=0; } } } fclose (fp1); } void out(){ int k; FILE *fp2; fp2=fopen("rulout.txt","w"); for (k=1;k<=zrs;k++) fprintf(fp2,"%3d\n",stu[k][4]+ksbj-1); fprintf(fp2,"\n"); for(k=1;k<=bjs;k++) fprintf(fp2,"%5.1f ",(float)zf[k]/500); fprintf(fp2,"\n"); for(k=1;k<=bjs;k++) fprintf(fp2,"%3d ",tj[1][k]); fprintf(fp2,"\n"); fclose (fp2); } void bb(){ int i,j,m,p,n,k; i=1; zh=0; while(i<=zrs) { pman=man/bjs; pwomen=women/bjs; ptong=tong/bjs; pwtong=wtong/bjs; /* 更新平均值 */ m=bjs; zh++; for (p=1;p<=bjs;p++) /* 统计该座号有几个照顾对象,还要编排多少个学生m */ if (rul[zh][p]) m--; for (j=1;j<=m;j++) /* 编排该座号的m个学生 */ { while (stu[i][4])i++; /* 选择未编班的第一个学生序号 */ if (i>zrs) break; if (stu[i][1]&&stu[i][2]) /* 如果是男通学生 */ { for(k=1;rul[zh][bjsx[k]]|| (tj[1][bjsx[k]]-pman)>(tj[2][bjsx[k]]-pwomen)|| (tj[3][bjsx[k]]-ptong)>(tj[4][bjsx[k]]-pwtong);k++); /* 选择该座号下可以编入男生且总分最小的班级 */ if(k>bjs)for(k=1;rul[zh][bjsx[k]]||(tj[1][bjsx[k]]-pman)>(tj[2][bjsx[k]]-pwomen);k++); if(k>bjs) for(k=1;rul[zh][bjsx[k]];k++); } if (stu[i][1]&& !stu[i][2]) /* 如果是男寄宿生 */ { for(k=1;rul[zh][bjsx[k]]|| (tj[1][bjsx[k]]-pman)>(tj[2][bjsx[k]]-pwomen)|| ((tj[4][bjsx[k]]-pwtong>tj[3][bjsx[k]]-ptong));k++); /* 选择该座号下可以编入男生且总分最小的班级 */ if(k>bjs)for(k=1;rul[zh][bjsx[k]]||(tj[1][bjsx[k]]-pman)>(tj[2][bjsx[k]]-pwomen);k++); if(k>bjs) for(k=1;rul[zh][bjsx[k]];k++); } if (!stu[i][1]&&stu[i][2]) /* 如果是女通学生 */ { for(k=1;rul[zh][bjsx[k]]|| ((tj[2][bjsx[k]]-pwomen)>tj[1][bjsx[k]]-pman)|| (tj[3][bjsx[k]]-ptong)>(tj[4][bjsx[k]]-pwtong);k++); /* 选择该座号下可以编入男生且总分最小的班级 */ if(k>bjs)for(k=1;rul[zh][bjsx[k]]||(tj[2][bjsx[k]]-pwomen)>(tj[1][bjsx[k]]-pman);k++); if(k>bjs) for(k=1;rul[zh][bjsx[k]];k++); } if (!stu[i][1]&& !stu[i][2]) /* 如果是女寄宿生 */ { for(k=1;rul[zh][bjsx[k]]|| ((tj[2][bjsx[k]]-pwomen)>tj[1][bjsx[k]]-pman)|| ((tj[4][bjsx[k]]-pwtong>tj[3][bjsx[k]]-ptong));k++); /* 选择该座号下可以编入男生且总分最小的班级 */ if(k>bjs)for(k=1;rul[zh][bjsx[k]]||(tj[2][bjsx[k]]-pwomen)>(tj[1][bjsx[k]]-pman);k++); if(k>bjs) for(k=1;rul[zh][bjsx[k]];k++); } stu[i][4]=bjsx[k]; /* 更新学生信息数组 */ rul[zh][bjsx[k]]=i; /* 更新结果数组 */ /* 更新统计数组 */ if(stu[i][1]) { tj[1][stu[i][4]]++; man++; } else { tj[2][stu[i][4]]++; women++; } if(stu[i][2]) { tj[3][stu[i][4]]++; tong++; } else { tj[4][stu[i][4]]++; wtong++; } i++; /* 下一序号的学生 */ } for (k=1;k<=bjs;k++) zf[k]=zf[k]+stu[rul[zh][k]][3]; /* 更新各班总分 */ pxbj(); /* 调用排序班级子函数 */ } }int main(){ int i,j; for(i=0;i<100;i++) for(j=0;j<21;j++) rul[i][j]=0; for(i=0;i<21;i++) zf[i]=0; for(i=1;i<21;i++) bjsx[i]=i; init(); bb(); out(); return 0;} 编班系统下载.rar 上一条 下一条 Copyright 2010 www.fjxyjy.net All Rights Reserved 学校地址:尤溪县解放路46号  校长:吴思廉 电话:0598-6323138 网站备案:闽ICP备11011442号 建议屏幕显示分辨率设置为 1024 × 768 技术支持: