图书管理系统

1.     主要功能

l  增加图书信息管理员

l  增加用户信息管理员

l  查询图书信息用户、管理员

l  查询用户借阅信息管理员

l  用户借阅图书、归还图书用户

l  图书续借用户

l  更改图书序号及最大图书量管理员

l  删除图书信息管理员

l  删除用户信息管理员

l  清空系统全部信息管理员


2.

1.     时间类:定义年月日,包括构造函数、get&set函数、重载输入输出运算符。

intyear,month,day;

bool operator<(const Date&d);

friend ostream&operator<<(ostream&os,const Date &d);

friend istream&operator>>(istream&is,Date &d);

2.     记录类:定义学号、借书时间、书号、还书时间、是否还书。通过get&set函数、重载输入输出运算符以及将时间类数据成员包含进来实现功能。

int xh;(学号)

   Date start;(借书时间)

   int sh;(书号)

   Date end;(还书时间)

   int state;(未还书-0;已还书-1

3.     记录集合基类:定义记录的数目、记录集合、map,在借阅时生成借阅记录,包含借书信息,是用户类和图书类的基类。

int number;

vector<Record> v1;

vector<Record> ::iterator it1;

multimap<int,int>m2;

multimap<int,int>::iteratormit2;

4.     图书派生类:定义书号、书名、作者、最大图书量、可借数量、借出数量等图书基本信息,利用adddelete区分图书的借阅及归还记录。重载输入输出运算符并设置,当输入-1时跳出记录。

int sh;

    string sm;

    string author;

    int max;

    int now;//图书库存量

    multimap<int,int>m1;

multimap<int,int>::iterator mit1;

is>>b1.sh;

if(b1.sh==-1)

return is;

is>>b1.sm>>b1.author>>b1.max>>b1.now>>b1.number;

b1.v1.clear();

5.     用户记录派生类:定义学号、姓名、登陆密码、专业、最大借阅量以及初始借阅情况,与图书记录类类似。

int xh;

    string xm;

    string major;

    string mima;

    int max;

    int now;

     multimap<int,int>m1;

multimap<int,int>::iterator mit1;

6.     查询图书基类:为实现管理员及用户查询图书信息的功能,在该类中主要使用继承实现。

7.     数据类:定义账号、密码、登陆类型等。

int no;   //账号;

    string pwd; //密码;

int type;  //1是管理员;0是用户;

8.     管理派生类:该类中包括person集合、图书集合、用户集合。利用load save函数实现文件的输入输出。管理员的功能,如清除、更改、查询、删除等,主要利用该类来定义实现。

利用load函数,载入图书、用户、person的记录。

voidManage::load1()

{

   Book b;

    int i;

    ifstream infile("D:\\20171757book.txt",ios::in);

    if(!infile)

  {

        return ;}

    v3.clear();

    m3.clear();

 

    while(infile>>b)

    {v3.push_back(b);

    int i=v3.size();

    m3.insert(make_pair(b.getSh(),i-1));

  }infile.close();

}

 

利用save函数,在增加信息后,将增加的信息与原有的信息储存在相应TXT文件中。

voidManage::save1()

{

    ofstreamoutfile("D:\\20171757book.txt",ios::out);

    if(!outfile)

  {

 

 

        return ;}

    for(it3=v3.begin();it3!=v3.end();it3++)

    {

        outfile<<*it3;

 

    }

    outfile.close();

}

9.     客户端操作派生类:该类实现用户借书、还书、续借等功能。并且该类必须在指定用户,即带参的情况下使用。

voidClient::save3()

{

    ofstreamoutfile("D:\\20171757book.txt",ios::out);

    if(!outfile)

    {

        return ;}

        for(it3=v3.begin();it3!=v3.end();it3++)

        {

            outfile<<*it3;

        }

 

    outfile.close();

}

voidClient::load3()

{

    Book b;

    int i;

    ifstreaminfile("D:\\20171757book.txt",ios::in);

    if(!infile)

  {

        return ;}

    v3.clear();

    m3.clear();

 

    while(infile>>b)

    {v3.push_back(b);

    int i=v3.size();

    m3.insert(make_pair(b.getSh(),i-1));

 

    }

infile.close();

}

10.  登陆类-父类:定义提取person中的账户信息,以person集合中的成员为数据成员,再应用load提取数据,并在person中进行查询,看是否有无该用户或管理员。

classCheckIn   //登陆类;

{

    public:

    CheckIn(){load();}

    void load();

    virtual void login()=0;  //纯虚函数;

    protected:

    vector<Person>pv;

    vector<Person>::iterator pt;

    multimap<int,int> mu; //按照账号查询;

    multimap<int,int>::iterator muit;

};

11.  登陆类-子类:该部门应用多态,来实现在同一界面登陆用户或者管理员。并在person中进行查询,看是否有无该用户或管理员。

voidCheckIn::load()

{

    Person p;

    ifstream infile("D:\\Person.txt",ios::in);

    if(!infile)

    return;

    pv.clear();

    mu.clear();

    int i=0;

    while(infile>>p)

    {

        pv.push_back(p);

        mu.insert(make_pair(p.getNo(),i));

        i++;

    }

    infile.close();

}

 

12.  Main主函数:包括提示句以及当状态为0时进入用户界面,状态为1时进入管理员界面。

 

int main()

{

        cout<<"用户登录,请输入0;管理员登录,请输入1"<<endl;

        int i;

        cin>>i;

      cout<<"请输入账号和密码"<<endl;

      if(i==0)

      {

         UserCheckin u;

           u.login();

      }

 

      if(i==1)

      {

          AdminCheckIn a;

          a.login();

      }

 

    return 0;

}
3. 设计体会与总结

通过这次对于图书管理系统的编程及设计,发现一个系统的编程是与一个个类、与一个个小的程序完全不同的。因为小的程序只需要一个或两三个类就可以实现,比较简单,而一个系统则需要各个类之间的关联,比如继承、多态等。

在系统编程之前,最重要的是,以一个使用者的角度和身份去思考,设计这个系统我希望使用哪些功能,又该如何去实现,是以怎样一个顺序和关系去实现,而这之后,才是再去思考,我可以用哪些学过的知识去完成。

本学期的内容较上学期难了一个层面,类的基本功能、继承、重载、多态、STL等内容,都是必须一个个掌握,而不能妄图拉下其中一个再去学习另外一个的,他们之间是一个循序渐进的过程,正如图书管理系统的设计,也是一个类调试完成之后,再去继续调试更深层次的下一个类的内容。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值