C++编写实现图书管理系统

C++编写的一个图书管理系统,供大家参考,具体内容如下

2018大一的课设,搬到这纪念一下,共1200多行代码

为图书管理人员编写一个图书管理系统,图书管理系统的设计主要是实现对图书的管理和相关操作,包括3个表:
图书信息表——存储图书的基本信息,包括书号、书名、作者、出版社、出版日期、存馆数量、定价等。
读者信息表——存储读者的基本信息,包括学号、姓名、学院、专业班级等。
图书借阅表——存储读者借书的相关信息,包括学号、姓名、书号、书名、借阅日期、应还日期、归还日期等。

用菜单选择方式完成了以下功能:

1、图书信息添加功能:包括书号、书名、作者、出版社、出版日期、存馆数量、定价等。

2、图书信息查询:分别按书名, 按作者名,
按出版单位等进行查询。

3、图书信息排序:按书号、书名等按升序进行排序。

4、图书信息的修改、删除:按书号或书名进行图书的修改和删除。

5、读者信息添加功能:包括学号、姓名、学院、专业、班级等。

6、读者信息查询:分别按学号、姓名、班级等进行查询。

7、读者信息排序:按学号、学院等按升序进行排序。

8、读者信息的修改、删除:按学号+姓名进行读者信息的修改和删除

9、图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,借出相应数量后修改图书信息表中的存馆数量,在图书借阅表添加该同学的借阅。

10、图书归还:输入学号+书号,修改图书信息表中的存馆数量,在图书借阅表中记录该同学的归还时间。

11、图书借阅查询:分别按学号、书名、学院等进行查询。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
const int INC=20;
using namespace std;
class Date{   //Date类 :日期类
public:
    int day;     //日
    int month;   //月
    int year;    //年
    Date(int d=1,int m=1,int y=2012){    //构造函数  默认初始日期2012.1.1
        //判断日期的合法性
        if(d>0&&d<32)day=d;else day=1;
        if(m>0&&m<13)month=m;else m=1;
        if(y>0)year=y;else year=2012;
    }
    void setDay(int d){day=d;}       //设置日
    void setMonth(int m){month=m;}   //设置月
    void setYear(int y){year=y;}     //年
    int getDay(){return day;}         //获取年月日
    int getMonth(){return month;}
    int getYear(){return year;}
    void disp(){cout<=0)
    {
        if(isLeapYear(yy))
        {
            dtmp-=366;
            flag=true;
        }
        else
        {
            dtmp-=365;
            flag=false;
        }
        yy++;
    }
    if(flag)
        dtmp+=366;
    else dtmp+=365;
    yy--;
    if(isLeapYear(yy))
    {
        m2=29;
    }
    else
    {
        m2=28;
    }
    mtmp=dtmp+dd;
    int m_day[]={0,31,m2,31,30,31,30,31,31,30,31,30,31};   //每月天数
    for(;mtmp>m_day[mm];)
    {
        mtmp-=m_day[mm];
        if(mm==12)
        {
            mm=0;
            yy++;
        }
        mm++;
    }
    dd=mtmp;
    Date dt(yy,mm,dd);
    return dt;     //返回一个新日期
}
class Book{
//书号、书名、作者、出版社、出版日期、出版定价、存馆数量
private:
    string num;   //s书号
    string title;   //标题
    string author;   //作者
    string publisher;   //出版社
    Date publishdate;   //Date类:出版日期
    float price;   //价格
    int howmany;    //存馆数量
    public:
    Book(string num0="24416-5",string title0="数据结构",string author0="王红梅,胡明,王涛",
         string pub0="清华大学出版社",int bd=1,int bm=1,int by=2012,float pr=29.0,int ct=10):publishdate((bd,bm,by)){
    num=num0;title=title0;author=author0;publisher=pub0;price=pr;howmany=ct;}
    void setNum(string num0){num=num0;}      //设置书号
    void setTitle(string title0){title=title0;}   //设置标题
    void setAuthor(string author0){author=author0;}   //设置作者
    void setPublisher(string publisher0){publisher=publisher0;}   //设置出版社
    void setPublishdate(int bd,int bm,int by){Date d(bd,bm,by);publishdate=d;}    //设置出版日期,先构造在复制
    void setHowmany(int ct){howmany=ct;}    //设置库存
    void setPrice(float pr){price=pr;}   //设置价格
    string getNum(){return num;}        // 获取 书号 标题 作者 等信息
    string getTitle(){return title;}
    string getAuthor(){return author;}
    string getPublisher(){return publisher;}
    Date getPublishdate(){return publishdate;}
    int getHowmany(){return howmany;}
    float getPrice(){return price;}
    void dispABook(){
        cout <'9')&&k>price>>ct;
      if(title.length()>0)        i++;
      }
      bookcount=i;
      cout<>price>>ct;//inf,getchar();
      if(title.length()>0){
        int d[3];
        if(num[0]==10)num=num.substr(1);
        string2date(pdates,d);
        by=d[0];bm=d[1];bd=d[2];
        book[i]=Book();
        book[i].setNum(num);
        book[i].setTitle(title);
        book[i].setAuthor(author);
        book[i].setPublisher(publisher);
        book[i].setPrice(price);
        book[i].setHowmany(ct);
        book[i].setPublishdate(bd,bm,by);
        }
      }
  inf.close() ;
  return bookcount;
  }
  friend class ReaderBorrowBook;
  int addbook(string num,string title,string author,string publisher,int bd,int bm,int by,float price,int ct)//添加图书信息
  {
        int i=bookcount;
        book[i]=Book();
        book[i].setNum(num);
        book[i].setTitle(title);
        book[i].setAuthor(author);
        book[i].setPublisher(publisher);
        book[i].setPrice(price);
        book[i].setHowmany(ct);
        book[i].setPublishdate(bd,bm,by);
        ++bookcount;
        return bookcount;
  }
    void searchbookbytitle(string title)         //按照书名查找
    {
        bool found=false;
        for(int i=0;i=0)    {
            book[k].setNum(newnum);
            cout<<"changebookbynum successed:"<0)        i++;
      }
  readercount=i;
  cout<0){
          if(num[0]==10)num=num.substr(1);
        reader[i]=Reader();
        reader[i].setNum(num);
        reader[i].setName(name);
        reader[i].setCollege(college);
        reader[i].setClassno(classno);
        }
      }
  inf.close() ;
  return readercount;

  }
    int addreader(string num,string name,string college,string classno)   //添加读者
    {
        int i=readercount;
        reader[i]=Reader();
        reader[i].setNum(num);
        reader[i].setName(name);
        reader[i].setCollege(college);
        reader[i].setClassno(classno);

        ++readercount;
        return readercount;
    }
   void searchreaderbynum(string num){       //按学号查询读者
        bool found=false;
        for(int i=0;i=0)    {
            cout<<"reader to be deleted :"<1)        i++;
      }
  borrowbookcount=i;
  cout<0){
          if(num[0]==10)num=num.substr(1);
        borrowbook[i]=BorrowBook();
        int d[3];
        string2date(borrowdates,d);
        int by=d[0],bm=d[1],bd=d[2];
        borrowbook[i].setBorrowdate(bd,bm,by);
        string2date(toreturndates,d);
        by=d[0];bm=d[1];bd=d[2];
        borrowbook[i].setToreturndate(bd,bm,by);
        string2date(returndates,d);
        by=d[0];bm=d[1];bd=d[2];
        borrowbook[i].setReturndate(bd,bm,by);
        borrowbook[i].setNum(num);
        borrowbook[i].setName(name);
        borrowbook[i].setBookNum(booknum);
        borrowbook[i].setTitle(title);
        }
      }
  inf.close() ;

  return borrowbookcount;
  }
  friend class ReaderBorrowBook;
  int searchbyreaderbook(string readernum,string booknum)     //按学号查询
  {
        for(int i=0;i>num1>>title0>>author0>>pub0>>pd0>>pm0>>py0>>price0>>howmany0;

        bk.addbook(num1,title0,author0,pub0,pd0,pm0,py0,price0,howmany0);
        bk.write2Bookfile();
        int i=bk.bookcount-1;
        cout <>num1>>name0>>college0>>class0;
        rd.addreader(num1,name0,college0,class0);
        rd.write2Readerfile();
        int i=rd.readercount-1;
        cout <>select;
            cin.get();
            switch(select){
                case 1:
                    cout<<"书名:";
                    getline(cin,title,'\n');
                    bk.searchbookbytitle(title);
                    break;
                case 2:
                    cout<<"作者名:";
                    getline(cin,author,'\n');
                    bk.searchbookbyauthor(author);
                    break;
                case 3:
                    cout<<"出版社:";
                    getline(cin,pub,'\n');
                    bk.searchbookbypub(pub);break;
                case 0:return;
            }
        }
        }
    void sortbook(){           //排序
        int select;
        cout<<"3.图书信息排序:按书号、书名等按升序进行排序。"<>select;
        switch(select){
            case 1:
                    cout<<"书号:";
                    bk.sortbookbynum();
                    dispBook();
                    break;
            case 2:
                    cout<<"书名:";
                    bk.sortbookbytitle();
                    dispBook();
                    break;
            case 0:return;
            }
        }
    void editbook(){                  //编辑书
        string oldtitle="VisualBasic 程序设计教程",newtitle="VisualBasic 程序设计教程-C",oldnum="40667",newnum="40667-C";
        int select;
        cout<<"4.图书信息的修改、删除:按书号或书名进行图书的修改和删除。"<>select;
        cin.get();
        switch(select){
            case 1:
                    cout<<"old书号:";
                    getline(cin,oldnum,'\n');
                    cout<<"new书号:";
                    getline(cin,newnum,'\n');
                    cout<<"changebookbynum: "<>select;
            cin.get();
            if(select==0)return;
            cout<<"borrow学号:";
            getline(cin,rdnum,'\n');
            cout<<"borrow书号:";
            getline(cin,booknum,'\n');
            bookpos=bk.searchbookbynump(booknum);
            rdpos=rd.searchreaderbynump(rdnum);
            if(bookpos>0&&rdpos>0){
                int hm=bk.book[bookpos].getHowmany();
                if(hm>0){
                    name=rd.reader[rdpos].getName();
                    title=bk.book[bookpos].getTitle();
                    bk.book[bookpos].setHowmany(hm-1); //修改图书信息表中的存馆数量
                    bb.borrowbook[bb.borrowbookcount].setNum(rdnum);
                    bb.borrowbook[bb.borrowbookcount].setBookNum(booknum);
                    bb.borrowbook[bb.borrowbookcount].setName(name);
                    bb.borrowbook[bb.borrowbookcount].setTitle(title);

                    SYSTEMTIME ct;
                    GetLocalTime(&ct);//取系统时间,如果用GetSystemTime(&ct);那么获取的是格林尼治标准时间
                    y=ct.wYear;
                    m=ct.wMonth;
                    d=ct.wDay;
                    Date toret=Date(d,m,y)+60;
                    bb.borrowbook[bb.borrowbookcount].setBorrowdate(d,m,y);
                    bb.borrowbook[bb.borrowbookcount].setToreturndate(toret.getDay(),toret.getMonth(),toret.getYear());
                    bb.borrowbook[bb.borrowbookcount].setReturndate(1,1,1);
                    bb.borrowbookcount++;
                    }
                else cout<>selectttt;
            cin.get();
            if(selectttt==0) {return;}
            cout<<"return学号:"<=0){
            if(bookpos>0&&rdpos>0){
                    bk.book[bookpos].setHowmany(bk.book[bookpos].getHowmany()+1);
                    SYSTEMTIME ct;
                    GetLocalTime(&ct);//取系统时间
                    y=ct.wYear;
                    m=ct.wMonth;
                    d=ct.wDay;
                    bb.borrowbook[k].setReturndate(d,m,y);
                }

            else{
                if(bookpos<0)cout<<"No book "<>selectt;
        cin.get();
        switch(selectt)
        {
            case 1: cout<<"学号:"<>selectt1;
        switch(selectt1){
            case 1:
                    cout<<"学号:";
                    rd.sortreaderbyxuahao();
                    dispReader();
                    break;
            case 2:
                    cout<<"学院:";
                    rd.sortreaderbyxueyuan();
                    dispReader();
                    break;
            case 0:return;
            }
        }
void editreader()
{
    string xh,xm,xy,bj,newxh,newxm,newxy,newbj;

    int select2;
    cout<<"8.学生信息的修改、删除:。"<>select2;
        cin.get();
        switch(select2)
        {
            case 1:cout<<"要修改学生的学号为:"<>xh;
            cout<<"请输入新学号"<>newxh;
            rd.changereaderbyxuehao(xh,newxh);
            break;
            case 2:cout<<"要删除的学生学号为:"<>xh;
            rd.deletereaderbyxuehao(xh);
            break;
            case 3:cout<<"修改的学生姓名为:"<>xm;
            cout<<"请输入修改后的姓名:"<>newxm;
            rd.changereaderbyxingming(xm,newxm);
            break;
            case 4:cout<<"要删除的学生姓名为:"<>xm;
            rd.deletereaderbyxingming(xm);
            break;
            case 0: rd.write2Readerfile();
            cout<<"修改成功";
            return;

        }

}
}
    void searchreaderborrowbook()
    {
        int bz;
        string xxh,ssm;
        while(1)
        {cout<<"11.图书借阅查询:分别按学号、书名、学院等进行查询。"<>bz;
        switch(bz)
    {
            case 1:cout<<"请输入学号"<>xxh;
            bb.searchborrowbookbyxuehao(xxh);break;
            case 2:cout<<"请输入书名"<>ssm;bb.searchborrowbookbysm(ssm);break;
            case 0:
            return;

        }


    }
    }
};
int main(){
    ReaderBorrowBook rbb;
    rbb.init();
    rbb.dispBook();
    rbb.dispReader();
    rbb.dispBorrowbook();
    rbb.dispCount();
    int select;
    while(1){
        cout<<"菜单选择功能:"<>select;
        switch(select){
            case 1:rbb.addbook();    rbb.dispCount();break;
            case 2:rbb.searchBook();break;
            case 3:rbb.sortbook();break;
            case 4:rbb.editbook();break;
            case 5:rbb.addreader();    rbb.dispCount();break;
            case 6:rbb.searchreader();break;
            case 7:rbb.sortreader();break;
            case 8:rbb.editreader();break;
            case 9:rbb.readerborrowabook();break;
            case 10:rbb.readerreturnabook();break;
            case 11:rbb.searchreaderborrowbook();break;
            case 0:rbb.write2file();exit(0);
            }
        }
    return 0;
}

部分截图

C++编写实现图书管理系统_第1张图片

C++编写实现图书管理系统_第2张图片

C++编写实现图书管理系统_第3张图片

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(C++编写实现图书管理系统)