基于C++的图书管理系统

基于C++的图书管理系统

一、 实验目的

目的是将所学的C++面向对象的知识,包括类与对象的设计、类的继承和多态等应用到具体实践项目中,设计图书管理系统,熟悉类的继承,组合,依赖关系,并且熟悉类与类之间的使用关系。

二、实验内容及其要求

1、问题描述

编写图书借阅程序,图书的信息有:图书编号、图书名称,作者,出版社,单价,借阅状态等。所有图书的信息经管理员事先已存入计算机,屏幕上显示书所有的信息,选择图书编号,借书,还书,系统根据操作做出借书还书提示,还有管理员信息的设置和教师学生的个人信息输入,系统通过正确操作来实现查找图书和修改图书,并且有着对运算符的重载,和虚函数的正确使用。
2、系统用户
第一种用户:图书管理员,可以显示信息,图书上架,查询图书,修改图书;系统管理员,可以操作所有权限
第二种用户:借阅者,可以分为两类:教师和学生。可以显示信息(虚函数),借书,还书等功能,此外,教师最多可以借20本书,而学生最多借10本书。

三、功能模块设计和实现

1.判断用户类别

class User
{
protected:
    string name;//用户姓名
    string key;//用户密码
    bool Is_Admin,Is_Librarian,Is_Reader;//什么用户类型
public:
    void key_change(User *U);//修改用户密码
    int  Judge();//判断用户类型
    static int User_Number;
    User(){Is_Admin=0;Is_Librarian=0;Is_Reader=1;};//默认读者类型
    void Setname(string name1);
    void Setkey(string key1);
    void SetIdentity(bool ad,bool li,bool re )//设置用户类型
    {Is_Admin=ad;Is_Reader=re;Is_Librarian=li;}
    string Getname(){return name;}
    string Getkey(){return key;}
    bool GetisAd(){return Is_Admin;}
    bool Getisli(){return Is_Librarian;}
    bool Getisre(){return Is_Reader;}
};

2.图书上架

void Librarian::Book_Add(Book *B)
{
    string aa;
    cout<<"---------------添加图书---------------"<<endl;
    while(1)
    {
        cin>>B[Book::Book_Number];
        ofstream bookmessage("Bookmessage.txt",ios::app);
        if(bookmessage.is_open())
        {
            bookmessage << getCurrentSystemTime();
            bookmessage << "操作:增加图书 "<<endl;
            bookmessage <<B[Book::Book_Number]<<endl;
            bookmessage.close();
        }
        Book::Book_Number++;
        cout<<"录入成功!"<<endl;
        aa=cin.get();
        cout<<"按任意键继续录入(输入'0'可返回主菜单),";
        aa=cin.get();
        if(aa=="0")break;
    }
}

在这里插入图片描述

3.查询图书

void Librarian::Book_Find(Book *B)
{
    cout<<"-------查询图书-------"<<endl;
    cout<<"请输入图书编号或书名:";
    string a1;
    cin>>a1;int flag=0,count=0;
    for(int j=0;j<Book::Book_Number;j++)
    {
        if(a1==B[j].GetCode()||a1==B[j].GetName())
        {flag=1;cout<<B[j];count++;}
    }
    if(count==0)cout<<"未找到此书..."<<endl;
    else
        cout<<"共找到"<<count<<"本书。"<<endl;
}


4.借书

void Reader::Book_Lend(Book *B)
{
    for(int i=0;i<Book_Number;i++)
    {
        (s+i)->SetCode((B+i)->GetCode());
        (s+i)->SetName((B+i)->GetName());
        (s+i)->SetAuthor((B+i)->GetAuthor());
        (s+i)->SetPress((B+i)->GetPress());
        (s+i)->SetPrice((B+i)->GetPrice());
        (s+i)->Book_Number=(B+i)->Book_Number;
        if(Is_teacher==true)
            (s+i)->SetDeadline(60);
        else
            (s+i)->SetDeadline(30);
    }
    Book *b=B;string a;
    cout<<"---------借书---------"<<endl;
    cout<<"请输入需要借阅书籍的编号或书名:";
    cin>>a;int Find=0,flag1=0;int LendBookNumber=0;
    for(int j=0;j<=Book::Book_Number;j++)
    {
        if((a==b[j].GetCode()||a==b[j].GetName())&&b[j].GetIs_Lend()==false)
        {
            flag1=1;Find =j;break;
        }
    }

    for(int i=0;i<=Book::Book_Number;i++)
    {
        if(s[i].GetIs_Lend()==true)
        {
            LendBookNumber++;
        }
    }
    if(!flag1)cout<<"图书不存在或已经被借出!"<<endl;
    else
    {
        if(Is_teacher==true&&LendBookNumber==20){
            throw LendBookNumber;
        }
        else if(Is_teacher==false&&LendBookNumber==10){
            throw LendBookNumber;
        }
        cout<<"借阅成功!"<<endl;
        b[Find].SetIs_Lend(true);
        s[Find].SetIs_Lend(true);
        s[Find].SetTime(getCurrentSystemTime());
        s[Find].SetDeadline(s[Find].GetDeadline());
        ofstream lendmessage("Lendmessage.txt",ios::app);
        if(lendmessage.is_open())
        {
            lendmessage << "姓名:"<<LogName<<endl;
            lendmessage << "    借书编号:"<<s[Find].GetCode();
            lendmessage << "    借书时间:"<<s[Find].Gettime()<<endl;
            lendmessage.close();
        }
    }
}

在这里插入图片描述

5.还书

void Reader::Book_Return(Book *B)
{
    Book *b=B;int flag=0,Find=0;
    cout<<"---------还书---------"<<endl;
    string a;
    cout<<"请输入需要归还书籍的编号或书名:";
    cin>>a;
    for(int j=0;j<Book::Book_Number;j++)
    {
        if(a==b[j].GetCode()||a==b[j].GetName())
        {
            flag=1;Find =j;break;
        }
    }
    if(flag==1){
        if(s[Find].GetIs_Lend()==true)
        {

            cout<<"归还时间:"<<getCurrentSystemTime()<<endl;
            string lend_time=s[Find].Gettime();
            string return_time=getCurrentSystemTime();
            int mml,mmr,ddl,ddr;
            //判断是否超时
            mmr=return_time[6]-'0'+(return_time[5]-'0')*10;
            mml=lend_time[6]-'0'+(lend_time[5]-'0')*10;
            ddr=return_time[9]-'0'+(return_time[8]-'0')*10;
            ddl=lend_time[9]-'0'+(lend_time[8]-'0')*10;
            int day=0;
            if(Is_teacher==true) day=60;
            else day=30;
            if(mmr*30+ddr-mml*30-ddl<=day)
            {   s[Find].SetIs_Lend(false);
                b[Find].SetIs_Lend(false);
                ofstream lendmessage("Lendmessage.txt",ios::app);
                if(lendmessage.is_open())
                {
                    lendmessage << "姓名:"<<LogName<<endl;
                    lendmessage << "    还书编号:"<<s[Find].GetCode();
                    lendmessage << "    还书时间:"<<return_time<<endl;
                    lendmessage.close();
                }
                cout<<"归还成功!"<<endl;}
            else
                throw mmr*30+ddr-mml*30-ddl-day;
        }
        else
        {
            cout<<"此书未被借阅"<<endl;
        }
    }
    else
    {
        cout<<"未找到此书!"<<endl;
    }
}

在这里插入图片描述

言尽于此

通过百度网盘分享的文件:C++课程设计
链接:https://pan.baidu.com/s/1FQq4Q5F3XOBtLaiHYT4gyg?pwd=vwn2 提取码:vwn2复制这段内容打开「百度网盘APP 即可获取」

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChengKe---Dawn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值