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

📄 lessonview.cpp

📁 为学校教导用的排课系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// LessonView.cpp : implementation of the CLessonView class
//

#include "stdafx.h"
#include "Lesson.h"

#include "LessonDoc.h"
#include "LessonView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "MainFrm.h"
#include "AddMissionDlg.h"
#include "ChangeLessonDlg.h"
#include "PageSetDlg.h"
#include <winuser.h>
/////////////////////////////////////////////////////////////////////////////
// CLessonView

IMPLEMENT_DYNCREATE(CLessonView, CListView)

BEGIN_MESSAGE_MAP(CLessonView, CListView)
	//{{AFX_MSG_MAP(CLessonView)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_WM_KEYDOWN()
	ON_WM_KEYUP()
	ON_COMMAND(ID_ADDMISSION, OnAddmission)
	ON_UPDATE_COMMAND_UI(ID_ADDMISSION, OnUpdateAddmission)
	ON_COMMAND(ID_DELETE, OnDelete)
	ON_UPDATE_COMMAND_UI(ID_DELETE, OnUpdateDelete)
	ON_COMMAND(ID_FIX, OnFix)
	ON_UPDATE_COMMAND_UI(ID_FIX, OnUpdateFix)
	ON_WM_RBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_FILE_PRINT_SETUP, OnFilePrintSetup)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLessonView construction/destruction

CLessonView::CLessonView()
{
	// TODO: add construction code here
	m_ViewInfo=-1;
	m_Status=FALSE;

}

CLessonView::~CLessonView()
{
}

BOOL CLessonView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CLessonView drawing

void CLessonView::OnDraw(CDC* pDC)
{
	CLessonDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CListCtrl& refCtrl = GetListCtrl();
//	refCtrl.InsertItem(0, "Item!");
	// TODO: add draw code for native data here
}

void CLessonView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();


	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().
}

/////////////////////////////////////////////////////////////////////////////
// CLessonView printing

BOOL CLessonView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	CLessonDoc * pDoc=GetDocument();
	if(pDoc->m_Print.PrePrinting(pInfo))
		return DoPreparePrinting(pInfo);
	else
	{
		MessageBox("对不起!\n\n未注册版本不享有打印功能","未注册",MB_ICONERROR);
		return NULL;
	}
}

void CLessonView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	CLessonDoc * pDoc=GetDocument();
	pDoc->m_Print.Print(pDC,pInfo);
	CListView::OnPrint(pDC, pInfo);
}

void CLessonView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CLessonView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CLessonView diagnostics

#ifdef _DEBUG
void CLessonView::AssertValid() const
{
	CListView::AssertValid();
}

void CLessonView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CLessonDoc* CLessonView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLessonDoc)));
	return (CLessonDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CLessonView message handlers
void CLessonView::OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct)
{
	//TODO: add code to react to the user changing the view style of your window
}

void CLessonView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	// TODO: Add your specialized code here and/or call the base class
	CLessonDoc * pDoc = GetDocument();
	CMainFrame * pf=(CMainFrame *)AfxGetApp()->m_pMainWnd;
	if(pf)
	{
		CStatusBar * Bar=&pf->m_wndStatusBar;
		if(Bar)
		{
			CString str;
			str.Format("%d个教师,%d个任务",pDoc->GetTeacherCount(),pDoc->GetMissionCount());
			Bar->SetPaneText(1,str);
		}
	}
	if(pDoc->m_TeacherArray.GetSize()<1)
	{
		GetListCtrl().DeleteAllItems();
		return;
	}
	switch(pDoc->m_Info.m_ViewStatus)
	{
	case TEACHER_MISSION:
		BuildHead(0);
		UpdateMission();
		break;
	case TEACHER_LESSON:
		BuildHead(1);
		UpdateTeacherLesson();
		break;
	case CLASS_LESSON:
		if(pDoc->m_Info.m_SelectGrade>0)
		{
			if(pDoc->m_Info.m_SelectClass>0)
			{
				BuildHead(2);
				UpdateClassLesson();
			}
			else
			{
				BuildHead(3);
				UpdateGradeLesson();
			}
		}
		else
		{
			BuildHead(4);
			UpdateTotalLesson();
		}
		break;
	}
	
//	CMainFrame * pf=(CMainFrame *)AfxGetApp()->m_pMainWnd;
//	if(pf)
//	{
//		CString str;
//		CStatusBar * bar=&pf->m_wndStatusBar;
//		if(bar)
//		{
//			str.Format("%d个教师,%d个任务",pDoc->m_TeacherArray.GetSize(),pDoc->GetMissionCount());
//			bar->SetPaneText(1,str);
//		}
//	}	
	
}

void CLessonView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	FixMission();
	*pResult = 0;
}

void CLessonView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	CLessonDoc * pDoc=GetDocument();
	POSITION pos;int n;
	pos=GetListCtrl().GetFirstSelectedItemPosition();
	n=GetListCtrl().GetNextSelectedItem(pos);
		CString str;
		str.Format("%d,%d,%d",nChar,nRepCnt,nFlags);
		CMainFrame * pf=(CMainFrame *)AfxGetApp()->m_pMainWnd;
		CStatusBar * Bar=&pf->m_wndStatusBar;
		if(Bar)
			Bar->SetPaneText(1,str);
	switch(nChar)
	{
	case 46:
		if(pDoc->m_Info.m_ViewStatus==TEACHER_MISSION&&n>=0)
		{
//			if(MessageBox("确实要删除该任务吗?","提问",MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
				DeleteMission();
		}
		break;
	case 93:
		if(nFlags==349&&m_CtrlDown==10)
		{
			pDoc->Test();
			m_CtrlDown=0;
		}
		break;
	case 17:
		m_CtrlDown++;
		break;

	}	
	CListView::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CLessonView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	
	CListView::OnKeyUp(nChar, nRepCnt, nFlags);
}

void CLessonView::AddMission()
{
	CLessonDoc * pDoc=GetDocument();
	if(pDoc->m_TeacherArray.GetSize()<1)return;
	POSITION pos;int n;
	pos=GetListCtrl().GetFirstSelectedItemPosition();
	n=GetListCtrl().GetNextSelectedItem(pos);
	CAddMissionDlg dlg;
	CMission * Mission=new(CMission);
	if(n>=0)
	{
		Mission->Copy(pDoc->GetMission(atoi(GetListCtrl().GetItemText(n,1))
			,atoi(GetListCtrl().GetItemText(n,2))
			,GetListCtrl().GetItemText(n,0)));
	}
	dlg.pDocument=pDoc;
	dlg.Mission=Mission;
	dlg.m_Head=pDoc->m_Info.m_SelectTeacherName+"(增加任务)";
	if(dlg.DoModal()==IDOK)
	{
		if(pDoc->GetMission(Mission->m_Grade,Mission->m_Class,Mission->m_Subject)==NULL)
		{
			CTeacher * Teacher=pDoc->GetTeacher(pDoc->m_Info.m_SelectTeacherName);
			Teacher->m_MissionArray.Add(Mission);
			pDoc->UpdateAllViews(pDoc->GetListView());
			pDoc->m_Info.m_IsArrangeRight=FALSE;
			pDoc->SetModifiedFlag();
			//让所有同类任务具有相同的特殊要求
			if(dlg.m_IsAllCopy)
			{
				for(int i=pDoc->m_TeacherArray.GetSize()-1;i>=0;i--)
				{
					Teacher=(CTeacher *)pDoc->m_TeacherArray.GetAt(i);
					for(int j=Teacher->m_MissionArray.GetSize()-1;j>=0;j--)
					{
						CMission * TMiss=(CMission *)Teacher->m_MissionArray.GetAt(j);
						if(TMiss->m_Grade==Mission->m_Grade&&TMiss->m_Class==Mission->m_Class)
							continue;
						if(!TMiss->m_Subject.CompareNoCase(Mission->m_Subject))
						{
							TMiss->m_Request.RemoveAll();
							TMiss->m_Request.Append(Mission->m_Request);
						}
					}
				}
			}
		}
		else 
		{
			MessageBox("此项任务已经存在","错误",MB_ICONERROR);
			delete Mission;
		}
	}
	else 
		delete Mission;
}

void CLessonView::FixMission()
{
	CLessonDoc * pDoc=GetDocument();
	POSITION pos;int n;
	pos=GetListCtrl().GetFirstSelectedItemPosition();
	n=GetListCtrl().GetNextSelectedItem(pos);
	if(pDoc->m_Info.m_ViewStatus!=TEACHER_MISSION||n<0)return;
	CAddMissionDlg dlg;
	CMission * Mission=new(CMission);
	CMission * OldMission=pDoc->GetMission(atoi(GetListCtrl().GetItemText(n,1))
			,atoi(GetListCtrl().GetItemText(n,2))
			,GetListCtrl().GetItemText(n,0));
	Mission->Copy(OldMission);
	dlg.m_Head=pDoc->m_Info.m_SelectTeacherName+"(修改任务)";
	dlg.pDocument=pDoc;
	dlg.Mission=Mission;
	if(dlg.DoModal()==IDOK)
	{
		OldMission->Copy(Mission);
		pDoc->UpdateAllViews(pDoc->GetListView());
		pDoc->m_Info.m_IsArrangeRight=FALSE;
		pDoc->SetModifiedFlag();
			if(dlg.m_IsAllCopy)
			{
				CTeacher * Teacher;
				for(int i=pDoc->m_TeacherArray.GetSize()-1;i>=0;i--)
				{
					Teacher=(CTeacher *)pDoc->m_TeacherArray.GetAt(i);
					for(int j=Teacher->m_MissionArray.GetSize()-1;j>=0;j--)
					{
						CMission * TMiss=(CMission *)Teacher->m_MissionArray.GetAt(j);
						if(TMiss->m_Grade==Mission->m_Grade&&TMiss->m_Class==Mission->m_Class)
							continue;
						if(!TMiss->m_Subject.CompareNoCase(Mission->m_Subject))
						{
							TMiss->m_Request.RemoveAll();
							TMiss->m_Request.Append(Mission->m_Request);
						}
					}
				}
			}
	}
	delete Mission;
}

void CLessonView::DeleteMission()
{
	CLessonDoc * pDoc=GetDocument();
	POSITION pos;int n;
	pos=GetListCtrl().GetFirstSelectedItemPosition();
	n=GetListCtrl().GetNextSelectedItem(pos);
	if(n<0||MessageBox("确实要删除此项任务?","删除任务",MB_OKCANCEL|MB_ICONQUESTION)!=IDOK)return;
	int Grade=atoi(GetListCtrl().GetItemText(n,1));
	int Class=atoi(GetListCtrl().GetItemText(n,2));
	CString Subject=GetListCtrl().GetItemText(n,0);
	CMission * mission=pDoc->GetMission(Grade,Class,Subject);
//	if(mission==NULL){MessageBox("Mission=NULL");return;}
	CTeacher * teacher=(CTeacher *)mission->m_pTeacher;
//	if(teacher==NULL){MessageBox("teacher=NULL");return;}
	int nIndex=teacher->GetMissionIndex(mission);
	teacher->m_MissionArray.RemoveAt(nIndex);
	delete mission;
	GetListCtrl().DeleteItem(n);
	pDoc->m_Info.m_IsArrangeRight=FALSE;
	pDoc->SetModifiedFlag();
}

void CLessonView::BuildHead(const int flag)
{
	CHeaderCtrl * head=GetListCtrl().GetHeaderCtrl();//MessageBox("");return;
	int Count;if(head)Count=head->GetItemCount();
	switch(flag)
	{
	case 0://Mission
		if(m_ViewInfo!=0)
		{
			for(int i=Count;i>0;i--)
			{
				GetListCtrl().DeleteColumn(i-1);
				head->DeleteItem(i-1);
			}
			HeadMission();
			m_ViewInfo=0;
		}
		break;
	case 1://Teacher_Lesson
		if(m_ViewInfo!=1)
		{
			for(int i=Count;i>0;i--)
			{
				GetListCtrl().DeleteColumn(i-1);
				head->DeleteItem(i-1);
			}
			HeadTeacherLesson();
			m_ViewInfo=1;
		}
		break;
	case 2://Class_Lesson
		if(m_ViewInfo!=2)
		{
			for(int i=Count;i>0;i--)
			{
				GetListCtrl().DeleteColumn(i-1);
				head->DeleteItem(i-1);
			}
			HeadClassLesson();
			m_ViewInfo=2;
		}
		break;
	case 3://Grade_Lesson
		if(m_ViewInfo!=3)
		{
			for(int i=Count;i>0;i--)
			{
				GetListCtrl().DeleteColumn(i-1);
				head->DeleteItem(i-1);
			}
			HeadGradeLesson();
			m_ViewInfo=3;
		}
		break;
	case 4://Total_Lesson
		if(m_ViewInfo!=4)
		{

⌨️ 快捷键说明

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