• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Brian Warehouse

            Some birds aren`t meant to be caged, their feathers are just too bright... ...
            posts - 40, comments - 16, trackbacks - 0, articles - 1

            實驗三代碼 文件管理

            Posted on 2010-08-17 13:04 Brian 閱讀(1871) 評論(5)  編輯 收藏 引用 所屬分類: OS
            /*
            Title: 文件管理
            Author: Brian
            Date: 2010/06/17
            */
            #include 
            <iostream>
            #include 
            <fstream>
            #include 
            <cstdlib>
            #include 
            <cstring>
            using namespace std;

            typedef 
            struct UNode{ // UFD結點
                char FileName[12]; // 文件名
                char ProCode[4]; // 保護碼
                int length; // 文件長度
                int Open_RW; // 文件打開關閉讀寫指針
                struct UNode *next; // 后向指針
                struct UNode *prior; // 前向指針
            }* UFD;

            typedef 
            struct MNode{ // MDF結點
                char UserName[12]; // 用戶名
                char Password[12]; // 密碼
                struct UNode *FileMenu; // 文件目錄指針
                struct MNode *next; // 后向指針
            }* MDF;

            MDF H
            =(MDF)malloc(sizeof(MNode)); // 全局變量,指向MDF頭結點(數據項為空)
            MDF CurrUser; // 全局變量,當前操作用戶指針

            //---------------------------函數聲明------------------------------

            void Welcome(); // 操作界面
            void InitSystem();  // 從文件將默認MDF和UFD組織起來進入內存
            UFD InitUFD(MDF p); //首次創建用戶的文件
            void DispMDF(); // 顯示用戶名列表
            void DispMDF(); // 顯示用戶名列表
            void DispUFD(MDF L); // 顯示UFD里的各個文件名
            int LoginCheck(); // 搜索用戶名是否存在
            void Create(); // 創建新文件
            void Delete(); // 刪除文件
            void Open();   // 打開文件
            void Close(); // 關閉文件
            void Read();  // 讀文件
            void Write(); // 寫文件
            void Bye(); // 打印MDF和UFD表并退出

            //-----------------------------------------------------------------

            void InitSystem() // 從文件將默認MDF和UFD組織起來進入內存
            {
                
            //"InitInfo.txt" 所有初始化信息都已寫入該文件,這里未使用文件流
                H->FileMenu=NULL;
                H
            ->next=NULL;
                MDF p
            =H;
                
            int UserNum; // 初始化時用戶個數和文件個數
                cout<<"系統初始化開始,請輸入用戶名個數: ";
                cin
            >>UserNum;
                
            for (int i=1; i<=UserNum; i++)
                {
                    p
            =p->next=(MDF)malloc(sizeof(MNode));
                    cout
            <<"\n請輸入第 "<<i<<" 個用戶的用戶名和密碼: ";
                    cin
            >>p->UserName;
                    cin
            >>p->Password; // 初始化MDF結點

                    p
            ->FileMenu=InitUFD(p);
                    p
            ->next=NULL;
                }
                cout
            <<"\n初始化完畢,按任意鍵清屏并開始文件管理!\n";
                system(
            "pause");
                
            char c;
                cin.
            get(c);
                system(
            "cls");
            }

            UFD InitUFD(MDF p) 
            //首次創建用戶的文件
            {
                UFD s,r,L
            =(UFD)malloc(sizeof(UNode)); // 初始化當前用戶的所有文件UFD
                L->next=NULL;
                r
            =L;
                
            int FileNum;
                cout
            <<"請輸入用戶 "<<p->UserName<<" 將要創建的文件個數: ";
                cin
            >>FileNum;
                cout
            <<"請輸入用戶 "<<p->UserName<<" 的所有文件名,保護碼和長度: ";
                
            for (int j=1; j<=FileNum; j++)
                {
                    s
            =(UFD)malloc(sizeof(UNode));
                    cin
            >>s->FileName; //讀取文件名
                    cin>>s->ProCode; // 讀取保護碼
                    cin>>s->length; //文件長度
                    s->Open_RW=0;
                    r
            ->next=s;
                    s
            ->prior=r;
                    r
            =s;
                }
                r
            ->next=NULL; // UFD是雙向鏈表,便于刪除
                return L->next;
            }

            void DispMDF() // 顯示用戶名列表
            {
                cout
            <<"現有用戶名列表: ";
                MDF p
            =H->next;
                
            while (p)
                {
                    cout
            <<"\t"<<p->UserName;
                    p
            =p->next;
                }
                cout
            <<endl;
            }

            void DispUFD(MDF L) // 顯示UFD里的各個文件名
            {
                cout
            <<endl<<"當前文件的UFD為:\n"
                    
            <<"   "<<L->UserName<<endl
                    
            <<"---------\n";
                UFD p
            =L->FileMenu;
                
            if (!p)
                {
                    cout
            <<L->UserName<<" 用戶無文件,現在創建文件嗎? (y/n)";
                    
            char c; cin.get(c); // 為無文件用戶第一次創建文件
                    if (c=='y') L->FileMenu=InitUFD(L);
                    
            else return;
                }
                
            while (p)
                {
                    cout
            <<"   "<<p->FileName<<endl;
                    p
            =p->next;
                }
                cout
            <<"---------\n";
            }

            int LoginCheck() // 搜索用戶名是否存在
            {
                
            char UserName[12],PassWord[12];
                
            while(1)
                {
                    cout
            <<"請輸入用戶名: ";
                    cin
            >>UserName;
                    MDF p
            =H->next;
                    
            while (p)
                    {
                        
            if (strcmp(UserName,p->UserName) == 0)
                        {
                            cout
            <<"用戶查找成功! 請輸入密碼: ";
                            cin
            >>PassWord;
                            
            if (strcmp(PassWord,p->Password) == 0)
                                cout
            <<"登錄成功!\n";
                            
            else {
                                cout
            <<"密碼錯誤請重新登錄!\n";
                                
            return 0;
                            }
                            CurrUser
            =p;
                            
            return 1;
                        }
                        p
            =p->next;
                    }
                    cout
            <<"無此用戶文件!\n";
                    
            return 0;
                }
            }

            void Create() // 創建新文件 F
            {
                
            char CreateName[12];
                UFD p
            =CurrUser->FileMenu,s;
                cout
            <<"請輸入要創建的文件名: ";
                cin
            >>CreateName;
                
            while (p)
                {
                    
            if (strcmp(CreateName,p->FileName)==0)
                    {
                        cout
            <<"此文件已經存在,創建失敗!\n";
                        
            return;
                    }
                    p
            =p->next;
                }
                s
            =(UFD)malloc(sizeof(UNode));
                strcpy(s
            ->FileName,CreateName);
                cout
            <<"請輸入 "<<CreateName<<" 文件的保護碼和長度: ";
                cin
            >>s->ProCode;
                cin
            >>s->length;
                s
            ->Open_RW=0;
                s
            ->prior=NULL;
                UFD r
            =CurrUser->FileMenu;
                CurrUser
            ->FileMenu=s;
                s
            ->next=r;
                r
            ->prior=s; // 創建的新文件采用頭插法置于UFD最前端

                DispUFD(CurrUser); 
            // 顯示當前UFD
            }

            void Delete() // 刪除文件
            {
                
            char FileName[12];
                cout
            <<"請輸入要刪除的文件名: ";
                cin
            >>FileName;
                UFD p
            =CurrUser->FileMenu,temp;
                
            if (strcmp(FileName,p->FileName)==0// 頭結點文件時要刪除的文件
                {
                    CurrUser
            ->FileMenu=CurrUser->FileMenu->next;
                    free(p);
                    cout
            <<"文件刪除成功!\n";
                    DispUFD(CurrUser); 
            // 顯示當前UFD
                    return;
                }
                
            while (p->next)
                {
                    
            if (strcmp(FileName,p->next->FileName)==0)
                    {
                        temp
            =p->next;
                        p
            ->next=p->next->next;
                        free(temp);
                        cout
            <<"文件刪除成功!\n";
                        DispUFD(CurrUser); 
            // 顯示當前UFD
                        return;
                    }
                    p
            =p->next;
                }
                cout
            <<"您要刪除的文件不存在!\n";
                DispUFD(CurrUser); 
            // 顯示當前UFD
            }

            void Open() // 打開文件
            {
                
            char FileName[12];
                UFD p
            =CurrUser->FileMenu;
                cout
            <<"請輸入要打開的文件名: ";
                cin
            >>FileName;
                
                
            while (p)
                {
                    
            if (strcmp(FileName,p->FileName)==0)
                    {
                        
            if (!p->Open_RW)
                        {
                            cout
            <<"文件打開成功!\n";
                            p
            ->Open_RW=1;
                        }
                        
            else cout<<"文件已打開,重復打開失敗!\n";
                        
            return;
                    }
                    p
            =p->next;
                }
                cout
            <<"您要打開的文件不存在!\n";
                DispUFD(CurrUser); 
            // 顯示當前UFD
            }

            void Close() //關閉文件
            {
                
            char FileName[12];
                UFD p
            =CurrUser->FileMenu;
                cout
            <<"已打開的文件有:\n"
                    
            <<"-----------\n";
                
            while (p)
                {
                    
            if (p->Open_RW) cout<<"    "<<p->FileName<<endl;
                    p
            =p->next;
                }
                cout
            <<"-----------\n";
                p
            =CurrUser->FileMenu;
                cout
            <<"請輸入要關閉的文件名: ";
                cin
            >>FileName;
                
                
            while (p)
                {
                    
            if (strcmp(FileName,p->FileName)==0)
                    {
                        
            if (p->Open_RW)
                        {
                            cout
            <<"文件關閉成功!\n";
                            p
            ->Open_RW=0;
                        }
                        
            else cout<<"文件未被打開,關閉失敗!";
                        
            return;
                    }
                    p
            =p->next;
                }
                cout
            <<"您要關閉的文件不存在!\n";
                DispUFD(CurrUser); 
            // 顯示當前UFD
            }

            void Read() // 讀文件
            {
                
            char FileName[12];
                UFD p
            =CurrUser->FileMenu;
                cout
            <<"已打開的文件有:\n"
                    
            <<"-----------\n";
                
            while (p)
                {
                    
            if (p->Open_RW) cout<<"    "<<p->FileName<<endl;
                    p
            =p->next;
                }
                cout
            <<"-----------\n";
                p
            =CurrUser->FileMenu;
                cout
            <<"請輸入要讀的文件名: ";
                cin
            >>FileName;
                
                
            while (p)
                {
                    
            if (strcmp(FileName,p->FileName) == 0)
                    {
                        
            if (p->Open_RW)
                        {
                            
            if (strcmp("111",p->ProCode)==0 ||
                                strcmp(
            "110",p->ProCode)==0 ||
                                strcmp(
            "101",p->ProCode)==0 ||
                                strcmp(
            "100",p->ProCode)==0 )
                                cout
            <<"文件讀成功!\n";
                            
            else cout<<"文件保護類型不允許讀文件\n";    
                        }
                        
            else cout<<"該文件未被打開,請先進行打開操作!";
                        
            return;
                    }
                    p
            =p->next;
                }
                cout
            <<"該文件文件不存在!\n";
                DispUFD(CurrUser); 
            // 顯示當前UFD
            }

            void Write() // 寫文件
            {
                
            char FileName[12];
                UFD p
            =CurrUser->FileMenu;
                cout
            <<"已打開的文件有:\n"
                    
            <<"-----------\n";
                
            while (p)
                {
                    
            if (p->Open_RW) cout<<"    "<<p->FileName<<endl;
                    p
            =p->next;
                }
                cout
            <<"-----------\n";
                p
            =CurrUser->FileMenu;
                cout
            <<"請輸入要寫的文件名: ";
                cin
            >>FileName;
                
                
            while (p)
                {
                    
            if (strcmp(FileName,p->FileName) == 0)
                    {
                        
            if (p->Open_RW)
                        {
                            
            if (strcmp("010",p->ProCode)==0 ||
                                strcmp(
            "110",p->ProCode)==0 ||
                                strcmp(
            "111",p->ProCode)==0 ||
                                strcmp(
            "011",p->ProCode)==0 )
                                cout
            <<"文件寫成功!\n";
                            
            else cout<<"文件保護類型不允許寫文件\n";    
                        }
                        
            else cout<<"該文件未被打開,請先進行打開操作!";
                        
            return;
                    }
                    p
            =p->next;
                }
                cout
            <<"該文件文件不存在!\n";
                DispUFD(CurrUser); 
            // 顯示當前UFD
            }

            void Bye() // 退出系統
            {
                DispMDF();
                DispUFD(CurrUser); 
            // 顯示當前UFD        
            }

            void Welcome() // 操作界面
            {
                cout
            <<"\n------------File Management------------\n"
                    
            <<"     1. Create 2. Delete 3. Open\n"
                    
            <<"     4. Close  5. Read   6. Write\n"
                    
            <<"          7. Bye    8. ReLogin \n"
                    
            <<"          9. MDF    10. UFD    \n"
                    
            <<"--------------------------------------\n"
                    
            <<"請選擇操作命令: ";
            }

            void main()
            {
                InitSystem();
                
            int choice;
            ST:    
            if (LoginCheck())
                {
                    
            while (1)
                    {
                        Welcome(); 
            // 操作界面
                        cin>>choice;
                        
            switch (choice)
                        {
                        
            case 1: Create(); break// 創建新文件
                        case 2: Delete(); break// 刪除文件
                        case 3: Open(); break;   // 打開文件
                        case 4: Close(); break// 關閉文件
                        case 5: Read(); break;  // 讀文件
                        case 6: Write(); break// 寫文件
                        case 7: Bye(); goto END; // 打印MDF和UFD表并退出
                        case 8goto ST;
                        
            case 9: DispMDF(); break;
                        
            case 10: DispUFD(CurrUser); break;
                        }
                    }
                }
                
            goto ST;
            END: cout
            <<"已成功退出系統!\n";
                 system(
            "pause");
            }

            Feedback

            # re: 實驗三代碼 文件管理  回復  更多評論   

            2010-08-17 16:34 by shaker(太子)
            竟然讓我看到久違的goto

            # re: 實驗三代碼 文件管理  回復  更多評論   

            2010-08-17 21:37 by Brian
            @shaker(太子)
            慚愧慚愧,當時寫代碼太倉促了,今天把網易的博客搬到這里了,我當時不知道在首頁顯示是什么意思,稀里糊涂就選了,見笑了。

            # re: 實驗三代碼 文件管理  回復  更多評論   

            2010-08-17 23:11 by Bill Hsu
            話說,這些發到首頁不太合適呀。。。

            # re: 實驗三代碼 文件管理  回復  更多評論   

            2010-08-18 01:05 by Brian
            @Bill Hsu
            是啊大哥!!!!我今天把網易的博客連根拔到這里,不知道那幾個選項是干嘛的啊,我以為是發到自己的首頁,發完當時就明白了,罪過啊罪過啊!!!!見諒見諒!!!

            # re: 實驗三代碼 文件管理  回復  更多評論   

            2010-11-04 12:44 by 游客甲
            代碼中沒有用到AFD啊
            感覺上goto那個還有待改進
            国产A三级久久精品| 国产午夜福利精品久久| 久久精品国产99久久久古代| 性色欲网站人妻丰满中文久久不卡| av午夜福利一片免费看久久| 久久久久亚洲av成人无码电影 | 久久久久久国产精品美女 | 久久精品国产亚洲AV无码娇色| 91久久精品国产免费直播| 国内精品久久久久影院薰衣草 | 久久婷婷五月综合成人D啪| 精品熟女少妇av免费久久| 久久性生大片免费观看性| 久久精品国产69国产精品亚洲| 伊色综合久久之综合久久| 国产免费久久久久久无码| 久久精品国产亚洲AV大全| 伊人久久大香线蕉综合网站| 国产亚洲美女精品久久久| 狠狠色婷婷综合天天久久丁香 | 人妻无码久久精品| 777久久精品一区二区三区无码| 亚洲va中文字幕无码久久不卡 | 91精品国产高清久久久久久io| 精品国产乱码久久久久久呢 | 国产精品久久毛片完整版| 久久精品中文字幕大胸| 性做久久久久久久久久久| 久久99亚洲综合精品首页| 亚洲午夜久久影院| 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲国产一成人久久精品| 狠狠色婷婷久久一区二区| 久久精品国产99国产精品导航| 久久精品国产亚洲Aⅴ香蕉| 狠狠人妻久久久久久综合蜜桃| 久久综合九色综合97_久久久| 久久国产精品久久精品国产| 亚洲欧美精品伊人久久| 久久久久亚洲?V成人无码| 亚洲AⅤ优女AV综合久久久|