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

📄 addmissiondlg.cpp

📁 为学校教导用的排课系统。
💻 CPP
字号:
// AddMissionDlg.cpp : implementation file
//

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

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "Mission.h"
#include "LessonDoc.h"
#include "MainFrm.h"
/////////////////////////////////////////////////////////////////////////////
// CAddMissionDlg dialog


CAddMissionDlg::CAddMissionDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAddMissionDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAddMissionDlg)
	m_Ad_Num = _T("");
	m_Lim_Num = _T("");
	m_Num = _T("");
	m_Subject = _T("");
	m_Grade = _T("");
	m_Class = _T("");
	m_IsAllCopy = FALSE;
	//}}AFX_DATA_INIT
}


void CAddMissionDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAddMissionDlg)
	DDX_Control(pDX, IDC_COMBO_SUBJECT, m_Combo_Subject);
	DDX_Control(pDX, IDC_COMBO_LIM_WEEK, m_Combo_Lim_Week);
	DDX_Control(pDX, IDC_COMBO_GRADE, m_Combo_Grade);
	DDX_Control(pDX, IDC_COMBO_FIX_WEEK, m_Combo_Fix_Week);
	DDX_Control(pDX, IDC_COMBO_FIX_STANZA, m_Combo_Fix_Stanza);
	DDX_Control(pDX, IDC_COMBO_CLASS, m_Combo_Class);
	DDX_Control(pDX, IDC_COMBO_AD_STANZA, m_Combo_Ad_Stanza);
	DDX_Control(pDX, IDC_LIST, m_List);
	DDX_Text(pDX, IDC_EDIT_AD_NUM, m_Ad_Num);
	DDX_Text(pDX, IDC_EDIT_LIM_NUM, m_Lim_Num);
	DDX_Text(pDX, IDC_EDIT_NUM, m_Num);
	DDX_CBString(pDX, IDC_COMBO_SUBJECT, m_Subject);
	DDX_CBString(pDX, IDC_COMBO_GRADE, m_Grade);
	DDX_CBString(pDX, IDC_COMBO_CLASS, m_Class);
	DDX_Check(pDX, IDC_CHECK_ALLCOPY, m_IsAllCopy);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAddMissionDlg, CDialog)
	//{{AFX_MSG_MAP(CAddMissionDlg)
	ON_CBN_EDITCHANGE(IDC_COMBO_AD_STANZA, OnEditchangeComboAdStanza)
	ON_CBN_SELENDOK(IDC_COMBO_AD_STANZA, OnSelendokComboAdStanza)
	ON_CBN_EDITCHANGE(IDC_COMBO_CLASS, OnEditchangeComboClass)
	ON_CBN_SELENDOK(IDC_COMBO_CLASS, OnSelendokComboClass)
	ON_CBN_EDITCHANGE(IDC_COMBO_FIX_STANZA, OnEditchangeComboFixStanza)
	ON_CBN_SELENDOK(IDC_COMBO_FIX_STANZA, OnSelendokComboFixStanza)
	ON_CBN_EDITCHANGE(IDC_COMBO_FIX_WEEK, OnEditchangeComboFixWeek)
	ON_CBN_SELENDOK(IDC_COMBO_FIX_WEEK, OnSelendokComboFixWeek)
	ON_CBN_EDITCHANGE(IDC_COMBO_GRADE, OnEditchangeComboGrade)
	ON_CBN_SELENDOK(IDC_COMBO_GRADE, OnSelendokComboGrade)
	ON_CBN_EDITCHANGE(IDC_COMBO_LIM_WEEK, OnEditchangeComboLimWeek)
	ON_CBN_SELENDOK(IDC_COMBO_LIM_WEEK, OnSelendokComboLimWeek)
	ON_CBN_EDITCHANGE(IDC_COMBO_SUBJECT, OnEditchangeComboSubject)
	ON_CBN_SELENDOK(IDC_COMBO_SUBJECT, OnSelendokComboSubject)
	ON_EN_CHANGE(IDC_EDIT_AD_NUM, OnChangeEditAdNum)
	ON_EN_CHANGE(IDC_EDIT_LIM_NUM, OnChangeEditLimNum)
	ON_EN_CHANGE(IDC_EDIT_NUM, OnChangeEditNum)
	ON_LBN_SELCHANGE(IDC_LIST, OnSelchangeList)
	ON_BN_CLICKED(IDC_BUTTON_ADD1, OnButtonAdd1)
	ON_BN_CLICKED(IDC_BUTTON_ADD2, OnButtonAdd2)
	ON_BN_CLICKED(IDC_BUTTON_ADD3, OnButtonAdd3)
	ON_BN_CLICKED(IDC_BUTTON_COPY, OnButtonCopy)
	ON_BN_CLICKED(IDC_BUTTON_PASTE, OnButtonPaste)
	ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
	ON_BN_CLICKED(IDC_BUTTON_SORT, OnButtonSort)
	ON_BN_CLICKED(IDC_CHECK_ALLCOPY, OnCheckAllcopy)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAddMissionDlg message handlers

void CAddMissionDlg::OnEditchangeComboAdStanza() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
}

void CAddMissionDlg::OnSelendokComboAdStanza() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnEditchangeComboClass() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
}

void CAddMissionDlg::OnSelendokComboClass() 
{
	// TODO: Add your control notification handler code here
	int Pos=m_Combo_Class.GetCurSel();
	m_Combo_Class.GetLBText(Pos,m_Class);
	UpdateData(FALSE);
}

void CAddMissionDlg::OnEditchangeComboFixStanza() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnSelendokComboFixStanza() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnEditchangeComboFixWeek() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnSelendokComboFixWeek() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnEditchangeComboGrade() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CLessonDoc * pDoc=(CLessonDoc *)pDocument;
	for(int i=m_Combo_Class.GetCount()-1;i>=0;i--)
		m_Combo_Class.DeleteString(i);
	CString str;
	for(i=0;i<pDoc->GetClassCount(atoi(m_Grade));i++)
	{
		str.Format("%d班",i+1);
		m_Combo_Class.AddString(str);
	}
}

void CAddMissionDlg::OnSelendokComboGrade() 
{
	// TODO: Add your control notification handler code here
	int Pos=m_Combo_Grade.GetCurSel();
	m_Combo_Grade.GetLBText(Pos,m_Grade);
	UpdateData(FALSE);
	CLessonDoc * pDoc=(CLessonDoc *)pDocument;
	for(int i=m_Combo_Class.GetCount()-1;i>=0;i--)
		m_Combo_Class.DeleteString(i);
	CString str;
	for(i=0;i<pDoc->GetClassCount(atoi(m_Grade));i++)
	{
		str.Format("%d班",i+1);
		m_Combo_Class.AddString(str);
	}
}

void CAddMissionDlg::OnEditchangeComboLimWeek() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnSelendokComboLimWeek() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnEditchangeComboSubject() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnSelendokComboSubject() 
{
	// TODO: Add your control notification handler code here
	int Pos=m_Combo_Subject.GetCurSel();
	m_Combo_Subject.GetLBText(Pos,m_Subject);
	UpdateData(FALSE);
}

void CAddMissionDlg::OnChangeEditAdNum() 
{
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnChangeEditLimNum() 
{
	UpdateData(TRUE);	
}

void CAddMissionDlg::OnChangeEditNum() 
{
	UpdateData(TRUE);	// TODO: Add your control notification handler code here
	
}

void CAddMissionDlg::OnSelchangeList() 
{
	// TODO: Add your control notification handler code here
	int nMaxItems=m_List.GetSelCount();
	if(nMaxItems>0)
	{
		GetDlgItem(IDC_BUTTON_COPY)->EnableWindow(1);
		GetDlgItem(IDC_BUTTON_DEL)->EnableWindow(1);
	}
	else
	{
		GetDlgItem(IDC_BUTTON_COPY)->EnableWindow(0);
		GetDlgItem(IDC_BUTTON_DEL)->EnableWindow(0);
	}	
}

BOOL CAddMissionDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	SetWindowText(m_Head);
	if(Mission->m_Grade>0)
	{
		m_Subject=Mission->m_Subject;
		m_Grade.Format("%d年级",Mission->m_Grade);
		m_Class.Format("%d班",Mission->m_Class);
		m_Num.Format("%d",Mission->m_Num);
		for(int i=0;i<Mission->m_Request.GetSize();i++)
			m_List.AddString(Mission->m_Request.GetAt(i));
		if(m_List.GetCount()>0)
			GetDlgItem(IDC_BUTTON_SORT)->EnableWindow(TRUE);
		UpdateData(FALSE);
	}
	//填充科目组合框
	CStringArray subjectrarray;
	CLessonDoc * pDoc=(CLessonDoc *)pDocument;
	for(int i=pDoc->m_TeacherArray.GetSize()-1;i>=0;i--)
	{
		CTeacher * Teacher=(CTeacher*)pDoc->m_TeacherArray.GetAt(i);
		for(int j=Teacher->m_MissionArray.GetSize()-1;j>=0;j--)
		{
			CMission * Miss=(CMission*)Teacher->m_MissionArray.GetAt(j);
			if(!IsInStrArray(Miss->m_Subject,&subjectrarray))
				subjectrarray.Add(Miss->m_Subject);
		}
	}
	for(i=0;i<subjectrarray.GetSize();i++)
		m_Combo_Subject.AddString(subjectrarray.GetAt(i));

	//填充年级组合框
	CString Str;
	for(i=0;i<pDoc->GetGradeCount();i++)
	{
		Str.Format("%d年级",i+1);
		m_Combo_Grade.AddString(Str);
	}

	//填充班级组合框
	int G=atoi(m_Grade);
	if(G>0)
	{
		for(i=0;i<pDoc->GetClassCount(G);i++)
		{
			Str.Format("%d班",i+1);
			m_Combo_Class.AddString(Str);
		}
	}

	//填充节次组合框
	for(i=0;i<pDoc->m_Info.m_Stanza;i++)
	{
		Str.Format("第%d节",i+1);
		m_Combo_Ad_Stanza.AddString(Str);
		m_Combo_Fix_Stanza.AddString(Str);
	}
	//填充星期组合框
	for(i=0;i<pDoc->m_Info.m_Week;i++)
	{
		Str.Format("星期%d",i+1);
		m_Combo_Lim_Week.AddString(Str);
		m_Combo_Fix_Week.AddString(Str);
	}
	CLessonApp * pa=(CLessonApp *)AfxGetApp();
	if(pa->m_Request.GetSize()>0)
		GetDlgItem(IDC_BUTTON_PASTE)->EnableWindow(1);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CAddMissionDlg::IsInStrArray(CString Str, CStringArray* Array)
{
	for(int i=Array->GetSize()-1;i>=0;i--)
		if(!Array->GetAt(i).CompareNoCase(Str))
			return TRUE;
	return FALSE;
}

void CAddMissionDlg::OnOK() 
{
	// TODO: Add extra validation here
//	CString s;
//	s.Format("m_Subject=%s\nm_Grade=%s\nm_Class=%s\nm_Num=%s",m_Subject,m_Grade,m_Class,m_Num);
//	MessageBox(s);
	CLessonDoc * pDoc=(CLessonDoc *)pDocument;
	Mission->m_Name=pDoc->m_Info.m_SelectTeacherName;
	Mission->m_Subject=m_Subject;
	Mission->m_Grade=atoi(m_Grade);
	Mission->m_Class=atoi(m_Class);
	Mission->m_Num=atoi(m_Num);
	Mission->m_Request.RemoveAll();
	Mission->m_pTeacher=pDoc->GetTeacher(pDoc->m_Info.m_SelectTeacherName);
	for(int i=0;i<m_List.GetCount();i++)
	{
		CString str;
		m_List.GetText(i,str);
		Mission->m_Request.Add(str);
		int Week=0,Stanza=0;
		if(!str.Left(2).CompareNoCase("固"))
		{
			str.Delete(0,6);
			Week=atoi(str);
			str.Delete(0,3);
			Stanza=atoi(str);
			Mission->m_Sit[Week-1][Stanza-1]=TRUE;
		}
	}
	CDialog::OnOK();
}

void CAddMissionDlg::OnButtonAdd1() 
{
	// TODO: Add your control notification handler code here
	if(m_Combo_Ad_Stanza.GetCurSel()<0)return;
	CString str,comstr;
	m_Combo_Ad_Stanza.GetLBText(m_Combo_Ad_Stanza.GetCurSel(),str);
	str.Format("%s允许%d节",str,atoi(m_Ad_Num));
	for(int i=m_List.GetCount()-1;i>=0;i--)
	{
		m_List.GetText(i,comstr);
		if(!str.Left(4).CompareNoCase(comstr.Left(4)))
			return;
	}
	m_List.AddString(str);
	GetDlgItem(IDC_BUTTON_SORT)->EnableWindow(TRUE);	
}

void CAddMissionDlg::OnButtonAdd2() 
{
	// TODO: Add your control notification handler code here
	if(m_Combo_Lim_Week.GetCurSel()<0)return;
	CString str,comstr;
	m_Combo_Lim_Week.GetLBText(m_Combo_Lim_Week.GetCurSel(),str);
	str.Format("%s允许%d节",str,atoi(m_Lim_Num));
	for(int i=m_List.GetCount()-1;i>=0;i--)
	{
		m_List.GetText(i,comstr);
		if(!str.Left(5).CompareNoCase(comstr.Left(5)))
			return;
	}
	m_List.AddString(str);
	GetDlgItem(IDC_BUTTON_SORT)->EnableWindow(TRUE);	
}

void CAddMissionDlg::OnButtonAdd3() 
{
	// TODO: Add your control notification handler code here
	if(m_Combo_Fix_Week.GetCurSel()<0||m_Combo_Fix_Stanza.GetCurSel()<0)return;
	CString str,comstr;int nIndex=0,Week,Stanza;
	m_Combo_Fix_Week.GetLBText(m_Combo_Fix_Week.GetCurSel(),str);
	str.Delete(0,4);
	Week=atoi(str);
	m_Combo_Fix_Stanza.GetLBText(m_Combo_Fix_Stanza.GetCurSel(),str);
	str.Delete(0,2);
	Stanza=atoi(str);
	str.Format("固定周%d第%d节",Week,Stanza);
	for(int i=m_List.GetCount()-1;i>=0;i--)
	{
		m_List.GetText(i,comstr);
		if(!comstr.Left(4).CompareNoCase("固定"))nIndex++;
		if(!str.CompareNoCase(comstr))
			return;
	}
	if(nIndex<atoi(m_Num))
		m_List.AddString(str);
	str.Format("%d",nIndex);
	GetDlgItem(IDC_BUTTON_SORT)->EnableWindow(TRUE);
}

void CAddMissionDlg::OnButtonCopy() 
{
	// TODO: Add your control notification handler code here
	int nMaxItems=m_List.GetSelCount();
	int rgIndex[63];
	for(int x=0;x<63;x++)rgIndex[x]=-1;
	m_List.GetSelItems(nMaxItems,rgIndex);
	int nIndex;
	CLessonApp * pa=(CLessonApp *)AfxGetApp();
	CString str;
	
	pa->m_Request.RemoveAll();
	for(int i=0;i<m_List.GetSelCount();i++)
	{
		nIndex=rgIndex[i];
		m_List.GetText(nIndex,str);
		pa->m_Request.Add(str);
	}	
	GetDlgItem(IDC_BUTTON_PASTE)->EnableWindow(1);	
}

void CAddMissionDlg::OnButtonPaste() 
{
	// TODO: Add your control notification handler code here
	CLessonApp * pa=(CLessonApp *)AfxGetApp();
	CString str;BOOL b=1;
	for(int i=0;i<pa->m_Request.GetSize();i++)
	{
		for(int j=0;j<m_List.GetCount();j++)
		{
			m_List.GetText(j,str);
			b=1;
			if(!str.Left(2).CompareNoCase("第"))
			{
				if(!str.Left(3).CompareNoCase(pa->m_Request.GetAt(i).Left(3)))
				{
					b=0;
					break;
				}
			}

			if(!str.Left(2).CompareNoCase("星"))
			{
				if(!str.Left(5).CompareNoCase(pa->m_Request.GetAt(i).Left(5)))
				{
					b=0;
					break;
				}
			}

			if(!str.Left(2).CompareNoCase("固"))
			{
				if(!str.CompareNoCase(pa->m_Request.GetAt(i)))
				{
					b=0;
					break;
				}
			}
		}
		if(b)
		{
			m_List.AddString(pa->m_Request.GetAt(i));
			GetDlgItem(IDC_BUTTON_SORT)->EnableWindow(TRUE);
		}
	}	
}

void CAddMissionDlg::OnButtonDel() 
{
	// TODO: Add your control notification handler code here
	int rgIndex[63];
	for(int x=0;x<63;x++)rgIndex[x]=-1;
	int nMaxItems=m_List.GetSelCount();
	m_List.GetSelItems(nMaxItems,rgIndex);
	int i=0;int nIndex;
	
	for(i=m_List.GetSelCount()-1;i>=0;i--)
	{
		nIndex=rgIndex[i];
		m_List.DeleteString(nIndex);
	}
	GetDlgItem(IDC_BUTTON_COPY)->EnableWindow(0);
	GetDlgItem(IDC_BUTTON_DEL)->EnableWindow(0);	
}

void CAddMissionDlg::OnButtonSort() 
{
	// TODO: Add your control notification handler code here
	int Count=m_List.GetCount();CString str1,str2;
	for(int nIndex=Count-1;nIndex>=0;nIndex--)
		for(int i=nIndex-1;i>=0;i--)
		{
			m_List.GetText(nIndex,str1);
			m_List.GetText(i,str2);
			if(str2.CompareNoCase(str1)>0)
			{
				m_List.DeleteString(nIndex);
				m_List.InsertString(nIndex,str2);
				m_List.DeleteString(i);
				m_List.InsertString(i,str1);
			}
		}	
}

void CAddMissionDlg::OnCheckAllcopy() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
}

⌨️ 快捷键说明

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