c++实现图书管理系统v2.0


1.用户登入、注册界面

代码

//界面
void first_menu()
{
    cout<<"********************************"<<endl;
    cout<<"*****欢迎来到图书馆管理系统*****"<<endl;
    cout<<"********************************"<<endl;
    cout<<"***********1.注册***************"<<endl;
    cout<<"***********2.登录***************"<<endl;
    cout<<"***********0.退出系统***********"<<endl;
    cout<<"********************************"<<endl;
}

//实现逻辑
while(1){
        first_menu();
        cout<<"请选择功能(0-2):";
        x=Secure();
        switch(x){
        case 1://注册
            SignIn();
            system("pause");
            system("cls");
            break;
        case 2://登录
            Login();
            system("pause");
            system("cls");
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            return 0;
        default:
            cout<<"输入错误,请重新输入"<<endl;
            system("pause");
            system("cls");
        }
    }

//注册
void SignIn()
{
    int flag=0;
    string name,key1,key2;
    while(1){
    	flag=0;
        cout<<"请输入用户名:";
        cin>>name;
        for(int i=0;i<users.size();i++)
            if(users[i].Getname()==name){
                cout<<"用户名已存在"<<endl;
                flag=1;
                break;
            }
        if(flag==0)	break;
    }
    while(1){
        cout<<"请输入密码:";
        cin>>key1;
        cout<<"再次输入密码:";
        cin>>key2;
        if(key1==key2)	break;
        cout<<"两次密码不一致,请重新输入."<<endl;
    }
    User t_user(name,key1);
    char a;
    cout<<"是否为图书馆管理员(y or n):";
    cin>>a;
    if(a=='y'||a=='Y'){
        t_user.Setlibrarian();
        t_user.Setrep_Librarian(librarians.size());//表示在librarian中下标为多少
        Librarian t_lib(name,key1);
        librarians.push_back(t_lib);
    }
    else{
        t_user.Setrep_Reader(readers.size());//表示在readers中下标为多少
        Reader t_re(name,key1);
        readers.push_back(t_re);
    }
    users.push_back(t_user);
    cout<<"注册成功"<<endl;
}

//登录
void Login()
{
    int i;
    string name,key;
    int n_flag=0,k_flag=0;
    while(1){
        cout<<"请输入账号:";
        cin>>name;
        cout<<"请输入密码:";
        cin>>key;
        for(i=0;i<users.size();i++)
            if(users[i].Getname()==name){
                n_flag=1;//存在该账号
                if(users[i].Getkey()==key)
                    k_flag=1;//密码正确
                break;
            }
        if(n_flag==0)	cout<<"账号不存在"<<endl;
        else{
            if(k_flag==0) cout<<"密码错误"<<endl;
            else{
                system("pause");
                system("cls");
                if(users[i].Islibrarian()!=0){
                    current_i=i;
                    current_l=users[i].Getrep_Librarian();
                    librarian();
                    break;
                }
                else{
                    current_i=i;
                    current_r=users[i].Getrep_Reader();
                    reader();
                    break;
                }
            }
        }
    }
}

页面
在这里插入图片描述

2.用户

2.1用户类

代码

class User
{
private:
    string name;
    string key;
    bool Is_Librarian,Is_Reader;//什么用户类型
    int rep_Librarian,rep_Reader;//在librarian和reader中下标是多少 
public:
    User(string n,string k) {/*Is_Librarian=false;Is_Reader=true;*/name=n;key=k;}//默认为读者
    void Setname(string n){	name=n;	}
    void Setkey(string k){	key=k;	}
    void Setrep_Librarian(int n){	rep_Librarian=n;	}
    void Setrep_Reader(int n){	rep_Reader=n;	}
    
    string Getname(){	return name;	}
    string Getkey(){	return key;	}
    int Getrep_Librarian(){	return rep_Librarian;	}
    int Getrep_Reader(){	return rep_Reader;	}
    
    void Setlibrarian() { Is_Librarian=true; Is_Reader=false;	}
    bool Islibrarian(){	return Is_Librarian;	}
    bool Isreader(){	return Is_Reader;	}
    void ShowBooks();//查看所有藏书
    void CheckBook();//查找书名 
    void ChangeKey();//修改密码
};
vector<User> users;

2.2查看所有藏书

代码

void User::ShowBooks()
{
    if(books.size()==0)	cout<<"书架为空"<<endl;
    else {
        for(int i=0;i<books.size();i++){
            cout<<"书籍名称:"<<books[i].name<<"\t";
            cout<<"作者:"<<books[i].writer<<"\t";
            cout<<"价格:"<<books[i].price<<"\t";
            cout<<"编号:"<<books[i].number<<"\t";
            cout<<"在馆状态:"<<books[i].Is_exist<<endl;
        }
    }
}

2.3查找图书

代码

//界面
void Check_menu()
{
    cout<<"********************************"<<endl;
    cout<<"*********欢迎来到查询页面*******"<<endl;
    cout<<"********************************"<<endl;
    cout<<"**********1.按书名查询**********"<<endl;
    cout<<"**********2.按作者查询**********"<<endl;
    cout<<"**********3.按编号查询**********"<<endl;
    cout<<"**********4.按价格区间查询******"<<endl;
    cout<<"**********0.退出查询页面********"<<endl;
    cout<<"********************************"<<endl;
}

//逻辑实现
void User::CheckBook()
{
	int x;
    system("cls");
    while(true){
        Check_menu();
        cout<<"请选择功能(0-4):";
        x=Secure();
        string a;
        switch(x){
        case 0:
            return;
        case 1:
            cout<<"请输入要查找的书名:";
            cin>>a;
            isExist(a,1);
            system("pause");
            system("cls");
            break;
        case 2:
            cout<<"请输入要查找的作者:";
            cin>>a;
            isExist(a,2);
            system("pause");
            system("cls");
            break;
        case 3:
            cout<<"请输入要查找的编号:";
            cin>>a;
            isExist(a,3);
            system("pause");
            system("cls");
            break;
        case 4:
            cout<<"请输入要查找的价格区间(低到高):";
            float l_price,h_price;
            cin>>l_price>>h_price;
            isExistRange(l_price,h_price);
            system("pause");
            system("cls");
            break;
        default:
            cout<<"输入错误,请重新输入"<<endl;
            system("pause");
            system("cls");
        }
    }
}

2.4修改密码

代码

void User::ChangeKey()
{
    string key1,key2;
    cout<<"请输入原密码:";
    cin>>key1;
    if(Getkey()==key1){
        cout<<"请输入新密码:";
        cin>>key1;
        cout<<"请再次输入新密码:";
        cin>>key2;
        if(key2!=key1)  cout<<"两次密码不相同"<<endl;
        else{
            users[current_i].Setkey(key2);
            if(users[current_i].Islibrarian())
                librarians[users[current_i].Getrep_Librarian()].Setkey(key2);
            else
                readers[users[current_i].Getrep_Reader()].Setkey(key2);
            cout<<"修改成功"<<endl;
        }
    }
    else{
        cout<<"密码错误"<<endl;
    }
}

3.读者

3.1首页

代码

//界面
void re_menu()
{
    cout<<"********************************"<<endl;
    cout<<"*****欢迎来到图书馆管理系统*****"<<endl;
    cout<<"********************************"<<endl;
    cout<<"**********1.查找图书************"<<endl;
    cout<<"**********2.借书****************"<<endl;
    cout<<"**********3.还书****************"<<endl;
    cout<<"**********4.已借书目************"<<endl;
    cout<<"**********5.修改密码************"<<endl;
    cout<<"**********6.所有藏书************"<<endl;
    cout<<"**********0.退出系统************"<<endl;
    cout<<"********************************"<<endl;
}

//实现逻辑
void reader()
{
    int x;
    while(1){
        re_menu();
        cout<<"请选择功能(0-4):";
        x=Secure();
        switch(x){
        case 1://查找
            readers[current_r].CheckBook();
            system("pause");
            system("cls");
            break;
        case 2://借书
            if(readers[current_r].bor_books_num>=3)
                cout<<"借阅数量已达上限"<<endl;
            else
                readers[current_r].BorrowBook();
            system("pause");
            system("cls");
            break;
        case 3://还书
            
            if(readers[current_r].bor_books_num<=0)
                cout<<"您还未借书"<<endl;
            else
                readers[current_r].ReturnBook();
            system("pause");
            system("cls");
            break;
        case 4://已借书名
            readers[current_r].ShowBorrowBooks();
            system("pause");
            system("cls");
            break;
        case 5://修改密码
            readers[current_r].ChangeKey();
            system("pause");
            system("cls");
            break;
        case 6://显示全部书籍
            readers[current_r].ShowBooks();
            system("pause");
            system("cls");
            break;
        case 0:
            cout<<"欢迎下次使用"<<endl;
            return;
        default:
            cout<<"输入错误,请重新输入"<<endl;
            system("pause");
            system("cls");
        }
    }
}

效果
在这里插入图片描述

3.2读者类

代码

class Reader:public User
{
public:
    Reader(string n,string k):User(n,k){bor_books_num=0;}
    int bor_books_num;
    void BorrowBook();
    void ReturnBook();
    void ShowBorrowBooks();//查看已借书籍
private:
    string bor_books[3]={"0","0","0"};//借阅的书最多为3本    
};
vector<Reader> readers;

3.3借书操作

代码

void Reader::BorrowBook()
{
    cout<<"请输入要借阅的书籍名称:";
    string name;
    cin>>name;
    int t=(isExist(name));
    if(t!=-1)
    {
       if(books[t].Is_exist==true)
       {
           books[t].Is_exist=false;
           bor_books[bor_books_num++]=name;
           cout<<"借阅成功"<<endl;
       }
       else
           cout<<"此书已被借走"<<endl;
    }
    else	cout << "查无此书" << endl;
}

3.4还书操作

代码

void Reader::ReturnBook()
{
    cout<<"请输入要归还的书籍名称:";
    string name;
    cin>>name;
    int t=(isExist(name));
    if(t!=-1)
    {
        for(int i=0;i<MAX;i++)
        {
            if(bor_books[i]==name){
                bor_books[i]="0";
                int t=isExist(name);
                books[t].Is_exist=true;
                cout<<"归还成功"<<endl;
                return;
            }
        }
        cout<<"您未借此书"<<endl;
    }
    else	cout << "查无此书" << endl;
}

3.5查看借阅的书

代码

void Reader::ShowBorrowBooks()
{
    cout<<"已借书名:";
    for(int i=0;i<MAX;i++)
    {
        if(bor_books[i]!="0")
                cout<<bor_books[i]<<" ";
    }
    cout<<endl;
}

4.管理员界面

相较于v1.0,管理员页面新增了“显示读者信息”
代码

//界面
void lib_menu()
{
    cout<<"********************************"<<endl;
    cout<<"*****欢迎来到图书馆管理系统*****"<<endl;
    cout<<"********************************"<<endl;
    cout<<"**********1.加入图书************"<<endl;
    cout<<"**********2.删除图书************"<<endl;
    cout<<"**********3.查找图书************"<<endl;
    cout<<"**********4.清空书架************"<<endl;
    cout<<"**********5.修改图书************"<<endl;
    cout<<"**********6.显示图书信息********"<<endl;
    cout<<"**********7.显示读者信息********"<<endl;
    cout<<"**********0.退出系统************"<<endl;
    cout<<"********************************"<<endl;
}

//逻辑实现
void librarian()
{
    int x;
    while(1){
        lib_menu();
        cout<<"请选择功能(0-6):";
        x=Secure();
        switch(x){
        case 1://增
            librarians[current_l].AddBook();
            system("pause");
            system("cls");
            break;
        case 2://删
            librarians[current_l].DeleteBook();
            system("pause");
            system("cls");
            break;
        case 3://查找
            librarians[current_l].CheckBook();
            system("pause");
            system("cls");
            break;
        case 4://清空
            librarians[current_l].CleanBooks();
            system("pause");
            system("cls");
            break;
        case 5://修改
            librarians[current_l].ChangeBook();
            system("pause");
            system("cls");
            break;
        case 6://显示全部书籍
            librarians[current_l].ShowBooks();
            system("pause");
            system("cls");
            break;
        case 7://显示读者信息
            librarians[current_l].ShowUsers();
            system("pause");
            system("cls");
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            return;
        default:
            cout<<"输入错误,请重新输入"<<endl;
            system("pause");
            system("cls");
        }
    }
}

效果
在这里插入图片描述

4.1管理员类

代码

class Librarian:public User
{
public:
    Librarian(string n,string k):User(n,k){}
    void AddBook();
    void DeleteBook();
    void CleanBooks();
    void ChangeBook();
    void ShowBooks(); 
    void ShowUsers();
};
vector<Librarian> librarians;

4.2增加图书

代码

void Librarian::AddBook()
{
    if(books.size()==books.max_size())	cout<<"书架已满"<<endl;
    else{
        string name,number,writer;
        float price;
        cout<<"请输入书名、作者、价格、编号(用空格隔开):"<<endl;
        cin>>name>>writer>>price>>number;
        
        //保证书名唯一
		int t=isExist(name);
		if(t!=-1){
			cout<<"书名存在"<<endl; 
			return;
		}
		 
        Book n_book;
        n_book.name=name;
        n_book.writer=writer;
        n_book.price=price;
        n_book.number=number;
        books.push_back(n_book);

        sort(books.begin(),books.end(),cmp);
        cout<<"添加成功"<<endl;
    }
}

4.3删除图书

代码

void Librarian::DeleteBook()
{
    cout<<"请输入要删除的书籍名称:";
    string name;
    cin>>name;
    int t=(isExist(name));

    if(t!=-1)
    {
        swap(books[t],books[books.size()-1]);
        books.pop_back();
        sort(books.begin(),books.end(),cmp);
        cout<<"删除成功"<<endl;
    }
    else	cout << "查无此书" << endl;
}

4.4清空书架

代码

void Librarian::CleanBooks()
{
    books.clear();
    cout<<"清理完成"<<endl;
}

4.5修改图书信息

代码

void Librarian::ChangeBook()
{
    cout<<"输入要修改的书名:";
    string name;
    cin>>name;
    int t=isExist(name);
    if(t!=-1){
        cout<<"请输入新名字:";
        string name;
        cin>>name;
        books[t].name = name;
        
        cout<<"请输入新作者:";
        string writer;
        cin>>writer;
        books[t].writer = writer;

        cout<<"请输入新价格:";
        int price;
        cin>>price;
        books[t].price = price;

        cout<<"请输入新编号:";
        string num;
        cin>>num;
        books[t].number = num;
    }
    else	cout<<"查无此书"<<endl;
}

4.6查看读者信息

代码

void Librarian::ShowUsers()
{
    int flag=0;
    for(int i=0;i<readers.size();i++){
            flag=1;
            cout<<"账号:"<<readers[i].Getname()<<"\t";
            cout<<"密码:"<<readers[i].Getkey()<<"\t";
            readers[i].ShowBorrowBooks();
    }
    if(flag==0)	cout<<"没有用户"<<endl;
}

总代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

const int MAX=3;//最多借三本 

int current_i;
int current_l;
int current_r;

struct Book{
    string name;
    float price;
    string number;
    string writer;
    bool Is_exist=true;//是否借出
};
vector<Book> books;

int Secure()
{
    string a;
    cin>>a;
    if(a=="0") return 0;
    else if (a=="1") return 1;
    else if (a=="2") return 2;
    else if (a=="3") return 3;
    else if (a=="4") return 4;
    else if (a=="5") return 5;
    else if (a=="6") return 6;
    else if (a=="7") return 7;
    else if (a=="8") return 8;
    else
        return 9;
}

void isExist(string a,int type)
{
    int flag=0;
    for(int i=0;i<books.size();i++)
        if(type==1&&books[i].name==a||type==2&&books[i].writer==a||type==3&&books[i].number==a) {
            flag=1;
            cout<<"书名为:"<<books[i].name<<"\t";
            cout<<"作者是:"<<books[i].writer<<"\t";
            cout<<"书价格为:"<<books[i].price<<"\t";
            cout<<"书编号为:"<<books[i].number<<"\t";
            cout<<"在馆状态:"<<books[i].Is_exist<<endl;
        }
    if(flag==0)
        cout<<"无记录"<<endl;
}

void isExistRange(float l_price,float h_price)
{
    int flag=0;
    for(int i=0;i<books.size();i++)
        if(books[i].price>=l_price&&books[i].price<=h_price){
            flag=1;
            cout<<"书名为:"<<books[i].name<<"\t";
            cout<<"作者是:"<<books[i].writer<<"\t";
            cout<<"书价格为:"<<books[i].price<<"\t";
            cout<<"书编号为:"<<books[i].number<<"\t";
            cout<<"在馆状态:"<<books[i].Is_exist<<endl;
        }
    if(flag==0)
        cout<<"无记录"<<endl;
}

int isExist(string name)
{
    for(int i=0;i<books.size();i++)
        if(books[i].name==name)	return i;
    return -1;
}


void lib_menu()
{
    cout<<"********************************"<<endl;
    cout<<"*****欢迎来到图书馆管理系统*****"<<endl;
    cout<<"********************************"<<endl;
    cout<<"**********1.加入图书************"<<endl;
    cout<<"**********2.删除图书************"<<endl;
    cout<<"**********3.查找图书************"<<endl;
    cout<<"**********4.清空书架************"<<endl;
    cout<<"**********5.修改图书************"<<endl;
    cout<<"**********6.显示图书信息********"<<endl;
    cout<<"**********7.显示读者信息********"<<endl;
    cout<<"**********0.退出系统************"<<endl;
    cout<<"********************************"<<endl;
}

void re_menu()
{
    cout<<"********************************"<<endl;
    cout<<"*****欢迎来到图书馆管理系统*****"<<endl;
    cout<<"********************************"<<endl;
    cout<<"**********1.查找图书************"<<endl;
    cout<<"**********2.借书****************"<<endl;
    cout<<"**********3.还书****************"<<endl;
    cout<<"**********4.已借书目************"<<endl;
    cout<<"**********5.修改密码************"<<endl;
    cout<<"**********6.所有藏书************"<<endl;
    cout<<"**********0.退出系统************"<<endl;
    cout<<"********************************"<<endl;
}

void first_menu()
{
    cout<<"********************************"<<endl;
    cout<<"*****欢迎来到图书馆管理系统*****"<<endl;
    cout<<"********************************"<<endl;
    cout<<"***********1.注册***************"<<endl;
    cout<<"***********2.登录***************"<<endl;
    cout<<"***********0.退出系统***********"<<endl;
    cout<<"********************************"<<endl;
}

void Check_menu()
{
    cout<<"********************************"<<endl;
    cout<<"*********欢迎来到查询页面*******"<<endl;
    cout<<"********************************"<<endl;
    cout<<"**********1.按书名查询**********"<<endl;
    cout<<"**********2.按作者查询**********"<<endl;
    cout<<"**********3.按编号查询**********"<<endl;
    cout<<"**********4.按价格区间查询******"<<endl;
    cout<<"**********0.退出查询页面********"<<endl;
    cout<<"********************************"<<endl;

}

class User
{
private:
    string name;
    string key;
    bool Is_Librarian,Is_Reader;//什么用户类型
    int rep_Librarian,rep_Reader;//在librarian和reader中下标是多少 
public:
    User(string n,string k) {/*Is_Librarian=false;Is_Reader=true;*/name=n;key=k;}//默认为读者
    void Setname(string n){	name=n;	}
    void Setkey(string k){	key=k;	}
    void Setrep_Librarian(int n){	rep_Librarian=n;	}
    void Setrep_Reader(int n){	rep_Reader=n;	}
    
    string Getname(){	return name;	}
    string Getkey(){	return key;	}
    int Getrep_Librarian(){	return rep_Librarian;	}
    int Getrep_Reader(){	return rep_Reader;	}
    
    void Setlibrarian() { Is_Librarian=true; Is_Reader=false;	}
    bool Islibrarian(){	return Is_Librarian;	}
    bool Isreader(){	return Is_Reader;	}
    void ShowBooks();//查看所有藏书
    void CheckBook();//查找书名 
    void ChangeKey();//修改密码
};
vector<User> users;

void User::ShowBooks()
{
    if(books.size()==0)	cout<<"书架为空"<<endl;
    else {
        for(int i=0;i<books.size();i++){
            cout<<"书籍名称:"<<books[i].name<<"\t";
            cout<<"作者:"<<books[i].writer<<"\t";
            cout<<"价格:"<<books[i].price<<"\t";
            cout<<"编号:"<<books[i].number<<"\t";
            cout<<"在馆状态:"<<books[i].Is_exist<<endl;
        }
    }
}


void User::CheckBook()
{
	int x;
    system("cls");
    while(true){
        Check_menu();
        cout<<"请选择功能(0-4):";
        x=Secure();
        string a;
        switch(x){
        case 0:
            return;
        case 1:
            cout<<"请输入要查找的书名:";
            cin>>a;
            isExist(a,1);
            system("pause");
            system("cls");
            break;
        case 2:
            cout<<"请输入要查找的作者:";
            cin>>a;
            isExist(a,2);
            system("pause");
            system("cls");
            break;
        case 3:
            cout<<"请输入要查找的编号:";
            cin>>a;
            isExist(a,3);
            system("pause");
            system("cls");
            break;
        case 4:
            cout<<"请输入要查找的价格区间(低到高):";
            float l_price,h_price;
            cin>>l_price>>h_price;
            isExistRange(l_price,h_price);
            system("pause");
            system("cls");
            break;
        default:
            cout<<"输入错误,请重新输入"<<endl;
            system("pause");
            system("cls");
        }
    }
}

class Reader:public User
{
public:
    Reader(string n,string k):User(n,k){bor_books_num=0;}
    int bor_books_num;
    void BorrowBook();
    void ReturnBook();
    void ShowBorrowBooks();//查看已借书籍
private:
    string bor_books[3]={"0","0","0"};//借阅的书最多为3本    
};
vector<Reader> readers;

void Reader::BorrowBook()
{
    cout<<"请输入要借阅的书籍名称:";
    string name;
    cin>>name;
    int t=(isExist(name));
    if(t!=-1)
    {
       if(books[t].Is_exist==true)
       {
           books[t].Is_exist=false;
           bor_books[bor_books_num++]=name;
           cout<<"借阅成功"<<endl;
       }
       else
           cout<<"此书已被借走"<<endl;
    }
    else	cout << "查无此书" << endl;
}

void Reader::ReturnBook()
{
    cout<<"请输入要归还的书籍名称:";
    string name;
    cin>>name;
    int t=(isExist(name));
    if(t!=-1)
    {
        for(int i=0;i<MAX;i++)
        {
            if(bor_books[i]==name){
                bor_books[i]="0";
                int t=isExist(name);
                books[t].Is_exist=true;
                cout<<"归还成功"<<endl;
                return;
            }
        }
        cout<<"您未借此书"<<endl;
    }
    else	cout << "查无此书" << endl;
}

void Reader::ShowBorrowBooks()
{
    cout<<"已借书名:";
    for(int i=0;i<MAX;i++)
    {
        if(bor_books[i]!="0")
                cout<<bor_books[i]<<" ";
    }
    cout<<endl;
}



class Librarian:public User
{
public:
    Librarian(string n,string k):User(n,k){}
    void AddBook();
    void DeleteBook();
    void CleanBooks();
    void ChangeBook(); 
    void ShowUsers();
};
vector<Librarian> librarians;

void User::ChangeKey()
{
    string key1,key2;
    cout<<"请输入原密码:";
    cin>>key1;
    if(Getkey()==key1){
        cout<<"请输入新密码:";
        cin>>key1;
        cout<<"请再次输入新密码:";
        cin>>key2;
        if(key2!=key1)  cout<<"两次密码不相同"<<endl;
        else{
            users[current_i].Setkey(key2);
            if(users[current_i].Islibrarian())
                librarians[users[current_i].Getrep_Librarian()].Setkey(key2);
            else
                readers[users[current_i].Getrep_Reader()].Setkey(key2);
            cout<<"修改成功"<<endl;
        }
    }
    else{
        cout<<"密码错误"<<endl;
    }
}

bool cmp(Book book1,Book book2)
{
    return book1.name<book2.name;
}

void Librarian::AddBook()
{
    if(books.size()==books.max_size())	cout<<"书架已满"<<endl;
    else{
        string name,number,writer;
        float price;
        cout<<"请输入书名、作者、价格、编号(用空格隔开):"<<endl;
        cin>>name>>writer>>price>>number;
        
        //保证书名唯一
		int t=isExist(name);
		if(t!=-1){
			cout<<"书名存在"<<endl; 
			return;
		}
		 
        Book n_book;
        n_book.name=name;
        n_book.writer=writer;
        n_book.price=price;
        n_book.number=number;
        books.push_back(n_book);

        sort(books.begin(),books.end(),cmp);
        cout<<"添加成功"<<endl;
    }
}

void Librarian::DeleteBook()
{
    cout<<"请输入要删除的书籍名称:";
    string name;
    cin>>name;
    int t=(isExist(name));

    if(t!=-1)
    {
        swap(books[t],books[books.size()-1]);
        books.pop_back();
        sort(books.begin(),books.end(),cmp);
        cout<<"删除成功"<<endl;
    }
    else	cout << "查无此书" << endl;
}

void Librarian::CleanBooks()
{
    books.clear();
    cout<<"清理完成"<<endl;
}

void Librarian::ChangeBook()
{
    cout<<"输入要修改的书名:";
    string name;
    cin>>name;
    int t=isExist(name);
    if(t!=-1){
        cout<<"请输入新名字:";
        string name;
        cin>>name;
        books[t].name = name;
        
        cout<<"请输入新作者:";
        string writer;
        cin>>writer;
        books[t].writer = writer;

        cout<<"请输入新价格:";
        int price;
        cin>>price;
        books[t].price = price;

        cout<<"请输入新编号:";
        string num;
        cin>>num;
        books[t].number = num;
    }
    else	cout<<"查无此书"<<endl;
}

void Librarian::ShowUsers()
{
    int flag=0;
    for(int i=0;i<readers.size();i++){
            flag=1;
            cout<<"账号:"<<readers[i].Getname()<<"\t";
            cout<<"密码:"<<readers[i].Getkey()<<"\t";
            readers[i].ShowBorrowBooks();
    }
    if(flag==0)	cout<<"没有用户"<<endl;
}

void reader()
{
    int x;
    while(1){
        re_menu();
        cout<<"请选择功能(0-4):";
        x=Secure();
        switch(x){
        case 1://查找
            readers[current_r].CheckBook();
            system("pause");
            system("cls");
            break;
        case 2://借书
            if(readers[current_r].bor_books_num>=3)
                cout<<"借阅数量已达上限"<<endl;
            else
                readers[current_r].BorrowBook();
            system("pause");
            system("cls");
            break;
        case 3://还书
            
            if(readers[current_r].bor_books_num<=0)
                cout<<"您还未借书"<<endl;
            else
                readers[current_r].ReturnBook();
            system("pause");
            system("cls");
            break;
        case 4://已借书名
            readers[current_r].ShowBorrowBooks();
            system("pause");
            system("cls");
            break;
        case 5://修改密码
            readers[current_r].ChangeKey();
            system("pause");
            system("cls");
            break;
        case 6://显示全部书籍
            readers[current_r].ShowBooks();
            system("pause");
            system("cls");
            break;
        case 0:
            cout<<"欢迎下次使用"<<endl;
            return;
        default:
            cout<<"输入错误,请重新输入"<<endl;
            system("pause");
            system("cls");
        }
    }
}

void librarian()
{
    int x;
    while(1){
        lib_menu();
        cout<<"请选择功能(0-6):";
        x=Secure();
        switch(x){
        case 1://增
            librarians[current_l].AddBook();
            system("pause");
            system("cls");
            break;
        case 2://删
            librarians[current_l].DeleteBook();
            system("pause");
            system("cls");
            break;
        case 3://查找
            librarians[current_l].CheckBook();
            system("pause");
            system("cls");
            break;
        case 4://清空
            librarians[current_l].CleanBooks();
            system("pause");
            system("cls");
            break;
        case 5://修改
            librarians[current_l].ChangeBook();
            system("pause");
            system("cls");
            break;
        case 6://显示全部书籍
            librarians[current_l].ShowBooks();
            system("pause");
            system("cls");
            break;
        case 7://显示读者信息
            librarians[current_l].ShowUsers();
            system("pause");
            system("cls");
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            return;
        default:
            cout<<"输入错误,请重新输入"<<endl;
            system("pause");
            system("cls");
        }
    }
}

void SignIn()
{
    int flag=0;
    string name,key1,key2;
    while(1){
    	flag=0;
        cout<<"请输入用户名:";
        cin>>name;
        for(int i=0;i<users.size();i++)
            if(users[i].Getname()==name){
                cout<<"用户名已存在"<<endl;
                flag=1;
                break;
            }
        if(flag==0)	break;
    }
    while(1){
        cout<<"请输入密码:";
        cin>>key1;
        cout<<"再次输入密码:";
        cin>>key2;
        if(key1==key2)	break;
        cout<<"两次密码不一致,请重新输入."<<endl;
    }
    User t_user(name,key1);
    char a;
    cout<<"是否为图书馆管理员(y or n):";
    cin>>a;
    if(a=='y'||a=='Y'){
        t_user.Setlibrarian();
        t_user.Setrep_Librarian(librarians.size());//表示在librarian中下标为多少
        Librarian t_lib(name,key1);
        librarians.push_back(t_lib);
    }
    else{
        t_user.Setrep_Reader(readers.size());//表示在readers中下标为多少
        Reader t_re(name,key1);
        readers.push_back(t_re);
    }
    users.push_back(t_user);
    cout<<"注册成功"<<endl;
}

void Login()
{
    int i;
    string name,key;
    int n_flag=0,k_flag=0;
    while(1){
        cout<<"请输入账号:";
        cin>>name;
        cout<<"请输入密码:";
        cin>>key;
        for(i=0;i<users.size();i++)
            if(users[i].Getname()==name){
                n_flag=1;//存在该账号
                if(users[i].Getkey()==key)
                    k_flag=1;//密码正确
                break;
            }
        if(n_flag==0)	cout<<"账号不存在"<<endl;
        else{
            if(k_flag==0) cout<<"密码错误"<<endl;
            else{
                system("pause");
                system("cls");
                if(users[i].Islibrarian()!=0){
                    current_i=i;
                    current_l=users[i].Getrep_Librarian();
                    librarian();
                    break;
                }
                else{
                    current_i=i;
                    current_r=users[i].Getrep_Reader();
                    reader();
                    break;
                }
            }
        }
    }
}

int main()
{
    int x;
    while(1){
        first_menu();
        cout<<"请选择功能(0-2):";
        x=Secure();
        switch(x){
        case 1://注册
            SignIn();
            system("pause");
            system("cls");
            break;
        case 2://登录
            Login();
            system("pause");
            system("cls");
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            return 0;
        default:
            cout<<"输入错误,请重新输入"<<endl;
            system("pause");
            system("cls");
        }
    }
}

总结

代码中存在许多bug,(例:可以无限还书),将在近期进行优化。如果有其他bug,可以评论或者私信。谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值