gv天堂gv无码男同在线,欧美视频你懂的,毛片一级毛片毛片一级一级毛毛片,亚洲黄色视频免费播放,满18岁免费看的尤物视频,日本欧美三级片免费看,亚洲综合伊人影视在线播放

  • 首 頁
  • 采購市場
  • 企業(yè)查詢
  • 營銷建站
  • 營銷推廣
  • 行業(yè)資訊
  • 發(fā)布信息
  • C語言圖書管理系統(tǒng)庫存量與錄入數量怎么做加減法

    懸賞分:20|
    C語言圖書管理系統(tǒng)
    庫存量與錄入數量怎么做加減法!

    其 他 回 答共2條

    1樓

    這不是按你這個要求的圖書管理系統(tǒng),不過你可以修改一下,你自己看下吧。
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    //
    #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))
    {
    int i;
    for(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)
    {
    int j;
    for( 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; //找到證了就跳出循環(huán)
    }
    }
    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)
    {
    int j;
    for(j=k;j<Retotal;j++)
    Lin[j]=Lin[j+1]; //其后都往前移一位,覆蓋掉當前信息
    strcpy(Lin[j].CNum," "); //刪除圖書證號
    Retotal--; //圖書證數減1
    } //刪除當前狀態(tài)下沒借書的圖書證的信息,節(jié)省空間
    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. 退出圖書管理系統(tǒng)。 │\n");
    printf("│ │\n");
    printf("┗—————————————請 選 擇 你 需 要 的 操 作————————————┛\n");
    }
    void main()
    {
    ook Bo;
    lend Lin;
    char BNum[20];
    char CNum[20];
    printf("-----------------------歡 迎 進 入 圖 書 管 理 系 統(tǒng)!---------------------------\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://退出系統(tǒng)
    exit(0);break;
    default:printf("輸入錯誤!\n");exit(0);break;
    }
    }
    }
    知識庫標簽: 書籍   |列兵

    2樓


    Based on your subject 圖書管理系統(tǒng) ,
    聯系我們需要提供你的問題和電子郵件,
    還有別的要求么,可以與我們聯系,
    有時間可以幫你,
    百度_Hi聯系我,
    此回復針對所有來訪者和需求者有效,
    ES:\\F5F68653D103EE5CC2A7CB9AF72AE33C
    知識庫標簽: |列兵

    我來回答這個問題

    立即登陸回答獲取會員積分,提高用戶級別
    友情鏈接:
    Copyright © 商名網 All Rights Reserved.