学生考勤管理系统C++STL版本

//今天先写两个基础数据类

#include<bits/stdc++.h>
using namespace std;
class Time
{
    int year;
    int month;
    int day;
    int hour;
public:
    Time(int x,int y,int z,int v):year(x),month(y),day(z),hour(v){}
    Time(){}
    int getYear(){return year;};
    int getMonth(){return month;};
    int getDay(){return day;};
    int getHour(){return hour;};
    bool operator<(const Time&d)const
    {
        return year!=d.year?year<d.year:month!=d.month?month<d.month:day!=d.day?day<d.day:hour<d.hour;
    }
    friend ostream&operator<<(ostream &os, const Time &d);
    friend istream&operator>>(istream &in, Time &d);
};
ostream&operator<<(ostream &os,const Time &d)
{
    os<<d.year<<" "<<d.month<<" "<<d.day<<" "<<d.hour;
    return os;
}
istream&operator>>(istream &in,Time &d)
{
    in>>d.year;
    in>>d.month;
    in>>d.day;
    in>>d.hour;
    /*while(1)
    {
        in>>d.year;
        if(d.year>1900&&d.year<2019)
        break;
        else cout<<"请重输\n";
    }
    while(1)
    {
        in>>d.month;
        if(d.month>0&&d.month<13)
        break;
        else cout<<"请重输\n";
    }
    while(1)
    {
     in>>d.day;
     if(d.day>0&&d.day<32)
     break;
     else  cout<<"请重输\n";
    }
    while(1)
    {
        in>>d.hour;
        if(d.hour>0&&d.hour<24)
        break;
       else cout<<"请重输\n";
    }
    */
    return in;
}
/*
记录类
1.包含借阅人一部分信息
2.借阅图书序号及少部分信息
3.简易为下面服务的函数及运算符重载;
*/
class Record
{
    string name;
    int id;
    int id1;
    int code;
    int major;
    int classes;
    int nowBorrows;
    int breaks;
    string type;
    Time start;
    Time end;
    bool either;
    Time changeEnd;
public:
    Record(Time t1,Time t2);
    Record(){changeEnd=end;}
    Time getStart(){return start;};
    Time getEnd(){return end;};
    Time setChange(Time t){changeEnd=t;}
    int getNo(){return id;};
    int getId(){return id1;};
    string getType(){return type;};
    string getName(){return name;};
    friend ostream&operator<<(ostream&os,const Record&r);
    friend istream&operator>>(istream&in,Record&r);
};
istream&operator>>(istream&in,Record&r)
{
    in>>r.id;
    if(r.id==0)return in;
    in>>r.id1;
    in>>r.type;
    in>>r.start;
    in>>r.end;
    r.changeEnd=r.end;
    return in;
}
ostream&operator<<(ostream&os,const Record&r)
{
        os<<r.id<<" ";
        os<<r.id1<<" ";
        os<<r.type<<" ";
        os<<r.start<<" ";
        os<<r.changeEnd<<" "<<endl;
        return os;
}
Record::Record(Time t1,Time t2)
{
    start=t1;
    end=t2;
    changeEnd=end;
}
/*
书数据类
1.提供书的信息
2.提供这本书一些人借阅记录查阅
3.可借数量,判断函数为下面操作类服务
*/
class Book//书籍类
{
    string name;
    string name1;
    string press;
    int no;
    int number;//每类书的总数
    int borrow;//借出数量
    int left;
    vector<Record>r;
    int num;
public:
    Book(string name1,int no1,string press1,int number1,int num1):name(name1),no(no1),press(press1),number(number1),num(num1){}
    Book(){number=0;borrow=0;num=0;}
    string getName(){return name;};
    string getPress(){return press;};
    Record getRecord(int i){return r[i];};
    void addBorrowsJ(int n){borrow+=n;}
    void addBorrowsH(int n){borrow-=n;};
    int getNo(){return no;};
    int getNum(){return num;};
    void setNum(int i){num+=i;};
    void addRecord(Record rr){num++;r.push_back(rr);};
    int getNowNumber(){return (number-borrow);}//可借数量
    int getNumber(){return number;};
    int getBorrows(){return borrow;};
    int getLeft(){return left;};
    friend ostream&operator<<(ostream&os,const Book&b);
    friend istream&operator>>(istream&in,Book&b);
};
istream&operator>>(istream&in,Book&b)
{
    in>>b.name;
    if(b.name=="E")return in;
    in>>b.no>>b.name1>>b.press>>b.number>>b.num;
     for(int i=0;i<b.num;++i)
     {
         Record rr;
         in>>rr;
         b.r.push_back(rr);
     }
    return in;
}
ostream&operator<<(ostream&os,const Book&b)
{
    os<<b.name<<" "<<b.no<<" "<<b.name1<<" "<<b.press<<" "<<b.number<<" "<<b.num<<endl;
    for(int i=0;i<b.num;++i)
     {
         os<<b.r[i];
     }
    return os;
}
/*
用户数据类
1.提供大多数数据
2.包含一部分小函数
3.查询函数,显示函数,修改函数,为操作类服务;
4.一部分注释,修改版
*/
class User
{
    string name;
    string major;
    string classes;
    int id;
    int num;//记录条数
    int code;
    int borrows;
    int nowBorrows;
    int canReborrow;
    bool breaks;
    vector<Book>b;
    multimap<int,int>b1;
    multimap<int,int>::iterator b1p;
    multimap<string,int>b2;
    multimap<string,int>::iterator b2p;
    vector<Record>r;
    vector<Record>::iterator it;
    multimap<int,int>m1;
    multimap<int,int>::iterator m1p;
    multimap<string,int>m2;
    multimap<int,int>::iterator m2p;
    multimap<Time,int>m3;
    multimap<Time,int>::iterator m3p;
public:
    User()
    {borrows=10;breaks=0;nowBorrows=0;canReborrow=1;}
    void addOne();
    void addSome();
    int getNowBorrows(){return nowBorrows;};
    int getNowReborrow(){return canReborrow;};
    int getBreaks(){return breaks;};
    int getId(){return id;}
    string getName(){return name;}
    void addReborrow(int i){canReborrow-=i;};
    void addBreaks(int m){breaks+=m;};
    void addNowBorrowsJ(int m){nowBorrows+=m;};
    void addNowBorrowsH(int m){nowBorrows-=m;};
    void addRecord(Record rr){num++;r.push_back(rr);}
    void show();
    void queryTime(Time t);
    void changeTime(int no,Time t);
    void queryNow();
    //void reBorrow();
    friend istream&operator>>(istream&in,User &u);
    friend ostream&operator<<(ostream&os,User &u);
};
void User::changeTime(int no,Time t)//具体哪一位学生
{
    for(it=r.begin();it!=r.end();it++)
    {
        if(it->getNo()==no)
        {
            r[it-r.begin()].setChange(t);


        }
    }


}
void User::queryTime(Time t)
{
    for(it=r.begin();it!=r.end();it++)
    {
        if(it->getEnd()<t)
        cout<<*it;
    }
}
void User::show()
{
    for(it=r.begin();it!=r.end();it++)
    {
        cout<<*it;
    }
}
/*void User::load()
{
    int i;
    Book bb;
    ifstream infile("d:\\User.txt",ios::in);
    if(!infile)
    return;
    b.clear();
    b1.clear();
    b2.clear();
    i=0;
    while(infile>>bb)
    {
        b.push_back(bb);
        b1.insert(make_pair(bb.getNo(),i));
        b2.insert(make_pair(bb.getName(),i));
        i++;
    }
    infile.close();
}
void User::reBorrow()
{
    bool e;
    if(!can())
    {
        cout<<"您已达借阅上限\n";
    }
    else
{
    cout<<"您想续借书的序号以及借到的时间\n";
    int s;
    cin>>s;
    Time t;
    cin>>t;
    for(it=r.begin();it!=r.end();it++)
    {
        if(r[it-r.begin()].getId()==s)
        r[it-r.begin()].setChange(t);
    }
}
}*/
void User::queryNow()
{
    cout<<"输入当前时间\n";
    Time t;
    cin>>t;
    for(it=r.begin();it!=r.end();it++)
    {
        if(r[it-r.begin()].getEnd()<t)
        cout<<r[it-r.begin()]<<endl;
    }
}
/*void User::queryId(int ids)
{
    it=find_if(r.begin(),r.end(),cmp1(ids));
    while(it!=r.end())
    {
        cout<<"found:\t"<<r[it-r.begin()]<<endl;
        it=find_if(it+1,r.end(),cmp1(ids));
    }
}*/
istream&operator>>(istream&in,User &u)
{
    in>>u.id;
    if(u.id==0)return in;
    in>>u.code>>u.name>>u.major>>u.classes>>u.nowBorrows>>u.breaks>>u.num;
    for(int i=0;i<u.num;++i)
     {
         Record rr;
         in>>rr;
         u.r.push_back(rr);
     }
    return in;
}
ostream&operator<<(ostream&os,User&u)
{
    os<<u.id<<" "<<u.code<<" "<<u.name<<" "<<u.major<<" "<<u.classes<<" "<<u.nowBorrows<<" "<<u.breaks<<" "<<u.num<<endl;
     for(int i=0;i<u.num;++i)
     {
         os<<u.r[i];
     }
}
/*
操作类
1.查询当前信息
2.查询记录
2.借还书
3.续借
4.添加记录
*/
class Operate
{
    vector<Book>b;
    vector<Book>::iterator it1;
    multimap<int,int>b1;
    multimap<int,int>::iterator b1p;
    multimap<string,int>b2;
    multimap<string,int>::iterator b2p;
    vector<User>u;
    vector<User>::iterator it;
    multimap<int,int>u1;
    multimap<int,int>::iterator u1p;
    multimap<string,int>u2;
    multimap<string,int>::iterator u2p;
    User user;
    public:
    public:
    Operate()
    {
        load1();
        load2();
    }
    ~Operate()
    {
        load1p();
        load2p();
    }
    void load1();//把文件中的数据读到vector里
    void load2();
    void load1p();//析构函数
    void load2p();
    void addOne();
    void addSome();//增加记录;
    void reBorrow();//修改时间
    void queryNow();
    void queryHistory();
};
void Operate::reBorrow()
{
    cout<<"您的学号为\n";
    int id;
    cin>>id;
    cout<<"您想续借的书的序号为\n";
    int no;
    cin>>no;
    cout<<"您想更改的日期为\n";
    Time t;
    cin>>t;
    for(it=u.begin();it!=u.end();it++)
     {
         if(it->getId()==id)//找到这一个人
         {
             if(it->getNowReborrow()>1)
             {
                 cout<<"续借失败\n";
                 return;
             }
             it->addReborrow(1);
             it->changeTime(no,t);
             cout<<"修改成功\n";
         }
     }
}
void Operate::queryNow()
{
    cout<<"您的学号为\n";
    int id;
    cin>>id;
    cout<<"请输入当今时间\n";
    Time t;
    cin>>t;
    for(it=u.begin();it!=u.end();it++)
     {
         if(it->getId()==id)
         it->queryTime(t);
     }
}
void Operate::queryHistory()
{
    cout<<"您的学号为\n";
    int id;
    cin>>id;
    cout<<"您的记录为\n";
    for(it=u.begin();it!=u.end();it++)
     {
        if(it->getId()==id)
        {
            cout<<*it;
        }
     }
}
void Operate::addOne()
{
    cout<<"您想借阅书的编号您的学号等信息\n";
    Record rr;
    Book bb;
    bool e=1;//判断
    cin>>rr;
    int no=rr.getNo();
    int id=rr.getId();
    if(rr.getType()=="J")//借书类型
    {
        for(it=u.begin();it!=u.end();it++)
         {
          if(it->getId()==id)
         {
            if(it->getNowBorrows()>10)
            {
                e=0;
                break;
            }
            cout<<"添加成功\n";
            u[it-u.begin()].addRecord(rr);
            u[it-u.begin()].addNowBorrowsJ(1);//该学生可借数量减1
          }
     }
    if(e==1)
    {
        for(it1=b.begin();it1!=b.end();it1++)
           {
                if(it1->getNo()==no)
                    {
                        if(it1->getNowNumber()>0)
                        {
                            cout<<"添加成功\n";
                            b[it1-b.begin()].addRecord(rr);
                            b[it1-b.begin()].addBorrowsJ(1);//书的数量变化
                        }
                    }
           }
    }
  }
  if(rr.getType()=="H")//还书类型
  {
      for(it=u.begin();it!=u.end();it++)
        {
          if(it->getId()==id)
            {
              cout<<"添加成功\n";
              u[it-u.begin()].addRecord(rr);
              u[it-u.begin()].addNowBorrowsH(1);//该学生可借数量减1
            }
        }
        for(it1=b.begin();it1!=b.end();it1++)
             {
                if(it1->getNo()==no)
                    {
                            cout<<"添加成功\n";
                            b[it1-b.begin()].addRecord(rr);
                            b[it1-b.begin()].addBorrowsH(1);//书的数量变化
                    }
            }
  }
}
void Operate::addSome()
{
    while(1)
    {
        cout<<"您想借阅书的编号您的学号等信息,输入书号为0结束\n";
        Record rr;
    Book bb;
    bool e=1;//判断
    cin>>rr;
    if(rr.getNo()==0)break;
    int no=rr.getNo();
    int id=rr.getId();
    if(rr.getType()=="J")//借书类型
    {
        for(it=u.begin();it!=u.end();it++)
     {
        if(it->getId()==id)
        {
            if(it->getNowBorrows()>10)
            {
                e=0;
                break;
            }
            cout<<"添加成功\n";
            u[it-u.begin()].addRecord(rr);
            u[it-u.begin()].addNowBorrowsJ(1);//该学生可借数量减1
        }
     }
    if(e==1)
    {
        for(it1=b.begin();it1!=b.end();it1++)
           {
                if(it1->getNo()==no)
                    {
                        if(it1->getNowNumber()>0)
                        {
                            cout<<"添加成功\n";
                            b[it1-b.begin()].addRecord(rr);
                            b[it1-b.begin()].addBorrowsJ(1);//书的数量变化
                        }
                    }
           }
    }
  }
  if(rr.getType()=="H")//还书类型
  {
      for(it=u.begin();it!=u.end();it++)
        {
          if(it->getId()==id)
            {
              cout<<"添加成功\n";
              u[it-u.begin()].addRecord(rr);
              u[it-u.begin()].addNowBorrowsH(1);//该学生可借数量减1
            }
        }
        for(it1=b.begin();it1!=b.end();it1++)
             {
                if(it1->getNo()==no)
                    {
                            cout<<"添加成功\n";
                            b[it1-b.begin()].addRecord(rr);
                            b[it1-b.begin()].addBorrowsH(1);//书的数量变化
                    }
            }
  }
    }
}
void Operate::load1p()
{
    ofstream outfileB("e:\\book.txt",ios::out);
    if(!outfileB)
    return;
    for(it1=b.begin();it1!=b.end();it1++)
    {
        outfileB<<*it1;
    }
    outfileB.close();


}
void Operate::load2p()
{
    ofstream outfileS("e:\\student.txt",ios::out);
    if(!outfileS)
    return;
    for(it=u.begin();it!=u.end();it++)
    {
        outfileS<<*it;
    }
    outfileS.close();
}
void Operate::load1()
{


    int i;
    Book bb;
    ifstream infile("e:\\book.txt",ios::in);
    if(!infile)
    return;
    b.clear();
    b1.clear();
    b2.clear();
    i=0;
    while(infile>>bb)
    {
        b.push_back(bb);
        b1.insert(make_pair(bb.getNo(),i));
        b2.insert(make_pair(bb.getName(),i));
        i++;
    }
    infile.close();
}
void Operate::load2()
{
    cout<<"hello worldope!\n";
    int i;
    User uu;
    ifstream infile("e:\\student.txt",ios::in);
    if(!infile)
    return;
    u.clear();
    u1.clear();
    u2.clear();
    i=0;
    while(infile>>uu)
    {
        u.push_back(uu);
        u1.insert(make_pair(uu.getId(),i));
        u2.insert(make_pair(uu.getName(),i));
        i++;
    }
    infile.close();
}


/*void Operate::query()
{
    cout<<"学生学号为\n";
    int id;
    cin>>id;
    for(it=u.begin();it!=u.end();it++)
    {
        if(u[it-u.begin()].getId()==id)
        cout<<*it<<endl;
    }


}
void Operate::reBorrow()
{
    user.reBorrow();
}*/
/*
管理员类
1.增加学生图书信息
2.删除学生图书信息
3.修改学生图书信息
4.查询学生图书信息
*/
class Adm
{
    vector<Book>b;
    vector<Book>::iterator it1;
    multimap<int,int>b1;
    multimap<int,int>::iterator b1p;
    multimap<string,int>b2;
    multimap<string,int>::iterator b2p;
    vector<User>u;
    vector<User>::iterator it;
    multimap<int,int>u1;
    multimap<int,int>::iterator u1p;
    multimap<string,int>u2;
    multimap<string,int>::iterator u2p;
    //对书集合和学生集合操作
    public:
    Adm()
    {
        load1();
        load2();
    }
    ~Adm()
    {
        load1p();
        load2p();
    }
    void load1();//把文件中的数据读到vector里
    void load2();
    void load1p();//析构函数
    void load2p();
    void addUser();//增加一个用户
    void addBook();
    void deletesU();//删除一个用户
    void deletesB();
    void queryIdS();//查询
    void queryIdB();
    void changeU();//修改
    void changeB();
};
void Adm::load1p()
{
    ofstream outfileB("e:\\book.txt",ios::out);
    if(!outfileB)
    return;
    for(it1=b.begin();it1!=b.end();it1++)
    {
        outfileB<<*it1;
    }
    outfileB.close();
}
void Adm::load2p()
{
    ofstream outfileS("e:\\student.txt",ios::out);
    if(!outfileS)
    return;
    for(it=u.begin();it!=u.end();it++)
    {
        outfileS<<*it;
    }
    outfileS.close();
}
void Adm::queryIdS()
{
    cout<<"你想查询的学生学号为\n";
    User uu;
    int id;
    cin>>id;
    for(it=u.begin();it!=u.end();it++)
    {
        if(u[it-u.begin()].getId()==id)
        {
            cout<<*it;
            uu=*it;
        }
    }
}
void Adm::queryIdB()
{
    cout<<"你想查询的书号为\n";
    Book bb;
    int id;
    cin>>id;
    for(it1=b.begin();it1!=b.end();it1++)
    {


        if(b[it1-b.begin()].getNo()==id)
        {
            cout<<*it1;
            bb=*it1;
        }
    }
}
void Adm::changeU()
{
    cout<<"您想修改信息的学生的学号为\n";
    User uu;
    int id;
    cin>>id;
    for(it=u.begin();it!=u.end();it++)
    {
        if(u[it-u.begin()].getId()==id)
        {
            u.erase(it);
            u1.erase(id);//删除map内指定元素;
            cout<<"请重输\n";
            cin>>uu;
            u.insert(it,uu);
            cout<<"修改信息成功\n";
        }
    }
}
void Adm::changeB()
{
    cout<<"您想修改信息的书的编号为\n";
    Book bb;
    int id;
    cin>>id;
    for(it1=b.begin();it1!=b.end();it1++)
    {
        if(b[it1-b.begin()].getNo()==id)
        {
            b.erase(it1);
            b1.erase(id);
            cout<<"请重输\n";
            cin>>bb;
            b.insert(it1,bb);
            cout<<"修改信息成功\n";
        }
    }
}
void Adm::deletesU()
{
    cout<<"你想删除的学生学号为\n";
    int id;
    User uu;
    cin>>id;
    for(it=u.begin();it!=u.end();)
    {
        if(u[it-u.begin()].getId()==id)
        {
            it=u.erase(it);
            cout<<"删除成功\n";
        }
        else
        {
            it++;
        }
    }
}
void Adm::deletesB()
{
    cout<<"您想删除的书的编号是\n";
    int id;
    Book bb;
    cin>>id;
    for(it1=b.begin();it1!=b.end();)
    {
        if(b[it1-b.begin()].getNo()==id)
        {
            it1=b.erase(it1);
            cout<<"删除成功\n";
        }
        /*
        删除部分
        普通办法会越界
        网上搜集资料
        */
        else
        {
            it1++;
        }
    }
}
void Adm::addUser()
{
    cout<<"您想增加的用户信息为,学号输入为0结束\n";
    User uu;
    while(cin>>uu)
    {
        if(uu.getId()==0)break;
        u.push_back(uu);
        cout<<"增加用户信息成功\n";
    }
};
void Adm::addBook()
{
    cout<<"您想增加的图书信息为:书名输入为E结束\n";
    Book bb;
    while(cin>>bb)
    {
        if(bb.getName()=="E")break;
        b.push_back(bb);
        cout<<"增加图书信息成功\n";
    }
}
void Adm::load1()
{
    int i;
    Book bb;
    ifstream infile("e:\\book.txt",ios::in);
    if(!infile)
    return;
    b.clear();
    b1.clear();
    b2.clear();
    i=0;
    while(infile>>bb)
    {
        b.push_back(bb);
        b1.insert(make_pair(bb.getNo(),i));
        b2.insert(make_pair(bb.getName(),i));
        i++;
    }
    infile.close();
}
void Adm::load2()
{
    int i;
    User uu;
    ifstream infile("e:\\student.txt",ios::in);
    if(!infile)
    return;
    u.clear();
    u1.clear();
    u2.clear();
    i=0;
    while(infile>>uu)
    {
        u.push_back(uu);
        u1.insert(make_pair(uu.getId(),i));
        u2.insert(make_pair(uu.getName(),i));
        i++;
    }
    infile.close();
}
int main()
{
    Operate o;
    o.addOne();
    //o.queryHistory();
    //o.queryNow();
    //Adm a;
    //a.queryIdB();
    //a.queryIdS();
    //a.deletesU();
    //a.addUser();
    //a.addBook();
    //a.deletesB();
}

#include<bits/stdc++.h>
using namespace std;
class Time
{
public:
    Time(int year,int month,int day)
    {
        this->year=year;
        this->month=month;
        this->day=day;
    }
    Time()
    {
        year=0;
        month=0;
        day=0;
    }
    void setTime();
    int getYear(){return year;};
    int getMonth(){return month;};
    int getDay(){return day;};
    void show(){cout<<year<<" "<<month<<" "<<day;};
    friend ostream&operator<<(ostream&output,Time&t);
    friend istream&operator>>(istream&input,Time &t);
private:
    int year;
    int month;
    int day;
};
ostream&operator<<(ostream&output,Time&t)
{
    output<<t.year<<" "<<t.month<<" "<<t.day;
    return output;
}
istream&operator>>(istream&input,Time &t)
{
    input>>t.year>>t.month>>t.day;
    return input;
}
void Time::setTime()
{
    cin>>year>>month>>day;
}
class student
{
public:
    student(int id,string name,Time t,string lesson,int node,string type)
    {
        //后期先写time类,不用int time;
        this->id=id;
        this->name=name;
        this->t=t;
        this->lesson=lesson;
        this->node=node;
        this->type=type;
    }
    student()
    {//不写初始化的t;
        id=0;
        name="";
        lesson="";
        node=0;
        type="";
    }
private:
    Time t;
    int id;
    string name;
    string lesson;
    int node;
    string type;
};
class operate//操作类
{
private:
    vector<student>p;
    student st;
    Time t;
public:
    operate(){}
    operate(int id,string name,Time t,string lesson,int node,string type):st(id,name,t,lesson,node,type){}
    void input();//输入
    void inputs();
    void output();//输出
    void query();//查询
    void show();//输出所有信息
    void change();//修改
    void name();
    void lesson();
};
void operate::show()
{
    cout<<"学生后勤管理系统"<<endl;
    cout<<"1-录入学生的缺课记录"<<endl;
    cout<<"2-修改某个学生的缺课记录"<<endl;
    cout<<"3-查询某个学生的缺课情况"<<endl;
    cout<<"4-统计 旷课学生姓名及旷课次数"<<endl;
    cout<<"5-统计 有学生旷课的课程及旷课人次"<<endl;
    cout<<"6-输出所有记录"<<endl;
    cout<<"7-退出系统"<<endl;
}
void operate::inputs()
{
    int n;
    cin>>n;
    switch(n)
        {
        case 1://输入数据
            system("CLS");
            input();
            system("pause");
            break;
      /*  case 2:
            system("CLS");
            xiugai(myList);
            system("pause");
            break;
        case 3:
            system("CLS");
            chaxun(myList);
            system("pause");
            break;
        case 4:
            system("CLS");
            tongji1(myList);
            system("pause");
            break;
        case 5:
            system("CLS");
            tongji2(myList);
            system("pause");
            break;
        case 6:
            system("CLS");
            output(myList);
            system("pause");
        case 7:
            system("CLS");
            break;*/
        default:
            system("CLS");
            break;
        }
}
void operate::input()
{
    string name;
    string lesson_name;
    int id;
    string type;
    int jieci;


    cout<<"请输入学号: "<<endl;
    cin>>id;
    cout<<"请输入姓名: "<<endl;
    cin>>name;
    cout<<"请输入时间: "<<endl;
    cin>>t;
    cout<<"请输入课程: "<<endl;
    cin>>lesson_name;
    cout<<"请输入节次: "<<endl;
    cin>>jieci;
    cout<<"请输入缺课类型:(1.迟到,2,旷课,3.请假) "<<endl;
    cin>>type;


    student stu(id,name,t,lesson_name,jieci,type);
    p.push_back(stu);
    cout<<"需要继续输入学生信息,输入1,否输入0"<<endl;
    int x;
    cin>>x;
    if(x==1)
    {
        show();
        inputs();
    }
}
int main()
{
    operate op;//无参不加括号
    op.show();
    op.inputs();

}



#include<bits/stdc++.h>
using namespace std;
class Static
{
    static int num;
    public:
    static int getNum(){return num;};
    static void setNum(int n){num=n;};
};
int Static::num=0;
class Data
{
    int year;
    int month;
    int day;
    public:
    Data(int x,int y,int z):year(x),month(y),day(z){}
    Data(){}
    int getYear(){return year;};
    int getMonth(){return month;};
    int getDay(){return day;};
    bool operator<(const Data&d)const
    {
        return year!=d.year?year<d.year:month!=d.month?month<d.month:day<d.day;
    }
    friend ostream&operator<<(ostream &os, const Data &d);
    friend istream&operator>>(istream &in, Data &d);
};
ostream&operator<<(ostream &os,const Data &d)
{
    os<<d.year<<" "<<d.month<<" "<<d.day;
    return os;
}
istream&operator>>(istream &in,Data &d)
{
    in>>d.year;
    while(1)
    {
        if(d.year>1000&&d.year<3000)
        break;
        else
        {
            cout<<"请重试";
            in>>d.year;
        }
    }
    in>>d.month;
    while(1)
    {
        if(d.month>0&&d.month<13)
        break;
        else
        {
            cout<<"请重试";
            in>>d.month;
        }
    }
    in>>d.day;
    while(1)
    {
        if(d.day>0&&d.day<32)
        break;
        else
        {
            cout<<"请重试";
            in>>d.day;
        }
    }
    return in;
}
class Record
{
    string str;
    Data start;
    Data end;
    public:
    Record(string sr,Data s,Data e):str(sr),start(s),end(e){}
    Record(){}
    Data getDataS(){return start;};
    Data getDataE(){return end;};
    string getStr(){return str;};
    friend ostream&operator<<(ostream&os,const Record&r);
    friend istream&operator>>(istream&in,Record &r);
};
ostream&operator<<(ostream&os,const Record&r)
{
    os<<r.str<<" "<<r.start<<" "<<r.end<<endl;
    return os;
}
istream&operator>>(istream&in,Record &r)
{
    in>>r.str;
    if(r.str=="end")return in;
    in>>r.start>>r.end;
    return in;
}
struct cmp1
{
    string str;
    cmp1(string s){str=s;};
    bool operator()(Record &r)
    {
        return (r.getStr().find(str)!=string::npos);
    }
};
struct cmp2
{
    int m;
    cmp2(int num){m=num;};
    bool operator()(Record &r)
    {
        return (r.getDataS().getMonth()<m);
    }
};
class Demos
{
    private:
    vector<Record>v;
    vector<Record>::iterator it;
    multimap<string,int>m1;
    multimap<string,int>::iterator m1p;
    multimap<Data,int>m2;
    multimap<Data,int>::iterator m2p;
    public:
    /*Demos()
    {load();}
    ~Demos()
    {
        save();
    }*/
    Demos(){}
    void Plus();//增加多条
    void dd(Record r1);
    void load();//读文件
    void save();
    int search1(string s);
    int search2(Data d);
    void deleteStr(string s);
    void display();
    void search3(string s);
    void search4(int m);
}
void Demos::dd(Record r1)
{
    cout<<"ADD"<<endl;
    v.push_back(r1);
    int i=v.size();
    m1.insert(make_pair(r1.getStr(),i-1));
    m2.insert(make_pair(r1.getDataS(),i-1));
}
void Demos::Plus()
{
    cout<<"ADD"<<endl;
    Record r;
    while(1)
    {
        cin>>r;
        if(r.getStr()=="end")break;
        v.push_back(r);
        int i=v.size();
        m1.insert(make_pair(r.getStr(),i-1));
        m2.insert(make_pair(r.getDataS(),i-1));
    }
}
void Demos::display()
{
    cout<<Static::getNum()<<"Demo"<<endl;
    for(it=v.begin();it!=v.end();it++)
    {
        cout<<*it;
    }
}
int Demos::search1(string s)
{
    m1p=m1.find(s);
    if(m1p!=m1.end())
    {
        cout<<"found"<<endl;
        return m1p->second;
    }
    else return -1;
}
int Demos::search2(Data d)
{
    m2p=m2.find(d);
    if(m2p!=m2.end())
    {
        cout<<"found";
        return m2p->second;
    }
    else return -1;
}
void Demos::search3(string s)
{
    it=find_if(v.begin(),v.end(),cmp1(s));
    while(it!=v.end())
    {
        cout<<"found";
        cout<<v[it-v.begin()]<<endl;
        it=find_if(it+1,v.end(),cmp1(s));
    }
}
void Demos::search4(int m)
{
    it=find_if(v.begin(),v.end(),cmp2(m));
    while(it!=v.end())
    {
        cout<<"found";
        cout<<v[it-v.begin()]<<endl;
        it=find_if(it+1,v.end(),cmp2(m));


    }
}
void Demos::load()
{
    Record r;
    int i;
    ifstream infile("d:\\Demo.txt",ios::in);
    if(!infile)
    return;
    v.clear();
    m1.clear();
    m2.clear();
    i=0;
    while(infile>>r)
    {
        v.push_back(r);
        m1.insert(make_pair(r.getStr(),i-1));
        m2.insert(make_pair(r.getDataS(),i-1));
        i++;


    }
    infile.close();
}
void Demos::save()
{
    ofstream outfile("d:\\Demo.txt",ios::out);
    if(!outfile)
    {
        return;
    }
    for(it=v.begin();it!=v.end();it++)
    {
        outfile<<*it;
    }
    outfile.close();
}
int main()
{
    Data d;
    cin>>d;
    cout<<d;
}

#include<bits/stdc++.h>
using namespace std;
class Time//时间类,包含年月日时
{
    int year;
    int month;
    int day;
    int hour;
public:
    Time(int x,int y,int z,int v):year(x),month(y),day(z),hour(v){}
    Time(){}
    int getYear(){return year;};
    int getMonth(){return month;};
    int getDay(){return day;};
    int getHour(){return hour;};
    bool operator<(const Time&d)const
    {
        return year!=d.year?year<d.year:month!=d.month?month<d.month:day!=d.day?day<d.day:hour<d.hour;
    }
    friend ostream&operator<<(ostream &os, const Time &d);
    friend istream&operator>>(istream &in, Time &d);
};
ostream&operator<<(ostream &os,const Time &d)
{
    os<<d.year<<" "<<d.month<<" "<<d.day<<" "<<d.hour;
    return os;
}
istream&operator>>(istream &in,Time &d)
{
    in>>d.year;
    while(1)
    {
        if(d.year>1000&&d.year<3000)
        break;
        else
        {
            cout<<"请输入正确时间"<<endl;
            in>>d.year;
        }
    }
    in>>d.month;
    while(1)
    {
        if(d.month>0&&d.month<13)
        break;
        else
        {
            cout<<"请输入正确时间"<<endl;
            in>>d.month;
        }
    }
    in>>d.day;
    while(1)
    {
        if(d.day>0&&d.day<32)
        break;
        else
        {
            cout<<"请输入正确时间"<<endl;
            in>>d.day;
        }
    }
    in>>d.hour;
    while(1)
    {
        if(d.hour>-1&&d.hour<25)
        break;
        else
        {
            cout<<"请输入正确时间"<<endl;
            in>>d.hour;
        }
    }
    return in;
}
class Book//书籍类
{
    string name;
    string press;
    int no;
    int number;
    int borrow;
    int left;
public:
    Book(string name1,int no1,string press1,int number1):name(name1),no(no1),press(press1),number(number1){}
    Book(){number=0;borrow=0;}
    string getName(){return name;};
    string getPress(){return press;};
    int getNo(){return no;};
    int getNumber(){return number;};
    int getLeft(){return left;};
    friend ostream&operator<<(ostream&os,const Book&b);
    friend istream&operator>>(istream&in,Book&b);
};
istream&operator>>(istream&in,Book&b)
{
    in>>b.name>>b.no>>b.press>>b.number;
    return in;
}
ostream&operator<<(ostream&os,const Book&b)
{
    os<<b.name<<" "<<b.no<<" "<<b.press<<" "<<b.number;
    return os;
}
class Record//一条记录对应一个人一本书
{
    int id;
    string name;
    Time start;
    Time end;
    Book b;
    bool either;
    Time changeEnd;
public:
    Record(int id1,Time t1,Time t2,Book B1,bool e);
    Record(){}
    int getId(){return id;};
    string getName(){return name;};
    Time getStart(){return start;};
    Time getEnd(){return end;};
    friend ostream&operator<<(ostream&os,const Record&r);
    friend istream&operator>>(istream&in,Record&r);

};
istream&operator>>(istream&in,Record&r)
{
    in>>r.id>>r.name>>r.start>>r.end>>r.b;
    in>>r.either;
    if(r.either==1)
    {
        cin>>r.changeEnd;
        in>>r.changeEnd;
    }
    return in;
}
ostream&operator<<(ostream&os,const Record&r)
{
    os<<"学号 姓名"<<endl<<r.id<<" "<<r.name<<endl<<"图书信息"<<endl<<r.b<<endl<<"开始时间"<<endl<<r.start<<endl<<"终止时间"<<endl<<r.changeEnd;
    return os;
}
Record::Record(int id1,Time t1,Time t2,Book b1,bool e)
{
    id=id1;
    start=t1;
    end=t2;
    b=b1;
    either=e;
    end=changeEnd;
}
class User
{
    string name;
    string classes;
    int id;
    int borrows;
    int nowBorrows;
    bool breaks;
    vector<Record>u;
    vector<Record>::iterator it;
    multimap<int,int>m1;
    multimap<int,int>::iterator m1p;
    multimap<string,int>m2;
    multimap<int,int>::iterator m2p;
public:
    User(){}
   
};
int main()
{
    /*Time t;
    cin>>t;
    cout<<t;
    Book b;
    cin>>b;
    cout<<b;
    Record r;
    cin>>r;
    cout<<r;*/

}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值