#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<map> #include<fstream> using namespace std; class Time { 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 setYear(int y) { year=y; } void setMonth(int m) { month=m; } void setDay(int d) { day=d; } int getYear() { return year; } int getMonth() { return month; } int getDay() { return day; } bool operator<(const Time&t1)const { return year!=t1.year?year<t1.year:month!=t1.month?month<t1.month:day<t1.day; } friend istream&operator>>(istream&input,Time&t); friend ostream&operator<<(ostream&output,Time&t); }; ostream&operator<<(ostream&output,Time&t) { output<<t.year<<" "; output<<t.month<<" "; output<<t.day; return output; } istream&operator>>(istream&input,Time&t) { input>>t.year>>t.month>>t.day; return input; } class Record { int id; Time start; int sh; Time end; int xj; int state; public: Record() { } Record(int i,Time s,int h) { id=i; start=s; sh=h; if(s.getMonth()+2>12) { Time e(s.getYear()+1,s.getMonth()-10,s.getDay()); end=e; } else { Time e(s.getYear(),s.getMonth()+2,s.getDay()); end=e; } xj=0; state=0; } int getId() { return id; } Time getStart() { return start; } int getSh() { return sh; } Time getEnd() { return end; } void setEnd(); void setXj() { xj=1; } int getXj() { return xj; } void setState(int n) { state=n; } int getState() { return state; } friend ostream&operator<<(ostream&output,Record&r); friend istream&operator>>(istream&input,Record&r); }; void Record::setEnd() {Time e; if(end.getMonth()+1>12) e=Time(end.getYear()+1,end.getMonth()+1,end.getDay()); else e=Time(end.getYear()+1,end.getMonth(),end.getDay()); end=e; } istream&operator>>(istream&input,Record&r) { input>>r.id; input>>r.start; input>>r.sh; input>>r.end; input>>r.xj; input>>r.state; return input; } ostream&operator<<(ostream&output,Record&r) { output<<r.id<<" "; output<<r.start<<" "; output<<r.sh<<" "; output<<r.end<<" "; output<<r.xj<<" "; output<<r.state<<endl; return output; } class Book { int sh; string name; string press; int date; int num; int jc; int rnum; vector<Record>v1; vector<Record>::iterator it1; multimap<int,int>m1; multimap<int,int>::iterator mit1; public: Book() {rnum=0; } vector<Record>getRecord() { return v1; } int getSh() { return sh; } string getName() { return name; } string getPress() { return press; } int getDate() { return date; } void setNum(int n) {num=n; } int getNum() { return num; } void setJc(int j) { jc=j; } int getJc() { return jc; } void setRnum(int n) { rnum=n; } int getRnum() {return rnum; } void addRecord1(Record r1); void dispRecord1(); void addR1(Record r1); void deleteRecord1(int no); friend istream&operator>>(istream&input,Book&b); friend ostream&operator<<(ostream&output,Book&b); int search1(int no); void display(); void modify(int no); void clear1(); }; void Book::display() {cout<<sh<<endl; cout<<name<<endl; cout<<press<<endl; cout<<date<<endl; } istream&operator>>(istream&input,Book&b) { input>>b.sh; if(b.sh==-1) return input; input>>b.name; input>>b.press; input>>b.date; input>>b.num; input>>b.jc; input>>b.rnum; return input; } ostream&operator<<(ostream&output,Book&b) { output<<b.sh<<" "<<b.name<<" "<<b.press<<" "<<b.date<<" "<<b.num<<" "<<b.jc<<" "<<b.rnum<<endl; if(b.getRnum()!=0) for(int i=0;i<b.getRnum();i++) output<<b.v1[i]; return output; } void Book::addR1(Record r1) { v1.push_back(r1); int i=v1.size(); m1.insert(make_pair(r1.getId(),i-1)); } void Book::addRecord1(Record r1) {r1.setState(1); v1.push_back(r1); int i=v1.size(); m1.insert(make_pair(r1.getId(),i-1)); } void Book::dispRecord1() {if(v1.size()!=0) for(it1=v1.begin();it1!=v1.end();it1++) cout<<*it1; else cout<<"No Record!"<<endl; } void Book::clear1() { v1.clear(); } int Book::search1(int no) { mit1=m1.find(no); if(mit1!=m1.end()) return mit1->second; else return -1; } void Book::modify(int no) { int i=search1(no); if(v1[i].getXj()==0) {v1[i].setXj(); v1[i].setEnd(); } } void Book::deleteRecord1(int no) { int i; i=search1(no); if(i!=-1) { v1[i].setState(0); } } class User { int id; string name; int max; int now; int wj; int rnum; vector<Record>v2; vector<Record>::iterator it2; multimap<int,int>m2; multimap<int,int>::iterator mit2; public: User() { wj=0; rnum=0; } int getId() { return id; } void setName(string nam) { name=nam; } string getName() { return name; } void setMax(int m) { max=m; } int getMax() { return max; } void setNow(int n) { now=n; } int getNow() { return now; } void setWj(int n) { wj=n; } int getWj() { return wj; } void setRnum(int n) { rnum=n; } int getRnum() { return rnum; } vector<Record>getRecord() { return v2; } multimap<int,int>getMap() { return m2; } void clear2(); void addRecord2(Record r2); void dispRecord2(); int search2(int h); void deleteRecord2(int h); void modify(int h); friend istream&operator>>(istream&input,User&u); friend ostream&operator<<(ostream&output,User&u); void pd(Time t); void addR2(Record r); void operator=(User&u) { id=u.getId(); name=u.getName(); max=u.getMax(); now=u.getNow(); wj=u.getWj(); rnum=u.getRnum(); v2=u.getRecord(); m2=u.getMap(); } bool operator==(User u) { return this->id==u.getId()?1:0; } }; istream&operator>>(istream&input,User&u) { input>>u.id; if(u.id==-1) return input; input>>u.name; input>>u.max; input>>u.now; input>>u.wj; input>>u.rnum; return input; } ostream&operator<<(ostream&output,User&u) { output<<u.id<<" "<<u.name<<" "<<u.max<<" "<<u.now<<" "<<u.wj<<" "<<u.rnum<<endl; if(u.getRnum()!=0) for(int i=0;i<u.getRnum();i++) output<<u.v2[i]; return output; } void User::addR2(Record r2) { v2.push_back(r2); int i=v2.size(); m2.insert(make_pair(r2.getSh(),i-1)); } 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::dispRecord2() {if(v2.size()!=0) for(it2=v2.begin();it2!=v2.end();it2++) cout<<*it2; else cout<<"No Record!"<<endl; } int User::search2(int h) { mit2=m2.find(h); if(mit2!=m2.end()) return mit2->second; else return -1; } void User::deleteRecord2(int h) { int i; i=search2(h); if(i!=-1) { v2[i].setState(0); } } void User::pd(Time t) {setWj(0); for(int i=0;i<v2.size();i++) if(v2[i].getEnd()<t&&v2[i].getState()==1) {setWj(1); break; } } void User::modify(int h) {int i=search2(h); if(v2[i].getXj()==0) {v2[i].setXj(); v2[i].setEnd(); } } void User::clear2() { v2.clear(); } class Manage { 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() { } ~Manage() {save1(); save2(); } void addBook(); void dispBook(); int search3(int h); void queryBySh(); void deleteBook(); void modifyBook(); void addUser(); void dispUser(); int search4(int h); void queryById(); void deleteUser(); void modifyUser(); void load1(); void load2(); void save1(); void save2(); }; void Manage::save1() { ofstream outfile("d:\\20171754Book.txt",ios::out); if(!outfile) return ; for(it3=v3.begin();it3!=v3.end();it3++) { outfile<<*it3; } outfile.close(); } void Manage::save2() { ofstream outfile("d:\\20171754Stu.txt",ios::out); if(!outfile) return ; for(it4=v4.begin();it4!=v4.end();it4++) { outfile<<*it4; } outfile.close(); } void Manage::addBook() { Book b; int i; while(cin>>b) { if(b.getSh()==-1) break; v3.push_back(b); i=v3.size(); m3.insert(make_pair(b.getSh(),i-1)); b.clear1(); } } int Manage::search3(int h) { mit3=m3.find(h); if(mit3!=m3.end()) { return mit3->second; } else return -1; } void Manage::queryBySh() { int h; cin>>h; int i=search3(h); cout<<v3[i]; } 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::modifyBook() { int h; cin>>h; int i=search3(h); int n; cin>>n; v3[i].setNum(n); } void Manage::dispBook() { for( it3=v3.begin();it3!=v3.end();++it3) cout<<*it3; } void Manage::addUser() { User u; int i; while(cin>>u) { if(u.getId()==-1) break; v4.push_back(u); i=v4.size(); m4.insert(make_pair(u.getId(),i-1)); u.clear2(); } } int Manage::search4(int no) { mit4=m4.find(no); if(mit4!=m4.end()) { return mit4->second; } else return -1; } void Manage::queryById() { int no; cin>>no; int i=search4(no); cout<<v4[i]; } void Manage::deleteUser() { int no; cin>>no; int i=search4(no); if(i!=-1) {it4=v4.begin()+i; m4.erase(m4.find(no)); v4.erase(it4); } } void Manage::modifyUser() { int no; cin>>no; int i=search4(no); int m; cin>>m; v4[i].setMax(m); } void Manage::dispUser() { for( it4=v4.begin();it4!=v4.end();++it4) cout<<*it4; } class Client { vector<Book>v5; vector<Book>::iterator it5; multimap<int,int>m5; multimap<int,int>::iterator mit5; User u; public: Client() { load3(); load4(); } ~Client() {save3(); save4(); } void load3(); void save3(); void load4(); void save4(); int search5(int h); void queryBook(); void borrow(); void back(); void renew(); }; void Client::save3() { ofstream outfile("d:\\20171754Book.txt",ios::out); if(!outfile) { return ;} for(it5=v5.begin();it5!=v5.end();it5++) { outfile<<*it5; } outfile.close(); } void Client::load3() { Book b; int i; ifstream infile("d:\\20171754Book.txt",ios::in); if(!infile) {return; } v5.clear(); m5.clear(); while(infile>>b) { if(b.getRnum()!=0) for(int i=0;i<b.getRnum();i++) { Record r3; infile>>r3; b.addR1(r3); } v5.push_back(b); int i=v5.size(); m5.insert(make_pair(b.getSh(),i-1)); b.clear1(); } infile.close(); } void Client::load4() {int id; cin>>id; User u1; int i; ifstream infile("d:\\20171754Stu.txt",ios::in); if(!infile) return; while(infile>>u1) {if(u1.getRnum()!=0) for(int i=0;i<u1.getRnum();i++) { Record r4; infile>>r4; u1.addR2(r4); } if(u1.getId()==id) this->u=u1; u1.clear2(); } infile.close(); } void Client::save4() {vector<User>v; vector<User>::iterator it; User u2; ifstream infile("d:\\20171754Stu.txt",ios::in); if(!infile) return ; while(infile>>u2) { if(u2.getRnum()!=0) for(int i=0;i<u2.getRnum();i++) { Record r5; infile>>r5; u2.addR2(r5); } if(u2==this->u) u2=this->u; v.push_back(u2); u2.clear2(); } infile.close(); ofstream outfile("d:\\20171754Stu.txt",ios::out); if(!outfile) return; for(it=v.begin();it!=v.end();it++) outfile<<*it; outfile.close(); } int Client::search5(int h) { mit5=m5.find(h); if(mit5!=m5.end()) { return mit5->second; } else return -1; } void Client::queryBook() {int h; cin>>h; int i=search5(h); if(i!=-1) v5[i].display(); } void Client::borrow() { int h,no; Time t; cin>>h; cin>>t; int a=search5(h); u.pd(t); if(u.getWj()==0&&u.getNow()<u.getMax()) {v5[a].setJc(v5[a].getJc()+1); v5[a].setRnum(v5[a].getRnum()+1); u.setNow(u.getNow()+1); u.setRnum(u.getRnum()+1); Record r(u.getId(),t,h); v5[a].addRecord1(r); u.addRecord2(r); } } void Client::back() { int h,no; cin>>h; int a=search5(h); v5[a].setJc(v5[a].getJc()-1); u.setNow(u.getNow()-1); v5[a].deleteRecord1(u.getId()); u.deleteRecord2(h); } void Client::renew() { int h; cin>>h; int a=search5(h); v5[a].modify(u.getId()); u.modify(h); } int main() { Manage ma1; ma1.addBook(); ma1.queryBySh(); ma1.modifyBook(); ma1.deleteBook(); ma1.addUser(); ma1.queryById(); ma1.modifyUser(); ma1.deleteUser(); Client c1; c1.queryBook(); c1.borrow(); c1.renew(); c1.borrow(); c1.back(); Client c2; c2.borrow(); c2.back(); }
图书馆模拟管理系统
猜你喜欢
转载自blog.csdn.net/sdauguanweihong/article/details/80682665
今日推荐
周排行