题目要求:
编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。
代码:
#include#include #include using namespace std;struct UFD //用户目录文件{ string File_Name; //文件名 bool R,W,X; // 读写执行 int Len_File; //文件大小};struct MFD //主文件夹目录{ string User_Name; //用户名 UFD * Pointer; //用户文件目录指针};struct AFD //运行文件目录{ int File_ID;// 文件号 bool R, W, X; int Pointer;//读写指针};class FILE_SYSTEM{public: void Inital(); void Start();private: int Num_User; //用户数量 int Num_File; //每个用户可保存的文件数 int MAX_Open_File; //打开的最大文件数 MFD * Mfd; // 主文件目录 UFD * Ufd; // 用户文件目录 AFD * Afd; //运行文件目录};int main(){ FILE_SYSTEM FS; FS.Inital(); FS.Start(); return 0;}void FILE_SYSTEM::Inital(){ Num_File = 10; Num_User = 10; MAX_Open_File = 5; //UFD Ufd = new UFD[Num_User*Num_File]; //MFD Mfd = new MFD[Num_User]; for(int i = 0 ; i < Num_User; i++) { Mfd[i].Pointer = &(Ufd[i*Num_File]); } //AFD Afd = new AFD[MAX_Open_File]; Mfd[0].User_Name="wzn"; Ufd[0].File_Name="1.txt"; Ufd[0].Len_File=10; Ufd[0].R=true; Ufd[0].W=false; Ufd[0].X =false; Ufd[1].File_Name="2.txt"; Ufd[1].Len_File=15; Ufd[1].R=false; Ufd[1].W=false; Ufd[1].X =true; for(int i = 2; i < Num_File; i++) //其他人没有文件存在 { Ufd[i].File_Name=""; Ufd[i].Len_File=-1; Ufd[i].R=false; Ufd[i].W=false; Ufd[i].X =false; }}void showOrder(){ cout << "Order list" << endl; cout << "\t1. dir\t"; cout << "\t2. diropen" << endl; cout << "\t3. create"; cout << "\t4. delete" << endl; cout << "\t5. open\t"; cout << "\t6. logout" << endl; cout << "\t7. close"; cout << "\t8. read" << endl; cout << "\t9. write\t"; cout << "\t10. shutdown" << endl;}void FILE_SYSTEM::Start(){ showOrder(); int User_ID,i; int Num_Open_File,tmp_len; //当前用户打开文件数 string User_Name,tmp;//当前登录的用户名 int cmd; //用户输入命令 UFD * ufd; char choice; do //打开计算机 { do { cout << "User Name:"; cin >> User_Name; for(User_ID = 0; User_ID < Num_User; User_ID++) { if(Mfd[User_ID].User_Name == User_Name) break; } if(User_ID == Num_User) cout << "No such User name,please try again!" << endl; } while(User_ID == Num_User); cout << "Welcome to login, " << User_Name << "!" << endl; ufd = Mfd[User_ID].Pointer; //初始化文件列表 for(i = 0 ; i < MAX_Open_File; i++) { Afd[i].File_ID = -1; } Num_Open_File = 0; do //命令处理 { //模拟命令行: cout << "["< <<"]~"; cin >> cmd; if(cmd == 1) { cout << endl; cout << "Owner of Files:" << User_Name << endl; cout << "\tState\tLength\tFileName" << endl; for(i = 0 ; i < Num_File; i++) { if(ufd[i].Len_File != -1) { cout << "\t"; if(ufd[i].R == true)cout << "R"; else cout << "-"; if(ufd[i].W == true)cout << "W"; else cout << "-"; if(ufd[i].X == true)cout << "X"; else cout << "-"; cout << "\t"; cout << ufd[i].Len_File << "\t"; cout << ufd[i].File_Name << endl; } } cout << endl; } else if(cmd == 2) { cout << endl; cout << "Opened Files of " << User_Name << endl; cout << "\t" << "State\t" << "Open File name" << endl; for(i = 0 ; i < MAX_Open_File; i++) { if(Afd[i].File_ID != -1) { cout << "\t"; if(Afd[i].R == true)cout << "R"; else cout << "-"; if(Afd[i].W == true)cout << "W"; else cout << "-"; if(Afd[i].X == true)cout << "X"; else cout << "-"; cout << "\t"; cout << ufd[Afd[i].File_ID].File_Name << endl; } } cout << endl; } else if(cmd == 3) { for(i=0; i > tmp; ufd[i].File_Name = tmp; cout << "Read(y/n):"; choice = getch(); if(choice == 'y')ufd[i].R = true; else ufd[i].R = false; cout << endl; cout << "Write(y/n):"; choice = getch(); if(choice == 'y')ufd[i].W = true; else ufd[i].W = false; cout << endl; cout << "Execute(y/n):"; choice = getch(); if(choice == 'y')ufd[i].X = true; else ufd[i].X = false; cout << endl; cout << "Length:"; cin >> tmp_len; if(tmp_len > 0) ufd[i].Len_File = tmp_len; cout << "New File: " << ufd[i].File_Name << " is Created" << endl; } } else if(cmd == 4) { cout << "Enter Delete file name:"; cin >> tmp; for(i = 0 ; i < Num_File; i++) { if((ufd[i].Len_File != -1) && (ufd[i].File_Name == tmp)) break; } if(i == Num_File) { cout << "NOT FOUND!" << endl; } else { ufd[i].Len_File = -1; //delete the file cout << "The File:" << ufd[i].File_Name << " is deleted!" << endl; } } else if(cmd == 5) { if(Num_Open_File == MAX_Open_File) cout << "Can't Open anymore!" << endl; else { cout << "Open file 's name:"; cin >> tmp; for(i=0; i > tmp; for(i = 0 ; i < Num_File ; i++) { if((ufd[i].Len_File != -1) && (ufd[i].File_Name == tmp)) break; } if(i == Num_File) { cout << "Not found!" << endl; } else { int t; for(t = 0 ; t < MAX_Open_File ; t++) { if(Afd[t].File_ID == i) break; } if(t == MAX_Open_File) cout << "Not found" << endl; else { Afd[t].File_ID = -1; Num_Open_File--; cout << tmp << " is closed" << endl; } } } else if(cmd == 8) { cout << "Read file Name:"; cin >> tmp; for(i = 0 ; i < Num_File; i++) { if(ufd[i].File_Name == tmp && ufd[i].Len_File != -1) break; } if(i == Num_File) { cout << "Not Found" << endl; } else { int t; for(t = 0 ; t < MAX_Open_File; t++) { if(Afd[t].File_ID == i) break; } if(t == MAX_Open_File) cout << "No Enough Space" << endl; else { if(Afd[t].R == true) { cout << "You can read this file" << endl; } else { cout << "Error:Not have Power of Open" << endl; } } } } else if(cmd == 9) { cout << "enter write file name:"; cin >> tmp; for(i = 0 ; i < Num_File ; i++) if(ufd[i].Len_File!=-1&&ufd[i].File_Name==tmp) break; if(i == Num_File) { cout << "No such file" << endl; } else { int t; for(t = 0 ; t < MAX_Open_File; t++) { if(Afd[t].File_ID == i) break; } if(t == MAX_Open_File) { cout << "The file:" << tmp << "is not open" <