HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    图书信息管理系统c语言程序设计

    发布时间:2023-04-01 08:34:02     稿源: 创意岭    阅读: 404        当前文章关键词排名出租

    大家好!今天让创意岭的小编来大家介绍下关于图书信息管理系统c语言程序设计的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    创意岭作为行业内优秀企业,服务客户遍布全国,相关业务请拨打175-8598-2043,或微信:1454722008

    本文目录:

    图书信息管理系统c语言程序设计

    一、c语言程序设计图书馆源代码

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    #include <string.h>

    typedef int BOOL;

    typedef struct bookinfo

    {

    char number[15];/*产品编号*/

    char name[30];/*产品名称*/

    float price;/*单价*/

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

    BOOL isExit;/*存在状态*/

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

    char lendersex[2];/*借书人性别*/

    char lendernum[15];/*借书人学号*/

    }BOOKINFO;

    void menu()

    {

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

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

    printf("\t\t\t1:新进图书基本信息的输入\n");

    printf("\t\t\t2:显示全部记录\n");

    printf("\t\t\t3:根据图书名称查询图书基本信息\n");

    printf("\t\t\t4:根据图书名称对撤销的图书信息进行删除\n");

    printf("\t\t\t5:按照图书名称从小大到排序\n");

    printf("\t\t\t6:统计某价格以上的图书数量\n");

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

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

    }

    void choice_1_input_new()/*输入新进的图书信息*/

    {

    char choice;

    FILE *p;

    BOOKINFO newbook;

    system("cls");

    while(1)

    {

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

    gets(newbook.number);

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

    gets(newbook.name);

    printf("输入图书单价:");

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

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

    printf("输入图书的作者:");

    gets(newbook.auther);

    printf("输入借书人姓名:");

    gets(newbook.lendername);

    printf("输入借书人性别:");

    gets(newbook.lendersex);

    printf("输入借书人学号:");

    gets(newbook.lendernum);

    printf("是否保存该条书目?(Y/N)\n");

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

    {

    newbook.isExit=1;/*将图书状态设置成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是否继续添加书目?(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()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

    fclose(p);

    booknumber--;

    if(booknumber==0)

    {

    printf("没有任何图书信息!\n\n");

    }

    else

    {

    n=0;

    printf(" 图书信息如下\n");

    printf(" 图书信息 | 借书人信息 \n");

    printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\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()/*根据图书名称显示图书的信息*/

    {

    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()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

    fclose(p);

    while(1)

    {

    printf("输入要查询的书本名称:");

    gets(search);

    if(booknumber==0)

    {

    printf("书库中没有任何信息!\n\n");

    printf("按任意键回到主菜单!\n\n");

    getch();

    break;

    }/*if结束*/

    else

    {

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

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

    {

    printf("该书的详细信息如下:\n");

    printf(" 图书信息 | 借书人信息 \n");

    printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\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是否继续查询?(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结束*/

    }/*while(1)结束*/

    }

    void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/

    {

    char search[20]="";/*search用来存放要删除的书名*/

    int n,i;

    FILE *p;

    char choice;

    BOOKINFO bookinfo[100];

    int booknumber;

    system("cls");

    while(1)

    {

    printf("输入要删除的书本名称:");

    gets(search);

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

    booknumber=0;

    while(!feof(p))

    {

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

    booknumber++;

    }

    booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

    fclose(p);

    if(booknumber==0)

    {

    printf("书库中没有任何信息!\n\n");

    printf("按任意键回到主菜单!\n\n");

    getch();

    break;

    }/*if结束*/

    else

    {

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

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

    {

    break;

    }

    if(n>=booknumber)

    printf("没有查找该书的任何信息!\n");

    else

    {

    printf("是否确认需要删除该条书目?(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是否继续进行删除操作?(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结束*/

    }/*while(1)结束*/

    }

    void choice_5_sort_according_name()/*根据图书名称排序*/

    {

    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()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

    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()/*根据价格列出图书信息*/

    {

    float price;

    FILE *p;

    int n;

    int count=0;

    BOOKINFO bookinfo[100];

    int booknumber;

    system("cls");

    printf("请输入价格:");

    scanf("%f",&price);

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

    booknumber=0;

    while(!feof(p))

    {

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

    booknumber++;

    }

    booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

    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$价格高的图书!",price);

    else

    {

    printf(" 价格高于%.1f$的图书信息如下\n",price);

    printf(" 图书信息 | 借书人信息 \n");

    printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\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()/*根据存在状态列出图书信息*/

    {

    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("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\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;/*输入新进的图书信息*/

    case '2':choice_2_display_all();break;/*显示全部图书信息*/

    case '3':choice_3_search_according_name();break;/*根据图书名称显示图书的信息*/

    case '4':choice_4_delete_according_name();break;/*根据图书名称对图书信息进行删除*/

    case '5':choice_5_sort_according_name();break;/*根据图书名称排序*/

    case '6':choice_6_display_high_price();break;/*根据价格列出图书信息*/

    case '7':choice_7_display_according_exitflag();break;/*根据存在状态列出图书信息*/

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

    default:

    printf("\n\n\t\t\t请输入菜单中的数字!(1~8)");

    tm=clock();

    while(clock()<tm+1800);

    break;

    }

    }

    }

    二、编程,用c语言编辑

    /*本程序转自天涯潜水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//借书信息结构体

    {

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

    struct readers *next2;

    }reader;

    //书本信息结构体

    typedef struct booklist

    {

    char num[20]; //书号

    char name[30]; //书名

    char concern[50];//出版社

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

    char author[20];//作者

    int page;//页数

    int price;//价格

    int imformation;//图书剩余数量

    reader *a;//借阅人

    struct booklist *next;

    }Book;

    void creatlist();//创建新的书本信息

    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();//系统信息

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

    //创建新的书本信息

    void creatlist()

    {

    int i,n;

    printf("要创建的书本数目");

    scanf("%d",&n);

    p2=head=(Book *)malloc(LEN); //创建带有头结点的链表

    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("书本页数: "); scanf("%d",&p1->page);

    printf("书本价格(元): "); 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书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %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后移一个结点 */

    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; /*把首结点作为最小值*/

    while(p2->next!=NULL)

    {

    if(strcmp(min->num,p2->next->num)>0) /*首结点与下一结点比较*/

    {

    min2=p2;

    min=p2->next;

    }

    p2=p2->next;

    }

    if(min!=p1)

    {

    min2->next=min->next; /*删除最小结点*/

    min->next=p1; /*插入最小结点*/

    if(p1==head2) head2=min;

    else p3->next=min; /*p3为min前的结点指针*/

    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); /*逐个结点写文件*/

    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("书本页数: "); scanf("%d",&addbook->page);

    printf("书本价格(元): "); 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)) /*逐个结点读取*/

    {

    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("输入要删除的书名: ");

    scanf("%s",bookname);

    p=head;

    while(p!=NULL)/*按名字查找要删除的图书*/

    {

    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书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %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书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %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书本页数(页) : %d\n书本价格(元) %d\n剩余数量 : %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("请再次输入你的用户名:");

    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("※ 欢迎你使用我们的图书管理系统!以下是本系统的有关说明: ※\n");

    printf("※本系统主要功能是进行图书的有关管理,你可以进行图书信息的创建、插入、删除、 ※\n");

    printf("※查询;在操作中主要是以阿拉伯数字来选择相应的菜单功能,在选择时以'y'表示 '是' ※\n");

    printf("※以'n'表示'不是'。在你操作的时候就会有相应的操作提示。 ※\n");

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

    }

    main()

    {

    int n,k=1;

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

    printf("\n\n");

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

    printf("\n\n");

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

    while(k==1)

    {

    printf(" 请选择你的操作: 1.管理员操作 2.系统信息 3.退出系统\n");

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

    printf(" 你的选择是:");

    scanf("%d",&n);

    system("CLS");

    switch(n)

    {

    case 1: manager();break;

    case 2: imformation();break;

    default: printf("+++++++++++++++++++++++++++欢迎你再次使用我们的系统!++++++++++++++++++++++++++++\n");k=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() //构造函数,将reader.txt读到read[]中

    {

    Reader s;

    top=-1;

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

    while (1)

    {

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

    if (!file)break;

    top++;

    read[top]=s;

    }

    file.close(); //关闭 reader.txt

    }

    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[]写到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读 者 维 护\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()//构造函数,将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();//图书库维护

    void disp()

    {

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

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

    book[i].disp();

    }

    ~BDatabase()//析构函数,将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图 书 维 护 "<<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=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<<"输入错误,请从新输入:";

    }

    }

    }

    四、借同学百度知道问的,求一个C语言课程设计,关于图书馆借阅的程序。

    这个不是我写的,但改改就能用。希望对你能有帮助。。。

    #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))

    {

    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;

    }

    }

    }

    以上就是关于图书信息管理系统c语言程序设计相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    亚马逊图书排行榜(亚马逊图书排行榜总榜)

    图书馆前景观设计

    浙大图书馆开放时间(浙大图书馆开放时间最新)

    虚拟商品购买(财付通虚拟商品购买)

    MChat聊天软件下载(mchat聊天软件下载安卓版)_1