數據結構題集及答案及數據結構-圖書管理系統_第1頁
數據結構題集及答案及數據結構-圖書管理系統_第2頁
數據結構題集及答案及數據結構-圖書管理系統_第3頁
數據結構題集及答案及數據結構-圖書管理系統_第4頁
數據結構題集及答案及數據結構-圖書管理系統_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

判斷題數據的邏輯結構與數據元素本身的內容和形式無關。(√)一個數據結構是由一個邏輯結構和這個邏輯結構上的一個基本運算集構成的整體。(√)數據元素是數據的最小單位。(√)數據的邏輯結構和數據的存儲結構是相同的。(×)程序和算法原則上是沒有區別的,所以在討論數據結構時可以通用。(×)從邏輯關系上講,數據結構主要分為線性結構和非線性結構。(√)數據的存儲結構是數據的邏輯結構的存儲映像。(×)數據的物理結構是指數據在計算機內實際的存儲形式。(√)數據的邏輯結構是依賴于計算機的。(×)算法是對解題方法和的描述步驟。(√)填空題:數據有邏輯結構和存儲結構兩種結構。數據邏輯結構除了集合以外,還包括線性結構、樹形結構和圖形結構。數據結構按邏輯結構可分為兩大類,它們是線性結構和非線性結構。樹形結構和圖形結構合稱為非線性結構。在樹形結構中,除了樹根結點以外,其余每個結點只有1個前驅結點。在圖形結構中,每個結點的前驅結點數和后繼結點數可以任意多個。數據的存儲結構又叫物理結構。數據的存儲結構形式包括順序存儲、鏈式存儲、索引存儲和散列存儲。線性結構中的元素之間存在一對一的關系。樹形結構中的元素之間存在一對多的關系。圖形結構的元素之間存在多對多的關系。數據結構主要研究數據的邏輯結構、存儲結構和算法(或運算)3個方面的內容。數據結構被定義為(D,R),其中D是數據的有限集合,R是D上的關系的有限集合。算法是一個有窮指令的集合。算法效率的度量可以分為事先估算和事后統計法。一個算法的時間復雜性是算法輸入規模的函數。算法的空間復雜度是指該算法所耗費的存儲空間,它是該算法求解問題規模n的函數。若一個算法中的語句頻度之和為T(n)=6n+3nlog2n,則算法的時間復雜度為O(nlog2n)。若一個算法中的語句頻度之和為T(n)=3n+nlog2n+n2,則算法的時間復雜度為___O(n*n)_______。數據結構是一門研究非數值計算的程序設計總是中計算機的操作對象,以及它們之間的關系和運算的學科。串的兩種最基本的存儲方式是順序存儲方式鏈式存儲方式。兩個串相等的充分必要條件是、長度相等對應位置的字符相同。空串是零個字符,其長度等于零。空格串是由一個或多個空格字符組成的串,其長度等于其包含的空格個數。設s=”I□AM□A□TEACHER”(□表示空格),其長度是14。已知二維數組A[m][n]采用行序為主方式存儲,每個元素占k個存儲單元,并且第一個元素的存儲地址是Loc(A[0][0]),則A[i][j]的地址是LOC(A[0][0])+(n*i+j)*k。二維數組A[10][20]采用列序為主方式存儲,每個元素占一個存儲單元,并且A[0][0]的存儲地址是200,則A[6][12]的地址是200+(12*10+6)=326。二維數組A[10,…,20][5,…,10]采用行序為主方式存儲,每個元素占4個存儲單元,并且A[10][5]的存儲地址是1000,則A[8][9]的地址是_1000+((18-10)*6+(9-5))*4=1208。通常從四個方面評價算法的質量:正確性、易讀性、健壯性和高效率。中序遍歷二叉排序樹得到的序列是有序序列(填有序或無序)。。設某棵二叉樹中度數為0的結點數為N0,度數為1的結點數為N1,則該二叉樹中共有2N0+N1個空指針域。。假設為循環隊列分配的向量空間為Q[20](下標從0開始),若隊列的長度和隊頭指針值分別為13和17,則當前隊尾指針的值為10。設一棵完全二叉樹中有500個結點,則該二叉樹的深度為9;若用二叉鏈表作為該完全二叉樹的存儲結構,則共有501個空指針域。數據結構被定義為(D,R),其中D是數據的有限集合,R是D上的關系的有限集合。數據有邏輯結構和存儲兩種結構。串的兩種最基本的存儲方式是順序存儲和鏈接存儲。若一個算法中的語句頻度之和為T(n)=3n+nlog2n+n2,則算法的時間復雜度為O(n2)。數據結構主要研究數據的邏輯結構、存儲結構和算法3個方面的內容。算法的空間復雜度是指該算法所耗費的存儲空間,它是該算法求解問題規模n的函數。數據結構是一門研究非數值計算的程序設計總是中計算機的操作對象,以及它們之間的關系和運算的學科。選擇題:數據結構通常是研究數據的(A)及它們之間的相互關系。A.存儲結構和邏輯結構 B.存儲和抽象C.聯系和抽象 D.聯系與邏輯在邏輯上可以把數據結構分成(C)。A.動態結構和靜態結構 B.緊湊結構和非緊湊結構C.線性結構和非線性結構 D.內部結構和外部結構數據在計算機中存儲器內表示時,物理地址和邏輯地址相同并且是連續的,稱之為(C)。A.存儲結構 B.邏輯結構 C.順序存儲結構 D.鏈式存儲結構非線性結構中的每個結點(D)。A.無直接前趨結點 B.無直接后繼結點C.只有一個直接前趨和一個直接后繼結點 D.可能有多個直接前趨和多個直接后繼結點鏈式存儲結構所占存儲空間(A)。A.分兩部分,一部分存儲結點的值,另一部分存放表示結點間關系的指針B.只有一部分,存放結點的值C.只有一部分,存儲表示結點間關系的指針D.分兩部分,一部分存放結點的值,另一部分存放結點所占單元數算法的計算量大小稱為算法的(C)。A.現實性 B.難度 C.時間復雜性 D.效率數據的基本單位是(B)。A.數據結構 B.數據元素 C.數據項 D.文件每個結點只含有一個數據元素,所有存儲結點相繼存放在一個連續的存儲空間里。這種存儲結構稱為(A)結構。A.順序存儲 B.鏈式存儲 C.索引存儲 D.散列存儲每一個存儲結點不僅含有一個數據元素,還包含一組指針,該存儲方式是(B)存儲方式。A.順序 B.鏈式 C.索引 D.散列以下任何兩個結點之間都沒有邏輯關系的是(D)。A.圖形結構 B.線性結構 C.樹形結構 D.集合在數據結構中,與所使用的計算機無關的是(C)。A.物理結構 B.存儲結構 C.邏輯結構 D.邏輯和存儲結構下列4種基本邏輯結構中,數據元素之間關系最弱的是(A)。A.集合 B.線性結構 C.樹形結構 D.圖形結構與數據元素本身的形式、內容、相對位置、個數無關的是數據的(A)。A.邏輯結構 B.存儲結構 C.邏輯實現 D.存儲實現每一個存儲結點只含有一個數據元素,存儲結點存放在連續的存儲空間,另外有一組指明結點位置的表,該存儲方式是(C)存儲方式。A.順序 B.鏈式 C.索引 D.散列算法能正確的實現預定功能的特性稱為算法的(A)。A.正確性 B.易讀性 C.健壯性 D.高效性算法在發生非法操作時可以作出相應處理的特性稱為算法的(C)。A.正確性 B.易讀性 C.健壯性 D.高效性下列時間復雜度中最壞的是(D)。A.O(1) B.O(n) C.O(log2n) D.O(n2)下列算法的時間復雜度是(D)for(i=0;i<n;i++)for(j=0;j<n;j++)C[i][j]=i+j;A.O(1) B.O(n) C.O(log2n) D.O(n2)算法分析的兩個主要方面是(A)。A.空間復雜性和時間復雜性 B.正確性和簡明性C.可讀性和文檔性 D.數據復雜性和程序復雜性計算機算法必須具備輸入、輸出和(C)。A.計算方法 B.排序方法 C.解決問題的有限運算步驟 D.程序設計方法如下圖所示的4棵二叉樹,(C)不是完全二叉樹。如下圖所示的4棵二叉樹,(B)是平衡二叉樹。在線索化二叉樹中,t所指結點沒有左子樹的充要條件是()。A. B. C. D.二叉樹按某種順序線索化后,任一結點均有指向其前趨和后繼的線索,這種說法(B)。A. 正確 B.錯誤 C.不確定 D.不存在二叉樹的先序遍歷序列中,任意一個結點均處在其孩子結點的前面,這種說法(A)。A. 正確 B.錯誤 C.不確定 D.不存在由于二叉樹中每個結點的度最大為2,所以二叉樹是一種特殊的樹,這種說法(A)。A. 正確 B.錯誤 C.不確定 D.不存在設高度為h的二叉樹上只有度為0和度為2的結點,則此類二叉樹中所包含的結點數至少為(B)。A.2h B.2h-1C.2h+1 D.h+1如右圖所示二叉樹的中序遍歷序列是(B)。 A.abcdgef B.dfebagcC.dbaefcg D.defbagc已知某二叉樹的后序遍歷序列是dabec,中序遍歷序列是debac,它的先序遍歷序列是(A)。A.cedba B.cdbae C.cabed D.cabde設a和b為一棵二叉樹上的兩個結點,在中序遍歷時,a在b前的條件是(D)。A.a是b的左孩子 B.b是a的右孩子C.a是b左子樹上結點或b是a右子樹上結點 D.以上三項均可假定在一棵二叉樹中,雙分支結點數為15,單分支結點數為30,則葉子結點數為(C)個。A. 45 B.15 C.16 D.31某二叉樹的先序遍歷序列是abdgcefh,中序遍歷序列是dgbaechf,則其后序遍歷序列是(A)。A.gdbehfca B.abcdefgh C.gdbaefch D.ghbcdefa按照二叉樹的定義,具有3個結點的二叉樹有(D)種。A.2 B.3 C.4 D.5樹的基本遍歷策略可分為先根遍歷和后根遍歷;二叉樹的遍歷策略分為先序、中序和后序遍歷。這里把由樹轉化得到的二叉樹叫做這棵樹對應的二叉樹。以下結論()是正確的。A.樹的先根遍歷序列與其對應的二叉樹的先序遍歷序列相同B.樹的后根遍歷序列與其對應的二叉樹的后序遍歷序列相同C.樹的先根遍歷序列與其對應的二叉樹的中序遍歷序列相同D.以上都不對空串與空格串是相同的,這種說法(B)。A.正確 B.錯誤 C.依據情況而定 D.不規范串是一種特殊的線性表,其特殊性體現在(D)。A.可以順序存儲 B.數據元素是一個字符C.可以鏈接存儲 D.數據元素可以是多個字符設有兩個串p和q,求q在p中首次出現的位置的運算稱做(B)。A.連接 B.模式匹配 C.求子串 D.求串長設串s1=”ABCDEFG”,s2=”PQRST”,函數con(x,y)返回x和y串的連接,subs(s,i,j)返回串s的從序號i的字符開始的j個字符組成的子串,len(s)返回串s的長度,則con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的結果是(D)。A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF常對數組進行的兩種基本操作是(C)。A.建立與刪除 B.索引和修改 C.查找和修改 D.查找與索引二維數組M的成員是6個字符(每個字符占一個存儲單元,即一個字節)組成的串,行下標i的范圍從0到8,列下標j的范圍從1到10,則存放M至少需要(D=1\*GB3①)個字節;M的第8列和第5行共占(=2\*GB3②B)個字節。=1\*GB3①A.90 B.180 C.240 D.540=2\*GB3②A.108 B.114 C.54 D.60數組A中,每個元素A的長度為3個字節,行下標i從1到8,列下標j從1到10,從首地址SA開始連續存放在存儲器內,存放該數組至少需要的單元數是(C)。A.80 B.100 C.240 D.270數組A中,每個元素A的長度為3個字節,行下標i從1到8,列下標j從1到10,從首地址SA開始連續存放在存儲器內,該數組按行存放時,元素A[8][5]的起始地址為(C)A.SA+141 B.SA+144 C.SA+222 D.SA+225數組A中,每個元素A的長度為3個字節,行下標i從1到8,列下標j從1到10,從首地址SA開始連續存放在存儲器內,該數組按列存放時,元素A[5][8]的起始地址為(A)A.SA+141 B.SA+180 C.SA+222 D.SA+225設有模式串A=”abefaba”,則其next數組中的值依次應為(C)。A.0111111 B.0111212 C.0111123 D.0111122設一維數組中有n個數組元素,則讀取第i個數組元素的平均時間復雜度為(C) A.O(n) B.O(log2n) C.O(1) D.O(n2)設一棵二叉樹的深度為k,則該二叉樹中最多有(D)個結點。 A.2k-1 B.2k C.2k-1 D.2k-1設用鏈表作為棧的存儲結構,則退棧操作(B) A.必須判別棧是否滿 B.必須判別棧是否空C.判別棧元素的類型 D.對棧不作任何操作設順序循環隊列Q[0:M-1]的頭指針和尾指針分別為F和R,頭指針F總是指向隊頭元素的前一位置,尾指針R總是指向隊尾元素的當前位置,則該循環隊列中的元素個數為(D)。A.R-F B.F-R C.(R-F+M)%M D.(F-R+M)%M在含有n個結點的順序存儲的線性表中,在任一結點前插入一個結點所需移動結點的平均次數為(B)。A.n B.n/2 C設哈夫曼樹中的葉子結點總數為m,若用二叉鏈表作為存儲結構,則該哈夫曼樹中總共有(B)個空指針域。A.2m-1 B.2m C.2m+1 D.4m二叉樹的第k層的結點數最多為(D)A.2k-1 B.2K+1 C.2K-1 D.2K-1廣義表是線性表的推廣,它們之間的區別在于(A)。A.能否使用子表 B.能否使用原子項 C.是否能為空 D.表的長度設某棵二叉樹中有2000個結點,則該二叉樹的最小高度為(C)。A.9 B.10 C.11 D.12數據的最小單位是(B)。A.數據項 B.數據元素 C.數據類型 D.數據變量設某數據結構的二元組形式表示為A=(D,R),D={01,02,03,04,05,06,07,08,09},R={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>},則數據結構A是(B)A.線性結構 B.樹型結構 C.物理結構 D.圖型結構一棵有n個結點的樹,在把它轉換成對應的二叉樹后,該二叉樹根結點的左子樹上共有(B)個結點。A.n-2 B.n-1 C.n+1 D.n+2設指針變量p指向單向鏈表中結點A,若刪除單向鏈表中結點A,則需要修改指針的操作序列為(A)(q是指向該類結點的空指針)A.q=p->next;p->data=q->data;p->next=q->next;free(q);B.q=p->next;q->data=p->data;p->next=q->next;free(q);C.q=p->next;p->next=q->next;free(q);D.q=p->next;p->data=q->data;free(q);設有模式串A=”abaabcac”,則其next數組中的值依次應為(C)。A.0111111 B.0111212 C.01122312 D.01122122鏈棧和順序棧相比,有一個比較明顯的優點是B。A.插入操作更加方便 B.通常不會出現棧滿的情況C.不會出現棧空的情況 D.刪除操作更加方便對于一棵深度為4的三叉樹,最多有(C)個結點。A.30 B.36 C.40 D.54設有一個二維數組A[m][n],假設A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每個元素占一個空間,問A[3][3]存放在什么位置?腳注(10)表示是十進制數。(C)A.688 B.678 C.692 D.696設某棵二叉樹的中序遍歷序列為ABCDE,前序遍歷序列為CABD,則后序遍歷該二叉樹得到序列為(A)。A.BAEDC B.BCEDA C.ECDAB D.CBDEA中綴表達式(A+B)*D+E/(F+A*D)+C的后綴形式是(A)。A.AB+D*EFAD*+/C+ B.ABD*+EFAD*+/C+C.ABDEFADC+#+/+*+ D.AB+D*E/FA+*DC+綜合題簡述下列每對術語的區別:空串和空白串:空串(NullString)是指長度為零的串;而空白串(BlankString),是指包含一個或多個空白字符‘’(空格鍵)的字符串.串常量和串變量:串常量是指在程序中只可引用但不可改變其值的串。串變量是可以在運行中改變其值的主串和子串:串中任意個連續的字符組成的子序列稱為該串的子串,包含子串的相應地稱為主串目標串和模式串:在串匹配運算過程中,將主串稱為目標串,而將需要匹配的子串稱為模式串,兩者是相對的假設有如下的串說明:chars1[30]=”Stocktom,CA”,s2[30]=”March52012”,s3[30],*p;=1\*GB3①在執行如下的每個語句后p的值是什么?p=strchr(s1,’t’);p的值是指向第一個字符t的位置,也就是p==&s1[1]。p=strchr(s2,’2’);p的值是指向s2串中第一個9所在的位置,也就是p==&s2[9]。p=strchr(s2,’6’);p的返回值是NULL。閱讀程序題1.說明該C語言程序段所完成的操作。voidconversion(){scanf(“%d”,&n); //n是整型變量while(n){ //當n不為0時push(s,n%8); //將n%8的值壓入棧s中n=n/8; //n除以8賦值給n}While(!stackempty(s)){ //當棧s不空時pop(s,e); //從棧s中彈出一個元素賦值給變量e printf(“%d”,e); //打印出變量e的值}} //程序段結束將從屏幕輸入的十進制數轉化為二進制數2.給出以下C語言程序段的功能說明。intleafcount(BT*T){ //BT為二叉樹類型if(T==NULL) //如果指向二叉樹的指針為空return(0); //返回系統elseif(T->lch==NULL&&T->rch==NULL) //如果T所指結點的左右孩子都為空return(1); //返回1elsereturn(leafcount(T->lch)+leafcount(T->rch)); //返回對下層的操作}用于求二叉樹中所有葉子結點數的遞歸函數

voidhuffmannode(HFMTT)//{inti,j,a,k=0;printf("\n");for(i=0;i<n;i++) /*n為結點數*/{j=0;a=i;;if(!(k%2))printf("\n");printf("\t\t%i:",T[i].weight);k++;hfnode(T,i,j); /*設置哈夫曼樹的編碼,左為0,右為1*/i=a;}求哈夫曼編碼}課程設計說明書課程名稱:數據結構課程設計班級:--電科1班姓名:學號:設計題目:圖書管理系統一、設計題目與要求【問題描述】

設計一個計算機管理系統完成圖書管理基本業務。

【基本要求】每種書的登記內容包括書號、書名、著作者、現存量和庫存量;對書號建立索引表(線性表)以提高查找效率;系統主要功能如下:*采編入庫:新購一種書,確定書號后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加;

*借閱:如果一種書的現存量大于0,則借出一本,登記借閱者的書證號和歸還期限,改變現存量;

*歸還:注銷對借閱者的登記,改變該書的現存量。

【進一步完成內容】系統功能的進一步完善;索引表采用樹表。設計內容程序流程圖源程序軟件測試報告(包括所用到的數據及結果)二、概要設計有八個模塊圖書初始化輸入圖書的一些信息,編號、作者、書名、數量,使有一定的庫存。新書入庫新書采編入庫,輸入編號后如果有次數只需輸入數量,沒有則繼續輸入書名、作者、數量。添加讀者信息讀者信息初始化,輸入讀書證號和姓名,只有輸入書證號和姓名才能進行借書還書借書模塊讀者輸入讀書證號,證號存在輸入要借的圖書編號,不能借同一本書,如果借書數量以達到最大也不能借書。還書模塊歸還已借的圖書,要先輸入讀者書證號,書證號存在繼續輸入要還的圖書編號,圖書編號存在并且借來此書,歸還成功。查詢圖書信息查詢讀者信息可查詢讀者姓名書證號,借了幾本書,都是什么書和還書日期,還可以借幾本書。退出退出讀書管理系統并保存讀者和圖書信息。圖書管理系統圖書管理系統圖書管理模塊理讀者管理模塊借閱操作模塊圖書管理模塊理讀者管理模塊借閱操作模塊查詢操作模塊借書系統讀者信息查詢圖書信息查詢輸入讀者信息還書系統采編入庫初始化圖書信息借書系統讀者信息查詢圖書信息查詢輸入讀者信息還書系統采編入庫初始化圖書信息三、算法設計進入系統后首先進行圖書初始化,輸入圖書的信息。開始開始開始開始輸入圖書編號、名稱、作者和圖書數量輸入圖書編號、名稱、作者和圖書數量進入系統進入系統初始化之后,進入系統,顯示功能列表,可選擇任意系統,但在借書之前先要輸入讀者信息。開始開始輸入功能所對應的數字輸入功能所對應的數字輸入的數字小于0大于6輸入的數字小于0大于6錯誤!請重新輸入錯誤!請重新輸入執行所選功能執行所選功能1)采編入庫錄入圖書信息錄入圖書信息判斷是否有此圖書判斷是否有此圖書 是在原有的紀錄上加上現有的圖書數量 否在原有的紀錄上加上現有的圖書數量向系統中加入新紀錄向系統中加入新紀錄2)輸入讀者信息開始開始輸入讀者信息:讀者書證號輸入讀者信息:讀者書證號結束結束3)借閱圖書輸入讀者書證號輸入讀者書證號判斷讀者是否存在判斷讀者是否存在 否輸出次讀者編號不存在!按任意鍵返回 輸出次讀者編號不存在!按任意鍵返回 是輸入要借的圖書編號輸入要借的圖書編號判斷圖書編號是否存在判斷圖書編號是否存在 否輸出此圖書編號不存在!按任意鍵返回 輸出此圖書編號不存在!按任意鍵返回 是看是否還有此圖書 否看是否還有此圖書輸出此書已借完,按任意鍵返回 是輸出此書已借完,按任意鍵返回看讀者的借書數目是否滿了看讀者的借書數目是否滿了 是輸出借書數目已滿不能借書,按任意鍵返回 否輸出借書數目已滿不能借書,按任意鍵返回看讀者是否借了相同的書看讀者是否借了相同的書 是輸出同一讀者不能借相同的兩本書 否輸出同一讀者不能借相同的兩本書輸入歸還圖書的日期輸入歸還圖書的日期圖書現有數量和庫存數量都減1圖書現有數量和庫存數量都減1輸出讀者結束成功,按任意鍵返回輸出讀者結束成功,按任意鍵返回結束結束4)歸還圖書輸入要還書的讀者編號輸入要還書的讀者編號判斷讀者編號是否存在 否判斷讀者編號是否存在輸出讀者編號不存在按任意鍵返回 是輸出讀者編號不存在按任意鍵返回輸入讀者還書編號輸入讀者還書編號判斷圖書編號是否存在判斷圖書編號是否存在 否輸出此圖書編號不存在按任意鍵返回輸出此圖書編號不存在按任意鍵返回是此圖書編號和還書日期等于0此圖書編號和還書日期等于0庫存和現有圖書數量加1,借書數量減1庫存和現有圖書數量加1,借書數量減1輸出讀者還書完畢,按任意鍵返回輸出讀者還書完畢,按任意鍵返回結束結束5)查詢圖書信息判斷圖書信息是否為空判斷圖書信息是否為空 否輸出圖書信息:編號、名稱、作者、現有和庫存輸出圖書信息:編號、名稱、作者、現有和庫存結束結束6)查詢讀者信息判斷讀者信息是否為空判斷讀者信息是否為空 否輸出讀者書證號、姓名、圖書編碼和還書日期輸出讀者書證號、姓名、圖書編碼和還書日期輸出讀者信息打印完畢輸出讀者信息打印完畢結束結束四、運行結果和調試分析圖書信息初始化同一本新書入庫的運行結果圖不同的新書采編入庫采編入庫后查詢圖書信息的運行結果圖登記讀者信息借書借書后查詢圖書信息的運行結果圖借同一本書的運行結果圖借不同的書借兩本書后查詢讀者信息的運行結果圖還書運行結果圖還書之后再查詢讀者信息的運行結果圖還書后查詢圖書信息退出五、總結體會雖然這次的程序是通過上網查出來的,但是通過這次的實驗使我知道了圖書管理系統的流程,知道了一些以前不知道的知識,在運行程序時也遇到了一些問題,借書時只能借一本書,再借書就不能顯示是借了還是不能借,把最多能借書的數量改了一下還是不行,最后在每一個判斷輸出之后都加了gotoEND借書,就能正常借書了。程序有點長,本來一個函數就能完成一個功能,他用了兩個函數就我把自己能改成一個的改了。借書系統比較復雜,不容易懂,和同學交流了一下自己看了看才明白。這次的實驗還讓我復習了數據結構的一些知識,如數組,while語句,switch語句,鏈表,還知道了如何使用system("cls")清屏,還知道了strcmp是用來比較字符串s1和s2大小的,strcpy使用來把字符串s2的值賦給s1的。這次的實驗增加了我們自己動手動腦的能力,希望多做一些這樣的實驗,很有意義,和現實生活結合的程序增加了我的興趣。源代碼#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#defineMax4typedefstructbook{charbook_num[10];charbook_name[20];charbook_writer[10];intbook_xy;intbook_kc;structbook*next;}BK;typedefstructborrow{charborrow_book_num[10];charlimit_date[8];}BO;typedefstructreader{charreader_num[10];charreader_name[10];intright;BOborrow[Max];structreader*next;}RD;BK*h_book;RD*h_reader;voidLogin();intMenu();voidInit();voidInit_book();voidMenu_select();voidInsert_New_Book();voidFind_Book();voidadd_reader();voidPrint_reader();voidPrint_book();voidBorrow_Book();voidReturn_Book();voidSave();voidSave_Book();voidSave_Reader();voidLoad();voidLoad_Reader();voidLoad_Book();voidLogin(){system("cls");printf("\n\n\n\t\t***************************************\n");printf("\n\n\n\t\t\t歡迎使用圖書管理系統\n");printf("\n\n\n\t\t***************************************\n");printf("\n\n\t\t本程序制作人學號:\n\n\n\n\n\n\n");printf("\n\n\n\t\t按任意鍵進入系統...");getch();system("cls");}intMenu()/*主菜單*/{intdm;printf("\n\t\t圖書管理系統主菜單\n");printf("=================================================\n");printf("*\t0----退出系統\n");printf("*\t1----采編入庫\n");printf("*\t2----登記讀者\n");printf("*\t3----借閱登記\n");printf("*\t4----還書管理\n");printf("*\t5----查詢圖書信息\n");printf("*\t6----查詢讀者信息\n");printf("=================================================\n");printf("請選擇相應的代碼:");for(;;){scanf("%d",&dm);//dm輸入的數字if(dm<0||dm>6)printf("\n錯誤!請重新輸入:");elsebreak;}returndm;}voidMenu_select()/*主菜單選擇函數*/{for(;;){switch(Menu())/*功能選擇*/{case0:system("cls");Save();printf("\n\n\t文件保存成功!\n");printf("\n\n\t歡迎下次使用本系統!\n");getch();exit(0);case1:Insert_New_Book();break;case2:add_reader();break;case3:Borrow_Book();break;case4:Return_Book();break;case5:Print_book();break;case6:Print_reader();break;default:printf("\n錯誤!");exit(0);}}}voidInit()/*初始化*/{BK*p0;printf("\n圖書初始化開始,請輸入圖書信息..\n包括編號.書名.數量..\n");p0=(BK*)malloc(sizeof(BK));h_book=p0;printf("\n請輸入圖書信息:\n");printf("圖書編號:");/*輸入圖書編號(唯一)*/scanf("%s",p0->book_num);printf("圖書名稱:");/*輸入圖書名稱*/scanf("%s",p0->book_name);printf("圖書作者:");/*輸入圖書作者*/scanf("%s",p0->book_writer);printf("圖書數量:");/*輸入圖書數量*/scanf("%d",&p0->book_kc);p0->book_xy=p0->book_kc;/*開始時圖書現有量和庫存量相等*/p0->next=NULL;printf("\n圖書信息初始化完畢!按任意鍵繼續下一步操作..\n");getch();system("cls");}voidInsert_New_Book()/*新書入庫*/{BK*p,*p0,*p1;p=p1=h_book;printf("\n新書入庫模塊...\n");printf("\n請輸入新書信息..\n包括書號.書名.數量..\n");p0=(BK*)malloc(sizeof(BK));printf("圖書編號:");scanf("%s",p0->book_num);while(strcmp(p0->book_num,p1->book_num)!=0&&p1->next!=NULL)p1=p1->next;if(strcmp(p0->book_num,p1->book_num)==0)/*此處分兩種情況,若圖書編號存在,則直接進庫,只須輸入書的數量*/{printf("\n此編號圖書已存在!!直接入庫!\n");printf("圖書數量:");scanf("%d",&p0->book_kc);p1->book_kc+=p0->book_kc;p1->book_xy+=p0->book_kc;}else/*若不存在,則需要輸入其他的信息,然后在進行插入操作*/{printf("圖書名稱:");scanf("%s",p0->book_name);printf("圖書作者:");scanf("%s",p0->book_writer);printf("圖書數量:");scanf("%d",&p0->book_kc);//庫存數量while(p->next){p=p->next;}if(h_book==NULL)h_book=p0;/*此處分兩種情況,鏈表中沒有數據,head直接指向p0處*/elsep->next=p0;/*此處分兩種情況,鏈表中有數據,鏈表中最后元素的next指向p0處*/p0->next=NULL;p0->book_xy=p0->book_kc;}printf("\n新書入庫完畢!按任意鍵繼續下一步操作..\n");getch();system("cls");}voidadd_reader()/*添加讀者*/{RD*p0;inti;printf("\n讀者初始化開始,請輸入讀者信息..\n包括書證號.姓名..\n");p0=(RD*)malloc(sizeof(RD));/*申請新結點存儲空間*/h_reader=p0;printf("\n請輸入讀者的信息:\n");printf("讀者書證號:");scanf("%s",p0->reader_num);printf("讀者姓名:");scanf("%s",p0->reader_name);p0->right=0;for(i=0;i<Max;i++){strcpy(p0->borrow[i].borrow_book_num,"0");/*所借圖書直接置為(即沒有借書)*/strcpy(p0->borrow[i].limit_date,"0");}p0->next=NULL;printf("\n讀者信息初始化完畢!按任意鍵繼續下一步操作..\n");getch();system("cls");}voidBorrow_Book()/*借書模塊*/{BK*p0;RD*p1;charbo_num[10],rea_num[10],lim_date[8];inti;p0=h_book;p1=h_reader;printf("\n借書模塊...\n");printf("\n請輸入借書的讀者書證號:");scanf("%s",rea_num);while(p1->next!=NULL&&strcmp(rea_num,p1->reader_num)!=0)p1=p1->next;if(p1->next==NULL&&strcmp(rea_num,p1->reader_num)!=0){printf("\n此讀者編號不存在!按任意鍵返回..\n");gotoEND;}printf("\n請輸入你要借的書的編號:");scanf("%s",bo_num);while(strcmp(bo_num,p0->book_num)!=0&&p0->next!=NULL)p0=p0->next;if(p0->next==NULL&&strcmp(bo_num,p0->book_num)!=0){printf("\n此圖書編號不存在!按任意鍵返回..\n");gotoEND;}elseif(p0->book_xy<=0){printf("\n抱歉,此書已借完!請等待新書的到來!!\n按任意鍵返回....");gotoEND;}elseif(p1->right>Max||p1->right==Max){printf("\n不好意思,借書數目已滿!不能借書!\n按任意鍵返回....");gotoEND;}elseif(strcmp(p1->borrow[0].borrow_book_num,"0")!=0){for(i=0;i<Max;i++){if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0){printf("\n抱歉!同一個讀者不能同借兩本相同的書!\n按任意鍵返回....");gotoEND;}elseif(strcmp(p1->borrow[i].borrow_book_num,"0")==0){printf("\n請輸入你要歸還圖書的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date,lim_date);p0->book_xy--; p0->book_kc--;printf("\n讀者編號%s借書完畢!按任意鍵繼續下步操作..",p1->reader_num);gotoEND;}}}else{printf("\n請輸入你要歸還圖書的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date,lim_date);p0->book_xy--;p0->book_kc--;printf("\n讀者編號%s借書完畢!按任意鍵繼續下步操作..",p1->reader_num);}END:getch();system("cls");}voidReturn_Book()/*還書模塊*/{BK*p;RD*q;inti,j,find=0;charreturn_book_num[10],return_reader_num[10];p=h_book;q=h_reader;printf("\n還書模塊...\n");printf("\n請輸入要還書的讀者編號:");scanf("%s",return_reader_num);while(q->next!=NULL&&strcmp(return_reader_num,q->reader_num)!=0)q=q->next;if(q->next==NULL&&strcmp(return_reader_num,q->reader_num)!=0){find=2;printf("\n此讀者編號不存在!按任意鍵返回..\n");gotoend;}printf("\n請輸入讀者還書的編號:");scanf("%s",return_book_num);while(p->next!=NULL&&strcmp(return_book_num,p->book_num)!=0)p=p->next;if(p->next==NULL&&strcmp(return_book_num,p->book_num)!=0){find=2;printf("\n錯誤!此圖書編號不存在!按任意鍵返回..\n");gotoend;}for(i=0;i<Max;i++)if(strcmp(return_book_num,q->borrow[i].borrow_book_num)==0)/*如果此讀者借了此書*/{find=1;for(j=i;j<Max-1;j++){strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1].borrow_book_num);strcpy(q->borrow[j].limit_date,q->borrow[j+1].limit_date);}strcpy(q->borrow[Max-1].borrow_book_num,"0");strcpy(q->borrow[Max-1].limit_date,"0");p->book_xy++; p->book_kc++;q->right--;printf("\n編號%s的讀者還書完畢!按任意鍵繼續下步操作..",return_reader_num);}if(find==0)printf("\n錯誤!此讀者未借此書!按任意鍵返回..\n");end:getch();system("cls");}voidPrint_book()/*查詢圖書信息*/{BK*p;p=h_book;printf("\n圖書信息如下:\n\n");printf("圖書編號\t圖書名稱\t圖書作者\t現有\t\t庫存\n");while(p!=NULL){printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",p->book_num,p->book_name,p->book_writer,p->book_xy,p->book_kc);p=p->next;}printf("\n圖書信息打印完畢!按任意鍵繼續下一步操作..");getch();system("cls");}voidPrint_reader()/*查詢讀者信息*/{RD*p;inti;p=h_reader;printf("\n讀者信息如下:\n\n");printf("讀者書證號\t\t讀者姓名\n");printf("\n");while(p!=NULL){printf("\t%s\t\t%s",p->reader_num,p->reader_name);for(i=0;i<Max;i++){printf("\n");pr

溫馨提示

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

評論

0/150

提交評論