C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)_第1頁
C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)_第2頁
C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)_第3頁
C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)_第4頁
C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第C語言數(shù)據(jù)結(jié)構(gòu)之圖書借閱系統(tǒng)本文實(shí)例為大家分享了C語言實(shí)現(xiàn)圖書借閱系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

/*****************************

@title:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)

@name:實(shí)驗(yàn)2-1線性表(順序表)的應(yīng)用--我的圖書館

@object:

[實(shí)驗(yàn)?zāi)康腯

應(yīng)用線性表解決問題.

有若干圖書,借出的書需要登記下來.

用兩個(gè)線性表分別保存現(xiàn)有圖書和借書信息,

并實(shí)現(xiàn)增加新書,借書,還書,打印等功能.

學(xué)習(xí)命令式程序界面的編寫方法.

[實(shí)驗(yàn)提示]

1.在book.h中描述了描述書的Book類型,還有

幾個(gè)有關(guān)函數(shù)函數(shù)可以調(diào)用.

2.在sqlist.h中完成順序表的各種操作.

3.借書時(shí),輸入書名,若有存書,則從存書表中

刪除,插入借書表.

4.還書時(shí),輸入書名,若借過此書,則從借書表

中刪除,插入存書表.

@include:

用到的頭文件

@usage:

請查看"TO-DO列表",根據(jù)要求完成代碼

@copyright:BTC2005,ZhuangBo

@author:ZhuangBo

@date:2005

@description:

*****************************************************/

#includecstdlib

#includeiostream

#includestdio.h

#includestdlib.h

usingnamespacestd;

#include"book.h"

#defineElemTypeBook

//使用Book作為線性表元素的類型

#include"sqlist.h"

SqLists;

//存書表

SqListb;

//借書表

voidSystemInitialize();

voidSystemTerminate();

voidSystemRun();

intmain(intargc,char*argv[])

SystemInitialize();

SystemRun();

SystemTerminate();

system("PAUSE");

return0;

voidSystemInitialize()

InitList(s);

InitList(b);

Bookmybooks[]={

{"CProgrammingLanguage"},

{"DataStructures"},

{"C++ProgrammingLanguage"},

{"EffactiveC++"},

{"MoreEffactiveC++"},

{"DesignPatterns"}

};

for(inti=0;ii++)

ListInsert(s,i,mybooks[i]);

voidSystemRun()

charGetCommand();

voidDoCommand(charcmd);

charcmd;

do{

cmd=GetCommand();

DoCommand(cmd);

}while(cmd!='q');

charGetCommand()

charstr[64];

printf("\na:新書b:借書r:還書p:打印q:退出\n");

printf(".");

//cin.getline(str,64);

read(str);

returnstr[0];

voidDoCommand(charcmd)

voidAddNewBook();

voidBorrowBook();

voidReturnBook();

voidPrintBookLists();

switch(cmd){

case'a':

AddNewBook();

break;

case'b':

BorrowBook();

break;

case'r':

ReturnBook();

break;

case'p':

PrintBookLists();

break;

case'q':

break;

default:

printf("命令錯(cuò)誤");

}

voidAddNewBook()

Bookabook;

printf("\n輸入新書名:");

ReadBook(abook);

if(ListInsert(s,1,abook))

printf("入庫成功");

else

printf("入庫失敗");

voidBorrowBook()

Bookabook;

intk;

printf("\n借書書名:");

ReadBook(abook);

k=LocateElem(s,abook,BookEqual);

if(k!=0){

//TODO(#1#):借書

ListDelete(s,k,abook);

ListInsert(b,k,abook);

//-------------------------------------

printf("\n借書成功");

}else

printf("\n查無此書");

voidReturnBook()

Bookabook;

intk;

printf("\n還書書名:");

ReadBook(abook);

k=LocateElem(b,abook,BookEqual);

if(k!=0){

//TODO(#1#):還書

ListInsert(s,k,abook);

ListDelete(b,k,abook);

//-------------------------------------

printf("\n還書成功");

}else

printf("\n查無此書");

voidPrintBookLists()

printf("庫存%d本書\n",ListLength(s));

ListTraverse(s,PrintBook);

printf("\n借出%d本書",ListLength(b)

);

ListTraverse(b,PrintBook);

voidSystemTerminate()

DestroyList(s);

DestroyList(b);

}

/*

Name:sqlist.h

Copyright:

Author:

Date:21-03-0520:21

Description:

#ifndefSQLIST_H_INCLUDED

#defineSQLIST_H_INCLUDED

#include"ds.h"http://forStatus,OK...

#ifndefElemType

#defineElemTypeint/*數(shù)據(jù)元素類型默認(rèn)為int*/

#defineELEMTYPE_TAG

#endif

/**********************************************************

*

順序表的存儲結(jié)構(gòu)定義

***********************************************************/

#defineLIST_INIT_SIZE100/*存儲空間初始分配容量*/

#defineLISTINCREMENT10/*存儲空間分配的增量*/

typedefstruct{

ElemType*elem;

//存儲空間基址

intlength;

//當(dāng)前長度

intlistsize;

//當(dāng)前已分配的存儲空間(元素個(gè)數(shù))

}SqList;

/**********************************************************

*

順序表的基本操作聲明

***********************************************************/

//創(chuàng)建并初始化為空表

StatusInitList(SqList

//銷毀整個(gè)表(從此之后不再可用)

StatusDestroyList(SqList

//將表L置空

StatusClearList(SqList

//判斷表L是否為空表

boolListEmpty(SqListL);

//求表L的長度

intListLength(SqListL);

//取表L中的第i個(gè)元素,并用e返回.操作成功返回OK,失敗時(shí)返回ERROR

StatusGetElem(SqListL,inti,ElemType

templatetypenameTboolequal(Ta,Tb)

returna==b;

//在表L中定位元素e首次出現(xiàn)的位置.操作成功返回位序,失敗時(shí)返回0

//

compare(a,b)為比較函數(shù),匹配時(shí)返回true,否則返回false

//

這里默認(rèn)使用equal進(jìn)行比較

intLocateElem(SqListL,ElemTypee,

bool(*compare)(ElemType,ElemType));

//在表L中插入第i個(gè)元素e.操作成功返回OK,失敗時(shí)返回ERROR

StatusListInsert(SqListL,inti,ElemTypee);

//刪除表L中第i個(gè)元素,結(jié)果用e返回.操作成功返回OK,失敗時(shí)返回ERROR

StatusListDelete(SqListL,inti,ElemType

//遍歷表L,對每個(gè)元素調(diào)用visit(x).

StatusListTraverse(SqListL,Status(*visit)(ElemType));

/**********************************************************

*

順序表的基本操作的實(shí)現(xiàn)

***********************************************************/

//創(chuàng)建并初始化為空表

StatusInitList(SqListL)

//TODO(#1#):創(chuàng)建空表

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

L.length=L.listsize=0;

L.listsize=LIST_INIT_SIZE;

returnOK;

//-------------------------------------

//銷毀整個(gè)表(從此之后不再可用)

StatusDestroyList(SqListL)

//TODO(#1#):銷毀表

if(L.elem){

free(L.elem);

returnOK;

}

else

returnERROR;

//-------------------------------------

//將表L置空

StatusClearList(SqListL)

//TODO(#1#):清空表

if(L.elem==NULL){

L.length=0;

returnOK;

}else

returnERROR;

//-------------------------------------

//判斷表L是否為空表

boolListEmpty(SqListL)

//TODO(#1#):順序表判空

if(L.length==0)

returnfalse;

elsereturnOK;

//-------------------------------------

//求表L的長度

intListLength(SqListL)

//TODO(#1#):求順序表長度

returnL.length;

//-------------------------------------

//取表L中的第i個(gè)元素,并用e返回.操作成功返回OK,失敗時(shí)返回ERROR

StatusGetElem(SqListL,inti,ElemTypee)

//TODO(#1#):取元素

if(i1||iL.length)

returnERROR;

e=L.elem[i-1];

returnOK;

//-------------------------------------

//在表L中定位元素e首次出現(xiàn)的位置.操作成功返回位序,失敗時(shí)返回0

//

compare(a,b)為比較函數(shù),匹配時(shí)返回true,否則返回false

intLocateElem(SqListL,ElemTypee,bool(*compare)(ElemType,ElemType))

//TODO(#1#):在表中定位元素e,用compare(a,b)匹配元素

for(intj=0;jL.length;j++)

if(compare(L.elem[j],e))

returnj+1;

return0;

//-------------------------------------

//在表L中插入第i個(gè)元素e.操作成功返回OK,失敗時(shí)返回ERROR

StatusListInsert(SqListL,inti,ElemTypee)

//TODO(#1#):在鏈表中插入元素

if(i1||iL.length+1)

returnERROR;

for(intj=L.length;jj--)

L.elem[j]=L.elem[j-1];

L.elem[i-1]=e;

L.

溫馨提示

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

評論

0/150

提交評論