數(shù)據(jù)結(jié)構(gòu)圖書管理系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)圖書管理系統(tǒng)_第2頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.數(shù) 據(jù) 結(jié) 構(gòu)課 程 設(shè) 計 說 明 書學生姓名:學 號:學院:專業(yè):題目:成績指導教師年 月 日1 設(shè)計目的(小標題黑體五號字)設(shè)計一個計算機管理系統(tǒng)完成圖書管理基本業(yè)務(wù)(數(shù)據(jù)可以存儲在一個數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)。2. 設(shè)計內(nèi)容和要求具體功能有:1)每種書的登記內(nèi)容包括書號、書名、著作者、出版單位、現(xiàn)存量和庫存量;2)對書號建立索引表(線性表)以提高查找效率;3)采編入庫:新購一種書,確定書號后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加;4)借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書證號和歸還期限,改變現(xiàn)存量;5)歸還:注銷對借閱者的登記,改變該書的

2、現(xiàn)存量。3本設(shè)計所采用的數(shù)據(jù)結(jié)構(gòu)所用數(shù)據(jù)結(jié)構(gòu):線性表、查找、排序鏈表:用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。以元素(數(shù)據(jù)元素的映象) + 指針(指示后繼元素存儲位置)= 結(jié)點(表示數(shù)據(jù)元素 或 數(shù)據(jù)元素的映象)以“結(jié)點的序列”表示線性表稱作線性鏈表(單鏈表)單鏈表是一種鏈式存取的結(jié)構(gòu),為找第 i 個數(shù)據(jù)元素必須先找到第 i-1 個數(shù)據(jù)元素。因此,查找第 i 個數(shù)據(jù)元素的基本操作為:移動指針,比較 j 和 i。(1)malloc(size)在內(nèi)存的動態(tài)存儲區(qū)申請一個長度為size字節(jié)的連續(xù)空間。(2)calloc(n,size)在內(nèi)存的動態(tài)存儲區(qū)申請n個長度為size字節(jié)的連續(xù)空間,函

3、數(shù)返回值為分配空間的首地址。若此函數(shù)未被成功執(zhí)行,函數(shù)返回值為0。(3)free(p)釋放由指針p所指向的存儲單元,而存儲單元的大小是最近一次調(diào)用malloc()或calloc()函數(shù)時所申請的存儲空間。運用了單鏈表的插入、刪除、排序、修改等一些操作!4 功能模塊詳細設(shè)計4.1 詳細設(shè)計思想(1) 基本思想:(2) 圖書信息錄入、圖書信息的查詢、圖書信息的排序、圖書信息的修改、圖書信息的刪除、圖書的借閱、圖書的歸還、退出圖書管理系統(tǒng)。(3) 程序中的主要函數(shù)有:void main() /主函數(shù)int CreateListR(LinkList *L) /尾插法建表void LocateElem(

4、LinkList *L) /查詢 int Sort(LinkList *L) /遞增有序排序(直接插入排序法)void Display(LinkList *L) /輸出排序結(jié)果ModifyList(LinkList *L) /修改int ListDelete(LinkList *L) /刪除 void Borrow(LinkList *L) /借閱void Return(LinkList *L) /歸還圖書信息的錄入添加圖書信息的查詢模塊圖書信息的排序模塊圖書信息的修改模塊圖書信息的刪除模塊圖書的借閱模塊圖書的歸還模塊退出圖書管理系統(tǒng)圖 書 管 理 系 統(tǒng)主 程 序 模 塊4.2 核心代碼*i

5、nclude <stdio.h>*include <string.h>*include<stdlib.h>*include<malloc.h>typedef struct int num;char name20;char author20;char press20;int count;char price10; ElemType;typedef struct LNode/定義單鏈表結(jié)點類型ElemType data;struct LNode *next; LinkList;void InitList(LinkList *L) /初始化線性表L =

6、 (LinkList *) malloc(sizeof(LinkList); /創(chuàng)建頭結(jié)點L->next = NULL;int CreateListR(LinkList *L) /尾插法建表int i, n;LinkList *s, *q, *p;p = L;while (p->next != NULL )p = p->next;printf("請輸入需要錄入的圖書信息的個數(shù):n=");scanf("%d", &n);for (i = 1; i < n + 1; i+) s = (LinkList *) malloc(si

7、zeof(LinkList);printf("書號 書名 作者 出版社名稱 存館數(shù)量 定價n");scanf("%d%s%s%s%d%s", &s->data.num, s->, s->data.author,s->data.press, &s->data.count, s->data.price);q = L->next;if (q = NULL ) p->next = s;p = s;p->next = NULL;printf("錄入成功!n"

8、);continue;while (q != NULL ) if (strcmp(s->, q->) = 0) printf("此圖書已存在!");printf("請重新輸入:n");scanf("%d%s%s%s%d%s", &p->data.num, p->,p->data.author, p->data.press, &p->data.count,p->data.price);q = q->next;p-&

9、gt;next = s;p = s;p->next = NULL;printf("錄入成功!n");return 0;void LocateElem(LinkList *L) /查詢LinkList *p = L->next; /p指向第一個數(shù)據(jù)結(jié)點int c;int x = 0;char name110, author110, press110;printf(" 1 按書名查詢:n");printf(" 2 按作者名查詢:n");printf(" 3 按出版社名稱:n");printf("

10、4 返回n");printf(" 請選擇1-4進行操作:n");scanf("%d", &c);if (c > 4 | c < 1) printf("您的輸入有誤!n");scanf("%d", &c);switch (c) case 1:printf("請輸入圖書書名: n");scanf("%s", name1);while (p != NULL ) if (strcmp(name1, p->) != 0) /

11、查找圖書書名p = p->next;else printf("書號 書名 作者 出版社名稱 存館數(shù)量 定價n");printf("%dt%st%st%st%dt%s", p->data.num, p->,p->data.author, p->data.press, p->data.count,p->data.price);printf("n");p = p->next;x+;if (p = NULL && x = 0)printf("對不起,不

12、存在此圖書!n");break;case 2:printf("請輸入圖書作者:n");scanf("%s", author1);while (p != NULL ) if (strcmp(author1, p->data.author) != 0) /查找圖書作者p = p->next;else printf("書號 書名 作者 出版社名稱 存館數(shù)量 定價n");printf("%dt%st%st%st%dt%s", p->data.num, p->,p->

13、data.author, p->data.press, p->data.count,p->data.price);printf("n");p = p->next;x+;if (p = NULL && x = 0)printf("對不起,不存在此圖書!n");break;case 3:printf("請輸入圖書的出版社名稱: n");scanf("%s", press1);while (p != NULL ) if (strcmp(press1, p->data.pres

14、s) != 0) /查找圖書出版社名稱p = p->next;else printf("書號 書名 作者 出版社名稱 存館數(shù)量 定價n");printf("%d %s %s %s %d %s",p->data.num, p->, p->data.author,p->data.press, p->data.count, p->data.price);printf("n");p = p->next;x+;if (p = NULL && x = 0)print

15、f("對不起!不存在此圖書n");break;case 4:break;int Sort(LinkList *L) /遞增有序排序(直接插入排序法)LinkList *p = L->next, *q, *r; /p指向第一個數(shù)據(jù)結(jié)點if (p != NULL ) /若原單鏈表中有一個或以上的數(shù)據(jù)結(jié)點r = p->next; /r保存*p結(jié)點直接后繼結(jié)點的指針p->next = NULL; /構(gòu)造只含一個數(shù)據(jù)結(jié)點的有序表p = r;while (p != NULL ) r = p->next; /r保存*p結(jié)點的直接后繼結(jié)點的指針q = L;while

16、 (q->next != NULL && q->next->data.num < p->data.num)q = q->next; /在有序表中找插入*p的直接前驅(qū)結(jié)點*q的位置p->next = q->next; /將*p插入到*q之后q->next = p;p = r; /掃描原單鏈表余下的結(jié)點return 0;void Display(LinkList *L) /輸出排序結(jié)果LinkList *p = L->next;while (p != NULL ) printf("書號 書名 作者 出版社名稱 存

17、館數(shù)量 定價n");printf("%d t %s t %st %st%dt %s", p->data.num,p->, p->data.author, p->data.press, p->data.count,p->data.price);printf("n");p = p->next;int ModifyList(LinkList *L) /修改LinkList *p = L;char name110;printf("請輸入要修改的圖書的書名:n");scanf

18、("%s", name1);while (p != NULL ) if (strcmp(name1, p->) = 0) /查找所要修改的書名printf("請輸入修改后的信息!n");printf("書號 書名 作者 出版社名稱 存館數(shù)量 定價n");scanf("%d%s%s%s%d%s", &p->data.num, p->, p->data.author,p->data.press, &p->data.count, p-

19、>data.price);printf("修改成功!n");return 0;p = p->next;printf("不存在此圖書n");return 0;int ListDelete(LinkList *L) /刪除LinkList *p = L->next, *q = L;char name110;if (p != NULL ) printf("請輸入要刪除的書名:");scanf("%s", name1);while (p->next != NULL && strcmp

20、(p->, name1) != 0) p = p->next;q = q->next;if (p->next != NULL ) /如果p此時不是最后一個節(jié)點,說明此時已經(jīng)找到書q->next = p->next;printf("刪除成功!n");return 0;if (p->next = NULL && strcmp(name1, p->) != 0) /如果p此時為最后一個結(jié)點并且沒有找到與之相符的書名printf("你輸入的書名不存在,請核實后重新輸入!n&

21、quot;); else q->next = NULL;printf("刪除成功!n");return 0;void Borrow(LinkList *L) /借閱LinkList *p = L->next;char name110;printf("請輸入要借閱的圖書的書名:n");scanf("%s", name1);while (p->next != NULL && strcmp(name1, p->) != 0)p = p->next;if (p->next

22、= NULL && strcmp(name1, p->) != 0)printf("此圖書不存在!n");else if (p->data.count < 1)printf("此書已借完!n");else if (strcmp(name1, p->) = 0) printf("借書成功!n");p->data.count-;void Return(LinkList *L) /歸還LinkList *p = L->next;char name110;

23、printf("輸入歸還書的書名: n");scanf("%s", name1);while (p->next != NULL && strcmp(name1, p->) != 0)p = p->next;if (p->next = NULL && strcmp(name1, p->) != 0)printf("錯誤!此圖書不存在!n");else if (strcmp(name1, p->) = 0) printf("該書歸還成功!n");p->data.count+;void menu() /菜單函數(shù)printf("- n");printf(" 歡迎光臨圖書管理系統(tǒng)! n");printf("- n");printf("1.圖書信息錄入添加功能:n");printf("2.圖書信息查詢功能:n&

溫馨提示

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

評論

0/150

提交評論