版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
操作系統(tǒng)
課程設(shè)計(jì)報(bào)告學(xué)院:信息科學(xué)與工程學(xué)院專(zhuān)業(yè)班級(jí):學(xué)號(hào):計(jì)算機(jī)科學(xué)與技術(shù)09**專(zhuān)業(yè)班級(jí):學(xué)號(hào):計(jì)算機(jī)科學(xué)與技術(shù)09**班岸」09090928**姓名:***指導(dǎo)教師:宋虹2012年6月目錄TOC\o"1-5"\h\z\o"CurrentDocument"一、 概述 1\o"CurrentDocument"二、 課程設(shè)計(jì)要求 1\o"CurrentDocument"三、 設(shè)計(jì)的基本原理和概念 1\o"CurrentDocument"四、 詳細(xì)設(shè)計(jì):使用主要控件、函數(shù) 6\o"CurrentDocument"線程1函數(shù)(獲得兩個(gè)隨機(jī)數(shù))…… 6\o"CurrentDocument"線程2函數(shù)(計(jì)算它們的和) 7線程3函數(shù)(輸出結(jié)果) 8\o"CurrentDocument"信號(hào)量控制 8\o"CurrentDocument"登錄以及用戶(hù)切換 8\o"CurrentDocument"新增用戶(hù)函數(shù) 10\o"CurrentDocument"五、 運(yùn)行及使用 11\o"CurrentDocument"六、 實(shí)驗(yàn)總結(jié) 14參考文獻(xiàn) 15_、概述操作系統(tǒng)課程主要講述的內(nèi)容是多道操作系統(tǒng)的原理與技術(shù),與其它計(jì)算機(jī)原理、編譯原理、匯編語(yǔ)言、計(jì)算機(jī)網(wǎng)絡(luò)、程序設(shè)計(jì)等專(zhuān)業(yè)課程關(guān)系十分密切。本課程設(shè)計(jì)的目的綜合應(yīng)用學(xué)生所學(xué)知識(shí),建立系統(tǒng)和完整的計(jì)算機(jī)系統(tǒng)概念,理解和鞏固操作系統(tǒng)基本理論、原理和方法,掌握操作系統(tǒng)開(kāi)發(fā)的基本技能。二、 課程設(shè)計(jì)要求采用VC、VB、java或C等編程語(yǔ)言,模擬開(kāi)發(fā)一個(gè)多用戶(hù)多任務(wù)的類(lèi)操作系統(tǒng)軟件。要求如下:模擬進(jìn)程調(diào)度算法,模擬各種進(jìn)程調(diào)度算法,并能管理各種進(jìn)程調(diào)度算法的演示過(guò)程。模擬各種內(nèi)存分配算法及回收過(guò)程,并能動(dòng)態(tài)演示。結(jié)合進(jìn)程調(diào)度算法,能為進(jìn)程模擬分配內(nèi)存,并設(shè)計(jì)一個(gè)跟蹤該內(nèi)存模擬分配的進(jìn)程或線程,記錄內(nèi)存分配的結(jié)果;模擬多用戶(hù)登錄管理過(guò)程,能允許多個(gè)用戶(hù)登錄,為每個(gè)用戶(hù)建立進(jìn)程或線程,并進(jìn)行進(jìn)程管理;能模擬文件系統(tǒng)管理,進(jìn)程可以對(duì)文件系統(tǒng)(包括文件和目錄)進(jìn)行讀、寫(xiě)、創(chuàng)建、刪除、打開(kāi)、關(guān)閉等操作;模擬磁盤(pán)管理過(guò)程,結(jié)合文件系統(tǒng)管理,顯示磁盤(pán)管理的結(jié)構(gòu)和文件在磁盤(pán)上的分布情況。能模擬進(jìn)程通信管理,用戶(hù)之間可以相互通信交流;最好能采用類(lèi)似于Windows的窗口界面。三、 設(shè)計(jì)的基本原理和概念我所做的部分是模擬多用戶(hù)登錄管理過(guò)程,能允許多個(gè)用戶(hù)登錄,為每個(gè)用戶(hù)建立進(jìn)程或線程,并進(jìn)行進(jìn)程管理。還有進(jìn)程間的通信。進(jìn)程的用戶(hù)空間是互相獨(dú)立的,一般而言是不能互相訪問(wèn)的,唯一的例外是共享內(nèi)存區(qū)。但是,系統(tǒng)空間卻是“公共場(chǎng)所”,所以?xún)?nèi)核顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問(wèn)的外設(shè)了。在這個(gè)意義上,兩個(gè)進(jìn)程當(dāng)然也可以通過(guò)磁盤(pán)上的普通文件交換信息,或者通過(guò)“注冊(cè)表”或其它數(shù)據(jù)庫(kù)中的某些表項(xiàng)和記錄交換信息。廣義上這也是進(jìn)程間通信的手段,但是一般都不把這算作“進(jìn)程間通信”。進(jìn)程間通信目的:a) 數(shù)據(jù)傳輸:一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程,發(fā)送的數(shù)據(jù)量在一個(gè)字節(jié)到幾兆字節(jié)之間。b) 共享數(shù)據(jù):多個(gè)進(jìn)程想要操作共享數(shù)據(jù),一個(gè)進(jìn)程對(duì)共享數(shù)據(jù)的修改,別的進(jìn)程應(yīng)該立刻看到。c) 通知事件:一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息,通知它(它們)發(fā)生了某種事件(如進(jìn)程終止時(shí)要通知父進(jìn)程)。d) 資源共享:多個(gè)進(jìn)程之間共享同樣的資源。為了作到這一點(diǎn),需要內(nèi)核提供鎖和同步機(jī)制。e)進(jìn)程控制:有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如Debug進(jìn)程),此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有陷入和異常,并能夠及時(shí)知道它的狀態(tài)改變。進(jìn)程可以對(duì)任何信號(hào)指定另一個(gè)動(dòng)作或重載缺省動(dòng)作,指定的新動(dòng)作可以是忽略信號(hào)。進(jìn)程也可以暫時(shí)地阻塞一個(gè)信號(hào)。因此進(jìn)程可以選擇對(duì)某種信號(hào)所采取的特定操作,這些操作包括:(a) 忽略信號(hào):進(jìn)程可忽略產(chǎn)生的信號(hào),但SIGKILL和SIGSTOP信號(hào)不能被忽略,必須處理(由進(jìn)程自己或由內(nèi)核處理)。進(jìn)程可以忽略掉系統(tǒng)產(chǎn)生的大多數(shù)信號(hào)。(b) 阻塞信號(hào):進(jìn)程可選擇阻塞某些信號(hào),即先將到來(lái)的某些信號(hào)記錄下來(lái),等到以后(解除阻塞后)再處理它。(c) 由進(jìn)程處理該信號(hào):進(jìn)程本身可在系統(tǒng)中注冊(cè)處理信號(hào)的處理程序地址,當(dāng)發(fā)出該信號(hào)時(shí),由注冊(cè)的處理程序處理信號(hào)。(d) 由內(nèi)核進(jìn)行缺省處理:信號(hào)由內(nèi)核的缺省處理程序處理,執(zhí)行該信號(hào)的缺省動(dòng)作。例如,進(jìn)程接收到SIGFPE(浮點(diǎn)異常)的缺省動(dòng)作是產(chǎn)生core并退出。大多數(shù)情況下,信號(hào)由內(nèi)核處理。對(duì)信號(hào)的任何處理,包括終止進(jìn)程,都必須由接收到信號(hào)的進(jìn)程來(lái)執(zhí)行。而進(jìn)程要執(zhí)行信號(hào)處理程序,就必須等到它真正運(yùn)行時(shí)。因此,對(duì)信號(hào)的處理可能需要延遲一段時(shí)間。信號(hào)沒(méi)有固有的優(yōu)先級(jí)。如果為一個(gè)進(jìn)程同時(shí)產(chǎn)生了兩個(gè)信號(hào),這兩個(gè)信號(hào)會(huì)以任意順序出現(xiàn)在進(jìn)程中并會(huì)按任意順序被處理。另外,也沒(méi)有機(jī)制用于區(qū)分同一種類(lèi)的多個(gè)信號(hào)。如果進(jìn)程在處理某個(gè)信號(hào)之前,又有相同的信號(hào)發(fā)出,則進(jìn)程只能接收到一個(gè)信號(hào)。進(jìn)程間通信主要包括管道,系統(tǒng)IPC(包括消息隊(duì)列,信號(hào)量,共享存儲(chǔ)),SOCKETo操作系統(tǒng)通過(guò)信號(hào)來(lái)通知進(jìn)程系統(tǒng)中發(fā)生了某種預(yù)先規(guī)定好的事件(一組事件中的一個(gè)),它也是用戶(hù)進(jìn)程之間通信和同步的一種原始機(jī)制。一個(gè)鍵盤(pán)中斷或者一個(gè)錯(cuò)誤條件(比如進(jìn)程試圖訪問(wèn)它的虛擬內(nèi)存中不存在的位置等)都有可能產(chǎn)生一個(gè)信號(hào)。Shell也使用信號(hào)向它的子進(jìn)程發(fā)送作業(yè)控制信號(hào)。信號(hào)量:它允許多個(gè)線程在同一時(shí)刻訪問(wèn)同一資源,但是需要限制在同一時(shí)刻訪問(wèn)此資源的最大線程數(shù)目.信號(hào)量對(duì)象對(duì)線程的同步方式與前面幾種方法不同,信號(hào)允許多個(gè)線程同時(shí)使用共享資源,這與操作系統(tǒng)中的PV操作相同。它指出了同時(shí)訪問(wèn)共享資源的線程最大數(shù)目。它允許多個(gè)線程在同一時(shí)刻訪問(wèn)同一資源,但是需要限制在同一時(shí)刻訪問(wèn)此資源的最大線程數(shù)目。信號(hào)的PV操作。信號(hào)量S是一個(gè)整數(shù),S大于等于零時(shí)代表可供并發(fā)進(jìn)程使用的資源實(shí)體數(shù),但S小于零時(shí)則表示正在等待使用共享資源的進(jìn)程數(shù)。P操作申請(qǐng)資源:(1) S減1;(2) 若S減1后仍大于等于零,則進(jìn)程繼續(xù)執(zhí)行;(3) 若S減1后小于零,則該進(jìn)程被阻塞后進(jìn)入與該信號(hào)相對(duì)應(yīng)的隊(duì)列中,然后轉(zhuǎn)入進(jìn)程調(diào)度。V操作釋放資源:(1) S加1;(2) 若相加結(jié)果大于零,則進(jìn)程繼續(xù)執(zhí)行;
(3)若相加結(jié)果小于等于零,則從該信號(hào)的等待隊(duì)列中喚醒一個(gè)等待進(jìn)程,然后再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)入進(jìn)程調(diào)度。本次試驗(yàn),我采用的線程模擬進(jìn)程間的通信.線程主要有以下幾個(gè)操作BlockedPool融StRunningiUgk1/L偵己itPooiCPU謁度TBlockedPool融StRunningiUgk1/L偵己itPooiCPU謁度Tbilkedi^venlR.:jnricibletyhdjFdnizEdThread壕行機(jī)制(a)線程的啟動(dòng)創(chuàng)建一個(gè)線程,首先要從類(lèi)CwinThread產(chǎn)生一個(gè)派生類(lèi),同時(shí)必須使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE來(lái)聲明和實(shí)現(xiàn)這個(gè)CwinThread派生類(lèi)。第二步是根據(jù)需要重載該派生類(lèi)的一些成員函數(shù)如:ExitInstance()、InitInstance()、OnIdle()、PreTranslateMessage()等函數(shù)。最后調(diào)用AfxBeginThread()函數(shù)的一個(gè)版本:CWinThread*AfxBeginThread(CRuntimeClass*pThreadClass,intnPriority=THREAD_PRIORITY_NORMAL,UINTnStackSize=0,DWORDdwCreateFlags=0,LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL)啟動(dòng)該用戶(hù)界面線程,其中第一個(gè)參數(shù)為指向定義的用戶(hù)界面線程類(lèi)指針變量,第二個(gè)參數(shù)為線程的優(yōu)先級(jí),第三個(gè)參數(shù)為線程所對(duì)應(yīng)的堆棧大小,第四個(gè)參數(shù)為線程創(chuàng)建時(shí)的附加標(biāo)志,缺省為正常狀態(tài),如為CREATE_SUSPENDED則線程啟動(dòng)后為掛起狀態(tài)。對(duì)于工作線程來(lái)說(shuō),啟動(dòng)一個(gè)線程,首先需要編寫(xiě)一個(gè)希望與應(yīng)用程序的其余部分并行運(yùn)行的函數(shù)如Fun1(),接著定義一個(gè)指向CwinThread對(duì)象的指針變量*pThread,調(diào)用AfxBeginThread(Fun1,param,priority)函數(shù),返回值賦給pThread變量的同時(shí)一并啟動(dòng)該線程來(lái)執(zhí)行上面的Fun1()函數(shù),其中Fun1是線程要運(yùn)行的函數(shù)的名字,也既是上面所說(shuō)的控制函數(shù)的名字,param是準(zhǔn)備傳送給線程函數(shù)Fun1的任意32位值,priority則是定義該線程的優(yōu)先級(jí)別,它是預(yù)定義的常數(shù),讀者可參考MSDN。(b) 線程的懸掛和恢復(fù)CWinThread類(lèi)中包含了應(yīng)用程序懸掛和恢復(fù)它所創(chuàng)建的線程的函數(shù),其中SuspendThread()用來(lái)懸掛線程,暫停線程的執(zhí)行;ResumeThread()用來(lái)恢復(fù)線程的執(zhí)行。如果你對(duì)一個(gè)線程連續(xù)若十次執(zhí)行SuspendThread(),則需要連續(xù)執(zhí)行相應(yīng)次的ResumeThread()來(lái)恢復(fù)線程的運(yùn)行。(c) 線程的懸掛和恢復(fù)
CWinThread類(lèi)中包含了應(yīng)用程序懸掛和恢復(fù)它所創(chuàng)建的線程的函數(shù),其中SuspendThread()用來(lái)懸掛線程,暫停線程的執(zhí)行;ResumeThread()用來(lái)恢復(fù)線程的執(zhí)行。如果你對(duì)一個(gè)線程連續(xù)若十次執(zhí)行SuspendThread(),則需要連續(xù)執(zhí)行相應(yīng)次的ResumeThread()來(lái)恢復(fù)線程的運(yùn)行。(d)結(jié)束線程終止線程有三種途徑,線程可以在自身內(nèi)部調(diào)用AfxEndThread()來(lái)終止自身的運(yùn)行;可以在線程的外部調(diào)用BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode)來(lái)強(qiáng)行終止一個(gè)線程的運(yùn)行,然后調(diào)用CloseHandle()函數(shù)釋放線程所占用的堆棧;第三種方法是改變?nèi)肿兞?,使線程的執(zhí)行函數(shù)返回,則該線程終止。下面是第三種方式的代碼:CtestViewmessagehandlersSettoTruetoendthreadBoolbend=FALSE;//CtestViewmessagehandlersSettoTruetoendthreadBoolbend=FALSE;//定義的全局變量,用于控制線程的運(yùn)行;TheThreadFunction;UINTThreadFunction(LPVOIDpParam)//線程函數(shù){while(!bend){Beep(100,100);Sleep(1000);}return0;}CwinThread*pThread;HWNDhWnd;VoidCtestView::OninitialUpdate(){hWnd=GetSafeHwnd();pThread=AfxBeginThread(ThradFunction,hWnd);//啟動(dòng)線程pThread->m_bAutoDelete=FALSE;//線程為Cview::OnInitialUpdate();}VoidCtestView::OnDestroy(){bend=TRUE;//改變變量,線程結(jié)束WaitForSingleObject(pThread->m_hThread,INFINITE);//等待線程結(jié)束deletepThread;//刪除線程Cview::OnDestroy();共享內(nèi)存式的通信方式通常由一個(gè)進(jìn)程創(chuàng)建,其余進(jìn)程對(duì)這塊內(nèi)存區(qū)進(jìn)行讀寫(xiě)。得到共享內(nèi)存有兩種方式:映射/dev/mem設(shè)備和內(nèi)存映像文件。前一種方式不給系統(tǒng)帶來(lái)額外的開(kāi)銷(xiāo),但在現(xiàn)實(shí)中并不常用,因?yàn)樗刂拼嫒〉氖菍?shí)際的物理內(nèi)存;常用的方式是通過(guò)shmXXX函數(shù)族來(lái)實(shí)現(xiàn)共享內(nèi)存:intshmget(key_tkey,intsize,intflag);/*獲得一個(gè)共享存儲(chǔ)標(biāo)識(shí)符*/該函數(shù)使得系統(tǒng)分配size大小的內(nèi)存用作共享內(nèi)存;void*shmat(intshmid,void*addr,intflag);/*將共享內(nèi)存連接到自身地址空間中*/如果一個(gè)進(jìn)程通過(guò)fork創(chuàng)建了子進(jìn)程,則子進(jìn)程繼承父進(jìn)程的共享內(nèi)存,既而可以直接對(duì)共享內(nèi)存使用,不過(guò)子進(jìn)程可以自身脫離共享內(nèi)存。shmid為shmget函數(shù)返回的共享存儲(chǔ)標(biāo)識(shí)符,addr和flag參數(shù)決定了以什么方式來(lái)確定連接的地址,函數(shù)的返回值即是該進(jìn)程數(shù)據(jù)段所連接的實(shí)際地址。此后,進(jìn)程可以對(duì)此地址進(jìn)行讀寫(xiě)操作訪問(wèn)共享內(nèi)存。
對(duì)于共享內(nèi)存,linux本身無(wú)法對(duì)其做同步,需要程序自己來(lái)對(duì)共享的內(nèi)存做出同步計(jì)算,而這種同步很多時(shí)候就是用信號(hào)量實(shí)現(xiàn)。共享內(nèi)存是存在于內(nèi)核級(jí)別的一種資源,在 shell中可以使用ipcs命令來(lái)查看當(dāng)前系統(tǒng)IPC中的狀態(tài),在文件系統(tǒng)/proc目錄下有對(duì)其描述的相應(yīng)文件。函數(shù)shmget可以創(chuàng)建或打開(kāi)一塊共享內(nèi)存區(qū)。函數(shù)原型如下:#include<sys/shm.h>intshmget(key_tkey,size_tsize,intflag);函數(shù)中參數(shù)key用來(lái)變換成一個(gè)扁識(shí)符,而且每一個(gè)IPC對(duì)象與一個(gè)key相對(duì)應(yīng)。當(dāng)新建一個(gè)共享內(nèi)存段時(shí),size參數(shù)為要請(qǐng)求的內(nèi)存長(zhǎng)度(以字節(jié)為單位)。注意:內(nèi)核是以頁(yè)為單位分配內(nèi)存,當(dāng)size參數(shù)的值不是系統(tǒng)內(nèi)存頁(yè)長(zhǎng)的整數(shù)倍時(shí),系統(tǒng)會(huì)分配給進(jìn)程最小的可以滿(mǎn)足size長(zhǎng)的頁(yè)數(shù),但是最后一頁(yè)的剩余部分內(nèi)存是不可用的。當(dāng)打開(kāi)一個(gè)內(nèi)存段時(shí),參數(shù)size的值為0。參數(shù)flag中的相應(yīng)權(quán)限位初始化ipc_perm結(jié)構(gòu)體中的mode域。同時(shí)參數(shù)flag是函數(shù)行為參數(shù),它指定一些當(dāng)函數(shù)遇到阻塞或其他情況時(shí)應(yīng)做出的反應(yīng)。四、 詳細(xì)設(shè)計(jì):使用主要控件、函數(shù);詳細(xì)設(shè)計(jì):使用主要控件、函數(shù);本次試驗(yàn)采用三個(gè)線程線程來(lái)模擬,采用共享內(nèi)存的方式。線程1(input)獲取兩個(gè)隨機(jī)數(shù)hEvent計(jì)算兩個(gè)隨機(jī)數(shù)的和緩存1線程1(input)獲取兩個(gè)隨機(jī)數(shù)hEvent計(jì)算兩個(gè)隨機(jī)數(shù)的和緩存1線程2(calculate)HANDLEhEvent;〃事件對(duì)象信號(hào)量HANDLEhSemap;〃線程2.3之間的信號(hào)量1、 線程1函數(shù)(獲得兩個(gè)隨機(jī)數(shù))DWORDWINAPIinput(LPVOIDIpParameter){CvosDlg*Dlg=(CvosDlg*)lpParameter;inti=0;while(i<100){Dlg->editVal_1.Format(_T("%d"),rand()%100);Dlg->editVal_2.Format(_T("%d"),rand()%100);Dlg->m_Edit_1.SetWindowTextW(Dlg->editVal_1);Dlg->m_Edit_2.SetWindowTextW(Dlg->editVal_2);SetEvent(hEvent);//v操作i++;Sleep(1000);}return0;}2、 線程2函數(shù)(計(jì)算它們的和)DWORDWINAPIcalculate(LPVOIDlpParameter){CvosDlg*Dlg=(CvosDlg*)lpParameter;inti=0;while(i<100){WaitForSingleObject(hEvent,INFINITE);//p操作Sleep(200);intsum=_tstoi(Dlg->editVal_1)+_tstoi(Dlg->editVal_2);Dlg->editVal_3.Format(_T("%s+%s=%d"),Dlg->editVal_1,Dlg->editVal_2,sum);Dlg->m_Edit_3.SetWindowTextW(Dlg->editVal_3);Dlg->editVal_4.Format(_T("%d"),sum);ReleaseSemaphore(hSemap,1,NULL);i++;}CloseHandle(hEvent);return0;}3、 線程3函數(shù)(輸出結(jié)果)DWORDWINAPIprint(LPVOIDIpParameter){CvosDlg*Dlg=(CvosDlg*)lpParameter;inti=0;while(i<100){WaitForSingleObject(hSemap,INFINITE);Sleep(200);Dlg->m_Edit_4.SetWindowTextW(Dlg->editVal_4);i++;}CloseHandle(hSemap);return0;}4、 信號(hào)量控制voidCvosDlg::OnBnClickedProcom()//進(jìn)程通信按鈕函數(shù){//TODO:在此添加控件通知處理程序代碼hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);//ffi用事件對(duì)象hSemap=CreateSemaphore(NULL,0,1,NULL); //使用信號(hào)量CloseHandle(CreateThread(NULL,0,input,this,0,NULL));CloseHandle(CreateThread(NULL,0,calculate,this,0,NULL));CloseHandle(CreateThread(NULL,0,print,this,0,NULL));5、 登錄以及用戶(hù)切換密碼和賬號(hào)保存在pwd.ini文檔內(nèi)voidChangeUsr::DoDataExchange(CDataExchange*pDX){CDialogEx::DoDataExchange(pDX);DDX_Control(pDX,IDC_COMBO1,m_usrList);for(inti=0;i<UsrCount;++i){m_usrList.AddString(usrName[i]);}DDX_Control(pDX,IDC_EDIT1,m_ChangPwd);}BEGIN_MESSAGE_MAP(ChangeUsr,CDialogEx)ON_BN_CLICKED(IDOK,&ChangeUsr::OnBnClickedOk)END_MESSAGE_MAP()//ChangeUsr消息處理程序voidChangeUsr::OnBnClickedOk(){//TODO:在此添加控件通知處理程序代碼index=m_usrList.GetCurSel();m_usrList.GetWindowTextW(Name);if(!checkPwd()){Name="";}CDialogEx::OnOK();}boolChangeUsr::checkPwd(){CStringUsrpwd;ifstreampwd;m_ChangPwd.GetWindowTextW(Usrpwd);pwd.open("pwd.ini");if(!pwd.is_open()){exit(0);charname[20]={0};charpassword[30]={0};while(!pwd.eof()){pwd>>name;pwd>>password;if(Name==(CString)name){if(Usrpwd==(CString)password){returntrue;}else{MessageBox(_T("密碼錯(cuò)誤”),_T("警告”),MB_OK|MB_ICONERROR);returnfalse;}}}if(pwd.eof())//是否到文件尾{if(IDYES==MessageBox(_T("是否要添加用戶(hù)?,—T("提示"),MB_YESNO|MB_ICONQUESTION)){AddUsr();returntrue;}}pwd.close();returnfalse;}6、新增用戶(hù)函數(shù)voidChangeUsr::AddUsr(){ofstreamadd;add.open("pwd.ini",ios::app|ios::out);if(!add.is_open()){
exit(0);CStringpwdstr;m_Ch
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)培訓(xùn)合作計(jì)劃
- 2024出租車(chē)租賃經(jīng)營(yíng)合同企業(yè)租賃經(jīng)營(yíng)合同
- 2024室內(nèi)裝飾設(shè)計(jì)合同書(shū)樣本
- 軟件外包合同樣本
- 社區(qū)停車(chē)位租賃合同范本
- 賣(mài)房代理合同格式
- 公司貸款償還合同范例
- 專(zhuān)業(yè)攝影合作協(xié)議書(shū)模板
- 房屋租賃合同安全協(xié)議
- 房屋權(quán)益合法轉(zhuǎn)讓合同樣本
- 體檢報(bào)告匯總分析中風(fēng)險(xiǎn)的防范
- 村里建群管理制度
- 【城市軌道交通運(yùn)營(yíng)安全管理研究5300字】
- 2024年中核匯能有限公司招聘筆試參考題庫(kù)含答案解析
- 上海市2024屆高三7月模擬預(yù)測(cè)歷史試題(等級(jí)考)(解析版)
- 肺炎護(hù)理查房課件
- 2024年中國(guó)華能集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 服務(wù)質(zhì)量的管理規(guī)定模版
- 部編《道德與法治》二年級(jí)上冊(cè)教材解析及教學(xué)建議
- 2024年中考化學(xué)實(shí)驗(yàn)探究題說(shuō)題
- 在高中語(yǔ)文課堂中開(kāi)展愛(ài)國(guó)主義教育的策略探究獲獎(jiǎng)科研報(bào)告
評(píng)論
0/150
提交評(píng)論