當前位置:歷史故事大全網 - 圖書館 - 求用c++寫的圖書管理系統代碼

求用c++寫的圖書管理系統代碼

# include & ltstdio.h & gt

# include & ltstring.h & gt

# include & ltstdlib.h & gt

//

#define MAXSIZE 100 //最大值定義為100。

# define list _ init _ size 100//借書證最大用戶數定義為100。

//借款人的結構

Typedef結構Boro//借用行為

{

char BNum[20];//所借圖書的書號

char RetDate[8];//返回日期

struct Boro * next

} Bor

typedef結構鏈接簿

{

Bor * next//這張借書證的借閱行為

char CNum[20];//證書編號

int Total//借書數量

} lend[LIST _ INIT _ SIZE];//借用者數組

//書的結構信息

typedef結構LNode

{

char card num[20];//庫ID號

struct LNode * next

}鏈接列表;//借款人

typedef結構書

{//每本書要登記的內容包括ISBN、書名、作者、出版社、總庫存和現有庫存。

字符編號[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 & amp;Boo) //初始化圖書信息

{

for(int I = 0;我& ltMAXSIZEi++)

{

噓[我]。NowNum = 0;

噓[我]。tot num = 0;

噓[我]。next = NULL

}

}

void InitRe(lend & amp;Lin) //初始化借款人信息

{

for(int I = 0;我& ltLIST _ INIT _ SIZEi++)

林[我]。next = NULL

}

//

int mid = 0;//外部函數mid,用於返回找到的位置。

布爾二分搜索法(OOkboo,Charsearchnum[])//二分法查找比較書號。

{//使用了bool函數,但是由於函數不能有兩個返回值,所以設置了壹個外部變量mid來返回找到的位置。

int low=0,high = total-1;

int found = 0;

while(low & lt;=高)

{

mid=(低+高)/2;//中間點

If (strcmp (boo [mid])。num,search num)= = 0)//書號相同。

{

發現= 1;

返回true

}//搜索成功。

if(strcmp(boo[mid])。num,SearchNum)!=0)//書號不壹樣。

高=中1;

else低= mid+1;

}

if(發現==0)

返回false//搜索失敗。

}

無效購買(ook & ampboo,char BuyNum[])

{//1.編輯入庫:如果購買了新書,如果已經存在於圖書賬戶中,則增加其庫存(包括

//包括總庫存和當前庫存),如果賬面不存在,在賬面上增加壹個賬面,總庫存和當前庫存都是1。

If(BinarySearch(boo,BuyNum)) //如果書庫裏有這本書。

{

噓[中]。totnum++;//總庫存加1

噓[中]。nownum++;//當前庫存加上1

Printf("接收成功。\ n ");

Printf("圖書館裏這本書的信息被改了。編號為%s的圖書%s的作者是%s,出版商是% s,當前總庫存是%d,當前庫存是% d,\n ",boo[mid]。num,boo[mid]。姓名,boo[mid]。auth,boo[mid]。酒館,boo[mid]。托特納姆,boo[mid]。NowNum);

}

如果(!BinarySearch(boo,BuyNum))

{

int I;

for(I =總計;我& gt中期和中期。& amp總計;I-)//插在正確的位置,保持有序。

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

Printf("書庫裏沒有這本書。要建立新的參考書目,請填寫整本書的詳細信息。\ n ");

strcpy(boo[i]。num,BuyNum);

Printf("購書數量為:");

scanf(" %d ",& amp噓[我]。NowNum);

噓[我]。TotNum=boo[i]。諾姆;

Printf("書的名字是");

scanf(" %s ",& amp噓[我]。姓名);

Printf("這本書的作者是");

scanf(" %s ",& amp噓[我]。auth);

Printf("這本書的出版商是");

scanf(" %s ",& amp噓[我]。pub);//完整信息

噓[我]。next = NULL

total++;//總金額+1

Printf("本書信息已添加。編號為%s的圖書%s的作者是%s,出版商是% s,當前總庫存是%d,當前庫存是% d,\n ",boo[i]。num,boo[i]。名字,boo[i]。auth,boo[i]。pub,boo[i]。托特納姆,噓[我]。NowNum);

Printf("接收成功。\ n ");

}

}

無效刪除(ook & ampboo,char DeleteNum[])

{//2.清理存貨:某本書沒有保留價值,所以從賬面上註銷。

If(二分搜索法(boo,delete num)= = false | | total = = 0)//如果沒有書

Printf("書不在圖書館。\ n ");

If(二分搜索法(boo,刪除num))//如果是。

{

如果(!噓[中]。下壹個)

{

int j;

for(j = mid;j & lt總計;j++)

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

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

strcpy(boo[j].姓名,boo[j+1]。姓名);

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]。諾姆;

Printf("該書已成功刪除。\ n ");

}

Else printf("本書有借閱者,不能刪除。\ n ");

}

}

無效借用(ook & ampboo,lend & amp林,char BorrowNum[],char CaNum[])

{//3.借:如果壹本書的現有庫存大於零,借出壹本書,減少現有庫存1。

//並登記借閱者的圖書證號和歸還期限。

Bor *p,* q;

鏈表*m,* n;

如果(!二分搜索法(boo,borrownum)| | Total = = 0)//如果沒有找到這本書

Printf("這本書不在圖書館。\ n ");//如果妳有這本書,

If(二分搜索法(boo,borrownum))//圖書館裏有壹些。

{

if(boo[mid]。NowNum & gt0) //查看當前庫存是否大於0。

{

噓[中]。NowNum-;//借壹本書,1少。

If(boo[mid]。next==NULL) //如果圖書信息顯示該書未被借閱。

{

m =(LinkList *)malloc(sizeof(LNode));//分布

噓[中]。next = m;//圖書信息中鏈表的第壹個節點。

strcpy(m-& gt;CardNum,CaNum);

m-& gt;next = NULL//最後壹個節點為空。

}

Else //如果有人已經在借這本書。

{

m=boo[mid]。接下來;

while(m->;Next) //遍歷到最後壹個節點

m = m-& gt;接下來;

n =(LinkList *)malloc(sizeof(LNode));//分配空間,添加1個節點。

m-& gt;next = n;

strcpy(n-& gt;CardNum,CaNum);//記錄證書編號

n->;next = NULL

}

int I = 0;

for(I = 0;我& ltRetotali++)//

{

如果(!林[i].CNum,CaNum))//如果妳已經有了這個借書證的信息,

{

p =林[我]。接下來;

while(p->;下壹個)p = p-& gt;接下來;//遍歷到最後壹個節點

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

p->;next = q;

strcpy(q-& gt;BNum,BorrowNum);//記錄書號

Printf("輸入返回日期:");

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

q->;next = NULL

Printf("借款成功。\ n ");

打破;//如果找到證書,跳出循環。

}

}

If(i==Retotal)//如果沒有關於此證書的信息,

{

林[1]。CNum,CaNum);//記錄證書編號

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

林[我]。next = p;

strcpy(p-& gt;BNum,BorrowNum);

Printf("輸入返回日期:");

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

p->;next = NULL

retotal++;//圖書卡號總信息加1。

Printf("借款成功。\ n ");

}

}

Else printf("借款失敗。這本書現在有0英鎊的庫存。\ n ");

}

}

無效退貨(ook & ampboo,lend & ampLin,char ReturnNum[],char BorrowerNum[])

{//4.歸還:註銷借書人登記,更改圖書現有數量。

Bor *p,* q;

鏈表*m,* n;

int flag = 0;//設置參數

如果(!BinarySearch(boo,ReturnNum)||!合計)//沒有書。

Printf("圖書館裏沒有書。\ n ");

If(二分搜索法(boo,return num))//有書。

{

m=boo[mid]。接下來;

如果(!strcmp(m-& gt;Cardnum,borrowernum)//如果是第壹個借書人還的。

{

噓[中]。nownum++;//當前庫存加上1

噓[中]。next = m-& gt;接下來;//刪除節點

免費(m);//釋放這個節點的空間。

}

其他

{

while(m->;下壹步)//找到返回者的借用者節點。

{

如果(!strcmp(m-& gt;下壹個-& gt;CardNum,BorrowerNum)) //如果找到,

{

n = m-& gt;接下來;//n是借款人的借款節點。

m-& gt;next = n-& gt;接下來;//m指向借款人借款節點的下壹個節點。

免費(n);//釋放空間

噓[中]。nownum++;//當前庫存加上1

打破;

}

m = m-& gt;接下來;

}

}

}

//在借款人表中查找借款人信息。

for(int I = 0;我& ltRetotali++)

{

如果(!林[I].cnum,borrowernum))//如果找到借款人,

{

p =林[我]。接下來;

如果(!strcmp(p-& gt;BNum,return num))///如果還了,就是借的第壹本書。

{

林[我]。next = p-& gt;接下來;//指向下壹個借用節點

免費(p);//釋放節點空間

Printf("書被成功歸還。\ n ");

flag = 1;

打破;

}

Else //未找到。

{

while(p->;下壹步)//找到還書的借閱節點。

{

如果(!strcmp(p-& gt;下壹個-& gt;BNum,ReturnNum)) //如果找到。

{

q = p->;接下來;//q是還書的借閱節點。

p->;next = q-& gt;接下來;//p指向下壹個借用節點。

免費(q);//釋放空間

Printf("書被成功歸還。\ n ");

flag = 1;

打破;

}

p = p-& gt;接下來;

}

}

}

}

for(int k = 0;k & ltRetotalk++)

如果(!林[k]。下壹個)

{

int j;

for(j = k;j & ltRetotalj++)

Lin[j]= Lin[j+1];//之後都前進壹位,覆蓋當前信息。

林[j].CNum,“”;//刪除圖書卡號

retotal-;//借書證數量減1

}//刪除當前狀態下未借書的借書證信息,節省空間。

If(flag==0) printf("沒有此證書的信息。\ n ");

}

//5.搜索:按三個查詢條件之壹搜索:按書號搜索,

//按標題和作者搜索。註:組合搜索,即多個條件的組合搜索,可能無法實現。

void search bynum(ook & amp;boo,char SeaNum[])

{//BY NUM按書號搜索。

LinkList * p;

p=boo[mid]。接下來;

If(二分搜索法(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]。姓名,boo[mid]。auth,boo[mid]。酒館,boo[mid]。諾姆,噓[mid]。TotNum);

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

if(boo[mid]。下壹個!=空)

{

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

Printf(“被借走的書的┃\n”);

Printf("┃圖書館號┃\n”);

while(p)

{

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

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

p = p-& gt;接下來;

}

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

}

}

while(p)

{

printf(" %s ",p-& gt;card num);//在按書號查找的功能中也顯示了借書人的卡號。

p = p-& gt;接下來;

}

printf(" \ n ");

}//顯示所搜索書籍的信息。

}

void search by name(ook & amp;boo)

{//按名稱按標題搜索。

char SeaName[20];

Printf("輸入妳要找的書的書名:\ n ");

scanf(" %s ",& ampSeaName);

Printf("找到這個書名的書詳情如下:\ n ");

for(int I = 0;我& lt總計;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]。姓名,boo [

}//顯示所有符合信息的書籍的信息。

}

}

void search by auth(ook & amp;boo)

{//按作者授權搜索

char sea auth[20];

Printf("輸入妳想找的書的作者:\ n ");

scanf(" %s ",& ampsea auth);

Printf("查找與作者匹配的書籍詳情如下:\ n ");

for(int I = 0;我& lt總計;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]。姓名,boo [

}//顯示所有符合信息的書籍的信息。

}

}

//6.查看:可以查看借書人用壹個借書證號借的所有書,以及所有過期的書。

無效視圖卡(ook & ampboo,lend & amp林)

{//查看借書人用壹個借書證號借的所有書。

字符編號[20];

Printf("請輸入您要查看的圖書證號碼:\ n ");

scanf(" %s ",& ampnum);

bor * p;

int qqq = 0;

for(int I = 0;我& ltRetotali++)

{

If (strcmp (Lin [I].cnum,num)= = 0)//查找證書。

{

Printf("此證借的書是:\ n ");

p =林[我]。接下來;

while(p)

{

printf(" %s ",p-& gt;BNum);//圖書編號

p = p-& gt;接下來;

}

printf(" \ n ");

qqq = 1;

打破;

}

}

如果(qqq==0)

Printf("此證書不存在。\ n ");

}

void view book(ook & amp;boo,lend & amp林)

{//查看所有過期圖書。

char date[8];

bor * p;

Printf("請輸入日期(請以20060605的格式輸入):\ n ");

scanf(" %s ",& amp日期);

Printf("所有逾期圖書為:\ n ");

for(int I = 0;我& ltRetotali++)

{

p =林[我]。接下來;

While(p)//當p不為空時

{

if(strcmp(p-& gt;RetDate,date)& lt;0) //過期

{

Printf("書號%s,證書號%s,到期日%s \n ",p-& gt;林[我]。CNum,p-& gt;RetDate);

}//顯示所有逾期圖書的信息。

p = p-& gt;接下來;

}

}

}

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。按ISBN搜索。│\ n ");

Printf("│ 6。按標題搜索。│\ n ");

Printf("│ 7。按作者搜索。│\ n ");

Printf("│ 8。查壹個借書證號的借書人借的所有書。│\ n ");

Printf("│ 9。查看所有過期圖書。│\ n ");

Printf("│ 0。退出圖書管理系統。│\ n ");

printf("││\ n ");

Printf ("┗————————————┛\n—請選擇妳需要的運動————————\ n ");

}

int main()

{

ook Bo

借給林;

char BNum[20];

char CNum[20];

Printf (" -歡迎使用圖書館管理系統!-\ n \ n ");

int choice = 10;

int SearchCho=10,view CHO = 10;

而(選擇!=0)

{

menu();//顯示菜單

scanf(" %d ",& amp選擇);

開關(選擇)

{

案例1://編輯和入庫

Printf("請輸入入庫圖書的書號:");

scanf(" %s ",BNum);

買入(Bo,BNum);

案例2://清除庫存

Printf("請輸入您要清除的圖書的書號:");

scanf(" %s ",BNum);

刪除(Bo,BNum);

打破;

案例三://借款

Printf("請輸入妳想借的書的書號:\ n ");

scanf(" %s ",& ampBNum);

Printf("請輸入庫號:");

scanf(" %s ",& ampCNum);

借(Bo,Lin,BNum,CNum);

打破;

案例4:// Return

Printf("請輸入您要歸還的圖書的書號:\ n ");

scanf(" %s ",& ampBNum);

Printf("請輸入庫號:");

scanf(" %s ",& ampCNum);

Return(Bo,Lin,BNum,CNum);

打破;

案例5://Search//按書號搜索

Printf("請輸入ISBN:");//輸入要查找的書號。

scanf(" %s ",& ampBNum);

SearchByNum(Bo,BNum);

打破;

案例6://按標題搜索。

search by name(Bo);

打破;

案例7://按作者搜索

SearchByAuth(Bo);

打破;

案例八://查看壹個借書證借的所有書。

視卡(博、林);

打破;

案例九://查看所有逾期圖書。

ViewBook(博、林);

打破;

情況0://退出系統。

退出(0);打破;

默認:printf("輸入錯誤!\ n ");退出(0);打破;

}

}

}

  • 上一篇:從問題本開始
  • 下一篇:揭秘世界自衛戰鬥的書籍目錄
  • copyright 2024歷史故事大全網