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

📄 lessondoc.cpp

📁 为学校教导用的排课系统。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	{
		Teacher=(CTeacher*)m_TeacherArray.GetAt(i);
		for(int j=Teacher->m_MissionArray.GetSize()-1;j>=0;j--)
		{
			Mission=(CMission*)Teacher->m_MissionArray.GetAt(j);
			if(Mission->m_Grade==Grade&&Mission->m_Class==Class&&Mission->m_Sit[Week-1][Stanza-1]==TRUE)
				return Mission;
		}
	}
	return NULL;
}

BOOL CLessonDoc::ChangeLesson(int Grade, int Class, int Week1, int Stanza1, int Week2, int Stanza2)
{
	if(Week1==Week2&&Stanza1==Stanza2)
		return FALSE;
	if(Grade<1||Class<1||Week1<1||Stanza1<1||Week2<1||Stanza2<1)
		return FALSE;
	CMission * M1,*M2;
	M1=GetMission(Grade,Class,Week1,Stanza1);
	M2=GetMission(Grade,Class,Week2,Stanza2);
	if(M1&&M2&&M1->m_Subject.CompareNoCase(M2->m_Subject))
	{
		
		M1->m_Sit[Week1-1][Stanza1-1]=FALSE;
		M1->m_Sit[Week2-1][Stanza2-1]=TRUE;
		M1->m_Info.m_WeekLesson[Week1-1]--;
		M1->m_Info.m_StanzaLesson[Stanza1-1]--;
		M1->m_Info.m_WeekLesson[Week2-1]++;
		M1->m_Info.m_StanzaLesson[Stanza2-1]++;
		M2->m_Sit[Week1-1][Stanza1-1]=TRUE;
		M2->m_Sit[Week2-1][Stanza2-1]=FALSE;
		M2->m_Info.m_WeekLesson[Week1-1]++;
		M2->m_Info.m_StanzaLesson[Stanza1-1]++;
		M2->m_Info.m_WeekLesson[Week2-1]--;
		M2->m_Info.m_StanzaLesson[Stanza2-1]--;
		if(Isable()||MessageBox(GetListView()->m_hWnd,"如此换课可能会导致重课,\n真的要这样换吗?","非法换课",MB_OKCANCEL|MB_ICONINFORMATION)==IDOK)
			return TRUE;
		else
		{
			M1->m_Sit[Week1-1][Stanza1-1]=TRUE;
			M1->m_Sit[Week2-1][Stanza2-1]=FALSE;
			M1->m_Info.m_WeekLesson[Week1-1]++;
			M1->m_Info.m_StanzaLesson[Stanza1-1]++;
			M1->m_Info.m_WeekLesson[Week2-1]--;
			M1->m_Info.m_StanzaLesson[Stanza2-1]--;
			M2->m_Sit[Week1-1][Stanza1-1]=FALSE;
			M2->m_Sit[Week2-1][Stanza2-1]=TRUE;
			M2->m_Info.m_WeekLesson[Week1-1]--;
			M2->m_Info.m_StanzaLesson[Stanza1-1]--;
			M2->m_Info.m_WeekLesson[Week2-1]++;
			M2->m_Info.m_StanzaLesson[Stanza2-1]++;
			return FALSE;
		}
	}

	if(M1&&M2==NULL)
	{
		M1->m_Sit[Week1-1][Stanza1-1]=FALSE;
		M1->m_Sit[Week2-1][Stanza2-1]=TRUE;
		M1->m_Info.m_WeekLesson[Week1-1]--;
		M1->m_Info.m_StanzaLesson[Stanza1-1]--;
		M1->m_Info.m_WeekLesson[Week2-1]++;
		M1->m_Info.m_StanzaLesson[Stanza2-1]++;
		if(Isable()||MessageBox(GetListView()->m_hWnd,"如此换课可能会导致重课,\n真的要这样换吗?","非法换课",MB_OKCANCEL|MB_ICONINFORMATION)==IDOK)
			return TRUE;
		else
		{
			M1->m_Sit[Week1-1][Stanza1-1]=TRUE;
			M1->m_Sit[Week2-1][Stanza2-1]=FALSE;
			M1->m_Info.m_WeekLesson[Week1-1]++;
			M1->m_Info.m_StanzaLesson[Stanza1-1]++;
			M1->m_Info.m_WeekLesson[Week2-1]--;
			M1->m_Info.m_StanzaLesson[Stanza2-1]--;
			return FALSE;
		}
	}

	if(M1==NULL&&M2)
	{
		M2->m_Sit[Week1-1][Stanza1-1]=TRUE;
		M2->m_Sit[Week2-1][Stanza2-1]=FALSE;
		M2->m_Info.m_WeekLesson[Week1-1]++;
		M2->m_Info.m_StanzaLesson[Stanza1-1]++;
		M2->m_Info.m_WeekLesson[Week2-1]--;
		M2->m_Info.m_StanzaLesson[Stanza2-1]--;
		if(Isable()||MessageBox(GetListView()->m_hWnd,"如此换课可能会导致重课,\n真的要这样换吗?","非法换课",MB_OKCANCEL|MB_ICONINFORMATION)==IDOK)
			return TRUE;
		else
		{
			M2->m_Sit[Week1-1][Stanza1-1]=FALSE;
			M2->m_Sit[Week2-1][Stanza2-1]=TRUE;
			M2->m_Info.m_WeekLesson[Week1-1]--;
			M2->m_Info.m_StanzaLesson[Stanza1-1]--;
			M2->m_Info.m_WeekLesson[Week2-1]++;
			M2->m_Info.m_StanzaLesson[Stanza2-1]++;
			return FALSE;
		}
	}

	if(M1==NULL&&M2==NULL)
		return FALSE;
	return FALSE;
}

BOOL CLessonDoc::Arrange(CDialog *pDlg, int Depth)
{
	CArrangeDlg * dlg=(CArrangeDlg *)pDlg;
	CMainFrame * fp=(CMainFrame *)AfxGetApp()->m_pMainWnd;
	CStatusBar * Bar=&fp->m_wndStatusBar;
	CString Arrstr;
	InitInstanceMissions();
	for(int i=0;i<m_TempArray.GetSize();i++)
	{
		if(dlg->m_StopFlag==TRUE)
			return FALSE;
		Arrstr.Format("%s %d年级 %d班 %s",MISS(i)->m_Name,MISS(i)->m_Grade,MISS(i)->m_Class,MISS(i)->m_Subject);
		dlg->m_String.SetWindowText(Arrstr+"...");
		if(Full(i,m_Info.m_Depth)==FALSE)
		{
			if(Depth==0)
			{
				dlg->m_String.SetWindowText(Arrstr+"\n对不起!可能条件太苛刻,无法排课");
				if(Bar)
				{
					Bar->SetPaneText(1,"条件苛刻,无法排课");
				}
				m_Info.m_IsArrangeRight=FALSE;
				return FALSE;
			}
			else
			{
				m_TempArray.Add(MISS(i));
				m_TempArray.RemoveAt(i);
				i=0;
				return Arrange(pDlg,Depth-1);
			}
		}
	}
	m_Info.m_IsArrangeRight=TRUE;
	return TRUE;
}
/////////////////////////////////////
////////////////Print
BOOL CLessonDoc::PRINT::PrePrinting(CPrintInfo *pInfo)
{
	CLessonApp * pa=(CLessonApp *)AfxGetApp();
	if(pa->m_IsRegistry==FALSE)
		return FALSE;
	Style=SetStyle(pInfo);//设置风格
	//设置当前页
	switch(Style)
	{
	case 0:
		pInfo->m_nCurPage=pDoc->GetTeacherIndex(pDoc->m_Info.m_SelectTeacherName)+1;
		break;
	case 1:
		if(1)
		{
			int nIndex=0;
			for(int g=1;g<pDoc->m_Info.m_SelectGrade;g++)
				nIndex+=pDoc->GetClassCount(g);
			nIndex+=pDoc->m_Info.m_SelectClass;
			pInfo->m_nCurPage=nIndex;
		}
		break;
	case 2:
		pInfo->m_nCurPage=pDoc->m_Info.m_SelectGrade;
		break;
	default:
		pInfo->m_nCurPage=1;
	}
	pa->GetPrinterDeviceDefaults(&pInfo->m_pPD->m_pd); 
	DEVMODE *dm; 
	dm=pInfo->m_pPD->GetDevMode(); 
	ASSERT(dm!=NULL); 
	dm->dmPaperSize=256; 
	dm->dmPaperLength=pa->m_Print.m_High;
	dm->dmPaperWidth=pa->m_Print.m_Width;
	//填作息时间
	TimeStr.RemoveAll();
	CString str=pa->m_Print.m_Str;
	CString temp;
	int n=0;
	while(!str.IsEmpty())
	{
		n=str.Find(47);
		if(n<0)
		{
			TimeStr.Add(str);
			break;
		}
		temp=str.Left(n);
		TimeStr.Add(temp);
		str.Delete(0,n+1);
	}
	//填现在时间
	long t;
	time(&t);
	CTime ct(t);
	NowTime=ct.Format("%c").Left(9);
	return TRUE;
}

void CLessonDoc::PRINT::Print(CDC *pDC, CPrintInfo *pInfo)
{
	pDC->SetMapMode(MM_LOMETRIC);
	MakeForm(pDC,pInfo,Style);
	MakeText(pDC,pInfo,Style);
	MakeSubject(pDC,pInfo,Style);
}

void CLessonDoc::PRINT::MakeForm(CDC *	pDC,CPrintInfo * pInfo,int sytle)
{
	CLessonApp * pa=(CLessonApp *)AfxGetApp();
	int High=pa->m_Print.m_High-pa->m_Print.m_Up-pa->m_Print.m_Down;
	int Width=pa->m_Print.m_Width-pa->m_Print.m_Left-pa->m_Print.m_Right;
	Form.left=pa->m_Print.m_Left;
	Form.top=pa->m_Print.m_Up+High/6;
	Form.right=pa->m_Print.m_Width-pa->m_Print.m_Right;
	Form.bottom=pa->m_Print.m_High-pa->m_Print.m_Down-High/15;
	CPen nPen5,nPen3,*poPen;
	nPen3.CreatePen(PS_INSIDEFRAME,3,RGB(0,0,0));
	nPen5.CreatePen(PS_INSIDEFRAME,5,RGB(0,0,0));
	switch(sytle)
	{
	case 0:
	case 1:
		if(1)
		{
			OneH=Form.Width()/(pDoc->m_Info.m_Week+3);
			OneV=Form.Height()/(pDoc->m_Info.m_Stanza+3);
			Star.x=Form.left+OneH*3;
			Star.y=Form.top+OneV*2;
			poPen=pDC->SelectObject(&nPen5);
			pDC->Rectangle(Form.left,-1*Form.top,Form.right,-1*Form.bottom);
			//画横线
			pDC->SelectObject(&nPen3);
			pDC->MoveTo(Form.left, -1*(Form.top+OneV*2));
			pDC->LineTo(Form.right,-1*(Form.top+OneV*2));
			pDC->MoveTo(Form.left, -1*(Form.top+OneV*7));
			pDC->LineTo(Form.right,-1*(Form.top+OneV*7));
			pDC->SelectObject(poPen);
			for(int i=3;i<pDoc->m_Info.m_Stanza+2;i++)
			{
				if(i==7)continue;
				pDC->MoveTo(Form.left+OneH/2, -1*(Form.top+OneV*i));
				pDC->LineTo(Form.right,-1*(Form.top+OneV*i));
			}
				pDC->MoveTo(Form.left, -1*(Form.top+OneV*i));
				pDC->LineTo(Form.right,-1*(Form.top+OneV*i));
			//画竖线
			for(i=1;i<=pDoc->m_Info.m_Week;i++)
			{
				pDC->MoveTo(Form.right-OneH*i, -1*Form.top);
				pDC->LineTo(Form.right-OneH*i, -1*Form.bottom);
			}
			pDC->MoveTo(Form.left+OneH/2, -1*Form.top);
			pDC->LineTo(Form.left+OneH/2, -1*(Form.bottom-OneV));
			pDC->MoveTo(Form.left+OneH, -1*Form.top);
			pDC->LineTo(Form.left+OneH, -1*Form.bottom);
			//画斜线
			pDC->MoveTo(Form.left+OneH, -1*Form.top);
			pDC->LineTo(Form.left+OneH*3, -1*(Form.top+OneV*2));
			//还原画笔
			pDC->SelectObject(poPen);
		}
		break;
	case 2://年级课表格
		if(1)
		{
			int cnum=pDoc->GetClassCount(pInfo->m_nCurPage);//取得该年级的班级总数
			OneV=Form.Height()/(pDoc->m_Info.m_Stanza+4);
			if(cnum==0)break;
			OneH=Form.Width()/(pDoc->m_Info.m_Week*cnum+2);
			Star.x=Form.left+OneH*2;
			Star.y=Form.top+OneV*3;
			poPen=pDC->SelectObject(&nPen5);
			pDC->Rectangle(Form.left,-1*Form.top,Form.right,-1*Form.bottom);
			pDC->SelectObject(&nPen3);
			//画横线
			pDC->MoveTo(Form.left, -1*(Form.top+OneV*3));
			pDC->LineTo(Form.right,-1*(Form.top+OneV*3));
			pDC->MoveTo(Form.left, -1*(Form.top+OneV*8));
			pDC->LineTo(Form.right,-1*(Form.top+OneV*8));
			pDC->MoveTo(Form.left+OneH,-1*(Form.top+OneV));
			pDC->LineTo(Form.right,-1*(Form.top+OneV));
			for(int i=4;i<pDoc->m_Info.m_Stanza+3;i++)
			{
				if(i==8)continue;
				pDC->MoveTo(Form.left+OneH,-1*(Form.top+OneV*i));
				pDC->LineTo(Form.right,-1*(Form.top+OneV*i));
			}
			pDC->MoveTo(Form.left,-1*(Form.top+OneV*i));
			pDC->LineTo(Form.right,-1*(Form.top+OneV*i));
			//画竖线
			int tp=0;
			for(i=1;i<pDoc->m_Info.m_Week*cnum+2;i++)
			{
				tp=(i%cnum==2)?0:1;
				if(i==1)
				{
					pDC->MoveTo(Form.left+OneH,-1*Form.top);
					pDC->LineTo(Form.left+OneH,-1*(Form.bottom-OneV));
					continue;
				}
				pDC->MoveTo(Form.left+OneH*i,-1*(Form.top+OneV*tp));
				pDC->LineTo(Form.left+OneH*i,-1*Form.bottom);
			}
			//画斜线
			pDC->MoveTo(Form.left+OneH,-1*(Form.top+OneV));
			pDC->LineTo(Form.left+OneH*2,-1*(Form.top+OneV*3));
			//还原画笔
			pDC->SelectObject(poPen);
		}
		break;
	case 3:
		if(1)
		{
			int cnum=0;
			for(int i=0;i<pDoc->GetGradeCount();i++)
				cnum+=pDoc->GetClassCount(i+1);//取得班级总数
			OneV=Form.Height()/(pDoc->m_Info.m_Stanza+4);
			if(cnum==0)break;
			OneH=Form.Width()/(pDoc->m_Info.m_Week*cnum+2);
			Star.x=Form.left+OneH*2;
			Star.y=Form.top+OneV*3;
			poPen=pDC->SelectObject(&nPen5);
			pDC->Rectangle(Form.left,-1*Form.top,Form.right,-1*Form.bottom);
			pDC->SelectObject(&nPen3);
			//画横线
			pDC->MoveTo(Form.left, -1*(Form.top+OneV*3));
			pDC->LineTo(Form.right,-1*(Form.top+OneV*3));
			pDC->MoveTo(Form.left, -1*(Form.top+OneV*8));
			pDC->LineTo(Form.right,-1*(Form.top+OneV*8));
			pDC->MoveTo(Form.left+OneH,-1*(Form.top+OneV));
			pDC->LineTo(Form.right,-1*(Form.top+OneV));
			for(i=4;i<pDoc->m_Info.m_Stanza+3;i++)
			{
				if(i==8)continue;
				pDC->MoveTo(Form.left+OneH,-1*(Form.top+OneV*i));
				pDC->LineTo(Form.right,-1*(Form.top+OneV*i));
			}
			pDC->MoveTo(Form.left,-1*(Form.top+OneV*i));
			pDC->LineTo(Form.right,-1*(Form.top+OneV*i));
			//画竖线
			int tp=0;
			for(i=1;i<pDoc->m_Info.m_Week*cnum+2;i++)
			{
				tp=(i%cnum==2)?0:1;
				if(i==1)
				{
					pDC->MoveTo(Form.left+OneH,-1*Form.top);
					pDC->LineTo(Form.left+OneH,-1*(Form.bottom-OneV));
					continue;
				}
				pDC->MoveTo(Form.left+OneH*i,-1*(Form.top+OneV*tp));
				pDC->LineTo(Form.left+OneH*i,-1*Form.bottom);
			}
			//画斜线
			pDC->MoveTo(Form.left+OneH,-1*(Form.top+OneV));
			pDC->LineTo(Form.left+OneH*2,-1*(Form.top+OneV*3));
			//还原画笔
			pDC->SelectObject(poPen);
		}
		break;
	default:
		;
	}
}

void CLessonDoc::PRINT::MakeText(CDC *	pDC,CPrintInfo * pInfo,int sytle)
{
	CLessonApp * pa=(CLessonApp *)AfxGetApp();
	LOGFONT lf;
	lf.lfCharSet=134;

	lf.lfStrikeOut=0;
	lf.lfUnderline=0;
	lf.lfItalic=0;
	lf.lfEscapement=0;
	lf.lfHeight=Form.Height()/8;
	lf.lfWidth=Form.Width()/15;
	strcpy(lf.lfFaceName,"黑体");
	CFont f;f.CreateFontIndirect(&lf);
	CFont *poldf=pDC->SelectObject(&f);
	switch(sytle)
	{
	case 0:
		if(1)
		{
			pDC->TextOut(Form.left+Form.Width()/2-lf.lfWidth*4,-1*(Form.top-lf.lfHeight*3/2),"日 课 表");
			lf.lfHeight=OneV/3;
			lf.lfWidth=OneH/5;
			lf.lfWeight=300;
			strcpy(lf.lfFaceName,pa->m_Print.m_Font);
			f.CreateFontIndirect(&lf);
			pDC->SelectObject(&f);
			pDC->TextOut(Form.right-Form.Width()/4,-1*(Form.top-lf.lfHeight*4/3),NowTime);
			pDC->TextOut(Form.left+OneH/4-lf.lfWidth,-1*(Form.top+OneV-lf.lfHeight*2),"午");
			pDC->TextOut(Form.left+OneH/4-lf.lfWidth,-1*(Form.top+OneV+lf.lfHeight),"别");
			pDC->TextOut(Form.left+OneH*3/4-lf.lfWidth,-1*(Form.top+OneV-lf.lfHeight*2),"节");
			pDC->TextOut(Form.left+OneH*3/4-lf.lfWidth,-1*(Form.top+OneV+lf.lfHeight),"次");
			CString Name;Name.Format("教师:%s",pDoc->GetTeacher(pInfo->m_nCurPage-1)->m_Name);
			pDC->TextOut(Form.left+Form.Width()*2/3,-1*(Form.bottom+lf.lfHeight/2),Name);
			pDC->TextOut(Form.left+OneH*10/9,-1*(Form.top+lf.lfHeight*2),"时");
			pDC->TextOut(Form.left+OneH*5/3,-1*(Form.top+lf.lfHeight*4),"间");
			pDC->TextOut(Form.left+OneH*2,-1*(Form.top+lf.lfHeight*3/2),"星");
			pDC->TextOut(Form.left+OneH*5/2,-1*(Form.top+lf.lfHeight*3),"期");
			pDC->TextOut(Form.left+OneH/4-lf.lfWidth,-1*(Form.top+OneV*3),"上");
			pDC->TextOut(Form.left+OneH/4-lf.lfWidth,-1*(Form.top+OneV*5),"午");
			pDC->TextOut(Form.left+OneH/4-lf.lfWidth,-1*(Form.top+OneV*8),"下");
			pDC->TextOut(Form.left+OneH/4-lf.lfWidth,-1*(Form.top+OneV*9),"午");
			pDC->TextOut(Form.left+OneH/4-lf.lfWidth*2/3,-1*(Form.bottom-OneV+lf.lfHeight),"晚间");
			pDC->TextOut(Form.left+OneH*3/4-lf.lfWidth,-1*(Form.top+OneV*5/2-lf.lfHeight),"早");
			pDC->TextOut(Form.left+OneH*3/4-lf.lfWidth,-1*(Form.top+OneV*5/2),"读");
			CString StanzaStr;
			for(int i=1;i<=pDoc->m_Info.m_Stanza-1;i++)
			{
				StanzaStr.Format("%d",i);
				pDC->TextOut(Form.left+OneH*3/4-lf.lfWidth/2,-1*(Form.top+OneV*i+OneV*5/2-lf.lfHeight/2),StanzaStr);
			}
			lf.lfWidth=OneH/6;
			f.CreateFontIndirect(&lf);
			pDC->SelectObject(&f);
			for(i=0;i<=pDoc->m_Info.m_Stanza;i++)
			{
				if(i>TimeStr.GetSize()-1)break;
				pDC->TextOut(Form.left+OneH*5/4-lf.lfWidth*2/3,-1*(Form.top+OneV*i+OneV*5/2-lf.lfHeight/2),TimeStr.GetAt(i));
			}
			lf.lfWidth=OneH/3;
			lf.lfHeight=OneV;
			lf.lfWeight=300;
			f.CreateFontIndirect(&lf);
			pDC->SelectObject(&f);
			for(i=0;i<pDoc->m_Info.m_Week;i++)
				pDC->TextOut(Star.x+OneH*i+OneH/2-lf.lfWidth,-1*(Form.top+OneV-lf.lfHeight/2),GetNumStr(i+1));
			//还原字体
			pDC->SelectObject(poldf);

⌨️ 快捷键说明

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