起初,没有很清晰的思路,导致写了一堆代码、函数堆在那里结果一个功能都没法实现,最后还是和同学一起交流探索才慢慢有了头绪。吸取这次的教训,在以后的编程生涯中,一开始一定不能急于求成,写一堆死代码,而是要把每个类之间的联系,函数之间的调用思路理清再动手,真的是事半功倍。这次的课程设计让我清清楚楚的认识到了自己的老毛病,不是随写随测试,导致构建的时候错很多,改起来很麻烦,在最后我已经吸取了经验,一点一点的扣,调通一个再往下走,犯的错少了,改的错误也容易了许多。在调试函数的过程中,我发现自己的数据文件在运行完一次程序时候,居然诡异的乱码了。开始我还以为是析构函数的问题,我查看了很多遍还是没有错,然后我一遍一遍的试,结果还是如此。最后发现是数据文件出错,真的是很崩溃 ,这告诉我以后当程序没错但还是无法正常读写的时候要检查一下数据文件是否有错。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<fstream>
using namespace std;
class Date
{
int year,month,day;
public:
Date()
{
year=0;
month=0;
day=0;
}
Date(int y,int m,int d):year(y),month(m),day(d){}
int setYear(int y)
{
year=y;
}
int setMonth(int m)
{
month=m;
}
int setDay(int d)
{
day=d;
}
int getYear()
{
return year;
}
int getMonth()
{
return month;
}
int getDay()
{
return day;
}
bool operator<(const Date&t2)const
{
return year!=t2.year?year<t2.year:month!=t2.month?month<t2.month:day<t2.day;
}
friend istream&operator>>(istream&is,Date&t);
friend ostream&operator<<(ostream&os,Date&t);
};
ostream&operator<<(ostream&os,Date&t)
{
os<<t.year<<"/";
os<<t.month<<"/";
os<<t.day;
return os;
}
istream&operator>>(istream&is,Date&t)
{
is>>t.year>>t.month>>t.day;
return is;
}
class Record
{
int xh;
Date ks;
int sh;
Date js;
int xj;
public:
Record()
{
}
Record(int x,Date k,int s)
{
xh=x;
ks=k;
sh=s;
if(k.getMonth()+2>12)
{
Date e(k.getYear()+1,k.getMonth()-10,k.getDay());
js=e;
}
else
{
Date e(k.getYear(),k.getMonth()+2,k.getDay());
js=e;
}
xj=0;
}
void setXj()
{
xj=1;
}
int getXj()
{
return xj;
}
int getXh()
{
return xh;
}
Date getKs()
{
return ks;
}
int getSh()
{
return sh;
}
Date getJs()
{
return js;
}
friend ostream&operator<<(ostream&output,Record&r);
friend istream&operator>>(istream&is,Record&r);
};
ostream&operator<<(ostream&os,Record&r)
{
os<<r.xh<<" ";
os<<r.ks<<" ";
os<<r.sh<<" ";
os<<r.js<<" ";
os<<r.xj<<endl;
return os;
}
istream&operator>>(istream&is,Record&r)
{
is>>r.xh;
is>>r.ks;
is>>r.sh;
is>>r.js;
is>>r.xj;
return is;
}
class Book
{
int sh;
string sm;
string cbs;
int date;
int zs;
int jc;
Record jl1;
vector<Record>v1;
vector<Record>::iterator it1;
multimap<int,int>m1;
multimap<int,int>::iterator mit1;
public:
Book(int h,string m,string c,int d,int z,int j,Record r1):sh(h),sm(m),cbs(c),date(d),zs(z),jc(j),jl1(r1)
{
}
Book()
{
}
void setZs(int n)
{
zs=n;
}
void setJc(int j)
{
jc=j;
}
int getZs()
{
return zs;
}
int getJc()
{
return jc;
}
int getSh()
{
return sh;
}
string getSm()
{
return sm;
}
string getCbs()
{
return cbs;
}
int getDate()
{
return date;
}
Record getRecord()
{
return jl1;
}
void addRecord1(Record r1);
void dispRecord1();
friend istream&operator>>(istream&input,Book&b);
friend ostream&operator<<(ostream&output,Book&b);
int search1(int no);
void display();
};
void Book::display()
{
cout<<sh<<" "<<sm<<" "<<cbs<<" "<<date<<endl;
}
istream&operator>>(istream&is,Book&b)
{
is>>b.sh;
if(b.sh==-1)
return is;
is>>b.sm;
is>>b.cbs;
is>>b.date;
is>>b.zs;
is>>b.jc;
is>>b.jl1;
return is;
}
ostream&operator<<(ostream&os,Book&b)
{
os<<b.sh<<endl;
os<<b.sm<<endl;
os<<b.cbs<<endl;
os<<b.date<<endl;
os<<b.zs<<endl;
os<<b.jc<<endl;
os<<b.jl1<<endl;
return os;
}
void Book::addRecord1(Record r1)
{
v1.push_back(r1);
int i=v1.size();
m1.insert(make_pair(r1.getXh(),i-1));
}
void Book::dispRecord1()
{
if(v1.size()!=0)
for(it1=v1.begin();it1!=v1.end();it1++)
cout<<*it1;
else cout<<"没有借阅记录!"<<endl;
}
int Book::search1(int no)
{
mit1=m1.find(no);
if(mit1!=m1.end())
return mit1->second;
else
return -1;
}
class User
{
int xh;
string mz;
int max;
int now;
int wj;
Record jl2;
vector<Record>v2;
vector<Record>::iterator it2;
multimap<int,int>m2;
multimap<int,int>::iterator mit2;
public:
User(int x,string m,int n,Record r2):xh(x),mz(m),now(n),jl2(r2)
{
max=10;
}
User(){wj=0;}
void setMz(string m)
{
mz=m;
}
void setMax(int m)
{
max=m;
}
void setNow(int n)
{
now=n;
}
void setWj()
{
wj=1;
}
int getXh()
{
return xh;
}
string getMz()
{
return mz;
}
int getMax()
{
return max;
}
int getNow()
{
return now;
}
int getWj()
{
return wj;
}
void addRecord2(Record r2);
void dispRecord2();
int search2(int xh);
void deleteRecord2(int xh);
void modify(int h);
friend istream&operator>>(istream&input,User&u);
friend ostream&operator<<(ostream&output,User&u);
void pd(Date t);
};
istream&operator>>(istream&is,User&u)
{
is>>u.xh;
if(u.xh==-1)
return is;
is>>u.mz;
is>>u.max;
is>>u.now;
is>>u.wj;
is>>u.jl2;
return is;
}
ostream&operator<<(ostream&os,User&u)
{
os<<u.xh<<endl;
os<<u.mz<<endl;
os<<u.max<<endl;
os<<u.now<<endl;
os<<u.wj<<endl;
os<<u.jl2<<endl;
return os;
}
void User::addRecord2(Record r2)
{
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<<"没有借阅记录!"<<endl;
}
int User::search2(int xh)
{
mit2=m2.find(xh);
if(mit2!=m2.end())
return mit2->second;
else return -1;
}
void User::deleteRecord2(int xh)
{
int i;
i=search2(xh);
if(i!=-1)
{
it2=v2.begin()+i;
m2.erase(m2.find(xh));
v2.erase(it2);
}
}
void User::pd(Date t)
{
int flag=0;
for(int i=0;i<v2.size();i++)
{
if(v2[i].getXj()==0)
{
if(v2[i].getJs()<t)
{
setWj();
break;
}
}
else
{
Date t1;
if(v2[i].getJs().getMonth()+1>12)
{
Date e(v2[i].getJs().getYear()+1,v2[i].getJs().getMonth()-11,v2[i].getJs().getDay());
t1=e;
}
else
{
Date e(v2[i].getJs().getYear(),v2[i].getJs().getMonth()+1,v2[i].getJs().getDay());
t1=e;
}
if(t1<t)
{
setWj();
break;
}
}
}
}
void User::modify(int xh)
{
int i=search2(xh);
if(v2[i].getXj()==0)
v2[i].setXj();
}
class Operation
{
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:
Operation(){}
~Operation()
{
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 queryByXh();
void deleteUser();
void modifyUser();
void load1();
void load2();
void save1();
void save2();
};
void Operation::load1()
{
Book b;
int i;
ifstream infile("d:\\book.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));
i++;
}
infile.close();
}
void Operation::save1()
{
ofstream outfile("d:\\book.txt",ios::out);
if(!outfile)
return ;
for(it3=v3.begin();it3!=v3.end();it3++)
{
outfile<<*it3;
}
outfile.close();
}
void Operation::load2()
{
User u;
int i;
ifstream infile("d:\\user.txt",ios::in);
if(!infile)
return;
v4.clear();
m4.clear();
i=0;
while(infile>>u)
{v4.push_back(u);
m4.insert(make_pair(u.getXh(),i));
i++;
}
infile.close();
}
void Operation::save2()
{
ofstream outfile("d:\\user.txt",ios::out);
if(!outfile)
return ;
for(it4=v4.begin();it4!=v4.end();it4++)
{
outfile<<*it4;
}
outfile.close();
}
void Operation::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));
}
}
int Operation::search3(int h)
{
mit3=m3.find(h);
if(mit3!=m3.end())
{
return mit3->second;
}
else
return -1;
}
void Operation::queryBySh()
{
int h;
cin>>h;
int i=search3(h);
cout<<v3[i];
/*Time t1(2018,6,2);
Time t2(2018,7,1);
Record r1(1,t1,5);
Record r2(2,t2,6);
v3[i].addRecord1(r1);
v3[i].addRecord1(r2);*/
cout<<"该书借阅记录:"<<endl;
v3[i].dispRecord1();
}
void Operation::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 Operation::modifyBook()
{
int h;
cin>>h;
int i=search3(h);
int n;
cin>>n;
v3[i].setZs(n);
}
void Operation::dispBook()
{
for( it3=v3.begin();it3!=v3.end();++it3)
cout<<*it3;
}
void Operation::addUser()
{
User u;
int i;
while(1)
{
cin>>u;
if(u.getXh()==-1)
{
break;
}
v4.push_back(u);
i=v4.size();
m4.insert(make_pair(u.getXh(),i-1));
}
}
int Operation::search4(int no)
{
mit4=m4.find(no);
if(mit4!=m4.end())
{
return mit4->second;
}
else return -1;
}
void Operation::queryByXh()
{
int no;
cin>>no;
int i=search4(no);
cout<<v4[i];
cout<<"该生借阅记录:"<<endl;
v4[i].dispRecord2();
}
void Operation::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 Operation::modifyUser()
{
int no;
cin>>no;
int i=search4(no);
int m;
cin>>m;
v4[i].setMax(m);
}
void Operation::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;
vector<User>v6;
vector<User>::iterator it6;
multimap<int,int>m6;
multimap<int,int>::iterator mit6;
public:
Client()
{
load3();
load4();
}
~Client()
{
save3();
save4();
}
void load3();
void save3();
void load4();
void save4();
int search5(int h);
int search6(int no);
void queryBook();
void borrow();
void back();
void renew();
};
void Client::save3()
{
ofstream outfile("d:\\图书借阅.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:\\book.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));
}
infile.close();
}
void Client::load4()
{
User u;
int i;
ifstream infile("d:\\user.txt",ios::in);
if(!infile)
return;
v6.clear();
m6.clear();
while(infile>>u)
{v6.push_back(u);
int i=v6.size();
m6.insert(make_pair(u.getXh(),i-1));
}
infile.close();
}
void Client::save4()
{
ofstream outfile("d:\\用户借阅记录.txt",ios::out);
if(!outfile)
return ;
for(it6=v6.begin();it6!=v6.end();it6++)
{
outfile<<*it6;
}
outfile.close();
}
int Client::search5(int h)
{
mit5=m5.find(h);
if(mit5!=m5.end())
{
return mit5->second;
}
else
return -1;
}
int Client::search6(int no)
{
mit6=m6.find(no);
if(mit6!=m6.end())
{
return mit6->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 sh,no;
Date t;
cin>>sh>>no;
cin>>t;
int a=search5(sh);
int b=search6(no);
v6[b].pd(t);
if(v6[b].getWj()==0&&v6[b].getNow()<v6[b].getMax())
{v5[a].setJc(v5[a].getJc()+1);
v6[b].setNow(v6[b].getNow()+1);
Record r(no,t,sh);
v5[a].addRecord1(r);
v6[b].addRecord2(r);
}
}
void Client::back()
{
int h,no;
Date t;
cin>>h>>no;
cin>>t;
int a=search5(h);
int b=search6(no);
v5[a].setJc(v5[a].getJc()-0.5);
v6[b].setNow(v6[b].getNow()-0.5);
}
void Client::renew()
{
int h,no;
cin>>h>>no;
int a=search5(h);
int b=search6(no);
}
int main()
{
Operation ma1;
//ma1.addBook();
//ma1.dispBook();
//ma1.queryBySh();
//ma1.modifyBook();
//ma1.dispUser();
cout<<"请按顺序输入学号、姓名、可借阅本数、已借阅本数、是否违纪(中间以空格隔开):"<<endl;
ma1.addUser();
//Client c1;
//c1.queryBook();
//c1.borrow();
//c1.renew();
//c1.back();
//User u;
//u.dispRecord2();
//Book b;
//b.dispRecord1();
}