大一老师教的一个小例子
#include<iostream>//标准输入输出头文件
#include<string>//字符串头文件
#include<fstream>//文件头文件
#include <conio.h>//“通用输入输出库”,主要是文件和标准控制台的输入输出。
using namespace std;
const int BMAX=50;//书最多个数
//图书类
class book
{
public:
int no;//图书编号
char name[20];//图书名称
int b_flag;//1在架,2借出
int b_del;//1存在,2删除
public:
book(){}//无参构造函数
void setno(int n)//设置图书编号
{
no=n;//图书编号取值
}
int getno()//返回图书编号值
{
return no;
}
void setname(char na[])//设置图书名称
{
strcpy(name,na);//字符串赋值
}
char *getname()//返回图书名称
{
return name;
}
void borbook()
{
b_flag=2;//借书标志
}
void delbook()
{
b_del=2;//删除标志
}
void addbook(int no,char na[])//增加图书功能
{
setno(no);
setname(na);
b_flag=1;
b_del=1;
}
};
//图书数据库
class bdatabase
{
public:
book btarray[BMAX];//图书集合
int top;
public:
bdatabase()
{
book b;
top=-1;
fstream file("book.txt",ios::in);//打开文件
while(1)
{
file.read((char *)&b,sizeof(b));
if(!file)
break;
top++;
btarray[top]=b;
}
file.close();//关闭文件
}
~bdatabase()
{
fstream file("book.txt",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 addbooks()//往图书数据库中加图书
{
book bk;
int no;
char bname[20];
cout<<"请输入书号:";
cin>>no;
cout<<endl<<"请输入书名:";
cin>>bname;
cout<<endl;
bk.b_flag=1;//上架图书
bk.addbook(no,bname);
top++;
btarray[top]=bk;
return ;
}
int 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 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<<"书名:"<<btarray[i].name<<"图书状态:"<<value<<endl;
return i;
}
}
return -1;
}
void editbooks()//编辑图书
{
int cur;
cur=findbooks();
if(cur==-1)
{
cout<<"没有这本书!"<<endl;
return;
}
cout<<"书号:"<<btarray[cur].no<<"书名:"<<btarray[cur].name<<endl;
cout<<"请修改数据:"<<endl;
cout<<endl<<"书名:";
cin>>btarray[cur].name;
return ;
}
void 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 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<<"书名:"<<btarray[i].name<<"图书状态:"<<value<<endl;
}
}
return;
}
};
//读者管理模块
//读者类
class reader
{
public:
int no;//读者账号
char name[20];//姓名
int r_del;//1存在,2删除
int r_bor;//1借过书,2没有借书
book brbook;
public:
void addreader(int id,char na[])//添加读者
{
no=id;
strcpy(name,na);
r_del=1;
}
void setbrbook(book bt)//设置借书标志
{
brbook=bt;
}
book getbrbook()//返回借书信息
{
return brbook;
}
};
//读者数据库类
class rdatabase
{
public:
reader rdarray[BMAX];
int top;
public:
rdatabase()
{
reader rd;
top=-1;
fstream file("reader.txt",ios::in);//打开方式
while(1)
{
file.read((char *)&rd,sizeof(rd));
if(!file)
break;
top++;
rdarray[top]=rd;
}
file.close();//关闭文件
}
~rdatabase()//析构函数
{
fstream file("reader.txt",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 addreaders()//添加读者功能
{
reader rd;
int no;
char rname[20];
cout<<"请输入学号:";
cin>>no;
cout<<endl<<"请输入姓名:";
cin>>rname;
cout<<endl;
rd.addreader(no,rname);
rd.r_bor=2;
top++;
rdarray[top]=rd;
return;
}
int 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 findreaders()//查找读者,用于读者维护
{
int no;
char value[3];//读者状态是否借书
cout<<"请输入学号:";
cin>>no;
for(int i=0;i<=top;i++)
{
if(rdarray[i].no==no&&rdarray[i].r_del==1)
{
if(rdarray[i].r_bor==1)
strcpy(value,"借");
if(rdarray[i].r_bor==2)
strcpy(value,"无");
cout<<"学号:"<<rdarray[i].no<<"姓名:"<<rdarray[i].name<<"是否借书:"<<value<<endl;
return i;
}
}
return -1;
}
void editreaders()//编辑读者信息
{
int cur;
cur=findreaders();
if(cur==-1)
{
cout<<"没有该学生信息!"<<endl;
return;
}
cout<<"请修改数据:"<<endl;
cout<<endl<<"姓名:";
cin>>rdarray[cur].name;
return ;
}
void delreaders()//删除读者,读者如果借书要还书后才可删除
{
int cur;
cur=findreaders();
if(cur==-1)
{
return;
}
if(rdarray[cur].r_bor==1)
{
cout<<"该用户有借书信息,请归还后在删除!"<<endl;
return;
}
rdarray[cur].r_del=2;
return;
}
void listreaders()//显示所有读者
{
char value[3];
for(int i=0;i<=top;i++)
{
if(rdarray[i].r_del==1)
{
if(rdarray[i].r_bor==1)
strcpy(value,"借");
if(rdarray[i].r_bor==2)
strcpy(value,"无");
cout<<"学号:"<<rdarray[i].no<<"姓名:"<<rdarray[i].name<<"是否要借书"<<value<<endl;
}
}
return;
}
};
//图书维护子菜单
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 readjiemian()
{
cout<<"|----------------------------|"<<endl;
cout<<"| 读 者 维 护 |"<<endl;
cout<<"| (1)增 加 |"<<endl;
cout<<"| (2)更 改 |"<<endl;
cout<<"| (3)删 除 |"<<endl;
cout<<"| (4)查 找 |"<<endl;
cout<<"| (5)显 示 |"<<endl;
cout<<"| (6)返回上一级 |"<<endl;
cout<<"|----------------------------|"<<endl;
}
//借书还书函数,参数br判断是借书还是还书
void borrowtotreturn(char br)
{
int rdid=0;
int bkid=0;
int rsuffix,bsuffix;
bdatabase t_bd;
rdatabase t_rd;
//借书
if(br=='1')
{
rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if(rsuffix==-1||bsuffix==-1)
return ;
if(t_bd.btarray[bsuffix].b_flag==2)
{
cout<<"图书已被借出,请选择其他图书!"<<endl;
return;
}
if(t_rd.rdarray[rsuffix].r_bor==1)
{
cout<<"您已经借过图书了,请归还后再借其他图书!"<<endl;
return;
}
t_bd.btarray[bsuffix].b_flag=2;
t_rd.rdarray[rsuffix].r_bor=1;
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix];
return;
}
if(br=='2')
{
rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if(rsuffix==-1||bsuffix==-1)
return ;
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=2;
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix];
}
else
{
cout<<"请重新输入,读者借的图书号不正确!"<<endl;
return ;
}
return;
}
}
//图书管理函数
void booksmange()
{
char in;
bdatabase bd;
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 readerssmange()
{
char in;
rdatabase bd;
do
{
readjiemian();
cin>>in;
switch(in)
{
case '1':
bd.addreaders();
break;
case '2':
bd.editreaders();
break;
case '3':
bd.delreaders();
break;
case '4':
bd.findreaders();
break;
case '5':
bd.listreaders();
break;
case '6':
break;
default:
cout<<"输入错误,请重新输入!"<<endl;
}
}while(in!='6');
return ;
}
void mainjiemian()//主界面
{
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;
cout<<"******************************"<<endl;
}
bool CheckPassWord(string password)/*以"*"输入密码,三次机会*/
{
bool judge = false;
int i = 0;
int times = 1;
string s;
char ch;
char pw[50];
while(times <= 3)
{
i = 0;
while((ch = _getch()) != '\r')
{
if(ch == '\b' && i > 0)//退格
{
printf("\b \b");
i--;
}
else
{
pw[i++] = ch;
cout << '*';
}
}
pw[i] = '\0';
cout << endl;
if(password.compare(pw) != 0)
{
if(times == 3)
cout << "密码错误,退出!" << endl << endl;
else
cout << "密码错误,剩余" << (3-times) << "次机会:";
times++;
}
else
{
cout << "密码正确!" << endl << endl;
judge = true;
return judge;
}
}
if(times == 4)
return judge;
return judge;
}
int main()
{
string password = "luo123"; //原始密码
cout << "输入6位查询密码(luo123):";
if(CheckPassWord(password)!=true)
// return 0;
return 1;
char in;
bdatabase bd;
do
{
mainjiemian();//进入界面
cin>>in;
switch(in)
{
case '1':
borrowtotreturn(in);
break;
case '2':
borrowtotreturn(in);
break;
case '3':
booksmange();
break;
case '4':
readerssmange();
break;
default:
cout<<"输入错误,请重新输入!"<<endl;
}
}while(in!='0');
return 0;
}