📄 e1.cpp
字号:
#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 + -