HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    圖書信息管理系統(tǒng)c語言程序設(shè)計(jì)

    發(fā)布時(shí)間:2023-04-01 08:34:02     稿源: 創(chuàng)意嶺    閱讀: 404        當(dāng)前文章關(guān)鍵詞排名出租

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于圖書信息管理系統(tǒng)c語言程序設(shè)計(jì)的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀企業(yè),服務(wù)客戶遍布全國,相關(guān)業(yè)務(wù)請撥打175-8598-2043,或微信:1454722008

    本文目錄:

    圖書信息管理系統(tǒng)c語言程序設(shè)計(jì)

    一、c語言程序設(shè)計(jì)圖書館源代碼

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    #include <string.h>

    typedef int BOOL;

    typedef struct bookinfo

    {

    char number[15];/*產(chǎn)品編號*/

    char name[30];/*產(chǎn)品名稱*/

    float price;/*單價(jià)*/

    char auther[20];/*作者*/

    BOOL isExit;/*存在狀態(tài)*/

    char lendername[20];/*借書人姓名*/

    char lendersex[2];/*借書人性別*/

    char lendernum[15];/*借書人學(xué)號*/

    }BOOKINFO;

    void menu()

    {

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

    printf("\t\t\t圖書管理系統(tǒng)\n");

    printf("\t\t\t1:新進(jìn)圖書基本信息的輸入\n");

    printf("\t\t\t2:顯示全部記錄\n");

    printf("\t\t\t3:根據(jù)圖書名稱查詢圖書基本信息\n");

    printf("\t\t\t4:根據(jù)圖書名稱對撤銷的圖書信息進(jìn)行刪除\n");

    printf("\t\t\t5:按照圖書名稱從小大到排序\n");

    printf("\t\t\t6:統(tǒng)計(jì)某價(jià)格以上的圖書數(shù)量\n");

    printf("\t\t\t7:列出所有未借出去的圖書信息\n");

    printf("\t\t\t8:退出\n");

    }

    void choice_1_input_new()/*輸入新進(jìn)的圖書信息*/

    {

    char choice;

    FILE *p;

    BOOKINFO newbook;

    system("cls");

    while(1)

    {

    printf("輸入圖書編號:");

    gets(newbook.number);

    printf("輸入圖書名稱:");

    gets(newbook.name);

    printf("輸入圖書單價(jià):");

    scanf("%f",&newbook.price);

    while(getchar()!='\n');

    printf("輸入圖書的作者:");

    gets(newbook.auther);

    printf("輸入借書人姓名:");

    gets(newbook.lendername);

    printf("輸入借書人性別:");

    gets(newbook.lendersex);

    printf("輸入借書人學(xué)號:");

    gets(newbook.lendernum);

    printf("是否保存該條書目?(Y/N)\n");

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

    {

    newbook.isExit=1;/*將圖書狀態(tài)設(shè)置成1,表示沒有借出*/

    p=fopen("c:\\bookinfo.data","ab");

    fwrite(&newbook,sizeof(BOOKINFO),1,p);

    fclose(p);

    printf("\n該條書目已添加到c:\\bookinfo.data文件中!\n");

    }

    else

    {

    printf("\n本條書目未保存!\n");

    }

    printf("\n是否繼續(xù)添加書目?(Y/N)\n");

    while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')

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

    continue;

    else

    break;

    }

    }

    void choice_2_display_all()/*顯示全部圖書信息*/

    {

    FILE *p;

    int n;

    BOOKINFO bookinfo[100];

    int booknumber=0;

    system("cls");

    p=fopen("c:\\bookinfo.data","rb");

    while(!feof(p))

    {

    fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);

    booknumber++;

    }

    /*booknumber--;使用feof()函數(shù)會(huì)多讀一行,因此需要booknumber自減一次,使書目的數(shù)量正確*/

    fclose(p);

    booknumber--;

    if(booknumber==0)

    {

    printf("沒有任何圖書信息!\n\n");

    }

    else

    {

    n=0;

    printf(" 圖書信息如下\n");

    printf(" 圖書信息 | 借書人信息 \n");

    printf("編號 名稱 單價(jià) 作者 圖書狀態(tài) | 姓名 性別 學(xué)號\n");

    while(n<booknumber)

    {

    printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",

    bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,

    bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,

    bookinfo[n].lendersex,bookinfo[n].lendernum);

    n++;

    }

    }

    printf("\n\n按任意鍵回到主菜單!\n");

    }

    void choice_3_search_according_name()/*根據(jù)圖書名稱顯示圖書的信息*/

    {

    char search[20]="";/*search用來存放要查詢的書名*/

    int n;

    FILE *p;

    char choice;

    BOOKINFO bookinfo[100];

    int booknumber=0;

    system("cls");

    p=fopen("c:\\bookinfo.data","rb");

    while(!feof(p))

    {

    fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);

    booknumber++;

    }

    booknumber--;/*使用feof()函數(shù)會(huì)多讀一行,因此需要booknumber自減一次,使書目的數(shù)量正確*/

    fclose(p);

    while(1)

    {

    printf("輸入要查詢的書本名稱:");

    gets(search);

    if(booknumber==0)

    {

    printf("書庫中沒有任何信息!\n\n");

    printf("按任意鍵回到主菜單!\n\n");

    getch();

    break;

    }/*if結(jié)束*/

    else

    {

    for(n=0;n<booknumber;n++)

    if(strcmp(bookinfo[n].name,search)==0)

    {

    printf("該書的詳細(xì)信息如下:\n");

    printf(" 圖書信息 | 借書人信息 \n");

    printf("編號 名稱 單價(jià) 作者 圖書狀態(tài) | 姓名 性別 學(xué)號\n");

    printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",

    bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,

    bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,

    bookinfo[n].lendersex,bookinfo[n].lendernum);

    break;

    }

    if(n>=booknumber)

    printf("沒有查找該書的任何信息!\n");

    printf("\n\n是否繼續(xù)查詢?(Y/N)\n");

    choice=getch();

    while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')

    choice=getch();

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

    continue;

    else

    break;

    }/*else結(jié)束*/

    }/*while(1)結(jié)束*/

    }

    void choice_4_delete_according_name()/*根據(jù)圖書名稱對圖書信息進(jìn)行刪除*/

    {

    char search[20]="";/*search用來存放要?jiǎng)h除的書名*/

    int n,i;

    FILE *p;

    char choice;

    BOOKINFO bookinfo[100];

    int booknumber;

    system("cls");

    while(1)

    {

    printf("輸入要?jiǎng)h除的書本名稱:");

    gets(search);

    p=fopen("c:\\bookinfo.data","rb");

    booknumber=0;

    while(!feof(p))

    {

    fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);

    booknumber++;

    }

    booknumber--;/*使用feof()函數(shù)會(huì)多讀一行,因此需要booknumber自減一次,使書目的數(shù)量正確*/

    fclose(p);

    if(booknumber==0)

    {

    printf("書庫中沒有任何信息!\n\n");

    printf("按任意鍵回到主菜單!\n\n");

    getch();

    break;

    }/*if結(jié)束*/

    else

    {

    for(n=0;n<booknumber;n++)

    if(strcmp(bookinfo[n].name,search)==0)

    {

    break;

    }

    if(n>=booknumber)

    printf("沒有查找該書的任何信息!\n");

    else

    {

    printf("是否確認(rèn)需要?jiǎng)h除該條書目?(Y/N)");

    choice=getch();

    while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')

    choice=getch();

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

    {

    for(i=n;i<booknumber-1;i++)

    bookinfo[i]=bookinfo[i+1];

    booknumber--;

    p=fopen("c:\\bookinfo.data","wb");

    for(n=0;n<booknumber;n++)

    fwrite(&bookinfo[n],sizeof(BOOKINFO),1,p);

    fclose(p);

    printf("刪除成功!\n");

    }

    else

    printf("\n\n該條書目沒有被刪除!");

    }

    printf("\n\n是否繼續(xù)進(jìn)行刪除操作?(Y/N)\n");

    choice=getch();

    while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')

    choice=getch();

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

    continue;

    else

    break;

    }/*else結(jié)束*/

    }/*while(1)結(jié)束*/

    }

    void choice_5_sort_according_name()/*根據(jù)圖書名稱排序*/

    {

    FILE *p;

    int m,n;

    BOOKINFO temp;

    BOOKINFO bookinfo[100];

    int booknumber;

    p=fopen("c:\\bookinfo.data","rb");

    booknumber=0;

    system("cls");

    while(!feof(p))

    {

    fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);

    booknumber++;

    }

    booknumber--;/*使用feof()函數(shù)會(huì)多讀一行,因此需要booknumber自減一次,使書目的數(shù)量正確*/

    fclose(p);

    if(booknumber==0)

    {

    printf("沒有任何圖書信息!\n\n");

    }

    else

    {

    for(m=0;m<booknumber-1;m++)

    for(n=m+1;n<booknumber;n++)

    if(strcmp(bookinfo[m].name,bookinfo[n].name)>0)

    {

    temp=bookinfo[m];

    bookinfo[m]=bookinfo[n];

    bookinfo[n]=temp;

    }

    p=fopen("c:\\bookinfo.data","wb");

    for(m=0;m<booknumber;m++)

    fwrite(&bookinfo[m],sizeof(BOOKINFO),1,p);

    fclose(p);

    printf("\n\n完成排序!\n\n");

    }

    printf("按任意鍵回到主菜單!\n");

    getch();

    }

    void choice_6_display_high_price()/*根據(jù)價(jià)格列出圖書信息*/

    {

    float price;

    FILE *p;

    int n;

    int count=0;

    BOOKINFO bookinfo[100];

    int booknumber;

    system("cls");

    printf("請輸入價(jià)格:");

    scanf("%f",&price);

    p=fopen("c:\\bookinfo.data","rb");

    booknumber=0;

    while(!feof(p))

    {

    fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);

    booknumber++;

    }

    booknumber--;/*使用feof()函數(shù)會(huì)多讀一行,因此需要booknumber自減一次,使書目的數(shù)量正確*/

    fclose(p);

    if(booknumber==0)

    {

    printf("沒有任何圖書信息!\n\n");

    }

    else

    {

    for(n=0;n<booknumber;n++)

    {

    if(bookinfo[n].price>=price)

    count++;

    }

    if(count==0)

    printf("書庫中沒有比%.1f$價(jià)格高的圖書!",price);

    else

    {

    printf(" 價(jià)格高于%.1f$的圖書信息如下\n",price);

    printf(" 圖書信息 | 借書人信息 \n");

    printf("編號 名稱 單價(jià) 作者 圖書狀態(tài) | 姓名 性別 學(xué)號\n");

    for(n=0;n<booknumber;n++)

    {

    if(bookinfo[n].price>=price)

    printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",

    bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,

    bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,

    bookinfo[n].lendersex,bookinfo[n].lendernum);

    }

    }

    }

    printf("\n\n按任意鍵回到主菜單!\n");

    getch();

    }

    void choice_7_display_according_exitflag()/*根據(jù)存在狀態(tài)列出圖書信息*/

    {

    FILE *p;

    int n;

    int count=0;

    BOOKINFO bookinfo[100];

    int booknumber;

    system("cls");

    booknumber=0;

    p=fopen("c:\\bookinfo.data","rb");

    while(!feof(p))

    {

    fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);

    booknumber++;

    }

    booknumber--;

    fclose(p);

    if(booknumber==0)

    {

    printf("書庫中沒有任何書目存在!\n");

    }

    else

    {

    for(n=0;n<booknumber;n++)

    if(bookinfo[n].isExit==1)

    count++;

    if(count==0)

    printf("書庫中的書籍全部借出!\n");

    else

    {

    printf("書庫中未被借出的圖書信息如下:\n\n");

    printf(" 圖書信息 | 借書人信息 \n");

    printf("編號 名稱 單價(jià) 作者 圖書狀態(tài) | 姓名 性別 學(xué)號\n");

    for(n=0;n<booknumber;n++)

    if(bookinfo[n].isExit==1)

    {

    printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",

    bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,

    bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,

    bookinfo[n].lendersex,bookinfo[n].lendernum);

    }

    }

    }

    printf("\n按任意鍵返回主菜單!\n");

    getch();

    }

    void main()

    {

    char choice;

    clock_t tm;

    FILE *p;

    if((p=fopen("c:\\bookinfo.data","rb"))==NULL)

    {

    p=fopen("c:\\bookinfo.data","wb");

    fclose(p);

    }

    while(1)

    {

    system("cls");

    menu();

    choice=getch();

    switch(choice)

    {

    case '1':choice_1_input_new();break;/*輸入新進(jìn)的圖書信息*/

    case '2':choice_2_display_all();break;/*顯示全部圖書信息*/

    case '3':choice_3_search_according_name();break;/*根據(jù)圖書名稱顯示圖書的信息*/

    case '4':choice_4_delete_according_name();break;/*根據(jù)圖書名稱對圖書信息進(jìn)行刪除*/

    case '5':choice_5_sort_according_name();break;/*根據(jù)圖書名稱排序*/

    case '6':choice_6_display_high_price();break;/*根據(jù)價(jià)格列出圖書信息*/

    case '7':choice_7_display_according_exitflag();break;/*根據(jù)存在狀態(tài)列出圖書信息*/

    case '8':printf("\n\n\t\t\t謝謝使用,再見!\n\t\t\t按任意鍵退出!\n");getch();return;

    default:

    printf("\n\n\t\t\t請輸入菜單中的數(shù)字!(1~8)");

    tm=clock();

    while(clock()<tm+1800);

    break;

    }

    }

    }

    二、編程,用c語言編輯

    /*本程序轉(zhuǎn)自天涯潛水2的blog*/

    #include <stdio.h>

    #include <malloc.h>

    #include <conio.h>

    #include <string.h>

    #include <stdlib.h>

    #define LEN sizeof(struct booklist)

    #define LEN2 sizeof(struct memberlist)

    #define LEN3 sizeof(struct readers)

    typedef struct readers//借書信息結(jié)構(gòu)體

    {

    char name[30];//借書人的姓名

    struct readers *next2;

    }reader;

    //書本信息結(jié)構(gòu)體

    typedef struct booklist

    {

    char num[20]; //書號

    char name[30]; //書名

    char concern[50];//出版社

    char date[20];//出版日期

    char author[20];//作者

    int page;//頁數(shù)

    int price;//價(jià)格

    int imformation;//圖書剩余數(shù)量

    reader *a;//借閱人

    struct booklist *next;

    }Book;

    void creatlist();//創(chuàng)建新的書本信息

    void print(Book *head);//打印書本信息

    void save(Book *head);//儲存書本信息

    void AddBook();//添加書本信息

    void DelBook();//刪除書本信息

    Book *read();//讀取書本信息

    void manager();//管理員操作

    void Bookconsult(); //圖書查詢

    int Borrow();//借書

    int Return();//還書

    Book *sort(Book *head);//書本信息按書號排序

    void imformation();//系統(tǒng)信息

    Book *head=NULL,*p1=NULL,*p2=NULL;

    //創(chuàng)建新的書本信息

    void creatlist()

    {

    int i,n;

    printf("要?jiǎng)?chuàng)建的書本數(shù)目");

    scanf("%d",&n);

    p2=head=(Book *)malloc(LEN); //創(chuàng)建帶有頭結(jié)點(diǎn)的鏈表

    p2->a=(reader *)malloc(LEN3);

    p2->a->next2=NULL;

    p2->next=NULL;

    printf("請輸入書的信息:\n");

    for(i=1;i<=n;i++)

    {

    p1=(Book *)malloc(LEN);

    printf("書號: "); scanf("%s",p1->num);

    printf("書名: "); scanf("%s",p1->name);

    printf("出版社: "); scanf("%s",p1->concern);

    printf("出版日期: "); scanf("%s",p1->date);

    printf("作者: "); scanf("%s",p1->author);

    printf("書本頁數(shù): "); scanf("%d",&p1->page);

    printf("書本價(jià)格(元): "); scanf("%d",&p1->price);

    p1->a=(reader *)malloc(LEN3);

    p1->a->next2=NULL;

    p1->imformation=10;

    p1->next=NULL;

    p2->next=p1;

    p2=p1;

    if(i<n) printf("下一本:\n");

    }

    head=sort(head);

    save(head);

    print(head);

    }

    //打印書本信息

    void print(Book *head)

    {

    Book *p=NULL;

    reader *p0=NULL;

    p=head->next;

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

    while(p!=NULL)

    {

    printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(shù)(頁) : %d\n書本價(jià)格(元) : %d\n剩余數(shù)量 : %d\n",p->num,p->name,p->concern,p->date,p->author,p->page,p->price,p->imformation);

    printf("借閱圖書的人:");

    if(p->a->next2==NULL) printf("------------暫無借閱人!");

    else

    {

    for(p0=p->a->next2;p0!=NULL;p0=p0->next2)

    {

    printf("%s ",p0->name);

    }

    }

    p=p->next; /* p后移一個(gè)結(jié)點(diǎn) */

    printf("\n");

    printf("\n");

    }

    }

    //書本信息按書號排序

    Book *sort(Book *head)

    {

    Book *p1=NULL,*p2=NULL,*p3=NULL,*min=NULL,*min2=NULL,*head2=head->next;

    p1=head2;

    while(p1->next!=NULL)

    {

    min=p2=p1; /*把首結(jié)點(diǎn)作為最小值*/

    while(p2->next!=NULL)

    {

    if(strcmp(min->num,p2->next->num)>0) /*首結(jié)點(diǎn)與下一結(jié)點(diǎn)比較*/

    {

    min2=p2;

    min=p2->next;

    }

    p2=p2->next;

    }

    if(min!=p1)

    {

    min2->next=min->next; /*刪除最小結(jié)點(diǎn)*/

    min->next=p1; /*插入最小結(jié)點(diǎn)*/

    if(p1==head2) head2=min;

    else p3->next=min; /*p3為min前的結(jié)點(diǎn)指針*/

    p3=min;

    }

    else

    {

    p3=p1;

    p1=p1->next;

    }

    }

    head->next=head2;

    return(head);

    }

    //儲存書本信息

    void save(Book *head)

    {

    FILE *fp,*fp2;

    Book *p=NULL;

    reader *q=NULL;

    fp=fopen("書本信息.txt","wb"); //printf("不能打開文件!\n");

    fp2=fopen("借閱信息.txt","wb"); //printf("不能打開文件!\n");

    p=head;

    while(p!=NULL)

    {

    fwrite(p,LEN,1,fp); /*逐個(gè)結(jié)點(diǎn)寫文件*/

    for(q=p->a;q!=NULL;q=q->next2)

    {fwrite(q,LEN3,1,fp2);}

    p=p->next;

    }

    fclose(fp);

    fclose(fp2);

    }

    //添加書本信息

    void AddBook()

    {

    FILE *fp,*fp2;

    Book *addbook=NULL;

    reader *p0=NULL;

    fp=fopen("書本信息.txt","ab"); //追加方式打開文件

    fp2=fopen("借閱信息.txt","ab");

    addbook=(Book *)malloc(LEN);

    printf("輸入書本信息:\n");

    printf("書號: "); scanf("%s",addbook->num);

    printf("書名: "); scanf("%s",addbook->name);

    printf("出版社: "); scanf("%s",addbook->concern);

    printf("出版日期: "); scanf("%s",addbook->date);

    printf("作者: "); scanf("%s",addbook->author);

    printf("書本頁數(shù): "); scanf("%d",&addbook->page);

    printf("書本價(jià)格(元): "); scanf("%d",&addbook->price);

    p0=(reader *)malloc(LEN3);

    p0->next2=NULL;

    addbook->a=p0;

    addbook->imformation=10;

    addbook->next=NULL;

    fwrite(addbook,LEN,1,fp); /*塊寫*/

    fwrite(p0,LEN3,1,fp2);

    fclose(fp);

    fclose(fp2);

    }

    //讀取書本信息

    Book *read()

    {

    FILE *fp,*fp2;

    Book *p=NULL,*p1=NULL,*head=NULL;

    reader *p0=NULL,*p2=NULL;

    if((fp=fopen("書本信息.txt","rb"))==NULL) printf("不能打開文件或文件不存在!\n");

    if((fp2=fopen("借閱信息.txt","rb"))==NULL) printf("不能打開文件或文件不存在!\n");

    head=(Book *)malloc(LEN);

    fread(head,LEN,1,fp);

    p1=head;

    p0=(reader *)malloc(LEN3);

    fread(p0,LEN3,1,fp2);

    p0->next2=NULL;

    head->a=p0;

    head->next=NULL;

    p=(Book *)malloc(LEN);

    while(fread(p,LEN,1,fp)) /*逐個(gè)結(jié)點(diǎn)讀取*/

    {

    p1->next=p;

    p1=p1->next;

    p0=(reader *)malloc(LEN3);

    p1->a=p0;

    while(fread(p0,LEN3,1,fp2))

    {

    if(p0->next2==NULL)

    {

    p2=p0;

    p0=(reader *)malloc(LEN3);

    break;

    }

    p2=p0;

    p0=(reader *)malloc(LEN3);

    p2->next2=p0;

    }

    free(p0);

    p2->next2=NULL;

    p=(Book *)malloc(LEN);

    }

    p1->next=NULL;

    free(p);

    fclose(fp);

    fclose(fp2);

    head=sort(head);

    if(head!=NULL) return(head);

    else

    {

    printf("文件為空!\n");

    return 0;

    }

    }

    //刪除書本信息

    void DelBook()

    {

    Book *head=NULL,*p=NULL,*q=NULL;

    char bookname[30];

    head=read();

    printf("輸入要?jiǎng)h除的書名: ");

    scanf("%s",bookname);

    p=head;

    while(p!=NULL)/*按名字查找要?jiǎng)h除的圖書*/

    {

    if(strcmp(p->name,bookname)==0)

    {

    if(p==head)

    {

    head=head->next;

    break;

    }

    else

    {

    q->next=p->next;

    break;

    }

    }

    q=p;

    p=p->next;

    }

    save(head);

    }

    //管理員操作

    void manager()

    {

    int n,i=0,k=1;

    while(k==1)

    {

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

    printf(" 請選擇你需要的操作\n");

    printf(" ◎ 1.建立新的書本信息\n");

    printf(" ◎ 2.插入書本信息\n");

    printf(" ◎ 3.刪除書本信息\n");

    printf(" ◎ 4.讀取所有書本信息\n");

    printf(" ◎ 5.讀取指定書本信息\n");

    printf(" ◎ 6.返回到上級目錄\n");

    printf(" ◎ 7.保存并退出\n");

    printf("請輸入:");

    scanf("%d",&n);

    switch(n)

    {

    case 1: creatlist();break;

    case 2: AddBook();break;

    case 3: DelBook();break;

    case 4: head=read();system("CLS");print(head);break;

    case 5: system("CLS");Bookconsult();break;

    case 6: k=0;break;

    default: k=0;break;

    }

    }

    }

    //圖書查詢

    void Bookconsult()

    {

    int n,m=1,sign=0;

    Book *p=NULL,*p1=NULL,*p0=NULL,*head=NULL;

    reader *p2=NULL;

    char a[30],b[20],c[20];

    head=read();

    while(m==1)

    {

    printf(" 請選擇你查詢書本的方式: 1.按書名 2.按書的編號 3.按書的作者 4.退出查詢\n");

    printf("輸入=");

    scanf("%d",&n);

    switch(n)

    {

    case 1: printf("請輸入書名:");

    scanf("%s",a);

    p0=head;

    while(p0!=NULL)

    {

    if(strcmp(a,p0->name)==0)

    {

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

    printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(shù)(頁) : %d\n書本價(jià)格(元) : %d\n剩余數(shù)量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);

    printf("借閱圖書的人:");

    if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");

    else

    {

    for(p2=p0->a;(p2=p2->next2)!=NULL;)

    {printf("%s ",p2->name);}

    }

    printf("\n");

    sign=1;

    p0=p0->next;

    }

    else p0=p0->next;

    }

    if(sign==0) printf("沒有這本書的信息.\n");

    break;

    case 2: printf("請輸入書的編號:");

    scanf("%s",b);

    p0=head;

    while(p0!=NULL)

    {

    if(strcmp(b,p0->num)==0)

    {

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

    printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(shù)(頁) : %d\n書本價(jià)格(元) : %d\n剩余數(shù)量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);

    printf("借閱圖書的人:");

    if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");

    else

    {

    for(p2=p0->a;(p2=p2->next2)!=NULL;)

    {printf("%s ",p2->name);}

    }

    printf("\n");

    break;

    }

    else p0=p0->next;

    }

    if(p0==NULL) printf("沒有這本書的信息.\n");

    break;

    case 3: printf("請輸入書的作者:");

    scanf("%s",c);

    p0=head;

    while(p0!=NULL)

    {

    if(strcmp(c,p0->author)==0)

    {

    printf

    ("*******************************************************************************\n");

    printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(shù)(頁) : %d\n書本價(jià)格(元) %d\n剩余數(shù)量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);

    printf("借閱圖書的人:");

    if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");

    else

    {

    for(p2=p0->a;(p2=p2->next2)!=NULL;)

    {printf("%s ",p2->name);}

    }

    printf("\n");

    sign=1;

    p0=p0->next;

    }

    else p0=p0->next;

    }

    if(sign==0) printf("沒有這本書的信息.\n");

    break;

    default: m=0;break;

    }

    }

    }

    //借書

    int Borrow()

    {

    char a[30],b[30],c;

    Book *p0=NULL,*head=NULL;

    reader *p2=NULL,*p3=NULL;

    head=read();

    printf("請輸入要借的書的書號:");

    scanf("%s",a);

    p0=head->next;

    while(p0!=NULL)

    {

    if((strcmp(a,p0->num))==0)

    {

    if(p0->imformation>0)

    {

    printf("圖書在館,可以借出,是否確定借出?'y'or'n'\n");

    c=getchar();

    scanf("%c",&c);

    if(c=='y')

    {

    printf("請?jiān)俅屋斎肽愕挠脩裘?");

    scanf("%s",b);

    p3=(reader *)malloc(LEN3);

    strcpy(p3->name,b);

    if(p0->a->next2==NULL)

    {

    p0->a->next2=p3;

    p3->next2=NULL;

    }

    else

    {

    for(p2=p0->a;p2->next2!=NULL;p2=p2->next2);

    p2->next2=p3;

    p3->next2=NULL;

    }

    --p0->imformation;

    save(head);

    printf("操作完成,可以帶走圖書。\n");

    return 1;

    break;

    }

    else

    {

    return 0;

    break;

    }

    }

    else printf("很抱歉,該圖書不在館.\n");return 0;break;

    }

    else p0=p0->next;

    }

    if(p0==NULL)

    {

    printf("很抱歉,沒有這本書。\n");

    return 0;

    }

    else return 2;

    }

    //還書

    int Return()

    {

    Book *p0=NULL,*head=NULL;

    reader *p2=NULL,*p3=NULL;

    char c[20],b[30];

    head=read();

    printf("請輸入要還的書的書號:");

    scanf("%s",&c);

    p0=head->next;

    while(p0!=NULL)

    {

    if((strcmp(c,p0->num))==0)

    {

    printf("請輸入你的用戶名:");

    scanf("%s",&b);

    if(p0->a->next2==NULL) {printf("你沒有借這本書!\n");break;}

    else

    {

    p3=p0->a;

    p2=p3->next2;

    while(p2!=NULL)

    {

    if(strcmp(p2->name,b)==0)

    {

    if(p2->next2==NULL) {p3->next2=NULL;free(p2);break;}

    else

    {

    p3->next2=p2->next2;

    free(p2);

    break;

    }

    }

    else

    {

    p3=p2;

    p2=p2->next2;

    }

    }

    if(p2==NULL) printf("你沒有借這本書!\n");

    }

    ++p0->imformation;

    save(head);

    printf("書已歸館,操作完成。\n");

    return 1;

    break;

    }

    else p0=p0->next;

    }

    if(p0==NULL)

    {

    printf("沒有這本書。\n");

    return 0;

    }

    else return 2;

    }

    //借書信息

    void imformation()

    {

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

    printf("※ 歡迎你使用我們的圖書管理系統(tǒng)!以下是本系統(tǒng)的有關(guān)說明: ※\n");

    printf("※本系統(tǒng)主要功能是進(jìn)行圖書的有關(guān)管理,你可以進(jìn)行圖書信息的創(chuàng)建、插入、刪除、 ※\n");

    printf("※查詢;在操作中主要是以阿拉伯?dāng)?shù)字來選擇相應(yīng)的菜單功能,在選擇時(shí)以'y'表示 '是' ※\n");

    printf("※以'n'表示'不是'。在你操作的時(shí)候就會(huì)有相應(yīng)的操作提示。 ※\n");

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

    }

    main()

    {

    int n,k=1;

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

    printf("\n\n");

    printf(" 歡迎進(jìn)入我們的圖書管理系統(tǒng)! \n");

    printf("\n\n");

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

    while(k==1)

    {

    printf(" 請選擇你的操作: 1.管理員操作 2.系統(tǒng)信息 3.退出系統(tǒng)\n");

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

    printf(" 你的選擇是:");

    scanf("%d",&n);

    system("CLS");

    switch(n)

    {

    case 1: manager();break;

    case 2: imformation();break;

    default: printf("+++++++++++++++++++++++++++歡迎你再次使用我們的系統(tǒng)!++++++++++++++++++++++++++++\n");k=0;break;

    }

    }

    }

    三、求數(shù)據(jù)結(jié)構(gòu)—圖書管理系統(tǒng)源程序,要求實(shí)現(xiàn)以下功能。

    #include <iostream>

    #include <iomanip>

    #include <string>

    #include <fstream>//輸入/輸出文件流類

    using namespace std;

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

    const int Maxb=100;//最多的圖書

    const int Maxbor=5;//每位讀者最多借五本書

    //讀者類,實(shí)現(xiàn)對讀者的信息的描述

    class Reader

    {

    private:

    int tag; //刪除標(biāo)記 1:已刪 0:未刪

    int no; //讀者編號

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

    int borbook[Maxbor];//所借圖書

    public:

    Reader() {}

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

    int gettag() {return tag;} //獲取刪除標(biāo)記

    int getno() {return no;} //獲取讀者編號

    void setname(char na[]) //設(shè)置姓名

    {

    strcpy(name,na);

    }

    void delbook(){ tag=1; }//設(shè)置刪除標(biāo)記 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;

    }

    };

    //讀者類庫,實(shí)現(xiàn)建立讀者的個(gè)人資料

    class RDatabase

    {

    private:

    int top; //讀者記錄指針

    Reader read[Maxr];//讀者記錄

    public:

    RDatabase() //構(gòu)造函數(shù),將reader.txt讀到read[]中

    {

    Reader s;

    top=-1;

    fstream file("reader.txt",ios::in);//打開一個(gè)輸入文件

    while (1)

    {

    file.read((char *)&s,sizeof(s));

    if (!file)break;

    top++;

    read[top]=s;

    }

    file.close(); //關(guān)閉 reader.txt

    }

    void clear()//刪除所有讀者信息

    {

    top=-1;

    }

    int addreader(int n,char *na)//添加讀者時(shí)先查找是否存在

    {

    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();//讀者庫維護(hù)

    ~RDatabase() //析構(gòu)函數(shù),將read[]寫到reader.txt文件中

    {

    fstream file("reader.txt",ios::out);

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

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

    file.write((char *)&read[i],sizeof(read[i]));

    file.close();

    }

    };

    void RDatabase::readerdata()

    {

    char choice;

    char rname[20];

    int readerid;

    Reader *r;

    while (choice!='0')

    {

    cout <<"\n\n\t\t\t讀 者 維 護(hù)\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<<"輸入錯(cuò)誤,請從新輸入:";break;

    }

    }

    }

    //圖書類,實(shí)現(xiàn)對圖書的描述,圖書的編號,書名,借出,還入等

    class Book

    {

    private:

    int tag;//刪除標(biāo)記 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; }//獲取刪除標(biāo)記

    void setname(char na[])//設(shè)置書名

    {

    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;

    }

    };

    //圖書庫類,實(shí)現(xiàn)對圖書的維護(hù),查找,刪除等

    class BDatabase

    {

    private:

    int top; //圖書記錄指針

    Book book[Maxb]; //圖書記錄

    public:

    BDatabase()//構(gòu)造函數(shù),將book.txt讀到book[]中

    {

    Book b;

    top=-1;

    fstream file("book.txt",ios::in);

    while (1)

    {

    file.read((char *)&b,sizeof(b));

    if (!file) break;

    top++;

    book[top]=b;

    }

    file.close();

    }

    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();//圖書庫維護(hù)

    void disp()

    {

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

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

    book[i].disp();

    }

    ~BDatabase()//析構(gòu)函數(shù),將book[]寫到book.txt文件中

    {

    fstream file("book.txt",ios::out);

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

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

    file.write((char *)&book[i],sizeof(book[i]));

    file.close();

    }

    };

    void BDatabase::bookdata()

    {

    char choice;

    char bname[40];

    int bookid;

    Book *b;

    while (choice!='0')

    {

    cout <<"\n\n\n\t\t\t圖 書 維 護(hù) "<<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<<"輸入錯(cuò)誤,請從新輸入:";

    }

    }

    }

    //main() 函數(shù)的實(shí)現(xiàn),程序的主界面的引導(dǎo)

    void main()

    {

    char choice;

    int bookid,readerid;

    RDatabase ReaderDB;

    Reader *r;

    BDatabase BookDB;

    Book *b;

    while(choice!='0')

    {

    cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統(tǒng)\n\n\n";

    cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維 護(hù)\n\n\t\t\t4 讀 者 維 護(hù)\n\n\t\t\t0 離 開"<<endl;

    cin >> choice;

    switch (choice)

    {

    case '1':

    cout <<" 借書 讀者編號:";

    cin >>readerid;

    cout <<" 圖書編號: ";

    cin >>bookid;

    r=ReaderDB.query(readerid);//按編號查找

    if (NULL==r)

    {

    cout <<" 不存在該讀者,不能借書"<< endl;

    break;

    }

    b=BookDB.query(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=ReaderDB.query(readerid);

    if (r==NULL)

    {

    cout <<" 不存在該讀者,不能還書" << endl;

    break;

    }

    b=BookDB.query(bookid);

    if (b==NULL)

    {

    cout <<" 不存在該圖書,不能還書" <<endl;

    break;

    }

    b->retbook();

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

    break;

    case '3':

    BookDB.bookdata();

    break;

    case '4':

    ReaderDB.readerdata();

    break;

    default:cout<<"輸入錯(cuò)誤,請從新輸入:";

    }

    }

    }

    四、借同學(xué)百度知道問的,求一個(gè)C語言課程設(shè)計(jì),關(guān)于圖書館借閱的程序。

    這個(gè)不是我寫的,但改改就能用。希望對你能有幫助。。。

    #include <stdio.h>

    #include <string.h>

    #include <stdlib.h>

    //

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

    #define LIST_INIT_SIZE 100//圖書證使用者最大值定義為100

    //借書人的結(jié)構(gòu)體

    typedef struct Boro//借書行為

    {

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

    char RetDate[8];//歸還日期

    struct Boro *next;

    }Bor;

    typedef struct LinkBook

    {

    Bor *next;//該圖書證的借書行為

    char CNum[20];//證號

    int Total;//借書的數(shù)量

    }lend[LIST_INIT_SIZE];//借書人數(shù)組

    //圖書的結(jié)構(gòu)體信息

    typedef struct LNode

    {

    char CardNum[20];//圖書證號

    struct LNode *next;

    }LinkList; //借書人

    typedef struct book

    {//每種圖書需要登記的內(nèi)容包括書號ISBN、書名、作者、出版社、總庫存量和現(xiàn)庫存量。

    char num[20];//書號

    char name[20];//書名

    char auth[20];//作者

    char pub[20];//出版社

    int TotNum;//總庫存

    int NowNum;//現(xiàn)庫存

    LinkList *next;//借了該書的人

    }ook[MAXSIZE];

    //

    int Retotal;//讀者數(shù)量

    int total; //定義外部變量.書的種類數(shù)

    //

    //結(jié)構(gòu)體初始化

    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;//外部函數(shù)mid,用來返回查找到的位置

    bool BinarySearch(ook boo,char SearchNum[]) //二分法查找比較書號

    { //用bool函數(shù),但由于函數(shù)不能有兩個(gè)返回值,所以設(shè)置一個(gè)外部變量mid,用來返回查找到的位置

    int low=0,high=total-1;

    int found=0;

    while(low<=high)

    {

    mid=(low+high)/2; //中間點(diǎn)

    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、 采編入庫:新購入一種書,如果該書在圖書賬目中已經(jīng)存在,則將其庫存量增加(包

    //括總庫存量和現(xiàn)庫存量),如果該書不存在,則在圖書賬目中增加一種書,總庫存量和現(xiàn)庫存量均為1。

    if(BinarySearch(boo,BuyNum)) //如果書庫中有此書

    {

    boo[mid].TotNum++; //總庫存加1

    boo[mid].NowNum++; //現(xiàn)庫存加1

    printf("入庫成功.\n");

    printf("已更改書庫中該書的信息。編號 %s 的書 %s 作者是 %s ,出版社是 %s ,目前的總庫存是 %d ,現(xiàn)庫存是 %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("該書在書庫中不存在。設(shè)立新書目,請補(bǔ)全書的詳細(xì)信息。\n");

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

    printf("該書購入的數(shù)量是:");

    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);//補(bǔ)全信息

    boo[i].next=NULL;

    total++;//總量+1

    printf("已增加該書的信息。編號 %s 的書 %s 作者是 %s ,出版社是 %s ,目前的總庫存是 %d ,現(xiàn)庫存是 %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、 清空庫存:某一種書已無保留價(jià)值,將它從圖書賬目中注銷。

    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、 借閱:如果一種書的現(xiàn)庫存量大于零,則借出一本書,將現(xiàn)庫存量減1,

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

    Bor *p,*q;

    LinkList *m,*n;

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

    printf("書庫里沒這書。\n");//如果有這書

    if(BinarySearch(boo,BorrowNum)) //書庫里有

    {

    if(boo[mid].NowNum>0) //看現(xiàn)庫存是否大于0

    {

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

    if(boo[mid].next==NULL) //若該書信息下顯示該種書還沒被人借過

    {

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

    boo[mid].next=m;//該圖書信息中的鏈表的第一個(gè)結(jié)點(diǎn)

    strcpy(m->CardNum,CaNum);

    m->next=NULL;//后一個(gè)結(jié)點(diǎn)為空

    }

    else //如果已經(jīng)有人在借這書了

    {

    m=boo[mid].next;

    while(m->next) //遍歷到最后一個(gè)結(jié)點(diǎn)

    m=m->next;

    n=(LinkList *)malloc(sizeof(LNode));//分配空間,增加1個(gè)結(jié)點(diǎn)

    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))//如果已經(jīng)有該圖書證的信息

    {

    p=Lin[i].next;

    while(p->next)p=p->next;//遍歷到最后一個(gè)結(jié)點(diǎn)

    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++; //借閱證號信息總數(shù)加1

    printf("借閱成功.\n");

    }

    }

    else printf("借閱失敗.該書現(xiàn)在庫存為0.\n");

    }

    }

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

    {//4、 歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。

    Bor *p,*q;

    LinkList *m,*n;

    int flag=0;//設(shè)置一個(gè)參數(shù)

    if(!BinarySearch(boo,ReturnNum)||!total) //沒書

    printf("書庫中無此書.\n");

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

    {

    m=boo[mid].next;

    if(!strcmp(m->CardNum,BorrowerNum)) //如果是第一個(gè)借的人還的

    {

    boo[mid].NowNum++; //現(xiàn)庫存加1

    boo[mid].next=m->next; //刪除結(jié)點(diǎn)

    free(m); //釋放該結(jié)點(diǎn)的空間空間

    }

    else

    {

    while(m->next) //查找歸還者的借閱者結(jié)點(diǎn)

    {

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

    {

    n=m->next; //n為歸還者的借閱結(jié)點(diǎn)

    m->next=n->next; //m指向歸還者的借閱結(jié)點(diǎn)的下一結(jié)點(diǎn)

    free(n); //釋放空間

    boo[mid].NowNum++; //現(xiàn)庫存加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; //指向下一借書結(jié)點(diǎn)

    free(p); //釋放結(jié)點(diǎn)空間

    printf("成功歸還該書.\n");

    flag=1;

    break;

    }

    else //找不到

    {

    while(p->next) //找到歸還書的借書結(jié)點(diǎn)

    {

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

    {

    q=p->next; //q為歸還書的借書結(jié)點(diǎn)

    p->next=q->next; //p指向下一借書結(jié)點(diǎn)

    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]; //其后都往前移一位,覆蓋掉當(dāng)前信息

    strcpy(Lin[j].CNum," "); //刪除圖書證號

    Retotal--; //圖書證數(shù)減1

    } //刪除當(dāng)前狀態(tài)下沒借書的圖書證的信息,節(jié)省空間

    if(flag==0) printf("無該證信息.\n");

    }

    //5、 查找:實(shí)現(xiàn)按三種查詢條件之一查找:按書號查找、

    //按書名查找、按作者查找。注:可不實(shí)現(xiàn)組合查找,即幾個(gè)條件組合查找。

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

    {//BY NUM 根據(jù)書號查找

    LinkList *p;

    p=boo[mid].next;

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

    else//找到了的話

    {

    {

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

    printf("┃ 書號 ┃ 書名 ┃ 作者 ┃ 出版社 ┃ 現(xiàn)庫存 ┃ 總庫存 ┃\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);//在按書號查找的函數(shù)里也顯示借了這本書的借閱者的證號

    p=p->next;

    }

    printf(" \n");

    }//顯示查找的書籍的信息

    }

    void SearchByName(ook &boo)

    {//BY NAME 根據(jù)書名查找

    char SeaName[20];

    printf("輸入想查找的書的書名:\n");

    scanf(" %s",&SeaName);

    printf("找到符合該書名的書的詳細(xì)信息如下:\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現(xià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 根據(jù)作者查找

    char SeaAuth[20];

    printf("輸入想查找的書的作者:\n");

    scanf(" %s",&SeaAuth);

    printf("找到符合該作者的書的詳細(xì)信息如下:\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現(xià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("這個(gè)證借的書有:\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)//當(dāng)p不空時(shí)

    {

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

    {

    printf("書號為 %s 證號為 %s 應(yīng)歸還日期為 %s \n",p->BNum,Lin[i].CNum,p->RetDate);

    }//顯示所有超期未還的書的信息

    p=p->next;

    }

    }

    }

    void Menu() //菜單

    {

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

    printf("│ │\n");

    printf("│ 1. 采編入庫:新購入一種書,如果該書在圖書賬目中已經(jīng)存在, │\n");

    printf("│ 則將其庫存量增加(包括總庫存量和現(xiàn)庫存量)。 │\n");

    printf("│ 如果該書不存在,則在圖書賬目中增加一種書, │\n");

    printf("│ 總庫存量和現(xiàn)庫存量均為輸入的數(shù)字。 │\n");

    printf("│ 2. 清空庫存:某一種書已無保留價(jià)值,將它從圖書賬目中注銷。 │\n");

    printf("│ 3. 借閱:如果一種書的現(xiàn)庫存量大于零,則借出一本書,將現(xiàn)庫存量減1, │\n");

    printf("│ 并登記借閱者的圖書證號和歸還期限。 │\n");

    printf("│ 4. 歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。 │\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("-----------------------歡 迎 進(jìn) 入 圖 書 管 理 系 統(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("請輸入想要?dú)w還的書的書號:\n");

    scanf(" %s",&BNum);

    printf("請輸入圖書證號:");

    scanf(" %s",&CNum);

    Return(Bo,Lin,BNum,CNum);

    break;

    case 5://查找//根據(jù)書號查找

    printf("請輸入書號:");//輸入書號查找

    scanf(" %s",&BNum);

    SearchByNum(Bo,BNum);

    break;

    case 6://根據(jù)書名查找

    SearchByName(Bo);

    break;

    case 7://根據(jù)作者查找

    SearchByAuth(Bo);

    break;

    case 8://查看某圖書證所借的所有書

    ViewCard(Bo,Lin);

    break;

    case 9: //查看全部超期未還的書

    ViewBook(Bo,Lin);

    break;

    case 0://退出系統(tǒng)

    exit(0);break;

    default:printf("輸入錯(cuò)誤!\n");exit(0);break;

    }

    }

    }

    以上就是關(guān)于圖書信息管理系統(tǒng)c語言程序設(shè)計(jì)相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    亞馬遜圖書排行榜(亞馬遜圖書排行榜總榜)

    圖書館前景觀設(shè)計(jì)

    浙大圖書館開放時(shí)間(浙大圖書館開放時(shí)間最新)

    虛擬商品購買(財(cái)付通虛擬商品購買)

    MChat聊天軟件下載(mchat聊天軟件下載安卓版)_1