图书管理系统总结

#include<vector>
#include<iostream>
#include<map>
#include<bits/stdc++.h>
#include<fstream>
#include<algorithm>
using namespace std;
class Time
{
private:
    int year,month,day;
public:
    Time(int x,int y,int z):year(x),month(y),day(z){};
    Time(){year=2018,month=1,day=1;}
    int getyear(){return year;}
    int getmonth(){return month;}
    int getday(){return day;}
    void setyear(int year){this->year=year;}
    void setmonth(int month){this->month=month;}
    void setday(int day){this->day=day;}
    bool operator<(const Time &d2)const
    {
        return year!=d2.year?year<d2.year:month!=d2.month?month<d2.month:day<d2.day;
    }
    friend istream& operator>>(istream &is,Time &t);
	friend ostream& operator<<(ostream &os,const Time &t);
	friend Time operator+(Time m,int i);
	void display();
};
Time operator+(Time m,int i)
{
    m.month=m.month+i;
    if(m.month+i>12)
    {
        m.month=m.month-12;
        m.year++;
    }
    return m;
}
istream& operator>>(istream &is,Time &t)
{
    is>>t.year;
    is>>t.month;
    is>>t.day;
    return is;
}
ostream& operator<<(ostream &os,const Time &t)
{
    os<<t.year<<" ";
    os<<t.month<<" ";
    os<<t.day<<" ";
    return os;
}
void Time::display()
{
    cout<<year<<" "<<month<<" "<<day<<endl;
}
class Record
{
private:
    int id;
    Time begin;
    Time end;
    int sh;
    int xj;
    int state;
public:
    Record(){};
    Record(int i,Time s,int h)
    {
        id=i;
        begin=s;
        sh=h;
        if(s.getmonth()+2>12)
        {
            Time x(s.getyear()+1,s.getmonth()-12,s.getday());
            end=x;
        }
        else
        {
            Time x(s.getyear(),s.getmonth()+2,s.getday());
            end=x;
        }
        xj=0;
        state=0;
    }
    int getid(){return id;}
    int getsh(){return sh;}
    int getxj(){return xj;}
    int getstate(){return state;}
    Time getbegin(){return begin;}
    Time getend(){return end;}
    void setid(int id){this->id=id;}
    void setsh(int sh){this->sh=sh;}
    void setxj(){xj=1;}
    void setstate(int state){this->state=state;}
    void setbegin(Time begin){this->begin=begin;}
    void setend();
    friend istream &operator>>(istream &is,Record &t);
    friend ostream &operator<<(ostream &os,const Record &t);
};
istream &operator>>(istream&is,Record &t)
{
    if(t.id==-1)
    return is;
    is>>t.id;
    is>>t.begin;
    is>>t.end;
    is>>t.sh;
    is>>t.xj;
    is>>t.state;
    return is;
}
ostream &operator<<(ostream&os,const Record &t)
{
    os<<t.id<<" ";
    os<<t.begin<<" ";
    os<<t.end<<" ";
    os<<t.sh<<" ";
    os<<t.xj<<" ";
    os<<t.state<<endl;
    return os;

}
void Record::setend()
{
    Time e;
    if(end.getmonth()+1>12)
    e=Time(end.getyear()+1,end.getmonth()-12,end.getday());
    else
    e=Time(end.getyear(),end.getmonth()+1,end.getday());
    end=e;
}
class Book
{
private:
    int sh;
    string title;
    string press;
    int date;
    int num;
    int jc;
    vector<Record>v1;
    vector<Record>::iterator it1;
    multimap<int,int>m1;
    multimap<int,int>::iterator mit1;
    int record_num;
public:
    Book(int a,string b,string c,int d,int e,int f):sh(a),title(b),press(c),date(d),num(e),jc(f){};
    Book(){record_num=0;};
    string gettitle(){return title;}
    int getsh(){return sh;}
    string getpress(){return press;}
    int getdate(){return date;}
    int getnum(){return num;}
    int getjc(){return jc;}
    void settitle(string title){this->title=title;}
    void setsh(int sh){this->sh=sh;}
    void setpress(string press){this->press=press;}
    void setdate(int date){this->date=date;}
    void setnum(int num){this->num=num;}
    void setjc(int jc){this->jc=jc;}
    void addRecord1(Record r1);
    void dispRecord1();
    void deleteRecord1(int no);
    int search1(int no);
    void putRecord();
    void display();
    vector<Record>getRecord(){return v1;}
    friend istream &operator>>(istream &in,Book &b);
    friend ostream &operator<<(ostream &out,Book &b);
};
void Book::display()
{
    cout<<"书号:"<<sh<<" "<<"书名:"<<title<<" "<<"出版社:"<<press<<" "<<"出版日期:"<<date<<" "<<"图书数量:"<<num<<" "<<"借出数量:"<<jc<<endl;
}
istream &operator>>(istream &in,Book &b)
{
    in>>b.sh;
    if(b.sh==-1)
    return in;
    in>>b.title;
    in>>b.press;
    in>>b.date;
    in>>b.num;
    in>>b.jc;
    return in;
}
ostream &operator<<(ostream &out,Book &b)
{
    out<<b.sh<<" "<<b.title<<" "<<b.press<<" "<<b.date<<" "<<b.num<<" "<<b.jc<<" "<<b.record_num<<" ";
    for(int i=0;i<b.record_num;i++)
	out<<b.v1[i];
    return out;
}
void Book::addRecord1(Record r1)
{
    r1.setstate(1);
    v1.push_back(r1);
    record_num++;
    int i=v1.size();
    m1.insert(make_pair(r1.getid(),i-1));
    Book b;
    b.setjc(b.getjc()+1);
}
void Book::dispRecord1()
{
    if(v1.size()!=0)
    for(it1=v1.begin();it1!=v1.end();it1++)
    {
        cout<<*it1;
    }
    else
    cout<<"没有记录";
}
int Book::search1(int no)
{
    mit1=m1.find(no);
    if(mit1!=m1.end())
    return mit1->second;
    else
    return -1;
}


void Book::deleteRecord1(int no)
{
    int i;
    i=search1(no);
    if(i!=-1)
    {
      v1[i].setstate(0);
    }
}
void Book::putRecord()
{
    Record r;
    while(cin>>r)
    {
        if(r.getid()==0)
        break;
        v1.push_back(r);
    }
}

class User
{
    int id;
    string name;

    int wj;
    vector<Record>v2;
    vector<Record>::iterator it2;
    multimap<int,int>m2;
    multimap<int,int>::iterator mit2;
public:
    User(){wj=0;};
    User(int i,string a)
    {
        id=i;
        name=a;
    }
    int getid(){return id;}
    string getname(){return name;}
    int getwj(){return wj;}
    void setid(int id){this->id=id;}
    void setname(string name){this->name=name;}
    void setwj(int wj){this->wj=wj;}
    vector<Record>getrecord(){return v2;}
    void addRecord2(Record r2);
    void dispRecord2();
    int search2(int s);
    void deleteRecord2(int s);
    friend istream &operator>>(istream &in,User &x);
    friend ostream &operator<<(ostream &os,const User &x);
    bool operator==(User u)
    {
        return this->id==u.getid()?1:0;
    }
};


istream &operator>>(istream &in,User&x)
{
    in>>x.id;
    if(x.id==-1)
    return in;
    in>>x.name;
    in>>x.wj;
    return in;
}
ostream &operator<<(ostream &os,const User&x)
{
    os<<x.id<<" ";
    os<<x.name<<" ";
    os<<x.wj<<endl;
    return os;
}
void User::addRecord2(Record r2)
{
    r2.setstate(1);
    v2.push_back(r2);
    int i=v2.size();
    m2.insert(make_pair(r2.getsh(),i-1));
}
void User::deleteRecord2(int s)
{
    int i;
    i=search2(s);
    if(i!=-1)
    {
      v2[i].setstate(0);
    }
}
void User::dispRecord2()
{
    if(v2.size()!=0)
    for(it2=v2.begin();it2!=v2.end();it2++)
    {
        cout<<*it2;
    }
    else
    cout<<"没有记录";
}
int User::search2(int s)
{
    mit2=m2.find(s);
    if(mit2!=m2.end())
    return mit2->second;
    else
    return -1;
}
class Client
{
private:
    vector<Book>v5;
    vector<Book>::iterator it5;
    multimap<int,int>m5;
    multimap<int,int>::iterator mit5;
    User u;
public:
    Client()
    {
        zr3();
        zr4();
    }
    ~Client()
    {
        bc3();
        bc4();
    }
    void zr3();
    void zr4();
    void bc3();
    void bc4();
    void borrow();
    void back();
    int search5(int h);
};
int Client::search5(int h)
{
    mit5=m5.find(h);
    if(mit5!=m5.end())
    {
        return mit5->second;
    }
    else
    return -1;
}
void Client::borrow()
{
    int h;
    Time t;
    Book b;
    cout<<"书号:";
    cin>>h;
    cout<<"年月日:";
    cin>>t;
    int a=search5(h);
    if(u.getwj()==0&&v5[a].getnum()>=v5[a].getjc())
    {
        v5[a].setjc(v5[a].getjc()+1);
        Record r(u.getid(),t,h);
        v5[a].addRecord1(r);
        u.addRecord2(r);
        cout<<"Borrowing books successfully";
    }
    else
    cout<<"Borrowing books failed";
}
void Client::back()
{
    int h;
    cout<<"书号:";
    cin>>h;
    int a=search5(h);
    v5[a].setjc(v5[a].getjc()-1);
    v5[a].deleteRecord1(u.getid());
    u.deleteRecord2(h);
    cout<<"Book return success";
}
void Client::zr3()
{
    Book b;
    int i;
    ifstream infile("d:\\20171764book.txt",ios::in);
    if(!infile)
    {
        return;
    }
    v5.clear();
    m5.clear();
    while(infile>>b)
    {
        v5.push_back(b);
        int i=v5.size();
        m5.insert(make_pair(b.getsh(),i-1));
    }
}
void Client::zr4()
{
    int id;
    cout<<"学号:";
    cin>>id;
    User u;
    int i;
    ifstream infile("d:\\20171764stu.txt",ios::in);
    if(!infile)
    return;

    while(infile>>u)
    {
        if(u.getid()==id)
        this->u=u;
    }
    infile.close();

}

void Client::bc3()
{
    ofstream outfile("d:\\20171764book.txt",ios::out);
    if(!outfile)
    {
        return ;
    }
    for(it5=v5.begin();it5!=v5.end();it5++)
    {
        outfile<<*it5;
    }
    outfile.close();
}
void Client::bc4()
{
    vector<User>v;
    vector<User>::iterator it;
    User u1;
    ifstream infile("d:\\20171764stu.txt",ios::in);
    if(!infile)
    return ;
    while(infile>>u1)
    {
        if(u1==this->u)
        u1=this->u;
        v.push_back(u1);
    }
    infile.close();

    ofstream outfile("d:\\20171764stu.txt",ios::out);
    if(!outfile)
    return;
    for(it=v.begin();it!=v.end();it++)
    outfile<<*it;
    outfile.close();
}

class Manage
{
private:
    vector<Book>v3;
    vector<Book>::iterator it3;
    multimap<int,int>m3;
    multimap<int,int>::iterator mit3;
    vector<User>v4;
    vector<User>::iterator it4;
    multimap<int,int>m4;
    multimap<int,int>::iterator mit4;
public:
    Manage(){zr1(),zr2();}
    ~Manage(){bc1(),bc2();}
    void addBook();
    void dispBook();
    int search3(int h);
    void deleteBook();
    void addUser();
    void dispUser();
    int search4(int h);
    void deleteUser();
    void zr1();
    void zr2();
    void bc1();
    void bc2();
};
void Manage::zr1()
{
    Book b;
    int i;
    ifstream infile("d:\\20171764book.txt",ios::in);
    if(!infile)
    return;
    v3.clear();
    m3.clear();
    i=0;
    while(infile>>b)
    {
        v3.push_back(b);
        m3.insert(make_pair(b.getsh(),i-1));
        i++;
    }
    infile.close();
}
void Manage::zr2()
{
    User u;
    int i;
    ifstream infile("d:\\20171764stu.txt",ios::in);
    if(!infile)
    return;
    v4.clear();
    m4.clear();
    i=0;
    while(infile>>u)
    {
        v4.push_back(u);
        m4.insert(make_pair(u.getid(),i-1));
        i++;
    }
    infile.close();
}
void Manage::bc1()
{
    ofstream outfile("d:\\20171764book.txt",ios::out);
    if(!outfile)
    return;
    for(it3=v3.begin();it3!=v3.end();it3++)
    outfile<<*it3;
    outfile.close();
}
void Manage::bc2()
{
    ofstream outfile("d:\\20171764stu.txt",ios::out);
    if(!outfile)
    return;
    for(it4=v4.begin();it4!=v4.end();it4++)
    outfile<<*it4;
    outfile.close();
}

int Manage::search3(int h)
{
    mit3=m3.find(h);
    if(mit3!=m3.end())
    {
        return mit3->second;
    }
    else
    {

        return -1;
    }
}
void Manage::deleteBook()
{
    int h;
    cin>>h;
    int i=search3(h);
    if(i!=-1)
    {
        it3=v3.begin()+i;
        m3.erase(m3.find(h));
        v3.erase(it3);


    }
}
void Manage::addBook()
{
    Book b;
    int i;
    while(1)
    {
        cin>>b;
        if(b.getsh()==-1)
        break;
        v3.push_back(b);
        i=v3.size();
        m3.insert(make_pair(b.getsh(),i-1));
    }
}
void Manage::addUser()
{
    User u;
    int i;
    while(1)
    {
        cin>>u;
        if(u.getid()==-1)
        break;
        v4.push_back(u);
        i=v4.size();
        m4.insert(make_pair(u.getid(),i-1));
    }
}
int Manage::search4(int h)
{
    mit4=m4.find(h);
    if(mit4!=m4.end())
    return mit4->second;
    else
    {
        return -1;
    }

}
void Manage::deleteUser()
{
    int h;
    cin>>h;
    int i=search4(h);
    if(i!=-1)
    {
        it4=v4.begin()+i;
        m4.erase(m4.find(h));
        v4.erase(it4);
    }
}
void Manage::dispBook()
{
    for(it3=v3.begin();it3!=v3.end();it3++)
    cout<<*it3;

}
void Manage::dispUser()
{
    for(it4=v4.begin();it4!=v4.end();it4++)
    cout<<*it4;
}
int main()
{
    Client c;
    c.back();
    /*Manage m;
    m.addUser();
    m.dispBook();
    m.dispUser();
    m.deleteBook();
    m.deleteUser();
  */
}
这是我第一次打的比较完整的代码,刚开始的时候,感觉非常的难,并没有什么思路,但是通过好几天的学习、研究、借鉴,我终于完成了这个代码;

这个代码实现的功能有:增加用户,增加图书,删除用户,删除图书,借书,还书且能够增加借书还书记录

这个代码还有待改进,还有我很多需要学习的地方,这只能证明我现在的水平,我会更加的努力,争取做得更好。

完成了这个代码让我学到了挺多,知道了完成一个程序的基本过程,使自己对所学知识更能够熟练的运用,也学到了之前并不会的知识;

文件的读入和写入是新学的知识,我还需要在这方面在下点功夫,另外向量的运用以及maltimap的使用我也需要再练习。

加油

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、引言    某图书馆为了方便管理和与读者、图书供应商更好的联系特提出开发此系统。   (一)编写目的:    从现在应用的技术方面和用户的操作方式方面研究图书馆管理管理系统的可行性和必要性。   (二) 项目背景:    项目的任务提出者:该图书馆馆长    开发者:软件工程系    用户:图书馆工作人员及读者   (三)参考资料:   《软件工程》 清华大学出版社   《数据结构—C++语言的使用》 西安电子科技大学出版社   《Visual C++ 高级编程》 清华工业出版社   二、可行性研究的前提   (一) 要求:   功能:能够准确快速的记录图书的状态,以便能轻易的查出图书是否被借、是否归还、是否借出超期等信息;读者和管理人员可进行一些需要的操作。   性能:稳定快速,实时控制   输入/输出:条形码英文和汉字输入,英文和汉字输出   安全与保密要求:不能轻易被破坏,不能让管理人员以外的人删改图书信息,对断电、死机、系统崩溃等问题有有力措施以保障数据不受损失。   (二)可行性研究方法:   通过调查分析开发图书馆管理所具备的能力及实现的方法。确定总体结构,利用SQL Server数据库所具有的能力,以最简洁最容易的方法,使用VC++使其成为一个初级的系统软件。   (三) 决定可行性的主要因素:   图书馆规模、设备状况、操作人员技术   三、对现有系统的分析   (一) 处理流程和数据流程 (略)   (二)工作负荷   由于数据量越来越大,现有的系统已明显不能适应目前的庞大数据量,系统工作负荷过大。   (三) 费用支出   由于现有系统的工作负荷严重超载,在现有系统上投入的人力,设备,空间,材料,等等与其他的一系列支持性服务越来越大,导致开发费用支出巨大,严重影响系统的可用性,急需改进。   (四) 人员 设备   鉴于原有系统的技术性含量比较低,故不需要多少高技术人员的操作,只是由于数据量的日益扩大,所需要的操作人员数量不断增大。这一点已不再适应目前信息化时代的步伐。   设备的科技含量也比较低,没有达到大量的计算机普及程度。   (五) 局限性   经过严谨的分析,可知原有的系统存在很大的局限性,比如技术的过于陈旧,人员工作负荷大,系统维护及费用支出巨大,人员与设备技术含量低等等一系列缺点,所有这些都明确了需要一个新的适应新的信息化时代的高科技的系统。所以开发这样一个系统还是很有必要的。   四、所建议系统技术可行性分析   (一)对系统的简要描述   新系统在原有系统的基础上加入了新的数据库的支持,使用了先进的数据库技术与数据管理技术,使数据的准确性与安全性得到了很大的提高,且在用户的并行操作与用户管理方面也有了极大地改善。   (二)处理流程和数据流程 (略)   (三)与现有系统比较的优越性   在以上几点中已可以看出新系统的性能与功能上与现有系统的差别,首先新系统克服了原来系统的资金投入大,人员设备技术含量低,系统工作负担重等缺点。而且加入了对数据的安全性保护的功能,使原有系统在可用性与稳健性方面有了很大的进步。   (四)采用建议系统可能带来的影响   1.设备:采用建议系统后,改进了原有系统的性能所以对设备要求自然更高,建议系统使用了最先进的技术使设备也必须跟着升级。   2.现有软件:由于建议系统采用了先进的数据库技术以及一系列高技术含量软件,使得原来系统上的一些软件无法继续使用,不过在新系统开发过程中将尽量考虑到,对现有软件的兼容性。   3.用户:建议系统使用的新技术是完全基于原有的系统上的,故用户不必考虑新系统带来的人员培训等等。   (五)技术可行性评价   就目前使用的开发技术来说建议系统的功能目标应该能够达到;利用现有的技术在规定的期限内开发工作基本能够完成。   五、 所建议系统经济可行性分析   (一) 该系统对客户的影响:   建议系统是为了改善原有系统在经费支出过高的缺点的,所以新系统一经使用在经费支出方面一定会得到很好的改善,用户在使用了新系统后只需要花一定资金购买一部分计算机与软件就能实现自动化.   (二)购货方面:   1.支出   (1)系统开发费用   1)人员费用:本系统开发期为三周,试运行一周。开发期需要开发人员×人,试运行期需要开发人员2人。人员费用为×万元。   2)设备费:本系统所需的硬件设备费用为×万元。   3)不可预见费:按开发费用的15%计算。   (2)系统运行费用   1)系统维护费:需要 ×人/年进行系统维护,维护费为×万元   2)设备维护费:设备更新费为×万元。设备维护费为×万元。   3)消耗材料费:每年按×元计算。   综上所述,设系统使用时间×年,系统开发和运行总费用×万元,平均×万元/年。   2.收益   (1)提高工作效率   (2)减少工作人员   六、社会因素分析     七、其他可供选择的方案     八、结论意见  

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值