⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e1.cpp

📁 图书馆管理系统 由类界面实现绝大部分操作
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#include <fstream.h>
#include <time.h>
const int Maxr=100;
const int Maxb=100;
const int Maxbor=5;

typedef struct DATE{
	int year;
	int month;
	int day;}Date;
Date today;

class Root
{private:
	char psw[20];
	char name[10];
	int age;
	int wages;
	int tag;
public:
	char *getname() {return name;}
	void setage(int a)
	{
		age=a;
	}
	void setwages(int w)
	{
		wages=w;
	}
	void changepsw(char pw[])
	{
		strcpy(psw,pw);
	}
	void settag(int t)
	{
		tag=t;
	}
	void disproot()
	{
		cout << setw(5) << name <<setw(5) << age<<setw(8)<<wages<<endl;
	}
	int gettag() {return tag;}
	int complare(char ln[],char pw[])
	{
		if (strcmp(name,ln)==0)
			{
			if (strcmp(psw,pw)==0) return 2;
			else return 1;}
		else return 0;
	}
	void addroot(char *na,char *pw,int a,int w)
	{ 
		tag=0;
		strcpy(name,na);
		changepsw(pw);
		setwages(w);
		setage(a);
	}
};

class login
{private:
	int top;
	Root root[10];
public:
	login()
	{ 
		Root u;
		top=-1;
		fstream file("root.dat",ios::in);
		while (1)
		{file.read((char *)&u,sizeof(u));
		 if (!file) break;
		 top++;
		 root[top]=u;
		}
	}
	void menu()
	{
		int choice=1,x;
		char inname[20],passw[20];
		int ag,wg,ip;
		while (choice!=0)
		{
			cout <<"管理员菜单 1: 新增 2: 修改 3:删除 4:查询 5:显示 0:退出=>";
			cin >> choice;
			switch (choice)
			{
				case 1:
					cout << "输入管理员用户名:";
					cin >> inname;
					cout << "输入管理员密码:";
					cin >> passw;
					cout << "输入管理员年龄:";
					cin >> ag;
					cout << "输入管理员薪水:";
					cin >> wg;
					for(x=0;x<top;x++)
						if (root[x].gettag()==1) break;
					root[x].addroot(inname,passw,ag,wg);
					top++;
						break;
				case 2:
						cout << "输入管理员用户名:";
						cin >> inname;
						ip=0;
						for(x=0;x<top;x++)
							if (strcmp(root[x].getname(),inname)==0) {ip=1;break;}
						if (ip!=1) cout<<"该管理员不存在!";
						else 
						{
							cout<<"输入旧的密码:";
							cin>>passw;
							if (root[x].complare(inname,passw)==2)
							{cout<<"输入新的密码:";
							cin>>passw;
							root[x].changepsw(passw);
							cout<<"输入新的年龄:";
							cin>>ag;
							root[x].setage(ag);
							cout<<"输入新的工资:";
							cin>>wg;
							root[x].setwages(wg);
							}
						}
						break;
				case 3:
						cout << " 输入管理员用户名:";
						cin >> inname;
						for(x=0;x<top;x++)
						{if (strcmp(root[x].getname(),inname)==0 && root[x].gettag()==0) 
							root[x].settag(1);
							break;
						}
						break;
				case 4:
						cout << " 输入管理员用户名:";
						cin >> inname;
						for(x=0;x<=top;x++)
						{
							if (strcmp(root[x].getname(),inname)==0 && root[x].gettag()==0) 
								root[x].disproot();
						}
						break;
				case 5:
						for(x=0;x<=top;x++)
						{
							if (root[x].gettag()==0) 
							root[x].disproot();
						}
						break;
						
			}
		}
	}
	int rootmenu()
	{
		int i,j=0;
		char loginname[20],loginpassword[20];
		cout<<"User:";
		cin>>loginname;
		cout<<"Password:";
		cin>>loginpassword;
		for (i=0;i<=top;i++)
		{
			j=root[i].complare(loginname,loginpassword);
			if (j==2) break;
		}
		if (j==1 || j==0) {cout<<"Login Faild!\n";return 0;}
		else return 1;
	}
	~login()
	{
		fstream file("root.dat",ios::out);
        for (int i=0;i<=top;i++)
			if (root[i].gettag()==0)
				file.write((char *)&root[i],sizeof(root[i]));
			file.close();
	}
};

class Reader
{protected:
	int tag;
	int no;
	char name[10]; 
	int job;
	int borbook[Maxbor];
	float money;
	Date bookdate[Maxbor];
	Date backdate[Maxbor];
 public:
	Reader() {}
	char *getname() {return name;}
	int gettag() {return tag;}
	int getno() {return no;}  
	void setname(char na[])     
		{ 
		   strcpy(name,na);		
		}
	void delbook(){  tag=1;  }
	void retjob(int rjob){job=rjob;}
	void addreader(int n,char *na,int rj)
	{ 
		tag=0;
		money=0;
		no=n;
		job=rj;
		strcpy(name,na);
		for(int i=0;i<Maxbor;i++)
			borbook[i]=0;
	}
	void borrowbook(int bookid)
	{
		for(int i=0;i<Maxbor;i++)
		{ 
			if (borbook[i]==0)
			{
				borbook[i]=bookid;
				bookdate[i].year=today.year;
				bookdate[i].month=today.month;
				bookdate[i].day=today.day;
				switch(job){
					case 1:backdate[i].year=bookdate[i].year;
						   backdate[i].month=bookdate[i].month+1;
						   backdate[i].day=bookdate[i].day;
						   break;
					case 2:backdate[i].year=bookdate[i].year;
						   backdate[i].month=bookdate[i].month+2;
						   backdate[i].day=bookdate[i].day;
						   break;
					default:cout<<"Faild!!!"<<endl;
						borbook[i]=0;}
				return;
			}
		}
		
	}
	int retbook(int bookid)
	{ 
		for(int i=0;i<Maxbor;i++)
		{ 
			if(borbook[i]==bookid)
			{
			borbook[i]=0;
			dispmoney(i);
			return 1;
			}
		}
		return 0;
	}
	void dispR()
	{ 
		cout << setw(5) << no <<setw(10) << name<<endl;
		cout<<"借书编号:";
		for(int i=0;i<Maxbor;i++)
			if(borbook[i]!=0)
				cout<<borbook[i]<<" : "<<bookdate[i].year<<"-"<<bookdate[i].month<<"-"<<bookdate[i].day;
		cout <<endl;
			
	}
	void dispmoney(int i)
	{int days;
		days=(today.year-backdate[i].year)*365+(today.month-backdate[i].month)*30+(today.day-backdate[i].day);
		if (days>0) cout<<"你需要付"<<days<<"元"<<endl;
		money=money+days;
	}
	void setmoney()
	{float in=0;
		cout<<"该读者当前欠费"<<money<<"元。\n输入缴纳的金额:";
		cin>>in;
		if (in>=money)
		{money=0;
		 cout<<"实收金额"<<money<<"元,退还"<<in-money<<"元。";}
		else 
		{money=money-in;
		 cout<<"实收金额"<<in<<"元,仍欠费"<<money<<"元。";}
	}
};
 class RDatabase
{  
protected:
   int topr;      
   Reader read[Maxr];
public:
	RDatabase()
	{
		Reader s;
		topr=-1;
		fstream filer("reader.txt",ios::in);
		while (1)
		{
			filer.read((char *)&s,sizeof(s));
			if (!filer)break;
			topr++;
			read[topr]=s;
		}
		filer.close();
	}
	void Display();
    void clearR()
	{
		topr=-1;
	}
	int addreader(int n,char *na,int rj)
	{
		Reader *p=queryR(n);
		if (p==NULL)
		{
		  topr++;
		  read[topr].addreader(n,na,rj);
		  return 1;
		}
		return 0;

	}
	Reader *queryR(int readerid)
	{
		for (int i=0;i<=topr;i++)
			if (read[i].getno()==readerid && read[i].gettag()==0)
			{
				return &read[i];
			}
			return NULL;
	}
	void dispR()  
	{
           for (int i=0;i<=topr;i++)
			   read[i].dispR();
	}
	void readerdata();
	~RDatabase()  
	{
		fstream filer("reader.txt",ios::out);
        for (int i=0;i<=topr;i++)
			if (read[i].gettag()==0)
				filer.write((char *)&read[i],sizeof(read[i]));
			filer.close();
	}
};
void RDatabase::readerdata()
{

    int choice=1;
	int rjob=0;
	char rname[20];
	int readerid;
	Reader *r;
	while (choice!=0)
	{
		cout <<"读者维护 1: 新增读者 2: 修改读者 3:删除读者 4:缴纳金额 5:查找数据 6:显示数据 7:清空数据 0:退出=>";
		cin >> choice;
		switch (choice)
		{
            case 1:
				cout << "输入读者编号:";
				cin >> readerid;
				cout << "输入读者姓名:";
				cin >> rname;
				while(1)
				{	cout << "输入读者职业(学生和研究生为1,教师为2):";
					cin >> rjob;
					if (rjob==1||rjob==2) break;}
				addreader (readerid,rname,rjob);
				break;
            case 2:
				cout << "输入读者编号:";
				cin >> readerid;
				r=queryR(readerid);
				if (r==NULL)
				{
					cout << " 该读者不存在  "<<endl;
				    break;
				}
				cout << "输入新的姓名:";
				cin >> rname;
				r->setname(rname);
				while(1)
				{	cout << "输入读者职业(学生和研究生为1,教师为2):";
					cin >> rjob;
					if (rjob==1||rjob==2) break;}
				r->retjob(rjob);
			 	break;
            case 3:
				   	cout << " 输入读者编号:";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -