




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件綜合課程設(shè)計(jì) 廣義表的應(yīng)用圖書借閱管理系統(tǒng) 二一四 年 六 月廣義表的應(yīng)用一、問(wèn)題陳述由于廣義表在結(jié)構(gòu)上較線性表復(fù)雜得多,因此,廣義表的運(yùn)算也不如線性表簡(jiǎn)單。本設(shè)計(jì)要求實(shí)現(xiàn)的廣義表的建立、查找、輸出、取表頭和取表尾以及求深度、求逆表等。本設(shè)計(jì)用一個(gè)主控菜單程序控制,共分為6個(gè)子系統(tǒng)。(1)建立廣義表(2)輸出廣義表(3)結(jié)點(diǎn)的查找(4)求廣義表表頭(5)求廣義表表尾(6)求廣義表的深度二、需求分析1.菜單函數(shù) 使用數(shù)字0-6來(lái)選擇菜單項(xiàng),超出此范圍時(shí),提示輸入錯(cuò)誤,并重新輸入。運(yùn)行程序時(shí),先輸入一個(gè)廣義表,回車后,調(diào)用各功能函數(shù),則出現(xiàn)功能菜單,輸入的一個(gè)數(shù)字,該數(shù)字用sn存儲(chǔ),使用cho
2、ose()接受數(shù)字輸入,該函數(shù)的返回值提供給主函數(shù);則主函數(shù)使用while循環(huán)實(shí)現(xiàn)重復(fù)選擇,以實(shí)現(xiàn)不同的廣義表菜單功能。2.主函數(shù) 包含的功能函數(shù)有:輸出廣義表、廣義表深度、廣義表表頭、廣義表表尾、廣義表查找、廣義表逆置6個(gè)函數(shù)。運(yùn)行程序時(shí),首先執(zhí)行主函數(shù),根據(jù)提示,建立廣義表,廣義表中的元素應(yīng)單獨(dú)輸入,每輸入一個(gè)字符,回車,廣義表輸入完成時(shí),應(yīng)再次輸入“)”,表示輸入結(jié)束,這是由于CreateGList函數(shù)遞歸的原因,回車,此時(shí)調(diào)用choose()函數(shù),出現(xiàn)功能菜單,提示用戶進(jìn)行相關(guān)操作,進(jìn)入任一操作,通過(guò)switch(choose()對(duì)用戶所輸入的信息進(jìn)行匹配,匹配后調(diào)用相關(guān)的子函數(shù),從而
3、實(shí)現(xiàn)各項(xiàng)函數(shù)的功能。3.創(chuàng)建廣義表函數(shù)函數(shù)中,先定義一個(gè)整型數(shù)據(jù)i=0和一個(gè)數(shù)組a10,構(gòu)建時(shí),先輸入一個(gè)字符,如果輸入字符的是#,則廣義表為空,否則輸出第一個(gè)左括號(hào)。接下來(lái)的元素項(xiàng)如果是子表,則遞歸調(diào)用CreateGList(),若是原子,則直接輸出,并將輸入的數(shù)據(jù)保存在數(shù)組ai中,同時(shí)i+,然后繼續(xù)輸入保存用戶所輸入的數(shù)據(jù),若是,則遞歸調(diào)用CreateGList()函數(shù),繼續(xù)執(zhí)行第一步,當(dāng)遇到)時(shí),結(jié)束。4. 廣義表的輸出此函數(shù)實(shí)現(xiàn)的是輸出功能,它直接關(guān)聯(lián)到后面的取表頭、表尾運(yùn)算。函數(shù)中,分為原子和子表,若是子表,則利用頭結(jié)點(diǎn)指針,遞歸輸出子表。若是原子,則直接輸出該原子的數(shù)值。然后判斷下
4、一結(jié)點(diǎn)是否為空,不為空則輸出“,”,繼續(xù)遞歸輸出,執(zhí)行上一步的操作。5. 結(jié)點(diǎn)的查找運(yùn)行時(shí),輸入要查找的元素,將該元素與數(shù)組中的元素進(jìn)行比較,若相等,則查找成功,輸出此元素的位置信息,當(dāng)查找超出范圍時(shí),輸出查找失敗信息。6求廣義表的表頭表頭分為子表和原子。當(dāng)表頭為子表時(shí),先輸出左括號(hào),再通過(guò)遞歸調(diào)用依次輸出表頭,最后輸出右括號(hào)。當(dāng)表頭為原子時(shí),直接輸出原子數(shù)值。7. 求廣義表的表尾若廣義表非空,則廣義表中除去表頭后其余元素構(gòu)成的子表為表尾。函數(shù)中,定義指針p、q,q用于指向廣義表表頭,q->next為廣義表表尾,并賦值給p,因p也是廣義表,則可調(diào)用廣義表輸出函數(shù)PrintGList(),
5、輸出表尾。8. 廣義表的逆置逆置即將表頭和表尾倒置,因此算法中,先后調(diào)用取表尾函數(shù)和取表頭函數(shù),先輸出表尾,再輸出表頭,以此實(shí)現(xiàn)逆置功能。9. 廣義表的深度廣義表深度的遞歸定義式:它等于所有子表中表的最大深度加1。若一個(gè)表為空,則深度為1。定義dep表示任一子表的深度,max為所有子表中的最大深度,則廣義表的深度為max+1。函數(shù)中,當(dāng)廣義表L為空表或由單元素組成時(shí),不進(jìn)行遞歸調(diào)用,返回1;否則,當(dāng)廣義表含有子表時(shí),利用頭結(jié)點(diǎn)指針,遞歸求出深度,將最大深度的子表的dep賦值給max,返回max+1即為廣義表深度。三、概要設(shè)計(jì)程序的開始,先定義廣義表的結(jié)點(diǎn)類型,采用枚舉類型區(qū)分原子ATOM和子表
6、LIST。采用聯(lián)合體定義原子結(jié)點(diǎn)的值域atom和表頭指針域hp。再輸入一個(gè)廣義表,在程序中可以定義一個(gè)數(shù)組用來(lái)存放廣義表中的關(guān)鍵字。編寫各個(gè)功能函數(shù)時(shí),先了解算法的思想,繪出流程圖,根據(jù)流程圖進(jìn)一步編寫。之后編寫一個(gè)功能選擇函數(shù)choose(),并在此函數(shù)中打印運(yùn)行界面,通過(guò)輸入代碼,來(lái)進(jìn)行不同功能的操作。在運(yùn)行界面中,通過(guò)一個(gè)while循環(huán),能讓用戶進(jìn)行循環(huán)操作,直至退出系統(tǒng)。mainCreateGList choosePrintGListLocateGListHeadGListTailTraverselistGListDepth四、詳細(xì)設(shè)計(jì)1.菜單函數(shù)4int choose() int s
7、n;cout<<"-"<<endl;cout<<" 廣義表的應(yīng)用 "<<endl;cout<<" 1.廣義表輸出 2.結(jié)點(diǎn)的查找 "<<endl;cout<<" 3.廣義表表頭 4.廣義表表尾 "<<endl;cout<<" 5.廣義表逆置 6.廣義表深度 "<<endl;cout<<" 0.退出系統(tǒng) "<<endl;cout<
8、<"-"<<endl; cout<<"請(qǐng)輸入代碼06:"<<endl; for( ; ; ) cin>>sn;if( sn <0|sn>6)cout<<endl<<"輸入錯(cuò)誤,重選06:"<<endl;elsebreak;return sn;2.主函數(shù)int main()GList *L; char ch;printf("建立廣義表,結(jié)束請(qǐng)多輸一個(gè)右括號(hào)!n");CreateGList(&L); /創(chuàng)建廣義
9、表while(1) switch(choose()case 1:cout<<"輸出廣義表:"PrintGList(L);cout<<endl;break;case 2:cout<<"請(qǐng)輸入要查找的結(jié)點(diǎn):"cin>>ch;Locate(L, ch);cout<<endl;break;case 3:cout<<"廣義表取表頭:"GListHead(L);cout<<endl;break;case 4:cout<<"廣義表取表尾:&qu
10、ot;cout<<"("GListTail(L);cout<<")"<<endl;break;case 5:printf("廣義表的逆表:");TraverseList(L);cout<<endl;break;case 6:cout<<"廣義表的深度為:"cout<<GListDepth(L->hp)<<endl;break;case 0:cout<<"退出!"<<endl;exit
11、(0);break;return 0;3.創(chuàng)建廣義表函數(shù):CreateGList()void CreateGList(GList *L)/創(chuàng)建廣義表函數(shù) char ch;cin>>ch;/輸入數(shù)據(jù)if(ch = '#') /如果輸入的是#表示為空*L = NULL;else if(ch = '(') /如果是左括號(hào)就遞歸構(gòu)建子表*L = (GList *)malloc(sizeof(GList);(*L)->tag =1; /廣義表的標(biāo)志量為L(zhǎng)ISTCreateGList(&(*L)->hp); /建立此廣義表的表頭指針?biāo)傅脑?/p>
12、else/只有原子的情況下*L = (GList *)malloc(sizeof(GList);(*L)->tag = 0; /廣義表標(biāo)志量為ATOM(*L)->atom = ch; /元素為所輸入數(shù)值ai=ch; /不能寫成ai=(*L)->atom;i+;cin>>ch; /此處輸入的必為逗號(hào)或者右括if(ch = ',') /如果是逗號(hào)就遞歸構(gòu)建下一個(gè)子表CreateGList(&(*L)->next); else if(ch = ')') /如果是右括號(hào)就結(jié)束 (*L)->next =NULL;4.廣義表
13、輸出函數(shù)PrintGList()void PrintGList(GList *L) /輸出廣義表if(L->tag = 1) /廣義表標(biāo)志量為L(zhǎng)IST cout<<"(" /先輸出左括號(hào)if(L->hp = NULL) /表頭指針為空cout<<"#"elsePrintGList(L->hp); /遞歸打印子表 cout<<")" /結(jié)束打印右括號(hào)else /標(biāo)志量為ATOMcout<<L->atom; /輸出此元素 if(L->next !=NULL) c
14、out<<", "PrintGList(L->next); /調(diào)用此函數(shù),輸出廣義表下一個(gè)元素5. 廣義表查找函數(shù)Locate()void Locate(GList *L,char ch) /廣義表查找int j;cin>>ch; /輸入要查找關(guān)鍵字for (j=0;j<=i;j+)/用for循環(huán)查找if(aj=ch) /如果找到cout<<"查找成功,位置為:"<<j+1<<endl;break;if(j>i)cout<<"查找失敗,元素不存在此廣義表中
15、!"<<endl;6.廣義表取表頭函數(shù):void GListHead(GList *L) /廣義表取表頭GList *p;p=L->hp; /p指向廣義表表頭PrintGListHead(p); /調(diào)用表頭輸出函數(shù)7.廣義表取表尾函數(shù)void GListTail(GList *L)/廣義表取表尾GList *p,*q;q=L->hp;/q指向廣義表表頭p=q->next;/p指向廣義表表尾PrintGList(p); 8.廣義表逆置函數(shù)TraverseList()void TraverseList(GList *L) /廣義表逆置 cout<<
16、;"(" GListTail(L); /調(diào)用取表尾函數(shù) cout<<"," GListHead(L); /調(diào)用取表頭函數(shù)cout<<")"9. 廣義表求深度函數(shù)int GListDepth(GList *L) /求廣義表深度int max, dep;if(!L)/廣義表存在return 1;for(max =0; L; L=L->next) /max初值為0,元素地址不為空if(L->tag = 1) /元素標(biāo)志量為L(zhǎng)ISTdep = GListDepth(L->hp); /求以L->h
17、p的子表深度if(dep > max)max = dep; return max + 1; /各元素的深度的最大值加一五、程序代碼#include <iostream>using namespace std;typedef enumATOM, LISTElemTag; /ATOM=0:原子,LIST=1:子表typedef struct GLNode /廣義表結(jié)構(gòu)類型int tag; /標(biāo)志域,區(qū)分原子和表結(jié)點(diǎn)union /原子結(jié)點(diǎn)和表結(jié)點(diǎn)的聯(lián)合部分char atom; /原子結(jié)點(diǎn)的值域 struct GLNode *hp; /表結(jié)點(diǎn)表頭指針;struct GLNode *n
18、ext;/下一個(gè)元素結(jié)點(diǎn)GList;int i=0; /定義變量i,用來(lái)作數(shù)組下標(biāo) int a10; /定義數(shù)組用來(lái)存儲(chǔ)廣義表中的關(guān)鍵字void CreateGList(GList *L)/創(chuàng)建廣義表函數(shù) char ch;cin>>ch; /輸入數(shù)據(jù)if(ch = '#') /如果輸入的是#表示為空*L = NULL;else if(ch = '(') /如果是左括號(hào)就遞歸構(gòu)建子表*L= (GList *)malloc(sizeof(GList); (*L)->tag=1; /廣義表的標(biāo)志量為L(zhǎng)ISTCreateGList(&(*L)-
19、>hp); /建立此廣義表的表頭指針?biāo)傅脑豦lse/只有原子的情況下*L = (GList *)malloc(sizeof(GList);(*L)->tag = 0; /廣義表標(biāo)志量為ATOM(*L)->atom = ch; /元素為所輸入數(shù)值ai=ch; /不能寫成ai=(*L)->atom;i+;cin>>ch; /此處輸入的必為逗號(hào)或者右括if(ch = ',') /如果是逗號(hào)就遞歸構(gòu)建下一個(gè)子表CreateGList(&(*L)->next); elseif(ch=')') /如果是右括號(hào)就結(jié)束 (*
20、L)->next =NULL;void PrintGList(GList *L) /輸出廣義表if(L->tag=1) /廣義表標(biāo)志量為L(zhǎng)IST cout<<"(" /先輸出左括號(hào)if(L->hp = NULL) /表頭指針為空cout<<"#"elsePrintGList(L->hp); /遞歸打印子表 cout<<")" /結(jié)束打印右括號(hào)else /標(biāo)志量為ATOMcout<<L->atom; /輸出此元素 if(L->next !=NULL) c
21、out<<", "PrintGList(L->next); /調(diào)用此函數(shù),輸出廣義表下一個(gè)元素int GListDepth(GList *L) /求廣義表深度int max, dep;if(!L)/廣義表存在return 1;for(max = 0; L; L = L->next) /max初值為0,元素地址不為空if(L->tag = 1) /元素標(biāo)志量為L(zhǎng)ISTdep = GListDepth(L->hp); /求以L->hp的子表深度if(dep > max)max = dep; return max + 1; /各元素
22、的深度的最大值加一void PrintGListHead(GList *L) /打印廣義表表頭函數(shù) if(L->tag = 1 ) /子表 cout<<"(" /先輸出左括號(hào)if(L->hp = NULL) /如果表頭為空cout<<"#" elsePrintGListHead(L->hp); /遞歸打印子表cout<<")" /結(jié)束打印右括號(hào)else /原子cout<<L->atom;void GListHead(GList *L) /廣義表取表頭GList *
23、p;p=L->hp; /p指向廣義表表頭PrintGListHead(p); /調(diào)用表頭輸出函數(shù)void GListTail(GList *L)/廣義表取表尾GList *p,*q;q=L->hp;/q指向廣義表表頭p=q->next;/p指向廣義表表尾PrintGList(p); void TraverseList(GList *L) /廣義表逆置 cout<<"(" GListTail(L);/調(diào)用取表尾函數(shù) cout<<"," GListHead(L); /調(diào)用取表頭函數(shù)cout<<"
24、)"void Locate(GList *L,char ch) /廣義表查找int j;for (j=0;j<=i;j+)/用for循環(huán)查找if(aj=ch) /如果找到cout<<"查找成功,位置為:"<<j+1<<endl;break;if(j>i)cout<<"查找失敗,元素不存在此廣義表中!"<<endl;int choose() int sn;cout<<"-"<<endl;cout<<" 廣義表的
25、應(yīng)用 "<<endl;cout<<" 1.廣義表輸出 2.結(jié)點(diǎn)的查找 "<<endl;cout<<" 3.廣義表表頭 4.廣義表表尾 "<<endl;cout<<" 5.廣義表逆置 6.廣義表深度 "<<endl;cout<<" 0.退出系統(tǒng) "<<endl;cout<<"-"<<endl; cout<<"請(qǐng)輸入代碼06:"
26、<<endl; for( ; ; ) cin>>sn;if( sn <0|sn>6)cout<<endl<<"輸入錯(cuò)誤,重選06:"<<endl;elsebreak;return sn; int main()GList *L; char ch;printf("建立廣義表,結(jié)束請(qǐng)多輸一個(gè)右括號(hào)!n");CreateGList(&L); /創(chuàng)建廣義表while(1) switch(choose()case 1:cout<<"輸出廣義表:"Print
27、GList(L);cout<<endl;break;case 2:cout<<"請(qǐng)輸入要查找的結(jié)點(diǎn):"cin>>ch;Locate(L, ch);cout<<endl;break;case 3:cout<<"廣義表取表頭:"GListHead(L);cout<<endl;break;case 4:cout<<"廣義表取表尾:"cout<<"("GListTail(L);cout<<")"&
28、lt;<endl;break;case 5:printf("廣義表的逆表:");TraverseList(L);cout<<endl;break;case 6:cout<<"廣義表的深度為:"cout<<GListDepth(L->hp)<<endl;break;case 0:cout<<"退出!"<<endl;exit(0);break;return 0;六、運(yùn)行結(jié)果與測(cè)試1.建立廣義表2.輸出廣義表3.結(jié)點(diǎn)的查找4.求廣義表表頭5. 求廣義表表尾6
29、. 求廣義表的逆表7. 求廣義表的深度8.退出七、設(shè)計(jì)體會(huì)與總結(jié)此次課程設(shè)計(jì)我被分配到的題目是廣義表的應(yīng)用,這對(duì)我來(lái)說(shuō)是個(gè)熟悉的陌生人,因?yàn)榍安痪貌艔?fù)習(xí)過(guò),可是沒(méi)記住,只能回頭再去看,經(jīng)過(guò)多方面參考,總算是勉強(qiáng)執(zhí)行出來(lái)了,不過(guò)這中間也遇到了一些問(wèn)題:1.建立廣義表時(shí),把表一次性全部輸完再回車,無(wú)限循環(huán);經(jīng)檢查,是源程序中輸入算法編寫的錯(cuò)誤。2. 輸入代碼1,即輸出廣義表,顯示調(diào)試錯(cuò)誤,經(jīng)檢查,是源程序中輸出算法編寫的錯(cuò)誤。3.查找結(jié)點(diǎn)的時(shí)候要輸入兩個(gè)結(jié)點(diǎn)才會(huì)顯示第二個(gè)結(jié)點(diǎn)位置;經(jīng)檢查,是調(diào)用的程序中多寫了一句輸入語(yǔ)句。圖書借閱管理系統(tǒng)一、問(wèn)題陳述 主要分為兩大功能:1)圖書管理(增
30、加圖書、查詢圖書、刪除圖書、圖書借閱、還書);2)會(huì)員管理(增加會(huì)員、查詢會(huì)員、刪除會(huì)員、借書信息);二、需求分析1.主函數(shù)分為兩個(gè)模塊:圖書信息和會(huì)員信息,并顯示兩個(gè)模塊的主界面,可將圖書信息和會(huì)員信息寫入和讀出。2.圖書管理(1)增加圖書:只需添加書的編號(hào)和書名即可,考慮到圖書的信息較多,所以用結(jié)構(gòu)體對(duì)其定義,又考慮到圖書量大,所以添加后要保存到文件中去。(2)查詢圖書:可按書名查詢、按書的編號(hào)查詢,也可查詢所有圖書信息,主要是通過(guò)順序查找法來(lái)實(shí)現(xiàn)的。(3)刪除圖書:輸入要?jiǎng)h除的書的編號(hào)即可,主要是把保存到文件中的內(nèi)容寫到鏈表中去,用鏈表刪除結(jié)點(diǎn)的方法來(lái)刪除,刪除時(shí)以記錄為單位,能一次刪除
31、一條記錄。(4)圖書借閱:輸入會(huì)員編號(hào)和圖書編號(hào)即可借閱,能對(duì)借出的圖書作記錄信息,能一次借出一本圖書。(5)還書:輸入要還的書的編號(hào)即可還,能將被借出的圖書信息還原,能一次借出一本圖書。3.會(huì)員管理(方法與圖書管理類似)(1)增加會(huì)員:輸入會(huì)員編號(hào)、姓名、性別即可添加。(2)查詢會(huì)員:可按姓名查詢,也可查詢所有會(huì)員信息。(3)刪除會(huì)員:輸入會(huì)員編號(hào)即可刪除,主要是通過(guò)把保存到文件中的內(nèi)容寫到鏈表中去,用鏈表刪除結(jié)點(diǎn)的方法來(lái)刪除圖書。(4)借書信息:選擇“借書信息”即可顯示所有讀者是否借書三、概要設(shè)計(jì)圖書和會(huì)員的信息的存儲(chǔ)是建立兩個(gè)帶頭結(jié)點(diǎn)的單鏈表,分別用于存儲(chǔ)圖書和會(huì)員。建立這兩個(gè)鏈表的聯(lián)系
32、是在圖書結(jié)點(diǎn)中設(shè)一個(gè)借書人編號(hào),在會(huì)員結(jié)點(diǎn)中設(shè)一個(gè)數(shù)組用于存會(huì)員借的書,剩下的只需按鏈表的操作就可以了。四、詳細(xì)設(shè)計(jì)1.主函數(shù)35void main()FILE *fpb1,*fpb2,*fpm1,*fpm2; /文件指針Book *p1,*p2,*s1;Member *q1,*q2,*s2;H=Init_B();L=Init_M();fpb1=fopen("book.txt","rb"); /讀方式打開圖書文件if(fpb1!=NULL)p1=(Book *)malloc(sizeof(Book);if(!p1) exit(1);p1->next
33、=NULL;while(fread(p1,sizeof(Book),1,fpb1)=1)if(H->next=NULL)H->next=p1;s1=p1;elses1->next=p1;s1=p1;p1=(Book *)malloc(sizeof(Book);if(!p1) exit(1);p1->next=NULL;fpm1=fopen("member.txt","rb"); /讀方式打開會(huì)員文件if(fpm1!=NULL)q1=(Member *)malloc(sizeof(Member);if(!q1) exit(1);q1
34、->next=NULL;while(fread(q1,sizeof(Member),1,fpm1)=1)if(L->next=NULL)L->next=q1;s2=q1;elses2->next=q1;s2=q1;q1=(Member *)malloc(sizeof(Member);if(!q1) exit(1);q1->next=NULL;int m,n;while(m!=0)cout<<" 歡迎進(jìn)入圖書借閱管理系統(tǒng) "<<endl;cout<<" *"<<endl;cout
35、<<" 1.圖書管理 "<<endl;cout<<" 2.會(huì)員管理 "<<endl;cout<<" 0.退出系統(tǒng) "<<endl;cout<<"*"<<endl;cout<<" 請(qǐng)?jiān)诖溯斎肽倪x擇:"cin>>m;cout<<"="<<endl;cout<<endl;if(m=1)cout<<" 圖書
36、管理 "<<endl;cout<<"*"<<endl;cout<<" 1.增加圖書 3.刪除圖書 "<<endl;cout<<" 2.查詢圖書 4.圖書借閱 "<<endl;cout<<" 0.退 出 "<<endl;cout<<" *"<<endl;cout<<"請(qǐng)輸入您的選擇:"cin>>n;cout<
37、<"="<<endl;switch(n)case 1:BookAdd(H); break; /增加圖書case 2:BookSearch(H); break; /查詢圖書case 3:BookDel(H); break; /刪除圖書case 4:BookBorrow(H,L); break; /圖書借閱case 0:break; /退出圖書管理,返回上一層菜單else if(m=2)cout<<" 會(huì)員管理 "<<endl;cout<<" *"<<endl;cout&l
38、t;<" 1.增加會(huì)員 3.刪除會(huì)員 "<<endl;cout<<" 2.查詢會(huì)員 4.借書信息 "<<endl;cout<<" 0.退 出 "<<endl;cout<<" *"<<endl;cout<<" 請(qǐng)輸入您的選擇:"cin>>n;cout<<"="<<endl;switch(n)case 1:MemberAdd(L); break
39、; /增加會(huì)員case 2:MemberSearch(L); break; /查詢會(huì)員case 3:MemberDel(L); break; /刪除會(huì)員case 4:BorrowInfo(L); break; /借書信息case 0:break; /退出會(huì)員管理,返回上一層菜單else if(m=0)cout<<endl<<"退出系統(tǒng)"<<endl;fpb2=fopen("book.txt","wb");for(p2=H->next;p2!=NULL;p2=p2->next)fwrite
40、(p2,sizeof(Book),1,fpb2);fclose(fpb2);fpm2=fopen("member.txt","wb");for(q2=L->next;q2!=NULL;q2=q2->next)fwrite(q2,sizeof(Member),1,fpm2);fclose(fpm2);exit(0);2. 圖書管理(1)增加圖書int BookAdd(BookList &H)/建立一個(gè)帶頭結(jié)點(diǎn)的鏈表用來(lái)存儲(chǔ)圖書信息int i=0;/統(tǒng)計(jì)要增加的圖書量Book *p,*q;p=(Book *)malloc(sizeof(B
41、ook);if(!p) exit(1);if(H->next=NULL)cout<<" 輸入圖書編號(hào):"cin>>p->num;if(p->num=0)/退出"增加圖書"cout<<" 共計(jì)"<<i<<"本圖書入庫(kù)!"<<endl;cout<<"="<<endl;return 1;cout<<" 輸入書名:"cin>>p->name;
42、p->yes=1;/1表示沒(méi)有借出p->next=NULL;H->next=p;q=p;+i;cout<<endl;elseq=H;while(q->next!=NULL)q=q->next;p->num=1; /進(jìn)入循環(huán)的條件p->next=NULL;while(p->num!=0)/以圖書編號(hào)作為判斷鏈表是否結(jié)束p=(Book *)malloc(sizeof(Book);if(!p) exit(1);cout<<" 輸入圖書編號(hào):"cin>>p->num;if(p->num=
43、0) /退出"增加圖書"cout<<" 共計(jì)"<<i<<"本圖書入庫(kù)!"<<endl;cout<<"="<<endl;break;cout<<" 輸入書名:"cin>>p->name;p->yes=1; /1表示沒(méi)有借出p->next=NULL;q->next=p;q=p;+i;cout<<endl;return 1;(2)查詢圖書按書名查詢int Search_B
44、ookName(BookList &H) /按書名查詢Book *p;p=H->next;char n80;int flag=0;cout<<" 輸入要查詢的書名:"cin>>n;for(;p!=NULL;p=p->next)if(strcmp(p->name,n)=0)if(flag=0)cout<<endl<<"編號(hào)"<<setw(12)<<" 書名 "<<setw(15)<<"是否借出"&
45、lt;<endl;cout<<p->num<<setw(15)<<p->name<<setw(15);if(p->yes=1)cout<<setw(15)<<"未借"<<endl;elsecout<<setw(15)<<"已借"<<endl;flag=1;continue;cout<<"="<<endl;if(p=NULL&&flag=0)cout<
46、;<" 沒(méi)有相關(guān)信息!"<<endl;cout<<"="<<endl;return 1;Book *Init_B()/初試化圖書鏈表Book *H;H=(Book *)malloc(sizeof(Book);if(!H) exit(1);H->next=NULL;return H;按編號(hào)查詢int Search_BookNum(BookList &H) /按編號(hào)查詢Book *p;p=H->next;long n;int flag=0;cout<<" 輸入要查詢的書的編號(hào)
47、:"cin>>n;for(;p!=NULL;p=p->next)if(n=p->num)if(flag=0)cout<<endl<<"編號(hào)"<<setw(12)<<" 書名 "<<setw(15)<<"是否借出"<<endl;cout<<p->num<<setw(15)<<p->name<<setw(15);if(p->yes=1)cout<<
48、;setw(15)<<"未借"<<endl;elsecout<<setw(15)<<"已借"<<endl;flag=1;continue;cout<<"="<<endl;if(p=NULL&&flag=0)cout<<" 沒(méi)有相關(guān)信息"<<endl;cout<<"="<<endl;return 1;查詢所有圖書信息int Search_AllB(Bo
49、okList &H) /查詢所有圖書信息Book *p;p=H->next;int i=0,flag=0;for(;p!=NULL;p=p->next)if(flag=0)cout<<endl<<"編號(hào)"<<setw(12)<<" 書名 "<<setw(15)<<"是否借出"<<endl;cout<<p->num<<setw(15)<<p->name<<setw(15);i
50、f(p->yes=1)cout<<setw(15)<<"未借"<<endl;elsecout<<setw(15)<<"已借"<<endl;flag=1;i+;cout<<" 共計(jì)"<<i<<"本書。"<<endl;cout<<"="<<endl;return 1;(3)刪除圖書int BookDel(BookList &H) /以圖書編號(hào)作
51、為主鍵進(jìn)行刪除Book *p;long n;int flag=0;p=H;cout<<" 輸入要?jiǎng)h除的書的編號(hào):"cin>>n;for(;p!=NULL;p=p->next)if(p->next!=NULL&&p->next->num=n)if(p->next->yes=0)cout<<"ERROR!當(dāng)前圖書被借出,不能刪除!"<<endl;cout<<"="<<endl;return 1;p->next=
52、p->next->next; /刪除語(yǔ)句cout<<" 成功刪除!"<<endl;cout<<"="<<endl;flag=1; /成功刪除標(biāo)記break;if(p=NULL&&flag=0)cout<<" 刪除不成功!"<<endl; /已經(jīng)被刪除或沒(méi)有這本書cout<<"="<<endl;return 1;(4)圖書借閱int BookBorrow(BookList &H,MemberList &L) /借閱時(shí)以編號(hào)作為主鍵Book *p,*s;Member *q;long m=1,num;int t=0,flag=0,max;cout<<" 輸入會(huì)員編號(hào):"cin>>num;if(Member_Y(L,num)=1)q=L;for(;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)工作流程中的數(shù)據(jù)分析應(yīng)用
- 水資源循環(huán)利用工程措施與進(jìn)度
- 基于七年級(jí)學(xué)情分析設(shè)置道德與法治議題的行動(dòng)研究-以阿克蘇地區(qū)拜城縣W中學(xué)為例
- 弟子規(guī)中家庭教育觀征文
- 現(xiàn)代服務(wù)業(yè)服務(wù)質(zhì)量管理知識(shí)點(diǎn)總結(jié)
- 數(shù)字技術(shù)助力控輟保學(xué)措施
- 新志愿者培訓(xùn)心得體會(huì)
- 2025年情侶戒指項(xiàng)目市場(chǎng)調(diào)查研究報(bào)告
- 城市規(guī)劃設(shè)計(jì)階段質(zhì)量控制措施
- 職業(yè)教育法與創(chuàng)新創(chuàng)業(yè)教育的結(jié)合心得體會(huì)
- 退休終止勞動(dòng)合同協(xié)議書
- 實(shí)驗(yàn)室質(zhì)量管理體系與試題
- 嬰幼兒期的食物過(guò)敏識(shí)別與管理考核試題及答案
- 基于S7-200 PLC及MCGS組態(tài)的蘋果分揀機(jī)系統(tǒng)控制設(shè)計(jì)
- 泥水平衡頂管施工工藝詳解
- 施工現(xiàn)場(chǎng)門禁管理制度
- 2025年新媒體職位面試題及答案
- 貴州企業(yè)招聘2024貴州金融控股集團(tuán)有限責(zé)任公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年城管考試題庫(kù)及答案
- 機(jī)場(chǎng)安檢員筆試題及答案
- 第16課《有為有不為》公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論