⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 400mfcdlg.cpp

📁 随机自动分班级排学号软件 一个朋友在中学教书
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			if (FH == NULL)
			{
				MessageBox("error 38\nerror open file");
				return ;
			}

			for (i=1; i<=change_num; i++)
			{
				fprintf(FH,".%3d - %2d\n", change[i].num, change[i].classnum);
			}
			fclose(FH);
		}
		if (m_bSaveMiddleFile)
		{
			CSFileNamesBuf = CString("ClaNoSignFalse-") + m_SSaveFileName;
			FH = fopen(CSFileNamesBuf, "w");//分班未分学号,且调整过.
			if (FH == NULL)
			{
				MessageBox("error 39\nerror open file");
				return ;
			}
			fprintf(FH,"序号	姓名	性别	班级	暂时座号	毕业学校\n");//
 			for (j=1; j<=class_num; j++)//printf
 			{
 				for (i=1; i<=cla[j].studentnum; i++)
				{
					if (cla[j].num[i] > 0)
					{
						x= cla[j].num[i];
						fprintf(FH,"%d	%s	%s	%d	%d	%s\n", 
							stu[x].NUM,  stu[x].name, stu[x].sex, stu[x].classnum, i, stu[x].school);
					}
				}
				fprintf(FH,"\n\n");
			}
			fclose(FH);
		}
	}
///////////////////////////////////////////////////////////////////class message
	FILE *FHCSV = NULL;
	int nBoyNum = 0;
	int nBoyNumAll = 0;
	int nGirlNum = 0;
	int nMark[6] = {0};
	int nMarkAll[6] = {0};
	int nSchNum[SCH_NUM_ALL] = {0};
	CSFileNamesBuf = CString("分班后相关信息-") + m_SSaveFileName;
	FH = fopen(CSFileNamesBuf, "w");
	FHCSV = fopen(CSFileNamesBuf+CString(".csv"), "w");
	fprintf(FH,"this file is about the message of classes and schools record by lzx\n");
	fprintf(FH,"班级	总人数	男生	女生	AA	AB	AC/BB	BC	CC");
	fprintf(FHCSV,"this file is about the message of classes and schools record by lzx\n");
	fprintf(FHCSV,"班级,总人数,男生,女生,AA,AB,AC/BB,BC,CC");
	for (x=1; x<=school_num; x++)
	{
		fprintf(FH, "	%s", sch[x].school);
		fprintf(FHCSV, ",%s", sch[x].school);
	}
	fprintf(FH, "\n");
	fprintf(FHCSV, "\n");
	for (i=1; i<=class_num; i++)
	{
		nBoyNum = 0;
		nGirlNum = 0;
		memset(nMark, 0, sizeof(nMark));
		memset(nSchNum, 0, sizeof(nSchNum));
//		nMark[6] = {0};
		for (j=1; j<=cla[i].studentnum; j++)
		{
			if (0 == strcmp(stu[cla[i].num[j]].sex, "男"))
			{
				nBoyNum++;
				nBoyNumAll++;
			}
			else
			{
				nGirlNum++;
			}
			nMark[FindMark(cla[i].num[j])]++;
			nMarkAll[FindMark(cla[i].num[j])]++;
			for (x=1; x<=school_num; x++)
			{
				if (strcmp(stu[cla[i].num[j]].school,sch[x].school) == 0)
				{
					nSchNum[x]++;
					break;
				}
			}
		}
		fprintf(FH, "%d	%d	%d	%d	%d	%d	%d	%d	%d",
			i, cla[i].studentnum, nBoyNum, nGirlNum, nMark[1], nMark[2], nMark[3], nMark[4], nMark[5]);
		fprintf(FHCSV, "%d,%d,%d,%d,%d,%d,%d,%d,%d",
			i, cla[i].studentnum, nBoyNum, nGirlNum, nMark[1], nMark[2], nMark[3], nMark[4], nMark[5]);
		for (x=1; x<=school_num; x++)
		{
			fprintf(FH, "		%d", nSchNum[x]);
			fprintf(FHCSV, ",%d", nSchNum[x]);
		}
		fprintf(FH, "\n");
		fprintf(FHCSV, "\n");
	}
	fprintf(FH, "--------------------------------All---------------------------------\n");
	fprintf(FHCSV, "ALL\n");
	fprintf(FH, "%d	%d	%d	%d	%d	%d	%d	%d	%d",
			class_num, student_num, nBoyNumAll, student_num-nBoyNumAll, nMarkAll[1], nMarkAll[2], nMarkAll[3], nMarkAll[4], nMarkAll[5]);
	fprintf(FHCSV, "%d,%d,%d,%d,%d,%d,%d,%d,%d",
			class_num, student_num, nBoyNumAll, student_num-nBoyNumAll, nMarkAll[1], nMarkAll[2], nMarkAll[3], nMarkAll[4], nMarkAll[5]);
	for (x=1; x<=school_num; x++)
	{
		fprintf(FH, "		%d", sch[x].studentnum);
		fprintf(FHCSV, ",%d", sch[x].studentnum);
	}
	fprintf(FH, "\n");
	fprintf(FHCSV, "\n");
	fprintf(FH, "the school num is : %d	\n", school_num);
	fprintf(FHCSV, "the school num is : %d	\n", school_num);
	fclose(FH);
	fclose(FHCSV);
///////////////////////////////////////////////////////////////////rand the clssssign
	
	FH = fopen(m_SSaveFileName, "w");//m_bSaveMiddleFile
	FHCSV = fopen(m_SSaveFileName+CString(".csv"), "w");
	fprintf(FH,"这是最后输出文件,随机排班级及座号,学号可以由年度,学校,编号,班级,座号组成\n");//
	fprintf(FH,"序号	姓名	性别	语文	数学	班级	座号	毕业学校\n");//
	fprintf(FHCSV,"序号,姓名,性别,语文,数学,班级,座号,毕业学校\n");
	for (x=1; x<=class_num; x++)
	{
		memset(peoplebuf,0,STU_NUM_ALL40);
		for (y=1; y<=cla[x].studentnum; y++)//
		{
			do 
			{
				z = rand();
				z = z%cla[x].studentnum +1;
			} while(peoplebuf[z] != 0);
			peoplebuf[z] = y;
		}

		for (y=1; y<=cla[x].studentnum; y++)
		{
			z = cla[x].num[peoplebuf[y]];
			stu[z].clssssign = y;
			fprintf(FH,"%d	%s	%s	%c	%c	%d	%d	%s\n", 
				stu[z].NUM,  stu[z].name, stu[z].sex, stu[z].chinese, 
				stu[z].math, stu[z].classnum, stu[z].clssssign, stu[z].school);
			fprintf(FHCSV,"%d,%s,%s,%c,%c,%d,%d,%s\n", 
				stu[z].NUM,  stu[z].name, stu[z].sex, stu[z].chinese, 
				stu[z].math, stu[z].classnum, stu[z].clssssign, stu[z].school);
		}
		fprintf(FH,"\n\n");
		fprintf(FHCSV,"\n\n");

	}
	fclose(FH);
	fclose(FHCSV);
///////////////////////////////////////////////////////////////////////////////////////
	CSFileNamesBuf = CString("类似原件-") + m_SSaveFileName;
	FH = fopen(CSFileNamesBuf, "w");
	fprintf(FH,"该文件排列与原文件顺序一样,便于统计,打开Microsoft Excel导入该数据选择TAB键隔开即可\n");//
	fprintf(FH,"序号	班级	座号	姓名	性别	语文	数学	毕业学校\n");//
	for (z=1; z<=student_num; z++)
	{
		fprintf(FH,"%d	%d	%d	%s	%s	%c	%c	%s\n", 
				stu[z].NUM,  stu[z].classnum, stu[z].clssssign, stu[z].name,
				stu[z].sex, stu[z].chinese, stu[z].math, stu[z].school);
	}
	fclose(FH);


	FH = fopen(CSFileNamesBuf+CString(".csv"), "w");
	fprintf(FH,"该文件排列与原文件顺序一样,便于统计,打开Microsoft Excel导入该数据选择TAB键隔开即可\n");//
	fprintf(FH,"序号,班级,座号,姓名,性别,语文,数学,毕业学校\n");//
	for (z=1; z<=student_num; z++)
	{
		fprintf(FH,"%d,%d,%d,%s,%s,%c,%c,%s\n", 
				stu[z].NUM,  stu[z].classnum, stu[z].clssssign, stu[z].name,
				stu[z].sex, stu[z].chinese, stu[z].math, stu[z].school);
	}
	fclose(FH);

	MessageBox("OK!\n产生的文件与源文件在同一个目录下");
	UpdateData(FALSE);
}

void CMy400MFCDlg::OnHelp_lzx() 
{
	// TODO: Add your control notification handler code here
	MessageBox("\
本软件适用于小学升初中只有两科成绩,且成绩只有A,B,C三个标号.\n\
\n\
点击浏览源文件,选择要排号的名单,限TXT文本\n\
选择完源文件后,两个不可编辑的编辑框显示文件路径及读取的学生数.\n\
若读取有误,学生数则只显示正确的个数\n\
可以选择保存中间文件,查看ReadByLzx.txt中实际读到的数据情况\n\
\n\
源文件读取出错?\n\
那请点击'生成源文件样本'按钮\n\
将在源文件同一目录下产生'源文件及说明.txt'文件,详细格式说明都在里面\n\
\n\
要分为几个班级,请在班级数填写数字,默认为:10\n\
\n\
最后输出的文件名,请在另存为填写字符串,默认为:输出.txt\n\
\n\
全部设置完后点击开始排班级按钮即可\n\
\n\
产生的文件与源文件在同一个目录下\n\
\n\
要退同该程序点击退出程序即可,或者直接关闭窗口\n\
\n\
若还有疑问,请联系MSN/E-mail:fjptlzx@hotmail.com\n\
");	
}

void CMy400MFCDlg::OnButMakeSample() 
{
	// TODO: Add your control notification handler code here
	FH = fopen("源文件及说明.txt", "w");
	if (NULL == FH)
	{
		MessageBox("error 40\nopen the file error!");
		return;
	}
	fprintf(FH, "序号	姓名	性别	语文	数学	生源地\n");
	fprintf(FH, "1	赵一山	女	A	A	实验中心小学\n");
	fprintf(FH, "3	张小二	女	A	A	实验中心小学\n");
	fprintf(FH, "5	张三	女	A	A	实验中心小学\n");
	fprintf(FH, "13	李四	男	A	A	东峰小学\n");
	fprintf(FH, "13	王五班	男	C	C	一中分校小学部\n");
	fprintf(FH, "14	小六	男	A	B	东峰小学\n");
	fprintf(FH, "15	小七	男	A	C	一中分校小学部\n");
	fprintf(FH, "16	八哥	男	A	B	一中分校小学部\n");
	fprintf(FH, "17	小九	女	A	B	东峰小学\n");
	fprintf(FH, "20	十号	女	C	B	东峰小学\n");
	fprintf(FH, "20	十一	男	A	B	东峰小学\n");
	fprintf(FH, "21	十二	男	B	B	东峰小学\n");
	fprintf(FH, "22	十三	女	A	B	东峰小学\n");
	fprintf(FH, "23	十四	男	A	C	一中分校小学部\n");
	fprintf(FH, "24	十五	男	A	B	一中分校小学部\n");
	fprintf(FH, "25	十六	女	A	A	实验中心小学\n");
	fprintf(FH, "26	十七	男	A	A	实验中心小学\n");
	fprintf(FH, "27	十八	女	A	A	实验中心小学\n");
	fprintf(FH, "28	十九	男	C	B	前沁小学\n");
	fprintf(FH, "29	二十	男	A	A	前沁小学\n");
	fprintf(FH, "31	二一	男	B	B	前沁小学\n");
	fprintf(FH, "32	二二	女	A	A	前沁小学\n");
	fprintf(FH, "33	二三	男	C	C	前沁小学\n");
	fprintf(FH, "34	二四	男	A	A	前沁小学\n");
	fprintf(FH, "35	二五	男	A	B	前沁小学\n");
	fprintf(FH, "36	二六	女	A	A	前沁小学\n");
	fprintf(FH, "37	二七	女	B	A	前沁小学\n");
	fprintf(FH, "38	二八	男	A	A	前沁小学\n");
	fprintf(FH, "15	二九	女	A	B	前沁小学\n");
	fprintf(FH, "14	三十	男	C	A	前沁小学\n");
	fprintf(FH, "1	1赵一山	女	A	A	实验中心小学\n");
	fprintf(FH, "3	1张小二	女	A	A	实验中心小学\n");
	fprintf(FH, "5	1张三	女	A	A	实验中心小学\n");
	fprintf(FH, "13	1李四	男	A	A	东峰小学\n");
	fprintf(FH, "13	1王五班	男	C	C	一中分校小学部\n");
	fprintf(FH, "14	1小六	男	A	B	东峰小学\n");
	fprintf(FH, "15	1小七	男	A	C	一中分校小学部\n");
	fprintf(FH, "16	1八哥	男	A	B	一中分校小学部\n");
	fprintf(FH, "17	1小九	女	A	B	东峰小学\n");
	fprintf(FH, "20	1十号	女	C	B	东峰小学\n");
	fprintf(FH, "20	1十一	男	A	B	东峰小学\n");
	fprintf(FH, "21	1十二	男	B	B	东峰小学\n");
	fprintf(FH, "22	1十三	女	A	B	东峰小学\n");
	fprintf(FH, "23	1十四	男	A	C	一中分校小学部\n");
	fprintf(FH, "24	1十五	男	A	B	一中分校小学部\n");
	fprintf(FH, "25	1十六	女	A	A	实验中心小学\n");
	fprintf(FH, "26	1十七	男	A	A	实验中心小学\n");
	fprintf(FH, "27	1十八	女	A	A	实验中心小学\n");
	fprintf(FH, "28	1十九	男	C	B	前沁小学\n");
	fprintf(FH, "29	1二十	男	A	A	前沁小学\n");
	fprintf(FH, "31	1二一	男	B	B	前沁小学\n");
	fprintf(FH, "32	1二二	女	A	A	前沁小学\n");
	fprintf(FH, "33	1二三	男	C	C	前沁小学\n");
	fprintf(FH, "34	1二四	男	A	A	前沁小学\n");
	fprintf(FH, "35	1二五	男	A	B	前沁小学\n");
	fprintf(FH, "36	1二六	女	A	A	前沁小学\n");
	fprintf(FH, "37	1二七	女	B	A	前沁小学\n");
	fprintf(FH, "38	1二八	男	A	A	前沁小学\n");
	fprintf(FH, "15	1二九	女	A	B	前沁小学\n");
	fprintf(FH, "14	1三十	男	C	A	前沁小学\n\n\n");

	fprintf(FH, "\
本软件适用于小学升初中只有两科成绩,且成绩只有A,B,C三个标号.\n\
说明一下:该随机自动分班级排学号软件,\n\
不仅有有考虑到,成绩的均匀,\n\
还考虑到生源地(即原毕业学校),性别,及班级学生个数的均匀.\n\
一般来说,每个班级的总体都比较均匀\n\
\n\
作者懒人居然这样造名单.哈哈\n\
\n\
格式说明:\n\
一.第一行就是标题头,一共有六项,每项之间用不少于一个TAB键隔开,每一次名字可更改\n\
二.从第二行起就是具体的内容了.六项的内容格式如上所示,生源地就是学校名称,每项之间用不少于一个TAB键隔开\n\
\n\
细节说明:\n\
两科成绩必需是大写的'A','B','C'中的一种\n\
姓名不多于四个汉字或不多于八个字符\n\
另序号是无关紧要的,可以相同,也可以无序,但可以标出来给自己定位用的,这样核对起来比较容易\n\
\n\
\n\
可以将上面格式单独复制到另一空文件,最后一行最多一个换行键.然后排一下号做实验,体验效果\n\
当然,如果你也懒的话,就不要复制出来,直接读取这个文件,读取时会出错,先不管它,反正照样能够读出六十个学生的数据.可以做实验\n\
\n\
操作说明如下所示:\n\
");



	fprintf(FH, "\n\n\
点击浏览源文件,选择要排号的名单,限TXT文本\n\
选择完源文件后,两个不可编辑的编辑框显示文件路径及读取的学生数.\n\
若读取有误,学生数则只显示正确的个数\n\
可以选择保存中间文件,查看ReadByLzx.txt中实际读到的数据情况\n\
\n\
源文件读取出错?\n\
那请点击'生成源文件样本'按钮\n\
将在源文件同一目录下产生'源文件及说明.txt'文件,详细格式说明都在里面\n\
\n\
要分为几个班级,请在班级数填写数字,默认为:10\n\
\n\
最后输出的文件名,请在另存为填写字符串,默认为:输出.txt\n\
\n\
全部设置完后点击开始排班级按钮即可\n\
\n\
产生的文件与源文件在同一个目录下\n\
\n\
要退同该程序点击退出程序即可,或者直接关闭窗口\n\
\n\
若还有疑问,请联系MSN or E-mail:fjptlzx@hotmail.com\n\
                        E-mail:fjptlzx.student@sina.com\n\
");
	fclose(FH);
	MessageBox("File name:源文件及说明.txt is OK!");
	return;
}
int CMy400MFCDlg::FindMark(int stu_num)
{
	if ((stu[stu_num].math=='A') && (stu[stu_num].chinese=='A'))
	{
		return 1;
	}
	else if ((stu[stu_num].math=='A') && (stu[stu_num].chinese=='B'))
	{
		return 2;
	}
	else if ((stu[stu_num].math=='B') && (stu[stu_num].chinese=='A'))
	{
		return 2;
	}
	else if ((stu[stu_num].math=='A') && (stu[stu_num].chinese=='C'))
	{
		return 3;
	}
	else if ((stu[stu_num].math=='C') && (stu[stu_num].chinese=='A'))
	{
		return 3;
	}
	else if ((stu[stu_num].math=='B') && (stu[stu_num].chinese=='B'))
	{
		return 3;
	}
	else if ((stu[stu_num].math=='B') && (stu[stu_num].chinese=='C'))
	{
		return 4;
	}
	else if ((stu[stu_num].math=='C') && (stu[stu_num].chinese=='B'))
	{
		return 4;
	}
	else if ((stu[stu_num].math=='C') && (stu[stu_num].chinese=='C'))
	{
		return 5;
	}
	else
	{
		MessageBox("error 41\nthe mark is not between A-C");
		return 0;
	}
}
///////////////////////////////////////////////////对更改班级的格式的要求如下:
//更改人数不多于40人,文件必需是"c:\\change.txt"
//更改后将产生另一个文件"c:\\ReadChange.txt"
//change.txt格式:中间只能一个TAB键;顶格写,如下表示要调整三个人,即序号为1,2,3的必定会分到 一班.(注:没有'//'号)

//1	1
//2	1
//3	1

//
int CMy400MFCDlg::ReadChange(void)
{
	char rbuf[2] = {0};
	char buf[50] = {0};
	int i = 0;

	FH = fopen("c:\\change.txt", "r+");
	if (FH == NULL)
	{
		return NULL;
	}
	fseek(FH,0,SEEK_SET);

	memset(buf, 0, 50);
	i = 0;
	change_num = 0;
	while (1)
	{
		change_num++;
		if (change_num > 40)
		{
			change_num--;
			fclose(FH);
			return change_num;
		}
		memset(buf, 0, 50);
		i = 0;
		do //read NUM
		{
			if (1 != fread(rbuf, 1, 1, FH))
			{
				change_num--;
				fclose(FH);
				return change_num;
			}
			buf[i] = rbuf[0];
			if (0x09 == rbuf[0])
			{
				buf[i] = 0;
				change[change_num].num = atoi(buf);
				break;
			}
			i++;
		} while(1);

		memset(buf, 0, 50);
		i = 0;
		do //read sign
		{
			if (1 != fread(rbuf, 1, 1, FH))
			{
				fclose(FH);
				if (i != 0)
				{
					buf[i] = 0;
					change[change_num].classnum = atoi(buf);
					return change_num;
				}
				change_num--;
				return change_num;
			}
			buf[i] = rbuf[0];
			if (0x0a == rbuf[0])
			{
				if (0x0d == buf[i-1])
				{
					buf[i-1] = 0;
				}
				buf[i] = 0;
				change[change_num].classnum = atoi(buf);
				break;
			}
			i++;
		} while(1);
	}
	fclose(FH);
	return change_num;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -