图书管理系统 数据结构 课程设计

{cout<<\读取磁盘文件失败!\

fread.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开 int i=0; while((fread.read((char *)&readers[i],sizeof(Reader))))//计算并返回所占字节数 i++; length=i;

fread.close();//关闭磁盘文件 } void saveFile() //保存读者文件 { ofstream fwrite; //定义输出文件流对象fwrite if(!fwrite) {cout<<\文件保存失败!\\n\ fwrite.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开 fwrite.write((char *)readers,length*sizeof(Reader));//计算并返回所占字节数 fwrite.close(); //关闭磁盘文件 } public:

ReaderManage() //构造函数,读取读者文件 {readFile();}

~ReaderManage() //析构函数,保存读者文件 {saveFile();}

void add_reader(Reader r) //添加读者用户函数 { if(length>=50)

{cout<<\对不起,注册人数已满!\\n\

readers[length].copy(r); //调用读者结构体copy函数 length++; } int search(char *rn) //按姓名查找读者函数 { for(int i=0;i

return -1; } bool revise(Reader reader,int i) //修改读者资料函数 { readers[i].copy(reader); //调用读者结构体cpoy函数 return true; } void delete_reader(int index) //删除读者函数 { for(int i=index;i

cout<<\请输入您的姓名:\ cin>>n;

cout<<\请输入您的所在班级:\

cin>>c;

cout<<\请输入您的联系电话:\ cin>>t;

reader.set_rname(n); //调用读者结构体设置读者姓名函数 reader.set_rclass(c); //调用读者结构体设置读者班级函数 reader.set_rtel(t); //调用读者结构体设置联系电话函数 add_reader(reader); //调用读者结构体添加读者函数 cout<<\注册成功!\ } void show_reader() //不带参的显示读者信息函数 { cout<<\☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆\\n\\n\ cout<<\姓名\\t\\t\\t班级\\t\\t\\t电话\\n\ for(int i=0;i

cout<<\☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆\\n\\n\ cout<<\姓名\\t\\t\\t班级\\t\\t\\t电话\\n\ cout<

cout<<\

cout<<\ } };

//********书籍结构体,用于存放书籍基本信息******** class Book {

private:

char bnum[10]; //书号 char bname[20]; //书名 char bauthor[10]; //作者 char rname[10]; //借阅人 public: int tag; //状态标记判断指标(已借/在架) Book() //构造函数初始化信息 {strcpy(bnum,\ void set_bnum(char *no) //设置书号 {strcpy(bnum,no);} //把字符串no中的字符复制到字符串bnum中 char *get_bnum() //获得书号 { return bnum;} //返回值为bnum void set_bname(char *n) //设置书名 {strcpy(bname,n);}

char *get_bname() //获得书名 {return bname;}

void set_bauthor(char *a) //设置作者 {strcpy(bauthor,a);}

char * get_bauthor() //获得作者姓名 {return bauthor;}

void set_tag(int t) //状态设置 {tag=t;}

void set_rname(char *rn) //设置借阅人 {strcpy(rname,rn);}

char *get_rname() //获得借阅人姓名 {return rname;}

void show_tag() //显示图书状态 { if(tag==1) {cout<<\已借\ else {cout<<\在架\ } void copy(Book m) //Book结构体copy函数 { strcpy(bnum,m.get_bnum()); //将获得书号函数里的返回值里的字符复制到bnum strcpy(bname,m.get_bname()); strcpy(bauthor,m.get_bauthor()); tag=0; } };

//**********书籍管理结构体,实现管理书籍功能********** class BookManage {

private: Book books[100]; //定义Book书籍结构体数组对象,最大容量100本 int length; void saveFile() //保存书籍文件 { ofstream fwrite; //定义输出文件流ofstream结构体对象fwrite if(!fwrite) {cout<<\文件保存失败!\\n\ } fwrite.open(BookFile,ios::binary);//使文件流与文件建立关联,以二进制方式打开 fwrite.write((char *)books,length*sizeof(Book)); //计算并返回所占字节数 fwrite.close(); //关闭磁盘文件 } void readFile() //读取书籍文件 { ifstream fread; //定义输入文件流对象fread length=0; if(!fread) {cout<<\文件读取失败!\

Book temp; //定义书籍结构体临时对象temp int i=0;

fread.open(BookFile ,ios::binary);//使文件流与文件建立关联,以二进制方式打开 while((fread.read((char *)&books[i],sizeof(Book)))) i++; //每读完一次,指针后移一位,直到不能读出正确结果为止 length=i; fread.close(); } public:

BookManage() //构造函数,读取磁盘文件 { length=0; //从头读起,计数,最大100 readFile(); //调用读取文件函数 }

~BookManage() //析构函数,保存磁盘文件 { saveFile(); //调用保存文件函数 }

bool add(Book book) //添加图书资料 { if(length>=100) { cout<<\对不起,储存已满,您无法继续添加!\\n\ return -1; } else

{ books[length].copy(book); //调用书籍结构体copy函数 length++;

return (length-1); } } int bnu_search(char *bnu) //按书号查找书籍 { for(int i=0;i

if(strcmp(books[i].get_bnum(),bnu)==0) //字符串比较,判断是否相等 return i; return -1; } int bna_search(char *bna) //按书名查找书籍 { for(int i=0;i

if(strcmp(books[i].get_bname(),bna)==0) //判断 return i; return -1; } int bau_search(char *bau) //按作者查找书籍 { for(int i=0;i

if(strcmp(books[i].get_bauthor(),bau)==0)//判断 return i; return -1; } int rn_search(char *rn) //按借阅人查找书籍 { for(int i=0;i

if(strcmp(books[i].get_rname(),rn)==0)//判断 return i; return -1; } void revise(Book book,int i)//带参的修改书籍函数 {books[i].copy(book);} //调用Book结构体copy函数 void deleteBook(int index)//带参的删除书籍资料函数 { for(int i=index;i

books[i].copy(books[i+1]);//用后面的地址将当前的地址覆盖 length--; } void show_book()//不带参的显示书籍函数

{ cout<<\☆☆☆☆☆☆☆☆☆☆☆书★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆\\n\\n\ cout<<\书号\ cout.width(10); cout<<\书名\ cout.width(10); cout<<\作者\ cout.width(17); cout<<\状态\ cout.width(25); cout<<\借阅人\\n\

for(int i=0;i

{ cout<

cout<

cout<

books[i].show_tag(); cout.width(20);

cout<

联系客服:779662525#qq.com(#替换为@)