?? zyglcx.cpp
字號(hào):
#define n 10
#define m 10
#define area 1000
#define minisize 50
#include <stdio.h>
#include <stdlib.h>
struct
{
float address; /*分區(qū)起始地址*/
float lenth; /*空閑長(zhǎng)度,單位為塊*/
int flag; /*空閑表登記欄標(biāo)志,用"0"表示空欄目,"1"表示未分配*/
} table[n]; /*空閑表*/
void select()
{
system("cls"); /*輸出功能提示*/
system("title 王琦的課程設(shè)計(jì)!");
system("color 5e");
printf("┏━━━━━━━━━━┓\n");
printf("┃請(qǐng)選擇服務(wù)類型 ┃\n");
printf("┣━━━━━━━━━━┫\n");
printf("┃1 調(diào)入新的文件 ┃\n");
printf("┃2 收回文件磁盤空間 ┃\n");
printf("┃3 打印磁盤分配情況表┃\n");
printf("┃4 退出 ┃\n"); /*輸出功能提示*/
printf("┗━━━━━━━━━━┛\n");
printf("請(qǐng)選擇服務(wù)類型:");
}
void main()
{struct
{
float address; /* 已分分區(qū)起始?jí)K號(hào)*/
float length; /* 已分分區(qū)長(zhǎng)度,單位為字節(jié)*/
int flag; /*已分配區(qū)表登記欄標(biāo)志,用"0"表示空欄目,已分配用文件名表示*/
}used_table[n]; /*已分配區(qū)表*/
struct
{
float address; /*分區(qū)起始?jí)K號(hào)*/
float length; /*空閑區(qū)長(zhǎng)度,單位為塊*/
int flag; /*空閑表登記欄標(biāo)志,用"0"表示空欄目,"1"表示未分配*/
}table[n]; /*空閑表*/
int i,a,name,j=0,flag=0,right=0,h;
float length,head,tail;
for(i=0;i<n;i++)
used_table[i].flag=0; /*已分配區(qū)表初始化*/
table[0].address=0.0;
table[0].length=1000.0;
table[0].flag=1; /*空閑表初始化*/
for(i=1;i<m;i++)
table[i].flag=0;
select();
scanf("%d",&a); /*讀入選擇的服務(wù) */
while(a!=4)
{
if(a==1) /*若為1則分配磁盤空間*/
{
system("color 2e");
printf("輸入文件名:");
scanf("%d",&name);
printf("輸入所需磁盤大小:");
scanf("%f",&length); /*讀入文件名字和所需磁盤大小*/
i=0;
while(i<n&&right==0)
{ if(table[i].flag==1&&table[i].length>=length)
{ break;
}i++;
} /*找到一個(gè)合適的空間,分配給文件*/
if(i>=n)
printf("無足夠磁盤空間\n"); /*若磁盤不足,則給于相應(yīng)的提示*/
else
{while(used_table[j].flag!=0)
j++;
used_table[j].address=table[i].address;
used_table[j].length=length; /*對(duì)磁盤取表和已分配區(qū)表進(jìn)行調(diào)整*/
used_table[j].flag=name;
table[i].address=table[i].address+length;
table[i].length-=length;
}
}
else if(a==2)
{
system("color 4e");
printf("輸入想刪除的文件名: ");
scanf("%d",&name);
h=0;
for(i=0;i<n;i++)
if(used_table[i].flag==name)
{
head=used_table[i].address;
tail=used_table[i].address+used_table[i].length;
used_table[i].flag=0;}
while(table[h].flag!=0) h++;
for(i=0;i<m;i++)
if((table[i].address==tail)&&(table[i].flag==1))
{
tail=tail+table[i].length;
table[i].flag=0;} /*若收回磁盤區(qū)域后續(xù)磁盤未分配,則將其合并*/
for(j=0;j<m;j++)
if(head==(table[j].address+table[j].length)&&(table[j].flag==1))
{
table[j].length+=(tail-head);
flag=1;
} /*若收回磁盤區(qū)域前部未分配,則將其合并*/
if(flag==0)
{
table[h].address=head;
table[h].length=tail-head;
table[h].flag=1;flag=0;}
}
else if(a==3) /*若選擇3則打印磁盤分配表*/
{
system("color 1e");
printf("┏━━━━━━━━━━━━━━━━━┓\n");
printf("┃用戶表 ┃\n");
printf("┣━━━━━━━━━━━━━━━━━┫\n");
printf("┃起始?jí)K號(hào) \t長(zhǎng)度 \t標(biāo)志┃\n");
for(i=0;i<n;i++)
{
if(used_table[i].flag!=0)
printf("┃%d %f\t%f\t%d ┃\n",i,used_table[i].address,used_table[i].length,used_table[i].flag);
}
printf("┗━━━━━━━━━━━━━━━━━┛\n");
printf("\n");
printf("┏━━━━━━━━━━━━━━━━━┓\n");
printf("┃系統(tǒng)表 ┃\n");
printf("┣━━━━━━━━━━━━━━━━━┫\n");
printf("┃起始?jí)K號(hào) \t長(zhǎng)度 \t標(biāo)志┃\n");
for(i=0;i<n;i++)
{
if(table[i].flag==1)
printf("┃%d %f\t%f\t%d ┃\n",i,table[i].address,table[i].length,table[i].flag);
}
printf("┗━━━━━━━━━━━━━━━━━┛\n");
}
system("pause");
select();
scanf("%d",&a);
}
}/*結(jié)束*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -