用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
要求设计一个 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; }



