C++实现一个简单图书借阅流程

原创 2015年07月07日 17:18:26

总共实现了myDate类,book类,student类,图书借阅记录record类

//
#include <iostream>
#include <string>
#include <vector>
#include <list>

#include <ctime>
#include <cstdio>
using namespace std;

//主要就基于C库封装了一个获取时间戳的数据成员和相关方法
class myDate
{
        time_t _time;
public:
        myDate()
        {
                time (&this->_time);
                cout<<"get time sucessful"<<endl;
        }
        friend ostream& operator<<(ostream &out,myDate &d);
};
ostream& operator <<(ostream &out,myDate &d)
{
        out<<ctime(&(d._time));
        return out;
}

//book类主要封装一个图书信息(书名和数量)
class book
{
        //string bookid;
        string bookname;
        int    bookcount;
public:
        explicit book(string bname,int bcount):
            bookname(bname),bookcount(bcount)
        {

        }
        int  insertBook()
        {
            if(bookcount < 0)
                return -1;
            bookcount += 1;
            return 0;

        }
        int  removeBook()
        {
            if(bookcount <= 0)
                return -1;
            bookcount -= 1;
            return 0;
        }
        string& getname()
        {
            return bookname;
        }
        void print()
        {
            cout<<"bname:"<<bookname<<",count:"<<bookcount<<endl;
        }
};

//record类封装一条借阅记录<who,do,bookname>
class recordPer
{
    bool   f ;//true brrow    -- false return
    string sname;
    string bname;
    myDate   time;
public:
    recordPer(string &bn,string &sn,bool &b):
        bname(bn),sname(sn),time(),f(b)
    {

    }
    friend ostream& operator <<(ostream &out,recordPer &r);
};
ostream& operator <<(ostream &out,recordPer &r)
{
    if(r.f == true)
        out<<"at "<<r.time<<" "<<r.sname<<"--brrow->"<<r.bname;
    else
        out<<"at "<<r.time<<" "<<r.sname<<"--return->"<<r.bname;
    return out;
}

//其实这个类封装的显得多余,第二版本后面再优化
class bookRecord
{
public:

        vector<recordPer > _record;
        void print()
        {
                for(unsigned int i=0;i< _record.size();++i)
                {
                        cout<<_record.at(i)<<endl;
                }
        }
        int insert(recordPer r)
        {
            _record.push_back(r);
            return 0;
        }
};

//下面就是整个流程的灵魂,人,借书还书都是人的动作
class student
{
        //string stuid;
        string stuname;
        bookRecord __record;
        list<string> needreturn;
public:
        student(string &s):stuname(s){}
        int borrowBook(string &bookname,vector<book> &v);
        int returnBook(string &bookname,vector<book> &v);
        string& getname()
        {
            return stuname;
        }
        void printAll()
        {
            this->__record.print();
        }
};
int student::borrowBook(string &bookname,vector<book> &v)
{
    bool b = true;
    for(int i=0;i<v.size();++i)
    {
        if(v.at(i).getname() == bookname)
        {
            if(v.at(i).removeBook() != 0)
                return -1;
            this->__record.insert( recordPer(bookname,this->stuname,b));
            this->needreturn.push_back(bookname);
            return 0;
        }
    }
    return 1;
}
int student::returnBook(string &bookname,vector<book> &v)
{
    bool b = false;
    for(int i=0;i<v.size();++i)
    {
        if(v.at(i).getname() == bookname)
        {
            this->needreturn.remove(bookname);
            if(v.at(i).insertBook() != 0)
                return -1;
            this->__record.insert( recordPer(bookname,this->stuname,b));
            //this->needreturn.remove(bookname);
            return 0;
        }
    }
    return 1;
}




int main()
{
    vector<book> _book;
    vector<student> _stu;
    string name;
    string id;
    int count;


    int code;
    while(1)
    {
        cout<<"----------BOOK-------------"<<endl;
        cout<<"1 new book"<<endl;
        cout<<"2 new user"<<endl;
        cout<<"3 borrow book"<<endl;
        cout<<"4 return book"<<endl;
        cout<<"5 find all record of some student"<<endl;
        cout<<"6 find all book"<<endl;
        cout<<"----------BOOK-------------"<<endl;

        cout<<"input op:";
        cin>>code;
        //code = getchar();
        //code -= 48;
        if(code <1 || code >6)
        {
            cout<<"input error\n";
            continue;
        }
        if(code == 1)
        {
            cout<<"input book infomation:name(string) count(int)"<<endl;
            cin>>name>>count;
            _book.push_back(book(name,count));
        }
        else if(code == 2)
        {
            cout<<"input student information:name(string)\n";
            cin>>name;
            _stu.push_back(student(name));
        }
        else if(code == 3)//brrow
        {
            cout<<"input student name && book name :";
            int flag = 0;
            cin>>name>>id;
            int i;
            for( i=0;i<_stu.size();++i)
            {
                if(_stu[i].getname() == name)
                {
                    flag = 1;
                    break;
                }
            }
            if(flag != 1)
                cout<<"student "<<name<<"not found\n";
            if(0 == _stu.at(i).borrowBook(id,_book))
                cout<<"brrowbook sucessful \n";
            else
                cout<<"brrowbook failed \n";
        }
        else if(code == 4)//return
        {
            cout<<"input student name && book name :";
            int flag = 0;
            cin>>name>>id;
            int i;
            for( i=0;i<_stu.size();++i)
            {
                if(_stu[i].getname() == name)
                {
                    flag = 1;
                    break;
                }
            }
            if(flag != 1)
                cout<<"student "<<name<<"not found\n";
            if(0 == _stu.at(i).returnBook(id,_book))
                cout<<"returnbook sucessful \n";
            else
                cout<<"returnbook failed \n";
        }
        else if(code == 5)
        {
            cout<<"input student name:";
            int flag = 0;
            cin>>name;
            int i;
            for( i=0;i<_stu.size();++i)
            {
                if(_stu[i].getname() == name)
                {
                    _stu.at(i).printAll();
                    flag = 1;
                    break;
                }
            }
            if(flag == 0)
                cout<<"student "<<name<<"not found"<<endl;
        }
        else if(code == 6)
        {
            for(int i=0;i<_book.size();++i)
            {
                _book.at(i).print();
            }
        }
    }
    return 0;
}

不合理的地方在后期需要改进的地方:

取消掉record类,需要加载上bookid和studentid,或者增加继承的结构

2017CCCC决赛 L1-3. 阅览室

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0...
  • llzhh
  • llzhh
  • 2017年04月22日 16:21
  • 562

L1-043. 阅览室

本题要求:天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当...
  • linglian0522
  • linglian0522
  • 2017年04月18日 09:32
  • 879

PAT天梯赛 5-19 阅览室

5-19 阅览室   (20分) 天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时...
  • qq_38135639
  • qq_38135639
  • 2017年05月14日 23:25
  • 677

L1-043. 阅览室

L1-043. 阅览室 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 天梯...
  • nihaopeng521
  • nihaopeng521
  • 2017年04月16日 18:12
  • 1406

C++,一个简单的图书管理系统,新手入门专用

本文参考学习51CTOC++从入门到精通系列视频教程(初级篇)汪恺老师公开课。部分代码与老师课上有出入。...
  • qq563969790
  • qq563969790
  • 2016年11月18日 11:51
  • 2731

L1-043. 阅览室

L1-043. 阅览室 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 ...
  • s136424
  • s136424
  • 2017年11月13日 12:28
  • 215

简单的图书管理系统php实现

数据库的结构: create table book( id int not null auto_increment primary key, bookname varchar(50) not nul...
  • xiaofang3a
  • xiaofang3a
  • 2014年12月11日 16:02
  • 1510

JAVA 图书馆的书籍管理程序

请设计并实现一个图书馆的书籍管理程序,要求提供方便的图形界面实现图书信息的录入/修改/删除功能。图书的信息至少包括:图书的编号、书名、类型、作者、价格、出版目期、出版社、购入日期、借阅人等。要求可以浏...
  • u011699990
  • u011699990
  • 2016年12月23日 14:06
  • 820

java图形界面------图书借阅系统

直接看代码:package ttt; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt....
  • broccoli2
  • broccoli2
  • 2017年04月17日 13:35
  • 422

图书信息借阅管理系统 C语言

这个图书管理系统功能只完善了一部分 另一部分将在最近补充上去 各部分的注释非常清晰 希望对大家有点用处  #define true 1 #...
  • Xiejunyi12
  • Xiejunyi12
  • 2016年02月26日 23:26
  • 1999
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++实现一个简单图书借阅流程
举报原因:
原因补充:

(最多只允许输入30个字)