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

📄 jcbdlg.cpp

📁 本程序使用VC++6.0主要完成操作系统的作业调度包括时间片轮转法,先进现出算法
💻 CPP
字号:
// JCBDlg.cpp : implementation file
//

#include "stdafx.h"
#include "JCB.h"
#include "JCBDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



extern int StartTime;
extern int Jobs;
extern TJCB Tjobs[];
extern int Queue[];
extern int Stack[];
extern int rTime;
extern int RunTime;


/////////////////////////////////////////////////////////////////////////////
// CJCBDlg dialog



CJCBDlg::CJCBDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CJCBDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CJCBDlg)
	m_ReqTime = 0;
	m_InputHour = 0;
	m_InputMin = 0;
	m_ReqMEM = 0;
	m_ReqPrinter = 0;
	//}}AFX_DATA_INIT
}


void CJCBDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CJCBDlg)
	DDX_Control(pDX, IDC_SLIDER_R, m_SliderR);
	DDX_Control(pDX, IDC_SLIDER_G, m_SliderG);
	DDX_Control(pDX, IDC_SLIDER_B, m_SliderB);
	DDX_Control(pDX, IDC_SLIDER_PRT, m_SliderPRT);
	DDX_Control(pDX, IDC_SLIDER_MEM, m_SliderMEM);
	DDX_Control(pDX, IDC_LIST1, m_JobList);
	DDX_Text(pDX, IDC_EDIT_REQTime, m_ReqTime);
	DDX_Text(pDX, IDC_EDIT_IM, m_InputHour);
	DDX_Text(pDX, IDC_EDIT_IH, m_InputMin);
	DDX_Slider(pDX, IDC_SLIDER_MEM, m_ReqMEM);
	DDX_Slider(pDX, IDC_SLIDER_PRT, m_ReqPrinter);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CJCBDlg, CDialog)
	//{{AFX_MSG_MAP(CJCBDlg)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_DEL, OnDel)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_MEM, OnCustomdrawSliderMem)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_PRT, OnCustomdrawSliderPrt)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_R, OnCustomdrawSliderR)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_G, OnCustomdrawSliderG)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_B, OnCustomdrawSliderB)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CJCBDlg message handlers

void CJCBDlg::OnAdd() 
{
	// TODO: Add your control notification handler code here
	LV_ITEM lvitem;
	CString sSN,sTime,sReqTime,sReqMEM,sReqPrt,sColor;

	if(nItem==0)
		lTime=0;
	else
		lTime=Tjobs[nItem-1].InputTime;

	lvitem.pszText="";
	lvitem.mask=LVIF_TEXT;
	lvitem.iSubItem=0;
		
	//读出数据写入到list中
	
	

	m_InputHour=GetDlgItemInt(IDC_EDIT_IH,NULL,TRUE);
	m_InputMin=GetDlgItemInt(IDC_EDIT_IM,NULL,TRUE);
	if (m_InputMin>=10)
		sTime.Format ("%d:%d",m_InputHour,m_InputMin);
	else
		sTime.Format ("%d:0%d",m_InputHour,m_InputMin);

	Tjobs[nItem].InputTime=m_InputHour*60+m_InputMin;
	Tjobs[nItem].InputHour=Tjobs[nItem].InputTime/60;
	Tjobs[nItem].InputMinute =Tjobs[nItem].InputTime%60;

	if (m_InputMin<0||m_InputMin>60)
	{
		AfxMessageBox(_T("InputError"));
		return;
	}
	if (m_InputHour<0||m_InputHour>24)
	{
		AfxMessageBox(_T("InputError"));
		return;
	}
	if (m_InputHour<lTime/60)
	{
		AfxMessageBox(_T("InputError"));
		return;
	}
	if (m_InputHour==lTime/60&&m_InputMin<=lTime%60)
	{
		AfxMessageBox(_T("InputError"));
		return;
	}

	m_ReqTime=GetDlgItemInt(IDC_EDIT_REQTime,NULL,TRUE);
	sReqTime.Format("%d分钟",m_ReqTime);
	Tjobs[nItem].ReqTime=m_ReqTime;

	if (m_ReqTime<=0||m_ReqTime>120)
	{
		AfxMessageBox(_T("InputError"));
		return;
	}

	m_JobList.InsertItem(&lvitem);

	sSN.Format ("%d",nItem+1);
	m_JobList.SetItemText(nItem,0,_T(sSN));
	Tjobs[nItem].NO=nItem+1;

	m_ReqMEM=m_SliderMEM.GetPos();
	sReqMEM.Format("%dKB",m_ReqMEM);
	Tjobs[nItem].ReqMEM=m_ReqMEM;

	m_ReqPrinter=m_SliderPRT.GetPos();
	sReqPrt.Format("%d台",m_ReqPrinter);
	Tjobs[nItem].ReqPrinter=m_ReqPrinter;

	Tjobs[nItem].ColorRGB=(m_SliderR.GetPos()<<16)+(m_SliderG.GetPos()<<8)+m_SliderB.GetPos();
	sColor.Format("%x",Tjobs[nItem].ColorRGB);
	m_JobList.SetItemText(nItem,1,_T(sTime));
	m_JobList.SetItemText(nItem,2,_T(sReqTime));
	m_JobList.SetItemText(nItem,3,_T(sReqMEM));
	m_JobList.SetItemText(nItem,5,_T(sColor));
	m_JobList.SetItemText(nItem,4,_T(sReqPrt));	
	
	nItem++;
	Jobs=nItem;
}

void CJCBDlg::OnDel() 
{
	// TODO: Add your control notification handler code here
	if(nItem==0)
		return;
	nItem--;
	m_JobList.DeleteItem(nItem);
	Jobs=nItem;
}

void CJCBDlg::OnOK() 
{
	// TODO: Add extra validation here
	
	CDialog::OnOK();
}

BOOL CJCBDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here
//	char msg[50];
//	sprintf (msg,"Jobs=%d",Jobs);
//	AfxMessageBox(_T(msg));
	
	//设置list控件的文字和背景颜色
	m_JobList.SetBkColor(RGB(240,247,233));
	m_JobList.SetTextBkColor(RGB(240,247,233));


	//清空list控件的数据
	for(int delcolumn=100;delcolumn>=0;delcolumn--)
		m_JobList.DeleteColumn(delcolumn);
	//设置list对话框的列
	DWORD dwStyle;
	RECT rect;
	LV_COLUMN lvc;
	dwStyle = m_JobList.GetStyle();
	dwStyle |= LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT|LVS_SHOWSELALWAYS ;
	m_JobList.SetExtendedStyle(dwStyle);
	m_JobList.GetClientRect(&rect);
	lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH |LVCF_FMT;
	lvc.fmt=LVCFMT_LEFT;
	lvc.iSubItem = 0;
	lvc.pszText = _T("作业序号");
	lvc.cx = 110;
	m_JobList.InsertColumn(1,&lvc);
	lvc.iSubItem = 1;
	lvc.pszText = _T("进输入井时间");
	lvc.cx = 110;
	m_JobList.InsertColumn(2,&lvc);
	lvc.iSubItem = 2;
	lvc.pszText = _T("要求计算时间");
	lvc.cx = 110;
	m_JobList.InsertColumn(3,&lvc);
	lvc.iSubItem = 3;
	lvc.pszText = _T("需要主存量");
	lvc.cx = 110;
	m_JobList.InsertColumn(4,&lvc);
	lvc.iSubItem = 4;
	lvc.pszText = _T("申请打印机数");
	lvc.cx = 110;
	m_JobList.InsertColumn(5,&lvc);
	lvc.iSubItem = 5;
	lvc.pszText = _T("颜色");
	lvc.cx = 60;
	m_JobList.InsertColumn(6,&lvc);

	int i,j;
	i=0;
	CString sSN,sTime,sReqTime,sReqMEM,sReqPrt,sColor;
			
	LV_ITEM lvitem;
	lvitem.pszText="";
	lvitem.mask=LVIF_TEXT;
	lvitem.iSubItem=0;


	while(i<Jobs)
	{
		m_JobList.InsertItem(&lvitem);
		//读出数据写入到list中
		sSN.Format ("%d",i+1);
		m_JobList.SetItemText(i,0,_T(sSN));
		if ((j=Tjobs[i].InputTime%60)>=10)
			sTime.Format ("%d:%d",Tjobs[i].InputTime/60,j);
		else
			sTime.Format ("%d:0%d",Tjobs[i].InputTime/60,j);
		m_JobList.SetItemText(i,1,(LPCTSTR)sTime);
		sReqTime.Format("%d分钟",Tjobs[i].ReqTime);
		m_JobList.SetItemText(i,2,_T(sReqTime));
		sReqMEM.Format("%dKB",Tjobs[i].ReqMEM);
		m_JobList.SetItemText(i,3,_T(sReqMEM));
		sReqPrt.Format("%d台",Tjobs[i].ReqPrinter);
		m_JobList.SetItemText(i,4,_T(sReqPrt));
		sColor.Format("%x",Tjobs[i].ColorRGB);
		m_JobList.SetItemText(i,5,_T(sColor));

		i++;
	}
	nItem=i;
	lTime=Tjobs[nItem-1].InputTime;
	//
	m_SliderMEM.SetRange(1,100,FALSE);
	m_SliderMEM.SetTicFreq(10);
	m_SliderPRT.SetRange(0,4,FALSE);
	m_SliderR.SetRange(0,255,FALSE);
	m_SliderR.SetTicFreq (20);
	m_SliderG.SetRange(0,255,FALSE);
	m_SliderG.SetTicFreq (20);
	m_SliderB.SetRange(0,255,FALSE);
	m_SliderB.SetTicFreq (20);

	SetWindowText(_T("编辑窗口"));

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CJCBDlg::OnCustomdrawSliderMem(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CString msg;
	msg.Format("需求主存量:%d",m_SliderMEM.GetPos());
	SetDlgItemText(IDC_STATIC_MEM,_T(msg));
	
	*pResult = 0;
}

void CJCBDlg::OnCustomdrawSliderPrt(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CString msg;
	msg.Format("申请打印机数:%d",m_SliderPRT.GetPos());
	SetDlgItemText(IDC_STATIC_PRT,_T(msg));
	
	*pResult = 0;
}

void CJCBDlg::OnCustomdrawSliderR(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CString msg;
	msg.Format("颜色:%x,%x,%x",m_SliderR.GetPos(),m_SliderG.GetPos(),m_SliderB.GetPos());
	SetBkColor(m_SliderR.GetDC()->GetSafeHdc(),0x033333);
	SetDlgItemText(IDC_STATIC_C,_T(msg));
	
	*pResult = 0;
}

void CJCBDlg::OnCustomdrawSliderG(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CString msg;
	msg.Format("颜色:%x,%x,%x",m_SliderR.GetPos(),m_SliderG.GetPos(),m_SliderB.GetPos());
	SetDlgItemText(IDC_STATIC_C,_T(msg));
	
	*pResult = 0;
}

void CJCBDlg::OnCustomdrawSliderB(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CString msg;
	msg.Format("颜色:%x,%x,%x",m_SliderR.GetPos(),m_SliderG.GetPos(),m_SliderB.GetPos());
	SetDlgItemText(IDC_STATIC_C,_T(msg));
	
	*pResult = 0;
}

⌨️ 快捷键说明

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