图书馆要设计一个图书借阅系统,其功能包括: 3.2.1 借书:查询库存后,返回有无此书信息给读者,如有书

图书馆要设计一个图书借阅系统,其功能包括: 3.2.1 借书:查询库存后,返回有无此书信息给读者,如有书,第1张

#include<stdioh>

#include<conioh>

#include<stdlibh>

#include<stringh>

#include<windowsh>

#define N 100

struct shu

{

int id;

char name[200];

char name2[200];

char isyes[200];

}shu[N]={{1,"小时代","郭敬明","否"},{2,"三重门","韩寒","否"},{3,"安徒生","安徒生","否"},{4,"C程序","谭浩强","否"}};

static int shuNum=4;//当前书的总数

static int maxid=4;//当前大的编号

void huanying();

void caidan();

void xuanzhe();

void jie();

void huan();

void cha();

void jia();

void shan();

void anid();

int shuIsEmpty(int);

void yanshe();

void xiugai();

void zuozhe();

void shezhi();

int getTime();

int main()

{

char a;

system("color F0");

huanying();

printf("输入Y或y退出");

caidan();

xuanzhe();

a=getch();

if(a=='y'||a=='Y')

{

system("exit");

}

return 0;

}

void caidan()

{

int a;

system("cls");

printf("\n\n\n\t\t★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");

printf("\t\tΟ Ο\n");

printf("\t\tΟ Ο\n");

printf("\t\tΟ 1借书 Ο\n");

printf("\t\tΟ 2还书 Ο\n");

printf("\t\tΟ 3增加图书 Ο\n");

printf("\t\tΟ 4删除图书 Ο\n");

printf("\t\tΟ 5查书 Ο\n");

printf("\t\tΟ 6修改图书信息 Ο\n");

printf("\t\tΟ 7系统设置 Ο\n");

printf("\t\tΟ Ο\n");

printf("\t\tΟ Ο\n");

printf("\t\t★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");

printf("\n\n\n\t\t\t\t\t\t\t请选择_________");

a=getch();

system("cls");

switch (a)

{

case '1':

jie();

break;

case '2':

huan();

break;

case '3':

jia();

break;

case '4':

shan();

break;

case '5':

cha();

break;

case '6':

xiugai();

break;

case'7':

shezhi();

break;

}

}

void xuanzhe()//选择

{

}

void jie()//借书

{

int id=0;

int i;

char is;

do

{

printf("请输入要借图书ID号:\n");

scanf("%d",&id);

fflush(stdin);

for(i=0;i<4;i++)

{

if(shu[i]id==id)

{

strcpy((shu[i]isyes),"是");

printf("借书成功!\n");

break;

}

}

if(id>maxid)

{

printf("借书失败\n");

}

printf("\n\n\n\t\t\t\t\t\t是否继续(Y/N)");

is=getchar();

}while(is=='Y'||is=='y');

system("cls");

cha();

}

void huan()//还书

{

int id=0;

int i;

char is;

char isyes=1;

do

{

id=0;

printf("请输入归还图书的ID号:\n");

scanf("%d",&id) ;

fflush(stdin);

for(i=0;i<maxid;i++)

{

if(shu[i]id==id)

{

strcpy((shu[i]isyes),"否");

isyes=0;

break;

}

}

if (isyes==0)

{

printf("还书成功\n");

}

else

{

printf("还书失败\n");

}

printf("\n\n\n\t\t\t\t\t\t是否继续(Y/N)");

is=getchar();

system("cls");

isyes=1;

}while(is=='Y'||is=='y');

system("cls");

cha();

}

void cha()//查看书

{

int i=0;

int b;

system("cls");

printf("书按ID排序:按任意键进入");

b=getch();

system("cls");

switch (b)

{

case '1':

anid();

break;

}

printf("\n\n\t\t\t\t______图书信息列表______\n\n\n");

printf("\t\t编号\t\t书名\t\t作者\t\t借阅情况\n");

for(;i<shuNum;i++)

{

printf("\n\n\t\t%d\t\t%s\t\t%s\t\t%s\n",shu[i]id,shu[i]name,shu[i]name2,shu[i]isyes);

}

printf("\n\n\t按任意键返回选单");

getch();

system("cls");

caidan();

}

void jia()//增加书

{

int index=0;

char is;

do

{

index=shuNum;

system("cls");

printf("\n\n\t\t---------增加图书---------\n");

printf("\t\t请输入书名:");

scanf("%s",&shu[index]name);

fflush(stdin);

printf("\n\t\t请输入作者:");

scanf("%s",&shu[index]name2);

fflush(stdin);

strcpy((shu[index]isyes),"否");

maxid++;

shu[index]id=maxid;

shuNum++;

printf("\n\n\n\t\t\t\t\t\t是否继续(Y/N)");

is=getchar();

fflush(stdin);

}while(is=='Y'||is=='y');

system("cls");

cha();

}

void shan()//删书

{

int index,i,j;

system("cls");

printf("\n\n\t\t-----------图书删除页面----------\n");

printf("请输入要删除的图书的编号:____");

scanf("%d",&index);

fflush(stdin);

i=shuis(index);

if(i!=-1)

{

for(j=i;j<shuNum;j++)

{

shu[j]=shu[j+1];

}

shuNum--;

}

cha();

}

int shuis(int index)//删书的一点

{

int i=0;

for(;i<shuNum;i++)

{

if(shu[i]id==index)

return i;

}

return -1;

}

void anid()//按id排序

{

int i,j;

struct shu temp;

for(i=0;i<shuNum;i++)

{

for(j=0;j<shuNum-i-1;j++)

{

if(shu[j]id>shu[j+1]id)

{

temp=shu[j];

shu[j]=shu[j+1];

shu[j+1]=temp;

}

}

}cha();

}

void xiugai()//修改书信息

{

int index=0;

int i=0;

char is='n';

do

{

system("cls");

printf("请输入修改图书的ID号:\n");

scanf("%d",&index);

fflush(stdin);

i=shuno(index);

if(i!=-1)

{

printf("\t\t请输入书名:");

scanf("%s",&shu[index-1]name);

fflush(stdin);

printf("\n\t\t请输入作者:");

scanf("%s",&shu[index-1]name2);

fflush(stdin);

strcpy((shu[index-1]isyes),"否");

}

else

{

printf("\n\n\t\t\t编号错误\n");

}

printf("\n\n\n\t\t\t\t\t\t是否继续(Y/N)");

is=getchar();

}while(is=='Y'||is=='y');

system("cls");

cha();

}

int shuno(int index)//改书的一点

{

int i=0;

for(;i<shuNum;i++)

{

if(shu[i]id==index)

return i;

}

return -1;

}

void yanshe()//颜色

{

int a;

system("cls");

printf("\n\n\t\t请选择系统背景及字体颜色\n");

printf("\t\t1背景:灰色\t字体:白色\n");

printf("\t\t1背景:浅绿色\t字体:黑色\n");

printf("\t\t3默认背景:白色\t字体:黑色\n");

printf("\n\n\t\t\t\t\t\t请选择:____");

a=getch();

switch (a)

{

case '3':

system("color F0");

break;

case '1':

system("color 87");

break;

case '2':

system("color B0");

break;

}system("pause");

system("cls");

caidan();

}

void huanying()//欢迎界面

{

printf ("\n\n\n");

printf ("\t\t┏━━━━━━☆☆☆☆☆☆☆☆☆☆☆☆☆━━━━━━┓\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ★★★★★★★★★★★★★★★★★ ┃\n");

printf ("\t\t┃ ★ ★ ┃\n");

printf ("\t\t┃ ★ 图书管理系统 ★ ┃\n");

printf ("\t\t┃ ★ ★ ┃\n");

printf ("\t\t┃ ★★★★★★★★★★★★★ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ‖ 欢迎使用 ‖ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

printf ("\n\n\t\t\t\t请按任意键进入 *** 作界面");

getch();

}

void zuozhe()//作者信息

{

int a;

system("cls");

printf ("\n\n\n");

printf ("\t\t┏━━━━━━☆☆☆☆☆☆☆☆☆☆☆☆☆━━━━━━┓\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┃ ★★★ 图书管理系统 ★★★ ┃\n");

printf ("\t\t┃ 作者: ┃\n");

printf ("\t\t┃ 最新开发日期 ┃\n");

printf ("\t\t┃ 特别鸣谢: ┃\n");

printf ("\t\t┃ ┃\n");

printf ("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

printf ("\n\n\t\t\t\t请按任意键进入系统设置界面");

system("pause");

caidan();

}

void shezhi()

{

int a;

printf("\n\n\t\t1系统颜色设置\n");

printf("\n\n\t\t2作者信息\n");

printf("\n\n\t\t3系统当前时间\n");

printf("\n\n\t\t\t\t请选择:_______");

a=getch();

switch(a)

{

case'1':

yanshe();

break;

case '2':

zuozhe();

break;

case '3':

system("cls");

getTime();

system("pause");

caidan();

break;

}

}

int getTime() //加载时间

{

char str[100];

time_t t;

struct tm lt;

t = time(NULL);

lt = localtime(&t);

strftime(str,100,"%H:%M:%S ",lt);

printf("\n\n\n\n\n\t\t\t当前日期及时间是:%s\n",str);

return 0;

}

#ifndef _DATA_STRUCT_H_

#define _DATA_STRUCT_H_

/图书结构/

struct Book

{

unsigned long BookID;/图书编号/

char BookName[512];/书名/

char Writer[512];/作者/

int CurrentNumber;/现存量/

Book pNext;/下一个图书信息/

};

/图书索引结构/

struct Index

{

unsigned long BookID;/图书编号/

Index pNext;/下一个索引指针/

};

/借阅信息结构/

struct Borrow

{

unsigned long BookID;/借阅图书编号/

char BookName[512];/书名/

unsigned long StuID;/图书证号/

char ReturnTime[512];/归还日期/

Borrow pNext;/下一个借阅信息/

};

#endif/_DATA_STRUCT_H_/

// BookManagecpp : 定义控制台应用程序的入口点。

#include <stdioh>

#include <stdlibh>

#include <stringh>

#include <timeh>

//#include "DataStructh"

/获取输入字符串/

void GetInput(char pInOutStr,int StrLen,bool OnlyGetNumber = false);

/显示主菜单 并返回选择/

int ShowMainMenu();

/图书入库 *** 作,传入参数为图书列表头指针的指针和索引信息的头指针的指针,因为在此函数内部可能会改变头指针的值/

void PutBookInLib(Book pHead,Index pIndex);

/查询图书馆库存,查询不改变数据,故传入指针即可/

void QueryBookLib(Book pHead);

/借阅图书/

void BorrowBook(Borrow pBorrow,Book pHead);

/查询借阅/

void QueryBorrow(Borrow pBorrow);

/归还图书/

void ReturnBook(Borrow pBorrow,Book pHead);

/释放图书链表及索引链表及借阅信息链表/

void DeleteBookList(Book pHead);

void DeleteIndexList(Index pIndex);

void DeleteBorrowList(Borrow pBorrow);

int main()

{

/图书列表头指针/

Book pBookHead = NULL;

/图书索引头指针/

Index pIndexHead = NULL;

/借阅信息头指针/

Borrow pBorrowHead = NULL;

/用来保存当前用户的输入/

int ChoosedNum = -1;

while ( true )

{

ChoosedNum = ShowMainMenu();/显示主菜单 并返回选择/

switch(ChoosedNum)

{

case 0 :/退出/

{

return 0;

break;

}

case 1:/图书入库/

{

PutBookInLib(&pBookHead,&pIndexHead);/图书入库 *** 作/

break;

}

case 2:/查询库存/

{

QueryBookLib(pBookHead);/查询图书馆库存/

printf("按回车键继续");

fflush(stdin);

getchar();

system("cls");

break;

}

case 3:/借阅图书/

{

QueryBookLib(pBookHead);/查询图书馆库存/

BorrowBook(&pBorrowHead,pBookHead); /借阅图书/

break;

}

case 4:/查询借阅/

{

QueryBorrow(pBorrowHead);/查询借阅/

printf("按回车键继续");

fflush(stdin);

getchar();

system("cls");

break;

}

case 5:/归还图书/

{

QueryBorrow(pBorrowHead);/查询借阅/

ReturnBook(&pBorrowHead,pBookHead);/归还图书/

break;

}

}

}

/释放图书链表及索引链表及借阅信息链表/

DeleteBookList(&pBookHead);

DeleteIndexList(&pIndexHead);

DeleteBorrowList(&pBorrowHead);

fflush(stdin);

getchar();

return 0;

}

/获取输入字符串/

void GetInput(char pInOutStr,int StrLen,bool OnlyGetNumber)

{

memset(pInOutStr,0,StrLen);

fflush(stdin);

int Count = 0;

while ( true )

{

char TmpC = 0;

fread(&TmpC,1,1,stdin);

if ( 10 == TmpC )

{

break;

}

if ( OnlyGetNumber && TmpC >= '0' && TmpC <= '9' )

{

pInOutStr[Count] = TmpC;

Count++;

}

else

{

pInOutStr[Count] = TmpC;

Count++;

}

}

}

/显示主菜单 并返回选择/

int ShowMainMenu()

{

char InPutStr[1024];

NO_INPUT:

printf("\n\n\n");

printf("\n");

printf(" 图书管理系统 \n");

printf("\n");

printf("\n");

printf("请选择:\n");

printf("\t1图书入库\n");

printf("\t2查询库存\n");

printf("\t3借阅图书\n");

printf("\t4查询借阅\n");

printf("\t5归还图书\n");

printf("\t0退出\n");

printf("\n");

printf("\t输入 : ");

GetInput(InPutStr,1024,true); /获取输入字符串/

if ( strlen(InPutStr) < 1 )

{

system("cls");

goto NO_INPUT;

}

return atoi(InPutStr);//将字符串转换成一个整数值

}

/图书入库 *** 作/

void PutBookInLib(Book pHead,Index pIndex)

{

Book pWork = pHead;

unsigned long BookID = 1;

char InPutStr[1024];

/先计算处当前入库图书的ID号/

if ( NULL == pWork )

{

BookID = 1;

}

else

{

while ( pWork->pNext != NULL )

{

pWork = pWork->pNext;

}

BookID = pWork->BookID + 1;

}

Book pTmpNewBook = (Book )(malloc(sizeof(Book)));

memset(pTmpNewBook,0x0,sizeof(Book));

Index pTmpIndex = (Index )(malloc(sizeof(Index)));

memset(pTmpIndex,0x0,sizeof(Index));

pTmpNewBook->BookID = BookID;

pTmpIndex->BookID = BookID;

system("cls");

printf("输入图书名称 : ");

GetInput(InPutStr,1024);

strcpy(pTmpNewBook->BookName,InPutStr);//对字符串复制

system("cls");

printf("<<%s>>\n",pTmpNewBook->BookName);

printf("图书作者 : ");

GetInput(InPutStr,1024);

strcpy(pTmpNewBook->Writer,InPutStr);

system("cls");

printf("<<%s>>\n",pTmpNewBook->BookName);

printf("作者:%s\n",pTmpNewBook->Writer);

printf("入库数量 : ");

GetInput(InPutStr,1024,true);

pTmpNewBook->CurrentNumber = atoi(InPutStr);

if ( pTmpNewBook->CurrentNumber < 1 )

{

system("cls");

printf("入库数量错误!(按回车键继续)");

fflush(stdin);

getchar();

system("cls");

return;

}

if ( NULL == pHead )

{

pHead = pTmpNewBook;

pIndex = pTmpIndex;

}

else

{

Book pWork = pHead;

while ( pWork != NULL )

{

if ( strcmp(pWork->BookName,pTmpNewBook->BookName) == 0 && strcmp(pWork->Writer,pTmpNewBook->Writer) == 0 )

{

pWork->CurrentNumber += pTmpNewBook->CurrentNumber;

return;

}

pWork = pWork->pNext;

}

pWork = pHead;

while ( pWork->pNext != NULL )

{

pWork = pWork->pNext;

}

pWork->pNext = pTmpNewBook;

Index pWork2 = pIndex;

while ( pWork2->pNext != NULL )

{

pWork2 = pWork2->pNext;

}

pWork2->pNext = pTmpIndex;

}

system("cls");

printf("图书:<<%s>>\n作者:%s\n入库数:%d\n\n入库 *** 作成功!(按回车键继续)",pTmpNewBook->BookName,pTmpNewBook->Writer,pTmpNewBook->CurrentNumber);

fflush(stdin);

getchar();

system("cls");

}

/释放图书链表及索引链表/

void DeleteBookList(Book pHead)

{

Book pWork = pHead;

Book pNext = pWork;

while ( NULL != pWork )

{

pNext = pWork->pNext;

free(pWork);

pWork = pNext;

}

}

void DeleteIndexList(Index pIndex)

{

Index pWork = pIndex;

Index pNext = pWork;

while ( NULL != pWork )

{

pNext = pWork->pNext;

free(pWork);

pWork = pNext;

}

}

void DeleteBorrowList(Borrow pBorrow)

{

Borrow pWork = pBorrow;

Borrow pNext = pWork;

while ( NULL != pWork )

{

pNext = pWork->pNext;

free(pWork);

pWork = pNext;

}

}

/查询图书馆库存,查询不改变数据,故传入指针即可/

void QueryBookLib(Book pHead)

{

Book pWork = pHead;

int TotalCount = 0;

while ( NULL != pWork )

{

TotalCount++;

pWork = pWork->pNext;

}

system("cls");

printf("当前库存共%d种图书,列表如下:\n=====================================================\n",TotalCount);

pWork = pHead;

while ( NULL != pWork )

{

printf("编号:[%d] 书名:<<%s>> 作者:%s 当前库存:%d\n",pWork->BookID,pWork->BookName,pWork->Writer,pWork->CurrentNumber);

pWork = pWork->pNext;

}

printf("=====================================================\n",TotalCount);

}

/借阅图书/

void BorrowBook(Borrow pBorrow,Book pHead)

{

char InPutStr[1024];

bool HadTheBook = false;

Borrow pTmpBorrow = (Borrow )(malloc(sizeof(Borrow)));

memset(pTmpBorrow,0x0,sizeof(Borrow));

printf("请输入你想借书的编号 : ");

GetInput(InPutStr,1024,true);

pTmpBorrow->BookID = atoi(InPutStr);

Book pWorkBook = pHead;

while ( pWorkBook != NULL )

{

if ( pWorkBook->BookID == pTmpBorrow->BookID )

{

HadTheBook = true;

break;

}

pWorkBook = pWorkBook->pNext;

}

if ( HadTheBook )

{

if ( pWorkBook->CurrentNumber < 1 )

{

system("cls");

printf("图书<<%s>>当前无库存,无法借阅!\n(按回车键继续)",pWorkBook->BookName);

fflush(stdin);

getchar();

system("cls");

free(pTmpBorrow);

return;

}

}

else

{

system("cls");

printf("图书编号%d不存在!\n(按回车键继续)",pTmpBorrow->BookID);

fflush(stdin);

getchar();

system("cls");

free(pTmpBorrow);

return;

}

strcpy(pTmpBorrow->BookName,pWorkBook->BookName);

printf("请输入借书证号 : ");

GetInput(InPutStr,1024,true);

pTmpBorrow->StuID = atoi(InPutStr);

if ( 0 == pTmpBorrow->StuID )

{

system("cls");

printf("借书证号不存在(借书证号输入整数)!\n(按回车键继续)");

fflush(stdin);

getchar();

system("cls");

free(pTmpBorrow);

return;

}

time_t ltime;

struct tm today;

time(<ime);

ltime += 60 60 24 30;

today = localtime(<ime);

sprintf(pTmpBorrow->ReturnTime,"%d年%d月%d日", today->tm_year+1900,today->tm_mon+1,today->tm_mday);

if ( pBorrow == NULL )

{

pBorrow = pTmpBorrow;

}

else

{

Borrow pWork = pBorrow;

while ( NULL != pWork->pNext )

{

pWork = pWork->pNext;

}

pWork->pNext = pTmpBorrow;

}

pWorkBook->CurrentNumber--;

system("cls");

printf("借书证号:%d\n借阅图书:<<%s>>\n\n *** 作成功!(按回车键继续)",pTmpBorrow->StuID,pTmpBorrow->BookName);

fflush(stdin);

getchar();

system("cls");

}

/查询借阅/

void QueryBorrow(Borrow pBorrow)

{

Borrow pWork = pBorrow;

int TotalCount = 0;

while ( NULL != pWork )

{

TotalCount++;

pWork = pWork->pNext;

}

system("cls");

printf("当前借阅信息共%d条,列表如下:\n=====================================================\n",TotalCount);

pWork = pBorrow;

while ( NULL != pWork )

{

printf("借数证号:[%d] 借书名:<<%s>> 图书编号:%d 归还日期:%s\n",pWork->StuID,pWork->BookName,pWork->BookID,pWork->ReturnTime);

pWork = pWork->pNext;

}

printf("=====================================================\n",TotalCount);

}

/归还图书/

void ReturnBook(Borrow pBorrow,Book pHead)

{

char InPutStr[1024];

Borrow TmpBorrow;

bool HasFindBorrwo = false;

memset(&TmpBorrow,0x0,sizeof(TmpBorrow));

printf("请输入借书证号 : ");

GetInput(InPutStr,1024,true);

TmpBorrowStuID = atoi(InPutStr);

printf("请输入所还图书编号 : ");

GetInput(InPutStr,1024,true);

TmpBorrowBookID = atoi(InPutStr);

Borrow pWorkBorrow = pBorrow;

Borrow pDeletePre = NULL;

while ( NULL != pWorkBorrow )

{

if ( pWorkBorrow->BookID == TmpBorrowBookID && pWorkBorrow->StuID == TmpBorrowStuID )

{

HasFindBorrwo = true;

break;

}

pDeletePre = pWorkBorrow;

pWorkBorrow = pWorkBorrow->pNext;

}

if ( ! HasFindBorrwo )

{

system("cls");

printf("你输入的借书信息不存在!\n(按回车键继续)");

fflush(stdin);

getchar();

system("cls");

return;

}

if ( NULL == pDeletePre )

{

pBorrow = pWorkBorrow->pNext;

}

else

{

pDeletePre->pNext = pWorkBorrow->pNext;

}

Book pWorkBook = pHead;

while ( NULL != pWorkBook )

{

if ( pWorkBook->BookID == pWorkBorrow->BookID )

{

pWorkBook->CurrentNumber ++;

}

pWorkBook = pWorkBook->pNext;

}

system("cls");

printf("借书证号:%d\n归还图书:<<%s>>\n\n *** 作成功!(按回车键继续)",pWorkBorrow->StuID,pWorkBorrow->BookName);

fflush(stdin);

getchar();

system("cls");

free(pWorkBorrow);

}

#include <stdioh>

#include <stringh>

#include <stdlibh>

//

#define MAXSIZE 100 //最大值定义为100

#define LIST_INIT_SIZE 100//图书证使用者最大值定义为100

//借书人的结构体

typedef struct Boro//借书行为

{

char BNum[20];//借书的书号

char RetDate[8];//归还日期

struct Boro next;

}Bor;

typedef struct LinkBook

{

Bor next;//该图书证的借书行为

char CNum[20];//证号

int Total;//借书的数量

}lend[LIST_INIT_SIZE];//借书人数组

//图书的结构体信息

typedef struct LNode

{

char CardNum[20];//图书证号

struct LNode next;

}LinkList; //借书人

typedef struct book

{//每种图书需要登记的内容包括书号ISBN、书名、作者、出版社、总库存量和现库存量。

char num[20];//书号

char name[20];//书名

char auth[20];//作者

char pub[20];//出版社

int TotNum;//总库存

int NowNum;//现库存

LinkList next;//借了该书的人

}ook[MAXSIZE];

//

int Retotal;//读者数量

int total; //定义外部变量书的种类数

//

//结构体初始化

void InitBo(ook &boo) //初始化图书信息

{

for(int i=0;i<MAXSIZE;i++)

{

boo[i]NowNum=0;

boo[i]TotNum=0;

boo[i]next=NULL;

}

}

void InitRe(lend &Lin) //初始化借阅者信息

{

for(int i=0;i<LIST_INIT_SIZE;i++)

Lin[i]next=NULL;

}

//

int mid=0;//外部函数mid,用来返回查找到的位置

bool BinarySearch(ook boo,char SearchNum[]) //二分法查找比较书号

{ //用bool函数,但由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位置

int low=0,high=total-1;

int found=0;

while(low<=high)

{

mid=(low+high)/2; //中间点

if(strcmp(boo[mid]num,SearchNum)==0) //书号相同

{

found=1;

return true;

}//查找成功

if(strcmp(boo[mid]num,SearchNum)!=0)//书号不同

high=mid-1;

else low=mid+1;

}

if(found==0)

return false; //查找失败

}

void Buy(ook &boo, char BuyNum[])

{//1、 采编入库:新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包

//括总库存量和现库存量),如果该书不存在,则在图书账目中增加一种书,总库存量和现库存量均为1。

if(BinarySearch(boo,BuyNum)) //如果书库中有此书

{

boo[mid]TotNum++; //总库存加1

boo[mid]NowNum++; //现库存加1

printf("入库成功\n");

printf("已更改书库中该书的信息。编号 %s 的书 %s 作者是 %s ,出版社是 %s ,目前的总库存是 %d ,现库存是 %d 。\n",boo[mid]num,boo[mid]name,boo[mid]auth,boo[mid]pub,boo[mid]TotNum,boo[mid]NowNum);

}

if(!BinarySearch(boo,BuyNum))

{

for(int i=total;i>mid&&total;i--) //插在适合位置 保持有序

boo[i]=boo[i-1]; //空出插入位置

printf("该书在书库中不存在。设立新书目,请补全书的详细信息。\n");

strcpy(boo[i]num,BuyNum);

printf("该书购入的数量是:");

scanf(" %d",&boo[i]NowNum);

boo[i]TotNum=boo[i]NowNum;

printf("该书的名字是:");

scanf(" %s",&boo[i]name);

printf("该书的作者是:");

scanf(" %s",&boo[i]auth);

printf("该书的出版社是:");

scanf(" %s",&boo[i]pub);//补全信息

boo[i]next=NULL;

total++;//总量+1

printf("已增加该书的信息。编号 %s 的书 %s 作者是 %s ,出版社是 %s ,目前的总库存是 %d ,现库存是 %d 。\n",boo[i]num,boo[i]name,boo[i]auth,boo[i]pub,boo[i]TotNum,boo[i]NowNum);

printf("入库成功\n");

}

}

void Delete(ook &boo,char DeleteNum[])

{//2、 清空库存:某一种书已无保留价值,将它从图书账目中注销。

if(BinarySearch(boo,DeleteNum)==false||total==0) //如果无此书

printf("书库中没有该书\n");

if(BinarySearch(boo,DeleteNum))//若有

{

if(!boo[mid]next)

{

for(int j=mid;j<total;j++)

boo[j]=boo[j+1];

strcpy(boo[j]num,boo[j+1]num);

strcpy(boo[j]name,boo[j+1]name);

strcpy(boo[j]auth,boo[j+1]auth);

strcpy(boo[j]pub,boo[j+1]pub);

boo[j]TotNum=boo[j+1]TotNum;

boo[j]NowNum=boo[j+1]NowNum;

printf("已成功删除该书\n");

}

else printf("该书有借阅者,无法删除。\n");

}

}

void Borrow(ook &boo,lend &Lin,char BorrowNum[],char CaNum[])

{//3、 借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1,

//并登记借阅者的图书证号和归还期限。

Bor p,q;

LinkList m,n;

if(!BinarySearch(boo,BorrowNum)||total==0) //如果没有找到此书

printf("书库里没这书。\n");//如果有这书

if(BinarySearch(boo,BorrowNum)) //书库里有

{

if(boo[mid]NowNum>0) //看现库存是否大于0

{

boo[mid]NowNum--;//借出一本,少1

if(boo[mid]next==NULL) //若该书信息下显示该种书还没被人借过

{

m=(LinkList )malloc(sizeof(LNode));//分配

boo[mid]next=m;//该图书信息中的链表的第一个结点

strcpy(m->CardNum,CaNum);

m->next=NULL;//后一个结点为空

}

else //如果已经有人在借这书了

{

m=boo[mid]next;

while(m->next) //遍历到最后一个结点

m=m->next;

n=(LinkList )malloc(sizeof(LNode));//分配空间,增加1个结点

m->next=n;

strcpy(n->CardNum,CaNum);//记录证号

n->next=NULL;

}

int i=0;

for(i=0;i<Retotal;i++)//

{

if(!strcmp(Lin[i]CNum,CaNum))//如果已经有该图书证的信息

{

p=Lin[i]next;

while(p->next)p=p->next;//遍历到最后一个结点

q=(Bor )malloc(sizeof(Boro));//分配空间

p->next=q;

strcpy(q->BNum,BorrowNum); //记录书号

printf("输入归还日期:");

scanf("%s",&q->RetDate);

q->next=NULL;

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

break; //找到证了就跳出循环

}

}

if(i==Retotal)//如果没有这张证的信息

{

strcpy(Lin[i]CNum,CaNum); //记录证号

p=(Bor )malloc(sizeof(Boro)); //分配空间

Lin[i]next=p;

strcpy(p->BNum,BorrowNum);

printf("输入归还日期:");

scanf(" %s",&p->RetDate);

p->next=NULL;

Retotal++; //借阅证号信息总数加1

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

}

}

else printf("借阅失败该书现在库存为0\n");

}

}

void Return(ook &boo,lend &Lin,char ReturnNum[],char BorrowerNum[])

{//4、 归还:注销对借阅者的登记,改变该书的现存量。

Bor p,q;

LinkList m,n;

int flag=0;//设置一个参数

if(!BinarySearch(boo,ReturnNum)||!total) //没书

printf("书库中无此书\n");

if(BinarySearch(boo,ReturnNum)) //有书

{

m=boo[mid]next;

if(!strcmp(m->CardNum,BorrowerNum)) //如果是第一个借的人还的

{

boo[mid]NowNum++; //现库存加1

boo[mid]next=m->next; //删除结点

free(m); //释放该结点的空间空间

}

else

{

while(m->next) //查找归还者的借阅者结点

{

if(!strcmp(m->next->CardNum,BorrowerNum)) //如果找到

{

n=m->next; //n为归还者的借阅结点

m->next=n->next; //m指向归还者的借阅结点的下一结点

free(n); //释放空间

boo[mid]NowNum++; //现库存加1

break;

}

m=m->next;

}

}

}

//在借阅者表里查找借阅者信息

for(int i=0;i<Retotal;i++)

{

if(!strcmp(Lin[i]CNum,BorrowerNum)) //如果找到借阅者

{

p=Lin[i]next;

if(!strcmp(p->BNum,ReturnNum)) //如果是归还的是借的第一本书

{

Lin[i]next=p->next; //指向下一借书结点

free(p); //释放结点空间

printf("成功归还该书\n");

flag=1;

break;

}

else //找不到

{

while(p->next) //找到归还书的借书结点

{

if(!strcmp(p->next->BNum,ReturnNum)) //如果找到

{

q=p->next; //q为归还书的借书结点

p->next=q->next; //p指向下一借书结点

free(q); //释放空间

printf("成功归还该书\n");

flag=1;

break;

}

p=p->next;

}

}

}

}

for(int k=0;k<Retotal;k++)

if(!Lin[k]next)

{

for(int j=k;j<Retotal;j++)

Lin[j]=Lin[j+1]; //其后都往前移一位,覆盖掉当前信息

strcpy(Lin[j]CNum," "); //删除图书证号

Retotal--; //图书证数减1

} //删除当前状态下没借书的图书证的信息,节省空间

if(flag==0) printf("无该证信息\n");

}

//5、 查找:实现按三种查询条件之一查找:按书号查找、

//按书名查找、按作者查找。注:可不实现组合查找,即几个条件组合查找。

void SearchByNum(ook &boo,char SeaNum[])

{//BY NUM 根据书号查找

LinkList p;

p=boo[mid]next;

if(BinarySearch(boo,SeaNum)==false)printf("对不起,未找到您想查找的书。\n");//二分查找 没找到

else//找到了的话

{

{

printf("┏━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━┓\n");

printf("┃ 书号 ┃ 书名 ┃ 作者 ┃ 出版社 ┃ 现库存 ┃ 总库存 ┃\n");

printf("┣━━━━━━━╋━━━━━━━╋━━━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━┫\n");

printf("┃%14s┃%14s┃%16s┃%16s┃%10d┃%10d┃\n",boo[mid]num,boo[mid]name,boo[mid]auth,boo[mid]pub,boo[mid]NowNum,boo[mid]TotNum);

printf("┗━━━━━━━┻━━━━━━━┻━━━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━┛\n");

if(boo[mid]next!=NULL)

{

printf("┏━━━━━━━┓\n");

printf("┃ 已借该书的 ┃\n");

printf("┃ 图书证号 ┃\n");

while(p)

{

printf("┣━━━━━━━┫\n");

printf("┃%14s┃\n",p->CardNum);

p=p->next;

}

printf("┗━━━━━━━┛\n");

}

}

while(p)

{

printf(" %s ",p->CardNum);//在按书号查找的函数里也显示借了这本书的借阅者的证号

p=p->next;

}

printf(" \n");

}//显示查找的书籍的信息

}

void SearchByName(ook &boo)

{//BY NAME 根据书名查找

char SeaName[20];

printf("输入想查找的书的书名:\n");

scanf(" %s",&SeaName);

printf("找到符合该书名的书的详细信息如下:\n");

for(int i=0;i<total;i++)

{

if(strcmp(SeaName,boo[i]name)==0)//如果书名一样

{

printf("书号:%s\n书名:%s\n作者:%s\n出版社:%s\n总库存量:%d\n现库存量:%d\n\n",boo[i]num,boo[i]name,boo[i]auth,boo[i]pub,boo[i]TotNum,boo[i]NowNum);

}//显示符合信息的所有书籍的信息

}

}

void SearchByAuth(ook &boo)

{// BY AUTH 根据作者查找

char SeaAuth[20];

printf("输入想查找的书的作者:\n");

scanf(" %s",&SeaAuth);

printf("找到符合该作者的书的详细信息如下:\n");

for(int i=0;i<total;i++)

{

if(strcmp(SeaAuth,boo[i]auth)==0)//如果作者一样

{

printf("书号:%s\n书名:%s\n作者:%s\n出版社:%s\n总库存量:%d\n现库存量:%d\n\n",boo[i]num,boo[i]name,boo[i]auth,boo[i]pub,boo[i]TotNum,boo[i]NowNum);

}//显示符合信息的所有书籍的信息

}

}

//6、 查看:可查看某图书证号的借阅者借阅的全部图书,可查看全部超期未还的图书。

void ViewCard(ook &boo,lend &Lin)

{//查看某图书证号的借阅者借阅的全部图书

char Num[20];

printf("请输入您所想要查看的图书证号:\n");

scanf(" %s",&Num);

Bor p;

int qqq=0;

for(int i=0;i<Retotal;i++)

{

if(strcmp(Lin[i]CNum,Num)==0) //找到该证

{

printf("这个证借的书有:\n");

p=Lin[i]next;

while(p)

{

printf(" %s ",p->BNum); //书号

p=p->next;

}

printf("\n");

qqq=1;

break;

}

}

if(qqq==0)

printf("该证不存在\n");

}

void ViewBook(ook &boo,lend &Lin)

{//查看全部超期未还的图书

char date[8];

Bor p;

printf("请输入日期(请按格式20060605输入):\n");

scanf(" %s",&date);

printf("所有超期未还的书有:\n");

for(int i=0;i<Retotal;i++)

{

p=Lin[i]next;

while(p)//当p不空时

{

if(strcmp(p->RetDate,date)<0) //超过日期

{

printf("书号为 %s 证号为 %s 应归还日期为 %s \n",p->BNum,Lin[i]CNum,p->RetDate);

}//显示所有超期未还的书的信息

p=p->next;

}

}

}

void Menu() //菜单

{

printf("┏—————————————————M E N U————————————————┓\n");

printf("│ │\n");

printf("│ 1 采编入库:新购入一种书,如果该书在图书账目中已经存在, │\n");

printf("│ 则将其库存量增加(包括总库存量和现库存量)。 │\n");

printf("│ 如果该书不存在,则在图书账目中增加一种书, │\n");

printf("│ 总库存量和现库存量均为输入的数字。 │\n");

printf("│ 2 清空库存:某一种书已无保留价值,将它从图书账目中注销。 │\n");

printf("│ 3 借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1, │\n");

printf("│ 并登记借阅者的图书证号和归还期限。 │\n");

printf("│ 4 归还:注销对借阅者的登记,改变该书的现存量。 │\n");

printf("│ 5 按书号查找。 │\n");

printf("│ 6 按书名查找。 │\n");

printf("│ 7 按作者查找。 │\n");

printf("│ 8 查看某图书证号的借阅者借阅的全部图书。 │\n");

printf("│ 9 查看全部超期未还的图书。 │\n");

printf("│ 0 退出图书管理系统。 │\n");

printf("│ │\n");

printf("┗—————————————请 选 择 你 需 要 的 *** 作————————————┛\n");

}

void main()

{

ook Bo;

lend Lin;

char BNum[20];

char CNum[20];

printf("-----------------------欢 迎 进 入 图 书 管 理 系 统!---------------------------\n\n");

int choice=10;

int SearchCho=10,ViewCho=10;

while(choice!=0)

{

Menu();//显示菜单

scanf(" %d",&choice);

switch(choice)

{

case 1://采编入库

printf("请输入入库的书的书号:");

scanf(" %s",BNum);

Buy(Bo,BNum);

break;

case 2://清空库存

printf("请输入想要清除的书的书号:");

scanf(" %s",BNum);

Delete(Bo,BNum);

break;

case 3://借阅

printf("请输入想要借阅的书的书号:\n");

scanf(" %s",&BNum);

printf("请输入图书证号:");

scanf(" %s",&CNum);

Borrow(Bo,Lin,BNum,CNum);

break;

case 4://归还

printf("请输入想要归还的书的书号:\n");

scanf(" %s",&BNum);

printf("请输入图书证号:");

scanf(" %s",&CNum);

Return(Bo,Lin,BNum,CNum);

break;

case 5://查找//根据书号查找

printf("请输入书号:");//输入书号查找

scanf(" %s",&BNum);

SearchByNum(Bo,BNum);

break;

case 6://根据书名查找

SearchByName(Bo);

break;

case 7://根据作者查找

SearchByAuth(Bo);

break;

case 8://查看某图书证所借的所有书

ViewCard(Bo,Lin);

break;

case 9: //查看全部超期未还的书

ViewBook(Bo,Lin);

break;

case 0://退出系统

exit(0);break;

default:printf("输入错误!\n");exit(0);break;

}

}

}

#include <iostream>

#include <iomanip>

#include <string>

#include <fstream>//输入/输出文件流类

using namespace std;

const int Maxr=100;//最多的读者

const int Maxb=100;//最多的图书

const int Maxbor=5;//每位读者最多借五本书

//读者类,实现对读者的信息的描述

class Reader

{

private:

int tag; //删除标记 1:已删 0:未删

int no; //读者编号

char name[10]; //读者姓名

int borbook[Maxbor];//所借图书

public:

Reader() {}

char getname() {return name;} //获取姓名

int gettag() {return tag;} //获取删除标记

int getno() {return no;} //获取读者编号

void setname(char na[]) //设置姓名

{

strcpy(name,na);

}

void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删

void addreader(int n,char na)//增加读者

{

tag=0;

no=n;

strcpy(name,na);

for(int i=0;i<Maxbor;i++)

borbook[i]=0;

}

void borrowbook(int bookid)//借书 *** 作

{

for(int i=0;i<Maxbor;i++)

{

if (borbook[i]==0)

{

borbook[i]=bookid;

return;

}

}

}

int retbook(int bookid)//还书 *** 作

{

for(int i=0;i<Maxbor;i++)

{

if(borbook[i]==bookid)

{

borbook[i]=0;

return 1;

}

}

return 0;

}

void disp()//读出读者信息

{

cout << setw(5) << no <<setw(10) << name<<"借书编号:[";

for(int i=0;i<Maxbor;i++)

if(borbook[i]!=0)

cout << borbook[i] << "|";

cout << "]"<<endl;

}

};

//读者类库,实现建立读者的个人资料

class RDatabase

{

private:

int top; //读者记录指针

Reader read[Maxr];//读者记录

public:

RDatabase() //构造函数,将readertxt读到read[]中

{

Reader s;

top=-1;

fstream file("readertxt",ios::in);//打开一个输入文件

while (1)

{

fileread((char )&s,sizeof(s));

if (!file)break;

top++;

read[top]=s;

}

fileclose(); //关闭 readertxt

}

void clear()//删除所有读者信息

{

top=-1;

}

int addreader(int n,char na)//添加读者时先查找是否存在

{

Reader p=query(n);

if (p==NULL)

{

top++;

read[top]addreader(n,na);

return 1;

}

return 0;

}

Reader query(int readerid)//按编号查找

{

for (int i=0;i<=top;i++)

if (read[i]getno()==readerid &&

read[i]gettag()==0)

{

return &read[i];

}

return NULL;

}

void disp() //输出所有读者信息

{

for (int i=0;i<=top;i++)

read[i]disp();

}

void readerdata();//读者库维护

~RDatabase() //析构函数,将read[]写到readertxt文件中

{

fstream file("readertxt",ios::out);

for (int i=0;i<=top;i++)

if (read[i]gettag()==0)

filewrite((char )&read[i],sizeof(read[i]));

fileclose();

}

};

void RDatabase::readerdata()

{

char choice;

char rname[20];

int readerid;

Reader r;

while (choice!='0')

{

cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl;

cin >> choice;

switch (choice)

{

case '1':

cout << "输入读者编号:";

cin >> readerid;

cout << "输入读者姓名:";

cin >> rname;

addreader (readerid,rname);

break;

case '2':

cout << "输入读者编号:";

cin >> readerid;

r=query(readerid);

if (r==NULL)

{

cout << " 该读者不存在 "<<endl;

break;

}

cout << "输入新的姓名:";

cin >> rname;

r->setname(rname);

break;

case '3':

cout << " 输入读者编号:";

cin >> readerid;

r=query(readerid);

if (r==NULL)

{

cout <<" 该读者不存在" << endl;

break;

}

r->delbook();

break;

case '4':

cout << "读入读者编号:";

cin >> readerid;

r=query(readerid);

if (r==NULL)

{

cout <<"该读者不存在"<< endl;

break;

}

r->disp();

break;

case '5':

disp();

break;

case '6':

clear();

break;

default:cout<<"输入错误,请从新输入:";break;

}

}

}

//图书类,实现对图书的描述,图书的编号,书名,借出,还入等

class Book

{

private:

int tag;//删除标记 1:已删 0:未删

int no;//图书编号

char name[20];//书名

int onshelf;//是否再架 1:再架 2:已借

public:

Book(){}

char getname() { return name; }//获取姓名

int getno(){ return no; }//获取图书编号

int gettag(){ return tag; }//获取删除标记

void setname(char na[])//设置书名

{

strcpy(name,na);

}

void delbook(){ tag=1;}//删除图书

void addbook(int n,char na)//增加图书

{

tag=0;

no=n;

strcpy(name,na);

onshelf=1;

}

int borrowbook()//借书 *** 作

{

if (onshelf==1)

{

onshelf=0;

return 1;

}

return 0;

}

void retbook()//还书 *** 作

{

onshelf=1;

}

void disp()//输出图书

{

cout << setw(6) << no << setw(18) << name << setw(10)

<<(onshelf==1 "在架":"已借") <<endl;

}

};

//图书库类,实现对图书的维护,查找,删除等

class BDatabase

{

private:

int top; //图书记录指针

Book book[Maxb]; //图书记录

public:

BDatabase()//构造函数,将booktxt读到book[]中

{

Book b;

top=-1;

fstream file("booktxt",ios::in);

while (1)

{

fileread((char )&b,sizeof(b));

if (!file) break;

top++;

book[top]=b;

}

fileclose();

}

void clear()//全删

{

top=-1;

}

int addbook(int n,char na)//增加图书

{

Book p=query(n);

if (NULL==p)

{

top++;

book[top]addbook(n,na);

return 1;

}

return 0;

}

Book query(int bookid)//查找图书

{

for (int i=0;i<=top;i++)

if (book[i]getno()==bookid &&book[i]gettag()==0)

{

return &book[i];

}

return NULL;

}

void bookdata();//图书库维护

void disp()

{

for (int i=0;i<=top;i++)

if (book[i]gettag()==0)

book[i]disp();

}

~BDatabase()//析构函数,将book[]写到booktxt文件中

{

fstream file("booktxt",ios::out);

for (int i=0;i<=top;i++)

if (book[i]gettag()==0)

filewrite((char )&book[i],sizeof(book[i]));

fileclose();

}

};

void BDatabase::bookdata()

{

char choice;

char bname[40];

int bookid;

Book b;

while (choice!='0')

{

cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl;

cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl;

cin >> choice;

switch (choice)

{

case '1':

cout << "输入图书编号:"<<endl;

cin >> bookid;

cout << "输入图书书名:"<<endl;

cin >> bname;

addbook(bookid,bname);

break;

case '2':

cout << "输入图书编号:"<<endl;

cin >> bookid;

b=query(bookid);

if (b==NULL)

{

cout << " 该图书不存在 "<<endl;

break;

}

cout << "输入新的书名:"<<endl;

cin >> bname;

b->setname(bname);

break;

case '3':

cout <<" 读入图书编号:"<<endl;

cin >> bookid;

b=query(bookid);

if (b==NULL)

{

cout <<" 该图书不存在" << endl;

break;

}

b->delbook();

break;

case '4':

cout << " 读入图书编号:"<<endl;

cin >> bookid;

b=query(bookid);

if (b==NULL)

{

cout <<" 该图书不存在"<< endl;

break;

}

b->disp();

break;

case '5':

disp();

break;

case '6':

clear();

break;

default:cout<<"输入错误,请从新输入:";

}

}

}

//main() 函数的实现,程序的主界面的引导

void main()

{

char choice;

int bookid,readerid;

RDatabase ReaderDB;

Reader r;

BDatabase BookDB;

Book b;

while(choice!='0')

{

cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n\n";

cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl;

cin >> choice;

switch (choice)

{

case '1':

cout <<" 借书 读者编号:";

cin >>readerid;

cout <<" 图书编号: ";

cin >>bookid;

r=ReaderDBquery(readerid);//按编号查找

if (NULL==r)

{

cout <<" 不存在该读者,不能借书"<< endl;

break;

}

b=BookDBquery(bookid);

if (b==NULL)

{

cout <<" 不存在该图书,不能借书"<< endl;

break;

}

if (b->borrowbook()==0)

{

cout << " 该图书已借出,不能借书"<< endl;

break;

}

r->borrowbook(b->getno());

break;

case '2':

cout<<"还书\n 读者编号:";

cin >>readerid;

cout << " 图书编号:";

cin >>bookid;

r=ReaderDBquery(readerid);

if (r==NULL)

{

cout <<" 不存在该读者,不能还书" << endl;

break;

}

b=BookDBquery(bookid);

if (b==NULL)

{

cout <<" 不存在该图书,不能还书" <<endl;

break;

}

b->retbook();

r->retbook(b->getno());

break;

case '3':

BookDBbookdata();

break;

case '4':

ReaderDBreaderdata();

break;

default:cout<<"输入错误,请从新输入:";

}

}

}

以上就是关于图书馆要设计一个图书借阅系统,其功能包括: 3.2.1 借书:查询库存后,返回有无此书信息给读者,如有书全部的内容,包括:图书馆要设计一个图书借阅系统,其功能包括: 3.2.1 借书:查询库存后,返回有无此书信息给读者,如有书、C++图书信息管理系统设计、1、 求c语言程序图书登记管理程序。要求如下急!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9676076.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存