李科長的煩惱:企業團隊問題名師(完整版)資料_第1頁
李科長的煩惱:企業團隊問題名師(完整版)資料_第2頁
李科長的煩惱:企業團隊問題名師(完整版)資料_第3頁
李科長的煩惱:企業團隊問題名師(完整版)資料_第4頁
李科長的煩惱:企業團隊問題名師(完整版)資料_第5頁
已閱讀5頁,還剩78頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

李科長的煩惱:企業團隊問題名師(完整版)資料(可以直接使用,可編輯優秀版資料,歡迎下載)

李科長的煩惱:企業團隊問題名師(完整版)資料(可以直接使用,可編輯優秀版資料,歡迎下載)李科長的煩惱案例分析:本案例講述的事某工科碩士院研究生畢業的劉平被原廠領導應邀回廠工作。因企業急需開發一些新產品,而此時李平的碩士畢業論文正是有關這方面的課題,而且該廠的領導對其以前的工作有良好的印象,企業決定任命李平為先技術科科長。她的工作是負責技術科的全面領導與企業新產品的開發工作。由于這批新產品的開發是相當復雜的工作,開發成功與否,對企業有重大影響。該廠成立新產品開發領導小組,由一位副廠長任組長,李平任副組長,但由于李平具體負責,小組成員還包括夏副科長、兩名技術人員、銷售科和供應科各一名副科長。但先前的技術科兩位副科長,王副科長與夏科長關系不融洽,在兩者之間處理工作關系時意見總是不一致,大家各執己見,在解決問題時這些建議又與李平建議向左,廠領導卻并不明確表態,僅僅強調團結,李平感到十分為難。李平感到這個科長真是很難當。本案例中透露出的問題是目前國營企業中存在的普遍性問題,依據我對本文案例分析。主要問題是新產品開發領導小組缺乏團隊管理方法所為、體現在如下幾個問題上:1.企業對李科長的任命是負責技術科的全面領導。與新產品的開發工作,成員在工作開展中建議又與自己向左,廠領導此時不表態支持誰,團隊定位不明確,矛盾與問題處理棘手。2.成立新產品開發領導小組,是有一位副廠長任組長,李平科長任副科長,但由李平具體負責,技術人員與管理人員分工不明確。3.兩位副科長之間的關系不融洽,以自己的主觀意識為主,帶著無我組織不合作的態度,在時間進度上不能保證團隊工作順利進行。4.李平在分配工作任務、確定技術措施、進行產品設計等方面,都通過各種會議征求大家的意見,充分民主,共同商定。這種決定我看是劉平在對負責技術科的全面領導與新產品開發工作開展權限的授予沒用到位。通過以上幾點可看出,若想改善目前局面,要從以下方面著手解決問題:1.作為一個新產品開發項目領導小組,團隊成員組成必需是為共同達到具體目標而建立的,所以在團隊定位上需要廠長做出合理的小組成員選用與調配。具體負責人李平科長與夏副科長,王副科長任命應作調整,易于開展工作。2.我認為作為副廠長參與小組的目的是小組計劃工作,氣的事在管理實踐進度與管理溝通上進行跟蹤與協調作用。3.兩位副科長之間的關系不融洽愛工作中會給工作完成滯后,早餐工作效率低下,以自己的主觀意識為主,沒有相互間的配合在新產品開發上項目完成時無法有結果的。4.作為科長的李平在分配工作任務、確定技術措施、進行產品設計等方面,應該先通過會議提議,各抒己見,共同商討。最后定奪一個最有說服力的方案匯報廠長執行。本案例中可看出作為有技術專長的李平,在處理技術方面有自己獨特的見解,可得不到廠領導的支持,在遇到團隊管理方面的問題無能為力情況下,促使工作不能順利進行,科里工作效率低,士氣不高,感到這個科長真是很難當。我認為企業對原任命可以稍作強調一下,因王副科長老資歷,任工作經驗很豐富,與現有各位廠領導關系很好,所以可在小組管理過程中負責香霧完成過程中時間協調關系,而李平技術方面強,應在小組技術管理方面負責并下達執行。這樣的執行過程中將管理進度上與管理技術上兩者分兩個小組,相互協助,才會使小組團結行動起來。事情將變簡單化。才能體現團隊小組的凝聚力。實現團隊最終目標。通過以上案例項目開展是我深深地感到實際操作這個項目的不易,回顧全過程,我局的如果李平擔任廠技術科科長工作,要想打開工作局面必須考慮在團隊管理中如下幾方面的管理措施:團隊是為了解決一個具體問題,達到一個具體目標而建立的。在構成上分五要素:1.明確小組的團隊目標。要明確本團隊目前的實際情況,要知道沒有目標這個團隊就沒有存在的價值。起咪表是全體成員奮斗的方向和動力,也是感召全體成員精誠合作的一面旌旗。2.團隊管理上要有定位。團度在企業中處于什么位置由誰來選擇和決定小組的決策,團隊小組最終對誰負責,分工要明確,明晰職責,憤青團隊采取什么樣的方式來共同完成工作。3.成員的構成。小組成員之間的低位和身份最好相當,不能相差太大,人員的選擇是團隊中非常差重要的一個部分。在一個團隊中可能需要有人出主意,有人頂計劃,有人實施人,有人協調不同的人一起去工作,還有人去監督團隊工作的進展等、不同的人通過分工來共同完成團隊的目標,在人員選擇方面要考慮人員的能力如何,技能是否互補,人員的經驗如何。4.權限的劃分與行人授權。對已授權的人員充分信任。信任是團隊的成員合作基礎。有了信任就要授權權限,并為起配合合適的資源。積極主動的與團隊成員溝通,與團隊成員保持暢通的信息交流,將團隊管理體制如玉的手。5.計劃的執行。目標的最終實現需要一些列具體行動,這里可以吧它理解為對該項目開發的實際進度與具體工作的程序計劃,解決問題是根源。以上幾要素是開展團隊管理必須具備的,李平在開展工作中藥敢于運用,在團隊矛盾產生的情況下,要維護三角關系。維護本人的成員領導間團隊整合,協調團隊內部之間的關系,使組織高效率運轉能力。要鼓勵成員間的扶持,不可過于對抗。要在管理者權威和團隊成員的判斷力和自制力之間取得平衡。一個完善的團隊,成員之間高度的互相信任,針對經過商討后,管理者在做出最終決定時不必再討論,因為已經是深思熟慮后了,做到充分相互信任。李平可借鑒成功團隊要求來管理。1.要使成員之間的新連載一起,具有團隊凝聚力2.強化成員間合作與配合關系、3.成員要明確團隊的禮儀,團隊的目標終于個人禮儀與目標,成功靠團隊共同推進,成員要明白既然是團隊行動,就要聽從主要負責人的安排決定,具體執行起來就容易些。因此小組若能善用團隊管理,就能激發成員潛能。協助問題解決,曾靜成員組織認同,提升組織效率與效能,具有一定的功能。在發揮團隊管理的效果,美味成員須先了解小組目標與市民及個人較色的責任,其次成員也須了解如何完成小組任務,最后要幾集投入小組目標達成。李平在實際問題處理分歧建議時應事先會議討論。聽取大家意見,達成共識。所以李平在任命前應該與廠長進行溝通,說明自己的想法及成員關系處理問題與打算,而且要在上任時邀請廠長參加議會。并提議由廠長說出由目前復雜成員分工,使之關系明朗化,便于日后好開展工作。李平在擔任科長工作時要做到以上提出的參考建議。給予小組進行合理分工。王副科長負責項目進度與協調工作,而自己與夏副科長負責產品技術開發試制問題,兩方面相互理解,配合工作,各自作出合理可行的計劃來。相互補充,最終做出果斷決策,才可能解決根本性問題,才能提高工作效率,達到提高成員士氣。河海大學《操作系統》課程設計設計名稱:模擬文件管理系統課程設計負責人:課程設計成員:河海大學計算機與信息學院二〇一一年十二月目錄Contents第一部分:課程設計目的 3第二部分:設計要求 3第三部分:運行環境 3第四部分:實驗內容 44.1前期知識鞏固 44.2設計任務 54.3詳細設計部分 104.3.1數據結構 104.3.2主要函數 114.3.3系統流程圖 11第五部分:調試分析 135.1用戶登錄 135.2創建文件 145.3查看文件 155.4刪除文件 155.5修改文件夾位置 16第六部分:參考文獻 16第七部分:附錄 177.1心得體會 177.2源代碼(代碼文字已縮小) 17第一部分:課程設計目的本設計的目的是實現操作系統和相關系統軟件的設計,其中涉及進程編程、I/O操作、存儲管理、文件系統等操作系統概念。具體指在內存中開辟一個虛擬的磁盤空間作為文件存儲器,在其上實現一個簡單的單用戶文件系統。在退出這個文件系統時應將該文件系統保存到磁盤上,以便下次可以再將它恢復到內存的虛擬磁盤空間中。第二部分:設計要求(1)對進行認真分析,列出實驗具體步驟,寫出符合題目要求的程序清單,準備出調試程序使用的數據。(2)設計一個10個用戶的文件系統,每次用戶可保存10個文件,一次運行用戶可以打開5個文件。(3)程序采用二級文件目錄(即設置主目錄MFD)和用戶文件目錄(UFD)。另外,為打開文件設置了運行文件目錄(AFD)。(4)文件保護簡單使用三位保護碼:允許讀寫執行、對應位為1,對應位為0,則表示不允許讀寫、執行。(5)以完整的論文形式提交原始代碼、設計文檔和可運行程序。提交的文檔應當包括:設計題目,程序清單,運行結果分析,算法及其優缺點,以及通過上機取得了哪些經驗。程序清單要求格式規范,注意加注釋(包含關鍵字、方法、變量等),在每個模塊前加注釋。(6)本組交一份設計文檔的同時每名組員交一份實踐體會。第三部分:運行環境windowsxp系統,windows7旗艦版系統編譯器:MicrosoftVisualC++6.0編輯語言:c++第四部分:實驗內容4.1前期知識鞏固A、文件系統:文件系統是操作系統的五大功能模塊之一,主要實現操作系統對程序、數據、設備等的管理。文件系統的主要功能:完成文件存儲空間管理,實現文件名到物理地址的映射,實現文件和目錄的操作管理,提供文件共享能力和安全措施等功能。B、文件文件是信息的一種組織形式,是存儲在外存上的帶有標識號的一組相關信息的集合,而這個集合既可以由相關聯的字符流組成,也可以由相關聯的記錄組成。文件的構成:文件控制塊(FCB)、數據。FCB是系統在管理文件時所需信息的數據結構,是文件存在的惟一標志。包括了文件的基本屬性,大致有文件名、地址、存取控制信息(如文件所有者、同組用戶、訪問權限)以及使用信息(如創建日期、修改日期)。C、文件目錄文件控制塊的有序集合稱為文件目錄。文件目錄的基本功能是實現文件名與其存放位置的映射。D、文件的物理結構常用的結構有順序結構、鏈接結構、文件分配表結構FAT、索引結構、多級索引結構。E、文件操作文件的操作就是創建/刪除文件、打開/關閉文件、讀/寫文件等F、磁盤空間管理文件系統的一個重要任務是對磁盤空間進行管理。磁盤空間管理的關鍵問題是磁盤空閑空間的管理。常用的空閑塊管理方法有:空閑文件目錄法、空閑塊鏈法、位示圖法、空閑塊成組鏈接法。4.2設計任務建立一個大文件,把它假象成一張盤,在其中實現一個簡單的模擬Linux文件系統。在現有機器硬盤上開辟1M的硬盤空間,模擬作為作為設定的硬盤空間。編寫一管理程序simdisk對此空間進行管理,以模擬Linux文件系統,要求:盤塊大小1k空閑盤塊的管理:Linux位圖法結構:超級塊,i結點區,根目錄區該文件管理程序的功能要求如下:Format:對文件存儲器進行格式化

mkdir:用于創建子目錄

dir:用于顯示目錄

cd:更改當前目錄create:創建文件

write:寫文件read:讀文件del:刪除文件access:權限程序的總體流程為:初始化文件目錄;輸出提示符,等待接受命令,分析鍵入的命令;對合法的命令,執行相應的處理程序,否則輸出錯誤信息,繼續等待新命令,直到鍵入EXIT退出為止??傮w流程圖如下所示:是是登錄輸入命令退出退出失敗成功否啟動執行命令以下是各功能模塊流程圖:初始化當前狀態讀入i節點信息到內存當前目錄為根目錄初始化當前狀態讀入i節點信息到內存當前目錄為根目錄初始化超級塊結束開始初始化函數format()是是否否遍歷i節點區argv[1]=”..”目錄是否存在找到的目錄i節點號送當前目錄inum_cur當前目錄的父i節點號送當前目錄inum_cur開始結束改變當前目錄cd()是是是是否否遍歷i節點區i節點的父節點是否為當前目錄i節點區是否遍歷完輸出文件名或目錄名開始結束顯示目錄dir()是是否否遍歷i節點區要創建的目錄是否存在是否有空的i節點遍歷i節點區分配一個目錄i節點開始結束創建目錄mkdir()是是是是否否遍歷目錄索引要創建的文件是否存在是否有空的i節點遍歷i節點區分配一個文件i節點開始結束創建文件creat()是否遍歷i節點區要刪除的文件是否存在釋放文件對應的i節點區effect=0開始結束刪除文件del()是是否是否是否遍歷i節點區要打開的文件是否存在提示輸入打開模式將打開文件信息寫入打開文件信息表file_array[]遍歷打開文件表file_array[]文件是否已經打開提示輸入開始位置和讀字節數調用讀塊操作,讀出塊內字符模式是否為可讀開始結束開始結束打開文件open()讀文件read()是是否是否遍歷打開文件表file_array[]文件是否已經打開提示輸入寫入字節數調用寫塊操作,寫入塊內字符模式是否為可寫是否遍歷打開文件表file_array[]文件是否已經打開將打開文件表項標志位置-1file_array[i].inum=-1開始結束寫文件write()開始結束關閉文件close()開始遍歷i節點區開始遍歷i節點區是待刪除目錄嗎?遍歷子目錄子目錄為空嗎?是文件嗎?是空目錄嗎?結束調用delet()刪除目錄或文件是空目錄嗎?刪除目錄樹rd()是是否否否否否是是是開始當前是否有該文件是否為管理員是否為普通用戶是公用么結束判斷權限access()是否否否查找該文件是是有讀寫權限查找該文件是是是否遍歷位示圖表查找空閑塊bitmap[]是否有空閑塊分配一塊,將位示圖位置置’1’。返回找到的空閑塊號將位示圖位置置’0’。bitmap[i]='0清空塊內容開始結束分配磁盤塊get_blk()開始結束釋放磁盤塊release_blk(int)是是否輸出給定i節點對應的第1塊內容文件是否大于1塊輸出給定i節點對應的第2塊內容是否將緩沖區buf內容寫入第1塊buf內容是否大于512字節將緩沖區buf的512字節后面的內容寫入第2塊開始結束寫磁盤塊write_blk(int)開始結束讀磁盤塊read_blk(int)4.3詳細設計部分4.3.1數據結構定義功能描述數據結構typedefenumFileAccess文件元素可供操作性權限typedefenumFileType文件元素類型typedefenumUserType用戶類型typedefenumFileStatus文件狀態typedefstructFileIndexElement一個文件索引結構typedefstructFileIndex文件索引結構或目錄表項typedefstructfbFileBlock文件塊的結構typedefstructBitMap文件系統的位示圖結構typedefstructSuperBlock;文件系統結構typedefstructUser用戶信息typedefstructfseFSElement文件系統中的元素結構,包括文件和文件夾typedefstructCurrentStatus系統當前狀態4.3.2主要函數定義功能描述函數unsignedFindBlankFileBlockId()char*FindBlankFileBlock(unsignedfileblockid)尋找第一個文件塊地址voidGetCurrentTime(char*currtime)得到當前時間的字符串voidAddFileIndex(unsignedfileblockid,unsignedfilelevel,char*filename,char*parentname,FileTypetemp)更新文件索引voidUpdateBitMap(unsignedfileblockid)更新位示圖FSElementCreateFileElement(FileAccessacc,char*filename,FileTypetype,char*filecontent,FSElement*parent)創建一個文件元素FileBlock*CreateFileBlockList(char*datahead,unsignedblockcap,unsignedlen)創建文件塊鏈表boolInitFileSys()初始化模擬文件系統boolLogin()voidCreate(char*filename)系統登錄模塊創建一個文件voidDir(char*path)列出當前目錄的文件和文件夾voidMkdir(char*filename)創建一個文件夾voidCd(char*path)進入一個文件夾voidDelete(char*path)刪除當前目錄的文件數據結構voidFindCommKey(char*command,char*key,char*path)命令分解voidShell()命令解釋模塊voidClearFileSys(退出時清理分配的內存空間4.3.3系統流程圖(1)Login用戶登錄用戶輸入用戶名和密碼,在passwd文件中查找是否有此用戶,核對密碼。正確則登陸成功,當前目錄設定到當前用戶文件夾下。(2)format格式化初始化超級塊,初始化主目錄,初始化管理員admin目錄,初始化用戶目錄,初始化用戶passwd文件。(3)create創建文本文件查找當前目錄下是否有同名文件,是則退出,否則讓用戶輸入文本文件內容,以‘###’結束。申請硬盤空間,申請失敗則結束。將文件內容寫入硬盤空間。修改當前目錄的結構,修改超級塊。(4)cdir創建文件夾查找當前目錄下是否有同名文件,是則退出,否則,申請硬盤空間,申請失敗則結束。將文件夾內容寫入硬盤空間。修改當前目錄的結構,修改超級塊,寫入模擬硬盤。(5)readedit–讀取和追加文本文件(6)Read查找當前目錄下是否該文件,沒有則退出,否則調用access()權限判斷,有權限則判斷是不是文件,不是則退出,是文件則讀取文件并顯示。(7)Edit調用讀取文件模塊,讀取成功則用戶輸入追加的內容,如果追加的內容大于一個硬盤分配空間則申請分配空間,失敗則退出,申請成功則保存文件。(8)access(文件名)權限判斷先判斷當前目錄是否有該文件,在當前目錄的硬盤空間找到該文件,判斷當前登錄用戶是哪個組,判斷是否該用戶創建,判斷該文件的可見級別。如果是該用戶創建的則有讀寫權限如果當前用戶是管理員組的也具有讀寫權限如果該文件是用戶可查看文件則都具有權限。(9)cd–進入子目錄或上級目錄查找當前目錄是否有該子目錄,沒有則退出,調用access()判斷當前用戶是否有權限,無則退出,有則讀取該子目錄的目錄,將當前目錄指向該目錄。(10)attr(文件名)查看文件或者文件夾的屬性先查找當前目錄下是否有該文件或目錄,有則判斷文件是否系統文件,是否文本文件,是否目錄,由誰創建,屬于什么組,占用的空間和目錄。將其全部顯示出來。(11)del刪除文件或目錄查找當前目錄是否有該文件名,沒有則退出,有則調用access()判斷是否有權限,有則判斷是否為系統文件,是則無法刪除,不是則判斷是否是文件,是文件則直接刪除,不是則判斷是否文件夾,是文件夾則判斷該文件夾下是否有文件,有文件則無法刪除。提示用戶是否刪除,確認則刪除文件,修改當前文件夾目錄和硬盤空間結構,修改超級塊,寫入模擬硬盤。(12)Dir列文件目錄(列出文件名、物理地址、保護碼和文件長度)第五部分:調試分析5.1用戶登錄初始登陸界面,根據注冊用戶的信息,每次登陸有三次登陸機會,如果失敗即結束并退出,用戶名和驗證碼與注冊的信息一致則進入系統,下圖顯示的是登陸時失敗的畫面:登陸成功后畫面顯示:5.2創建文件創建文件并輸入文件內容,我們的創建文件模式為“CREAT+文件名稱”,下圖的名稱為123,之后系統顯示輸入文件內容,同時會提醒內容以“###”結尾,此便于系統識別,具體畫面如下所示:下面是創建文件夾,文件夾不需要輸入文件信息。5.3查看文件根據之前創建的文件,可以查看當前文件夾中已經創建文件的信息。命令“dir”。5.4刪除文件創建文件夾并刪除,創建文件夾的命令為“CDIR+文件夾名稱”,下圖以123為例;刪除命令為DEL+文件夾名稱/文件名稱,下圖還以AAA文件夾為例,如下圖所示:刪除后查看,可以驗證文件已經刪除。5.5修改文件夾位置第六部分:參考文獻[1]羅宇等.《操作系統(第2版)》.電子工業出版社[2]譚浩強.《C++程序設計》.清華大學出版社

[3]寧正元等.《算法與數據結構》.清華大學出版社

[4]林銳.《高質量程序設計》.電子工業出版社[5]張乃孝.《算法與數據結構-c語言描述》(第二版).高等教育出版社[6]嚴蔚敏等.《數據結構(C語言版)》.清華大學出版社[7]蘇仕華等.《數據結構課程設計》.機械工業出版社[8]第七部分:附錄7.1心得體會在本次課程設計剛剛開始時,不知道怎么設計,只知道大概的結構。后來認真閱讀課本有關的知識,知道怎樣設計結構體才方便文件操作。知道怎樣設計后,寫程序時也遇到很多的障礙,特別是指針的改接和指向和出錯處理。此時深感自己編程能力的不足,經過多次修改,終于設計好了該設計。通過該課程設計,使我們更了解了課本知識,鞏固了課本知識,同時也使我們的編程能力有了一定的提高,最重要的是我們深切體會到團隊的重要,怎么配合和分工才能更快更好的完成任務。7.2源代碼(代碼文字已縮小)#include<iostream>#include<time.h>#include<string>#include<fstream>#include<sstream>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<iomanip>#include<io.h>#include<malloc.h>#include<dos.h>#include<conio.h>#include<windows.h>#defineBOOLintusingnamespacestd;constunsignedFILE_SYS_SIZE=1024*1024;//模擬文件系統的容量設為1MconstunsignedBITMAP_LEN=64;//位示圖的長度512/8constunsignedBLOCK_SIZE=512;//一個文件塊的大小constunsignedBLOCK_COUNT=512;//文件系統中文件塊的數量constunsignedNAME_LEN=15;//最長文件名的長度constunsignedPASSWORD_LEN=15;//用戶密碼的最大長度constunsignedLOGIN_COUNT=3;//用戶登錄嘗試次數constunsignedCOMMAND_LEN=200;//命令行最大長度constunsignedPRO_SET_COMM_COU=11;//預設命令數constunsignedUSER_NAME_SIZE=15;//最大用戶名長度constunsignedUSER_PASSWORD_SIZE=15;//最大用戶密碼長度constunsignedMAX_USER_NUMBER=10;//最多用戶數目constunsignedMAX_FILE_SIZE=200;//最大文本字符數目constchar*PRO_SET_COMM[]={"creat","format","read","write","logout","del","cdir","cd","dir","exit","help"};//文件元素可供操作性權限typedefenum{pub,//任何人可做任何操作(公共文件,所有人都可查看)protect,//非創建者或ADMIN,只可以察看(保護,只有自己和管理員可查看)pri//非創建者或ADMIN,不可以做任何操作(系統文件)}FileAccess;//文件元素類型typedefenum{file,//文件dir//文件夾}FileType;//表示文件狀態typedefenumFileStatus{closed,opened,reading,writing};//一個文件索引結構(文件節點)structFileIndexElement{unsignedIndex;//文件元素索引編號charFileName[NAME_LEN];//文件元素名charParentName[NAME_LEN];//父節點名unsignedFileBlockId;//文件元素所在物理塊編號unsignedFileLevel;//文件元素所在層次,層+文件元素名為一個文件元素的邏輯位置charcreatTime[18];//文件創建時間char*filecontent;//文件內容BOOLeffect;//是否有效,0-無效,1-有效FileTypeType;//識別文件還是目錄};//文件索引結構或目錄表項(文件目錄結構)structFileIndex{FileIndexElement*FIStart;//文件系統中的文件索引起始位置unsignedFILen;//文件索引的最大長度unsignedFICount;//文件索引數量};//文件塊的結構(存儲數據塊結構)structFileBlock;typedefstructFileBlock*pFileBlock;structFileBlock{unsignedFileBlockId;//文件塊編號unsignedBLOCK_SIZE;//文件塊的容量char*FileBlockAddr;//文件塊地址pFileBlocknext;//下一個文件塊的地址};//文件系統的位示圖結構(用于顯示分配的存儲器分配情況)structBitMap{unsignedBITMAP_LEN;//文件位示圖長度char*BMStart;//位示圖的起始指針};//文件系統結構(超級塊的結構,全局變量)structSuperBlock{char*FSStart;//文件系統的起始地址unsignedSuperBlockSize;//文件系統的容量BitMapbm;//文件系統中的位示圖unsignedBLOCK_COUNT;//文件系統中文件塊的數量pFileBlockhead;//文件系統中文件塊首地址FileIndexFI;//文件系統中的文件索引};//登陸用戶的數據結構(用戶的數據結構)structUser;typedefstructUser*pUser;structUser{char*UserName;//用戶名稱char*password;//用戶密碼intisAdmin;//用戶類型,1表示管理員,0表示用戶pUserNextUser;};structLoginStruct{intUser_Login_tims; intUserNum; pUserpUserList;};//文件系統中的元素結構,包括文件和文件夾(邏輯文件的定義,樹形結構)structFSElement;typedefstructFSElement*pFSElement;structFSElement{pFSElementparent;//指向自己的父親節點unsignedFileLevel;//文件元素所在層次,層+文件元素名為一個文件元素的邏輯位置charFileName[NAME_LEN];//文件元素名unsignedFileBlockId;//文件元素所在物理塊編號unsignedFileElemLen;//文件元素的長度FileTypeType;//文件元素類型FileAccessAccess;//文件元素可供操作的權限UserCreator;//文件創建者charCreateTime[18];//創建時間,日期格式:MM/DD/YYHH:MI:SScharLastModTime[18];//最后一次修改時間char*FileData;//一個文件的數據開始地址,文件夾時該值為NULLFileStatusfileStu;//如果是一個文件表示文件當前的狀態};//系統當前狀態structCurrentStatus{UserCurrentUser;//當前用戶unsignedFileLevel;//用戶所在文件系統層FSElement*CurrParent;//當前層的父節點char*CurrentPath;//當前路徑};SuperBlockFS;//一個全局文件系統的變量CurrentStatusCS;//當前系統狀態FSElement*base;//文件元素的根LoginStructLoginS;//用戶列表,在登錄的時候用到,以鏈表形式存儲boolInitFileSys();//(初始化文件函數)//========================================================================================//函數說明:權利聲明voidRight(void){ cout<<"文件管理系統[版本1.4]\n"; cout<<"版權所有(c)2021計算機4班。保留所有權利。\n\n"; return;}//==========================================================================================//函數介紹:尋找第一個空白的文件塊ID//返回值:返回第一個空白塊的IDunsignedFindBlankFileBlockId(void){unsignedcharc; //通過位示圖查找可以簡化 {if(c==0x7F) {returni*8;//一個字節左邊第一位為0,表示該區域未使用 }if(c==0xBF) {returni*8+1; }if(c==0xDF) {returni*8+2; }if(c==0xEF) {returni*8+3; }if(c==0xF7) {returni*8+4; }if(c==0xFB) {returni*8+5; }if(c==0xFD) {returni*8+6; }if(c==0xFE) {returni*8+7; } }returnBLOCK_COUNT+1;}//================================================================================================//函數介紹:尋找第一個文件塊地址(根據文件塊ID,找文件塊)//輸入參數:fileblockid文件塊ID//返回值:返回文件塊的地址char*FindBlankFileBlock(unsignedfileblockid){FileBlock*fblock=FS.head;while(fblock->next!=NULL) {if(fblock->FileBlockId==fileblockid) {returnfblock->FileBlockAddr;//如果找到文件塊,返回文件塊的地址, }else {fblock=fblock->next; } }returnNULL;//沒有找到,返回空。}//==================================================================================================//函數介紹:得到當前時間的字符串//輸入參數:時間字符串的指針voidGetCurrent_Time(char*currtime){chardbuffer[9];chartbuffer[9];_strdate(dbuffer);//獲得日期_strtime(tbuffer);//獲得時間strcpy(currtime,dbuffer);strcat(currtime,"");strcat(currtime,tbuffer); //將兩者拼接在一起,并用空格隔開}//=================================================================================================================//函數介紹:更新文件索引//輸入參數:fileblockid文件塊IDvoidAddFileIndex(unsignedfileblockid,unsignedfilelevel,char*filename,char*parentname,FileTypetemp){if(parentname==NULL) {//如果沒有父親節點的話,將其父親節點格式化 }else { }}//==================================================================================================//函數介紹:更新位示圖//輸入參數:fileblockid文件塊ID更改對應的位示圖voidUpdateBitMap(unsignedfileblockid){//計復所在位示圖的位置intdirInBitmap=((int)(fileblockid/8));intdirInChar=fileblockid%8;intxor;switch(dirInChar) {case0:xor=0x80;break;case1:xor=0x40;break;case2:xor=0x20;break;case3:xor=0x10;break;case4:xor=0x08;break;case5:xor=0x04;break;case6:xor=0x02;break;case7:xor=0x01;break; }*c=*c^xor;}//==================================================================================================================//函數介紹:創建一個文件元素//輸入參數:acc文件元素可操作權限,filename文件元素名稱,type文件元素類型,filecontent文件內容,parent指向其父節點//返回值:返回一個文件元素的指針pFSElementCreateFileElement(FileAccessacc,char*filename,FileTypetype,char*filecontent,FSElement*parent){unsignedblankFileBlockId=FindBlankFileBlockId();//尋找空閑的文件塊char*blank=FindBlankFileBlock(blankFileBlockId);//blank為找的空白文件塊的地址FSElement*fs=(FSElement*)blank;intflag=0; { //判斷是否有完全相同的文件,(文件名,文件是否有效,文件的層次,文件的類型) {printf("文件名重復!\n");flag=1; returnNULL; } }//if(flag)returnNULL; //查找第一個空白文件塊IDif(blankFileBlockId>=BLOCK_COUNT) { //如果沒有空白的文件塊存儲的話printf("未找到一個文件塊的id\n");returnNULL; }//查找第一個空白塊的地址if(blank==NULL) {printf("未找到一個文件塊的地址\n");returnNULL; }//更新索引表fs->Access=acc;//文件操作權限fs->Creator=CS.CurrentUser;//文件的創建者GetCurrent_Time(fs->CreateTime);//文件創建時間fs->FileBlockId=blankFileBlockId;//文件所在的文件快號fs->FileLevel=CS.FileLevel;//文件所在的邏輯層次strcpy(fs->FileName,filename);strcpy(fs->LastModTime,fs->CreateTime);//最后修改時間fs->Type=type;//文件類型fs->parent=parent;if(type==dir) {fs->FileElemLen=sizeof(FSElement);fs->FileData=NULL; }else { fs->FileElemLen=(unsigned)strlen(filecontent);//fs->FileElemLen=(unsigned)strlen(filename);fs->fileStu=closed;fs->FileData=(char*)fs+sizeof(FSElement);if(filecontent) {strcpy(fs->FileData,filecontent); } } { { } }//更新索引if(parent==NULL) {AddFileIndex(blankFileBlockId,CS.FileLevel,filename,NULL,type); }else {AddFileIndex(blankFileBlockId,CS.FileLevel,filename,parent->FileName,type); }//更新BITMAP位示圖UpdateBitMap(blankFileBlockId);returnfs;}//==================================================================================================//函數介紹:創建文件塊鏈表//輸入參數:datahead第一塊數據的地址,blockcap一個文件塊的大小,len鏈表的長度//返回值:返回鏈表的頭指針FileBlock*CreateFileBlockList(char*datahead,unsignedblockcap,unsignedlen){if(datahead==NULL||len==0) {returnNULL; }FileBlock*head;//文件塊鏈表頭指針FileBlock*pnew;FileBlock*pold;//將每個文件塊分配內存空間head=pold=pnew=(FileBlock*)malloc(sizeof(FileBlock));for(unsignedi=0;i<len;i++) {pold->FileBlockId=i;pold->BLOCK_SIZE=BLOCK_SIZE;pold->FileBlockAddr=datahead+i*blockcap;memset(pold->FileBlockAddr,'\0',blockcap); //分別將每個文件塊初始化,并將其文件塊大小的空間格式化。if(i!=len-1) {pnew=(FileBlock*)malloc(sizeof(FileBlock)); }else {pnew=NULL; }pold->next=pnew;pold=pnew; }returnhead;}//====================================================================================================//函數介紹:初始化模擬文件系統//返回值:true-初始化成功,false-初始化失敗boolInitFileSys(void){//初始化模擬的文件系統FS.FSStart=(char*)malloc(sizeof(char)*FILE_SYS_SIZE);//文件模擬大小,分配1M的空間大小if(FS.FSStart==NULL)//如果失敗,返回 { cout<<"系統初始化失敗。";returnfalse; }FS.SuperBlockSize=FILE_SYS_SIZE;//初始化文件系統空間大小//設置位示圖為未使用 //作用,將從位示圖的初始地址到,位示圖大小的這段空間都置為空,空用'\0'表示 FS.BLOCK_COUNT=BLOCK_COUNT;//初始化文件系統索引 //文件塊的首地址是從給定的地址減去分配給位示圖之后的初始地址//因為是模擬系統,為簡化問題,暫定一個文件或文件夾(一個文件元素)最多占用一個文件塊,一個文件塊只放一個文件元素 //包括所有文件索引的大小,以及兩個記錄信息的大小索引最大長度,文件索引數量//初始化文件塊FS.head=CreateFileBlockList((FS.FSStart+FILE_SYS_SIZE-BLOCK_SIZE*BLOCK_COUNT),BLOCK_SIZE,FS.BLOCK_COUNT); //區域的后BLOCK_SIZE*BLOCK_COUNT個單元用來存儲數據if(FS.head==NULL) { cout<<"系統初始化失敗。";returnfalse; } //以上為初始化超級快,下面是初始化系統當前狀態 //初始化系統當前狀態CS.CurrParent=NULL;CS.FileLevel=0;CS.CurrentPath=(char*)calloc(COMMAND_LEN,sizeof(char));//初始化當前路徑//創建一個根目錄base=CreateFileElement(pub,"root",dir,NULL,NULL);if(base==NULL) { cout<<"存儲空間不夠。";returnfalse; }else { //下面是初始化用戶列表 LoginS.User_Login_tims=0; LoginS.UserNum=0; fstreamfs; fs.open("users.txt"); if(!fs) { cout<<"讀取用戶文件失敗,系統將自動退出。"; Sleep(3000); //延時3秒鐘,給用戶展示的時間 returnfalse; } //cout<<"成功。"; while(!fs.eof())//將系統用戶載入 { pUserp=(pUser)malloc(sizeof(structUser)); p->UserName=(char*)calloc(USER_NAME_SIZE,sizeof(char)); fs>>p->UserName; p->password=(char*)calloc(USER_PASSWORD_SIZE,sizeof(char)); fs>>p->password; fs>>p->isAdmin; p->NextUser=NULL; p->NextUser=LoginS.pUserList; LoginS.pUserList=p; LoginS.UserNum++; }returntrue; } returnfalse;}//===============================================================================================//展示幫助菜單//showhelp()voidshowhelp(void){cout<<"有關某個命令的詳細信息,請鍵入HELP命令名\n"; cout<<"FORMAT\t格式化文件系統\n"; cout<<"HELP\t提供文件系統命令的幫助信息\n";cout<<"LOGOUT\t退出登錄文件系統\n";cout<<"CREAT\t創建文件\n";cout<<"CDIR\t創建文件夾\n";cout<<"DEL\t刪除文件或文件夾\n";cout<<"CD\t顯示當前目錄的名稱或將其更改\n";cout<<"DIR\t顯示一個目錄中的文件和子目錄\n";cout<<"EXIT\t退出系統\n"; return;}//========================================================================================//函數介紹:系統登錄模塊//返回值:true登錄成功,false登錄失敗boolLogin(void){charusername[USER_NAME_SIZE]="";intc;for(c=0;c<LOGIN_COUNT;c++) {inti=0;if(strcmp(username,"")==0)//一個管理員 { }else { }CS.FileLevel++;CS.CurrParent=base;strcpy(CS.CurrentPath,"/");//showhelp();//printf("\n%s/root%s>",username,CS.CurrentPath);break; }if(c>=LOGIN_COUNT)//非法用戶 {printf("\n對不起,您不是該系統用戶,按任意鍵退出系統。\n");returnfalse; }else {returntrue; }}//==================================================================================================//函數介紹:創建一個文件//只需修改全局變量,返回值為空。voidCreateFile(char*filename){ //cout<<filename;if(strcmp(filename,"")==0) {printf("對不起,文件名不能為空。\n"); }else {char*buf;buf=(char*)malloc(sizeof(char)*MAX_FILE_SIZE);memset(buf,'\0',MAX_FILE_SIZE);//將索引塊的信息置為空printf("輸入文件內容,以\"###\"結束:\n");intk=0;//記錄#的個數inti=0;//記錄字符串中字符的個數while(k!=3) { buf[i]=getchar(); if(buf[i]=='#') { k++; if(k==3)break; } else k=0; i++; if(i>=MAX_FILE_SIZE-3) { cout<<"超過限定文本文件大??!"; return; } }//cout<<buf<<'\t';//測試CreateFileElement(protect,filename,file,buf,CS.CurrParent); }}//=====================================================================================================//函數介紹:列出當前目錄的所有文件和文件夾//輸入參數:path路徑voidDir(char*path){//chardisplay[COMMAND_LEN];//memset(display,'\0',COMMAND_LEN); cout<<"創建時間\t\t文件名/目錄名\t文件類型\t所有者\t文件大小\n"; chartime[18];//獲取現在的時間 GetCurrent_Time(time); cout<<time<<'\t'<<"."<<"\t\t<DIR>"<<endl;cout<<time<<'\t'<<".."<<"\t\t<DIR>"<<endl;//查找顯示內容 { //尋找當前文件夾下的所有文件,索引文件的父節點為當前節點,文件有效,層數相等。 { {//strcat(display,"+"); } else { } } }}//======================================================================================//函數介紹:創建一個文件夾//輸入參數:文件夾名voidMkdir(char*filename){if(strcmp(filename,"")==0) {printf("對不起,文件夾名不能為空。\n"); }else { //文件夾是沒有文本內容的,參數分別表示為(權限、文件名稱、文件類型、文件內容、文件的父親指針)CreateFileElement(protect,filename,dir,NULL,CS.CurrParent); }}//=========================================================================================//函數介紹:從當前文件夾進入另外一個文件夾,可以是自己父親的文件夾,也可以是自己兒子的文件夾//輸入參數:文件名稱voidCd(char*path){intflag=0;inti;//進行對索引文件搜索 { //如果是其父節點的話,需要匹配的條件是:(有與所在目錄相同的父節點、兩者在同一個層次、文件有效、兩者的名字相同、其父節點必須是文件夾)flag=1;//標志位 }if(flag||strcmp(path,"..")==0)//cd..也可以返回到父節點 {intsplitDisplayCou=0;//分割符出現的次數if(strcmp(path,"..")==0)//返回上一級目錄,即父目錄 { //如果層數夠的話if(CS.FileLevel>0) {CS.FileLevel--;CS.CurrParent=CS.CurrParent->parent; //將當前狀態的文件夾父親節點賦值給馬上進入的節點for(unsignedi=strlen(CS.CurrentPath)-1;i>0;i--) {if(CS.CurrentPath[i]=='/') {splitDisplayCou++;if(splitDisplayCou==2)//已過濾掉最后一個目錄名 {break; } } }chartemppath[COMMAND_LEN];strcpy(temppath,CS.CurrentPath);memset(CS.CurrentPath,'\0',COMMAND_LEN);strncpy(CS.CurrentPath,temppath,i+1); } }else { //如果是兒子節點的話,會進入下一層。chardisplay[100]=""; { {strcpy(display,"文件存在。\n");CS.FileLevel++;strcat(CS.CurrentPath,path);strcat(CS.CurrentPath,"/");break; } }if(strcmp(display,"")==0)//文件夾不存在,什么都不做 {printf("當前目錄下沒有您要進入的文件夾。\n"); } } }else {printf("輸入的目錄有錯!\n"); }}//=========================================================================================================//函數介紹:刪除當前目錄的文件//輸入參數:path路徑,文件名稱voidDelete(char*path){chardisplay[100]="";//記錄是否有要刪除的文件//在目錄索引中一個一個尋找,同名,同層文件 { //查找父親節點名字與當前坐在文件夾名相同、和自己節點曾數相同、文件有效、和自己的名字相同完全匹配的文件 {strcpy(display,"文件已刪除。\n");break; } }//如果沒有要刪除的文件if(strcmp(display,"")==0) {strcpy(display,"當前目錄下沒有您要刪除的文件。\n"); }printf("%s\n",display);}//===========================================================================================//函數介紹:命令分解(將輸入的命令分解)//輸入參數:command用戶輸入命令字,key關鍵字,path路徑voidFindCommKey(char*command,char*key,char*path){for(unsignedi=0;i<strlen(command);i++) {if(command[i]=='') {i++;if(i<strlen(command)) {strcpy(path,command+i); }break; }if(i<=9) {key[i]=command[i]; }else {for(unsignedj=i;j<strlen(command);j++) {if(command[j]!='') {strcpy(path,command+j);break; } }break; } } //將字符串都轉化為小寫的形式strlwr(key);strlwr(path);}//======================================================================================//函數介紹:退出時清理分配的內存空間//函數:ClearFileSys()返回空(還存在問題,內存沒有完全釋放掉)voidClearFileSys(){free(CS.CurrentPath);free(FS.FSStart);}//===================================================================================//函數說明:登錄模塊//我們的用戶登錄模塊,當登錄成功返回1,不成功返回0BOOLUserLogin(void){for(;LoginS.User_Login_tims<LOGIN_COUNT;LoginS.User_Login_tims++) { cout<<"\t\t>>>>>>>>>>>>>>>>>>>用戶登錄<<<<<<<<<<<<<<<<<<<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論