简易图书管理系统

  1. 类的定义

类中包含描述属性的数据成员和定义行为的成员函数的函数原型,不仅可以直观的看到程序中该类定义的数据成员以及将要实现的功能,因此,该程序均通过类外实现各个功能。

对类的定义如下:

(1)图书管理模块:

①图书类class book

②图书数据库类class bdatabase

(2)图书管理员模块:

①图书管理员类class librarian

②图书管理员数据库类class ldatabase

(3)读者管理模块:

①读者类class reader

②读者数据库类class rdatabase

2、相关构造函数、成员函数

       通过相关成员函数和构造函数可以分别实现不同的详细功能   

(1)图书管理模块:

①图书类

book (){}                             

//构造函数

        void setno (int n);

/图书编号取值

        int getno ();

 //返回图书编号值

        void setprice (int p);

//图书价格取值

        int getprice ();

//返回图书价格值

        void setname (char na[]);

//字符串复制

        char* getname ();

//返回图书名称

        void setauthor (char a[]);

//字符串复制

        char* getauthor ();

//返回图书作者

        void borbook ();

//借书标志

        void delbook ();

//删除图书标志

        void addbook (int no, char na[], char author[], int price) ;   

//实现增加图书的功能(便于图书管理员)

 

       ②图书数据库类

      

       bdatabase (){}

        //构造函数

              ~bdatabase ();

//析构函数

              void openfile ();

        //打开文件函数

              void addbooks ();

        //向数据库添加图书

              int findbooks (int suffix);

        //查找数据库的图书,用于借书时查找

              int findbooks ();

        //查找图书,用于图书维护查找

              void editbooks ();

        //编辑(修改)数据库中的图书

              void delbooks ();

        //删除数据库中的图书

           void listbooks ();

        //显示全部图书

 

(2)图书管理员模块

       ①图书管理员类

 

 void addlibrarian (int id, char na[], int s, char pass[]);

 

//增加管理员

   ②图书管理员数据库类

      

ldatabase (){}

       //构造函数

        ~ldatabase ();

//析构函数

        void openfile1 ();

       //打开文件的函数

        void addlibrarians ();

       //增加图书管理员

        int findlibrarians ();

       //查找图书管理员

        void editlibrarians ();

       //编辑(修改)图书管理员

        void dellibrarians ();

       //删除图书管理员

        void listlibrarians ();

       //显示图书管理员的信息

 

(3)读者管理模块

      ①读者类

     

 void addreader (int id, char na[], int s, int b, int a, char pass[]);

//增加读者

        void setbrbook (book bt);

 //设置借书标记

        book getbrbook ();

  //返回借书信息

 

   ②读者数据库类

 

rdatabase (){}

 //构造函数

 ~rdatabase ();

//析构函数

void openfile2 ();

//打开文件

 void addreaders ( int t );

 //添加读者

int findreaders ( int suffix );

//查找读者

int findreaders ();

//查找读者

 void editreaders ();

 //编辑读者信息

 void delreaders ();

 //删除读者

void listreaders ( int t );

//显示所有读者

 

 

(4)其他自定义函数

void borrowtoreturn();

//借书还书函数.参数br用来判断是“借书”还是“还书”.1为“借书”,2为“还书”

void booksmanage();

//图书管理员的实现

void studentmanage();

//对学生的管理

void teachermanage();

//对老师的管理

void librarianmanage();

//对图书管理员的管理

void adminmanage();

//验证系统管理员身份

 

(5)main函数

#include <cstring>
#include <fstream>
#include <iostream>
#include <windows.h>
using namespace std;
const int BMAX = 50;   //书最多个数


void bookjiemian()                                                     //图书维护子菜单
{
    cout << "****************************" << endl;
    cout << "*         图书维护         *" << endl;
    cout << "*        (1)增 加          *" << endl;
    cout << "*        (2)更 改          *" << endl;
    cout << "*        (3)删 除          *" << endl;
    cout << "*        (4)查 找          *" << endl;
    cout << "*        (5)显 示          *" << endl;
    cout << "*        (6)返回上一层     *" << endl;
    cout << "****************************" << endl;
}
void wstudentjiemian()                                          //学生维护子菜单
{
 cout << "****************************" << endl;
 cout << "*       学生信息维护       *" << endl;
 cout << "*        (1)增 加          *" << endl;
 cout << "*        (2)更 改          *" << endl;
 cout << "*        (3)删 除          *" << endl;
 cout << "*        (4)查 找          *" << endl;
 cout << "*        (5)显 示          *" << endl;
 cout << "*        (6)返回上一层     *" << endl;
 cout << "****************************" << endl;
 }
  void wteacherjiemian()                                                       //老师维护子菜单
{
 cout << "****************************" << endl;
 cout << "*       老师信息维护       *" << endl;
 cout << "*        (1)增 加          *" << endl;
 cout << "*        (2)更 改          *" << endl;
 cout << "*        (3)删 除          *" << endl;
 cout << "*        (4)查 找          *" << endl;
 cout << "*        (5)显 示          *" << endl;
 cout << "*        (6)返回上一层     *" << endl;
 cout << "****************************" << endl;
} 
 void wlibrarianjiemian()                                                       //老师维护子菜单
{
 cout << "****************************" << endl;
 cout << "*     管理员信息维护       *" << endl;
 cout << "*        (1)增 加          *" << endl;
 cout << "*        (2)更 改          *" << endl;
 cout << "*        (3)删 除          *" << endl;
 cout << "*        (4)查 找          *" << endl;
 cout << "*        (5)显 示          *" << endl;
 cout << "*        (6)返回上一层     *" << endl;
 cout << "****************************" << endl;
}

void menu1()    //最初界面 
{
	cout << "****************************" << endl;
    cout << "*           主页           *" << endl;
    cout << "*      (1)系统管理员       *" << endl;
    cout << "*      (2)图书管理员       *" << endl;
    cout << "*      (3)学     生        *" << endl;
    cout << "*      (4)老     师        *" << endl;
    cout << "*      (0)退出程序         *" << endl; 
    cout << "****************************" << endl;
};
void menu2()   //系统管理员界面 
{
	cout << "****************************" << endl;
    cout << "*     系统管理员权限       *" << endl;
    cout << "*     (1)图书管理员信息    *" << endl;
    cout << "*     (2)学生信息          *" << endl;
    cout << "*     (3)老师信息          *" << endl;
    cout << "*     (4)返回上一层        *" << endl;
    cout << "****************************" << endl;
};
void menu3()//学生、老师界面
{
	cout << "***********************************************" << endl;
	cout << "*               图 书 管 理 系 统             *" << endl;
	cout << "*                                             *" << endl;
	cout << "*               (1) 借 书                     *" << endl;
	cout << "*                                             *" << endl;
	cout << "*               (2) 还 书                     *" << endl;
	cout << "*                                             *" << endl;
	cout << "*               (3) 显示全部书                *" << endl;
	cout << "*                                             *" << endl;
	cout << "*              (4)查找书籍                  *" << endl;
	cout << "*                                             *" << endl;
	cout << "*              (5)返回上一步                *" << endl;	
	cout << "***********************************************" << endl;
}
//图书管理模块

//图书类
class book
{
    public:
        int no;                                      //图书编号
        char name[20];                               //图书名称
        char author[10];                             //作者
        int price;                                   //价格
        int b_flag;                                  //1为在架,2为借出
        int b_del;                                   //1为存在, 2为删除
        book (){}                               //构造函数
        void setno (int n);//图书编号取值
        int getno (); //返回图书编号值
        void setprice (int p);//图书价格取值
        int getprice ();//返回图书价格值
        void setname (char na[]);//字符串复制
        char* getname ();//返回图书名称
        void setauthor (char a[]);//字符串复制
        char* getauthor ();//返回图书作者
        void borbook ();//借书标志
        void delbook ();//删除标志
        void addbook (int no, char na[], char author[], int price) ;   //增加图书功能

};

//图书数据库类
class bdatabase
{
	public:
		book btarray[BMAX];//图书集合
		int top;
		bdatabase (){}
		~bdatabase ();
		void openfile ();
		void addbooks (); 
		int findbooks (int suffix);
		int findbooks (); 
		void editbooks ();
		void delbooks ();
	    void listbooks ();
};

//图书管理员模块
//图书管理员类 
class librarian
{
	public:
		int no;   //编号
		int sex;  //管理员性别,1表示男,0表示女
		char name[20];
		int l_del;  //1为存在,2删除 
		char password[15];   
		void addlibrarian (int id, char na[], int s, char pass[]);//增加管理员
} ;

//图书管理员数据库类
class ldatabase
{
	public:
		librarian ldarray[10];
		int top;
		ldatabase (){}
		~ldatabase ();
		void openfile1 ();
		void addlibrarians (); 
		int findlibrarians ();
		void editlibrarians ();
		void dellibrarians ();
		void listlibrarians ();
};

//读者管理模块
//读者类
class reader
{
    public:
        int no;
        int sex;     //读者性别,1表示男,0表示女
        char name[20];
        int r_del;  //1存在,2删除
        int r_bor;  //0没有借书 ,统计借书本数 
        int type;   //1为学生,2为老师
        char password[15];
        book brbook;
        void addreader (int id, char na[], int s, int b, int a, char pass[]);//增加读者
        void setbrbook (book bt);  //设置借书标记
        book getbrbook ();   //返回借书信息
};

//读者数据库类
class rdatabase
{
	public:
        reader rdarray[BMAX];
        int top;
        rdatabase (){}
	    ~rdatabase ();
	    void openfile2 ();
	    void addreaders ( int t );
	    int findreaders ( int suffix );
	    int findreaders ();
	    void editreaders ();
	    void delreaders ();
	    void listreaders ( int t );
	      
};

void book::setno (int n) { no = n;}//图书编号取值
int book::getno () { return no; }//返回图书编号值
void book::setprice (int p) { price = p; }   //图书价格取值
int book::getprice () { return price; }//返回图书价格值
void book::setname (char na[]) { strcpy(name, na); } //字符串复制
char* book::getname () { return name; }//返回图书名称
void book::setauthor (char a[]) { strcpy(author, a); }//字符串复制
char* book::getauthor () { return author; }//返回图书作者
void book::borbook () { b_flag = 2; }     //借书标志
void book::delbook () { b_del = 2; }   //删除标志
void book::addbook (int no, char na[], char author[], int price)    //增加图书功能
{
    setno (no);
    setname (na);
    setauthor (author);
    setprice (price);
    b_flag = 1;
    b_del = 1;
}
                                
void bdatabase::openfile()
{
    book b;
    top = -1;
    fstream file ("book.scv", ios::in);    //打开文件
    while (1)
    {
		file.read( (char *)&b, sizeof(b) );
        if (!file) break;
        top++;
        btarray[top] = b;
    }
    file.close();     //关闭文件
}

bdatabase::~bdatabase()                      //析构函数,    将btarray[]写到book.txt文件中 
{
    fstream file ( "book.scv", ios::out);
    for (int i = 0; i <= top; i++)
    {
        if (btarray[i].b_del == 1)
        file.write( (char *)&btarray[i], sizeof(btarray[i]) );
    }
    file.close();
}

void bdatabase::addbooks()                                     //往图书数据库中加图书
{
    book bk;
    int no;
    char bname[20];
    char bau[10];
    char choose;
    int pr;
    int j;             //最大增加次数量 
    do
    {
    	j++; 
  	    cout << endl << "请输入书号: ";
        cin >> no;
        cout << endl << "请输入书名: ";
        cin >> bname;
        cout << endl << "请输入作者: ";
        cin >> bau;
        cout << endl << "请输入价格: ";
        cin >> pr;
        cout << endl;
        bk.b_flag = 1;
        bk.addbook(no, bname, bau, pr);
        top++;
        btarray[top] = bk;
        cout << "书号: " << btarray[top].no <<'\t' << " 书名: " << btarray[top].name <<'\t'<< " 作者: " 
	    << btarray[top].author <<'\t'<< " 价格: " << btarray[top].price << endl;
	    cout << "你想继续添加吗?(y/n)";
        cin >> choose;
        while (choose != 'y' && choose != 'n')
        {
    	    cout << "输入非法!请重新输入:";
    	    cin >> choose; 
        };
        if (j == 5)
        {
        	cout << "已达到最大增加个数!" << endl;
        	break;
        }
        
    } while (choose == 'y'); 
    return ;
}

int bdatabase::findbooks(int suffix)        //查找图书,这个函数用于借书这书操作,suffix是数组下标
{
    int no;
    cout << "请输入书号: ";
    cin >> no;
    for (int i = 0; i <= top; i++)
    {
        if (btarray[i].no == no && btarray[i].b_del == 1)
        {
            return i;
        }
    }
    return -1;
} 

int bdatabase::findbooks()                                //查找图书,这个函数用于图书维护  
{
    int no;
    char value[6];
    cout << "请输入书号: ";
    cin >> no;
    for (int i = 0; i <= top; i++)
    {
        if (btarray[i].no == no && btarray[i].b_del == 1)
        {
            if (btarray[i].b_flag == 1) strcpy(value, "在架");
            if (btarray[i].b_flag == 2) strcpy(value, "借出");
            cout << "书号: " << btarray[i].no << '\t'<< " 书名: " << btarray[i].name << '\t' << " 作者: " << btarray[i].author 
			<< '\t' <<" 价格: " << btarray[i].price << '\t' << " 图书状态 :" << value << endl;
            return i;
        }
    }
    return -1;
}

void bdatabase::editbooks()                                          //编辑图书
{
    int cur, i, j =0 ;
    char choose;
    cur = findbooks();
    if (cur == -1)
    {
        cout << "没有这本书" << endl;
        return;
    }
    do
    {
    	j++;
  	    cout << "请输入你想修改的信息:(1.书号 2.书名 3.作者 4.价格)";
        cin >> i;
        while (i !=1 && i !=2 && i !=3 &&i !=4)
        {
  	        cout << "输入非法!请重新输入:";
  	        cin >> i;
        }
        cout << "请输入修改内容:";
        if (i == 1)
        {
  	        cin >> btarray[cur].no;
		    cout << "修改成功!" << endl;	
        }
        if (i == 2)
        {
    	    cin >> btarray[cur].name;
            cout << "修改成功!" << endl;
        }
        if (i == 3)
        {
    	    cin >> btarray[cur].author;
    	    cout << "修改成功!" << endl;
        }
        if( i == 4)
        {
    	    cin >> btarray[cur].price;
    	    cout << "修改成功!" << endl;
        }
        cout << "你想继续修改吗?(y/n)";
        cin >> choose;
        while (choose != 'y' && choose != 'n')
        {
    	    cout << "输入非法!请重新输入:";
    	    cin >> choose; 
        };
        if ( j == 10)
        {
        	cout << "已达到最大修改次数!"<<endl;
        	break;
        }
    } while (choose == 'y');
    cout << "修改后的数据:" << endl;
    cout << "书号: " << btarray[cur].no << '\t' << " 书名: " << btarray[cur].name << '\t' << " 作者: " << btarray[cur].author 
	<< '\t' << " 价格: " << btarray[cur].price << endl;
}

void bdatabase::delbooks()                                             //删除图书
{
    int cur;
    cur = findbooks();
    if (cur == -1)
    {
        return ;
    } 
    if (btarray[cur].b_flag == 2)                              //删除时判断图书是否借出
    {
        cout << "该图书已经借出,请在归还后再删除。" << endl;
        return;
    }
    btarray[cur].b_del = 2;
    return ;
}

void bdatabase::listbooks()                                             //显示全部图书
{
    char value[6];
    for (int i = 0; i <= top; i++)
    {
        if (btarray[i].b_del == 1)
        {
            if (btarray[i].b_flag == 1) {strcpy(value, "在架");} 
            if (btarray[i].b_flag == 2) {strcpy(value, "借出");} 
            cout << "书号: " << btarray[i].no <<'\t'<< " 书名: " << btarray[i].name << '\t' << " 作者: " << btarray[i].author 
			<<  '\t' <<" 价格: " << btarray[i].price << '\t' << " 图书状态 :" << value << endl;
        }
    }
    return ;
}


void librarian::addlibrarian(int id, char na[], int s, char pass[])//增加管理员
{
	no = id;
	sex = s;
	strcpy ( name,na );
	strcpy ( password,pass );
} 



void ldatabase::openfile1() 
{
	librarian lb;
	top =- 1;
	fstream file ("librarian.scv",ios::in); //打开文件
	while(1)
	{
		file.read ( (char*)&lb,sizeof(lb) );
		if (!file) break;
		top++;
		ldarray[top] = lb;
	} 
	file.close();
}

ldatabase::~ldatabase() //析构函数 
{
	fstream file("librarian.scv",ios::out); //打开文件
	for (int i = 0; i <= top; i++) 
	{
		if (ldarray[top].l_del == 1)
		{
			file.write ( (char *)&ldarray[i], sizeof(ldarray[i]) );
		}
	}
	file.close();
}

void ldatabase::addlibrarians()       //添加图书管理员 
{
	librarian lb;
  	int no;
  	int ls;
  	char choose;
  	char lname[20];
  	char pass[15], pass1[15];
  	int j;
  	int s;
  	do
  	{ 
  	    j++;
  		cout << "请输入编号: ";
  		cin >> no;
  	    cout << endl << "请输入姓名: ";
  		cin >> lname;
  		cout << endl << "请输入性别(1为男,0为女):";
  		cin >> ls;
  		while (1)
  		{
  			cout << endl << "请输入该用户密码(10位以内):";
		    cin >> pass;
		    cout << endl << "请再次输入该用户密码(10位以内):";
		    cin >> pass1;
		    if( ( s = ( strcmp(pass, pass1) ) ) == 0)
		    {
			    break;
			}			 
  		};
  		cout << endl;
   		lb.addlibrarian( no, lname , ls , pass );
  		top++;
  		ldarray[top] = lb;
  		ldarray[top].l_del = 1;
 		cout << "是否继续增加?(y/n)";
  		cin >> choose;
  		while (choose != 'y' && choose != 'n')
  		{
  			cout << "非法输入!请重新输入:";
  			cin >> choose;
  		};
  		if (j == 5)
  		{
  			cout << "已达到最大增加个数!" << endl;
			break; 
  		}
  	} while (choose == 'y');
  	return ;
}
		
int ldatabase::findlibrarians()                              //查找图书管理园 
{
    int no;
    char gender[3];
    cout << "请输入编号: ";
    cin >> no;
    for (int i = 0; i <= top; i++)
    {
        if (ldarray[i].no == no && ldarray[i].l_del == 1)
        {
            if (ldarray[i].sex == 1) strcpy(gender, "男");
            if (ldarray[i].sex == 0) strcpy(gender, "女");
            cout <<"编号: "<< ldarray[i].no << "  " << "姓名: " << ldarray[i].name << "  " << "性别:" << gender << endl;
            return i;
        }
    }
    return -1;
}
        
void ldatabase::editlibrarians()                                  //编辑 
{
	char choose;
	int cur,i;
	char pass[15], pass1[15];
	cur = findlibrarians();
	char gender[3];
	int j = 0;   //修改次数统计 
	int s;
	for (int i = 0; i <= top; i++)
  	{
   		if (ldarray[i].sex == 1) strcpy(gender, "男");
        if (ldarray[i].sex == 0) strcpy(gender, "女");
  	}
  	if (cur == -1)
 	{ 
   		cout << "没有该管理员" << endl;
  		return ;
 	}
 	do
  	{
  		j++;
  		cout << "请修输入需要修改的信息:(1.姓名  2.编号  3.性别  4.密码 )" << endl;
  		cin >> i;
  		while (i != 1 && i !=2 && i !=3 )
  		{
  			cout << "非法输入!请重新输入:";
  			cin >> i;
		}
 		cout << "请输入修改内容:";
  		if (i == 1)
 		{
  			cout << endl << "姓名: ";
    		cin >> ldarray[cur].name;
    		cout << "修改成功!" << endl;
  		}
  		if(i == 2)
  		{
  	 		cout << endl << "编号:";
     		cin >> ldarray[cur].no;
     		cout << "修改成功!" << endl;
  		}
 		if (i == 3)
 		{
     		cout << endl << "性别(男 , 女):";
     		cin >> gender;
     		cout << "修改成功!" << endl;
 		}
 		if( i == 4)
 		{
 			while (1)
  		   {
  			    cout << endl << "请输入该用户密码(10位以内):";
		        cin >> pass;
		        cout << endl << "请再次输入该用户密码(10位以内):";
		        cin >> pass1;
		        if( ( s = ( strcmp(pass, pass1) ) ) == 0)
		        {
			    break;
			    }			 
  		   }
  		   strcpy (ldarray[cur].password, pass);
 		}
  		cout << "是否继续修改?(y/n)";
  		cin >> choose;
  		while ( choose != 'y' && choose !='n')
  		{
  			cout << "非法输入!请重新输入:";
  			cin >>choose;
  		};
  		if (j == 10 )
  		{
  			cout << "已达到最大修改次数!" << endl;
  			break;
  		}
  	} while (choose == 'y');
  	return ;
}
        
void ldatabase::dellibrarians()                   //删除管理员 
{
    int cur;
    cur = findlibrarians();
    if (cur == -1)
    {
        return ;
    }
    ldarray[cur].l_del = 2;
    return ;
}

void ldatabase::listlibrarians()                //显示图书管理员的信息 
{ 
    char gender[4];
    for (int i = 0; i <= top; i++)
    {
        if (ldarray[i].l_del == 1)
        {
            if (ldarray[i].sex == 1) strcpy(gender, "男");
            cout<< "编号: " << ldarray[i].no << "  " << "姓名: " << ldarray[i].name << "  " << "性别:" << gender << endl;
        }
    }
    return ;
}		


void reader::addreader(int id, char na[], int s, int b, int a, char pass[])//增加读者
{
	no = id;
    sex = s;
    r_bor = b;
    strcpy( name, na);
    r_del = 1;
    type = a;
    strcpy( password, pass );
}
void reader::setbrbook(book bt) { brbook.b_flag=2;} //设置借书标记
book reader::getbrbook() {return brbook;}   //返回借书信息


void rdatabase::openfile2()
{
    reader rd;
    top = -1;
    fstream file ("reader.scv", ios::in); //打开文件
    while (1)
    {
		file.read ( (char *)&rd, sizeof(rd) );
        if (!file) break;
        top++;
        rdarray[top] = rd;
    }
    file.close();  //关闭文件   
}

rdatabase::~rdatabase()//析构函数
{
    fstream file("reader.scv", ios::out);
    for (int i = 0; i <= top; i++)
    {
        if (rdarray[i].r_del == 1)
        file.write ( (char *)&rdarray[i], sizeof(rdarray[i]) );
    }
    file.close();
}

void rdatabase::addreaders( int t )                                            //添加读者
{
  	reader rd;
  	int no;
  	int rs;
  	int b = 0 ;    //最初借阅本数0本 
  	char choose;
  	char rname[20];
  	int a;
  	int j = 0;      //统计增加个数 
  	int s;
  	char pass[15], pass1[15];
  	do
  	{   
  	    j++;
  	    a = t;
  	    if( t == 1)
  	    {
  	    	cout << "请输入学号: ";
  		    cin >> no;
  		    cout << endl << "请输入姓名: ";
  		    cin >> rname;
  		    cout << endl << "请输入性别(1.男  0.女):";
  		    cin >> rs;
  		    cout << endl;
  		    while (1)
  		    {
  			    cout << endl << "请输入该用户密码(10位以内):";
		        cin >> pass;
		        cout << endl << "请再次输入该用户密码(10位以内):";
		        cin >> pass1;
		        if( ( s = ( strcmp(pass, pass1) ) ) == 0)
		        {
			        break;
			    }			 
  		    }
   		    rd.addreader(no, rname, rs, b, a, pass);
  		    top++;
  		    rdarray[top] = rd;
  	    }
  	    if( t == 2)
  	    {
  	    	cout << "请输入教职工号: ";
  		    cin >> no;
  		    cout << endl << "请输入姓名: ";
  		    cin >> rname;
  		    cout << endl << "请输入性别(1.男  0.女):";
  		    cin >> rs;
  		    cout << endl;
  		    while (1)
  		    {
  			    cout << endl << "请输入该用户密码(10位以内):";
		        cin >> pass;
		        cout << endl << "请再次输入该用户密码(10位以内):";
		        cin >> pass1;
		        if( (s = ( strcmp(pass, pass1) ) ) == 0)
		        {
			        break;
			    }			 
  		    }
   		    rd.addreader(no, rname, rs, b, a, pass);
  		    top++;
  		    rdarray[top] = rd;
  	    }
  	    
 		cout << "是否继续增加?(y/n)";
  		cin >> choose;
  		while (choose != 'y' && choose != 'n')
  		{
  			cout << "非法输入!请重新输入:";
  			cin >> choose;
  		};
  		if (j == 5)
  		{
  			cout << "已达到最大添加次数!" << endl;
  			break;
  		}
  	} while (choose == 'y');
  	return ;
}
 
int rdatabase::findreaders ( int suffix )     //查找读者,这个函数用于借书还书操作。 参数suffix是数组下标
{
    int no;
    cout << "请输入学号(教职工号): ";
    cin >> no;
    for (int i = 0; i <= top; i++)
    {
        if (rdarray[i].no == no && rdarray[i].r_del == 1)
        {
            return i;
        }
    }
    return -1;
}

int rdatabase::findreaders()                              //查找读者,这个函数用于读者维护操作
{
    int no;
    char gender[3];
    char identity[10];
    cout << "请输入学号(教职工号): ";
    cin >> no;
    for (int i = 0; i <= top; i++)
    {
        if (rdarray[i].no == no && rdarray[i].r_del == 1)
        {
            if (rdarray[i].sex == 1) strcpy(gender, "男");
            if (rdarray[i].sex == 0) strcpy(gender, "女");
            if (rdarray[i].type == 1) strcpy(identity, "学生");
            if (rdarray[i].type == 2) strcpy(identity, "老师");
            cout <<"学号(教职工号): " << rdarray[i].no << "  " << "姓名: " << rdarray[i].name << "  " << "性别:" << gender << "  " 
			<< "身份:" << identity << '\t' << "借阅数量:" << rdarray[i].r_bor << endl;
            return i;
        }
    }
    return -1;
}
        
void rdatabase::editreaders()                                            //编辑读者信息
{
	char choose;
    int cur,i;
    cur = findreaders();
    char gender[3];
    char identity[10];
    int j = 0;     //统计编辑次数 
    char pass[15], pass1[15];
    int s;
  	for (int i = 0; i <= top; i++)
  	{
   		if (rdarray[i].sex == 1) strcpy(gender, "男");
        if (rdarray[i].sex == 0) strcpy(gender, "女");
        if (rdarray[i].type == 1) strcpy(identity, "学生");
        if (rdarray[i].type == 2) strcpy(identity, "老师");
  	}
  	if (cur == -1)
 	{
   		cout << "没有该用户!" << endl;
  		return ;
 	}
 	do
  	{
  		j++;
  		cout << "请修输入需要修改的信息:(1.姓名  2.学号(教职工号)  3.性别  4.身份 5.密码" << endl;
  		cin >> i;
  		while (  i != 1 && i != 2 && i != 3)
  	    {
  		cout << "非法输入!请重新输入:";
  		cin >> i;
	    }
 		cout << "请输入修改内容:";
  		if (i == 1)
 		{
  			cout << endl << "姓名: ";
    		cin >> rdarray[cur].name;
    		cout << "修改成功!" << endl;
  		}
  		if (i == 2)
  		{
  	 		cout << endl << "学号(教职工号):";
     		cin >> rdarray[cur].no;
     		cout << "修改成功!" << endl;
  		}
 		if (i == 3)
 		{
     		cout << endl << "性别(1.男  0.女):";
     		cin >> rdarray[cur].sex;
     		cout << "修改成功!" << endl;
 		}
 		if (i == 4)
 		{
     		cout << endl << "身份(1.学生 2.老师):";
     		cin >> rdarray[cur].type;
     		cout << "修改成功!" << endl;
 		}
 		if (i == 5)
		 {
		 	while (1)
  		    {
  			    cout << endl << "请输入该用户密码(10位以内):";
		        cin >> pass;
		        cout << endl << "请再次输入该用户密码(10位以内):";
		        cin >> pass1;
		        if( ( s = ( strcmp(pass, pass1) ) ) == 0)
		        {
			        break;
			    }			 
  		    }
  		    strcpy( rdarray[cur].password , pass );
		 } 
  		cout << "是否继续修改?(y/n)";
  		cin >> choose;
  		while (choose != 'y' && choose != 'n')
  		{
  			cout << "非法输入!请重新输入:";
  			cin >> choose;
  		};
  		if (j == 10 )
  		{
  			cout << "已达到最大修改次数!" << endl;
  			break;
  		}
  	} while (choose == 'y');
    return ;
}
        
void rdatabase::delreaders()                            //删除读者,读者如果借书要还书后才能删除
{
    int cur;
    cur = findreaders();
    if (cur == -1)
    {
        return;
    }
    if (rdarray[cur].r_bor != 0)
    {
        cout << "该用户借了图书,请还书后再删除" << endl;
        return;
    }
    rdarray[cur].r_del = 2;
    return ;
}
        
void rdatabase::listreaders( int t )                                                 //显示所有读者
{
    char gender[3];
    for (int i = 0; i <= top; i++)
    {
        if (rdarray[i].r_del == 1)
        {
		    if (rdarray[i].sex == 1) strcpy(gender, "男");
            if (rdarray[i].sex == 0) strcpy(gender, "女");
        	if( t == 1)
        	{
        		if(rdarray[i].type == 1)
        		{
        			cout << "学号: " << rdarray[i].no << "  " << "学生姓名: " << rdarray[i].name << "  " << "性别:" << gender
				    << "  " << "借阅数量:" << rdarray[i].r_bor << endl;
        		}	
        	} 
        	if( t == 2)
        	{
        		if(rdarray[i].type == 2)
        		{
        			cout << "教职工号:" << rdarray[i].no << "  " << "教师姓名:" << rdarray[i].name << "  " << "性别:" 
					<< gender << "  " << "借阅数量:" << rdarray[i].r_bor << endl;
        		}
        	}
        }
    }
    return ;
}

void borrowtoreturn()
//借书还书函数.参数br用来判断是“借书”还是“还书”.1为“借书”,2为“还书”
{
	char br;
	do
	{
	menu3();
	char pass[15];
	cin >> br;
    int rdid = 0;
    int bkid = 0;
    int rsuffix, bsuffix;
    bdatabase t_bd;
    t_bd.openfile();
    rdatabase t_rd;
    t_rd.openfile2();
    	switch ( br )
    	{
    		case '1':
    			 rsuffix = t_rd.findreaders (rdid);
                 cout << "请输入密码:";
                 cin >> pass;
                 if( strcmp( t_rd.rdarray[rsuffix].password , pass) != 0)
		         {
			        cout << "密码错误!" <<endl;
			        break ; 
		         } 
                 bsuffix = t_bd.findbooks (bkid);
                 if ( rsuffix == -1 || bsuffix == -1)
                    break ;
                 if (t_bd.btarray[bsuffix].b_flag == 2)
                 {
                    cout << "图书已经借出,请选择其它图书" << endl;
                    break ;
                 }
                 if (t_rd.rdarray[rsuffix].type == 1)
                 {
        	        if (t_rd.rdarray[rsuffix].r_bor >= 10)
        	        {
                        cout << "借书次数已用完,请先归还再借其它图书" << endl;
                        break ;
       	 	        }
       	 	    }
                 if (t_rd.rdarray[rsuffix].type == 2)
                 {
        	        if (t_rd.rdarray[rsuffix].r_bor >= 30)
        	        {
                        cout << "借书次数已用完,请先归还再借其它图书" << endl;
                        break ;
       	 	        }
                 }
                t_bd.btarray[bsuffix].b_flag = 2;
                t_rd.rdarray[rsuffix].r_bor += 1;
                t_rd.rdarray[rsuffix].brbook = t_bd.btarray[bsuffix];
                break ;
            case '2':
            	rsuffix = t_rd.findreaders(rdid);
                cout << "请输入密码:";
                cin >> pass;
                if( strcmp( t_rd.rdarray[rsuffix].password , pass) != 0)
		        {
			        cout << "密码错误!" <<endl;
			        break;
		        } 
                bsuffix = t_bd.findbooks(bkid);
                if (rsuffix == -1 || bsuffix == -1)
                break ;
                if (t_rd.rdarray[rsuffix].brbook.no == t_bd.btarray[bsuffix].no)
                {
                    t_bd.btarray[bsuffix].b_flag = 1;
                    t_rd.rdarray[rsuffix].r_bor -=1 ;
                    t_rd.rdarray[rsuffix].brbook = t_bd.btarray[bsuffix];
                }
                else
                {
                    cout << "请重新输入,读者借的图书号不正确" << endl;
                    break ;
                }
                break ;
            case '3':
    	        t_bd.listbooks() ;
    	        break ;
    	    case '4':
		        t_bd.findbooks() ;
		        break ;
		    default:
		    	break ;
    	}
	}while(br!='5');
    return ;
}



 

void booksmanage()
{
	char pass[15]; 
	char in;
	int lsuffix ;
    ldatabase t_ld;
    t_ld.openfile1();
    lsuffix = t_ld.findlibrarians ( );
    if(lsuffix == -1)
    {
    	cout << "没有此管理员!" ;
    	return ;
    }
    cout << "请输入密码:";
    cin >> pass;
    if( strcmp( t_ld.ldarray[lsuffix].password , pass) != 0)
	{
		cout << "密码错误!" <<endl;
		return ; 
	} 
    bdatabase  bd;  
	bd.openfile();     
    do
	{   bookjiemian() ;
	    cin >> in;
        switch (in)
        {
            case '1':
                bd.addbooks();
                break;
            case '2':
                bd.editbooks();
                break;
            case '3':
                bd.delbooks();
                break;
            case '4':
                bd.findbooks();
                break;
            case '5':
                bd.listbooks();
                break;
            case '6':
                break;
            default: cout << "输入错误,请重新输入。" << endl;;
        }
    } while (in != '6');
    return ;
}

void studentmanage()
{
    char in;
    rdatabase  bd;
    bd.openfile2();
    do
	{	
	    wstudentjiemian();
        cin >> in;
        switch (in)
        {
            case '1':
                bd.addreaders(1);
                break;
            case '2':
                bd.editreaders();
                break;
            case '3':
                bd.delreaders();
                break;
            case '4':
                bd.findreaders();
                break;
            case '5':
                bd.listreaders(1);
                break;
            case '6':
                break;
            default: cout << "输入错误,请重新输入。" << endl;
                 break;
        }
    } while (in != '6');
    return;
}

void teachermanage()
{
    char in;
    rdatabase  bd;
    bd.openfile2();
    do
	{	
	    wteacherjiemian();
        cin >> in;
        switch (in)
        {
            case '1':
                bd.addreaders(2);
                break;
            case '2':
                bd.editreaders();
                break;
            case '3':
                bd.delreaders();
                break;
            case '4':
                bd.findreaders();
                break;
            case '5':
                bd.listreaders(2);
                break;
            case '6':
                break;
            default: cout << "输入错误,请从新输入。" << endl;
                 break;
        }
    } while (in != '6');
    return;
}

void librarianmanage()
{
	char in;
	ldatabase bd;
	bd.openfile1();
	do
	{	
	    wlibrarianjiemian();
		cin >> in;
		switch (in)
		{
			case '1':
				bd.addlibrarians();
				break;
			case '2':
				bd.editlibrarians();
				break;
			case '3':
				bd.dellibrarians();
				break;
			case '4':
				bd.findlibrarians();
				break;
			case '5':
				bd.listlibrarians();
				break;
			case '6':
				break;
			default:
			    cout << "输入错误!请重新输入!" << endl; 
			    break;
		}
	}while (in != '6');
	return;
}

void adminmanage()
{
	char in;
	int no = 111111 ;
	int no1 ;
	char pass[15] = "123456";
	char pass1[15];
	cout << "请输入管理员编号:";
	cin >> no1;
	if( no != no1)
	{
		cout << "编号错误!" << endl;
		return ;
	}
	cout << "请输入系统管理员密码(10位以下):";
	cin >> pass1;
	if( strcmp( pass ,pass1) != 0)
	{
		cout << "密码错误!" << endl;
		return ;
	}
	do
	{
		menu2();
		cin >> in;
		switch (in)
		{
			case '1':
				librarianmanage(); 
				break;
			case '2':
			    studentmanage();
			    break;
			case '3':
			    teachermanage();
			    break;
			case '4':
				break;
			default:
				cout << "输入错误!请重新输入!" << endl;
				break;
		}
	} while (in != '4');
    return ;
}


int main()
{
	system("color 8F");
    char select; 
    do
    {
	menu1();//选择身份进入
	cin >> select;
    switch ( select )
    {
    	case'1'://系统管理员 
    	        adminmanage();
    		    break;
		case'2'://图书管理员
		        booksmanage();
                break;
		case'3'://学生
		        borrowtoreturn();
		        break;
		case'4'://老师
                borrowtoreturn();
                break;
		case'0':
		        break;         
		default:
		        cout << "输入错误,请重新输入!" << endl; 
	}
	} while (select != '0');
	return 0;
}

猜你喜欢

转载自blog.csdn.net/One_thing_1/article/details/81147922