图书管理系统总结

本文介绍了一个基于C++的图书管理系统的设计与实现过程。系统包括图书类、读者类等关键组件,并支持基本的图书管理功能,如借阅、归还等。文章分享了作者的设计体会与心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                        图书管理系统总结

做了很久也只能做出一个很简单的系统,只能实现最基本的几个功能,其中利用了面向对象的方法以及C++的编程思想来完成系统的设计。认为,比较重要的方面有两个部分。第一,了解编译器的特性,熟悉调试方法。这意味着,在今后的开发中,你有独立的解决bug的能力,当然,前提是你了解基础语法。第二,了解代码的组织结构和逻辑关系,是我们永不止步的源泉。
具体,我认为重要的有一下几个部分:
1、了解C++/C的基本数据结构,同时如何自定义数据结构;
2、了解C++类的定义与功能实现(比如:登录,登出,注册,添加书本等等),什么是构造函数,什么是析构函 数、操作符重载;
3、如何实现默认参数传递,什么是用户接口统一;
4、文件I\o输入输出流,个人觉得不好理解也很难记住
5、了解部分windows编程控制台、消息、句柄等逻辑关系;

一:问题描述:

在图书管理系统中,要为每个借阅者建立一个账户,账户中存储借阅者的个人信息、借阅信息以及预定信息。持有借阅卡的借阅者可以借阅书刊、返还书刊、查询书刊信息,但这些操作都是通过图书管理员进行的,也即借阅者不直接与系统交互,而是图书管理员充当借阅者的代理与系统交互。在借阅书刊时,需要输入所借阅的书刊名,书刊的ISBN/ISSN号,然后输入借阅者的图书卡号和借阅者名,系统验证借阅者是否有效(在系统中存在账户),若有效,借阅请求被接受,系统查询数据库系统,看借阅者所借阅的书刊是否存在,若存在,则借阅者可借出书刊,建立并在系统中存储借阅记录。借阅者还书后,删除关于所还书刊的借阅记录。如果借阅者所借的书刊已被借出,借阅者还可预定该书刊,一旦借阅者预定的书刊可以获得,就将书刊直接寄给预定人(为了简化系统,预定书刊可获得时就不通知借阅者了)。另外,为了简化系统,也不考虑书刊的最长借阅期限,假设借阅者可以无限期地保存所借阅的书刊。

二:系统功能分析:

系统通过调用函数来实现删除图书、读者信息,添加图书、读者信息等功能。delbook( )函数用于删除图书信息;

addbook( )函数用于增加图书信息;

borrowbook( )函数用于实现借书操作;

backbook( )函数用于实现还书操作等等;

主函数用于掉用这些函数

三:详细分析:

读者类的设计:该类定义了借书操作,还书操作,设置读者姓名等功能;

读者库类的设计:该类实现了建立读者的个人资料,删除读者信息,输出读者信息等功能;

图书类的设计:可以实现对图书的描述,图书的编号,书名,借出,还入等操作;

图书库类的设计:增删查改;



四:代码

#include<bits/stdc++.h>

#include <iostream>

#include <iomanip>

#include <string.h>

#include <fstream>

using namespace std;

const int Maxr=1000;

const int Maxb=1000;

const int Maxbor=10;

class Time

{

    private:

    int year,month,day;

    public:

    Time()

    {

        year=0;

        month=0;

        day=0;

    }

    Time(int y,int m,int d)

    {

        year=y;

        month=m;

        day=d;

    }

 

    void set_year(int y)

    {

        year=y;

    }

    void set_month(int m)

    {

        month=m;

    }

    void set_day(int d)

    {

        day=d;

    }

    int get_year()

    {

        return year;

    }

    int get_month()

    {

        return month;

    }

    int get_day()

    {

        return day;

    }

    bool operator<(const Time&obj)const

    {

        return year!=obj.year?year<obj.year:month!=obj.month?month<obj.month:day<obj.day;

    }

    friend istream&operator>>(istream&is,Time&obj);

    friend ostream&operator<<(ostream&os,Time&obj);

 

 

};

ostream&operator<<(ostream&os,Time&obj)

{

    os<<obj.year<<":";

    os<<obj.month<<":";

    os<<obj.day;

    return os;

}

istream&operator>>(istream&is,Time&obj)

{

    is>>obj.year>>obj.month>>obj.day;

    return is;

}

 

class Record

{

    private:

     string bookName;//书名

     int bookindex;

     string stuName;

     string type;//操作类型

     int stuID;

    Time startTime;//借书时间

    Time endTime;//还书时间

    bool ifback;//是否归还

    public:

    Record()

    {

           ifback=0;

    }

    Record(string bn,int b,string s1,int s2,string ty,Time start,Time end,bool f )

    {

        bookName=bn;

        bookindex=b;

        stuName=s1;

        stuID=s2;

         type=ty;

        startTime=start;

        endTime=end;

         ifback=f;

 

    }

    string get_bookName()

    {

        return bookName;

    }

 

    int get_index()

    {

        return bookindex;

    }

    string get_stuName()

    {

        return stuName;

    }

    int get_ID()

    {

        return stuID;

    }

    Time get_startTime()

    {

        return startTime;

    }

    Time get_endTime()

    {

        return endTime;

    }

     bool get_ifback()

    {

        return ifback;

    }

    string get_type()

    {

        return type;

    }

    void set_type(string ty)

{

    type =ty;

}

void set_stuName(string x)

{

    stuName=x;

}

    void set_index(int b)

    {

        bookindex=b;

    }

    void set_endTime(Time x)

    {

        endTime=x;

    }

 

 

void set_bookName(string bn)

{

    bookName=bn;

}

void set_startTime(Time t)

{

    startTime=t;

}

void set_ID(int x)

{

    stuID=x;

}

void set_ifback(bool f)

{

    ifback=f;

}

     friend ostream&operator<<(ostream&out,Record&obj);

     friend istream&operator>>(istream&in,Record&obj);

 

};

 

istream&operator>>(istream&in,Record&obj)

{

    in>>obj.bookindex;

    in>>obj.bookName;

    in>>obj.stuName;

    in>>obj.stuID;

    in>>obj.type;

    in>>obj.startTime;

    in>>obj.endTime;

    in>>obj.ifback;

    return in;

}

ostream&operator<<(ostream&out,Record&obj)

{

    out<<obj.bookindex<<" ";

    out<<obj.bookName<<" ";

    out<<obj.stuName<<" ";

    out<<obj.stuID<<" ";

    out<<obj.type<<" ";

    out<<obj.startTime<<" ";

    out<<obj.endTime<<" ";

    out<<obj.ifback<<" ";

    return out;

}

 

class Records

{

protected:

    int RecordNum;

    vector<Record>v1;

    vector<Record>::iterator vit1;

    multimap<bool,int>m2;

    multimap<bool,int>::iterator mit2;//是否归还bool;

    public:

    Records()

    {

        RecordNum=0;

    }

    int get_RecordNum()

    {

        return RecordNum;

 

    }

    vector<Record> &get_Record()

    {

        return v1;

    }

    multimap<bool,int>&get_m2()

    {

        return m2;

    }

    void set_RecordNum(int x)

    {

        RecordNum=x;

    }

    void disAllRecord();//所有记录

    void disNobackRecord();//显示未还书记录//////////////////////////////////////////////

 

};

    void Records::disAllRecord()

    {

        for(int i=0;i<v1.size();++i)

        cout<<v1[i]<<endl;

    }

    void Records::disNobackRecord()

    {

        if(m2.find(0)!=m2.end())

        for(mit2=m2.lower_bound(0);mit2!=m2.upper_bound(0);++mit2)

        cout<<v1[mit2->second]<<endl;

        else

        cout<<"no records!"<<endl;

    }

 

 

class Book:public Records

{

    private:

    string name;

    int index;//是否在架

    int tot;//总册数

    int shengyu;//剩余册数

    char ch;//辅助格式

    multimap<int,int>m1;

    multimap<int,int>::iterator mit1;//学号

    public:

    Book(int in,string nam,int tott,int sy)

    {

    name=nam;

    index=in;

    tot=tott;

    shengyu=sy;

    ch='/';

    }

    Book()

    {

        ch='/';

    }

    multimap<int,int>&get_m1()

    {

        return m1;

    }

 

    string get_name()

    {

        return name;

    }

    int get_index()

    {

        return index;

    }

    int get_shengyu()

    {

        return shengyu;

    }

 

    int get_tot()

    {

        return tot;

    }

    void set_tot(int x)

    {   tot=x;

    }

    void set_shengyu(int sy)

    {

        shengyu=sy;

    }

    void set_endTime(int);

    void set_index(int in)

    {

        index=in;

    };

    void deleteRecord(int id,Time perTime)//还书时标记结束记录

    {

        for(mit1=m1.lower_bound(id);mit1!=m1.upper_bound(id);++mit1)

        {

            if(v1[mit1->second].get_ifback()==0)

            {

                v1[mit1->second].set_ifback(1);

                v1[mit1->second].set_endTime(perTime);

            }

        }

    }

    void addRecord(Record r)//增加一条记录

    {

      RecordNum++;

      v1.push_back(r);

      m2.insert(make_pair(r.get_ifback(),v1.size()-1));

      m1.insert(make_pair(r.get_ID(),v1.size()-1));

    }

    friend istream&operator>>(istream&is,Book&obj);

    friend  ostream&operator<<(ostream&os,Book&obj);

    void disBase()

    {

        cout<<index<<" "<<name<<" "<<shengyu<<" "<<ch<<" "<<tot;

    }

};

void Book::set_endTime(int id)

{

    Time tt;

    for (mit1=m1.lower_bound(id);mit1!=m1.upper_bound(id);++mit1)

    {

        if(v1[mit1->second].get_ifback()==0)

        {

            tt=v1[mit1->second].get_startTime();

            tt.set_month(tt.get_month()+2);

            v1[mit1->second].set_endTime(tt);

 

        }

    }

}

ostream&operator<<(ostream&os,Book&obj)

{

    os<<obj.index<<" "<<obj.name<<" "<<obj.shengyu<<" "<<obj.ch<<" "<<obj.tot<<"  "<<obj.RecordNum<<endl;

   if(obj.get_RecordNum())

   {

       vector<Record>vt;

       vt=obj.get_Record();

       for(int j=0;j<vt.size();++j)

       os<<vt[j]<<endl;}

       return os;

 

    }

 

istream&operator>>(istream&is,Book&obj)

{

 

    is>>obj.index>>obj.name>>obj.shengyu>>obj.ch>>obj.tot>>obj.RecordNum;

int p=obj.RecordNum;

obj.set_RecordNum(0);

for(int i=1;i<=p;++i)

{

    Record r;

    is>>r;

    obj.addRecord(r);

}

return is;

}

 

 

class Student:public Records

{

private:

    int ID;//学号

    string name;//姓名

    int num;//剩余借阅量

    multimap<int,int>m1;

multimap<int,int>::iterator mit1;//书号int

    public:

    Student(string n,int id)

    {

name=n;

ID=id;

num=10;

}

Student()

{

 num=10;

}

multimap<int,int>&get_m1()

{

    return m1;

}

 

int get_ID()

{

    return ID;

}

string get_name()

{

    return name;

}

int get_num()

{

    return num;

}

void set_name(string n)

{

    name=n;

}

void set_num(int x)

{

    num=x;

}

void setID(int x)

{

    ID=x;

}

void deleteRecord(int index,Time perTime)

{

    for(mit1=m1.lower_bound(index);mit1!=m1.upper_bound(index);++mit1)

    {

        if(v1[mit1->second].get_ifback()==0)

        {

           v1[mit1->second].set_ifback(1);

           v1[mit1->second].set_endTime(perTime);

        }

    }

}

void set_endTime(int index)

{

    Time tt;

    for(mit1=m1.lower_bound(index);mit1!=m1.upper_bound(index);++mit1)

    {

        if(v1[mit1->second].get_ifback()==0)

        {

           tt=v1[mit1->second].get_startTime();

           tt.set_month(tt.get_month()+2);

           v1[mit1->second].set_endTime(tt);

        }

    }

 

}

    void addRecord(Record r)//增加一条记录

    {

    RecordNum++;

    v1.push_back(r);

    m2.insert(make_pair(r.get_ifback(),v1.size()-1));

    m1.insert(make_pair(r.get_index(),v1.size()-1));

    }

    bool queryTLE(Time);

    void disBase()

    {

    cout<<name<<" ";

    cout<<ID<<" ";

    cout<<num;

    }

    friend istream&operator>>(istream&is,Student&obj);

    friend ostream&operator<<(ostream&os,Student&obj);

};

 

    istream &operator>>(istream &is,Student &obj)

    {

        is>>obj.name>>obj.ID>>obj.num>>obj.RecordNum;

       int p=obj.get_RecordNum();

        obj.set_RecordNum(0);

        for(int i=1;i<=p;++i)

        {

            Record r;

            is>>r;

            obj.addRecord(r);

        }

        return is;

    }

    ostream &operator<<(ostream&os,Student&obj)

    {

        os<<obj.name<<" ";

        os<<obj.ID<<" ";

        os<<obj.num<<" ";

        os<<obj.RecordNum<<endl;

        if(obj.get_RecordNum())

        {

            vector<Record> vt;

            vt=obj.get_Record();

            for(int j=0;j<vt.size();++j)

             os<<vt[j]<<endl;

        }

        return os;

    }

bool Student::queryTLE(Time tt)

{

    Time temp;

     for(mit2=m2.lower_bound(0);mit2!=m2.upper_bound(0);++mit2)

    {

        temp=v1[mit2->second].get_endTime();

        if(temp<tt)

        return 1;

    }

    return 0;

}

 

class MangerOp

{

    private:

    int stuNum;//用户总数

    int bookNum;//书种数

    vector<Student>v1;

    vector<Student>::iterator vit1;

    map<int,int>m1;

    map<int,int>::iterator mit1;

    vector<Book>v2;

    vector<Book>::iterator vit2;

    map<int,int>m2;

    map<int,int>::iterator mit2;

    map<string,int>m3;

    map<string,int>::iterator mit3;

    public:

    MangerOp()

    {

stuNum=0;

bookNum=0;

v2.clear();

m2.clear();

m3.clear();

load1();

load2();

 

    }

    ~MangerOp()

    {save1();

    save2();

 

    }

    void deletebook();

    void queryStuNoback();

    void load1();

    void load2();

    void save1();

    void save2();

    void addBook();

    void addStu();

    void deleteBook();

    void deleteStu();

    void queryStuAll();//查询某学生所有记录

    void quetyStuNoback();//未还书记录

    void queryBookAllRecord();

    void queryBookNoback();

    void queryABook();//某本书信息

    void queryAStu();//某用户信息

    };

 void MangerOp::load1()

{

    ifstream infile("20171809book.txt",ios::in);

   if(!infile)

   return;

   v2.clear();

   m2.clear();

   m3.clear();

   Book b;

   int i=0;

   while(infile>>b)

   {

       bookNum++;

       v2.push_back(b);

       m2.insert(make_pair(b.get_index(),i));

       m3.insert(make_pair(b.get_name(),i));

       i++;

       vector<Record>&vt=b.get_Record();

       multimap<bool,int>&m2=b.get_m2();

       multimap<int,int>&m1=b.get_m1();

       vt.clear();

       m1.clear();

       m2.clear();

       m3.clear();

       }

       bookNum=i;

       infile.close();

       cout<<"books load success!"<<endl;

}

void MangerOp::load2()

{

     ifstream infile("20171809stu.txt",ios::in);

   if(!infile)

   return;

   v1.clear();

   m1.clear();

   Student s;

   int i=0;

   while(infile>>s)

   {

       v1.push_back(s);

       m1.insert(make_pair(s.get_ID(),i));

       i++;

       vector<Record>&vt=s.get_Record();

       multimap<bool,int>&m2=s.get_m2();

       multimap<int,int>&m1=s.get_m1();

       vt.clear();

       m1.clear();

       m2.clear();

       m3.clear();

       }

       stuNum=i;

       infile.close();

       cout<<"students load success!"<<endl;

}

    void MangerOp::save1()

{

    ofstream outfile("g:\\20171809book.txt",ios::out);

    if(!outfile)

    return ;

    for(int i=0;i<bookNum;++i)

    {

        outfile<<v2[i];

    }

    outfile.close();

}

void MangerOp::save2()

{

    ofstream outfile("g:\\20171809stu.txt",ios::out);

    if(!outfile)

    return ;

    for(int i=0;i<stuNum;++i)

    {

        outfile<<v1[i];

    }

    outfile.close();

}

void MangerOp::queryAStu()

{

   int id;

   cin>>id;

   mit1=m1.find(id);

   if(mit1!=m1.end())

   {

       cout<<v1[m1[id]];

   }

}

void MangerOp::queryABook()

{

    int index;

    cin>>index;

    //mit2=m2.find(index);

    if(mit2!=m2.end())

    cout<<v2[m1[index]];

}

void MangerOp::addBook()

{

    string name;

    int index;

    int n;

    while(cin>>index&&index!=-1)

    {

        cin>>name>>n;//输入书号,书名,数量

        //mit2=m2.find(index);

        if(mit2!=m2.end())

        {

            v2[mit2->second].set_tot(v2[mit2->second].get_tot()+n);

             v2[mit2->second].set_shengyu(v2[mit2->second].get_shengyu()+n);

            }

            else

            {

                v2.push_back(Book(index,name,n,n));

                m2.insert(make_pair(index,v2.size()-1));

                m3.insert(make_pair(name,v2.size()-1));

                bookNum++;

            }

    }

}

void MangerOp::addStu()

{

    int id;

    string name;

    while(cin>>id&&id!=-1)

    {

        cin>>name;

        mit1=m1.find(id);

        if(mit1==m1.end())

        {

            stuNum++;

            v1.push_back(Student(name,id));

            m1.insert(make_pair(id,v1.size()-1));

        }

    }

}

void MangerOp::deletebook()

{

    int index,num;

    cin>>index>>num;

    mit2=m2.find(index);

    int i=mit2->second;

    if(mit2!=m2.end())

       {

        if(num==v2[i].get_shengyu()&&num==v2[i].get_tot())

        {

            bookNum--;

            v2.erase(v2.begin()+i);

            m2.erase(index);

            m3.erase(v2[i].get_name());

        }

        else

        if(num<=v2[i].get_shengyu())

        {

            v2[i].set_shengyu(v2[i].get_shengyu()-num);

            v2[i].set_tot(v2[i].get_tot()-num);

        }

    }

}

void MangerOp::deleteStu()

{

    int id;

    cin>>id;

    mit1=m1.find(id);

    if(mit1!=m1.end())

    {

        stuNum--;

        m1.erase(id);

        v1.erase(v1.begin()+(mit1->second));

    }

}

void MangerOp::queryBookAllRecord()

{

    int index;

    cin>>index;

    mit2=m2.find(index);

    if(mit2!=m2.end())

    {

        v2[mit2->second].disAllRecord();

    }

}

void MangerOp::queryBookNoback()

{

    int index;

    cin>>index;

    mit2=m2.find(index);

    if(mit2!=m2.end())

    {

        v2[mit2->second].disNobackRecord();

    }

}

void MangerOp::queryStuAll()

{

    int id;

    cin>>id;

    mit1=m1.find(id);

    if(mit1!=m1.end());

    {

        v1[mit1->second].disAllRecord();

    }

}

void MangerOp::queryStuNoback()

{

    int id;

    cin>>id;

    mit1=m1.find(id);

    if(mit1!=m1.end())

    {

        v1[mit1->second].disNobackRecord();

    }

}

class StuOp

{

    private:

    Student stu;

    int id;

    Time t1;

    vector<Book>v1;

    vector<Book>::iterator vit1;

    map<int,int>m1;

    map<int,int>::iterator mit1;

    public:

    StuOp(int ID,Time t):id(ID),t1(t)

    {

        load1();

        load2();

    }

    ~StuOp()

    {

        save1();

        save2();

 

    }

    void load1();

    void load2();

    void save1();

    void save2();

    void borrow();

    void back();

    void againBorrow();//续借

    void disAllRecord();//该生所有记录

    void disNobackRecord();//未还书记录

    void queryABook();

    void disAllBook();

    };

    void StuOp::load1()

    {

        ifstream infile("20171809book.txt",ios::in);

        if(!infile)

        return;

        v1.clear();

        Book b;

        int k=0;

        while(infile>>b)

        {

            v1.push_back(b);

            m1.insert(make_pair(b.get_index(),k));

            k++;

            vector<Record>&vt=b.get_Record();

            multimap<bool,int>&m2=b.get_m2();

            multimap<int,int>&m1=b.get_m1();

            vt.clear();

            m1.clear();

            m2.clear();

            m1.clear();////////////////////////////////////////////////////

        }

        infile.close();

        cout<<"books load success!"<<endl;

        }

 

void StuOp::load2()

    {

        bool flag=0;

        ifstream infile("20171809stu.txt",ios::in);

        if(!infile)

        return;

        Student s;

        while(infile>>s)

        {

            if(s.get_ID()==id)

            {

                stu=s;

                stu.disBase();

                cout<<"... ...landing success!"<<endl;

                flag=1;

                break;

            }

            vector<Record>&vt=s.get_Record();

            multimap<bool,int>&m2=s.get_m2();

            multimap<int,int>&m1=s.get_m1();

            vt.clear();

            m1.clear();

            m2.clear();

        }

    if(!flag)

        cout<<"id wrong!"<<endl;

        }

        void StuOp::save1()

    {

        ofstream outfile("20171809stu.txt",ios::out);

        if(!outfile)

        return;

        for(int i=0;i<v1.size();++i)

        {

            outfile<<v1[i];

        }

        outfile.close();

            }

void StuOp::save2()

    {

        ifstream infile("20171809stu.txt",ios::in);

        if(!infile)

        return;

vector<Student>v3;

vector<Student>::iterator vit3;

int k=0;

Student s;

        while(infile>>s)

        {

            v3.push_back(s);

            k++;

            vector<Record>&vt=s.get_Record();

            multimap<bool,int>&m2=s.get_m2();

            multimap<int,int>&m1=s.get_m1();

            vt.clear();

            m1.clear();

            m2.clear();

        }

        infile.close();

        ofstream outfile("20171809stu.txt",ios::out);

        if(!infile)

        return;

        for(int i=0;i<v3.size();++i)

        {

            if(v3[i].get_ID()==stu.get_ID())

            {

                outfile<<stu;

            }

            else

            {

                outfile<<v3[i];

            }

        }

        outfile.close();

 

        }

        void StuOp::disAllBook()

        {

            cout<<"disAllBook   :  "<<endl;

            for(mit1=m1.begin();mit1!=m1.end();++mit1)

            {

                v1[mit1->second].disBase();

                cout<<endl;

            }

 

        }

        void StuOp::queryABook()

        {

            int index;

            cin>>index;

            mit1=m1.find(index);

            if(mit1!=m1.end())

            cout<<v1[m1[index]];

        }

        void StuOp::disAllRecord()

        {

            stu.disAllRecord();

        }

        void StuOp::disNobackRecord()

        {

            stu.disNobackRecord();

        }

        void StuOp::borrow()

        {

            int index;

            cin>>index;

            mit1=m1.find(index);

            if(mit1==m1.end())

            cout<<"book fail!"<<endl;

            else

            {

                Time t2;

                t2=t1;

                t2.set_month(t1.get_month()+1);

                if(stu.get_num()<1||v1[m1[index]].get_shengyu()<1)

                cout<<"num fail!"<<endl;

                if(stu.queryTLE(t1))

                cout<<"TLE fail!"<<endl;

                else

                {

     Record rr(v1[m1[index]].get_name(),index,stu.get_name(),stu.get_ID(),"jieshu",t1,t2,0);

                    stu.addRecord(rr);

                    v1[m1[index]].addRecord(rr);

                    v1[mit1->second].set_shengyu(v1[m1[index]].get_shengyu()-1);

                    stu.set_num(stu.get_num()-1);

                    cout<<"borrow succss!"<<endl;

                    }

                }

            }

            void StuOp::back()

            {

                int index;

                cin>>index;

                mit1=m1.find(index);

                if(mit1!=m1.end())

                {

                    Record r(v1[m1[index]].get_name(),index,stu.get_name(),stu.get_ID(),"huanshu",t1,t1,1);

                    stu.addRecord(r);

                    v1[mit1->second].addRecord(r);

                    stu.set_num(stu.get_num()+1);

                    v1[mit1->second].deleteRecord(stu.get_ID(),t1);

                    cout<<"back succss!"<<endl;

                }

                else

                cout<<"query fail!"<<endl;

                }

                void StuOp::againBorrow()

                {

                    int index;

                    cin>>index;

                    mit1=m1.find(index);

                    if(mit1!=m1.end())

                    {

                         Record r(v1[m1[index]].get_name(),index,stu.get_name(),stu.get_ID(),"xvjie",t1,t1,1);

                     v1[mit1->second].addRecord(r);

                     stu.addRecord(r);

                     stu.set_endTime(index);

                     v1[mit1->second].set_endTime(stu.get_ID());

                     cout<<"againBorrow success!"<<endl;

 

                    }

 

                }

                int main()

                {

                   // MangerOp man;

                    //man.deleteBook();

                   // man.deleteStu();

                  int id;

                    Time t;

                    cin>>id>>t;

                    StuOp(id,t);

                   // stu.disAllBook();

                    //stu.borrow();

                    //stu.back();

                   // stu.againBorrow();

                   //*/

                    return 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、付费专栏及课程。

余额充值