
#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语言程序图书登记管理程序。要求如下急!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)