李科長(zhǎng)的煩惱:企業(yè)團(tuán)隊(duì)問(wèn)題名師(完整版)資料_第1頁(yè)
李科長(zhǎng)的煩惱:企業(yè)團(tuán)隊(duì)問(wèn)題名師(完整版)資料_第2頁(yè)
李科長(zhǎng)的煩惱:企業(yè)團(tuán)隊(duì)問(wèn)題名師(完整版)資料_第3頁(yè)
李科長(zhǎng)的煩惱:企業(yè)團(tuán)隊(duì)問(wèn)題名師(完整版)資料_第4頁(yè)
李科長(zhǎng)的煩惱:企業(yè)團(tuán)隊(duì)問(wèn)題名師(完整版)資料_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

李科長(zhǎng)的煩惱:企業(yè)團(tuán)隊(duì)問(wèn)題名師(完整版)資料(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

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

mkdir:用于創(chuàng)建子目錄

dir:用于顯示目錄

cd:更改當(dāng)前目錄create:創(chuàng)建文件

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

[3]寧正元等.《算法與數(shù)據(jù)結(jié)構(gòu)》.清華大學(xué)出版社

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論