用位示图管理磁盘空间的分配与回收设计报告.docx
《用位示图管理磁盘空间的分配与回收设计报告.docx》由会员分享,可在线阅读,更多相关《用位示图管理磁盘空间的分配与回收设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
用位示图管理磁盘空间的分配与回收设计报告
课程设计报告
(2009--2010年度第二学期)
课程名称:
操作系统实验
课设题目:
用位示图管理磁盘空间的分配与回收
院系:
控制与计算机工程学院
班级:
姓名:
指导教师:
李为
设计周数:
一周
成绩:
2010年7月9日
一、需求分析
要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。
(1)假定现有一个磁盘组,共40个柱面。
每个柱面4个磁道,每个磁道又划分成4个物理记录。
磁盘的空间使用情况用位示图表示。
位示图用若干个字构成,每一位对应一个磁盘块。
1表示占用,0表示空闲。
为了简单,假定字长为16位,其位示图如图9—1所示。
系统设一个变量S,记录磁盘的空闲块个数。
位
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
字0
....
39
图9—1位示图
(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。
由位示图计算磁盘的相对块号的公式如下:
相对块号一字号×16+位号
之后再将相对块号转换成磁盘的物理地址:
由于一个柱面包含的扇区数=每柱面的磁道数×每磁道的扇区数=4×4=16,故柱面号=相对块号/16的商,即柱面号=字号
磁道号=(相对块号/16的余数)/4的商,即(位号/4)的商
物理块号=(相对块号/16的余数)/4的余数,即(位号/4)的余数
(3)当释放一个相对物理块时,运行回收程序,计算该块在位示图中的位置,再把相应位置0。
计算公式如下:
先由磁盘地址计算相对块号:
相对块号=柱面号×16+磁道号×4+物理块号
再计算字号和位号:
字号=相对块号/16的商,也即字号=柱面号
位号=磁道号×物理块数/每磁道+物理块号
(4)按照用户要求,申请分配一系列磁盘块,运行分配程序,完成分配。
然后将分配的相对块号返回用户,并将相对块号转换成磁盘绝对地址,再显示系统各表和用户已分配的情况。
(5)设计一个回收算法,将上述已分配给用户的各盘块释放。
并显示系统各表。
回收算法框图如图5所示。
二、整体功能及设计
程序整体主要有三个功能模块,分别是:
初使化、分配以及回收。
当点击相应按钮时实现其功能。
使用二维数组array1_after[50][16]、array1_before[50][16]、array2_after[50][16]分别记录分配前、分配后、回收后的位示图的使用情况,使用表格m_list1_after、m_list1_before、m_listafter显示位示图的使用情况。
程序设计了三个方法,分别是初始化OnInitDialog()、分配算法OnButtonFp()、回收算法OnButtonHs()。
磁盘空间分配框图如图1所示,磁盘空间回收框图如图2所示.
图1磁盘空间分配框图图2磁盘空间回收框图
三、编程实现
#include"stdafx.h"
#include"FENPEIYUHUISHOU.h"
#include"FENPEIYUHUISHOUDlg.h"
#include"HuishouDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
CFENPEIYUHUISHOUDlg:
CFENPEIYUHUISHOUDlg(CWnd*pParent/*=NULL*/)
CDialog(CFENPEIYUHUISHOUDlg:
IDD,pParent)
//{{AFX_DATA_INIT(CFENPEIYUHUISHOUDlg)
m_kongxian=0;
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
voidCFENPEIYUHUISHOUDlg:
//{{AFX_DATA_MAP(CFENPEIYUHUISHOUDlg)
DDX_Control(pDX,IDC_LIST2_AFTER,m_list2_after);
DDX_Control(pDX,IDC_LIST1_ON,m_list1_on);
DDX_Control(pDX,IDC_LIST1_BEFORE,m_list1_before);
DDX_Control(pDX,IDC_LIST1_AFTER,m_list1_after);
DDX_Text(pDX,IDC_EDIT_KONGXIAN,m_kongxian);
BEGIN_MESSAGE_MAP(CFENPEIYUHUISHOUDlg,CDialog)
//{{AFX_MSG_MAP(CFENPEIYUHUISHOUDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_FP,OnButtonFp)
ON_BN_CLICKED(IDC_BUTTON_HS,OnButtonHs)
ON_BN_CLICKED(IDC_BUTTON_INIT,OnButtonInit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOLCFENPEIYUHUISHOUDlg:
OnInitDialog()
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
DWORDdwExStyle=LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT;
m_list1_before.SetExtendedStyle(dwExStyle);
m_list1_after.SetExtendedStyle(dwExStyle);
m_list2_after.SetExtendedStyle(dwExStyle);
m_list1_on.SetExtendedStyle(dwExStyle);
for(inti=15;i>=0;i--)
CStringstr;
str.Format("%d",i);
m_list1_before.InsertColumn(0,str,LVCFMT_CENTER,30);
m_list1_after.InsertColumn(0,str,LVCFMT_CENTER,30);
m_list2_after.InsertColumn(0,str,LVCFMT_CENTER,30);
m_list1_on.InsertColumn(0,"相对块号",LVCFMT_CENTER,60);
m_list1_on.InsertColumn(1,"柱面号",LVCFMT_CENTER,60);
m_list1_on.InsertColumn(2,"磁道号",LVCFMT_CENTER,60);
m_list1_on.InsertColumn(3,"物理块号",LVCFMT_CENTER,60);
m_list1_on.InsertColumn(4,"字号",LVCFMT_CENTER,40);
m_list1_on.InsertColumn(5,"位号",LVCFMT_CENTER,40);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
OnSysCommand(nID,lParam);
OnPaint()
if(IsIconic())
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
OnPaint();
HCURSORCFENPEIYUHUISHOUDlg:
OnQueryDragIcon()
return(HCURSOR)m_hIcon;
OnButtonFp()
Addyourcontrolnotificationhandlercodehere
intindex=0;
intflag=1,m=0,n=0;
intcount=0;
for(m=0;m{for(n=0;n<16;n++){if(array1_after[m][n]==0){flag=0;break;}}if(flag==0)break;}array1_after[m][n]=1;CStringstr;intk=0;inti,j;for(i=0;i{str.Format("%d",array1_after[i][0]);}for(i=0;i{m_list1_after.InsertItem(i,str);for(j=0;j<16;j++){CStringstr;str.Format("%d",array1_after[i][j]);array2_after[i][j]=array1_after[i][j];if(array1_after[i][j]==0)count++;m_list1_after.SetItemText(i,j,str);}}str.Format("%d",m*16+n);m_list1_on.InsertItem(index,str);str.Format("%d",m);m_list1_on.SetItemText(index,1,str);m_list1_on.SetItemText(index,4,str);str.Format("%d",n/b);m_list1_on.SetItemText(index,2,str);str.Format("%d",n%b);m_list1_on.SetItemText(index,3,str);str.Format("%d",n);m_list1_on.SetItemText(index,5,str);index++;m_kongxian=m_kongxian-1;if(m_kongxian<0){AfxMessageBox("无空闲块!请回收后再使用!");}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonHs(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CHuishouDlgdlg;intnum=0;intm=0,n=0;CStringstr;if(dlg.DoModal()==IDOK){num=dlg.m_it1*16+dlg.m_it2*b+dlg.m_it3;m=dlg.m_it1;n=dlg.m_it2*b+dlg.m_it3;}array2_after[m][n]=0;for(inti=0;i{str.Format("%d",array2_after[i][0]);}for(intx=0;x{m_list2_after.InsertItem(x,str);for(inty=0;y<16;y++){CStringstr;str.Format("%d",array2_after[x][y]);m_list2_after.SetItemText(x,y,str);}}m_kongxian=m_kongxian+1;for(i=0;i{CStringo=m_list1_on.GetItemText(i,0);CStringstr1;str1.Format("%d",num);if(str1==o){m_list1_on.DeleteItem(i);}}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonInit(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CInitDlgdlg;intcount=0;if(dlg.DoModal()==IDOK){a=dlg.m_it1;b=dlg.m_it2;c=dlg.m_it3;CStringstr;intm,n;intk=0;for(m=0;m{for(n=0;n<16;n++){array1_before[m][n]=(int)(rand()%2);array1_after[m][n]=array1_before[m][n];if(array1_before[m][n]==0){count++;m_kongxian=count;}}str.Format("%d",array1_before[m][0]);}for(m=0;m{m_list1_before.InsertItem(m,str);for(n=0;n<16;n++){CStringstr;str.Format("%d",array1_before[m][n]);m_list1_before.SetItemText(m,n,str);}}}UpdateData(FALSE);}四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息当空闲块为零时,会弹出提示信息,如图7所示。图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
for(n=0;n<16;n++)
if(array1_after[m][n]==0)
flag=0;
break;
if(flag==0)
array1_after[m][n]=1;
intk=0;
inti,j;
for(i=0;i{str.Format("%d",array1_after[i][0]);}for(i=0;i{m_list1_after.InsertItem(i,str);for(j=0;j<16;j++){CStringstr;str.Format("%d",array1_after[i][j]);array2_after[i][j]=array1_after[i][j];if(array1_after[i][j]==0)count++;m_list1_after.SetItemText(i,j,str);}}str.Format("%d",m*16+n);m_list1_on.InsertItem(index,str);str.Format("%d",m);m_list1_on.SetItemText(index,1,str);m_list1_on.SetItemText(index,4,str);str.Format("%d",n/b);m_list1_on.SetItemText(index,2,str);str.Format("%d",n%b);m_list1_on.SetItemText(index,3,str);str.Format("%d",n);m_list1_on.SetItemText(index,5,str);index++;m_kongxian=m_kongxian-1;if(m_kongxian<0){AfxMessageBox("无空闲块!请回收后再使用!");}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonHs(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CHuishouDlgdlg;intnum=0;intm=0,n=0;CStringstr;if(dlg.DoModal()==IDOK){num=dlg.m_it1*16+dlg.m_it2*b+dlg.m_it3;m=dlg.m_it1;n=dlg.m_it2*b+dlg.m_it3;}array2_after[m][n]=0;for(inti=0;i{str.Format("%d",array2_after[i][0]);}for(intx=0;x{m_list2_after.InsertItem(x,str);for(inty=0;y<16;y++){CStringstr;str.Format("%d",array2_after[x][y]);m_list2_after.SetItemText(x,y,str);}}m_kongxian=m_kongxian+1;for(i=0;i{CStringo=m_list1_on.GetItemText(i,0);CStringstr1;str1.Format("%d",num);if(str1==o){m_list1_on.DeleteItem(i);}}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonInit(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CInitDlgdlg;intcount=0;if(dlg.DoModal()==IDOK){a=dlg.m_it1;b=dlg.m_it2;c=dlg.m_it3;CStringstr;intm,n;intk=0;for(m=0;m{for(n=0;n<16;n++){array1_before[m][n]=(int)(rand()%2);array1_after[m][n]=array1_before[m][n];if(array1_before[m][n]==0){count++;m_kongxian=count;}}str.Format("%d",array1_before[m][0]);}for(m=0;m{m_list1_before.InsertItem(m,str);for(n=0;n<16;n++){CStringstr;str.Format("%d",array1_before[m][n]);m_list1_before.SetItemText(m,n,str);}}}UpdateData(FALSE);}四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息当空闲块为零时,会弹出提示信息,如图7所示。图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
str.Format("%d",array1_after[i][0]);
for(i=0;i{m_list1_after.InsertItem(i,str);for(j=0;j<16;j++){CStringstr;str.Format("%d",array1_after[i][j]);array2_after[i][j]=array1_after[i][j];if(array1_after[i][j]==0)count++;m_list1_after.SetItemText(i,j,str);}}str.Format("%d",m*16+n);m_list1_on.InsertItem(index,str);str.Format("%d",m);m_list1_on.SetItemText(index,1,str);m_list1_on.SetItemText(index,4,str);str.Format("%d",n/b);m_list1_on.SetItemText(index,2,str);str.Format("%d",n%b);m_list1_on.SetItemText(index,3,str);str.Format("%d",n);m_list1_on.SetItemText(index,5,str);index++;m_kongxian=m_kongxian-1;if(m_kongxian<0){AfxMessageBox("无空闲块!请回收后再使用!");}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonHs(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CHuishouDlgdlg;intnum=0;intm=0,n=0;CStringstr;if(dlg.DoModal()==IDOK){num=dlg.m_it1*16+dlg.m_it2*b+dlg.m_it3;m=dlg.m_it1;n=dlg.m_it2*b+dlg.m_it3;}array2_after[m][n]=0;for(inti=0;i{str.Format("%d",array2_after[i][0]);}for(intx=0;x{m_list2_after.InsertItem(x,str);for(inty=0;y<16;y++){CStringstr;str.Format("%d",array2_after[x][y]);m_list2_after.SetItemText(x,y,str);}}m_kongxian=m_kongxian+1;for(i=0;i{CStringo=m_list1_on.GetItemText(i,0);CStringstr1;str1.Format("%d",num);if(str1==o){m_list1_on.DeleteItem(i);}}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonInit(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CInitDlgdlg;intcount=0;if(dlg.DoModal()==IDOK){a=dlg.m_it1;b=dlg.m_it2;c=dlg.m_it3;CStringstr;intm,n;intk=0;for(m=0;m{for(n=0;n<16;n++){array1_before[m][n]=(int)(rand()%2);array1_after[m][n]=array1_before[m][n];if(array1_before[m][n]==0){count++;m_kongxian=count;}}str.Format("%d",array1_before[m][0]);}for(m=0;m{m_list1_before.InsertItem(m,str);for(n=0;n<16;n++){CStringstr;str.Format("%d",array1_before[m][n]);m_list1_before.SetItemText(m,n,str);}}}UpdateData(FALSE);}四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息当空闲块为零时,会弹出提示信息,如图7所示。图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
m_list1_after.InsertItem(i,str);
for(j=0;j<16;j++)
str.Format("%d",array1_after[i][j]);
array2_after[i][j]=array1_after[i][j];
if(array1_after[i][j]==0)
count++;
m_list1_after.SetItemText(i,j,str);
str.Format("%d",m*16+n);
m_list1_on.InsertItem(index,str);
str.Format("%d",m);
m_list1_on.SetItemText(index,1,str);
m_list1_on.SetItemText(index,4,str);
str.Format("%d",n/b);
m_list1_on.SetItemText(index,2,str);
str.Format("%d",n%b);
m_list1_on.SetItemText(index,3,str);
str.Format("%d",n);
m_list1_on.SetItemText(index,5,str);
index++;
m_kongxian=m_kongxian-1;
if(m_kongxian<0){
AfxMessageBox("无空闲块!
请回收后再使用!
");}
UpdateData(FALSE);
OnButtonHs()
UpdateData(TRUE);
CHuishouDlgdlg;
intnum=0;
intm=0,n=0;
if(dlg.DoModal()==IDOK)
num=dlg.m_it1*16+dlg.m_it2*b+dlg.m_it3;
m=dlg.m_it1;
n=dlg.m_it2*b+dlg.m_it3;
array2_after[m][n]=0;
for(inti=0;i{str.Format("%d",array2_after[i][0]);}for(intx=0;x{m_list2_after.InsertItem(x,str);for(inty=0;y<16;y++){CStringstr;str.Format("%d",array2_after[x][y]);m_list2_after.SetItemText(x,y,str);}}m_kongxian=m_kongxian+1;for(i=0;i{CStringo=m_list1_on.GetItemText(i,0);CStringstr1;str1.Format("%d",num);if(str1==o){m_list1_on.DeleteItem(i);}}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonInit(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CInitDlgdlg;intcount=0;if(dlg.DoModal()==IDOK){a=dlg.m_it1;b=dlg.m_it2;c=dlg.m_it3;CStringstr;intm,n;intk=0;for(m=0;m{for(n=0;n<16;n++){array1_before[m][n]=(int)(rand()%2);array1_after[m][n]=array1_before[m][n];if(array1_before[m][n]==0){count++;m_kongxian=count;}}str.Format("%d",array1_before[m][0]);}for(m=0;m{m_list1_before.InsertItem(m,str);for(n=0;n<16;n++){CStringstr;str.Format("%d",array1_before[m][n]);m_list1_before.SetItemText(m,n,str);}}}UpdateData(FALSE);}四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息当空闲块为零时,会弹出提示信息,如图7所示。图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
str.Format("%d",array2_after[i][0]);
for(intx=0;x{m_list2_after.InsertItem(x,str);for(inty=0;y<16;y++){CStringstr;str.Format("%d",array2_after[x][y]);m_list2_after.SetItemText(x,y,str);}}m_kongxian=m_kongxian+1;for(i=0;i{CStringo=m_list1_on.GetItemText(i,0);CStringstr1;str1.Format("%d",num);if(str1==o){m_list1_on.DeleteItem(i);}}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonInit(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CInitDlgdlg;intcount=0;if(dlg.DoModal()==IDOK){a=dlg.m_it1;b=dlg.m_it2;c=dlg.m_it3;CStringstr;intm,n;intk=0;for(m=0;m{for(n=0;n<16;n++){array1_before[m][n]=(int)(rand()%2);array1_after[m][n]=array1_before[m][n];if(array1_before[m][n]==0){count++;m_kongxian=count;}}str.Format("%d",array1_before[m][0]);}for(m=0;m{m_list1_before.InsertItem(m,str);for(n=0;n<16;n++){CStringstr;str.Format("%d",array1_before[m][n]);m_list1_before.SetItemText(m,n,str);}}}UpdateData(FALSE);}四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息当空闲块为零时,会弹出提示信息,如图7所示。图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
m_list2_after.InsertItem(x,str);
for(inty=0;y<16;y++)
str.Format("%d",array2_after[x][y]);
m_list2_after.SetItemText(x,y,str);
m_kongxian=m_kongxian+1;
for(i=0;i{CStringo=m_list1_on.GetItemText(i,0);CStringstr1;str1.Format("%d",num);if(str1==o){m_list1_on.DeleteItem(i);}}UpdateData(FALSE);}voidCFENPEIYUHUISHOUDlg::OnButtonInit(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CInitDlgdlg;intcount=0;if(dlg.DoModal()==IDOK){a=dlg.m_it1;b=dlg.m_it2;c=dlg.m_it3;CStringstr;intm,n;intk=0;for(m=0;m{for(n=0;n<16;n++){array1_before[m][n]=(int)(rand()%2);array1_after[m][n]=array1_before[m][n];if(array1_before[m][n]==0){count++;m_kongxian=count;}}str.Format("%d",array1_before[m][0]);}for(m=0;m{m_list1_before.InsertItem(m,str);for(n=0;n<16;n++){CStringstr;str.Format("%d",array1_before[m][n]);m_list1_before.SetItemText(m,n,str);}}}UpdateData(FALSE);}四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息当空闲块为零时,会弹出提示信息,如图7所示。图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
CStringo=m_list1_on.GetItemText(i,0);
CStringstr1;
str1.Format("%d",num);
if(str1==o)
m_list1_on.DeleteItem(i);
OnButtonInit()
CInitDlgdlg;
a=dlg.m_it1;
b=dlg.m_it2;
c=dlg.m_it3;
intm,n;
for(m=0;m{for(n=0;n<16;n++){array1_before[m][n]=(int)(rand()%2);array1_after[m][n]=array1_before[m][n];if(array1_before[m][n]==0){count++;m_kongxian=count;}}str.Format("%d",array1_before[m][0]);}for(m=0;m{m_list1_before.InsertItem(m,str);for(n=0;n<16;n++){CStringstr;str.Format("%d",array1_before[m][n]);m_list1_before.SetItemText(m,n,str);}}}UpdateData(FALSE);}四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息当空闲块为零时,会弹出提示信息,如图7所示。图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
array1_before[m][n]=(int)(rand()%2);
array1_after[m][n]=array1_before[m][n];
if(array1_before[m][n]==0)
m_kongxian=count;
str.Format("%d",array1_before[m][0]);
for(m=0;m{m_list1_before.InsertItem(m,str);for(n=0;n<16;n++){CStringstr;str.Format("%d",array1_before[m][n]);m_list1_before.SetItemText(m,n,str);}}}UpdateData(FALSE);}四、使用说明程序运行后的运行界面如图3所示:图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息当空闲块为零时,会弹出提示信息,如图7所示。图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
m_list1_before.InsertItem(m,str);
str.Format("%d",array1_before[m][n]);
m_list1_before.SetItemText(m,n,str);
四、使用说明
程序运行后的运行界面如图3所示:
图3程序运行界面
单击初使化按扭初使化程序。
初使化后位示图分配情况图如图4所示。
图4初使化后位示图分配情况图
连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。
图5点击分配按钮后信息
单击回收按钮,系统回收已分配给用户的盘块,如图6所示
图6回收的提示信息
当空闲块为零时,会弹出提示信息,如图7所示。
五、结果分析
程序满足要求,测试通过。
但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。
在以后的学习中一定多加努力,解决这个问题。
六、心得体会
通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1