版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 槍械知識課件
- 2024-2025學(xué)年陜西省西安市蓮湖區(qū)高一下學(xué)期期中考試歷史試題(解析版)
- 2026年新聞媒體編輯部工作與職責(zé)模擬題
- 2026年大學(xué)英語四六級考試模擬卷與答案
- 2025 小學(xué)六年級道德與法治上冊家鄉(xiāng)文化的青春活力課件
- 關(guān)于重塑中國現(xiàn)代行政文化的研究行政管理本科畢業(yè)論文
- 木里木外培訓(xùn)
- 消防安全信息發(fā)布方案
- 心理健康教育知識講座
- 施工過程監(jiān)控與驗(yàn)收方案
- 就業(yè)部門內(nèi)控制度
- 2026屆江蘇省徐州市侯集高級中學(xué)高一上數(shù)學(xué)期末復(fù)習(xí)檢測試題含解析
- 飛行固模課件
- 2026中國電信四川公司校園招聘備考題庫附答案
- 住院患者安全告知
- 2026年短視頻合作合同
- 2025年山東省濟(jì)南市中考地理試題(含答案)
- 2025年秋譯林版(三起)(2024)小學(xué)英語三年級上冊期末檢測試卷及答案
- 2025年司機(jī)崗前培訓(xùn)試卷及答案
- 2025年村干部考試測試題及答案
- 水工金屬結(jié)構(gòu)制造安裝質(zhì)量檢驗(yàn)檢測規(guī)程(2025版)
評論
0/150
提交評論