图书管理系统

如今,老师要求的图书管理系统已经告一段落。

一开始规划,当时打算做一个管理系统,面对不同用户所开放的权限不同,管理员可以操作所有的操作,而学生只能进行部分操作。将学生图书 记录 都放在一个管理类进行操作。

每当一个学生进行借书还书时,自动生成记录放到向量里。

老师要求的是,每个学生和书籍各有一个记录,相当于将记录分开来,然后利用继承简化代码。同时,管理员端和学生端分开来,不能合并一起。为的是当一个学生登陆后,只能对自己的进行操作而不能对别人的账号进行操作。同时,登陆进去之后能连续的进行学生操作,而不用每当进行操作时必须登录验证。而且,这样有利于将学生的客户端封死。同时,针对每个用户或者说对于每本书的记录,都有利用价值。

 

在打代码时,确实会遇到很多问题。不过幸好通过网上查询,得以解决。

1.首先是vector容器中对象元素改变时

首先用的比较多是vector,和他的迭代器,应为每个学生所能借阅书的数量在不断地变化,所以每当借书或者还书的时候都需要这个数量的变化,但是在运行代码的过程中,总是莫名奇妙的出现错误。一开始用的是multimap来记录学生在向量的位置。因为vector中对象学生的数量改变时总是出错。上网搜原因也没有相关说明。后来没办法,重新建立一个multimap 让学号和这个学生可借阅的数量进行挂钩才能解决。

2.是关于vector中深复制和浅复制的问题

一开始定义时,系统默认提供一定的空间,但是!当这些空间不够用时,会发生有意思的操作。Vector先申请新的空间,然后将原有的对象复制到新的空间,然后释放掉原有的空间。

而在复制的时候。如果你的对象类型中,含有指针时,则需要深复制,而系统只提供浅复制,所以出错。

3.查询记录

用multimap将记录的关键词学生 图书 建立联系,方便查询。

但是当相关元素多的时候,会产生大量的multimap,不方便管理。

 

 

贴出代码

 

#include<iostream>

#include<fstream>

#include<string>

#include<vector>

#include<map>

#include<algorithm>

using namespace std;

class Time//时间类 年月日时

{

protected:

   int year,month,day,hour;

public:

   Time()

    {

       year=month=day=hour=0;

    }

   Time(int year1,int month1,int day1,int hour1)

    {

       year=year1;

       month=month1;

       day=day1;

       hour=hour1;

    }

   int setTime(int year1,int month1,int day1,int hour1)

    {

       year=year1;

       month=month1;

       day=day1;

       hour=hour1;

    }

   int getyear()

    {

       return year;

    }

   int getmonth()

    {

       return month;

    }

   int getday()

    {

       return day;

    }

   int gethour()

    {

       return hour;

    }

   friend ostream &operator <<(ostream&os,const Time&t);

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

};

ostream&operator<<(ostream&os,const Time&t)//重载输入输出

{

   os<<t.year<<" "<<t.month<<""<<t.day<<" "<<t.hour<<endl;

   return os;

}

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

{

   is>>t.year>>t.month>>t.day>>t.hour;

   return is;

}

class abook//单本书的信息 书的名字 图书馆可以借阅数量

{

protected:

 

public:

   int num;

   string publish;

   string writer;

   string name;

   abook()

    {

       num=0;

    }

   abook(string name1,int num1)

    {

       num=num1;

       name=name1;

    }

   int getnum()

    {

       return num;

    }

   string getname()

    {

       return name;

    }

   int set(int num1,string name1)

    {

       num=num1;

       name=name1;

    }

   friend ostream &operator <<(ostream&os,const abook&a);

   friend istream &operator >>(istream&is,abook&a);

friend class book;

};

ostream &operator<<(ostream&os,const abook&a)//重载输入输出

{ os<<a.name<<"  "<<a.publish<<"  "<<a.writer;

   //os<<a.name<<" "<<a.publish<<" "<<a.writer<<" "<<a.num;

   //os<<a.name<<" "<<a.num<<endl;

   return os;

}

istream &operator>>(istream&is,abook&a)

{

   is>>a.name>>a.publish>>a.writer>>a.num;//书名 出版社 作者 数量

   return is;

}

class book//总数的书

{

protected:

 

public:

   vector<abook>b;//伐

   vector<abook>::iterator bs;

   //string type;

   int num;

   multimap<string,int>m1;

   multimap<string,int>::iterator mit1,p1,p2;//指针  对应下标

   multimap<string,int>m6;// 书和数量

   multimap<string,int>::iterator mit6,m6p1,m6p2;

   book()

    {

       num=0;

    }

   void addbook(abook b1);

   void addbook();

   int search1(string s);//找书

   int search2(string s);

   void display();

   void displayabook(string s);

   friend class op;

   friend class abook;

   int borrow(string bookname);

   void re(string bookname);

};

int book::search2(string s)

{mit6=m6.find(s);

if(mit6!=m6.end())

{cout<<"已经有此图书"<<endl;

return 1;}

else {cout<<"已经添加新书";return0;}

 

}

void book::re(string bookname)

{

   mit1=m1.find(bookname);

   //b[mit1->second].num++;

 

}

int book::borrow(string bookname)

{

   mit1=m1.find(bookname);

   cout<<"find:"<<mit1->second<<endl;

   //b[mit1->second].num--;

   //cout<<"num--"<<endl;

   return 0;

}

void book::displayabook(string s)//一本书的信息

{mit6=m6.find(s);

   mit1=m1.find(s);

   cout<<b[mit1->second-1]<<" 数量:"<<mit6->second<<endl;

}

void book::addbook(abook b1)//添加单本书

{if(search2(b1.name)==0)

   {int i;

   b.push_back(b1);

   i=b.size();//统计数量

   m1.insert(make_pair(b1.getname(),i));//配对

   m6.insert(make_pair(b1.getname(),b1.num));}

   else {mit6=m6.find(b1.name);mit6->second+=b1.num;

   cout<<"书名:"<<b1.name<<" 数量:"<<mit6->second;}

 

}

void book::addbook()//添加好几本书

{

   abook b1;

   int i;

   while(1)

    {

       cin>>b1;

       if(b1.getname()=="end")break;

       b.push_back(b1);

       i=b.size();//统计数量

       m1.insert(make_pair(b1.getname(),i));//配对

   m6.insert(make_pair(b1.getname(),b1.num));

    }

}

int book::search1(string s)

{mit6=m6.find(s);

if(mit6!=m6.end())

{displayabook(s);

return 1;}

else {cout<<"没找到啊";return0;}

//mit1=p1;

   //cout<<mit1->first<<":"<<mit1->second<<endl;//输出书的名字 和配对的序号

   /*p1=mit1.lower_bound(s);

   p2=mit1.upper_bound(s);

   for(mit1=p1;mit1!=p2;mit1++)

    {

       cout<<mit1->first<<":"<<mit1->second<<endl;

   }*/

 

}

void book::display()//显示所有存入的书籍

{

   for(bs=b.begin(); bs!=b.end(); bs++)

       {mit6=m6.find(bs->name);

           cout<<"书名:"<<*bs<<" 库存数量:"<<mit6->second<<endl;}

}

class student//学生类 学号 姓名 可借阅书籍数量

{

   //protected:

public:

   int no,num;

   string mima;

   string name;

   student(const student&s1)

    {

       no=s1.no;

       name=s1.name;

       num=s1.num;

       mima=s1.mima;

    }

   student()

    {

        no=0;

       num=10;

    }

   student(int no1,string name1,string mima1)

    {

       no=no1;

       name=name1;

       num=10;

       mima=mima1;

    }

   friend ostream &operator <<(ostream&os,conststudent&s);

   friend istream &operator >>(ostream&is,student&s);

};

ostream&operator<<(ostream&os,const student&s)

{

   os<<" "<<s.no<<""<<s.name<<" "<<s.mima<<endl;

   return os;

}

istream&operator>>(istream&is,student&s)

{

   is>>s.no>>s.name>>s.mima;

   return is;

}

class record//单条记录 时间 学生  方式 书

{

protected:

 

public:

   Time t;

   student s;

   abook a;

   string type,bookname;

record(){;}

   record(Time t1,student s1,string type1,abook a1)

    {

       t=t1;

       s=s1;

       a=a1;

       type=type1;

    }

   record(Time t1,student s1,string type1,string bookname1)

    {

       t=t1;

       s=s1;

       type=type1;

       bookname=bookname1;

    }

   friend ostream &operator<<(ostream&os,const record&r);

   friend istream &operator>>(istream&is,record&r);

};

ostream&operator<<(ostream&os,const record&r)

{

   os<<" "<<r.t<<"   "<<r.s<<"  "<<r.type<<"  "<<r.bookname<<endl;

   return os;

}

istream&operator>>(istream&is,record&r)

{

   is>>r.t>>r.s>>r.type>>r.bookname;

   return is;

}

class op

{

public:

   vector<record>rr;//图书馆记录

   vector<record>::iterator rrs;

   //用书名 学号记录查找

   vector<student>s;

   vector<student>::iterator ss;

   //multimap<string,int>m6;// 书和数量

   //multimap<string,int>::iterator mit6,m6p1,m6p2;

   multimap<int,int>m7;//学号 数量

   multimap<int,int>::iterator mit7,m7p1,m7p2;

   multimap<string,record>m2;//书名 记录

   multimap<string,record>::iterator mit2,m2p1,m2p2;//指针

   multimap<int,record>m3;//学号 记录

   multimap<int,record>::iterator mit3,m3p1,m3p2;//指针

   op()

    {

       ;

    }

 

   book bop;

   Time t1;

   //学生类

 

   multimap<int,student>m4;//学号 学生信息 查找学生

   multimap<int,student>::iterator mit4,m4p1,m4p2;

   multimap<int,int>m5;//学生在 s记录中所对应的下标

   multimap<int,int>::iterator mit5,m5p1,m5p2;

   void displayrecord();

   int addrecord(record r1);

   int borrowbook(student s1,abook a,Time t);

   int borrowbook(int no);

   int rebook(student s1,abook a,Time t);//未修改

   int rebook(int no);

   int addstudent(student s1);

   int searchstudentbyno(int no1);//学号寻找学生

   int searchrecordbybookname(string bookname);//书名寻找记录

   int searchrecordbystudentno(int studentno);//学号寻找记录

   //int match();

   void bookload();//读文件

   void booksave();

   void studentload();//读取学生信息

   //void studentload();

   void recordsave();//写文件

   void studentsave();//

   int deletestudent(int no1);

   int changestudent(int no1);

   void displaystudent(); //void opborrow();

   //friend ostream&operator<<(ostream&os,const op&op1);

void save();

friend class book;

};

void op::save()

{studentsave();

booksave();

}

//int match()

void op::booksave()

{

   ofstream outfile("c:\\taxt\\20171827book.txt",ios::out);

   if(!outfile) return;

   for(bop.bs=bop.b.begin(); bop.bs!=bop.b.end(); bop.bs++)

   {bop.mit6=bop.m6.find(bop.bs->name);

       outfile<<*bop.bs<<""<<bop.mit6->second<<endl;

       //cout<<*ss<<endl;

    }

outfile<<"0 0 00"<<endl;

for(rrs=rr.begin(); rrs!=rr.end(); rrs++)

    {

       outfile<<*rrs<<endl;

       //cout<<"*rrs"<<*rrs<<endl;

    }

   outfile.close();

}

 

void op::studentsave()

{

   ofstream outfile("c:\\taxt\\20171827student.txt",ios::out);

   if(!outfile) return;

   for(ss=s.begin(); ss!=s.end(); ss++)

    {

       outfile<<*ss<<endl;

       //cout<<*ss<<endl;

    }

outfile<<"0 00"<<endl;

for(rrs=rr.begin(); rrs!=rr.end(); rrs++)

    {

       outfile<<*rrs<<endl;

       //cout<<"*rrs"<<*rrs<<endl;

    }

   outfile.close();

}

void op::displaystudent()

{

for(ss=s.begin(); ss!=s.end(); ss++)

       {mit7=m7.find(ss->no);

           cout<<*ss<<" 当前可借阅数量:"<<mit7->second<<endl;}

}

int op::changestudent(int no1)

{mit4=m4.find(no1);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}

cout<<"重新输入学生信息 输入修改后学号 姓名 密码"<<endl;

   student s1;cin>>s1;

   deletestudent(no1);

   addstudent(s1);

   //cout<<"核对信息"<<endl;

   //searchstudentbyno(s1.no);

studentsave();

}

int op::deletestudent(int no1)

{mit4=m4.find(no1);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}

   //cout<<"删除学生信息"<<endl;

   mit4=m4.find(no1);

   m4.erase(mit4++);

   mit7=m7.find(no1);

   m7.erase(mit7++);

    for(ss=s.begin();ss!=s.end();)

   {int ming;ming=ss->no;

       if(ming==no1)

       {

           ss=s.erase(ss);

           cout<<"删除信息成功\n";

       }

       else

       ss++;

    }

studentsave();

 

}

void op::studentload()

{

student s1;record r1;

int i;

ifstreaminfile("c:\\taxt\\20171827student.txt",ios::in);

if(!infile)return;

s.clear();

m4.clear();

//string b="1";

while(infile>>s1)

{

//if(infile==0)infile>>b;

if(s1.no==0){//cout<<s1<<endl;

break;}

//{infile>>r1;addrecord(r1);}

 

s.push_back(s1);

   i=s.size();

   m4.insert(make_pair(s1.no,s1));

   m5.insert(make_pair(s1.no,i));m7.insert(make_pair(s1.no,s1.num));

//else {infile>>r1;addrecord(r1); }

 

}

while(infile>>r1)

{//cout<<"r1"<<r1<<endl;

addrecord(r1);

}

//cout<<"studentload"<<endl;

infile.close();

}

/*s.push_back(s1);

   i=s.size();

   m4.insert(make_pair(s1.no,s1));

   m5.insert(make_pair(s1.no,i));

   m7.insert(make_pair(s1.no,s1.num));

void op::opborrow()

{student s1;Time t;string bookname;

   cout<<"addstudent"<<endl;

   cin>>s1;addstudent(s1);//学号 姓名

   cout<<"borrow time bookname"<<endl;

   cin>>t;

   cin>>bookname;cout<<endl;

   borrowbook(s1,bookname,t);recordsave();

}

void op::studentload()

{

student s1;

int i;

ifstreaminfile("c:\\taxt\\20171827student.txt",ios::in);

if(!infile)return;

s.clear();

m4.clear();

while(infile>>s1)

{//cout<<s1<<endl;

   s.push_back(s1);

   i=s.size();

   m4.insert(make_pair(s1.no,s1));

   m5.insert(make_pair(s1.no,i));

   m7.insert(make_pair(s1.no,s1.num));

}//cout<<"studentload"<<endl;

infile.close();

}*/

void op::recordsave()

{

   ofstream outfile("c:\\taxt\\damo.txt",ios::out);

   if(!outfile) return;

   for(rrs=rr.begin(); rrs!=rr.end(); rrs++)

    {

       outfile<<*rrs<<endl;

       cout<<"*rrs"<<*rrs<<endl;

    }

   outfile.close();

}

void op::bookload()

{

   //cout<<"bookload"<<endl;

   abook a;record r1;

   int i;

   ifstream infile("c:\\taxt\\20171827book.txt",ios::in);//infile>>a;cout<<a<<endl;

   if(!infile)return;

   bop.b.clear();

   bop.m1.clear();

   /*m2.clear();

   m3.clear();

   m4.clear();

   m5.clear();*/

   while(infile>>a)

   {if(a.name=="0")break;

       bop.b.push_back(a);

       i=bop.b.size();//cout<<"bookload-"<<i<<endl;

       bop.m1.insert(make_pair(a.getname(),i));

       bop.m6.insert(make_pair(a.getname(),a.num));

    }

//while(infile>>r1)

//{

//addrecord(r1);

   infile.close();//cout<<"bookloadclose"<<endl;

}

int op::rebook(int no)

{mit4=m4.find(no);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}

cout<<"检验账户 输入密码"<<endl;

string mima2;Time t;string bookname;

cin>>mima2;students1=mit4->second;

if(mima2==s1.mima)

{cout<<"成功登陆 核对信息"<<s1<<endl;

cout<<"输入时间(年月日时)书的名字"<<endl;

   cin>>t>>bookname;

   cout<<endl;

}

else {cout<<"账户或密码错误 登陆失败  "<<endl;return 0;}

 

if(bop.search1(bookname)==0){cout<<"不存在此书"<<endl;return 0;}

string type="return";

   record r(t,s1,type,bookname);

   rr.push_back(r);

   m2.insert(make_pair(bookname,r));

   m3.insert(make_pair(s1.no,r));

   mit5=m5.find(s1.no);

   bop.mit6=bop.m6.find(bookname);

bop.mit6->second++;

mit7=m7.find(s1.no);

mit7->second++;

   //s[mit5->second].num++;//学生的可借阅书的数量增加

save();

 return 0;

}

int op::borrowbook(int no)

{mit4=m4.find(no);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}cout<<"检验账户输入密码"<<endl;

string mima2;Time t;string bookname;

cin>>mima2;

student s1=mit4->second;

if(mima2==s1.mima)

{cout<<"成功登陆 核对信息"<<s1<<endl;

cout<<"输入时间(年月日时)书的名字"<<endl;

   cin>>t>>bookname;

   cout<<endl;

}

else {cout<<"账户或密码错误 登陆失败  "<<endl;return 0;}

if(bop.search1(bookname)==0){cout<<"不存在此书"<<endl;return 0;}

 bop.mit6=bop.m6.find(bookname);

if(bop.mit6->second==0){cout<<"没书了啦 下次吧";return 0;}

   stringtype="borrow";//cout<<"borrowbook."<<endl;

   record r(t,s1,type,bookname);//形成一条记录 r

   rr.push_back(r);//cout<<"push"<<endl;

   m2.insert(make_pair(bookname,r));//形成图书 记录

   m3.insert(make_pair(s1.no,r));//形成学号 记录 二叉树

   //cout<<"make pair"<<endl;

   bop.mit6=bop.m6.find(bookname);

bop.mit6->second--;

mit7=m7.find(s1.no);

mit7->second--;

   mit5=m5.find(s1.no);

   int n;

   //n=mit5->second;

   //s[mit5->second].num;//cout<<"num--"<<endl;//不能连续输入的问题节点

   // bop.borrow(bookname);//cout<<"booknum--"<<endl;

   save();return 0;

 

}

int op::searchrecordbystudentno(intstudentno)//学生学号连续记录查询

{mit4=m4.find(studentno);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}

   //mit3=m3.find(studentno);

   m3p1=m3.lower_bound(studentno);

   m3p2=m3.upper_bound(studentno);//<<mit3->first<<""<<

   for(mit3=m3p1; mit3!=m3p2; mit3++)

       cout<<mit3->second<<endl;

   return 0;

}

int op::searchrecordbybookname(stringbookname)//书名记录连续查询

{

   //cout<<"searchrecordbybookname"<<endl;

   //mit2=m2.find(bookname);

bop.search1(bookname);

   m2p1=m2.lower_bound(bookname);

   m2p2=m2.upper_bound(bookname);//<<mit2->first<<""

   for(mit2=m2p1; mit2!=m2p2; mit2++)

       cout<<mit2->second<<endl;

   return 0;

}

int op::addstudent(student s1)

{cout<<"添加学生"<<endl;

   int i=s.size();

   if(searchstudentbyno(s1.no)){cout<<endl<<"已经有这个学号了 以上是这个学号的信息"<<endl;return0;}

   //cout<<"push"<<endl;

   s.push_back(s1);

   m4.insert(make_pair(s1.no,s1));//学号

   //cout<<"m4 make_pair"<<endl;// xinxi

   m5.insert(make_pair(s1.no,i));//学号 序号 i-1

   m7.insert(make_pair(s1.no,s1.num));

studentsave();

return 0;

}

int op::searchstudentbyno(int no1)

{

   mit4=m4.find(no1);mit7=m7.find(no1);

   if(mit4!=m4.end())

   {cout<<"Find the student"<<endl;

       cout<<mit4->second<<"当前可借阅数量:"<<mit7->second<<endl;

       return 1;

    }

   else {cout<<"Don't find the student"<<endl;return0;}

 

 

 

}

int op::rebook(student s1,abook a,Time t)//还书

{

   cin>>s1>>a>>t;

   string type="return";

   record r(t,s1,type,a);//形成一条记录 r

   rr.push_back(r);

   m2.insert(make_pair(a.getname(),r));//形成图书 记录

   m3.insert(make_pair(s1.no,r));//形成学号 记录 二叉树

   mit5=m5.find(s1.no);

   int n;

   //n=mit5->second;

   //s[mit5->second].num++;

   bop.re(a.getname());

   /* mit1=m1.find(a.getname());

     b[mit1->second].num--;*/

   return 0;

}

int op::borrowbook(student s1,abook a,Timet)

{

   //cin>>s1>>a>>t;

   string type="borrow";

   record r(t,s1,type,a);//形成一条记录 r

   rr.push_back(r);

   m2.insert(make_pair(a.getname(),r));//形成图书 记录

   m3.insert(make_pair(s1.no,r));//形成学号 记录 二叉树

   mit5=m5.find(s1.no);

   int n;

   //n=mit5->second;

   //s[mit5->second].num--;

   bop.borrow(a.getname());

   /* mit1=m1.find(a.getname());

     b[mit1->second].num--;*/

   return 0;

}

void op::displayrecord()

{

   for(rrs=rr.begin(); rrs!=rr.end(); rrs++)

    {

       cout<<*rrs<<endl;

    }

}

int op::addrecord(record r1)

{

   rr.push_back(r1);

   int i=rr.size();

   m2.insert(make_pair(r1.bookname,r1));//书名记录

   m3.insert(make_pair(r1.s.no,r1));//学号记录

   return 0;

}

/*ostream&operator<<(ostream&os,constop&op1)

{

   os<<endl;return os;

}*/

int main()

{

   int booksnum=0;

   string type,bookname;

   int studentno;

   abook a;

   book b;

   Time t;

   //cin>>booksnum;

   student s1;

   op op1;

   op1.bookload();

   op1.studentload();

   cout<<"已录入书籍信息"<<endl;

   op1.bop.display();

   cout<<"已录入学生信息"<<endl;

   op1.displaystudent();cout<<endl<<endl;

   cout<<"添加学生输入学生学号 姓名 密码"<<endl;

   cin>>s1;

  op1.addstudent(s1);

op1.displaystudent();

cout<<endl<<endl;

   cout<<"添加学生输入学生学号 姓名 密码"<<endl;

   cin>>s1;

   op1.addstudent(s1);

   op1.displaystudent();

cout<<endl<<endl;

  cout<<"修改学生信息输入学号"<<endl;

    cin>>studentno;

    op1.changestudent(studentno);

    op1.displaystudent();cout<<endl<<endl;

    cout<<"修改学生信息输入学号"<<endl;

    cin>>studentno;

    op1.changestudent(studentno);

    op1.displaystudent();cout<<endl<<endl;

    cout<<"查询学生信息输入学号"<<endl;

   cin>>studentno;

   op1.searchstudentbyno(studentno);

   cout<<endl<<endl;

   cout<<"查询学生信息输入学号"<<endl;

   cin>>studentno;

   op1.searchstudentbyno(studentno);

   cout<<endl<<endl;

   cout<<"删除学生信息输入学号"<<endl;

   cin>>studentno;

   op1.deletestudent(studentno);

   op1.displaystudent();cout<<endl<<endl;

   cout<<"删除学生信息输入学号"<<endl;

   cin>>studentno;

   op1.deletestudent(studentno);

   op1.displaystudent();cout<<endl<<endl;

   cout<<"添加书籍输入书名 出版社 作者 数量"<<endl;

   cin>>a;

   op1.bop.addbook(a);op1.booksave();cout<<endl<<endl;

   cout<<"添加书籍输入书名 出版社 作者 数量"<<endl;

   cin>>a;

   op1.bop.addbook(a);op1.booksave();cout<<endl<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

  cout<<"学生借书输入学号"<<endl;

   cin>>studentno;

   op1.borrowbook(studentno);cout<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"学生借书输入学号"<<endl;

   cin>>studentno;

   op1.borrowbook(studentno);cout<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"学生还书输入学号"<<endl;

   cin>>studentno;

   op1.rebook(studentno);cout<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"学生还书输入学号"<<endl;

   cin>>studentno;

   op1.rebook(studentno);cout<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"用书名搜寻记录输入书名"<<endl;

   cin>>bookname;

   cout<<endl;

   op1.searchrecordbybookname(bookname);cout<<endl<<endl;

   cout<<"用书名搜寻记录输入书名"<<endl;

   cin>>bookname;

   cout<<endl;

   op1.searchrecordbybookname(bookname);cout<<endl<<endl;

   cout<<"用学号搜索记录输入学号"<<endl;

   cin>>studentno;

   cout<<endl;

   op1.searchrecordbystudentno(studentno);cout<<endl<<endl;

    cout<<"用学号搜索记录 输入学号"<<endl;

   cin>>studentno;

   cout<<endl;

   op1.searchrecordbystudentno(studentno);cout<<endl<<endl;

   return 0;

}

 

#include<iostream>

#include<fstream>

#include<string>

#include<vector>

#include<map>

#include<algorithm>

using namespace std;

class Time//时间类 年月日时

{

protected:

   int year,month,day,hour;

public:

   Time()

    {

       year=month=day=hour=0;

    }

   Time(int year1,int month1,int day1,int hour1)

    {

       year=year1;

       month=month1;

       day=day1;

       hour=hour1;

    }

   int setTime(int year1,int month1,int day1,int hour1)

    {

       year=year1;

       month=month1;

       day=day1;

       hour=hour1;

    }

   int getyear()

    {

       return year;

    }

   int getmonth()

    {

       return month;

    }

   int getday()

    {

       return day;

    }

   int gethour()

    {

       return hour;

    }

   friend ostream &operator <<(ostream&os,const Time&t);

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

};

ostream&operator<<(ostream&os,const Time&t)//重载输入输出

{

   os<<t.year<<" "<<t.month<<""<<t.day<<" "<<t.hour<<endl;

   return os;

}

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

{

   is>>t.year>>t.month>>t.day>>t.hour;

   return is;

}

class abook//单本书的信息 书的名字 图书馆可以借阅数量

{

protected:

 

public:

   int num;

   string publish;

   string writer;

   string name;

   abook()

    {

       num=0;

    }

   abook(string name1,int num1)

    {

       num=num1;

       name=name1;

    }

   int getnum()

    {

       return num;

    }

   string getname()

    {

       return name;

    }

   int set(int num1,string name1)

    {

       num=num1;

       name=name1;

    }

   friend ostream &operator <<(ostream&os,const abook&a);

   friend istream &operator >>(istream&is,abook&a);

friend class book;

};

ostream &operator<<(ostream&os,const abook&a)//重载输入输出

{ os<<a.name<<"  "<<a.publish<<"  "<<a.writer;

   //os<<a.name<<" "<<a.publish<<" "<<a.writer<<" "<<a.num;

   //os<<a.name<<" "<<a.num<<endl;

   return os;

}

istream &operator>>(istream&is,abook&a)

{

   is>>a.name>>a.publish>>a.writer>>a.num;//书名 出版社 作者 数量

   return is;

}

class book//总数的书

{

protected:

 

public:

   vector<abook>b;//伐

   vector<abook>::iterator bs;

   //string type;

   int num;

   multimap<string,int>m1;

   multimap<string,int>::iterator mit1,p1,p2;//指针  对应下标

   multimap<string,int>m6;// 书和数量

   multimap<string,int>::iterator mit6,m6p1,m6p2;

   book()

    {

       num=0;

    }

   void addbook(abook b1);

   void addbook();

   int search1(string s);//找书

   int search2(string s);

   void display();

   void displayabook(string s);

   friend class op;

   friend class abook;

   int borrow(string bookname);

   void re(string bookname);

};

int book::search2(string s)

{mit6=m6.find(s);

if(mit6!=m6.end())

{cout<<"已经有此图书"<<endl;

return 1;}

else {cout<<"已经添加新书";return0;}

 

}

void book::re(string bookname)

{

   mit1=m1.find(bookname);

   //b[mit1->second].num++;

 

}

int book::borrow(string bookname)

{

   mit1=m1.find(bookname);

   cout<<"find:"<<mit1->second<<endl;

   //b[mit1->second].num--;

   //cout<<"num--"<<endl;

   return 0;

}

void book::displayabook(string s)//一本书的信息

{mit6=m6.find(s);

   mit1=m1.find(s);

   cout<<b[mit1->second-1]<<" 数量:"<<mit6->second<<endl;

}

void book::addbook(abook b1)//添加单本书

{if(search2(b1.name)==0)

   {int i;

   b.push_back(b1);

   i=b.size();//统计数量

   m1.insert(make_pair(b1.getname(),i));//配对

   m6.insert(make_pair(b1.getname(),b1.num));}

   else {mit6=m6.find(b1.name);mit6->second+=b1.num;

   cout<<"书名:"<<b1.name<<" 数量:"<<mit6->second;}

 

}

void book::addbook()//添加好几本书

{

   abook b1;

   int i;

   while(1)

    {

       cin>>b1;

       if(b1.getname()=="end")break;

       b.push_back(b1);

       i=b.size();//统计数量

       m1.insert(make_pair(b1.getname(),i));//配对

   m6.insert(make_pair(b1.getname(),b1.num));

    }

}

int book::search1(string s)

{mit6=m6.find(s);

if(mit6!=m6.end())

{displayabook(s);

return 1;}

else {cout<<"没找到啊";return0;}

//mit1=p1;

   //cout<<mit1->first<<":"<<mit1->second<<endl;//输出书的名字 和配对的序号

   /*p1=mit1.lower_bound(s);

   p2=mit1.upper_bound(s);

   for(mit1=p1;mit1!=p2;mit1++)

    {

       cout<<mit1->first<<":"<<mit1->second<<endl;

   }*/

 

}

void book::display()//显示所有存入的书籍

{

   for(bs=b.begin(); bs!=b.end(); bs++)

       {mit6=m6.find(bs->name);

           cout<<"书名:"<<*bs<<" 库存数量:"<<mit6->second<<endl;}

}

class student//学生类 学号 姓名 可借阅书籍数量

{

   //protected:

public:

   int no,num;

   string mima;

   string name;

   student(const student&s1)

    {

       no=s1.no;

       name=s1.name;

       num=s1.num;

       mima=s1.mima;

    }

   student()

    {

        no=0;

       num=10;

    }

   student(int no1,string name1,string mima1)

    {

       no=no1;

       name=name1;

       num=10;

       mima=mima1;

    }

   friend ostream &operator <<(ostream&os,conststudent&s);

   friend istream &operator >>(ostream&is,student&s);

};

ostream&operator<<(ostream&os,const student&s)

{

   os<<" "<<s.no<<""<<s.name<<" "<<s.mima<<endl;

   return os;

}

istream&operator>>(istream&is,student&s)

{

   is>>s.no>>s.name>>s.mima;

   return is;

}

class record//单条记录 时间 学生  方式 书

{

protected:

 

public:

   Time t;

   student s;

   abook a;

   string type,bookname;

record(){;}

   record(Time t1,student s1,string type1,abook a1)

    {

       t=t1;

       s=s1;

       a=a1;

       type=type1;

    }

   record(Time t1,student s1,string type1,string bookname1)

    {

       t=t1;

       s=s1;

       type=type1;

       bookname=bookname1;

    }

   friend ostream &operator<<(ostream&os,const record&r);

   friend istream &operator>>(istream&is,record&r);

};

ostream&operator<<(ostream&os,const record&r)

{

   os<<" "<<r.t<<"   "<<r.s<<"  "<<r.type<<"  "<<r.bookname<<endl;

   return os;

}

istream&operator>>(istream&is,record&r)

{

   is>>r.t>>r.s>>r.type>>r.bookname;

   return is;

}

class op

{

public:

   vector<record>rr;//图书馆记录

   vector<record>::iterator rrs;

   //用书名 学号记录查找

   vector<student>s;

   vector<student>::iterator ss;

   //multimap<string,int>m6;// 书和数量

   //multimap<string,int>::iterator mit6,m6p1,m6p2;

   multimap<int,int>m7;//学号 数量

   multimap<int,int>::iterator mit7,m7p1,m7p2;

   multimap<string,record>m2;//书名 记录

   multimap<string,record>::iterator mit2,m2p1,m2p2;//指针

   multimap<int,record>m3;//学号 记录

   multimap<int,record>::iterator mit3,m3p1,m3p2;//指针

   op()

    {

       ;

    }

 

   book bop;

   Time t1;

   //学生类

 

   multimap<int,student>m4;//学号 学生信息 查找学生

   multimap<int,student>::iterator mit4,m4p1,m4p2;

   multimap<int,int>m5;//学生在 s记录中所对应的下标

   multimap<int,int>::iterator mit5,m5p1,m5p2;

   void displayrecord();

   int addrecord(record r1);

   int borrowbook(student s1,abook a,Time t);

   int borrowbook(int no);

   int rebook(student s1,abook a,Time t);//未修改

   int rebook(int no);

   int addstudent(student s1);

   int searchstudentbyno(int no1);//学号寻找学生

   int searchrecordbybookname(string bookname);//书名寻找记录

   int searchrecordbystudentno(int studentno);//学号寻找记录

   //int match();

   void bookload();//读文件

   void booksave();

   void studentload();//读取学生信息

   //void studentload();

   void recordsave();//写文件

   void studentsave();//

   int deletestudent(int no1);

   int changestudent(int no1);

   void displaystudent(); //void opborrow();

   //friend ostream&operator<<(ostream&os,const op&op1);

void save();

friend class book;

};

void op::save()

{studentsave();

booksave();

}

//int match()

void op::booksave()

{

   ofstream outfile("c:\\taxt\\20171827book.txt",ios::out);

   if(!outfile) return;

   for(bop.bs=bop.b.begin(); bop.bs!=bop.b.end(); bop.bs++)

   {bop.mit6=bop.m6.find(bop.bs->name);

       outfile<<*bop.bs<<""<<bop.mit6->second<<endl;

       //cout<<*ss<<endl;

    }

outfile<<"0 0 00"<<endl;

for(rrs=rr.begin(); rrs!=rr.end(); rrs++)

    {

       outfile<<*rrs<<endl;

       //cout<<"*rrs"<<*rrs<<endl;

    }

   outfile.close();

}

 

void op::studentsave()

{

   ofstream outfile("c:\\taxt\\20171827student.txt",ios::out);

   if(!outfile) return;

   for(ss=s.begin(); ss!=s.end(); ss++)

    {

       outfile<<*ss<<endl;

       //cout<<*ss<<endl;

    }

outfile<<"0 00"<<endl;

for(rrs=rr.begin(); rrs!=rr.end(); rrs++)

    {

       outfile<<*rrs<<endl;

       //cout<<"*rrs"<<*rrs<<endl;

    }

   outfile.close();

}

void op::displaystudent()

{

for(ss=s.begin(); ss!=s.end(); ss++)

       {mit7=m7.find(ss->no);

           cout<<*ss<<" 当前可借阅数量:"<<mit7->second<<endl;}

}

int op::changestudent(int no1)

{mit4=m4.find(no1);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}

cout<<"重新输入学生信息 输入修改后学号 姓名 密码"<<endl;

   student s1;cin>>s1;

   deletestudent(no1);

   addstudent(s1);

   //cout<<"核对信息"<<endl;

   //searchstudentbyno(s1.no);

studentsave();

}

int op::deletestudent(int no1)

{mit4=m4.find(no1);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}

   //cout<<"删除学生信息"<<endl;

   mit4=m4.find(no1);

   m4.erase(mit4++);

   mit7=m7.find(no1);

   m7.erase(mit7++);

    for(ss=s.begin();ss!=s.end();)

   {int ming;ming=ss->no;

       if(ming==no1)

       {

           ss=s.erase(ss);

           cout<<"删除信息成功\n";

       }

       else

       ss++;

    }

studentsave();

 

}

void op::studentload()

{

student s1;record r1;

int i;

ifstreaminfile("c:\\taxt\\20171827student.txt",ios::in);

if(!infile)return;

s.clear();

m4.clear();

//string b="1";

while(infile>>s1)

{

//if(infile==0)infile>>b;

if(s1.no==0){//cout<<s1<<endl;

break;}

//{infile>>r1;addrecord(r1);}

 

s.push_back(s1);

   i=s.size();

   m4.insert(make_pair(s1.no,s1));

   m5.insert(make_pair(s1.no,i));m7.insert(make_pair(s1.no,s1.num));

//else {infile>>r1;addrecord(r1); }

 

}

while(infile>>r1)

{//cout<<"r1"<<r1<<endl;

addrecord(r1);

}

//cout<<"studentload"<<endl;

infile.close();

}

/*s.push_back(s1);

   i=s.size();

   m4.insert(make_pair(s1.no,s1));

   m5.insert(make_pair(s1.no,i));

   m7.insert(make_pair(s1.no,s1.num));

void op::opborrow()

{student s1;Time t;string bookname;

   cout<<"addstudent"<<endl;

   cin>>s1;addstudent(s1);//学号 姓名

   cout<<"borrow time bookname"<<endl;

   cin>>t;

   cin>>bookname;cout<<endl;

   borrowbook(s1,bookname,t);recordsave();

}

void op::studentload()

{

student s1;

int i;

ifstreaminfile("c:\\taxt\\20171827student.txt",ios::in);

if(!infile)return;

s.clear();

m4.clear();

while(infile>>s1)

{//cout<<s1<<endl;

   s.push_back(s1);

   i=s.size();

   m4.insert(make_pair(s1.no,s1));

   m5.insert(make_pair(s1.no,i));

   m7.insert(make_pair(s1.no,s1.num));

}//cout<<"studentload"<<endl;

infile.close();

}*/

void op::recordsave()

{

   ofstream outfile("c:\\taxt\\damo.txt",ios::out);

   if(!outfile) return;

   for(rrs=rr.begin(); rrs!=rr.end(); rrs++)

    {

       outfile<<*rrs<<endl;

       cout<<"*rrs"<<*rrs<<endl;

    }

   outfile.close();

}

void op::bookload()

{

   //cout<<"bookload"<<endl;

   abook a;record r1;

   int i;

   ifstream infile("c:\\taxt\\20171827book.txt",ios::in);//infile>>a;cout<<a<<endl;

   if(!infile)return;

   bop.b.clear();

   bop.m1.clear();

   /*m2.clear();

   m3.clear();

   m4.clear();

   m5.clear();*/

   while(infile>>a)

   {if(a.name=="0")break;

       bop.b.push_back(a);

       i=bop.b.size();//cout<<"bookload-"<<i<<endl;

       bop.m1.insert(make_pair(a.getname(),i));

       bop.m6.insert(make_pair(a.getname(),a.num));

    }

//while(infile>>r1)

//{

//addrecord(r1);

   infile.close();//cout<<"bookloadclose"<<endl;

}

int op::rebook(int no)

{mit4=m4.find(no);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}

cout<<"检验账户 输入密码"<<endl;

string mima2;Time t;string bookname;

cin>>mima2;students1=mit4->second;

if(mima2==s1.mima)

{cout<<"成功登陆 核对信息"<<s1<<endl;

cout<<"输入时间(年月日时)书的名字"<<endl;

   cin>>t>>bookname;

   cout<<endl;

}

else {cout<<"账户或密码错误 登陆失败  "<<endl;return 0;}

 

if(bop.search1(bookname)==0){cout<<"不存在此书"<<endl;return 0;}

string type="return";

   record r(t,s1,type,bookname);

   rr.push_back(r);

   m2.insert(make_pair(bookname,r));

   m3.insert(make_pair(s1.no,r));

   mit5=m5.find(s1.no);

   bop.mit6=bop.m6.find(bookname);

bop.mit6->second++;

mit7=m7.find(s1.no);

mit7->second++;

   //s[mit5->second].num++;//学生的可借阅书的数量增加

save();

 return 0;

}

int op::borrowbook(int no)

{mit4=m4.find(no);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}cout<<"检验账户输入密码"<<endl;

string mima2;Time t;string bookname;

cin>>mima2;

student s1=mit4->second;

if(mima2==s1.mima)

{cout<<"成功登陆 核对信息"<<s1<<endl;

cout<<"输入时间(年月日时)书的名字"<<endl;

   cin>>t>>bookname;

   cout<<endl;

}

else {cout<<"账户或密码错误 登陆失败  "<<endl;return 0;}

if(bop.search1(bookname)==0){cout<<"不存在此书"<<endl;return 0;}

 bop.mit6=bop.m6.find(bookname);

if(bop.mit6->second==0){cout<<"没书了啦 下次吧";return 0;}

   stringtype="borrow";//cout<<"borrowbook."<<endl;

   record r(t,s1,type,bookname);//形成一条记录 r

   rr.push_back(r);//cout<<"push"<<endl;

   m2.insert(make_pair(bookname,r));//形成图书 记录

   m3.insert(make_pair(s1.no,r));//形成学号 记录 二叉树

   //cout<<"make pair"<<endl;

   bop.mit6=bop.m6.find(bookname);

bop.mit6->second--;

mit7=m7.find(s1.no);

mit7->second--;

   mit5=m5.find(s1.no);

   int n;

   //n=mit5->second;

   //s[mit5->second].num;//cout<<"num--"<<endl;//不能连续输入的问题节点

   // bop.borrow(bookname);//cout<<"booknum--"<<endl;

   save();return 0;

 

}

int op::searchrecordbystudentno(intstudentno)//学生学号连续记录查询

{mit4=m4.find(studentno);if(mit4==m4.end()){cout<<"没有这个学生哦"<<endl;return0;}

   //mit3=m3.find(studentno);

   m3p1=m3.lower_bound(studentno);

   m3p2=m3.upper_bound(studentno);//<<mit3->first<<""<<

   for(mit3=m3p1; mit3!=m3p2; mit3++)

       cout<<mit3->second<<endl;

   return 0;

}

int op::searchrecordbybookname(stringbookname)//书名记录连续查询

{

   //cout<<"searchrecordbybookname"<<endl;

   //mit2=m2.find(bookname);

bop.search1(bookname);

   m2p1=m2.lower_bound(bookname);

   m2p2=m2.upper_bound(bookname);//<<mit2->first<<""

   for(mit2=m2p1; mit2!=m2p2; mit2++)

       cout<<mit2->second<<endl;

   return 0;

}

int op::addstudent(student s1)

{cout<<"添加学生"<<endl;

   int i=s.size();

   if(searchstudentbyno(s1.no)){cout<<endl<<"已经有这个学号了 以上是这个学号的信息"<<endl;return0;}

   //cout<<"push"<<endl;

   s.push_back(s1);

   m4.insert(make_pair(s1.no,s1));//学号

   //cout<<"m4 make_pair"<<endl;// xinxi

   m5.insert(make_pair(s1.no,i));//学号 序号 i-1

   m7.insert(make_pair(s1.no,s1.num));

studentsave();

return 0;

}

int op::searchstudentbyno(int no1)

{

   mit4=m4.find(no1);mit7=m7.find(no1);

   if(mit4!=m4.end())

   {cout<<"Find the student"<<endl;

       cout<<mit4->second<<"当前可借阅数量:"<<mit7->second<<endl;

       return 1;

    }

   else {cout<<"Don't find the student"<<endl;return0;}

 

 

 

}

int op::rebook(student s1,abook a,Time t)//还书

{

   cin>>s1>>a>>t;

   string type="return";

   record r(t,s1,type,a);//形成一条记录 r

   rr.push_back(r);

   m2.insert(make_pair(a.getname(),r));//形成图书 记录

   m3.insert(make_pair(s1.no,r));//形成学号 记录 二叉树

   mit5=m5.find(s1.no);

   int n;

   //n=mit5->second;

   //s[mit5->second].num++;

   bop.re(a.getname());

   /* mit1=m1.find(a.getname());

     b[mit1->second].num--;*/

   return 0;

}

int op::borrowbook(student s1,abook a,Timet)

{

   //cin>>s1>>a>>t;

   string type="borrow";

   record r(t,s1,type,a);//形成一条记录 r

   rr.push_back(r);

   m2.insert(make_pair(a.getname(),r));//形成图书 记录

   m3.insert(make_pair(s1.no,r));//形成学号 记录 二叉树

   mit5=m5.find(s1.no);

   int n;

   //n=mit5->second;

   //s[mit5->second].num--;

   bop.borrow(a.getname());

   /* mit1=m1.find(a.getname());

     b[mit1->second].num--;*/

   return 0;

}

void op::displayrecord()

{

   for(rrs=rr.begin(); rrs!=rr.end(); rrs++)

    {

       cout<<*rrs<<endl;

    }

}

int op::addrecord(record r1)

{

   rr.push_back(r1);

   int i=rr.size();

   m2.insert(make_pair(r1.bookname,r1));//书名记录

   m3.insert(make_pair(r1.s.no,r1));//学号记录

   return 0;

}

/*ostream&operator<<(ostream&os,constop&op1)

{

   os<<endl;return os;

}*/

int main()

{

   int booksnum=0;

   string type,bookname;

   int studentno;

   abook a;

   book b;

   Time t;

   //cin>>booksnum;

   student s1;

   op op1;

   op1.bookload();

   op1.studentload();

   cout<<"已录入书籍信息"<<endl;

   op1.bop.display();

   cout<<"已录入学生信息"<<endl;

   op1.displaystudent();cout<<endl<<endl;

   cout<<"添加学生输入学生学号 姓名 密码"<<endl;

   cin>>s1;

  op1.addstudent(s1);

op1.displaystudent();

cout<<endl<<endl;

   cout<<"添加学生输入学生学号 姓名 密码"<<endl;

   cin>>s1;

   op1.addstudent(s1);

   op1.displaystudent();

cout<<endl<<endl;

  cout<<"修改学生信息输入学号"<<endl;

    cin>>studentno;

    op1.changestudent(studentno);

    op1.displaystudent();cout<<endl<<endl;

    cout<<"修改学生信息输入学号"<<endl;

    cin>>studentno;

    op1.changestudent(studentno);

    op1.displaystudent();cout<<endl<<endl;

    cout<<"查询学生信息输入学号"<<endl;

   cin>>studentno;

   op1.searchstudentbyno(studentno);

   cout<<endl<<endl;

   cout<<"查询学生信息输入学号"<<endl;

   cin>>studentno;

   op1.searchstudentbyno(studentno);

   cout<<endl<<endl;

   cout<<"删除学生信息输入学号"<<endl;

   cin>>studentno;

   op1.deletestudent(studentno);

   op1.displaystudent();cout<<endl<<endl;

   cout<<"删除学生信息输入学号"<<endl;

   cin>>studentno;

   op1.deletestudent(studentno);

   op1.displaystudent();cout<<endl<<endl;

   cout<<"添加书籍输入书名 出版社 作者 数量"<<endl;

   cin>>a;

   op1.bop.addbook(a);op1.booksave();cout<<endl<<endl;

   cout<<"添加书籍输入书名 出版社 作者 数量"<<endl;

   cin>>a;

   op1.bop.addbook(a);op1.booksave();cout<<endl<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

  cout<<"学生借书输入学号"<<endl;

   cin>>studentno;

   op1.borrowbook(studentno);cout<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"学生借书输入学号"<<endl;

   cin>>studentno;

   op1.borrowbook(studentno);cout<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"学生还书输入学号"<<endl;

   cin>>studentno;

   op1.rebook(studentno);cout<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"学生还书输入学号"<<endl;

   cin>>studentno;

   op1.rebook(studentno);cout<<endl;

   cout<<"查询书籍信息输入书名"<<endl;

   cin>>bookname;

   op1.bop.search1(bookname);cout<<endl<<endl;

   cout<<"用书名搜寻记录输入书名"<<endl;

   cin>>bookname;

   cout<<endl;

   op1.searchrecordbybookname(bookname);cout<<endl<<endl;

   cout<<"用书名搜寻记录输入书名"<<endl;

   cin>>bookname;

   cout<<endl;

   op1.searchrecordbybookname(bookname);cout<<endl<<endl;

   cout<<"用学号搜索记录输入学号"<<endl;

   cin>>studentno;

   cout<<endl;

   op1.searchrecordbystudentno(studentno);cout<<endl<<endl;

    cout<<"用学号搜索记录 输入学号"<<endl;

   cin>>studentno;

   cout<<endl;

   op1.searchrecordbystudentno(studentno);cout<<endl<<endl;

   return 0;

}

 

 

 

  一、序言····················································································································· 4 二、需求分析说明书···································································································· 4 2.1系统介绍................................................................................................................................................. 4 2.2系统面向的用户群体............................................................................................................................. 4 2.3系统的功能性需求................................................................................................................................. 4 2.4系统的非功能性需求............................................................................................................................. 5 2.4.1用户界面需求.................................................................................................................................. 5 2.4.2软硬件环境需求.............................................................................................................................. 5 2.4.3软件质量需求.................................................................................................................................. 5 三、可行性分析报告···································································································· 5 3.1技术可行性............................................................................................................................................. 5 3.2人员可能性............................................................................................................................................. 5 3.3时间、设备可能性................................................................................................................................. 5 3.4系统工作量............................................................................................................................................. 5 3.5代码工作量............................................................................................................................................. 5 3.6文档要求................................................................................................................................................. 5 四、开发环境与项目规划····························································································· 5 4.1开发环境................................................................................................................................................. 5 4.2项目规划与管理..................................................................................................................................... 5 4.2.1开发人员安排.................................................................................................................................. 5 4.2.2开发进度安排.................................................................................................................................. 6 五、软件界面设计标准与规范······················································································ 6 5.1编写目的................................................................................................................................................. 6 5.2界面设计思想......................................................................................................................................... 6 5.3界面设计原则......................................................................................................................................... 6 5.4界面设计样式......................................................................................................................................... 6 5.5常见提示信息样式................................................................................................................................. 6 5.6常见错误信息样式................................................................................................................................. 7 5.7其他界面约定......................................................................................................................................... 7 六、软件编码设计标准与规范······················································································ 7 6.1对象命名约定......................................................................................................................................... 7 6.2常量和变量命名约定............................................................................................................................. 8 6.3结构化编码约定..................................................................................................................................... 8 6.4数据源的约定......................................................................................................................................... 9 6.5数据库访问约定..................................................................................................................................... 9 6.6其他约定................................................................................................................................................. 9 七、数据库分析与设计································································································ 10 7.1数据库环境说明...................................................................................................................................... 10 7.2数据库命名标准与规范.......................................................................................................................... 10 7.3数据库逻辑设计...................................................................................................................................... 10 7.4数据库物理设计...................................................................................................................................... 10 7.4.1表、视图汇总.................................................................................................................................. 10 7.4.2各表、视图设计详解...................................................................................................................... 11 八、软件体系结构设计说明书······················································································ 15 8.1系统概述................................................................................................................................................. 15 8.2设计约束................................................................................................................................................. 15 8.3设计策略................................................................................................................................................. 15 8.4系统概要设计说明书............................................................................................................................. 16 8.4.1图例说明.......................................................................................................................................... 16 8.4.2系统总体结构图.............................................................................................................................. 16 8.4.3销售子系统流程图.......................................................................................................................... 17 8.4.4进货子系统流程图.......................................................................................................................... 17 8.4.5退货子系统流程图.......................................................................................................................... 17 8.5系统详细设计说明书............................................................................................................................. 17 8.5.1系统模块汇总.................................................................................................................................. 17 8.5.2系统核心模块详解.......................................................................................................................... 18 8.5.3系统模块详解.................................................................................................................................. 28 九、用户界面设计报告································································································ 42 9.1界面设计规范......................................................................................................................................... 42 9.2系统窗体汇总......................................................................................................................................... 42 9.3主界面设计............................................................................................................................................. 43 9.4子界面设计............................................................................................................................................. 43 9.5界面资源设计......................................................................................................................................... 44 十、软件测试分析报告································································································ 44 10.1测试范围与主要内容........................................................................................................................... 44 10.2测试方法............................................................................................................................................... 44 10.3测试报告............................................................................................................................................... 44 10.4改进建议与措施................................................................................................................................... 45 十一、软件使用说明书····························································&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值