欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—西文圖書管理系統(tǒng)

      時(shí)間:2019-05-14 02:23:28下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—西文圖書管理系統(tǒng)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—西文圖書管理系統(tǒng)》。

      第一篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—西文圖書管理系統(tǒng)

      數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告

      課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)

      課設(shè)題目: 西文圖書管理系統(tǒng) 教師姓名:

      本科生姓名:

      王瑞林

      本科生學(xué)號:

      20121002932

      號:

      191124

      期:2014年6月20日

      題號:十

      題目:西文圖書管理

      1.需求分析

      圖書管理系統(tǒng)對象有兩個(gè),包括讀者和管理員。

      讀者的需求:借書,還書,續(xù)借,查詢當(dāng)前所借書籍還書截至日期,查詢借閱歷史,修改登陸密碼。其中借書可以根據(jù)書號和書名兩種方式查詢借閱。

      管理員的需求:采編入庫,清除庫存,注冊讀者,刪除讀者,根據(jù)書號查詢書籍,修改管理員用戶名和密碼。

      2.設(shè)計(jì)

      2.1設(shè)計(jì)思想

      (1)數(shù)據(jù)與操作特性:

      有搜索,插入,刪除操作。而數(shù)據(jù)有:讀者信息,書籍信息,讀者借閱書籍歷史信息,書籍讀者借閱歷史信息,讀者當(dāng)前所借書籍信息。(2)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):

      數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和樹形結(jié)構(gòu)。

      根據(jù)書號和書名建立兩個(gè)B-樹,便于讀者查詢借閱,其中關(guān)鍵字設(shè)置為書籍指針,便于找到書籍 后直接進(jìn)行修改書籍信息。

      讀者和書籍的信息從文件中讀取,由于會不斷注冊和刪除讀者以及新增刪除書籍,因此書籍和讀者的信息采用單鏈表存儲。

      讀者的借閱歷史和書籍的讀者歷史,都采用數(shù)組的形式存儲,為了節(jié)省存儲空間,每個(gè)借閱歷史數(shù)組最大空間為15。超過15個(gè)借閱歷史,則刪除最早的借閱歷史。2.2設(shè)計(jì)表示(1)數(shù)據(jù)類型定義

      typedef struct //日期結(jié)構(gòu)體類型 { int year;//記錄年

      int month;//記錄月

      int day;//記錄日 }Date;//記錄借閱者所借書籍的信息結(jié)構(gòu)體 typedef struct {

      char bookID[15];//書號 char name[15];//書名 char writer[15];//作者 Date bordate;//借閱時(shí)間 Date backdate;//還書時(shí)間

      int flag;//是否續(xù)借,續(xù)借為1.否則為0

      }BookHistory;//記錄借閱者當(dāng)前所借書籍的信息結(jié)構(gòu)體 typedef struct {

      char bookID[15];//書號 char name[15];//書名 char writer[15];//作者 Date bordate;//借閱時(shí)間 Date lastdate;//最后還書期限

      int flag;//是否續(xù)借,續(xù)借為1.否則為0

      }BookRec;//記錄書籍被借閱的讀者記錄 typedef struct { char readerID[15];//記錄讀者的借閱證號 char readername[15];//讀者的名字

      Date bor;//記錄讀者的借書日期

      Date back;//記錄讀者的還書日期 int flag;//借閱者是否有續(xù)借跡象(flag取值0或者1)}ReaderHistory;//記錄讀者信息的結(jié)構(gòu)體類型(允許讀者同時(shí)借閱五本書,每本書支持續(xù)借一次)typedef struct { char readerID[12];//記錄讀者的借書證號,一般是學(xué)號

      //記錄書的信息的結(jié)構(gòu)體類型 typedef struct { char bookID[15];//書號 char title[15];//記錄書名

      char writer[15];//記錄著者

      int currentnum;//書現(xiàn)存量

      int totalnum;//書總存量

      int bortimes;//被借的歷史總次數(shù) //B_LQueue *B_LQH;

      ReaderHistory RH[15];//借書者記錄,規(guī)定鏈?zhǔn)疥?duì)列的最大節(jié)點(diǎn)個(gè)數(shù)為15,來節(jié)省空間 char name[15];//讀者的名字 char password[16];//讀者登陸密碼 BookRec rec[5];//讀者現(xiàn)在所借書籍 int hn;//總借閱數(shù)量 //R_LQueue *R_LQH;

      BookHistory bh[15];//記錄讀者的借閱記錄,規(guī)定鏈?zhǔn)疥?duì)列的最大節(jié)點(diǎn)個(gè)數(shù)為15,來節(jié)省空間 int bn;//讀者現(xiàn)在所借書籍?dāng)?shù)量,最大數(shù)量為5本

      }Reader;}Book;//根據(jù) 書名為關(guān)鍵字的B-樹的結(jié)構(gòu)體類型

      typedef struct Namenode //根據(jù)書名為關(guān)鍵字建立的B樹 {

      typedef struct///根據(jù)書名建立的B樹的搜索結(jié)果 {

      //根據(jù)書號為關(guān)鍵字的B-樹的結(jié)構(gòu)體類型

      typedef struct IDnode //根據(jù)書號為關(guān)鍵字建立的B樹 {

      typedef struct///根據(jù)書號建立的B樹的搜索結(jié)果 {

      //從文件中讀取書籍?dāng)?shù)據(jù)后存儲在單鏈表里 typedef struct BookNode {

      //從文件中讀取學(xué)生數(shù)據(jù)后存儲在單鏈表里 typedef struct ReaderNode { Book SLbook;struct BookNode *next;BTIDnode *pt;////指向找到的節(jié)點(diǎn)指針 int i;//所找關(guān)鍵字在節(jié)點(diǎn)里的位置 int tag;//查找成功值為1,查找失敗值為0 int n;//記錄結(jié)點(diǎn)中的關(guān)鍵字(即書號)個(gè)數(shù)

      Book *key[MAXM];//key[0...n-1],Maxsize個(gè)關(guān)鍵字(即書號)域 struct IDnode *chd[MAXM];//ptr[0...n],MAXM個(gè)指向子結(jié)點(diǎn)的指針域 BTNamenode *pt;////指向找到的節(jié)點(diǎn)指針 int i;//所找關(guān)鍵字在節(jié)點(diǎn)里的位置 int tag;//查找成功值為1,查找失敗值為0 int n;//記錄結(jié)點(diǎn)中的關(guān)鍵字(即書號)個(gè)數(shù)

      Book *key[MAXM];//key[0...n-1],Maxsize個(gè)關(guān)鍵字(即書名)域

      struct Namenode *chd[MAXM];//ptr[0...n],MAXM個(gè)指向子結(jié)點(diǎn)的指針域

      struct Namenode *par;//指向父結(jié)點(diǎn)的指針域

      }BTNamenode;}NameResult;struct IDnode *par;//指向父結(jié)點(diǎn)的指針域

      }BTIDnode;}IDResult;}BookSLNode;Reader SLreader;struct ReaderNode *next;}ReaderSLNode;2.3詳細(xì)設(shè)計(jì)

      (1)登陸界面login():有管理員和讀者登陸,都必須輸入密碼和用戶名。

      (2)管理員登陸adminer_login():管理員需輸入登錄名和密碼,為了安全登錄,將輸入密碼錯(cuò)誤次數(shù)限制在5次。其中管理員密碼和用戶名以及初始用戶名和密碼從管理員文件里讀出賦值給全局變量。當(dāng)輸入正確時(shí),管理員功能界面函數(shù)admin_menu();當(dāng)密碼輸入錯(cuò)誤達(dá)6次以上,將調(diào)用鎖定系統(tǒng)函數(shù)lock_admin_menu(),將系統(tǒng)鎖定,下次進(jìn)入系統(tǒng)時(shí)將不再顯示登陸界面,而是初始管理員登陸。

      (3)管理員采編入庫insert_stock():輸入新書的信息,調(diào)用SearchBTree_ID()按照書號在B-樹搜索書籍,如果沒有找到,返回書籍插入的位置,然后調(diào)用插入函數(shù)InsertBTree_Name(),InsertBTree_ID(),分別將書籍按書名和書號插入到相應(yīng)的樹中,同時(shí)將書籍信息插入到書籍鏈表里調(diào)用ListInsert_Book();同時(shí)將全局變量書籍總數(shù)booknum加1。

      (4)管理員清除庫存deletestock():根據(jù)書號書名搜索到書籍,在B-樹中刪除書籍,同時(shí)在書籍信息鏈表里刪除。并將書籍總數(shù)booknum減1。

      (5)管理員讀者模塊adminer_reader():有刪除讀者和注冊讀者兩個(gè)功能,刪除讀者,按讀者的ID查找到,在讀者信息鏈表里刪除讀者,讀者總數(shù)readernum減1;注冊讀者,初始密碼為讀者ID后6位,同時(shí)讀者總數(shù)readernum加1。

      (6)管理員修改用戶名和密碼adminer_change_password():連續(xù)兩次輸入新密碼,兩次結(jié)果一樣,修改成功。

      (7)學(xué)生登陸student_login():輸入密碼成功,調(diào)用 stu_menu()功能界面。(8)學(xué)生借書borrow():有兩種搜索所借書籍的方式,按書名搜索,按書號搜索,使用相應(yīng)的B-樹搜索功能。借書成功后,將書籍信息寫到讀者當(dāng)前所借書籍里面。并將書籍當(dāng)前存量減1.(9)學(xué)生還書back():進(jìn)入還書界面,將顯示出讀者當(dāng)前所借書籍,讓讀者選擇歸還書籍。歸還后將書籍從讀者當(dāng)前所借書籍里刪除,此書當(dāng)前存量加1,并將書籍信息寫到讀者借閱歷史里面。

      (10)學(xué)生續(xù)借renew():顯示當(dāng)前所借書籍信息,讀者選擇續(xù)借書目,當(dāng)書籍信息的續(xù)借標(biāo)志為0時(shí)可以續(xù)借,否則 不能續(xù)借,續(xù)借成功,將對應(yīng)的讀者當(dāng)前所借書籍的續(xù)借標(biāo)志置為1.(11)學(xué)生查詢最后還書期限deadline():進(jìn)入之后顯示當(dāng)前所借書籍信息,里面包含最后還書期限。

      (12)學(xué)生查詢借閱歷史history():顯示讀者信息里面的借閱歷史。

      (13)學(xué)生修改密碼change_reader_password():兩次新密碼輸入一致,修改成功。(14)鎖定系統(tǒng)admin_lock(),鎖定系統(tǒng)后登陸lock_admin_menu():全局變量m_lock,當(dāng)其值為1時(shí)解鎖,值為0時(shí)鎖定。

      (15)建立讀者書籍鏈表readreader(),readbook():首先從文件中讀取讀者總數(shù),采用for循環(huán),將每個(gè)讀者信息寫到鏈表里,在循環(huán)中,讀取讀者的ID、姓名、密碼,然后讀取讀者當(dāng)前所借書籍,采用for循環(huán),將所借書籍信息寫到數(shù)組里面,依次讀取所借書籍信息。之后讀取讀者歷史所借書籍?dāng)?shù)量,當(dāng)數(shù)量大于15時(shí),使用for循環(huán),循環(huán)15次,依次讀取書籍信息;如果 數(shù)量小于等于 15,采用for循環(huán),循環(huán)當(dāng)前借閱歷史書籍?dāng)?shù)量次,將書籍信息寫道數(shù)組中。然后將每個(gè)讀者插入到鏈表里。書籍鏈表類似讀者鏈表的建立。

      (16)B-樹的搜索插入刪除功能(以按書名建立的B-樹為例);搜索,SearchBTree_ID(),搜索成功返回搜索到的位置,搜索失敗,返回插入的位置。Search_Name()函數(shù)將在當(dāng)前節(jié)點(diǎn)搜索到關(guān)鍵字的位置。

      插入,InsertBTree_Name(),如果為空,調(diào)用NewRoot_name()函數(shù),建立根節(jié)點(diǎn)。如果不為空,將調(diào)用Insert_Name()將插入到節(jié)點(diǎn)里,判斷是否大于最大關(guān)鍵字個(gè)數(shù),如果大于,調(diào)用Split_Name()進(jìn)行分裂。刪除,并非自己完成,參考網(wǎng)上代碼。

      (16)建立B-樹newBT():按書名建立,使用B樹搜索功能,沒有找到,將根據(jù)返回的位置進(jìn)行插入。按書號的類似。

      (17)打印文件printftxt():分別將書籍和讀者 信息寫到文件里,同時(shí)將管理員信息也寫道文件中。在每個(gè)退出系統(tǒng)的接口中都進(jìn)行調(diào)用此函數(shù),保證文件不丟失,同時(shí)更新文件信息。

      3.調(diào)試分析

      在進(jìn)行調(diào)試時(shí),有很多內(nèi)存讀寫錯(cuò)誤,問題的根本原因是在進(jìn)行結(jié)構(gòu)體賦值前,沒有將結(jié)構(gòu)體里面包含的結(jié)構(gòu)體或者數(shù)組鏈表進(jìn)行初始化,導(dǎo)致問題十分嚴(yán)重普遍。

      4.用戶手冊

      首先登陸時(shí)有兩種登陸:讀者和管理員。然后管理員登陸功能有采編入庫,清除庫存,讀者模塊,書籍查詢,修改密碼和用戶名。讀者登陸有借書,還書,續(xù)借,修改密碼,查詢借閱歷史,查詢截至日期。

      管理員登陸用戶名:123456,密碼:123456 管理員初始用戶名:20121002932,初始密碼:167350 讀者的ID和密碼請到reader.txt文件中查詢,文件格式見下面說明。文件的格式: 1.reader.txt:

      其中第一行的數(shù)字“4”為當(dāng)前讀者總數(shù),第二行為: ID 名字 密碼 第三行的數(shù)字”0“為當(dāng)前所借書籍?dāng)?shù)量,之后為所借書籍信息: 書號 名稱 作者 借閱時(shí)間年 月 日 最后還書日期年 月 日 是否續(xù)借 第三行數(shù)字 “0”為歷史所借書籍?dāng)?shù)量,之后為所借書籍信息: 書號 名稱 作者 借閱時(shí)間年 月 日 還書日期年 月 日 是否續(xù)借 2.book.txt:

      第一行數(shù)字”4“為當(dāng)前書籍總數(shù) 第二行為書籍信息:

      書號 書名 作者 現(xiàn)存量 總存量

      第三行數(shù)字”0“為讀者借閱歷史,以《飛鳥集》為例:

      ID

      姓名

      借閱時(shí)間年 月 日

      還書時(shí)間年 月 日 是否續(xù)借 20121002932 王瑞林

      114

      17

      5 17 1 3.a(chǎn)dminer.txt:

      第一行:管理員名稱;

      第二行:管理員登陸密碼; 第三行:管理員初始用戶名; 第四行:管理員初始密碼;

      第五行:鎖定系統(tǒng)標(biāo)志,此時(shí)為未鎖定狀態(tài)。

      5.測試數(shù)據(jù)及測試結(jié)果

      初始登陸界面:

      管理員登陸界面:

      采編入庫:

      清除庫存: 讀者模塊:

      刪除讀者:

      此時(shí)刪除讀者后,讀者文件中應(yīng)該不存在該讀者。書籍查詢:

      修改用戶名和密碼:

      修改用戶名:

      修改密碼:

      修改用戶名和密碼后,退出系統(tǒng)后,查看adminer.txt文件,第一行和第二行為用戶名和密碼,將改變?yōu)?567890。讀者登陸:

      讀者借書:

      當(dāng)讀者借書成功之后退出系統(tǒng),在reader.txt文件中對應(yīng)讀者的ID信息的縮進(jìn)的第二級為讀者當(dāng)前所借書籍?dāng)?shù)量和所借書籍信息,在此之后可以看到讀者現(xiàn)在所借書籍信息 讀者還書:

      讀者還書后,在reader.txt文件中,縮進(jìn)的第三級為讀者歷史借閱書籍?dāng)?shù)量和書籍信息,此時(shí)應(yīng)該看到剛才還書的信息。

      讀者續(xù)借:

      當(dāng)讀者還書成功后,對應(yīng)的當(dāng)前所借書籍的flag值為1.查詢借閱歷史:

      查詢截至日期: 修改登錄密碼:

      當(dāng)修改成功之后,reader.txt文件中對應(yīng)讀者的信息密碼修改為當(dāng)前密碼。

      6.致謝

      感謝郭老師的指導(dǎo),讓我們在實(shí)踐中提高了合理設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的能力,鞏固了課堂所學(xué)。同時(shí)感謝王鑫學(xué)姐,幫助我們調(diào)試程序,并傳輸經(jīng)驗(yàn)。

      7.參考文獻(xiàn)

      《數(shù)據(jù)結(jié)構(gòu)—使用C語言》第四版 朱站立編著 《C程序設(shè)計(jì)》第四版 譚浩強(qiáng)編著

      第二篇:圖書管理系統(tǒng) 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì)

      《數(shù)據(jù)結(jié)構(gòu)》

      課程設(shè)計(jì)報(bào)告書

      一.課程設(shè)計(jì)題目

      圖書借閱管理系統(tǒng)

      二.課程設(shè)計(jì)內(nèi)容

      實(shí)現(xiàn)圖書管理信息系統(tǒng)的設(shè)計(jì)

      (一)管理員功能:

      ①登錄:輸入管理員密碼,若密碼錯(cuò)誤則不得執(zhí)行管理員操作。

      ②添加新書:增加新的圖書資料,同時(shí)需檢查新書的圖書編號是否已存在于原圖書資料中,若已存在則應(yīng)取消添加或提示重新輸入。

      ③修改圖書:通過編號查詢該圖書資料,若該編號存在,則顯示已有信息,允許修改,否則提示 無該圖書信息。

      ④刪除圖書:通過編號查詢該圖書資料,若該編號存在,則顯示已有信息,允許刪除,否則提示無該圖書信息。刪除對象包括該圖書資料以及“圖書狀態(tài)”和“借閱人”中與此書相關(guān)的所有記錄。

      ⑤查找圖書:

      A.按書號查找:通過編號查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      B.按書名查找:通過書名查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      C.按作者查找:通過作者查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      ⑥查看全部圖書:顯示所有圖書資料,包括書號、書名、作者、狀態(tài)和借閱人等信息。

      ⑦修改讀者:通過姓名查詢該讀者信息,若該姓名存在,則顯示已有信息,允許修改,否則提示無該讀者信息。

      ⑧刪除讀者:通過姓名查詢該讀者信息,若該姓名存在,則顯示已有信息,允許刪除,否則提示無該讀者信息。刪除對象包括該讀者姓名、班級、電話以及“圖書狀態(tài)”和“借閱人”中與此人相關(guān)的所有記錄。

      ⑨查看所有讀者:顯示所有讀者資料,包括姓名、班級、電話等信息。

      (二)讀者功能:

      ①登錄:輸入讀者姓名,若未經(jīng)注冊則不得進(jìn)入讀者服務(wù)界面。②注冊:新用戶經(jīng)注冊方可登錄系統(tǒng)并使用讀者服務(wù)功能。③借書:

      A.輸入所需圖書編號,判斷該編號是否存在,若不存在則提示重新輸入。

      B.若所輸入圖書編號存在,則判斷該書籍是否已被借出,若已借則不允許執(zhí)行借書操作。

      C.若所輸入圖書未借,則提示輸入讀者姓名,判斷所輸入讀者姓名是否存在,若不存在則提示重新輸入。D.若讀者姓名存在,則允許執(zhí)行借書操作。

      E.借書處理包括在“圖書狀態(tài)”中加上“已借”標(biāo)記。④還書:

      A.輸入所借書編號,判斷該編號是否存在,若不存在則提示重新輸入。B.判斷該書是否已借出,若未借則不允許執(zhí)行還書操作。C.借書處理包括在“圖書狀態(tài)”中加上“未借”標(biāo)記。⑤查詢圖書:

      A.按書號查找:通過編號查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      B.按書名查找:通過書名查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      C.按作者查找:通過作者查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      ⑥查看借閱情況:輸入讀者姓名,若該姓名不存在則提示重新輸入,若該姓名存在則顯示該讀者借閱信息。

      三.算法設(shè)計(jì)

      1.流程圖(部分示例)

      ①管理員登錄

      ②讀者登錄

      ③讀者借閱圖書

      ④管理員或讀者按書名查找圖書

      2.代碼實(shí)現(xiàn)

      #include #include

      #include #include //文件流 #include #define BookFile “book.txt”

      //將字符串BookFile替換原文件中的宏名稱book #define ReaderFile “reader.txt” using namespace std;//**********讀者結(jié)構(gòu)體,用于存放讀者基本信息********** class Reader {

      private:

      char rname[10];

      char rclass[10];

      char rtel[10];public:

      Reader()//構(gòu)造函數(shù),實(shí)現(xiàn)數(shù)據(jù)初始化

      {strcpy(rname,“");strcpy(rclass,”“);strcpy(rtel,”“);} //初始化

      void set_rname(char *rn)//設(shè)置讀者姓名

      {strcpy(rname,rn);} //將rn的字符復(fù)制給rname

      char * get_rname()//獲得讀者姓名

      {return rname;} //返回rname的值

      void set_rclass(char *rc)//設(shè)置班級

      {strcpy(rclass,rc);}

      char *get_rclass()

      //獲得班級

      {return rclass;}

      void set_rtel(char *rt)

      //設(shè)置電話

      {strcpy(rtel,rt);}

      char *get_rtel()

      //獲得電話

      {return rtel;}

      void copy(Reader m)//讀者Reader結(jié)構(gòu)體copy函數(shù)

      {strcpy(rname,m.get_rname());strcpy(rclass,m.get_rclass());strcpy(rtel,m.get_rtel());} };//*********讀者管理結(jié)構(gòu)體,實(shí)現(xiàn)對讀者用戶的管理********* class ReaderManage {

      Reader readers[50];//定義讀者結(jié)構(gòu)體數(shù)組對象,最多50位

      int length;

      void readFile()

      //讀取讀者文件函數(shù)

      {

      ifstream fread;//定義輸入文件流對象fread

      length=0;

      //計(jì)數(shù)

      if(!fread)

      {cout<<”讀取磁盤文件失敗!“<

      fread.open(ReaderFile,ios::binary);//使文件流與文件關(guān)聯(lián),以二進(jìn)制方式打開

      int i=0;

      while((fread.read((char *)&readers[i],sizeof(Reader))))//計(jì)算并返回所占字節(jié)數(shù)

      i++;

      length=i;

      fread.close();//關(guān)閉磁盤文件

      } void saveFile()//保存讀者文件

      {

      ofstream fwrite;

      //定義輸出文件流對象fwrite

      if(!fwrite)

      {cout<<”文件保存失敗!n“;exit(1);}

      fwrite.open(ReaderFile,ios::binary);//使文件流與文件關(guān)聯(lián),以二進(jìn)制方式打開

      fwrite.write((char *)readers,length*sizeof(Reader));//計(jì)算并返回所占字節(jié)數(shù)

      fwrite.close();//關(guān)閉磁盤文件

      } public:

      ReaderManage()//構(gòu)造函數(shù),讀取讀者文件

      {readFile();}

      ~ReaderManage()//析構(gòu)函數(shù),保存讀者文件

      {saveFile();}

      void add_reader(Reader r)//添加讀者用戶函數(shù)

      {

      if(length>=50)

      {cout<<”對不起,注冊人數(shù)已滿!n“;return;}

      readers[length].copy(r);//調(diào)用讀者結(jié)構(gòu)體copy函數(shù)

      length++;} int search(char *rn)//按姓名查找讀者函數(shù)

      {

      for(int i=0;i

      if(strcmp(readers[i].get_rname(),rn)==0)//判斷是否相等

      return i;

      return-1;

      } bool revise(Reader reader,int i)//修改讀者資料函數(shù)

      {

      readers[i].copy(reader);//調(diào)用讀者結(jié)構(gòu)體cpoy函數(shù)

      return true;} void delete_reader(int index)//刪除讀者函數(shù)

      {

      for(int i=index;i

      readers[i].copy(readers[i+1]);//用后面的地址覆蓋前面的地址

      length--;} bool log_reader(Reader r)//登錄時(shí)判斷讀者用戶是否存在函數(shù),相當(dāng)于遍歷

      {

      for(int i=0;i

      if(strcmp(readers[i].get_rname(),r.get_rname())==0)

      return true;

      return false;

      } void reg_reader()//注冊用戶函數(shù)

      {

      char n[10];

      //姓名name

      char c[10];

      //班級class

      char t[10];

      //電話tel

      Reader reader;

      cout<<”nt請輸入您的姓名:“;

      cin>>n;

      cout<<”nt請輸入您的所在班級:“;

      cin>>c;

      cout<<”nt請輸入您的聯(lián)系電話:“;

      cin>>t;

      reader.set_rname(n);//調(diào)用讀者結(jié)構(gòu)體設(shè)置讀者姓名函數(shù)

      reader.set_rclass(c);//調(diào)用讀者結(jié)構(gòu)體設(shè)置讀者班級函數(shù)

      reader.set_rtel(t);//調(diào)用讀者結(jié)構(gòu)體設(shè)置聯(lián)系電話函數(shù)

      add_reader(reader);//調(diào)用讀者結(jié)構(gòu)體添加讀者函數(shù)

      cout<<”nt注冊成功!“;} void show_reader()//不帶參的顯示讀者信息函數(shù)

      { cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆讀★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

      cout<<”姓名ttt班級ttt電話n“;

      for(int i=0;i

      {

      cout<

      cout<<”ttt“<

      cout<<”ttt“<

      } } void show_reader(int i)//帶參的顯示讀者信息函數(shù)

      {

      cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆讀★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆nn“;

      cout<<”姓名ttt班級ttt電話n“;

      cout<

      cout<<”ttt“<

      cout<<”ttt“<

      }

      };

      //********書籍結(jié)構(gòu)體,用于存放書籍基本信息******** class Book { private:

      char bnum[10];

      //書號

      char bname[20];

      //書名

      char bauthor[10];

      //作者

      char rname[10];

      //借閱人 public: int tag;

      //狀態(tài)標(biāo)記判斷指標(biāo)(已借/在架)Book()

      //構(gòu)造函數(shù)初始化信息

      {strcpy(bnum,”“);strcpy(bname,”“);strcpy(bauthor,”“);strcpy(rname,”“);tag=0;}

      void set_bnum(char *no)

      //設(shè)置書號

      {strcpy(bnum,no);}

      //把字符串no中的字符復(fù)制到字符串bnum中

      char *get_bnum()

      //獲得書號

      {

      return bnum;}

      //返回值為bnum

      void set_bname(char *n)

      //設(shè)置書名

      {strcpy(bname,n);}

      char *get_bname()

      //獲得書名

      {return bname;}

      void set_bauthor(char *a)

      //設(shè)置作者

      {strcpy(bauthor,a);}

      char * get_bauthor()

      //獲得作者姓名

      {return bauthor;}

      void set_tag(int t)

      //狀態(tài)設(shè)置

      {tag=t;}

      void set_rname(char *rn)

      //設(shè)置借閱人

      {strcpy(rname,rn);}

      char *get_rname()

      //獲得借閱人姓名

      {return rname;}

      void show_tag()

      //顯示圖書狀態(tài)

      {

      if(tag==1)

      {cout<<”已借“;}

      else

      {cout<<”在架“;}

      }

      void copy(Book m)

      //Book結(jié)構(gòu)體copy函數(shù)

      {

      strcpy(bnum,m.get_bnum());

      //將獲得書號函數(shù)里的返回值里的字符復(fù)制到bnum

      strcpy(bname,m.get_bname());

      strcpy(bauthor,m.get_bauthor());

      tag=0;

      } };//**********書籍管理結(jié)構(gòu)體,實(shí)現(xiàn)管理書籍功能********** class BookManage { private:

      Book books[100];

      //定義Book書籍結(jié)構(gòu)體數(shù)組對象,最大容量100本

      int length;

      void saveFile()

      //保存書籍文件

      {

      ofstream fwrite;//定義輸出文件流ofstream結(jié)構(gòu)體對象fwrite

      if(!fwrite)

      {cout<<”文件保存失敗!n“;exit(1);

      }

      fwrite.open(BookFile,ios::binary);//使文件流與文件建立關(guān)聯(lián),以二進(jìn)制方式打開

      fwrite.write((char *)books,length*sizeof(Book));//計(jì)算并返回所占字節(jié)數(shù)

      fwrite.close();

      //關(guān)閉磁盤文件

      } void readFile()

      //讀取書籍文件

      {

      ifstream fread;//定義輸入文件流對象fread

      length=0;

      if(!fread)

      {cout<<”文件讀取失敗!“<

      Book temp;

      //定義書籍結(jié)構(gòu)體臨時(shí)對象temp

      int i=0;

      fread.open(BookFile ,ios::binary);//使文件流與文件建立關(guān)聯(lián),以二進(jìn)制方式打開

      while((fread.read((char *)&books[i],sizeof(Book))))

      i++;

      //每讀完一次,指針后移一位,直到不能讀出正確結(jié)果為止

      length=i;

      fread.close();} public:

      BookManage()

      //構(gòu)造函數(shù),讀取磁盤文件

      {

      length=0;

      //從頭讀起,計(jì)數(shù),最大100

      readFile();

      //調(diào)用讀取文件函數(shù)

      }

      ~BookManage()

      //析構(gòu)函數(shù),保存磁盤文件

      {

      saveFile();

      //調(diào)用保存文件函數(shù)

      }

      bool add(Book book)

      //添加圖書資料

      {

      if(length>=100)

      { cout<<”對不起,儲存已滿,您無法繼續(xù)添加!n“;

      return-1;

      }

      else

      {

      books[length].copy(book);//調(diào)用書籍結(jié)構(gòu)體copy函數(shù)

      length++;

      return(length-1);

      } } int bnu_search(char *bnu)

      //按書號查找書籍

      {

      for(int i=0;i

      if(strcmp(books[i].get_bnum(),bnu)==0)//字符串比較,判斷是否相等

      return i;

      return-1;

      } int bna_search(char *bna)

      //按書名查找書籍

      {

      for(int i=0;i

      if(strcmp(books[i].get_bname(),bna)==0)//判斷

      return i;

      return-1;

      } int bau_search(char *bau)//按作者查找書籍

      {

      for(int i=0;i

      if(strcmp(books[i].get_bauthor(),bau)==0)//判斷

      return i;

      return-1;

      }

      int rn_search(char *rn)//按借閱人查找書籍

      {

      for(int i=0;i

      if(strcmp(books[i].get_rname(),rn)==0)//判斷

      return i;

      return-1;

      }

      void revise(Book book,int i)//帶參的修改書籍函數(shù)

      {books[i].copy(book);} //調(diào)用Book結(jié)構(gòu)體copy函數(shù)

      void deleteBook(int index)//帶參的刪除書籍資料函數(shù)

      {

      for(int i=index;i

      books[i].copy(books[i+1]);//用后面的地址將當(dāng)前的地址覆蓋

      length--;

      } void show_book()//不帶參的顯示書籍函數(shù)

      {

      cout<<” ☆☆☆☆☆☆☆☆☆☆☆書★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

      cout<<”書號“;

      cout.width(10);

      cout<<”書名“;

      cout.width(10);

      cout<<”作者“;

      cout.width(17);

      cout<<”狀態(tài)“;

      cout.width(25);

      cout<<”借閱人n“;

      for(int i=0;i

      { cout<

      cout.width(10);

      cout<

      cout.width(10);

      cout<

      cout.width(20);

      books[i].show_tag();

      cout.width(20);

      cout<

      }

      } void show_book(int i)//帶參的顯示書籍函數(shù)

      { cout<<” ☆☆☆☆☆☆☆☆☆☆☆書★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

      cout<<”書號“;

      cout.width(10);

      cout<<”書名“;

      cout.width(10);

      cout<<”作者“;

      cout.width(17);

      cout<<”狀態(tài)“;

      cout.width(25);

      cout<<”借閱人n“;

      cout<

      cout.width(10);

      cout<

      cout.width(10);

      cout<

      cout.width(20);

      books[i].show_tag();

      cout.width(20);

      cout<

      }

      void br_book()//讀者借、還書功能函數(shù)

      {

      ReaderManage reader;

      int choi;//選擇

      int a;

      //圖書狀態(tài)指標(biāo)(1已借2在架)

      char sh[10];//需要還書的書號

      char dz[10];//讀者姓名

      cin>>sh;

      int index=bnu_search(sh);//定義一個(gè)變量等于查找到的書號

      if(index>=0)

      { if(books[index].tag==1)//已借

      a=1;

      if(books[index].tag==0)//在架

      a=2;

      switch(a)

      { case 1:

      cout<<”nt該書目前狀態(tài)為<已借出>n“;

      cout<<”nt請選擇您需要的服務(wù):1:還書

      0:返回n“;

      cin>>choi;

      cin.ignore();//清除以回車結(jié)束的輸入緩沖區(qū)的內(nèi)容,消除上一次輸入對下一次輸入的影響

      if(choi!=1&&choi!=0)

      {

      cout<<”nt操作有誤,請重新選擇(0/1)!n“;

      return;

      }

      else if(choi==1)

      {

      cout<<”nt請輸入您的姓名:“;

      cin>>dz;

      cin.ignore();

      int index1=reader.search(dz);

      if(index1==-1)

      {

      cout<<”nt對不起,系統(tǒng)無該讀者記錄,新用戶請先注冊!“;

      return;

      }

      else

      {

      strcpy(dz,”“);//將讀者姓名已空白代替

      books[index].set_rname(dz);//借閱人一項(xiàng)變?yōu)榭瞻?/p>

      books[index].set_tag(0);//圖書狀態(tài)變?yōu)樵诩?/p>

      cout<<”nt還書成功!“<

      }

      }break;

      case 2:

      cout<<”nt該書目前狀態(tài)為<在館>n“;

      cout<<”nt請您需要的服務(wù):1:借書

      0:返回n“;

      cin>>choi;

      cin.ignore();

      if(choi!=1&&choi!=0)

      {

      cout<<”nt操作有誤,請重新選擇(0/1)!n“;

      return;

      }

      else if(choi==1)

      {

      cout<<”nt請輸入您的姓名:“;

      cin>>dz;

      int index1=reader.search(dz);

      if(index1==-1)

      { cout<<”nt對不起,系統(tǒng)無改讀者記錄,新用戶請先注冊!“;

      return;

      }

      else

      {

      books[index].set_rname(dz);

      books[index].set_tag(1);

      cout<<”nt借書成功!“<

      }

      }break;

      }

      }

      else

      {

      cout<<”nt對不起,系統(tǒng)無該書記錄!“;}

      }

      bool in(int i)//判斷圖書是否在架函數(shù)

      {

      if(books[i].tag==1)

      return false;

      return true;

      }

      };//**********菜單結(jié)構(gòu)體,實(shí)現(xiàn)界面引導(dǎo)********** class Menu {

      BookManage bm;

      //定義書籍管理結(jié)構(gòu)體對象bm ReaderManage rm;

      //定義讀者管理結(jié)構(gòu)體對象rm Reader r;

      //定義讀者結(jié)構(gòu)體對象r private: int choice;

      //菜單序號選擇

      int key;

      //管理員密碼 public: void header()

      //頁眉

      {

      system(”color fd“);

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      統(tǒng)

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;} void log_menu()

      //主界面登錄菜單

      {

      system(”color fd“);

      header();

      cout<<”nttt< 請

      份 >n“;

      cout<<”ntttt1: 管理員nntttt2: 讀

      者nntttt0: 退

      出nt您的選擇是: “;choice: cin>>choice;

      cin.ignore();

      //清除以回車結(jié)束的輸入緩沖區(qū)的內(nèi)容,消除上一次輸入對下一次輸入的影響

      switch(choice)

      {

      case 1:

      log_admin();

      //管理員登錄,需密碼驗(yàn)證

      break;

      case 2:

      reader_lr();

      //讀者登錄或注冊

      break;

      case 0:

      exit(1);

      //退出系統(tǒng)

      break;

      default:

      cout<<”nt您的操作有誤,請重新選擇(0→2): “;

      goto choice;

      } } void admin_menu()

      //管理員管理菜單

      {

      system(”cls“);

      system(”color f9“);

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      系★統(tǒng)★管★理★界★面

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      1: 添加新的圖書資料

      2: 修改已有圖書資料

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      3: 刪除已有圖書資料

      4: 查找已有圖書資料

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      5: 查看所有圖書資料

      6: 修改讀者用戶信息

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      7: 刪除讀者用戶信息

      8: 查看所有讀者信息

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      9: 返回系統(tǒng)登錄界面

      0: 退出圖書管理系統(tǒng)

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”nt請選擇您需要的服務(wù)序號: “;choice: cin>>choice;

      cin.ignore();

      switch(choice)

      {

      case 1:

      //添加圖書

      addBook();

      bm.~BookManage();

      break;

      case 2:

      //修改圖書

      reviseBook();

      bm.~BookManage();

      break;

      case 3:

      //刪除圖書

      delBook();

      bm.~BookManage();

      break;

      case 4:

      //查找圖書

      absearch_menu();

      break;

      case 5:

      //查看全部圖書

      bm.show_book();

      cout<<”nt顯示完畢!“;

      system(”pause“);

      admin_menu();

      break;

      case 6:

      //修改讀者

      reviseReader();

      rm.~ReaderManage();

      break;

      case 7:

      //刪除讀者

      delReader();

      rm.~ReaderManage();

      break;

      case 8: //查看所有讀者

      rm.show_reader();

      cout<<”nt顯示完畢!“;

      system(”pause“);

      admin_menu();

      break;

      case 9: //返回系統(tǒng)登錄界面

      system(”cls“);

      log_menu();

      case 0: //退出系統(tǒng)

      exit(1);

      break;

      default:

      cout<<”nt您的操作有誤,請重新選擇(0→7): “;

      goto choice;

      } } void reader_menu()

      //讀者服務(wù)菜單

      {

      system(”cls“);

      system(”color f9“);

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      讀★者★服★務(wù)★界★面

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      1: 借 閱 圖 書

      2: 歸 還 圖 書

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      3: 查 找 圖 書

      4: 借 閱 情 況

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      5: 返 上 一 級

      0: 退 出 系 統(tǒng)

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”nt請選擇您需要的服務(wù)序號: “;choice: cin>>choice;

      cin.ignore();

      switch(choice)

      {

      case 1:

      cout<<”nt請輸入您欲借閱的圖書書號: “;

      bm.br_book();

      bm.~BookManage();

      break;

      case 2:

      cout<<”nt請輸入您欲歸還的圖書書號: “;

      bm.br_book();

      bm.~BookManage();

      break;

      case 3:

      bsearch_menu();

      break;

      case 4:

      rn_search();

      break;

      case 5:

      system(”cls“);

      reader_lr();

      break;

      case 0:

      exit(1);

      break;

      default:

      cout<<”nt您的操作有誤,請重新選擇(0→5):

      goto choice;

      } } void bsearch_menu()

      //讀者查找書籍菜單

      {

      system(“color f2”);

      cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      書★籍★查★找★界★面

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      1: 按 書號查找

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      2: 按 書名查找

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      3: 按 作者查找

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      4: 返 回 上 級

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      0: 退 出 系 統(tǒng)

      ☆n”;cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;

      int bsc;//book search choice cout<<“nt請輸入您需要的服務(wù)序號: ”;

      cin>>bsc;

      cin.ignore();

      switch(bsc){

      case 1:

      bnu_search();

      break;

      case 2:

      bna_search();

      “;

      break;

      case 3:

      bau_search();

      break;

      case 4:

      reader_menu();

      break;

      case 5:

      exit(1);

      default:

      cout<<”nt操作有誤,請重新選擇<0→4>“;

      break;

      }

      }

      void absearch_menu()

      //管理員查找書籍菜單

      {

      system(”color f2“);

      cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      書★籍★查★找★界★面

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      1: 按 書號查找

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      2: 按 書名查找

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      3: 按 作者查找

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      4: 返 回 上 級

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      0: 退 出 系 統(tǒng)

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      int bsc;//book search choice

      cout<<”nt請輸入您需要的服務(wù)序號: “;

      cin>>bsc;

      cin.ignore();

      switch(bsc)

      {

      case 1:

      bnu_search();

      break;

      case 2:

      bna_search();

      break;

      case 3:

      bau_search();

      break;

      case 4:

      admin_menu();

      break;

      case 5:

      exit(1);

      default:

      cout<<”nt操作有誤,請重新選擇<0→4>“;

      break;

      }

      } void reader_lr()//讀者登錄或注冊菜單 {

      system(”cls“);

      header();

      system(”color f1“);

      cout<<”nttt< 讀

      面 >n“;

      cout<<”nttt

      1: 登

      錄t2: 注

      冊nnttt

      3: 返

      回t0: 退

      出nt您的選擇是: “;

      int rlc;//reader login choice choice: cin>>rlc;

      cin.ignore();

      switch(rlc)

      {

      case 1:

      //已注冊讀者登錄

      cout<<”nt請輸入您的姓名: “;

      char rn[10];//reader name

      cin>>rn;

      r.set_rname(rn);

      if(rm.log_reader(r))

      {

      cout<<”nt登錄成功!“;

      system(”pause“);

      reader_menu();

      }

      else

      cout<<”nt登錄失敗!新用戶請先注冊!“;

      system(”pause“);

      reader_lr();

      break;

      case 2:

      //新用戶注冊

      rm.reg_reader();

      rm.~ReaderManage();

      system(”pause“);

      reader_lr();

      break;

      case 3:

      system(”cls“);

      log_menu();

      case 0:

      exit(1);

      break;

      default:

      cout<<”nt您的操作有誤,請重新選擇(0→2):

      goto choice;

      } } void log_admin()

      //管理員登錄

      {

      cout<<“nt請輸入管理員密碼:”;

      int key;

      cin>>key;

      if(key==14125)

      {

      cout<<“nt登錄成功!nnt”;

      system(“pause”);

      admin_menu();

      //管理員操作菜單

      }

      else

      {cout<<“nt登錄失敗!原因是密碼錯(cuò)誤!n”;

      cout<<“nt請選擇 <1:返回上一級菜單

      0:退出系統(tǒng)>

      cin>>choice;

      cin.ignore();

      switch(choice)

      ”;“;

      {

      case 1:

      system(”cls“);

      log_menu();

      break;

      case 0:

      exit(1);

      break;

      default:

      cout<<”nt操作有誤,請重新選擇(0/1)“;

      }

      } } void rn_search()

      //按書號查找函數(shù)

      {

      char rn[10];//reader name

      cout<<”nt請輸入您的姓名:“;

      cin>>rn;

      int index=bm.rn_search(rn);

      if(index>=0)

      bm.show_book(index);

      else

      cout<<”nt對不起,系統(tǒng)無您的借閱記錄!“;

      cout<<”nt“;

      system(”pause“);

      reader_menu();

      } void bnu_search()

      //按書號查找函數(shù)

      {

      char bnu[10];

      cout<<”nt請輸入您要查找的書號:“;

      cin>>bnu;

      int index=bm.bnu_search(bnu);

      if(index>=0)

      bm.show_book(index);

      else

      cout<<”nt對不起,系統(tǒng)無該書籍記錄!“;

      cout<<”nt“;

      system(”pause“);

      bsearch_menu();

      }

      void bna_search()

      //按書名查找函數(shù)

      {

      cout<<”nt請輸入您要查找的書名:“<

      char bna[20];

      cin>>bna;

      int index=bm.bna_search(bna);

      if(index>=0)

      bm.show_book(index);

      else

      cout<<”nt對不起,系統(tǒng)無該書籍記錄!“;

      cout<<”nt“;

      system(”pause“);

      bsearch_menu();

      }

      void bau_search()

      //按作者查找函數(shù)

      {

      cout<<”nt請輸入您要查找的作者:“<

      char bau[10];

      cin>>bau;

      int index=bm.bau_search(bau);

      if(index>=0)

      bm.show_book(index);

      else

      cout<<”nt對不起,系統(tǒng)無該書籍記錄!“;

      cout<<”nt“;

      system(”pause“);

      bsearch_menu();

      }

      void addBook()

      //新增書籍函數(shù)

      { char numb[10];

      //書號

      char nameb[20];

      //書名

      char authorb[10];//作者

      Book book;

      //書籍結(jié)構(gòu)體對象book

      int tag1;input1:cout<<”nt請輸入新書書號:“;

      cin>>numb;

      int index=bm.bnu_search(numb);

      if(index==-1)

      {

      cout<<”nt系統(tǒng)目前尚無該書記錄,您可以繼續(xù)操作!n“;

      cout<<”nt請輸入新書書名:“;

      cin>>nameb;

      cout<<”nt請輸入新書作者:“;

      cin>>authorb;

      tag1=0;

      book.set_bnum(numb);

      book.set_bname(nameb);

      book.set_bauthor(authorb);

      book.set_tag(tag1);

      bm.add(book);

      cout<<”nt恭喜您!新書資料錄入成功!“;

      }

      else

      {

      cout<<”nt對不起,該書號紀(jì)錄已存在!請重新輸入!“;

      goto input1;

      }

      system(”pause“);

      admin_menu();} void reviseBook()

      //修改書籍函數(shù)

      {

      char numb[10];

      char nameb[20];

      char authorb[10];

      Book book;

      int index=-1;input2: cout<<”nt請輸入您要修改書籍的書號:“;

      cin>>numb;

      index=bm.bnu_search(numb);

      if(index==-1)

      {

      cout<<”nt對不起,您輸入的書號不存在,請重新輸入!“<

      goto input2;

      return;

      }

      bool sta=bm.in(index);//判斷是否在館

      if(sta)

      { cout<<”nt該書目前處于<在架>狀態(tài),您可以繼續(xù)操作!“;

      cout<<”nt請輸入更改后的書名:“;

      cin>>nameb;

      cout<<”nt請輸入更改后的作者:“;

      cin>>authorb;

      book.set_bnum(numb);

      book.set_bname(nameb);

      book.set_bauthor(authorb);

      bm.revise(book,index);

      cout<<”nt恭喜您!書籍資料修改成功!“;}

      else

      cout<<”nt該書已被借出,請于讀者歸還后再進(jìn)行相關(guān)操作!“<

      system(”pause“);

      admin_menu();

      } void delBook()

      //刪除書籍函數(shù)

      {

      char numb[10];

      cout<<”nt請輸入您要?jiǎng)h除書籍的書號:“;

      cin>>numb;

      int index=bm.bnu_search(numb);

      if(index>=0)

      {

      cout<<”nt您確定要?jiǎng)h除該書記錄嗎(y/n)

      “;

      char y;

      cin>>y;

      if(y=='y'||y=='Y')

      {

      bm.deleteBook(index);

      cout<<”nt刪除成功!“;

      }

      else

      cout<<”nt刪除取消!“;

      }

      else

      cout<<”nt對不起,系統(tǒng)沒有該圖書記錄!“;

      system(”pause“);

      admin_menu();

      } void reviseReader()//修改讀者用戶函數(shù)

      {

      char namer[10];

      Reader reader;get1:

      cout<<”nt請輸入你要修改讀者用戶的姓名: “;

      cin>>namer;

      int index=rm.search(namer);

      if(index==-1)

      {

      cout<<”nt對不起,系統(tǒng)無改讀者記錄,重新輸入請按1,返回請按0:

      int a;

      cin>>a;get2:

      cin.ignore();

      switch(a)

      {

      case 1:

      goto get1;

      break;

      case 0:

      system(“pause”);

      admin_menu();

      break;

      default:

      cout<<“nt您的操作有誤,請重新選擇(0/1):

      ”;

      goto get2;

      }

      return;

      }

      “;

      else

      {

      char namer[10];

      char classr[10];

      char telr[10];

      Reader reader;

      cout<<”nt請輸入更改后的讀者姓名:“;

      cin>>namer;

      cout<<”nt請輸入更改后的班級名稱:“;

      cin>>classr;

      cout<<”nt請輸入更改后的聯(lián)系電話:“;

      cin>>telr;

      reader.set_rname(namer);

      reader.set_rclass(classr);

      reader.set_rtel(telr);

      cout<<”nt是否真的修改該記錄(y/n?):“;

      char y;

      cin>>y;

      if(y=='y'||y=='Y')

      { rm.revise(reader,index);

      cout<<”nt修改成功!n“;

      }

      else

      cout<<”nt操作取消!n“;

      }

      system(”pause“);

      admin_menu();

      }

      void delReader()

      //刪除讀者用戶函數(shù)

      {

      cout<<”nt請輸入您要?jiǎng)h除的讀者用戶的姓名:“<

      char namer[10];

      cin>>namer;

      int index=rm.search(namer);

      if(index>=0)

      {

      cout<<”nt是否真的刪除該記錄(y/n?): “;

      char y;

      cin>>y;

      if(y=='y'||y=='Y')

      {

      rm.delete_reader(index);

      cout<<”nt刪除成功!n“;

      }

      else

      cout<<”nt操作取消!n“;

      }

      else

      cout<<”nt對不起,系統(tǒng)尚無該讀者記錄!“;

      system(”pause“);

      admin_menu();

      } };//********主函數(shù)******** int main(){

      system(”color fd“);Menu menu;//定義菜單結(jié)構(gòu)體對象menu

      cout<<”ttt 文計(jì)091-1 龐麗萍 200990514125

      “;cout<<”ttt

      當(dāng)前日期:2011-6-22 星期三“;cout<<”ttt

      當(dāng)前時(shí)間:08:00

      “;cout<<”nttt

      ★ 歡 “;cout<<”★ 迎 “;

      } cout<<”★ 進(jìn) “;cout<<”★ 入 ★nn";menu.log_menu();return 0;四.程序正確性驗(yàn)證

      1主頁面

      2.管理員登陸頁面

      3.圖書添加

      五.課程設(shè)計(jì)過程中出現(xiàn)的問題、原因及解決方法

      1.用戶登錄密碼時(shí),不能使用暗碼來保護(hù)密碼。(未解決成功)2.每個(gè)界面都能退出到主頁面,而不是直接跳出系統(tǒng)。(以解決)3.書名字長太多影響書籍、作者、數(shù)量等之間的一一對應(yīng)關(guān)系。(為解決成功)

      六.課程設(shè)計(jì)的主要收獲

      通過這幾天學(xué)習(xí)設(shè)計(jì)圖書信息管理系統(tǒng),認(rèn)識到一切看似簡單的事情只有自己動手做,明白了其中的原理才會更好的把它變成自己的東西。圖書管理系統(tǒng)主要用到了文件的輸入輸出,以及利用簡單的順序查找知識,加深了對數(shù)據(jù)結(jié)構(gòu)的理解與應(yīng)用。對于這次的課程設(shè)計(jì),首先,許多知識不僅僅只是課本上的,需要我們自己去圖書館或網(wǎng)上收集資料。其次,編程過程終遇到各種錯(cuò)誤,需要我們耐心分析,討論,最后得出正確結(jié)果。第三,程序無錯(cuò),進(jìn)行調(diào)試,然后進(jìn)行加工修改優(yōu)化。

      七.對今后課程設(shè)計(jì)的建議

      希望老師可以分小組做課程設(shè)計(jì),題目可以相應(yīng)的增大難度。分組可以鍛煉團(tuán)對合作能力,隊(duì)員可以相互討論解決問題,彼此能夠激發(fā)更多的思想,做出更完善的作品,同時(shí)也防止了互相拷貝的情況,讓每個(gè)同學(xué)都積極的參與到設(shè)計(jì)中,而不是坐享其成。

      第三篇:圖書管理系統(tǒng)(含源代碼)c語言_數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 圖書管理系統(tǒng)

      工程管理 121279044 伍楊

      目錄一、二、三、題目要求...................................................................2 總體設(shè)計(jì)...................................................................2 編碼實(shí)現(xiàn)...................................................................3 1)定義圖書結(jié)構(gòu)體.......................................................3 2)登記操作...............................................................4 3)查看操作...............................................................8 4)刪除操作.............................................................11 5)Main函數(shù)...........................................................20四、五、六、調(diào)試與測試..............................................................26 五心得體會..............................................................28 用戶手冊.................................................................28

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      一、題目要求

      1)目的要求

      本課程設(shè)計(jì)任務(wù)的目的是要求學(xué)生按照分析、設(shè)計(jì)、編碼、調(diào)試和測試的軟件開發(fā)過程獨(dú)立完成管理系統(tǒng)設(shè)計(jì),以及C語言算法的掌握,并能最終實(shí)現(xiàn)本系統(tǒng)的功能要求,通過這個(gè)程序可以學(xué)習(xí)到以前調(diào)試短程序沒有的的經(jīng)驗(yàn)。2)題目要求

      實(shí)現(xiàn)圖書管理信息系統(tǒng)的設(shè)計(jì)。要求實(shí)現(xiàn)圖書添加、顯示全部圖書、查詢、借閱和歸還。主要考查利用文件的操作!

      二、總體設(shè)計(jì)

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      三、編碼實(shí)現(xiàn)

      1)定義圖書結(jié)構(gòu)體

      struct book{

      char bookname[20];

      //書名

      int NO;

      //書編號

      char type[20];

      //類型

      int date;

      //到書日期 };struct person{

      char name[10];

      //姓名

      char classes[20];

      //班級

      int number;

      //學(xué)號

      char telephone[12];

      //聯(lián)系電話

      int NO;

      //書編號

      char bookname[20];

      //書名

      int borrowdate;

      //借書日期

      int returndate;

      //還書日期

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      2)登記操作

      void new_book(){ FILE *fp;struct book b;//登記新書

      int i,j;

      printf(“請朱老師輸入此次收到的書本總數(shù):”);if((fp=fopen(“shuku.txt”,“a”))==NULL){ printf(“File open error!n”);exit(0);}

      scanf(“%d”,&i);

      for(j=0;j

      printf(“請朱老師輸入書名:”);scanf(“%s”,b.bookname);fprintf(fp,“%s”,b.bookname);printf(“請朱老師輸入書編號:”);scanf(“%d”,&b.NO);fprintf(fp,“

      %d”,b.NO);printf(“請朱老師輸入類型:”);scanf(“%s”,b.type);

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      }

      } fprintf(fp,“

      %s”,b.type);printf(“請朱老師輸入到書日期:”);scanf(“%d”,&b.date);fprintf(fp,“

      %d”,b.date);if(fclose(fp)){

      } printf(“Can not close the file!n”);exit(0);void new_person()

      {

      FILE *fp;struct person p;char choice;

      //登記借書

      if((fp=fopen(“jieshujilu.txt”,“a”))==NULL){ printf(“File open error!n”);exit(0);}

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      printf(“請朱老師輸入借書人姓名:”);scanf(“%s”,p.name);fprintf(fp,“%s”,p.name);printf(“請朱老師輸入借書人班級:”);scanf(“%s”,p.classes);fprintf(fp,“

      %s”,p.classes);printf(“請朱老師輸入借書人學(xué)號:”);scanf(“%d”,&p.number);fprintf(fp,“

      %d”,p.number);printf(“請朱老師輸入借書人聯(lián)系電話:”);scanf(“%s”,p.telephone);fprintf(fp,“

      %s”,p.telephone);printf(“請朱老師輸入書編號:”);scanf(“%d”,&p.NO);fprintf(fp,“

      %d”,p.NO);printf(“請朱老師輸入書名:”);scanf(“%s”,p.bookname);fprintf(fp,“

      %s”,p.bookname);printf(“請朱老師輸入借書日期:”);scanf(“%d”,&p.borrowdate);fprintf(fp,“

      %d”,p.borrowdate);

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      printf(“請朱老師輸入還書日期:”);scanf(“%d”,&p.returndate);fprintf(fp,“

      %d”,p.returndate);printf(“nt您想繼續(xù)嗎?(y/n)”);scanf(“ %c”,&choice);if(choice=='Y'||choice=='y'){

      } system(“cls”);new_person();if(fclose(fp)){

      } printf(“Can not close the file!n”);exit(0);}實(shí)現(xiàn)程序?qū)ξ募淖x取 void Read(){

      int i=0;int j=0;ifstream in(“Libra.txt”,ios::out);in>>i;

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      nt;

      } all=i;if(i>0&&i<=Max){

      in>>data[j].id>>data[j].name>>data[j].type>>data[j].status>>data[j].coufor(j=1;j<=i;j++){ } } in.close();

      3)查看操作

      v void see_book(){

      FILE *fp;long NO;char bookname[20];char type[20];long date;//查看書庫記錄

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      } if((fp=fopen(“shuku.txt”,“r”))==NULL){

      } printf(“File open error!n”);exit(0);while(!feof(fp)){ fscanf(fp,“%s%ld%s%ld”,bookname,&NO,type,&date);printf(“%-10s %-10ld %-10s %ldn”,bookname,NO,type,date);};if(fclose(fp)){

      } printf(“Can not close the file!n”);exit(0);void see_person(){ //查看所有借書記錄

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      FILE *fp;char name[10];

      char classes[20];

      int number;char telephone[20];

      int NO;

      char bookname[20];

      int borrowdate;

      int returndate;

      fscanf(fp,“%s %s %ld %s %ld %s %ld %ld”,name,classes,&number,telephonwhile(!feof(fp)){ if((fp=fopen(“jieshujilu.txt”,“r”))==NULL){

      } printf(“File open error!n”);exit(0);e,&NO,bookname,&borrowdate,&returndate);printf(“%-5s %-5s %ld %-5s %ld %-5s %ld %ldn”,name,classes,number,telephone,NO,bookname,borrowdate,returndate);

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      } };if(fclose(fp)){

      } printf(“Can not close the file!n”);exit(0);

      4)刪除操作

      void delete_books()

      {

      int number;void deletebooks();

      printf(“請輸入您要?jiǎng)h除的書編號:”);scanf(“%d”,&number);FILE *fp;struct book b;

      //刪除舊書

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      if((fp=fopen(“shuku.txt”,“r”))==NULL){

      } printf(“不能打開此文件!n”);exit(0);while(!feof(fp)){ fscanf(fp,“%s %d %s %d”,b.bookname,&b.NO,b.type,&b.date);

      } if(b.NO==number){

      } printf(“nnt***************圖書信息*******************n”);printf(“nt圖書書名:%25s”,b.bookname);printf(“nt----------”);printf(“nt圖書編號:%25d”,b.NO);printf(“nt----------”);printf(“nt圖書類型:%23s”,b.type);printf(“nt----------”);printf(“nt到書日期:%25d”,b.date);printf(“nt----------”);

      deletebooks();

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      }

      void deletebooks(){

      while(!feof(fp)){ fscanf(fp,“%s %d %s %d”,b.bookname,&b.NO,b.type,&b.date);if((fp=fopen(“shuku.txt”,“r”))==NULL){

      } if((fp1=fopen(“tempshuku.txt”,“w”))==NULL){

      //建立一個(gè)臨時(shí)文件

      } printf(“不能打開此文件!n”);exit(0);printf(“不能打開此文件!n”);exit(0);printf(“nn確認(rèn)刪除?請?jiān)俅屋斎霑幪枺骸?;scanf(“%d”,&number);FILE *fp,*fp1,*fp2,*fp3;int number;struct book b;

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      } if(b.NO==number)continue;else

      fprintf(fp1,“%s %d %s %d”,b.bookname,b.NO,b.type,b.date);fclose(fp);fclose(fp1);if((fp2=fopen(“tempshuku.txt”,“r”))==NULL){

      } if((fp3=fopen(“shuku.txt”,“w”))==NULL){

      //清空書庫

      } while(!feof(fp2)){

      //將臨時(shí)文件的內(nèi)容寫人源文件

      } fscanf(fp2,“%s %d %s %d”,b.bookname,&b.NO,b.type,&b.date);fprintf(fp3,“%s %d %s %d”,b.bookname,b.NO,b.type,b.date);printf(“不能打開此文件!n”);exit(0);printf(“不能打開此文件!n”);exit(0);

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      }

      void delete_returnbook(){

      if((fp=fopen(“jieshujilu.txt”,“r”))==NULL){

      } printf(“不能打開此文件!n”);exit(0);printf(“n請輸入所還書本的書編號:”);scanf(“%d”,&numbers);FILE *fp;int numbers;struct person p;void deletereturnbook();char choice;printf(“n

      刪除成功!n”);fclose(fp2);fclose(fp3);

      //刪除借書記錄

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      while(!feof(fp)){

      fscanf(fp,“%s %s %ld %s %ld %s %ld %ld”,p.name,p.classes,&p.number,p.telephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);

      if(p.NO==numbers){

      printf(“nt***************圖書信息*******************n”);printf(“nt借書人姓名:%20s”,p.name);printf(“nt----------”);printf(“nt借書人班級:%20s”,p.classes);printf(“nt----------”);printf(“nt借書人學(xué)號:%20d”,p.number);printf(“nt----------”);printf(“nt借書人聯(lián)系電話:%20s”,p.telephone);printf(“nt----------”);printf(“nt圖書編號:%24d”,p.NO);printf(“nt----------”);printf(“nt圖書名稱:%23s”,p.bookname);printf(“nt----------”);printf(“nt借書日期:%25d”,p.borrowdate);printf(“nt----------”);printf(“nt還書日期:%25d”,p.returndate);

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      }

      }

      } printf(“nt----------”);

      deletereturnbook();

      printf(“nt您想繼續(xù)嗎?(y/n)”);scanf(“ %c”,&choice);if(choice=='Y'||choice=='y'){

      } system(“cls”);delete_returnbook();fclose(fp);void deletereturnbook(){ FILE *fp,*fp1,*fp2,*fp3;struct person p;

      int numbers;printf(“nn確認(rèn)刪除?請?jiān)俅屋斎霑幪枺骸?;

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      scanf(“%d”,&numbers);if((fp=fopen(“jieshujilu.txt”,“r”))==NULL){

      } if((fp1=fopen(“tempbook.txt”,“w”))==NULL){

      } printf(“不能打開此文件!n”);exit(0);printf(“不能打開此文件!n”);exit(0);while(!feof(fp)){ fscanf(fp,“%s %s %d %s %d %s %d %d”,p.name,p.classes,&p.number,p.telephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);

      if(p.NO==numbers)continue;else

      fprintf(fp1,“%s %s %d %s %d %s %d %d”,p.name,p.classes,p.number,p.telephone,p.NO,p.bookname,p.borrowdat

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      e,p.returndate);

      fscanf(fp2,“%s %s %d %s %d %s %d %d”,p.name,p.classes,while(!feof(fp2)){

      //將臨時(shí)文件寫人源文件 if((fp2=fopen(“tempbook.txt”,“r”))==NULL){

      } if((fp3=fopen(“jieshujilu.txt”,“w”))==NULL){

      } printf(“不能打開此文件!n”);exit(0);printf(“不能打開此文件!n”);exit(0);fclose(fp);fclose(fp1);} &p.number,p.telephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);

      fprintf(fp3,“%s %s %d %s %d %s %d %d”,p.name,p.數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      classes,p.number,p.telephone,p.NO,p.bookname,p.borrowdate,p.returndate);

      } printf(“n

      刪除成功!n”);fclose(fp2);fclose(fp3);} 5)Main函數(shù)

      int main(void){

      do{ printf(“nnn

      圖書館管理系統(tǒng)na”);printf(“ *******************************************************n”);int choice;char choice2;struct book;struct person;

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      printf(“ ***朱老師您好吖********功能選項(xiàng): 登記******請按1,******n”);printf(“ ******************************* 查看/查詢*請按2 ******n”);printf(“ ******************************* 刪除***** 請按3 ******n”);printf(“ ******************************* 退出***** 請按0 ******n”);printf(“ *******************************************************nnn”);printf(“

      請選擇功能:”);scanf(“%d”,&choice);switch(choice){ case 1:

      printf(“

      登記選項(xiàng):新書登記請按1,借書登記請按2,返回請按3n”);printf(“請選擇:”);scanf(“%d”,&choice);switch(choice){ case 1:

      system(“cls”);

      //清屏 printf(“新書資料登記:nn”);new_book();

      //新書登記 printf(“登記完畢!n”);printf(“n”);scanf(“ %c”,&choice2);system(“cls”);break;

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      case 2:

      system(“cls”);printf(“借書資料登記:nn”);new_person();

      //借書登記 printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 3:

      } break;system(“cls”);break;

      case 2: printf(“

      查看/查詢選項(xiàng):書庫查看請按1,總借書記錄查看請按2,到期記錄查詢請按3,返回請按4n”);

      printf(“請選擇:”);scanf(“%d”,&choice);switch(choice){ case 1:

      system(“cls”);printf(“歡迎朱老師進(jìn)入書庫!nn”);

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      printf(“書名

      書編號

      類型

      到書日期n”);printf(“-----------n”);see_book();

      //書庫顯示 printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 2:

      system(“cls”);printf(“歡迎朱老師進(jìn)入借書記錄!nn”);printf(“姓名

      班級 學(xué)號 聯(lián)系電話 書編號 書名

      借書日期 到書日期n”);

      printf(“-------------------------n”);see_person();

      //借書記錄顯示

      printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 3:

      system(“cls”);search_person();

      //顯示符合記錄 printf(“n press anykey ”);

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      scanf(“ %c”,&choice2);system(“cls”);break;case 4:

      } break;system(“cls”);break;case 3: printf(“

      刪除選項(xiàng):舊書刪除請按1,借書記錄刪除請按2,返回請按3n”);

      printf(“請選擇:”);scanf(“%d”,&choice);switch(choice){ case 1:

      system(“cls”);delete_books();

      //刪除ing printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 2:

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      }

      system(“cls”);delete_returnbook();

      //刪除ing printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 3:

      } break;system(“cls”);break;case 0:

      } system(“cls”);}while(choice!= 0);return 0;

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      四、調(diào)試與測試

      主菜單

      登記

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊

      查看

      刪除

      生成的文件內(nèi)信息

      數(shù)據(jù)結(jié)構(gòu)大作業(yè) 121279044 伍楊五、五心得體會

      經(jīng)過這次大作業(yè),我覺得代碼的編寫,最主要的的是編程思想,語言其實(shí)不是太重要,思路最重要!

      六、用戶手冊

      程序執(zhí)行文件為 lib sys.exe,打開執(zhí)行文件后按提示操作即可

      第四篇:Oracle課程設(shè)計(jì) 圖書管理系統(tǒng)

      數(shù)據(jù)庫課程設(shè)計(jì)

      設(shè)計(jì)名稱:圖書管理系統(tǒng)

      組員:尚靖偉(122068)

      張紅凱(122072)班級:計(jì)G121班

      信息工程學(xué)院計(jì)算機(jī)系

      2013年6月27日

      “Oracle數(shù)據(jù)庫應(yīng)用設(shè)計(jì)”指導(dǎo)書

      Oracle數(shù)據(jù)庫管理與設(shè)計(jì)

      目 錄

      目錄.........................................................................................................................I 前言.......................................................................................................................II 第1部分

      Oracle管理技術(shù)........................................................................................1

      實(shí)驗(yàn)1 實(shí)驗(yàn)2 實(shí)驗(yàn)3 實(shí)驗(yàn)4 實(shí)驗(yàn)5 實(shí)驗(yàn)6 實(shí)驗(yàn)7 實(shí)驗(yàn)8 第2部分

      數(shù)據(jù)庫管理................................................................................................................1 角色和用戶管理........................................................................................................6 表和視圖管理............................................................................................................8 索引和序列管理......................................................................................................12 PL/SQL編程...........................................................................................................14 使用游標(biāo)、存儲過程和觸發(fā)器..............................................................................22 表空間管理..............................................................................................................26 文件管理..................................................................................................................30

      Oracle開發(fā)技術(shù)......................................................................................36

      I

      Oracle數(shù)據(jù)庫管理與設(shè)計(jì)

      前 言

      數(shù)據(jù)庫技術(shù)是計(jì)算機(jī)科學(xué)中發(fā)展最快的領(lǐng)域之一。隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,數(shù)據(jù)庫技術(shù)與網(wǎng)絡(luò)技術(shù)相結(jié)合,已經(jīng)廣泛應(yīng)用于工作和生活的各個(gè)領(lǐng)域。同時(shí),數(shù)據(jù)庫技術(shù)及其應(yīng)用已經(jīng)成為國內(nèi)外高校計(jì)算機(jī)專業(yè)和許多非計(jì)算機(jī)專業(yè)的必修或選修課程。

      Oracle是當(dāng)前最流行的大型關(guān)系數(shù)據(jù)庫之一,支持包括32位Windows、64位Windows、OS、HP-UX、AIX5L、Solaris和Linux等多種操作系統(tǒng),擁有廣泛的用戶和大量的應(yīng)用案例,已成為大型數(shù)據(jù)庫應(yīng)用系統(tǒng)的首選后臺數(shù)據(jù)庫系統(tǒng)。

      本實(shí)驗(yàn)課程要求學(xué)生全面了解Oracle數(shù)據(jù)庫的特點(diǎn)和功能。從安裝配置、安全性、可用性、互操作性、PL/SQL、可開發(fā)性、商業(yè)智能等多個(gè)方面,對Oracle數(shù)據(jù)庫的各項(xiàng)技術(shù)進(jìn)行學(xué)習(xí)和實(shí)驗(yàn)。

      通過學(xué)習(xí)Oracle數(shù)據(jù)庫安裝、管理及開發(fā),為今后從事Oracle數(shù)據(jù)庫管理和開發(fā)工作打下良好的基礎(chǔ)。

      本實(shí)驗(yàn)課程共分2個(gè)部分。第1部分為Oracle的管理技術(shù),由實(shí)驗(yàn)1至實(shí)驗(yàn)8組成,內(nèi)容包括:(1)數(shù)據(jù)庫管理;(2)角色和用戶管理;(3)表和視圖管理;(4)索引和序列管理;(5)PL/SQL編程;(6)使用游標(biāo)、存儲過程和觸發(fā)器;(7)表空間;(8)文件管理。第2部分為Oracle開發(fā)技術(shù),要求完成基于一定背景的管理信息系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì),如學(xué)生信息管理系統(tǒng)、圖書管理系統(tǒng)、人事信息管理系統(tǒng)、網(wǎng)上購物系統(tǒng)等。

      II

      第1部分 Oracle管理技術(shù)

      第1部分 Oracle管理技術(shù)

      實(shí)驗(yàn)1 數(shù)據(jù)庫管理

      目的和要求

      (1)了解Oracle數(shù)據(jù)庫的邏輯結(jié)構(gòu)和物理結(jié)構(gòu);(2)了解Oracle Enterprise Manager的使用情況;(3)學(xué)習(xí)關(guān)閉和啟動數(shù)據(jù)庫實(shí)例的方法;(4)學(xué)習(xí)使用SQL語句創(chuàng)建數(shù)據(jù)庫的方法;(5)學(xué)習(xí)使用SQL語句刪除數(shù)據(jù)庫的方法。

      實(shí)驗(yàn)準(zhǔn)備

      首先要了解Oracle數(shù)據(jù)庫的邏輯結(jié)構(gòu),包括方案(schema)對象、數(shù)據(jù)塊(data block)、區(qū)間(extent)、段(segment)和表空間(tablespace)等。數(shù)據(jù)庫由若干個(gè)表空間組成,表空間由表組成,段由區(qū)間組成,區(qū)間則由數(shù)據(jù)塊組成。Oracle數(shù)據(jù)庫的物理結(jié)構(gòu)由構(gòu)成數(shù)據(jù)庫的操作系統(tǒng)文件所決定。每個(gè)Oracle數(shù)據(jù)庫都由3種類型的文件組成:數(shù)據(jù)文件、日志文件和控制文件。這些數(shù)據(jù)庫文件為數(shù)據(jù)庫信息提供真正的物理存儲。

      Enterprise Manager 9i是Oracle 9i提供的新的管理工具,簡稱EM。使用它可以完成啟動、關(guān)閉數(shù)據(jù)庫,創(chuàng)建、刪除數(shù)據(jù)庫等功能。只有系統(tǒng)管理員或擁有CREATE DATABASE權(quán)限的用戶才能創(chuàng)建數(shù)據(jù)庫。可以在Enterprise Manager中通過圖形界面創(chuàng)建數(shù)據(jù)庫,也可以使用CREATE DATABASE語句創(chuàng)建數(shù)據(jù)庫。

      實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)主要包括以下內(nèi)容。

      (1)練習(xí)使用不同方法啟動和關(guān)閉數(shù)據(jù)庫實(shí)例。

      (2)練習(xí)使用不同方法創(chuàng)建和刪除數(shù)據(jù)庫,要使操作的數(shù)據(jù)庫為用戶管理數(shù)據(jù)庫UserMan。

      1.使用SHUTDOWN命令關(guān)閉數(shù)據(jù)庫實(shí)例

      練習(xí)使用SHUTDOWN命令關(guān)閉數(shù)據(jù)庫實(shí)例,分別按以下方式啟動數(shù)據(jù)庫實(shí)例。

      (1)正常關(guān)閉。等待當(dāng)前所有已連接的用戶斷開與數(shù)據(jù)庫的連接,然后關(guān)閉數(shù)據(jù)庫。正常關(guān)閉的語句如下:

      SHUTDOWN NORMAL

      (2)立即關(guān)閉?;赝嘶顒邮聞?wù)處理并斷開所有已連接的用戶,然后關(guān)閉數(shù)據(jù)庫。立即關(guān)閉的語句如下:

      SHUTDOWN IMMEDIATE

      第1部分 Oracle管理技術(shù)

      (3)事務(wù)處理關(guān)閉。完成事務(wù)處理后斷開所有已連接的用戶,然后關(guān)閉數(shù)據(jù)庫。事務(wù)處理關(guān)閉的語句如下:

      SHUTDOWN TRANSACTIONAL

      (4)中止關(guān)閉。中止數(shù)據(jù)庫實(shí)例,立即關(guān)閉數(shù)據(jù)庫。中止關(guān)閉的語句如下:

      SHUTDOWN ABORT

      每次執(zhí)行SHUTDOWN語句關(guān)閉數(shù)據(jù)庫實(shí)例之前,請執(zhí)行STARTUP命令啟動數(shù)據(jù)庫。2.使用STARTUP命令啟動數(shù)據(jù)庫實(shí)例

      練習(xí)使用STARTUP命令啟動數(shù)據(jù)庫實(shí)例,分別按以下方式啟動數(shù)據(jù)庫實(shí)例。(1)啟動數(shù)據(jù)庫實(shí)例時(shí)不裝載數(shù)據(jù)庫。執(zhí)行此操作的命令如下:

      STARTUP NOMOUNT

      (2)啟動數(shù)據(jù)庫實(shí)例,裝載數(shù)據(jù)庫,但不打開數(shù)據(jù)庫。通常在數(shù)據(jù)庫維護(hù)時(shí)執(zhí)行此操作,對應(yīng)的命令如下:

      STARTUP MOUNT

      (3)啟動數(shù)據(jù)庫實(shí)例,裝載數(shù)據(jù)庫,打開數(shù)據(jù)庫。執(zhí)行此操作的命令如下:

      STARTUP OPEN

      第1部分 Oracle管理技術(shù)

      (4)強(qiáng)制實(shí)例啟動。在遇到特殊異常的情況時(shí),可以強(qiáng)制啟動實(shí)例。強(qiáng)制啟動實(shí)例的語句如下:

      STARTUP FORCE

      該語句將數(shù)據(jù)庫強(qiáng)行啟動到OPEN模式。

      (5)啟動后限制對數(shù)據(jù)庫實(shí)例的訪問。執(zhí)行此操作的命令如下:

      STARTUP RESTRICT

      每次執(zhí)行STARTUP語句啟動數(shù)據(jù)庫實(shí)例之前,請執(zhí)行SHUTDOWN命令關(guān)閉數(shù)據(jù)庫。3.使用ORACLE Enterprise Manager關(guān)閉數(shù)據(jù)庫實(shí)例 按照下面的步驟關(guān)閉數(shù)據(jù)庫實(shí)例。

      (1)在數(shù)據(jù)庫處于打開狀態(tài)時(shí),使用SYS用戶以SYSDBA身份登錄到Enterprise Manager。在主目錄頁面的“一般信息”欄目中,可以看到“關(guān)閉”按鈕。

      (2)單擊“關(guān)閉”按鈕,可以打開“主機(jī)和目標(biāo)數(shù)據(jù)庫身份證明”頁面。用戶需要擁有管理員的權(quán)限才能關(guān)閉數(shù)據(jù)庫實(shí)例,包括主機(jī)操作系統(tǒng)的管理員和當(dāng)前數(shù)據(jù)庫實(shí)例的SYSDBA用戶。

      (3)輸入完成后,單擊“確定”按鈕,打開“確認(rèn)關(guān)閉”頁面。

      (4)單擊“是”按鈕,開始關(guān)閉數(shù)據(jù)庫。關(guān)閉操作完成后,單擊“刷新”按鈕,打開“啟動數(shù)據(jù)庫實(shí)例”頁面。

      4.使用ORACLE Enterprise Manager啟動數(shù)據(jù)庫實(shí)例 按照下面的步驟啟動數(shù)據(jù)庫實(shí)例。

      第1部分 Oracle管理技術(shù)

      (1)使用SYS用戶以SYSDBA身份登錄到Enterprise Manager。

      (2)單擊“啟動”按鈕,打開“主機(jī)和目標(biāo)數(shù)據(jù)庫身份證明”頁面。用戶需要擁有管理員的權(quán)限才能啟動數(shù)據(jù)庫實(shí)例,包括主機(jī)操作系統(tǒng)的管理員和當(dāng)前數(shù)據(jù)庫實(shí)例的SYSDBA用戶。

      (3)輸入完成后,單擊“確定”按鈕,打開“確認(rèn)打開”頁面。(4)單擊“是”按鈕,開始打開數(shù)據(jù)庫。5.使用SQL語句創(chuàng)建數(shù)據(jù)庫

      按照如下條件創(chuàng)建數(shù)據(jù)庫OracleDB(以SYSDBA的用戶身份連接到數(shù)據(jù)庫)。

      (1)設(shè)置SYS用戶的密碼為SYSPWD,設(shè)置SYSTEM用戶的密碼為SYSTEMPWD。(2)使用已有的控制文件。

      (3)指定日志文件組redo01.log,大小為100MB;指定日志文件組redo02.log,大小為100MB。設(shè)置最大的日志文件數(shù)量為10。

      (4)定義日志文件組中最大的日志文件數(shù)量為5。(5)定義最大的數(shù)據(jù)文件數(shù)量為100。(6)定義數(shù)據(jù)庫中最大的實(shí)例數(shù)量為1。(7)定義存儲數(shù)據(jù)的字符集為US7ASCII。

      (8)定義數(shù)據(jù)文件名稱為SYS01.dbf,初始大小為100MB。(9)定義默認(rèn)的表空間為tbs_1。(10)定義臨時(shí)表空間為tempts1。

      (11)定義臨時(shí)文件為temp01.dbf,大小為10MB。CREATE DATABASE語句實(shí)例:

      CREATE DATABASE OracleDB

      USER SYS IDENTIFIED BY bipt123

      USER SYSTEM IDENTIFIED BY bipt123

      CONTROLFILE REUSE MAXLOGFILES 10

      MAXLOGMEMBERS 5

      MAXDATAFILES 100

      MAXINSTANCES 1

      LOGFILE GROUP 1(‘E:redo01.log’)SIZE 100M ,GROUP 2(E:redo02.log’)SIZE 100M ,CHARACTER SET US7ASCII

      DATAFILE ‘E:sys01.dbf’ SIZE 100M REUSE

      EXTENT MANAGEMENT LOCAL

      DEFAULT TABLESPACE tbs_1

      DEFAULT TEMPORARY TABLESPACE tempts1

      TEMPFILE ‘E:temp01.dbf’ SIZE 10M REUSE;6.使用SQL語句刪除數(shù)據(jù)庫

      按照如下步驟刪除數(shù)據(jù)庫UserMan。

      (1)在刪除數(shù)據(jù)庫之前,需要用戶以SYSDBA或SYSOPER身份登錄,代碼如下:

      CONNECT SYS/SYSPWD AS SYSDBA;其中SYSPWD為SYS用戶的密碼,請根據(jù)實(shí)際情況輸入。(2)關(guān)閉數(shù)據(jù)庫,再以MOUNT模式啟動數(shù)據(jù)庫,代碼如下:

      第1部分 Oracle管理技術(shù)

      SHUTDOWN IMMEDIATE;STARTUP MOUNT;(3)刪除數(shù)據(jù)庫,代碼如下:

      DROP DATABASE;

      第1部分 Oracle管理技術(shù)

      實(shí)驗(yàn)2 角色和用戶管理

      目的和要求

      (1)了解Oracle數(shù)據(jù)庫用戶和角色的概念;(2)學(xué)習(xí)使用SQL語句創(chuàng)建Oracle用戶;(3)學(xué)習(xí)使用SQL語句創(chuàng)建Oracle角色;(4)學(xué)習(xí)使用SQL語句指定用戶的角色。

      實(shí)驗(yàn)準(zhǔn)備

      (1)了解Oracle數(shù)據(jù)庫用戶可以分為6種類型,即數(shù)據(jù)庫管理員、安全官員、網(wǎng)絡(luò)管理員、應(yīng)用程序開發(fā)員、應(yīng)用程序管理員和數(shù)據(jù)庫用戶;

      (2)了解角色是對用戶的一種分類管理辦法,不同權(quán)限的用戶可以分為不同的角色;(3)了解使用CREATE ROLE語句創(chuàng)建角色的方法;(4)了解使用DROP ROLE語句刪除角色的方法;(5)了解使用GRANT語句指定用戶角色的方法;(5)了解使用CREATE USER語句創(chuàng)建用戶的方法;(4)了解使用DROP USER語句刪除用戶的方法。

      實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)主要包括以下內(nèi)容。

      (1)練習(xí)使用SQL語句創(chuàng)建數(shù)據(jù)庫角色;

      (2)練習(xí)使用SQL語句為數(shù)據(jù)庫角色授予權(quán)限;(3)練習(xí)使用SQL語句指定用戶角色;(4)練習(xí)使用SQL語句創(chuàng)建數(shù)據(jù)庫用戶。

      1.使用SQL語句創(chuàng)建數(shù)據(jù)庫角色

      參照下面的步驟練習(xí)使用CREATE ROLE語句創(chuàng)建數(shù)據(jù)庫角色。(1)以SYSTEM用戶登錄到SQL*PLUS。

      (2)使用CREATE ROLE語句創(chuàng)建角色UserManRole,密碼為myrolepwd,代碼如下:

      CREATE ROLE UserManRole IDENTIFIED BY myrolepwd;

      2.使用SQL語句為數(shù)據(jù)庫角色授權(quán)

      參照下面的步驟練習(xí)使用GRANT語句為數(shù)據(jù)庫角色授權(quán)。(1)以SYSTEM用戶登錄到SQL*PLUS。

      第1部分 Oracle管理技術(shù)

      (2)使用GRANT語句將角色UserManRole授予CONNECT和RESOURCE權(quán)限,代碼如下:

      --設(shè)置角色權(quán)限

      GRANT CONNECT TO UserManRole;GRANT RESOURCE TO UserManRole;

      3.使用SQL語句創(chuàng)建數(shù)據(jù)庫用戶

      參照下面的步驟練習(xí)使用CREATE USER語句創(chuàng)建數(shù)據(jù)庫用戶。(1)以SYSTEM用戶登錄到SQL*PLUS。

      (2)使用CREATE USER語句創(chuàng)建用戶UserManAdmin,密碼為UserPwd,代碼如下:

      CREATE USER UserManAdmin IDENTIFIED BY UserPwd

      DEFAULT TABLESPACE USERS

      TEMPORARY TABLESPACE TEMP;

      (3)使用GRANT語句對用戶UserManAdmin授予系統(tǒng)權(quán)限UNLIMITED TABLESPACE,代碼如下:

      --設(shè)置系統(tǒng)權(quán)限

      GRANT UNLIMITED TABLESPACE TO UserManAdmin;

      4.使用SQL語句指定用戶角色

      參照下面的步驟將用戶UserMan指定為角色UserManRole。(1)以SYSTEM用戶登錄到SQL*PLUS。

      (2)使用GRANT語句將用戶UserMan指定為角色UserManRole,代碼如下:

      GRANT UserManRole TO UserManAdmin;

      第1部分 Oracle管理技術(shù)

      實(shí)驗(yàn)3 表和視圖管理

      目的和要求

      (1)了解Oracle表和視圖的概念;(2)學(xué)習(xí)使用SQL語句創(chuàng)建表;

      (3)學(xué)習(xí)使用SELECT語句查詢數(shù)據(jù);(4)學(xué)習(xí)使用SQL語句創(chuàng)建視圖。

      實(shí)驗(yàn)準(zhǔn)備

      (1)了解表是數(shù)據(jù)庫中最常用的數(shù)據(jù)存儲單元,它包括所有用戶可以訪問的數(shù)據(jù)。作為關(guān)系型數(shù)據(jù)庫,Oracle表由行和列組成。

      (2)視圖是一個(gè)虛擬的表,它在物理上并不存在。視圖可以把表或其它視圖的數(shù)據(jù)按照一定的條件組合起來,所以也可以把它看成是一個(gè)存儲的查詢。視圖并不包含數(shù)據(jù),它只是從基表中讀取數(shù)據(jù)。

      (3)了解使用CREATE TABLE語句創(chuàng)建表的方法。(4)了解使用SELECT語句查詢數(shù)據(jù)的方法。(5)了解使用SQL語句創(chuàng)建視圖的方法。

      實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)主要包括以下內(nèi)容。

      (1)練習(xí)使用SQL語句創(chuàng)建表;

      (2)練習(xí)使用SQL語句向表中插入數(shù)據(jù);(3)練習(xí)使用SQL語句修改表中的數(shù)據(jù);(4)練習(xí)使用SQL語句刪除表中的數(shù)據(jù);(5)練習(xí)使用SELECT語句查詢數(shù)據(jù);(6)練習(xí)使用SQL語句創(chuàng)建視圖。

      1.使用SQL語句創(chuàng)建表

      使用CREATE TABLE語句創(chuàng)建用戶信息表Users,結(jié)構(gòu)如表1所示。

      表1 表Users的結(jié)構(gòu)

      號 1 2 3 4 字段名稱 UserId UserName UserType UserPwd

      數(shù)據(jù)結(jié)構(gòu) NUMBER VARCHAR2 40 NUMBER 1 VARCHAR2 40

      用戶編號 用戶名

      用戶類型(1 管理員用戶,2 普通用戶)

      參照下面的步驟練習(xí)使用CREATE TABLE語句創(chuàng)建表Users。

      (1)以實(shí)驗(yàn)2中創(chuàng)建的UserManAdmin用戶登錄到SQL*PLUS。(2)使用CREATE TABLE語句創(chuàng)建表Users,代碼如下:

      CREATE TABLE UserManAdmin.Users(UserId

      UserName UserType

      Number Primary Key, Varchar2(40)NOT NULL, Number(1),第1部分 Oracle管理技術(shù)

      UserPwd);Varchar2(40)使用CREATE TABLE語句創(chuàng)建用戶登錄信息表LoginInfo,結(jié)構(gòu)如表2所示。

      表2 表LoginInfo的結(jié)構(gòu)

      號 1 2

      字段名稱 UserId LoginTime

      數(shù)據(jù)結(jié)構(gòu) NUMBER CHAR(20)

      明 用戶編號 登錄時(shí)間

      參照下面的步驟練習(xí)使用CREATE TABLE語句創(chuàng)建表LoginInfo。(1)以實(shí)驗(yàn)2中創(chuàng)建的UserManAdmin用戶登錄到SQL*PLUS。(2)使用CREATE TABLE語句創(chuàng)建表LoginInfo,代碼如下:

      CREATE TABLE UserManAdmin.LoginInfo(UserId

      LoginTime);Number, CHAR(20)NOT NULL 2.使用SQL語句向表中插入數(shù)據(jù)

      使用INSERT語句向表Users中插入用戶數(shù)據(jù),內(nèi)容如表3所示。

      表3 表Users中的數(shù)據(jù)

      UserId 1 2 3 4

      UserName Admin User Zhangsan Lisi

      UserType 2 2 2

      UserPwd AdminPwd UserPwd ZhangsanPwd LisiPwd 參照下面的步驟練習(xí)使用INSERT語句向表Users中插入數(shù)據(jù)。(1)以實(shí)驗(yàn)2中創(chuàng)建的UserManAdmin用戶登錄到SQL*PLUS。(2)使用INSERT語句向表Users中插入數(shù)據(jù),代碼如下:

      INSERT INTO UserManAdmin.Users VALUES(1, ‘Admin’, 1, ‘AdminPwd’);INSERT INTO UserManAdmin.Users VALUES(2, ‘User’, 2, ‘UserPwd’);INSERT INTO UserManAdmin.Users VALUES(3, ‘Zhangsan’, 2, ‘ZhangsanPwd’);INSERT INTO UserManAdmin.Users VALUES(4, ‘Lisi’, 2, ‘LisiPwd’);COMMIT;使用INSERT語句向表LoginInfo中插入數(shù)據(jù)。內(nèi)容如表4所示。參照下面的步驟練習(xí)使用INSERT語句向表LoginInfo中插入數(shù)據(jù)。(1)以實(shí)驗(yàn)2中創(chuàng)建的UserManAdmin用戶登錄到SQL*PLUS。(2)使用INSERT語句向表LoginInfo中插入數(shù)據(jù),代碼如下:

      INSERT INTO UserManAdmin.LoginInfo VALUES(1, ‘2012-5-15 10:33:02’);INSERT INTO UserManAdmin.LoginInfo VALUES(1, ‘2012-5-16 08:34:13’);INSERT INTO UserManAdmin.LoginInfo VALUES(1, ‘2012-5-17 09:13:11’);INSERT INTO UserManAdmin.LoginInfo VALUES(2, ‘2012-5-15 07:35:02’);INSERT INTO UserManAdmin.LoginInfo VALUES(2, ‘2012-5-16 08:11:54’);INSERT INTO UserManAdmin.LoginInfo VALUES(2, ‘2012-5-17 09:13:11’);INSERT INTO UserManAdmin.LoginInfo VALUES(3, ‘2012-5-15 08:34:02’);INSERT INTO UserManAdmin.LoginInfo VALUES(3, ‘2012-5-16 09:34:13’);

      第1部分 Oracle管理技術(shù)

      INSERT INTO UserManAdmin.LoginInfo VALUES(3, ‘2012-5-17 10:13:09’);INSERT INTO UserManAdmin.LoginInfo VALUES(4, ‘2012-5-15 11:34:02’);INSERT INTO UserManAdmin.LoginInfo VALUES(4, ‘2012-5-16 13:34:13’);INSERT INTO UserManAdmin.LoginInfo VALUES(4, ‘2012-5-17 15:13:12’);COMMIT;

      表4 表LoginInfo中的數(shù)據(jù)

      UserId 1 1 1 2 2 2 3 3 3 4 4 4

      LoginTime 2012-5-15 10:33:02 2012-5-16 08:34:13 2012-5-17 09:13:11 2012-5-15 07:35:02 2012-5-16 08:11:54 2012-5-17 09:13:11 2012-5-15 08:34:02 2012-5-16 09:34:13 2012-5-17 10:13:09 2012-5-15 11:34:02 2012-5-16 13:34:13 2012-5-17 15:13:12 3.使用SQL語句修改表中的數(shù)據(jù)

      使用UPDATE語句可以修改表Users中的數(shù)據(jù)。參照下面的步驟練習(xí)將表Users中Admin用戶的密碼修改為AdminPassword。

      (1)以SYSTEM用戶登錄到SQL*PLUS。

      (2)使用UPDATE語句將表Users中Admin用戶的密碼修改為AdminPassword,代碼如下:

      UPDATE UserManAdmin.Users SET UserPwd=‘AdminPassword’ WHERE UserName=‘Admin’

      (3)使用SELECT語句查看用戶Admin的密碼,代碼如下:

      SELECT UserPwd FROM UserManAdmin.Users WHERE UserName=‘Admin’

      修改表

      ALTER TABLE USERMANADMIN.LOGININFO MODIFY(LOGINTIME DATE)4.使用SQL語句刪除表中的數(shù)據(jù)

      使用DELETE語句可以刪除表Users中的數(shù)據(jù)。參照下面的步驟練習(xí)將表Users中Zhansan用戶的記錄刪除。

      (1)以SYSTEM用戶登錄到SQL*PLUS。

      (2)使用DELETE語句將表Users中Zhangsan用戶的記錄刪除,代碼如下:

      DELETE FROM UserManAdmin.Users WHERE UserName=‘Zhangsan’

      (3)使用SELECT語句查看表Users中的數(shù)據(jù),確認(rèn)用戶Zhangsan的記錄是否被刪除,代碼如下:

      SELECT * FROM UserManAdmin.Users 5.使用SELECT語句查詢數(shù)據(jù)

      使用SELECT語句查詢數(shù)據(jù)庫中的用戶數(shù)據(jù),分別按以下方式查詢數(shù)據(jù)庫。

      第1部分 Oracle管理技術(shù)

      (1)查詢表Users中的所有數(shù)據(jù)。

      以SYSTEM用戶登錄到SQL*PLUS,然后執(zhí)行如下代碼:

      SELECT * FROM UserManAdmin.Users *代表UserManAdmin.Users中的所有字段。(2)在返回結(jié)果中使用自定義標(biāo)題。

      以SYSTEM用戶登錄到SQL*PLUS,然后執(zhí)行如下代碼:

      SELECT UserName AS 用戶名, UserPwd AS 密碼 FROM UserManAdmin.Users(3)設(shè)置查詢條件。

      查詢所有普通用戶的信息。以SYSTEM用戶登錄到SQL*PLUS,然后執(zhí)行如下代碼:

      SELECT * FROM UserManAdmin.Users WHERE UserType=2 查詢用戶Admin的密碼信息。以SYSTEM用戶登錄到SQL*PLUS,然后執(zhí)行如下代碼:

      SELECT UserPwd FROM UserManAdmin.Users WHERE UserName=‘Admin’

      (4)對查詢結(jié)果進(jìn)行排序。

      查詢所有普通用戶的信息,并按用戶名的降序排列結(jié)果集。以SYSTEM用戶登錄到SQL*PLUS,然后執(zhí)行如下代碼:

      SELECT * FROM UserManAdmin.Users ORDER BY UserName DESC(5)對記錄進(jìn)行統(tǒng)計(jì)。

      統(tǒng)計(jì)表Users中共有多少個(gè)用戶記錄。以SYSTEM用戶登錄到SQL*PLUS,然后執(zhí)行如下代碼:

      SELECT COUNT(*)FROM UserManAdmin.Users(6)實(shí)現(xiàn)連接查詢。

      查看每個(gè)用戶的登錄記錄。以SYSTEM用戶登錄到SQL*PLUS,然后執(zhí)行如下代碼:

      SELECT u.UserName, 1.LoginTime FROM Users u INNER JOIN LoginInfo 1 ON u.UserId=1.UserID 在上面的SELECT語句中涉及兩個(gè)表:表Users和表LoginInfo。在FROM子句中,為每個(gè)表指定一個(gè)別名,表Users的別名為u,表LoginInfo的別名為1。

      6.使用SQL語句創(chuàng)建視圖

      使用CREATE VIEW語句創(chuàng)建用戶登錄信息表UserLogin,代碼如下:

      CREATE VIEW UserLogin AS SELECT u.UserName,l.LoginTime

      FROM

      UserManAdmin.Users

      u

      INNER

      JOIN UserManAdmin.LoginInfo l ON u.UserId=l.UserID;

      SELECT * FROM UserLogin;

      第1部分 Oracle管理技術(shù)

      實(shí)驗(yàn)4 索引和序列管理

      目的和要求

      (1)了解索引的概念和作用;(2)了解序列的概念和作用;

      (3)學(xué)習(xí)使用SQL語句創(chuàng)建索引;(4)學(xué)習(xí)使用SQL語句創(chuàng)建序列。

      實(shí)驗(yàn)準(zhǔn)備

      (1)了解索引是對數(shù)據(jù)庫表中一個(gè)或多個(gè)列的值進(jìn)行排序的結(jié)構(gòu)??梢岳盟饕焖僭L問數(shù)據(jù)庫表中的特定信息。

      (2)了解序列號是一個(gè)Oracle整數(shù),最多可有38個(gè)數(shù)字。序列的作用是自動生成整型數(shù)值,作為表中標(biāo)識字段的值。有許多表在創(chuàng)建時(shí)定義了一個(gè)標(biāo)識字段,此字段的值需要由系統(tǒng)自動生成,每當(dāng)插入一條新記錄時(shí),此字段的值自動加1。在Oracle中,這個(gè)功能由序列來實(shí)現(xiàn)。

      (3)了解使用CREATE INDEX語句創(chuàng)建索引的方法。

      (4)了解使用CREATE SEQUENCE語句創(chuàng)建序列的方法。

      實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)主要包括以下內(nèi)容。

      (1)練習(xí)使用SQL語句創(chuàng)建索引;(2)練習(xí)使用SQL語句創(chuàng)建序列;

      1.使用SQL語句創(chuàng)建索引

      使用CREATE INDEX語句在Users表的UserName字段上創(chuàng)建索引。代碼如下:

      CREATE INDEX index_username ON UserManAdmin.Users(UserName)TABLESPACE Users;

      2.在創(chuàng)建表的同時(shí)創(chuàng)建索引

      在使用CREATE TABLE語句創(chuàng)建表的同時(shí),可以為指定字段創(chuàng)建索引。創(chuàng)建表Employees,在字段EmpName上創(chuàng)建索引。表Employees的結(jié)構(gòu)如表5所示。

      表5 表Employees的結(jié)構(gòu)

      號 1 2 3 4

      字段名稱 EmpId EmpName Sex UserId

      數(shù)據(jù)結(jié)構(gòu) NUMBER VARCHAR2(50)CHAR(2)NUMBER

      明 編號 姓名 性別 用戶編號

      代碼如下:

      CREATE TABLE UserManAdmin.Employees(EmpId

      EmpName Sex

      Number, VARCHAR2(50)UNIQUE, CHAR(2),第1部分 Oracle管理技術(shù)

      UserId);Number 3.使用SQL語句創(chuàng)建序列

      使用CREATE SEQUENCE語句創(chuàng)建序列。序列的最小值為1,并且沒有最大值限制。序列的初始值為1,序列間隔為1。代碼如下:

      CREATE SEQUENCE EMP_S MINVALUE 1 NOMAXVALUE START WITH 1 INCREMENT BY 1 NOCYCLE CACHE 20;2.在插入數(shù)據(jù)時(shí)使用序列

      在使用INSERT語句向表Employees中插入數(shù)據(jù)時(shí),可以使用序列EMP_S生成字段EmpId的值,代碼如下:

      INSERT INTO UserManAdmin.Employees(EmpId, EmpName)VALUES(EMP_S.NEXTVAL, ‘Employee1’);INSERT INTO UserManAdmin.Employees(EmpId, EmpName)VALUES(EMP_S.NEXTVAL, ‘Employee2’);INSERT INTO UserManAdmin.Employees(EmpId, EmpName)VALUES(EMP_S.NEXTVAL, ‘Employee3’);COMMIT;SELECT * FROM UserManAdmin.Employees

      第1部分 Oracle管理技術(shù)

      實(shí)驗(yàn)5 PL/SQL編程

      目的和要求

      (1)了解PL/SQL語言的結(jié)構(gòu);

      (2)了解PL/SQL變量和常量的聲明和使用方法;(3)學(xué)習(xí)條件語句的使用方法;(4)學(xué)習(xí)分支語句的使用方法;(5)學(xué)習(xí)循環(huán)語句的使用方法;(6)學(xué)習(xí)使用Oracle系統(tǒng)函數(shù)。

      實(shí)驗(yàn)準(zhǔn)備

      首先要了解PL/SQL語言是結(jié)構(gòu)化程序設(shè)計(jì)語言。塊(Block)是PL/SQL程序中最基本的結(jié)構(gòu),所有PL/SQL程序都是由塊組成的。PL/SQL的塊由變量聲明、程序代碼和異常處理代碼3部分組成。在PL/SQL中,常量和變量在使用前必須聲明,可以使用DECLARE對變量進(jìn)行聲明。

      實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)主要包括以下內(nèi)容。

      (1)練習(xí)條件語句的使用方法;(2)練習(xí)分支語句的使用方法;(3)練習(xí)循環(huán)語句的使用方法;(4)練習(xí)使用Oracle系統(tǒng)函數(shù)。

      1.使用條件語句

      參照下面的步驟練習(xí)使用條件語句。

      (1)以SYSTEM用戶登錄到SQL*PLUS。(2)執(zhí)行如下程序,觀察結(jié)果。

      SET ServerOutput ON;DECLARE

      Num INTEGER :=-11;BEGIN

      IF Num < 0 THEN

      dbms_output.put_line(‘負(fù)數(shù)’);

      ELSIF Num > 0 THEN

      dbms_output.put_line(‘正數(shù)’);

      ELSE

      dbms_output.put_line(‘0’);

      END IF;END;

      第1部分 Oracle管理技術(shù)

      2.使用分支語句

      參照下面的步驟練習(xí)使用分支語句。

      (1)以SYSTEM用戶登錄到SQL*PLUS。(2)執(zhí)行如下程序,觀察結(jié)果。

      SET ServerOutput ON;DECLARE

      varDAY INTEGER := 3;

      Result VARCHAR(20);BEGIN

      Result := CASE varDAY

      WHEN 1 THEN ‘星期一’

      WHEN 2 THEN ‘星期二’

      WHEN 3 THEN ‘星期三’

      WHEN 4 THEN ‘星期四’

      WHEN 5 THEN ‘星期五’

      WHEN 6 THEN ‘星期六’

      WHEN 7 THEN ‘星期日’

      ELSE ‘?dāng)?shù)據(jù)越界’

      END;

      dbms_output.put_line(Result);END;

      第1部分 Oracle管理技術(shù)

      3.使用循環(huán)語句

      LOOP…EXIT…END語句:此語句的功能是重復(fù)執(zhí)行循環(huán)體中的程序塊,直到執(zhí)行EXIT語句,退出循環(huán)。

      LOOP…EXIT WHEN…END:此語句的功能是重復(fù)執(zhí)行循環(huán)體中的程序塊,直到滿足EXIT WHEN后面的判斷語句時(shí),退出循環(huán)。

      WHILE…LOOP…END LOOP語句:此語句的功能是當(dāng)WHILE后面的條件語句成立時(shí),重復(fù)執(zhí)行循環(huán)體中的程序塊。

      參照下面的步驟練習(xí)使用循環(huán)語句。

      (1)以SYSTEM用戶登錄到SQL*PLUS。(2)執(zhí)行如下程序,觀察結(jié)果。

      程序一:

      SET ServerOutput ON;DECLARE

      v_Num INTEGER := 1;

      v_Sum INTEGER := 0;BEGIN

      LOOP

      v_Sum := v_Sum + v_Num;

      dbms_output.put_line(v_Num);

      IF v_Num = 3 THEN

      EXIT;

      END IF;

      dbms_output.put_line(‘+’);

      v_Num := v_Num + 1;

      END LOOP;

      dbms_output.put_line(‘=’);

      dbms_output.put_line(v_Sum);END;

      程序二:

      SET ServerOutput ON;DECLARE

      v_Num INTEGER := 1;

      v_Sum INTEGER := 0;BEGIN

      LOOP

      v_Sum := v_Sum + v_Num;

      第1部分 Oracle管理技術(shù)

      dbms_output.put_line(v_Num);

      EXIT WHEN v_Num = 3;

      dbms_output.put_line(‘+’);

      v_Num := v_Num + 1;

      END LOOP;

      dbms_output.put_line(‘=’);

      dbms_output.put_line(v_Sum);END;

      程序三:

      SET ServerOutput ON;DECLARE

      v_Num INTEGER := 1;

      v_Sum INTEGER := 0;BEGIN

      WHILE v_Num <=3

      LOOP

      v_Sum := v_Sum + v_Num;

      dbms_output.put_line(v_Num);

      IF v_Num < 3 THEN

      dbms_output.put_line(‘+’);

      END IF;

      v_Num := v_Num + 1;

      END LOOP;

      dbms_output.put_line(‘=’);

      dbms_output.put_line(v_Sum);END;

      第1部分 Oracle管理技術(shù)

      4.使用系統(tǒng)函數(shù)(1)數(shù)值型函數(shù)

      ·ABS:返回給定數(shù)字表達(dá)式的絕對值。

      ·CEIL:返回大于或等于所給數(shù)字表達(dá)式的最小整數(shù)?!LOOR:返回小于或等于所給數(shù)字表達(dá)式的最大整數(shù)?!OWER:返回給定表達(dá)式指定次方的值。

      ·ROUND:返回?cái)?shù)字表達(dá)式并四舍五入為指定的長度或精度。(2)字符型函數(shù)

      ·ASCII:返回字符表達(dá)式最左端字符的ASCII代碼值。·LENGTH:返回給定字符串表達(dá)式的字符(而不是字節(jié))個(gè)數(shù),其中不包含尾隨空格?!PPER:返回將小寫字符數(shù)據(jù)轉(zhuǎn)換為大寫的字符表達(dá)式。(3)日期型函數(shù)

      ·SYSDATE:返回當(dāng)前日期和時(shí)間?!O_CHAR:轉(zhuǎn)換日期為字符串。

      ·LAST_DAY:返回指定日期所在月份的最后一天的日期。這個(gè)函數(shù)可以被用來確定當(dāng)前月中還剩下多少天。

      ·MONTHS_BETWEEN:返回兩個(gè)日期之間月的數(shù)目。(4)統(tǒng)計(jì)函數(shù)

      ·COUNT:返回組中項(xiàng)目的數(shù)量?!AX:返回表達(dá)式的最大值?!IN:返回表達(dá)式的最小值。

      參照下面的步驟練習(xí)使用系統(tǒng)函數(shù)。

      (1)以SYSTEM用戶登錄到SQL*PLUS。(2)執(zhí)行如下程序,觀察結(jié)果。

      程序一:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(ABS(-4));END;

      程序二:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(CEIL(116.24));

      dbms_output.put_line(CEIL(-112.75));

      dbms_output.put_line(CEIL(0));END;

      第1部分 Oracle管理技術(shù)

      程序三:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(FLOOR(116.24));

      dbms_output.put_line(FLOOR(-112.75));

      dbms_output.put_line(FLOOR(0));END;

      程序四:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(POWER(15, 4));END;

      程序五:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(ROUND(123.456, 2));

      dbms_output.put_line(ROUND(123.456, 1));

      dbms_output.put_line(ROUND(123.456, 0));

      dbms_output.put_line(ROUND(123.456,-1));

      dbms_output.put_line(ROUND(123.456,-2));

      dbms_output.put_line(ROUND(123.456,-3));END;

      程序六:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(ASCII(‘ABC’));END;

      第1部分 Oracle管理技術(shù)

      程序七:

      SELECT UserName, LENGTH(UserName)FROM UserManAdmin.Users WHERE UserType = 1;程序八:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(UPPER(‘a(chǎn)bc’));END;

      程序九:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(SYSDATE);END;

      程序十:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(TO_CHAR(SYSDATE));END;

      程序十一:

      SET ServerOutput ON;BEGIN

      dbms_output.put_line(LAST_DAY(SYSDATE));END;

      第1部分 Oracle管理技術(shù)

      程序十二:

      SET ServerOutput ON;DECLARE

      date1 VARCHAR(20):= ‘2010-05-17’;

      date2 VARCHAR(20):= ‘2010-10-17’;BEGIN

      dbms_output.put_line(END;

      MONTHS_BETWEEN(TO_DATE(date2,‘yyyy-mm-dd’), TO_DATE(date1, ‘yyyy-mm-dd’)));

      程序十三:

      SELECT COUNT(UserName)FROM UserManAdmin.Users;

      程序十四:

      SELECT MAX(UserId)FROM UserManAdmin.Users;

      程序十五:

      SELECT MIN(UserId)FROM UserManAdmin.Users;

      第1部分 Oracle管理技術(shù)

      實(shí)驗(yàn)6 使用游標(biāo)、存儲過程和觸發(fā)器

      目的和要求

      (1)了解游標(biāo)的概念和工作原理;(2)了解存儲過程的分類和使用方法;(3)了解觸發(fā)器的概念;

      (4)學(xué)習(xí)編寫和執(zhí)行自定義過程;(5)學(xué)習(xí)編寫和執(zhí)行自定義函數(shù);(6)學(xué)習(xí)創(chuàng)建和使用觸發(fā)器。

      實(shí)驗(yàn)準(zhǔn)備

      首先要了解游標(biāo)是映射在結(jié)果集中一行數(shù)據(jù)上的位置實(shí)體,有了游標(biāo),用戶就可以訪問結(jié)果集中的任意一行數(shù)據(jù)了。將游標(biāo)放置到某行后,即可對該行數(shù)據(jù)進(jìn)行操作,最常見的操作是提取當(dāng)前行數(shù)據(jù)。

      了解PL/SQL包括3種存儲過程,即過程、函數(shù)和程序包。

      了解觸發(fā)器是一種特殊的存儲過程,當(dāng)指定表中的數(shù)據(jù)發(fā)生變化時(shí)自動運(yùn)行。

      實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)主要包括以下內(nèi)容。

      (1)練習(xí)創(chuàng)建和使用游標(biāo)的方法;

      (2)練習(xí)編寫和執(zhí)行自定義過程的方法;(3)練習(xí)編寫和執(zhí)行自定義函數(shù)的方法;(4)練習(xí)創(chuàng)建和使用觸發(fā)器的方法。

      1.創(chuàng)建和使用游標(biāo)

      創(chuàng)建游標(biāo)MyCursor,從表LoginInfo中讀取指定用戶的登錄信息,操作步驟如下:(1)以UserManAdmin用戶登錄到SQL*PLUS。(2)執(zhí)行如下程序:

      /*打開顯示模式*/ SET ServerOutput ON;DECLARE

      CURSOR Mycursor(varUserName VARCHAR2)IS

      SELECT u.UserName,l.LoginTime

      FROM

      UserManAdmin.Users

      u, UserManAdmin.LoginInfo l

      WHERE u.UserId =l.UserId;BEGIN

      FOR var_LoginRecord IN MyCursor(‘Admin’)LOOP

      dbms_output.put_line(‘用戶名:’ || var_LoginRecord.UserName || ‘, 登錄時(shí)間:’ || var_LoginRecord.LoginTime);

      END LOOP;END;

      第1部分 Oracle管理技術(shù)

      2.編寫和執(zhí)行自定義過程

      參照下面的步驟練習(xí)編寫和執(zhí)行自定義過程:(1)以UserManAdmin用戶登錄到SQL*PLUS。(2)執(zhí)行如下程序,觀察結(jié)果。

      /*創(chuàng)建示例過程ResetPwd,此過程的功能是將表User中指定用戶的密碼重置為111111*/ CREATE OR REPLACE PROCEDURE UserManAdmin.ResetPwd(u_UserId IN NUMBER)AS BEGIN UPDATE UserManAdmin.Users SET UserPwd = ‘111111’ WHERE UserId = u_UserId;END;

      /*使用EXEXUTE命令可以調(diào)用過程。如,要將編號為1(用戶Admin)的用戶密碼重置*/ EXECUTE UserManAdmin.ResetPwd(1);SELECT UserName, UserPwd FROM Users;

      第1部分 Oracle管理技術(shù)

      /*使用DROP PROCEDURE命令可以刪除過程*/ DROP PROCEDURE UserManAdmin.ResetPwd;

      3.編寫和執(zhí)行自定義函數(shù)

      參照下面的步驟練習(xí)編寫和執(zhí)行自定義函數(shù)GetLastLogin,獲取指定用戶最后一次登錄的時(shí)間。

      (1)以SYSTEM用戶登錄到SQL*PLUS。(2)執(zhí)行如下程序:

      CREATE OR REPLACE FUNCTION GetLastLogin(n_name IN UserManAdmin.Users.UserName%Type)RETURN UserManAdmin.LoginInfo.LoginTime%Type AS outTime UserManAdmin.LoginInfo.LoginTime%Type;BEGIN

      SELECT MAX(l.LoginTime)INTO outTime FROM UserManAdmin.Users u join UserManAdmin.LoginInfo l on u.UserId = l.UserId

      WHERE u.UserName = ‘’|| n_name ||’’

      ORDER BY l.LoginTime DESC;

      RETURN outTime;END;

      4.創(chuàng)建和使用觸發(fā)器

      參照下面的步驟創(chuàng)建一個(gè)觸發(fā)器MyTrigger,它的作用是當(dāng)表Users中的記錄被刪除后,自動刪除表LoginInfo中對應(yīng)的用戶登錄記錄,從而保證數(shù)據(jù)的完整性。

      (1)以SYSTEM用戶登錄到SQL*PLUS。(2)執(zhí)行如下程序,觀察結(jié)果。

      CREATE OR REPLACE TRIGGER UserManAdmin.MyTrigger AFTER DELETE ON UserManAdmin.Users FOR EACH ROW BEGIN

      DELETE FROM UserManAdmin.LoginInfo WHERE UserId = :old.UserId;END;

      第1部分 Oracle管理技術(shù)

      (3)執(zhí)行下面的語句,觀察刪除用戶Users后,在表LoginInfo中是否還存在其登錄的記錄。

      DELETE FROM UserManAdmin.Users WHERE UserName =’User’;

      SELECT * FROM UserManAdmin.LoginInfo

      第1部分 Oracle管理技術(shù)

      實(shí)驗(yàn)7 表空間管理

      目的和要求

      (1)了解表空間的概念和工作原理;

      (2)學(xué)習(xí)創(chuàng)建、修改、查詢和刪除用戶表空間;

      (3)學(xué)習(xí)創(chuàng)建、修改、查詢、切換和刪除撤銷表空間。

      實(shí)驗(yàn)準(zhǔn)備

      首先要了解表空間是Oracle數(shù)據(jù)庫最高層次的邏輯存儲結(jié)構(gòu),其中保存著由段、區(qū)和塊等邏輯存儲結(jié)構(gòu)描述的各種模式對象。

      Oracle表空間分為系統(tǒng)表空間、臨時(shí)表空間、撤銷表空間和用戶表空間4種類型。用戶表空間主要用來保存用戶數(shù)據(jù),其包含的數(shù)據(jù)文件稱為用戶數(shù)據(jù)文件,是DBA管理的主要表空間。

      保存撤銷記錄的存儲空間是撤銷表空間。利用撤銷表空間可以實(shí)現(xiàn)撤銷事務(wù)、數(shù)據(jù)庫恢復(fù)和數(shù)據(jù)的讀一致性等功能。

      實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)主要包括以下內(nèi)容。

      (1)練習(xí)創(chuàng)建和使用用戶表空間的方法;(2)練習(xí)創(chuàng)建和使用撤銷表空間的方法。

      1.創(chuàng)建本地管理方式的用戶表空間

      為Oracle數(shù)據(jù)庫新建一個(gè)用戶表空間,該表空間中包括2個(gè)數(shù)據(jù)文件,區(qū)的分配管理方式為AUTOALLOCATE或UNIFORM,段的存儲管理方式為MANUAL或AUTO。操作步驟如下:

      (1)在SQL*Plus中執(zhí)行CREATE TABLESPACE語句創(chuàng)建新的用戶表空間,并通過查詢V$TABLESPACE視圖查看新建用戶表空間情況。

      Create tablespace newspace Datafile ‘D:oracleoradatanew01.dbf’ size 10m

      第1部分 Oracle管理技術(shù)

      (2)通過OEM控制臺創(chuàng)建新的臨時(shí)表空間,并查看新建用戶表空間情況。

      2.創(chuàng)建本地管理方式的臨時(shí)表空間

      為Oracle數(shù)據(jù)庫新建一個(gè)臨時(shí)表空間,該表空間中包括1個(gè)數(shù)據(jù)文件,并設(shè)置該表空間為默認(rèn)臨時(shí)表空間。操作步驟如下:

      (1)在SQL*Plus中執(zhí)行CREATE TEMPORARY TABLESPACE語句創(chuàng)建新的臨時(shí)表空間,設(shè)置該表空間為默認(rèn)臨時(shí)表空間,并通過查詢V$TABLESPACE視圖查看新建臨時(shí)表空間情況。

      CREATE TEMPORARY TABLESPACE newtemp tempfile 'D:oracleoradatanewtemp01.dbf' size 10m;

      select * from V$tablespace;

      (2)通過OEM控制臺創(chuàng)建新的臨時(shí)表空間,設(shè)置該表空間為默認(rèn)臨時(shí)表空間,并查看新建臨時(shí)表空間情況。

      3.改變表空間的可用性

      將新建的用戶表空間設(shè)置為脫機(jī)狀態(tài),之后再將其改為聯(lián)機(jī)狀態(tài)。操作步驟如下:(1)在SQL*Plus中執(zhí)行ALTER TABLESPACE語句設(shè)置表空間為脫機(jī)狀態(tài),并通過查詢DBA_TABLESPACES視圖查看表空間的狀態(tài),之后再執(zhí)行ALTER TABLESPACE語句設(shè)置表空間為聯(lián)機(jī)狀態(tài)。

      Alter tablespace newspace Add datafile ‘D:oracleoradatanew02.dbf’ size 10m

      第1部分 Oracle管理技術(shù)

      (2)通過OEM控制臺設(shè)置表空間為脫機(jī)狀態(tài)或聯(lián)機(jī)狀態(tài),并查看修改之后的表空間狀態(tài)。

      4.刪除表空間

      刪除無用的表空間及其在磁盤上的數(shù)據(jù)文件。操作步驟如下:

      (1)在SQL*Plus中執(zhí)行DROP TABLESPACE語句刪除表空間及其在磁盤上的數(shù)據(jù)文件。

      Drop tablespace newspace;

      (2)通過OEM控制臺刪除表空間及其在磁盤上的數(shù)據(jù)文件。

      5.查詢表空間的各種信息

      查詢表空間的各種信息。操作步驟如下:(1)在SQL*Plus中查詢V$TABLESPACE、DBA_TABLESPACES、DBA_SEGMENTS、DBA_EXTENTS、DBA_FREE_SPACE、V_$DATAFILE和V$TEMPFILE動態(tài)性能視圖獲得表空間的信息。

      (2)在OEM控制臺中查詢表空間的信息。

      6.創(chuàng)建撤銷表空間

      在數(shù)據(jù)庫建立后創(chuàng)建一個(gè)撤銷表空間,并設(shè)置該表空間為默認(rèn)撤銷表空間。操作步驟如

      第1部分 Oracle管理技術(shù)

      下:

      (1)在SQL*Plus中執(zhí)行CREATE UNDO TABLESPACE語句創(chuàng)建一個(gè)撤銷表空間,并執(zhí)行ALTER SYSTEM語句修改初始化參數(shù)UNDO_TABLESPACE,設(shè)置該撤銷表空間為默認(rèn)撤銷表空間。

      CREATE UNDO TABLESPACE undotb datafile 'D:oracleoradataundotb01.dbf' size 2m reuse;

      (2)通過OEM控制臺向某一撤銷表空間中添加新的數(shù)據(jù)文件,并查看新的數(shù)據(jù)文件情況。

      7.查詢撤銷表空間的各種信息

      查詢表空間的各種信息。操作步驟如下:

      (1)在SQL*Plus中查詢V$UNDOSTAT、V$ROLLSTAT、V$TRANSACTION、DBA_UNDO_EXTENTS動態(tài)性能視圖獲得撤銷表空間的信息。

      select * from V$tablespace;

      (2)利用V$UNDOSTAT動態(tài)性能視圖計(jì)算撤銷表空間所需要的存儲空間。

      第1部分 Oracle管理技術(shù)

      實(shí)驗(yàn)8 文件管理

      目的和要求

      (1)了解初始化參數(shù)文件、控制文件、重做日志文件和數(shù)據(jù)文件的概念;(2)學(xué)習(xí)創(chuàng)建和使用初始化參數(shù)文件;

      (3)學(xué)習(xí)創(chuàng)建、備份、查詢和刪除控制文件;(4)學(xué)習(xí)創(chuàng)建和使用重做日志文件;

      (5)學(xué)習(xí)添加、移動、查詢和刪除數(shù)據(jù)文件。

      實(shí)驗(yàn)準(zhǔn)備

      首先要了解初始化參數(shù)文件是Oracle實(shí)例運(yùn)行所需的參數(shù)配置文件,Oracle數(shù)據(jù)庫的物理結(jié)構(gòu)、實(shí)例中的內(nèi)存結(jié)構(gòu),以及啟動后臺進(jìn)程的種類和數(shù)量等參數(shù),都需要在初始化參數(shù)文件中設(shè)置,是數(shù)據(jù)庫運(yùn)行和性能調(diào)整的重要文件。初始化參數(shù)文件分為兩類:PFILE和SPFILE。PFILE是文本形式的初始化參數(shù)文件,可以利用任何文本編輯器對它進(jìn)行查看或編輯。SPFILE的作用同PFILE一樣,但是該文件是二進(jìn)制的,無法用文本編輯器查看或修改。

      控制文件是一個(gè)非常小的二進(jìn)制文件,其中存放有Oracle數(shù)據(jù)庫物理結(jié)構(gòu)(數(shù)據(jù)文件和重做日志文件等)的信息,是Oracle啟動和運(yùn)行必備的文件。

      重做日志文件中保存著事物對數(shù)據(jù)庫進(jìn)行的修改的重做項(xiàng),是數(shù)據(jù)庫進(jìn)行恢復(fù)的必要部分。重做日志文件分為聯(lián)機(jī)重做日志文件和歸檔重做日志文件。

      數(shù)據(jù)文件是Oracle主要的物理存儲結(jié)構(gòu)之一。一個(gè)表空間可以有多個(gè)數(shù)據(jù)文件,一個(gè)數(shù)據(jù)文件只屬于一個(gè)表空間。數(shù)據(jù)文件可分成系統(tǒng)數(shù)據(jù)文件、撤銷數(shù)據(jù)文件、臨時(shí)數(shù)據(jù)文件和用戶數(shù)據(jù)文件。

      實(shí)驗(yàn)內(nèi)容

      本實(shí)驗(yàn)主要包括以下內(nèi)容。

      (1)練習(xí)創(chuàng)建和使用初始化參數(shù)文件;(2)練習(xí)創(chuàng)建和使用控制文件;(3)練習(xí)創(chuàng)建和使用重做日志文件;(4)練習(xí)添加和使用數(shù)據(jù)文件。

      1.創(chuàng)建初始化參數(shù)文件

      創(chuàng)建PFILE和SPFILE文件。操作步驟如下:

      (1)找到已有的PFILE文件,使用COPY或者在Windows資源管理器中使用復(fù)制/粘貼功能,創(chuàng)建一個(gè)新的PFILE文件。

      (2)使用CREATE PFILE FROM SPFILE命令創(chuàng)建一個(gè)新的PFILE文件。

      第1部分 Oracle管理技術(shù)

      (3)利用OEM創(chuàng)建一個(gè)新的PFILE文件。

      (4)使用CREATE SPFILE FROM PFILE命令創(chuàng)建一個(gè)新的SPFILE文件。create spfile='D:oracleora92databaseininew01.ora' pfile='D:oracleadminBIPT921pfile init.ora.23201322748';

      from

      (5)利用OEM創(chuàng)建一個(gè)新的SPFILE文件。

      2.修改初始化參數(shù)

      修改SPFILE文件中的初始化參數(shù)。操作步驟如下:

      (1)在SQL*Plus中使用動態(tài)性能視圖V$SYSTEM_PARAMETER查看初始化參數(shù)值和屬性。

      (2)使用ALTER SYSTEM SET 參數(shù)名=參數(shù)值 SCOPE=SPFILE | MEMORY | BOTH

      第1部分 Oracle管理技術(shù)

      命令修改其中的動態(tài)或靜態(tài)的初始化參數(shù)。

      (3)再使用動態(tài)性能視圖V$SYSTEM_PARAMETER或在OEM中查看初始化參數(shù)值是否被修改。

      (4)或者在OEM中修改其中的初始化參數(shù),并查看初始化參數(shù)值和屬性。3.備份控制文件

      為Oracle數(shù)據(jù)庫備份一個(gè)控制文件。操作步驟如下:

      (1)使用ALTER DATABASE BACKUP CONTROLFILE TO命令備份控制文件。

      (2)在OEM控制臺中備份控制文件。

      4.查詢控制文件信息

      查詢控制文件中的各種信息。操作步驟如下:(1)在SQL*Plus中查詢V$CONTROLFILE、V$CONTROLFILE_RECORD_SECTION、V$PARAMETER動態(tài)性能視圖獲得控制文件的基本信息和記錄文檔段信息。

      第1部分 Oracle管理技術(shù)

      (2)在OEM控制臺中查詢控制文件的基本信息和記錄文檔段信息。

      5.創(chuàng)建多路聯(lián)機(jī)重做日志文件組

      為Oracle數(shù)據(jù)庫新建一個(gè)聯(lián)機(jī)重做日志組,該組包含2個(gè)成員。操作步驟如下:(1)使用SYSDBA身份登錄SQL*Plus。

      (2)查詢V$LOGLFILE視圖,了解目前的重做日志文件組情況。

      (3)執(zhí)行ALTER DATABASE ADD LOGFILE命令增加一個(gè)重做日志文件組,該組包含2個(gè)成員。

      (4)重新查詢V$LOGLFILE視圖,查看新建重做日志文件組情況。

      6.使用LogMiner Viewer工具對重做日志文件進(jìn)行分析

      使用LogMiner Viewer工具分析重做日志文件,獲得指定用戶在規(guī)定的時(shí)間段內(nèi)對數(shù)據(jù)庫所進(jìn)行的更改。操作步驟如下:

      (1)啟動OEM控制臺,登錄Oracle管理服務(wù)器。(2)啟動LogMiner Viewer。(3)設(shè)置查詢條件。

      (4)執(zhí)行并分析查詢結(jié)果。(5)保存分析結(jié)果。

      7.向表空間中添加數(shù)據(jù)文件

      向表空間中添加一個(gè)新的數(shù)據(jù)文件。操作步驟如下:(1)在SQL*Plus中使用ALTER TABLESPACE...ADD DATAFILE語句向某一表空間中添加一個(gè)數(shù)據(jù)文件,并通過查詢DBA_DATA_FILES視圖查看新建數(shù)據(jù)文件的情況。

      ALTER TABLESPACE dtf add datafile 'D:oracleadminBIPT921pfileinit.ora.23201322748' size 10m reuse;

      第1部分 Oracle管理技術(shù)

      (2)通過OEM控制臺添加新的數(shù)據(jù)文件,并查看新的數(shù)據(jù)文件情況。

      8.移動單個(gè)數(shù)據(jù)文件

      將表空間中某個(gè)數(shù)據(jù)文件從一個(gè)物理磁盤移動到另一個(gè)磁盤。操作步驟如下:

      (1)在SQL*Plus中使用ALTER TABLESPACE語句將包含有需要移動數(shù)據(jù)文件的表空間脫機(jī)。

      ALTER TABLESPACE dtf offline;

      (2)在操作系統(tǒng)中,將數(shù)據(jù)文件復(fù)制到另一個(gè)磁盤上。

      (3)使用ALTER TABLESPACE語句對表空間中的數(shù)據(jù)文件重命名。alter tablespace XDB rename datafile'XDB01.DBF'to'XDB02.DBF'(4)使用ALTER TABLESPACE語句重新使該表空間聯(lián)機(jī)。ALTER TABLESPACE dtf online;

      (5)通過查詢DBA_DATA_FILES視圖獲得移動后的數(shù)據(jù)文件信息。9.刪除數(shù)據(jù)文件

      刪除無用的數(shù)據(jù)文件。操作步驟如下:

      (1)在SQL*Plus中使用ALTER DATABASE語句刪除某一數(shù)據(jù)文件。

      (2)通過OEM控制臺刪除某一數(shù)據(jù)文件。

      10.查詢數(shù)據(jù)文件的各種信息

      查詢數(shù)據(jù)文件的各種信息。操作步驟如下:

      第1部分 Oracle管理技術(shù)

      (1)在SQL*Plus中查詢DBA_DATA_FILES、DBA_EXTENTS、DBA_FREE_SPACE、V$DATAFILE、V$DATAFILE_HEADER動態(tài)性能視圖獲得數(shù)據(jù)文件的信息。

      (2)在OEM控制臺中查詢數(shù)據(jù)文件的信息。

      第2部分 Oracle開發(fā)技術(shù)

      第2部分 Oracle開發(fā)技術(shù)

      設(shè)計(jì)目的

      利用所學(xué)的有關(guān)數(shù)據(jù)庫設(shè)計(jì)知識,設(shè)計(jì)一個(gè)基于Oracle數(shù)據(jù)庫的信息管理系統(tǒng)。通過該部分的操作與實(shí)踐,使學(xué)生能夠在完成第一部分任務(wù)的基礎(chǔ)上,進(jìn)一步鞏固Oracle數(shù)據(jù)庫應(yīng)用的方法和技術(shù),提高基于Oracle數(shù)據(jù)庫的應(yīng)用程序綜合設(shè)計(jì)能力。

      設(shè)計(jì)任務(wù)

      ? 數(shù)據(jù)庫設(shè)計(jì):

      (1)通過對應(yīng)用系統(tǒng)的數(shù)據(jù)庫需求分析,確定系統(tǒng)的服務(wù)范圍,繪制系統(tǒng)業(yè)務(wù)流程圖,設(shè)計(jì)系統(tǒng)功能和繪制系統(tǒng)功能圖,設(shè)計(jì)數(shù)據(jù)流圖和數(shù)據(jù)字典;

      (2)采用自底向上的方法設(shè)計(jì)E-R圖;

      (3)依據(jù)關(guān)系規(guī)范化原則設(shè)計(jì)應(yīng)用系統(tǒng)數(shù)據(jù)庫全局關(guān)系模式;(4)依照數(shù)據(jù)庫全局關(guān)系模式設(shè)計(jì)數(shù)據(jù)庫中各表的表結(jié)構(gòu)。? 界面設(shè)計(jì):(1)數(shù)據(jù)庫準(zhǔn)備;

      (2)創(chuàng)建工程并添加所需控件;(3)主要功能模塊的界面設(shè)計(jì)。

      設(shè)計(jì)題目

      1.圖書管理系統(tǒng)

      圖書管理系統(tǒng)包括對所有圖書基本信息的維護(hù),實(shí)現(xiàn)圖書管理的需求,包括圖書檔案、圖書查詢、圖書資料統(tǒng)計(jì)和圖書借閱、歸還等功能。

      圖書管理系統(tǒng)讀者信息用戶圖書信息管理圖書借閱管理讀者號讀者名已借數(shù)量最大借閱數(shù)量用戶名密碼ISBN書名作者出版社數(shù)量圖書借閱圖書歸還

      第2部分 Oracle開發(fā)技術(shù)

      建立角色:

      CREATE ROLE br IDENTIFIED BY asd;GRANT CONNECT TO br;GRANT RESOURCE TO br;

      建立用戶:

      CREATE USER Book IDENTIFIED BY asd DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;授權(quán):

      GRANT UNLIMITED TABLESPACE TO Book;GRANT br TO Book;

      建立bookusers表

      CREATE TABLE Book.BookUsers(UserId Number Primary Key, UserName Varchar2(40)NOT NULL, UserType Number(10), UserPwd Varchar2(40));

      create table book.reader

      第2部分 Oracle開發(fā)技術(shù)

      (reader_id varchar(20)primary key, reader_name varchar(20), maxlend int, alreadylen int)

      create table borrow(reader_id varchar(20), ISBN varchar(20), lendtime date, returntime date, primary key(reader_id,ISBN))foreign key(reader_id)references book.reader(reader_id), foreign key(ISBN)references book(ISBN)

      插入數(shù)據(jù):

      INSERT INTO Book.BookUsers VALUES(1, ‘shang’, 1, ‘123’);INSERT INTO Book.BookUsers VALUES(2, ‘zhang’, 2, ‘456’);

      INSERT INTO Book.BookUsers VALUES(3, ‘shangjingwei’, 2, ‘a(chǎn)sd123’);INSERT INTO Book.BookUsers VALUES(4, ‘zhanghongkai’, 2, ‘a(chǎn)sd123’);COMMIT;

      第2部分 Oracle開發(fā)技術(shù)

      //創(chuàng)建序列

      CREATE SEQUENCE userid MINVALUE 1 NOMAXVALUE START WITH 1 INCREMENT BY 1 NOCYCLE NOCACHE

      //觸發(fā)器創(chuàng)建

      CREATE OR REPLACE TRIGGER Book.NewMyTrigger before Insert ON Book.BookUsers FOR each row begin select userid.nextval into :new.userid from dual;END;

      string cmdString = “insert into Book.BookUsers(UserId,UserName,UserPwd)(xl_1.nextval,'” + student_numer.Text + “','” + password.Text + “')”;登錄窗口:

      values 第2部分 Oracle開發(fā)技術(shù)

      String oraString = “ Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=BOOK)));User ID=system;Password=asd”;//數(shù)據(jù)庫連接語句

      查詢圖書:

      String bookname = “";String bookisbn = ”“;String bmark = ”“;if(textBox1.Text!= ”“)bookisbn =(”ISBN = '“ + textBox1.Text + ”'“);if((textBox2.Text!= ”“)&&(textBox1.Text!= ”“))bookname =(”AND book_name='“ + textBox2.Text + ”'“);else if(textBox2.Text!= ”“)bookname =(”book_name='“ + textBox2.Text + ”'“);bmark = bookname + bookisbn;

      if(radioButton2.Checked){ //添加精確查詢的代碼 if(bmark!= ”“)dataCommand.CommandText = ”SELECT * FROM book.book WHERE “ + bmark;else if(bmark == ”“)

      第2部分 Oracle開發(fā)技術(shù)

      MessageBox.Show(”請輸入查詢數(shù)據(jù)!“);} else if(radioButton1.Checked){ if(textBox1.Text!= ”“)MessageBox.Show(”不支持ISBN的模糊查詢!“);else { //添加模糊查詢的代碼 if(textBox2.Text!= ”“){ bookname =(”書名 like '%“ + textBox2.Text + ”%'“);dataCommand.CommandText = ”SELECT * FROM book.book WHERE “ + bookname;} else//查詢所有圖書 { dataCommand.CommandText = ”SELECT * FROM book.book“;} } } else MessageBox.Show(”請選擇查詢方式!“);

      OracleDataReader dataReader = dataCommand.ExecuteReader();

      第2部分 Oracle開發(fā)技術(shù)

      BindingSource bs = new BindingSource();bs.DataSource = dataReader;this.dataGridView1.DataSource = bs;if(dataReader.Read()){ lnum = dataReader.GetInt32(3);ynum = dataReader.GetInt32(6);} dataConnection.Close();}

      SqlConnection dataConnection;//數(shù)據(jù)庫連接類 SqlCommand dataCommand;//數(shù)據(jù)庫命令類

      讀者信息:

      dataConnection.Open();

      dataCommand.CommandText = ”SELECT * FROM book.reader WHERE reader_id='“ + uID + ”'“;OracleDataReader dataReader = dataCommand.ExecuteReader();

      第2部分 Oracle開發(fā)技術(shù)

      BindingSource bs = new BindingSource();bs.DataSource = dataReader;this.dataGridView4.DataSource = bs;dataReader.Close();dataConnection.Close();

      maxnum =(int)dataGridView4.Rows[0].Cells[”maxlend“].Value;dnum =(int)dataGridView4.Rows[0].Cells[”alredylend“].Value;ymaxnum =(int)dataGridView4.Rows[0].Cells[”maxyuyue“].Value;ydnum =(int)dataGridView4.Rows[0].Cells[”yiyuyue“].Value;}

      還書:

      dataConnection.Open();String bookisbn;bookisbn = textBox5.Text;if(bookisbn!= ”“){ dataCommand.CommandText = ”DELETE FROM book.borrow WHERE ISBN='“ + bookisbn + ”'“;dataCommand.ExecuteNonQuery();dataCommand.CommandText = ”UPDATE book SET incount=incount+1 WHERE ISBN='“ + bookisbn + ”'“;

      第2部分 Oracle開發(fā)技術(shù)

      dataCommand.ExecuteNonQuery();dataCommand.CommandText = maxyuyue=maxyuyue-1 WHERE ISBN='” + bookisbn + “'”;dataCommand.ExecuteNonQuery();dataCommand.CommandText = “UPDATE alredylend=alredylend-1 WHERE reader_id='” + uID + “'”;dataCommand.ExecuteNonQuery();textBox5.Text = “";MessageBox.Show(”歸還成功!“);dnum--;

      實(shí)驗(yàn)總結(jié):

      通過這次課程設(shè)計(jì),我收獲了很多,對oracle數(shù)據(jù)庫從一片空白到現(xiàn)在的有所了解。界面設(shè)計(jì)和代碼用的是C#通過本次課程設(shè)計(jì),我們對數(shù)據(jù)庫的應(yīng)用有了更深刻的體會。網(wǎng)絡(luò)系統(tǒng)都是離不開數(shù)據(jù)庫的支持的。數(shù)據(jù)庫設(shè)計(jì)的是否合理,直接影響到系統(tǒng)的性能。數(shù)據(jù)庫理論對于實(shí)際應(yīng)用有很大的指導(dǎo)意義。

      本次課程設(shè)計(jì)的名稱是圖書管理系統(tǒng),由于我們能力有限,加之近期課程任務(wù)比較緊迫,所以我們負(fù)責(zé)的這個(gè)項(xiàng)目還有許多不完善的地方??梢哉f我們的這次系統(tǒng)是做的比較丑陋,功能還有很多不完善的地方。但是總的來說還是收獲很大的,因?yàn)橥ㄟ^這次的團(tuán)隊(duì)合作,首先對數(shù)據(jù)庫和C#有了進(jìn)一步的了解,并且深深體會到團(tuán)隊(duì)合作的重要性,還有合理的團(tuán)隊(duì)分工是非常重要的。并且能在最后將前臺程序和后臺數(shù)據(jù)庫連接起來運(yùn)行,也對我們是一個(gè)比較大的挑戰(zhàn),而且我們也成功的做到了這一點(diǎn)。本次的圖書管理系統(tǒng),在功能上僅實(shí)現(xiàn)了圖書,用戶,圖書類別和用戶的注冊管理,只是一些非?;A(chǔ)的功能,沒有設(shè)計(jì)添加圖書的功能。此外,該系統(tǒng)原先計(jì)劃設(shè)計(jì)的一些功能也沒有實(shí)現(xiàn)。系統(tǒng)完全實(shí)現(xiàn)的功能實(shí)現(xiàn)圖書信息的刪除、更改和查看等。

      最后也非常感謝向勝軍老師對我們本次課程設(shè)計(jì)的指導(dǎo)及最后驗(yàn)收的評價(jià)。我們也會吸取本次設(shè)計(jì)經(jīng)驗(yàn),為以后的設(shè)計(jì)繼續(xù)努力。

      reader

      SET

      ”UPDATE

      book

      SET

      第五篇:圖書管理系統(tǒng)課程設(shè)計(jì)摘要

      摘要

      摘要

      隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,電子信息化慢慢替代了企業(yè)管理的傳統(tǒng)管理手法,采用管理系統(tǒng)是能夠有效提高管理效率的。圖書館作為一種信息資源的集散地,圖書和用戶借閱資料繁多,包含很多的信息數(shù)據(jù)的管理,現(xiàn)今,有很多的圖書館都是初步開始使用,甚至尚未使用計(jì)算機(jī)進(jìn)行信息管理。圖書館若采取手工方式對圖書資料和圖書借閱情況進(jìn)行人工管理,由于資料繁多,手工處理的工作量大,整體管理效率低下,也不方便讀者對圖書資料的查閱。為了提高日常的圖書管理效率,本文針對通常的圖書管理流程,設(shè)計(jì)了一個(gè)面向?qū)ο髨D書管理系統(tǒng)。本系統(tǒng)中包含六個(gè)功能模塊:圖書館基本信息,借書,還書,讀

      者維護(hù),圖書維護(hù),管理員維護(hù)。

      summary

      With the rapid development of computer technology, electronic information technology gradually replaced the traditional management of enterprise management methods, management system, can effectively improve the efficiency of management.Library as a kind of information resource collection and distribution center, library and user lending data is various, contains a lot of information data management, today, there are a lot of libraries are preliminary started using, hasn't even use a computer for information management.If libraries adopt manual approach to artificial management books and materials and library, because the material is various, manual processing workload is big, the overall management efficiency is low, also not convenient to readers of books and materials inspection.In order to improve the efficiency of books management, this paper usually books management processes, an

      object-oriented books management system management system is designed.This system contains six modules: basic information, library books, and books, the reader maintenance, maintenance, administrators to maintain.1共30頁

      下載數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—西文圖書管理系統(tǒng)word格式文檔
      下載數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—西文圖書管理系統(tǒng).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦