栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

操作系统 - 文件管理实验(文件系统)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

操作系统 - 文件管理实验(文件系统)

用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
要求设计一个 n 个用户的文件系统,每次用户可保存 m 个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少Create、delete、open、close、read、write 等命令。

#include 
#include 
#include 
#include 
using namespace std;

const int MFD_NUM = 10;
struct FI
{
    char uid;
    int fid;
    char name[50];
    char status[50];
    string item;
    int cursor;
};
vector FV[MFD_NUM];
char mfd[MFD_NUM] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};

void p_userinfo()
{ // 输出用户
    printf("用户:n1、At2、Bn3、Ct4、Dn5、Et6、Fn7、Gt8、Hn9、It10、Jn");
}

void p_userfd(int id)
{ // 输出用户文件夹目录
    printf("该用户的文件目录为:n");
    for (int i = 0; i < FV[id].size(); ++i)
    {
        printf("%d、t文件名:%s t文件fid:%d t文件状态:%sn", i + 1, FV[id][i].name, FV[id][i].fid, FV[id][i].status);
    }
    printf("n");
}

void p_instructions()
{ // 输出指令集
    printf("指令集:n1、创建新文件t2、删除文件n3、打开文件t4、关闭文件n5、读出文件t6、写入文件n7、查看文件目录t8、更换文件名n9、更改文件所属t10、注销账户n");
}

void Creat(int id)
{
    if (FV[id].size() < 10)
    {
        FI fi;
        printf("请输入新建的文件名:n");
        scanf("%s", fi.name);
        fi.fid = FV[id].size() + 1;
        fi.uid = id + 'A';
        memset(fi.status, '', sizeof(fi.status));
        strcpy(fi.status, "close");
        FV[id].push_back(fi);
    }
    else
    {
        printf("最多只能创建10个文件!n");
    }
}

void Delete(int id)
{
    printf("请输入你需要删除文件的fid:n");
    int fid;
    scanf("%d", &fid);
    for (int i = 0; i < FV[id].size(); ++i)
    {
        if (FV[id][i].fid == fid)
        {
            FV[id].erase(FV[id].begin() + i);
            break;
        }
    }
    printf("已删除n");
}

void Open(int id)
{
    printf("请输入你需要打开文件的fid:n");
    int fid;
    scanf("%d", &fid);
    for (int i = 0; i < FV[id].size(); ++i)
    {
        if (FV[id][i].fid == fid)
        {
            strcpy(FV[id][i].status, "open");
            break;
        }
    }
    printf("已打开n");
}

void Close(int id)
{
    printf("请输入你需要关闭文件的fid:n");
    int fid;
    scanf("%d", &fid);
    for (int i = 0; i < FV[id].size(); ++i)
    {
        if (FV[id][i].fid == fid)
        {
            strcpy(FV[id][i].status, "close");
            break;
        }
    }
    printf("已关闭n");
}

void Read(int id)
{
    printf("请输入你需要读取文件的fid:n");
    int fid;
    scanf("%d", &fid);
    for (int i = 0; i < FV[id].size(); ++i)
    {
        if (FV[id][i].fid == fid)
        {
            cout << FV[id][i].item << endl;
            strcpy(FV[id][i].status, "read");
            break;
        }
    }
    printf("已读取n");
}

void Write(int id)
{
    printf("请输入你需要写入文件的fid:n");
    int fid;
    scanf("%d", &fid);
    for (int i = 0; i < FV[id].size(); ++i)
    {
        if (FV[id][i].fid == fid)
        {
            printf("是否从上次光标位置开始输入?是请按 y/Y,否请按其它键n");
            char judge = ' ';
            while (judge == ' ' || judge == 'n')
            {
                judge = getchar();
            }
            getchar();
            if (judge == 'y' || judge == 'Y')
            {
                cout << "请输入希望写入的内容(请以'#'结束):" << endl;
                string temp;
                char t;
                while (t != '#')
                {
                    t = getchar();
                    if (t != '#')
                        temp = temp + t;
                }
                FV[id][i].item = FV[id][i].item + temp;
                FV[id][i].cursor = FV[id][i].item.size() - 1;
            }
            else
            {
                int c = 0;
                cout << "请输入希望写入的光标位置:" << endl;
                cin >> c;
                cout << "请输入希望写入的内容:" << endl;
                string temp;
                char t;
                while (t != '#')
                {
                    t = getchar();
                    if (t != '#')
                        temp = temp + t;
                }
                FV[id][i].item.insert(c, temp);
                FV[id][i].cursor = FV[id][i].item.size() - 1;
            }
            strcpy(FV[id][i].status, "write");
            break;
        }
    }
    printf("已写入n");
}

void Rename(int id)
{
    printf("请输入你需要重命名文件的fid:n");
    int fid;
    scanf("%d", &fid);
    for (int i = 0; i < FV[id].size(); ++i)
    {
        if (FV[id][i].fid == fid)
        {
            cout << "当前文件名为:" << FV[id][i].name << endl;
            cout << "你希望重命名为:" << endl;
            char temp[50];
            cin >> temp;
            strcpy(FV[id][i].name, temp);
            break;
        }
    }
    printf("已更改n");
}

void change_owner(int id)
{
    printf("请输入你需要更改所属文件的fid:n");
    int fid;
    scanf("%d", &fid);
    for (int i = 0; i < FV[id].size(); ++i)
    {
        if (FV[id][i].fid == fid)
        {
            cout << "当前文件名所属为:" << FV[id][i].uid << endl;
            cout << "你希望更改为:" << endl;
            char temp;
            cin >> temp;
            FV[id][i].uid = temp;
            FV[temp - 'A'].push_back(FV[id][i]);
            FV[id].erase(FV[id].begin() + i);
            break;
        }
    }
    printf("已更改n");
}

int main()
{
    printf("实验四 高级语言编写和调试一个简单的文件系统。nn");
    while (1)
    {
        p_userinfo();
        char option;
        printf("请输入用户名以进入UFD:n");
        scanf("%c", &option);
        getchar();
        if (option - 'A' < MFD_NUM && option - 'A' >= 0)
        {
            int id = option - 'A';
            p_userfd(id);
            p_instructions();
            int op = -1;
            while (op != 10)
            {
                printf("请输入指令序号:n");
                scanf("%d", &op);
                if (op == 1)
                {
                    Creat(id);
                }
                else if (op == 2)
                {
                    Delete(id);
                }
                else if (op == 3)
                {
                    Open(id);
                }
                else if (op == 4)
                {
                    Close(id);
                }
                else if (op == 5)
                {
                    Read(id);
                }
                else if (op == 6)
                {
                    Write(id);
                }
                else if (op == 7)
                {
                    p_userfd(id);
                }
                else if (op == 8)
                {
                    Rename(id);
                }
                else if (op == 9)
                {
                    change_owner(id);
                }
            }
        }
        else
        {
            cout << "输入错误!请检查后重新输入!" << endl;
        }
        char judge = ' ';
        printf("您是否希望退出系统?是请按 y/Y,否请按其它键n");
        while (judge == ' ' || judge == 'n')
        {
            judge = getchar();
        }
        getchar();
        if (judge == 'y' || judge == 'Y')
        {
            break;
        }
    }
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980416.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号