📄 lessondoc.cpp
字号:
{
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 + -