数据结构课程设计-图书管理系统

这是一个计算机科学领域的课程设计,目标是创建一个图书管理系统。该系统实现了图书和读者信息的初始化、增加、查询以及借还书功能,旨在提供图书馆管理的基本业务操作。

问题及代码:

  1. /* 
  2.   烟台大学计算机与控制工程学院 
  3.   作者:董雪
  4.   时间:2016年12月29日 
  5.   问题描述:设计一个计算机管理系统完成图书管理基本业务。并实现如下功能: 
  6.             1.初始化图书信息 
  7.             2.初始化读者信息 
  8.             3.增加图书信息 
  9.             4.增加用户信息 
  10.             5.登记读者借阅信息 
  11.             6.登记读者归还信息 
  12.             7.查看所有图书资料 
  13.             8.查询读者用户信息 
  14.             9.退出读者管理系统 
  15.    输入描述:若干数据 
  16.    输出描述:若干数据 
  17. */  

头文件still.h

#ifndef STILL_H_INCLUDED  
#define STILL_H_INCLUDED  
  
#include <iostream>  
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
#include <conio.h>  
  
#define Max 4  
using namespace std;  
  
typedef struct book                              //图书情况  
{  
    char book_num[10];                           //书号  
    char book_name[20];                          //书名  
    char book_writer[10];                        //作者  
    int book_xy;                                 //现有图书数量  
    int book_kc;                                 //库存图书数量  
    struct book *next;                           //指向后继结点  
} BK;  
  
typedef struct borrow                            //借书  
{  
    char borrow_book_num[10];                    //借书书号  
    char limit_date[8];                          //还书日期  
} BO;  
  
typedef struct reader                            //读者模块  
{  
    char reader_num[10];                         //读者号  
    char reader_name[10];                         //读者名  
    int right;                                    //读者已借图书数量  
    BO borrow[Max];                               //借书最大数量  
    struct reader *next;  
} RD;  
  
BK *h_book;  
RD *h_reader;  
void Login();                                     //欢迎界面  
int Menu();                                       //菜单函数  
void Init1();                                     //初始化图书函数  
void Init2();                                     //初始化读者  
void Menu_select();                               //主菜单选择函数  
void Insert_New_Book();                           //新书入库函数  
void Find_Book();  
void add_reader();                                //添加读者  
void Print_reader();                              //查询读者信息  
void Print_book();                                //查询图书信息  
void Borrow_Book();                               //借书模块  
void Return_Book();                               //还书模块  
  
#endif // STILL_H_INCLUDED  


源文件main.cpp

#include"still.h"  
  
void Login()  
{    
    cout<<"\n\t\t\t   ★ 欢 ";  
    cout<<"★ 迎 ";  
    cout<<"★ 进 ";  
    cout<<"★ 入 ★\n\n";  
    cout<<"\t   --------------------------------------------------------\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆        图   书   借   阅   管   理   系   统       ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   --------------------------------------------------------\n";  
    cout<<"\n\n\n";  
    cout<<"\t   --------------------------------------------------------\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆        按   任   意   键   进   入   系   统       ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   --------------------------------------------------------\n";  
    getch();
    system("cls");
     
}  

/************************ 
功能描述:主菜单 
输入参数:要选择的功能前的数字 
输出参数:所输入数字对应的功能 
其他说明:无 
*************************/  

int Menu() //主菜单  
{  
    int dm;  
  
    cout<<"\t   --------------------------------------------------------\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆         图 书 管 理 系 统 主 菜 单                 ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆    1: 添加新的图书资料     2: 登记读者用户信息     ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆    3: 登记读者借阅信息     4: 登记读者还书信息     ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆    5: 查看所有图书资料     6: 查询读者用户信息     ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆               0: 退出图书管理系统                  ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   ☆                                                    ☆\n";  
    cout<<"\t   --------------------------------------------------------\n";  
    cout<<"\n\t请选择您需要的服务序号: ";  
  
    for(;;)  
    {  
        cin>>dm; //dm输入的数字  
        if(dm<0||dm>6)  
            cout<<"\n\t您的操作有误,请重新选择(0→6):  ";  
        else break;  
    }  
    return dm;  
}  

/************************ 
功能描述:主菜单选择函数 
输入参数:无 
输出参数:无 
其他说明:无 
*************************/  
  
void Menu_select()//主菜单选择函数  
{  
  
    for(;;)  
    {  
        switch(Menu()) //功能选择  
        {  
        case 0:  
  
            system("cls");  
            cout<<"\n\n\n\n";  
            cout<<"\t    ------------------------------------------------------\n";  
            cout<<"\t    |                                                     | \n";  
            cout<<"\t    |         欢  迎  下  次  使  用  本  系  统  !       | \n";  
            cout<<"\t    |                                                     | \n";  
            cout<<"\t    ------------------------------------------------------  \n";  
            cout<<"\n\n\n\n";  
            exit(0);  
        case 1:  
            Insert_New_Book();  
            break;  
        case 2:  
            add_reader();  
            break;  
        case 3:  
            Borrow_Book();  
            break;  
        case 4:  
            Return_Book();  
            break;  
        case 5:  
            Print_book();  
            break;  
        case 6:  
            Print_reader();  
            break;  
        }  
    }  
}  
 
/************************ 
功能描述:初始化图书
输入参数:编号.书名. 作者.数量 
输出参数:无 
其他说明: 
*************************/  
 
void Init1() //初始化图书  
{  
  
    BK *p0;  //定义变量
    cout<<"\n图书初始化开始,请输入图书信息(包括编号.书名.数量)......\n";  
    p0=(BK*)malloc(sizeof(BK));  
    h_book=p0;                      //创建头结点
    cout<<"\n请输入图书信息:\n";  
    cout<<"图书编号:";              //输入图书编号  
    cin>>p0->book_num;  
    cout<<"图书名称:";             //输入图书名称  
    cin>>p0->book_name;  
    cout<<"图书作者:";             //输入图书作者  
    cin>>p0->book_writer;  
    cout<<"图书数量:";             //输入图书数量  
    cin>>p0->book_kc;  
    p0->book_xy=p0->book_kc;       //开始时图书现有量和库存量相等  
    p0->next=NULL;  
    cout<<"\n图书信息初始化完毕!按任意键继续下一步操作..\n";  
	getch();
    system("cls");
   
}  

/************************ 
功能描述:初始化读者 
输入参数:读书者证号,读者姓名 
输出参数:无 
其他说明: 
*************************/  
  
void Init2() //初始化读者  
{  
  
    RD *p0;   //定义变量
    cout<<"\n读者信息初始化,请输入读者信息(包括书证号.姓名)......\n";  
    p0=(RD*)malloc(sizeof(RD));  //申请新结点存储空间
    h_reader=p0;                      //创建头结点
    cout<<"\n请输入读者的信息:\n";  
    cout<<"读者书证号:";              
    cin>>p0->reader_num;  
    cout<<"读者姓名:";  
    cin>>p0->reader_name;  
    p0->right=0;                      
  
    for(int i=0; i<Max; i++)  
    {  
        strcpy(p0->borrow[i].borrow_book_num,"0"); //所借图书直接置为0(即没有借书)  
        strcpy(p0->borrow[i].limit_date,"0");  
    }  
    p0->next=NULL;  
    cout<<"\n读者信息初始化完毕!按任意键继续下一步操作......\n";  
    getch();
    system("cls");
 
}  

/************************ 
功能描述:新书入库 
输入参数:书号.书名. 作者.数量 
输出参数:按书号查找后的判断情况 
其他说明:按图书编号进行查找与插入 
*************************/  
  
void Insert_New_Book()//新书入库  
{  
    BK *p,*p0,*p1;    //定义变量
    p=p1=h_book;  
    cout<<"\n新书入库模块...\n";  
    cout<<"\n请输入新书信息(包括书号.书名.数量)......\n";  
    p0=(BK *)malloc(sizeof(BK));     //申请新结点存储空间
    cout<<"图书编号:";  
    cin>>p0->book_num;  
  
    while(strcmp(p0->book_num,p1->book_num)!=0&&p1->next!=NULL)  
        p1=p1->next;  
    if(strcmp(p0->book_num,p1->book_num)==0) //此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量  
    {  
        cout<<"\n此编号图书已存在!!直接入库!\n";  
        cout<<"图书数量:";  
        cin>>p0->book_kc;  
        p1->book_kc+=p0->book_kc;  
        p1->book_xy+=p0->book_kc;  
    }  
    else   //若不存在,则需要输入其他的信息,然后在进行插入操作  
    {  
        cout<<"图书名称:";  
        cin>>p0->book_name;  
        cout<<"图书作者:";  
        cin>>p0->book_writer;  
        cout<<"图书数量:";  
        cin>>p0->book_kc;//库存数量  
        while(p->next)  
        {  
            p=p->next;  
        }  
        if(h_book==NULL)  
            h_book=p0;   //此处分两种情况,链表中没有数据,head直接指向p0处  
        else p->next=p0;               //此处分两种情况,链表中有数据,链表中最后元素的next指向p0处  
        p0->next=NULL;  
        p0->book_xy=p0->book_kc;  
    }  
    cout<<"\n新书入库完毕!按任意键继续下一步操作..\n";  
    getch();
    system("cls");
    
}  

/************************ 
功能描述:添加读者 
输入参数:读者书证号,读者姓名 
输出参数:无 
其他说明:无 
*************************/  
  
void add_reader()   //添加读者  
{  
    RD *p0,*p,*p1;  
    p=p1=h_reader;  
    int i;  
    cout<<"\n添加读者模块...\n";  
    cout<<"\n请输入读者信息(包括书证号.姓名)......\n";  
    p0=(RD*)malloc(sizeof(RD));     //申请新结点存储空间  
  
    cout<<"\n请输入读者的信息:\n";  
    cout<<"读者书证号:";  
    cin>>p0->reader_num;  
    while(strcmp(p0->reader_num,p1->reader_num)!=0&&p1->next!=NULL)  
        p1=p1->next;  
    if(strcmp(p0->reader_num,p1->reader_num)==0) //此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量  
    {  
        cout<<"读者已存在!!!按任意键继续下一步操作..\n";  
  
        
    }  
    else    //不存在  
    {  
        cout<<"请输入读者姓名:";  
        cin>>p0->reader_name;  
        p0->right=0;  
        for(i=0; i<Max; i++)  
        {  
            strcpy(p0->borrow[i].borrow_book_num,"0"); //所借图书直接置为0(即没有借书)  
            strcpy(p0->borrow[i].limit_date,"0");  
        }  
  
        while(p->next)  
        {  
            p=p->next;  
        }  
        if(h_reader==NULL)  
            h_reader=p0;   //此处分两种情况,链表中没有数据,head直接指向p0处  
        else p->next=p0;               //此处分两种情况,链表中有数据,链表中最后元素的next指向p0处  
        p0->next=NULL;  
        cout<<"\n读者信息初始化完毕!按任意键继续下一步操作..\n";  
       getch();
       system("cls");
         
    }  
}  

/************************ 
功能描述:借书模块 
输入参数:借书的读者书证号 ,归还图书的日期 
输出参数:按读者编号查找判断后的结果 
其他说明:按读者编号查找 
*************************/  
  
void Borrow_Book() //借书模块  
{  
    BK *p0;                                           //定义书书的变量
    RD *p1;                                           //定义读者变量
    char bo_num[10],rea_num[10],lim_date[8];  
    int i;  
    p0=h_book;  
    p1=h_reader;  
    cout<<"\n借书模块...\n";  
    cout<<"\n请输入借书的读者书证号:";  
    cin>>rea_num;  
  
    while(p1->next!=NULL&&strcmp(rea_num,p1->reader_num)!=0)  
        p1=p1->next;  
    if(p1->next==NULL&&strcmp(rea_num,p1->reader_num)!=0)  //判断读者有没有借书证
    {  
        cout<<"\n此读者编号不存在!按任意键返回..\n";  
        goto END;  
    }  
    cout<<"\n请输入你要借的书的编号:";  
    cin>>bo_num;  
  
    while(strcmp(bo_num,p0->book_num)!=0&&p0->next!=NULL)  
        p0=p0->next;  
    if(p0->next==NULL&&strcmp(bo_num,p0->book_num)!=0)  //
    {  
        cout<<"\n此图书编号不存在!按任意键返回..\n";  
        goto END;  
    }  
    else if(p0->book_xy<=0)               //书本现有量为0
    {  
        cout<<"\n抱歉,此书已借完!请等待新书的到来!!\n按任意键返回....";  
        goto END;  
    }  
    else if(p1->right>Max||p1->right==Max)      //判断读者借书数量是否达到上限
    {  
        cout<<"\n不好意思,借书数目已满!不能借书!\n按任意键返回....";  
        goto END;  
    }  
    else if(strcmp(p1->borrow[0].borrow_book_num,"0")!=0)  
    {  
        for(i=0; i<Max; i++)  
        {  
            if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0)  
            {  
                cout<<"\n抱歉!同一个读者不能同借两本相同的书!\n按任意键返回....";  
                goto END;  
            }  
            else if(strcmp(p1->borrow[i].borrow_book_num,"0")==0)  
            {  
                cout<<"\n请输入你要归还图书的日期:";  
                cin>>lim_date;  
                strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);   // 将此书编号复制到借书人编号
                strcpy(p1->borrow[p1->right-1].limit_date,lim_date);      //日期
                p0->book_xy--;  
                cout<<"\n读者编号";  
                cout<<p1->reader_num;  
                cout<<"借书完毕!按任意键继续下步操作..";  
                goto END;  
            }  
        }  
    }  
    else  
    {  
        cout<<"\n请输入你要归还图书的日期:";  
        cin>>lim_date;  
        strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);  
        strcpy(p1->borrow[p1->right-1].limit_date ,lim_date );  
        p0->book_xy--;  
        cout<<"\n读者编号";  
        cout<<p1->reader_num;  
        cout<<"借书完毕!按任意键继续下步操作..";  
    }  
END:
    getch();
    system("cls");
} 

/************************ 
功能描述:还书模块 
输入参数:要还书的读者编号 
输出参数:按读者编号和图书编号查找后的判断结果 
其他说明:按编号查找 
*************************/  
  
void Return_Book() //还书模块  
{  
    BK *p;  
    RD *q;  
    int i,j,find=0;  
    char return_book_num[10],return_reader_num[10];  
    p=h_book;                                                           //全局变量
    q=h_reader;  
    cout<<"\n还书模块...\n";  
    cout<<"\n请输入要还书的读者编号:";  
    cin>>return_reader_num;  
  
    while(q->next!=NULL&&strcmp(return_reader_num,q->reader_num)!=0)    //借书证号不同
        q=q->next;  
    if(q->next==NULL&&strcmp(return_reader_num,q->reader_num)!=0)       //借书证号不存在
    {  
        find=2;  
        cout<<"\n此读者编号不存在!按任意键返回..\n";  
        goto end;  
    }  
    cout<<"\n请输入读者还书的编号:";  
    cin>>return_book_num;  
  
    while(p->next!=NULL&&strcmp(return_book_num,p->book_num)!=0)  
        p=p->next;  
    if(p->next==NULL&&strcmp(return_book_num,p->book_num)!=0)  
    {  
        find=2;  
        cout<<"\n错误!此图书编号不存在!按任意键返回..\n";  
        goto end;  
    }  
    for(i=0; i<Max; i++)  
        if(strcmp(return_book_num,q->borrow[i].borrow_book_num)==0)     //如果此读者借了此书  
        {  
            find=1;  
            for(j=i; j<Max-1; j++)  
            {  
                strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1].borrow_book_num);  
                strcpy(q->borrow[j].limit_date,q->borrow[j+1].limit_date);  
            }  
            strcpy(q->borrow[Max-1].borrow_book_num,"0");  
            strcpy(q->borrow[Max-1].limit_date,"0");  
            p->book_xy++;  
            q->right--;  
            cout<<"\n编号";  
            cout<<return_reader_num;  
            cout<<"的读者还书完毕!按任意键继续下步操作..";  
        }  
    if(find==0)  
        cout<<"\n错误!此读者未借此书!按任意键返回..\n";  
end:
    getch();
    system("cls");
}  

/************************ 
功能描述:查询图书信息 
输入参数:无 
输出参数:图书信息包括图书编号,图书名称,图书作者,库存 
其他说明: 
*************************/  
  
void Print_book() //查询图书信息  
{  
    BK *p;  
    p=h_book;  
    cout<<"\n图书信息如下:\n\n";  
  
    while(p!=NULL)  
    {  
        cout<<"---------------";  
        cout<<"\n图书编号: ";  
        cout<<p->book_num;  
        cout<<"\n图书名称: ";  
        cout<<p->book_name;  
        cout<<"\n图书作者: ";  
        cout<<p->book_writer;  
        cout<<"\n现有:";  
        cout<<p->book_xy;  
        cout<<"\n库存: ";  
        cout<<p->book_kc;  
        cout<<"\n";  
        cout<<"---------------\n";  
        cout<<"\n\n\n";  
        p=p->next;  
    }  
    cout<<"\n图书信息打印完毕!按任意键继续下一步操作..";  
  getch();
    system("cls");
    
}  

/************************ 
功能描述:查询读者信息 
输入参数:无 
输出参数:读者信息包括读者书证号,读者姓名, 
所借图书编号,相对应的还书日期 
其他说明: 
*************************/  

void Print_reader()     //查询读者信息  
{  
    RD *p;  
    int i;  
    p=h_reader;  
    cout<<"\n读者信息如下:\n\n";  
    cout<<"\n";  
  
    while(p!=NULL)  
    {  
        cout<<"------------------";  
        cout<<"\n读者书证号:";  
        cout<<p->reader_num;  
        cout<<"\n读者姓名:";  
        cout<<p->reader_name;  
        for(i=0; i<Max; i++)  
        {  
            cout<<"\n**********************";  
            cout<<"\n图书编号:";  
            cout<<p->borrow[i].borrow_book_num;  
            cout<<"\n还书日期:";  
            cout<<p->borrow[i].limit_date;  
            cout<<"\n**********************";  
        }  
        cout<<"\n\n\n\n";  
        cout<<"----------------";  
        p=p->next;  
    }  
  
    cout<<"\n读者信息打印完毕!按任意键继续下一步操作..";  
     getch();
    system("cls");
}  
  
int main()  
{  
  
    Login();       //进入页面  
    Init1();       //对图书系统初始化  
    Init2();       // 对读者信息初始化  
    Menu_select(); //调用主菜单  
    return 0;  
}      

运行结果截图:

1.欢迎界面


2.图书初始化


3.读者初始化


4.新书入库


5.添加读者


6.借书界面


7.查看图书资料


8.查看读者资料


9.还书界面






评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值