#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>//输入/输出文件流类
using namespace std;
const int Maxr=100;//最多的读者
const int Maxb=100;//最多的图书
const int Maxbor=5;//每位读者最多借五本书
//读者类,实现对读者的信息的描述
FILE *fp;
class Reader
{
private:
int tag; //删除标记 1:已删 0:未删
int no; //读者编号
char name[10]; //读者姓名
int borbook[Maxbor];//所借图书
char jieshu[30][20];//借出去的图书的书名
public:
Reader() {}
char *getname() {return name;} //获取姓名
int gettag() {return tag;} //获取删除标记
int getno() {return no;} //获取读者编号
void setname(char na[]) //设置姓名 上面那个getname函数 会用到的,就是将na[]数组的内容存放到name中
{
strcpy(name,na); //实现字符串的复制功能
}
void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删 当执行删除操作的函数时,
//就将tag的值置为1,这个1在上面的获取删除标记的gettag()函数中也要用到
void addreader(int n,char *na)//增加读者 其中的n为读者的编号,na[]则是指的读者的姓名,用一个指向字符串的指针来表示
{
tag=0; //读者删除标记为0
no=n; //获取读者编号,就是上面的那个n
strcpy(name,na); //将na的值复制给name
for(int i=0;i<Maxbor;i++) //将所借书这一数组的内容初始化为“0”
borbook[i]=0;
}
void borrowbook(int bookid,char bname[20])//借书操作 以所借书的编号来借
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
for(int j=0;j<20;j++)
{
jieshu[i][j]=bname[j];
}
return;
}
}
}
int retbook(int bookid)//还书操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//读出读者信息
{
cout << setw(5) << no <<setw(10) << name<<"借书编号:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] <<" "<<jieshu[i]<< "|";
cout << "]"<<endl;
}
};
//读者类库,实现建立读者的个人资料
class RDatabase
{
private:
int top; //读者记录指针
Reader read[Maxr];//读者记录
public:
RDatabase() //构造函数,将reader.txt读到read[]中
{
Reader s;
top=-1;
fstream file("D:\\reader.txt",ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&s,sizeof(s)); //获取读者记录的长度,然后将文件中的值赋给到s中去
if (!file)break; //知道file里面的内容没有了,就退出这个循环
top++; //栈顶指针自动加一
read[top]=s; //将栈顶指向的那个结点赋值,所赋得的值就是我们从文件中读取到的各个s
}
file.close(); //关闭 reader.txt
}
void clear()//删除所有读者信息
{
top=-1; //就是将栈顶指针指向最下面没有元素的位置呗
}
int addreader(int n,char *na)//添加读者时先查找是否存在
{
Reader *p=query(n); //按照编号来找找是不是存在
if (p==NULL) //说明原来的队列里面没有要添加的元素
{
top++; //将队列的头指针再加1
read[top].addreader(n,na); //这个addreader是在Reader中的公共函数
return 1; //返回
}
return 0;
}
Reader *query(int readerid)//按编号查找
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0) //当所给的编号给出的那些中的某一个编号相同,而且这个编号并未被删除时
{
return &read[i];
}
return NULL; //如果什么都没有找到,那么就会返回NULL
}
void disp() //输出所有读者信息
{
for (int i=0;i<=top;i++)
if(read[i].gettag()==0)
read[i].disp();
}
void readerdata();//读者库维护 在下面的那个函数中会有的,呵呵
~RDatabase() //析构函数,将read[]写到reader.txt文件中 貌似这个在加中的时候有用到过~~
{
fstream file("D:\\reader.txt",ios::out); //这是将文件中的内容读出么?
for (int i=0;i<=top;i++)
if (read[i].gettag()==0) //当读者记录没有被删除时,就符合要求
file.write((char *)&read[i],sizeof(read[i])); //将read数组中的内容写到reader.txt中去,用到写函数这个命令
file.close(); //关闭文件
}
};
void RDatabase::readerdata() //嗯,就是这里,进行读者库维护
{
char choice; //用来选择所要进行的操作
char rname[20]; //读者姓名
int readerid; //读者编号
Reader *r; //指向类Reader的指针r
while (choice!='0')
{
cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退出"<<endl;
cin >> choice;
switch (choice) //按照用户所选的进行相应的操作
{
case '1':
cout << "输入读者编号:";
cin >> readerid;
cout << "输入读者姓名:";
cin >> rname;
addreader (readerid,rname); //添加相应的用户
break;
case '2':
cout << "输入读者编号:"; //遍历这个你输入的编号是不是已经存在了
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout << " 该读者不存在 "<<endl;
break;
}
cout << "输入新的姓名:"; //如果存在的话,就进行相应的修改
cin >> rname;
r->setname(rname); //设置读者姓名
break;
case '3': //进行删除操作
cout << " 输入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 该读者不存在" << endl;
break;
}
r->delbook();
break;
case '4': //进行查找功能
cout << "读入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"该读者不存在"<< endl;
break;
}
r->disp(); //显示出r所属于来
break;
case '5': //进行所有的遍历输出
disp();
break;
case '6': //清空
clear(); //这个函数在下面会有的
break;
default:cout<<"输入错误,请从新输入:";break;
}
}
}
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
class Book
{
private:
int tag;//删除标记 1:已删 0:未删
int no;//图书编号
char name[20];//书名
int onshelf;//是否再架 1:再架 2:已借
public:
Book()
{
}
char *getname() { return name; }//获取姓名
int getno(){ return no; }//获取图书编号
int gettag(){ return tag; }//获取删除标记
void setname(char na[])//设置书名
{
strcpy(name,na); //将字符串赋给相应的name值
}
void delbook(){ tag=1;}//删除图书
void addbook(int n,char *na)//增加图书
{
tag=0; //初始时设置书籍的状态是未删除啦
no=n; //编号就是函数中给出的初始编号
strcpy(name,na); //字符串复制
onshelf=1; //初始状态时在架上
}
int borrowbook()//借书操作
{
if (onshelf==1) //当图书在架上是才能进行结束操作
{
onshelf=0; //将状态设为不在架上
return 1; //返回1
}
return 0; //书不在架上就返回0
}
void retbook()//还书操作
{
onshelf=1; //书状态设为在架上
}
void disp()//输出图书
{
cout << setw(6) << no << setw(18) << name << setw(10) //左对齐不同的位数
<<(onshelf==1? "在架":"已借") <<endl;
}
};
//图书库类,实现对图书的维护,查找,删除等
class BDatabase
{
private:
int top; //图书记录指针
Book book[Maxb]; //图书记录
public:
BDatabase()//构造函数,将book.txt读到book[]中
{
Book b; //继承与Book的一个类b
top=-1; //栈顶指针为-1.就是说没有任何数据元素在其中
fstream file("D:\\book.txt",ios::in); //获取文件book中的值到file文件中........................................................
while (1)
{
file.read((char *)&b,sizeof(b)); //将file中的值读取到Book类的b中
if (!file) break; //文件中没有东西了,就结束循环
top++; //栈顶指针加1
book[top]=b; //一个一个将b元素农到属于Book类的数组book中去,一栈的方式读入
}
file.close(); //关闭该文件
}
void clear()//全删
{
top=-1; //改一下栈指针就可以了
}
int addbook(int n,char *na)//增加图书
{
Book *p=query(n); //遍历已有的图书与给出的增加的图书的编号相比较
if (NULL==p) //当已有的图书中的值为空时,就可以进行添加图书的操作
{
top++; //栈顶指针加1
book[top].addbook(n,na); //调用Book嘞中的添加图书函数
return 1; //添加成功,返回1
}
return 0; //添加失败,返回0
}
Book *query(int bookid)//查找图书,这个函数的功能在其余函数中 用的也很多,有用
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0) //当书籍的编号与给出的编号相同而且,
//这本书�
没有合适的资源?快使用搜索试试~ 我知道了~
图书管理系统(简单的“文件”实现数据存储)
共15个文件
cpp:2个
obj:2个
pdb:2个
4星 · 超过85%的资源 需积分: 50 61 下载量 169 浏览量
2011-07-10
22:03:21
上传
评论 10
收藏 1.24MB ZIP 举报
温馨提示
请在使用前在D盘中设置两个txt文件(reader.txt和book.txt)然后就可以运行编译了,这个用的不是数据库,因为要求是用“文件”来实现数据的读写,所以我们的作业就是用“文件”来写的
资源推荐
资源详情
资源评论
收起资源包目录
haoba.zip (15个子文件)
haoba
haoba.dsw 535B
simple.cpp 11KB
haoba.opt 60KB
Debug
haoba.pch 2.08MB
vc60.pdb 116KB
simple.obj 387KB
vc60.idb 121KB
haoba.exe 556KB
qisi.obj 394KB
haoba.pdb 1.1MB
haoba.ilk 816KB
haoba.dsp 5KB
qisi.cpp 13KB
haoba.plg 969B
haoba.ncb 57KB
共 15 条
- 1
资源评论
- _zyh2016-12-13谢谢分享,下载下载看看
GAGAGAGA22
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功