课程设计报告(系统软件实践)

时间:2024.5.4

北京化工大学北方学院

课程设计报告

课程名称          系统软件实践         

设计题目         Linux C 程序设计      

专业、班级          软件1004            

学    号            100220119            

姓    名              张雄飞             

指导教师               马睿              

设计时间 20##年10月8日--20##年10月27日

20##年 10月  27 日       


第二篇:操作系统 课程设计 处理机调度 图形界面 完整报告


目录

第一章 概述............................................................1

1.1 需求分析 ............................................................................ 1

1.2背景设计 ............................................................................. 1

第二章 概要设计 .....................................................2

第三章 详细设计 .....................................................4

3.1高响应比调度算法 ............................................................ 4

3.2时间片轮转法 ..................................................................... 5

3.3短进程优先法 ...................................................................... 7

第四章 调试分析与测试结果 ......................................9

第五章 总结..........................................................13

第六章 参考文献 ...................................................14

第七章 附录..........................................................15

第一章 概述

1.1 需求分析

进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C语言编写一个进程调度模拟程序,使用短作业优先调度算法,高响应比调度算法,时间片轮转调度算法实现进程调度。可以手动阻塞与唤醒。并用MFC实现图形界面。本实验可加深对进程调度算法的理解。

1.2背景设计

在OS中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;在分时系统中,为保证系统具有合理的响应时间,采用轮转法进行调度。采用算法时,则要考虑多方面因素,以便达到最佳效果。

1

第二章 概要设计

设计一个有多个进程共行的进程调度程序。

进程调度算法:短作业优先调度算法,高响应比调度算法,时间片轮转调度算法

每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、服务时间、进程状态等等。 struct progress

{

CString Name; //进程名称

CString Start; //创建时间

int ServiceT; //服务时间

int RunningT; //消逝时间

int RemainT;//剩余时间

int id;//进程标识符

CProgressCtrl* pro; //指向进度条的指针 int Rp;//进程成为就绪进程的时间

float prio;//进程优先权

};

进程的优先权为:响应时间/要求服务时间。

2

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪、执行、阻塞、完成。

就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。

当阻塞进程时,将当前运行的进程移动到阻塞队列,并从就绪队列将下个进程移动到进程执行区(本程序中就绪队列中第一个即为正在执行进程,后文不再赘述)。

当添加或唤醒进程时,将添加标记m_bchange置为真,并将进程添加进就绪队列。

在运行一个时间片中,检查添加标记m_bchange是否为真,若为真,则判断单选框选中的算法,并按各自算法进行模拟调度,详见详细设计。

当执行区进程完成时,将之移动到已完成的队列,并判断就绪队列中是否有进程:若有,则将下一个进程添加进就绪队列;若无,则弹出提示窗口。

重复以上流程,直到用户退出。

3

第三章 详细设计

3.1高响应比调度算法

该算法在添加标记m_bchange为真且单选框选中“高响应比优先”时调用,分别通过每个进程前的队列中进程RemainT之和除以该进程的ServiceT,求出优先级prio,并根据prio重新为就绪队列排序。最后将m_bchange置为假。

if ( m_bchange ) { if(iRadioButton==IDC_RADIO1) { //计算优先级 for (int i=1;i<ProNum;i++) { float sum=0; for (int j=0;j<i;j++) { sum+=Pro[j].RemainT; } Pro[i].prio=sum/Pro[i].ServiceT; }//end for

4

//根据优先级排序 progress Tem; for ( i=0;i<ProNum-1;i++) { for (int j=0;j<ProNum-1-i;j++) { if (Pro[j].prio<Pro[j+1].prio) { Tem=Pro[j+1]; Pro[j+1]=Pro[j]; Pro[j]=Tem; } } } m_bchange=false; }//end 排序

3.2时间片轮转法

该算法在添加标记m_bchange为真且单选框选中“轮转调度”时调用, 5

直接将就绪队列相邻2个进程两两互换,最终达到将正在执行进程放置于就绪队列后,并将下一个将要执行的进程开始执行,输出结果,并将m_bchange置为真,以便继续轮转。

if(iRadioButton==IDC_RADIO2)

{ progress Tem; for ( int i=0;i<ProNum-1;i++) { Tem=Pro[i+1]; Pro[i+1]=Pro[i]; Pro[i]=Tem; }//end for m_bchange=true; Pro[0].pro->SetRange(0,Pro[0].ServiceT); Pro[0].RemainT--; Pro[0].RunningT++; m_Zhixing.Format("标识符:%d 进程名称:%s 创建时间:%s 需要时间:%d秒 剩余时间:%d秒 已运行时间:%d秒 优先权:%f\r\n",

Pro[0].id, Pro[0].Name, Pro[0].Start, 6

hixing);

Pro[0].ServiceT, Pro[0].RemainT, Pro[0].RunningT, Pro[0].prio); GetDlgItem(IDC_EDIT_Zhixing)->SetWindowText(m_ZPro[0].pro->SetPos(Pro[0].RunningT); }//end 排序

3.3短进程优先法

该算法在添加标记m_bchange为真且单选框选中“短进程优先”时调用,按照进程RemainT来重新排列队列顺序。最后将m_bchange置为假。

if(iRadioButton==IDC_RADIO3)

{progress Tem; for (int i=0;i<ProNum-1;i++) { for (int j=0;j<ProNum-1-i;j++) { if (Pro[j].RemainT>Pro[j+1].RemainT) { Tem=Pro[j+1]; 7

Pro[j+1]=Pro[j]; Pro[j]=Tem; }

}r

}

m_bchange=false;

}//end 排序

}

8

第四章 调试分析与测试结果

操作系统课程设计处理机调度图形界面完整报告

高响应比优先算法 9

轮转调度算法

操作系统课程设计处理机调度图形界面完整报告

10

短进程优先算法

操作系统课程设计处理机调度图形界面完整报告

进程的阻塞与唤醒

操作系统课程设计处理机调度图形界面完整报告

11

差错控制

操作系统课程设计处理机调度图形界面完整报告

12

第五章 总结

通过此次课程设计,更深入的理解了各个进程调度算法,及实现过程。熟悉了MFC环境的使用。增进了VC编程的水平。对进程或作业先来先服务、短作业优先算法,最高响应比算法,高优先权、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!并加深了我对于操作系统理论的理解。在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。

13

第六章 参考文献

《计算机操作系统(第三版)》汤子瀛 西安电子科技大学出版社 《操作系统教程》方敏编 西安电子科技大学出版社 《操作系统原理与实践教程》周湘贞、曾宪权 清华出版社 《数据结构(C语言版)》严蔚敏 清华大学出版社

《深入浅出MFC(第2版)》侯俊杰 华中科技大学出版社

14

第七章 附录

pcb1.cpp:

#include "stdafx.h"

#include "pcb1.h"

#include "pcb1Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

BEGIN_MESSAGE_MAP(CPcb1App, CWinApp)

ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP()

CPcb1App::CPcb1App()

{

}

CPcb1App theApp;

BOOL CPcb1App::InitInstance() {

AfxEnableControlContainer(); #ifdef _AFXDLL

Enable3dControls();

#else

Enable3dControlsStatic();

#endif

CPcb1Dlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) 15

}

{ } else if (nResponse == IDCANCEL) { } return FALSE;

Pcb1.rc->

操作系统课程设计处理机调度图形界面完整报告

IDD_PCB1_DIALOG:

pcb1Dlg.cpp:

#include "stdafx.h"

#include "pcb1.h"

#include "pcb1Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__;

16

#endif

progress Pro[100]; //就绪队列

progress Zusai[100]; //阻塞队列

static int ProNum=0; //用来表示第n就绪进程 static int ZusaiNum=0; //用来表示第n阻塞进程 static int id=0;

int m_bchange;

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX);

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) {

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX) {

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

CPcb1Dlg::CPcb1Dlg(CWnd* pParent )

{

CDialog::DoDataExchange(pDX); : CDialog(CPcb1Dlg::IDD, pParent) m_Jincheng = _T(""); 17

}

m_Jiuxu = _T(""); m_Wancheng = _T(""); m_Time = _T(""); m_Zhixing = _T(""); m_Zusai = _T(""); m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

void CPcb1Dlg::DoDataExchange(CDataExchange* pDX) {

}

DDX_Text(pDX, IDC_EDIT_Zhixing, m_Zhixing); DDX_Text(pDX, IDC_EDIT_Zusai, m_Zusai); CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_PROGRESS1, m_progress); DDX_Text(pDX, IDC_EDIT_Jincheng, m_Jincheng); DDX_Text(pDX, IDC_EDIT_Jiuxu, m_Jiuxu); DDX_Text(pDX, IDC_EDIT_Wancheng, m_Wancheng); DDX_Text(pDX, IDC_EDIT_Time, m_Time);

BEGIN_MESSAGE_MAP(CPcb1Dlg, CDialog)

BOOL CPcb1Dlg::OnInitDialog()

{

ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_Huanxiang, OnBUTTONHuanxiang) ON_BN_CLICKED(IDC_BUTTON_Qingkong, OnBUTTONQingkong) ON_BN_CLICKED(IDC_BUTTON_Tianjia, OnBUTTONTianjia) ON_BN_CLICKED(IDC_BUTTON_Zuisai, OnBUTTONZuisai) ON_WM_TIMER() END_MESSAGE_MAP() CDialog::OnInitDialog(); ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); 18

}

void CPcb1Dlg::OnSysCommand(UINT nID, LPARAM lParam) {

} if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; } dlgAbout.DoModal(); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; } strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { } pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); ((CButton * )GetDlgItem( IDC_RADIO1 ))->SetCheck( TRUE ); return TRUE; else { CDialog::OnSysCommand(nID, lParam); }

void CPcb1Dlg::OnPaint()

{

if (IsIconic()) { CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; 19

}

} else { } GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon); CDialog::OnPaint();

HCURSOR CPcb1Dlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

//唤醒按扭

void CPcb1Dlg::OnBUTTONHuanxiang()

{

if ( ZusaiNum==0 ) { MessageBox("阻塞队列为空,没有可唤醒的进程","温馨提示",MB_OK|MB_ICONINFORMATION);

return;

}

Pro[ProNum]=Zusai[0]; int atime=this->getArrTime(); Pro[ProNum].Rp=atime;

ZusaiNum--;

ProNum++;

//阻塞的队列元素都前移一位

for (int i=0;i<ZusaiNum;i++)

{ Zusai[i]=Zusai[i+1]; } //显示就绪 m_Jiuxu.Empty(); CString T; for (i=1;i<ProNum;i++) { T.Empty(); T.Format("标识符:%d 进程名称:%s 创建时间:%s 需要时间:%d秒 剩余时间:%d20

秒 已运行时间:%d秒 优先权:%f\r\n",

} GetDlgItem(IDC_EDIT_Jiuxu)->SetWindowText(m_Jiuxu); //显示阻塞 m_Zusai.Empty(); for (i=0;i<ZusaiNum;i++) Pro[i].id, Pro[i].Name, Pro[i].Start, Pro[i].ServiceT, Pro[i].RemainT, Pro[i].RunningT, Pro[i].prio); m_Jiuxu+=T;

{

T.Empty();

T.Format("标识符:%d 进程名称:%s 创建时间:%s 需要时间:%d秒 剩余时间:%d秒 已运行时间:%d秒 优先权:%f\r\n",

} Zusai[i].id, Zusai[i].Name, Zusai[i].Start, Zusai[i].ServiceT, Zusai[i].RemainT, Zusai[i].RunningT, Zusai[i].prio); m_Zusai+=T; GetDlgItem(IDC_EDIT_Zusai)->SetWindowText(m_Zusai); m_bchange=true; SetTimer(1,1000,NULL);

}

//清空按扭

void CPcb1Dlg::OnBUTTONQingkong()

{

m_Wancheng.Empty(); UpdateData(false);

}

//添加按扭

void CPcb1Dlg::OnBUTTONTianjia()

{

UpdateData(true); if ( m_Jincheng.IsEmpty() ) 21

{ } MessageBox("请输入进程名称"); GetDlgItem(IDC_EDIT_Jincheng)->SetFocus(); return; if ( m_Time.IsEmpty() ) { } MessageBox("请输入服务时间"); GetDlgItem(IDC_EDIT_Time)->SetFocus(); return;

int atime=this->getArrTime(); Pro[ProNum].Name=m_Jincheng;

Pro[ProNum].pro=&m_progress; Pro[ProNum].RemainT=atoi(m_Time); Pro[ProNum].ServiceT=atoi(m_Time); Pro[ProNum].RunningT=0; Pro[ProNum].Start=(CTime::GetCurrentTime()).Format("%H:%M:%S"); Pro[ProNum].Rp=atime; Pro[ProNum].id=id+1; m_Jincheng.Empty(); m_Time.Empty(); UpdateData(false); id++; ProNum++;

if(ProNum>1)

{

CString Temple=""; for ( int i=1;i<ProNum;i++) { Temple.Format("进程名称:%s.exe 创建时间:%s 需要时间:%d 剩余时 Pro[i].Name, Pro[i].Start, Pro[i].ServiceT, Pro[i].RemainT, Pro[i].RunningT, Pro[i].prio); m_Jiuxu+=Temple; 22 间:%d 已运行时间:%d 优先权:%f\r\n",

} GetDlgItem(IDC_EDIT_Jiuxu)->SetWindowText(m_Jiuxu); } SetTimer(1,1000,NULL); m_bchange=true;

}

//阻塞按扭

void CPcb1Dlg::OnBUTTONZuisai()

{

int i; if ( ProNum<=0 ) { } else { Zusai[ZusaiNum++]=Pro[0]; m_Zusai.Empty(); CString Temple=""; //显示阻塞 for ( i=0;i<ZusaiNum;i++) KillTimer(1); MessageBox("当前没有进程在执行,请添加或唤醒进程"); return;

{

Temple.Format("标识符:%d 进程名称:%s 创建时间:%s 需要时间:%d秒 剩余时间:%d秒 已运行时间:%d秒 优先权:%f\r\n",

} Zusai[i].id, Zusai[i].Name, Zusai[i].Start, Zusai[i].ServiceT, Zusai[i].RemainT, Zusai[i].RunningT, Zusai[i].prio); m_Zusai+=Temple; GetDlgItem(IDC_EDIT_Zusai)->SetWindowText(m_Zusai); //更新进度条,将进程条和运行清空 Pro[0].pro->SetPos(0); GetDlgItem(IDC_EDIT_Zhixing)->SetWindowText(_T("")); 23

ProNum--; if ( ProNum<=0 ) { KillTimer(1); MessageBox("当前没有进程在执行,请添加或唤醒进程"); } //BlockNum++ int atime=this->getArrTime(); //因为第一个元素空了,所以数组要前移 return; double temp=0; double High; int highidex; for(i=1;i<=ProNum;i++) } { High=((double)atime-(double)Pro[i].Rp)/(double)Pro[i].ServiceT; if(High>=temp) { temp=High; } highidex=i; Pro[0]=Pro[highidex]; for ( i=highidex;i<ProNum;i++) { } Pro[i]=Pro[i+1]; for (i=highidex;i<ProNum;i++) { } Pro[i]=Pro[i+1]; } m_bchange=true;

}

//或取变为就绪进程的时间函数 int CPcb1Dlg::getArrTime() {

CTime time=CTime::GetCurrentTime(); int Arrtime; Arrtime=time.GetHour()*3600+time.GetMinute()*60+time.GetSecond(); 24

return Arrtime;

}

void CPcb1Dlg::OnTimer(UINT nIDEvent)

{int iRadioButton; iRadioButton=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3); if(iRadioButton!=IDC_RADIO2) {Pro[0].pro->SetRange(0,Pro[0].ServiceT);

Pro[0].RemainT--; Pro[0].RunningT++; m_Zhixing.Format("标识符:%d 进程名称:%s 创建时间:%s 需要时间:%d秒 剩余时 Pro[0].id, Pro[0].Name, Pro[0].Start, Pro[0].ServiceT, Pro[0].RemainT, Pro[0].RunningT, 间:%d秒 已运行时间:%d秒 优先权:%f\r\n", Pro[0].prio); GetDlgItem(IDC_EDIT_Zhixing)->SetWindowText(m_Zhixing); Pro[0].pro->SetPos(Pro[0].RunningT); } //如果添加了新的成员,重新排序 if ( m_bchange ) { if(iRadioButton==IDC_RADIO1) { //计算优先级 for (int i=1;i<ProNum;i++) { float sum=0; for (int j=0;j<i;j++) { sum+=Pro[j].RemainT; } Pro[i].prio=sum/Pro[i].ServiceT; }//end for //根据优先级排序 progress Tem; for ( i=0;i<ProNum-1;i++) { for (int j=0;j<ProNum-1-i;j++) { if (Pro[j].prio<Pro[j+1].prio) 25

} } { } Tem=Pro[j+1]; Pro[j+1]=Pro[j]; Pro[j]=Tem; m_bchange=false; }//end 排序

if(iRadioButton==IDC_RADIO2)

{ progress Tem; for ( int i=0;i<ProNum-1;i++) { } Tem=Pro[i+1]; Pro[i+1]=Pro[i]; Pro[i]=Tem;

m_bchange=true;

Pro[0].pro->SetRange(0,Pro[0].ServiceT);

Pro[0].RemainT--;

Pro[0].RunningT++;

m_Zhixing.Format("标识符:%d 进程名称:%s 创建时间:%s 需要时间:%d秒 剩余时间:%d秒 已运行时间:%d秒 优先权:%f\r\n",

Pro[0].id, Pro[0].Name, Pro[0].Start, Pro[0].ServiceT, Pro[0].RemainT, Pro[0].RunningT, Pro[0].prio); GetDlgItem(IDC_EDIT_Zhixing)->SetWindowText(m_Zhixing); Pro[0].pro->SetPos(Pro[0].RunningT); }//end 排序

if(iRadioButton==IDC_RADIO3)

{ progress Tem; for (int i=0;i<ProNum-1;i++) { for (int j=0;j<ProNum-1-i;j++) { 26

} if (Pro[j].RemainT>Pro[j+1].RemainT) { } Tem=Pro[j+1]; Pro[j+1]=Pro[j]; Pro[j]=Tem; } m_bchange=false; }//end 排序 } //如果已经完成 if ( Pro[0].RemainT<=0 ) { ProNum--; m_Wancheng+=m_Zhixing; m_Zhixing=_T(""); //Sleep(100); Pro[0].pro->SetPos(0); UpdateData(false); GetDlgItem(IDC_EDIT_Wancheng)->SetWindowText(m_Wancheng); //如果没有就绪的进程 if( ProNum==0 ) { KillTimer(1); GetDlgItem(IDC_EDIT_Zhixing)->SetWindowText(_T("")); MessageBox("当前没有进程在执行,请添加或唤醒进程!"); } //还有就绪的进程 else { int i; int atime=this->getArrTime(); //因为第一个元素空了,所以数组要前移 double temp=0; double High; int highidex; for(i=1;i<=ProNum;i++) { High=((double)atime-(double)Pro[i].Rp)/(double)Pro[i].ServiceT; if(High>=temp) { temp=High; highidex=i; 27

}

} } Pro[0]=Pro[highidex]; for ( i=highidex;i<ProNum;i++) { } CString Temple=""; for ( i=1;i<ProNum;i++) { } Temple.Format(" 标识符:%d 进程名称:%s.exe 创建时间:%s 需要时 Pro[i].id, Pro[i].Name, Pro[i]=Pro[i+1]; 间:%d 剩余时间:%d 已运行时间:%d 优先权:%f\r\n", Pro[i].Start, Pro[i].ServiceT, Pro[i].RemainT, Pro[i].RunningT, Pro[i].prio); m_Jiuxu+=Temple; GetDlgItem(IDC_EDIT_Jiuxu)->SetWindowText(m_Jiuxu); } m_bchange=true; }//end 完成 m_Jiuxu=""; CString Temple=""; for ( int i=1;i<ProNum;i++) { Temple.Format("标识符:%d 进程名称:%s 创建时间:%s秒 需要时间:%d秒 剩余时 } GetDlgItem(IDC_EDIT_Jiuxu)->SetWindowText(m_Jiuxu); CDialog::OnTimer(nIDEvent); Pro[i].id, Pro[i].Name, Pro[i].Start, Pro[i].ServiceT, Pro[i].RemainT, Pro[i].RunningT, Pro[i].prio); m_Jiuxu+=Temple; 间:%d秒 已运行时间:%d秒 优先权:%f\r\n", 28

StdAfx.cpp:

#include "stdafx.h"

pcb1.h:

#if !defined(AFX_PCB1_H__D0EC9916_5956_47D0_A87D_BF26EFBECAD7__INCLUDED_) #define AFX_PCB1_H__D0EC9916_5956_47D0_A87D_BF26EFBECAD7__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif

#ifndef __AFXWIN_H__

#error include 'stdafx.h' before including this file for PCH

#endif

#include "resource.h"

class CPcb1App : public CWinApp

{

public:

CPcb1App(); public: virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP()

};

#endif

pcb1Dlg.h:

#if !defined(AFX_PCB1DLG_H__85A9A06E_CC92_4F5B_B772_4E1D184B7433__INCLUDED_)

#define AFX_PCB1DLG_H__85A9A06E_CC92_4F5B_B772_4E1D184B7433__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif

struct progress

{

CString Name; //进程名称 CString Start; //创建时间 29

int ServiceT; //服务时间 int RunningT; //消逝时间 int RemainT;//剩余时间 int id;//进程标识符 CProgressCtrl* pro; //指向进度条的指针 int Rp;//进程成为就绪进程的时间 float prio;//进程优先权

};

class CPcb1Dlg : public CDialog

{

public:

int getArrTime();

CString m_Zhixing; CString m_Zusai; protected: virtual void DoDataExchange(CDataExchange* pDX); CPcb1Dlg(CWnd* pParent = NULL); enum { IDD = IDD_PCB1_DIALOG }; CProgressCtrl m_progress; CString m_Jincheng; CString m_Jiuxu; CString m_Wancheng; CString m_Time;

protected:

};

#endif HICON m_hIcon; virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnBUTTONHuanxiang(); afx_msg void OnBUTTONQingkong(); afx_msg void OnBUTTONTianjia(); afx_msg void OnBUTTONZuisai(); afx_msg void OnTimer(UINT nIDEvent); DECLARE_MESSAGE_MAP()

Resource.h:

30

#define IDM_ABOUTBOX 0x0010

#define IDD_ABOUTBOX 100

#define IDS_ABOUTBOX 101

#define IDD_PCB1_DIALOG 102

#define IDR_MAINFRAME 128

#define IDC_EDIT_Jincheng 1000

#define IDC_EDIT_Time 1001

#define IDC_BUTTON_Tianjia 1002

#define IDC_EDIT_Jiuxu 1003

#define IDC_EDIT_Zhixing 1004

#define IDC_PROGRESS1 1005

#define IDC_EDIT_Zusai 1006

#define IDC_EDIT_Wancheng 1007

#define IDC_BUTTON_Zuisai 1008

#define IDC_BUTTON_Huanxiang 1009

#define IDC_BUTTON_Qingkong 1010

#define IDC_RADIO1 1011

#define IDC_RADIO2 1012

#define IDC_RADIO3 1013

#define IDC_EDIT_Time2 1014

// Next default values for new objects

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE 129

#define _APS_NEXT_COMMAND_VALUE 32771

#define _APS_NEXT_CONTROL_VALUE 1012

#define _APS_NEXT_SYMED_VALUE 101

#endif

#endif

StdAfx.h:

#if !defined(AFX_STDAFX_H__475878FC_206D_4B1D_8B95_B000C92EBF8F__INCLUDED_)

#define AFX_STDAFX_H__475878FC_206D_4B1D_8B95_B000C92EBF8F__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif

#define VC_EXTRALEAN

31

#include <afxwin.h>

#include <afxext.h>

#include <afxdisp.h>

#include <afxdtctl.h>

#ifndef _AFX_NO_AFXCMN_SUPPORT

#include <afxcmn.h>

#endif

pcb1.rc2:

#ifdef APSTUDIO_INVOKED

#error this file is not editable by Microsoft Visual C++ #endif

32

更多相关推荐:
大学计算机基础课程设计实践报告

中南大学本科生课程设计(实践)任务书、设计报告(大学计算机基础)题目学生姓名指导教师学院专业班级学生学号课程设计实践报告计算机基础教学实验中心20xx年x月x日⑴任务内容:本期我们进行了网页制作的实践,我选…

课程设计实践报告

中南大学本科生课程设计(实践)任务书、设计报告(大学计算机基础)题目时间旅行学生姓名龙辰指导教师刘光瑜学院化学化工学院高级工程人才实验班(化专业班级学)学生学号1507110107计算机基础教学实验中心20xx…

中南大学 课程设计实践报告

中南大学本科生课程设计实践任务书设计报告大学计算机基础题目理想世界学生姓名李杰指导教师邵自然学院湘雅医学院临床医学与医学技术专业班级1105班学生学号2211110512计算机基础教学实验中心年月日1课程设计实...

操作系统课程设计实践报告

南通大学计算机科学与技术学院操作系统实验报告班级软件工程121姓名金凯学号11020xx019指导老师戴树贵时间19周一周1程序流程图一览2实验内容1处理机管理FCFS在多道程序或多任务系统中系统中同时处于就绪...

数据库课程设计实践报告

中南大学本科生课程设计(实践)任务书、设计报告(SQL数据库程序设计)题目学生姓名指导教师学院专业班级学生学号网吧会员管理系统戴云波杨红雨艺术学院美术09041904090421计算机基础教学实验中心20xx年…

C语言课程设计实验报告

扬州大学信息工程学院课程设计报告课程名称《C语言程序设计》设计题目学生成绩管理系统1学生姓名班级学号指导老师一、课题内容和要求.................................3二、总体设计..…

电子课程设计实习报告

河南科技学院机电学院电子课程设计报告题目声光控制器设计专业班级应用电子技术教育111姓名张胜林20xx0325117时间20xx12920xx1227指导教师张伟邵锋完成日期20xx年12月20日声光控制器设计...

应用软件课程设计实验报告

《应用软件课程设计》实验报告学院:信息学院专业:计算机科学与技术组长:组员:时间:20##年6月28日《应用软件课程设计》实验报告

课程设计实验报告

课程设计实验报告目录1设计目的和要求2设计方案举例与选择21基于单片机AT89S51与ADC0809的数字电压表22基于MC14433的数字电压表23基于ICL7135与MC14069UB的数字电压表3基于IC...

.net课程设计实验报告

实验目的通过软件开发的实践训练进一步了解软件工程的方法和技术提高软件开发的实际能力培养工程设计能力和综合分析解决问题的能力具体如下1学习和实践面向对象的系统分析与设计编码和测试方面的知识2熟悉自动化的软件开发工...

电子工艺实训课程设计报告

电子工艺实训课程设计报告前言无线电广播是一种利用电磁波传播声音信号的手段无线电广播在我们日常生活中应用广泛这让我们对此课程设计产生了极大的兴趣这不仅提高了我们的动手能力也为我们提供了一个刚刚入门电子行业最适合锻...

交通设计实践报告

交通设计实践课程实践综合报告课程名称交通设计实践学号20xx23180076姓名专业班级交通工程1003班指导老师孙泰屹朱晓宏杜胜品冉茂平何雅琴实践时间20xx61720xx621汽车与交通工程学院二0一三年六...

课程设计实践报告(28篇)