| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8790 人关注过本帖, 2 人收藏
标题:我做的简易图书馆。
只看楼主 加入收藏
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏(2)
 问题点数:0 回复次数:65 
我做的简易图书馆。

程序说明书 一. 各模块的功能: readtxt(),读读者文件writetxt(),写读者文件addreader(reader s) ,添加读者delreader(int number),删除读者searchreader(int number),查找读者readerdata() ,读者数据管理readbtxt(),读图书文件writebtxt(),写图书文件addbook(libook s),添加图书delbook(int number),删除图书searchbook(int number),查找图书bookdata(),图书数据管理borbook(),读者借书retbook(),读者还书main()主函数 二. 程序流程图: void main() : 三. 用户手册:1,使用程序前先对图书库,读者库进行初始化,然后才能进行相应的操作2,本程序又一定的纠错功能 ①调用子函数对功能进行相应的选择的时候,如果选择的端子不正确,则提示错误 ②对添加的读者函数操作的时候如果读者库已经满了,读者申请的编号已经存在的情况则提示错误 ③对删除读者函数操作的时候,如果输入的读者编号不存在则提示错误 ④对查找读者函数操作的时候,如果输入的读者编号不存在的时候则提示错误 ⑤对新书入库函数操作的时候,如果书库已经满或者申请的书编号已经存在,则提示错误 ⑥对删除的图书函数进行操作的时候,如果要删除的图书编号不存在,则提示出错 ⑦对查找函数操作的时候,如果要查找的图书函数不存在,则提示出错 ⑧对借书函数进行操作时,如果读者编号不存在,不能在借书,所要借的书已经借出,或者要借的书不存在的时候,则提示出错 ⑨对还书函数操作的时候,如果读者编号不存在,所还图书不为图书馆所有时,则提示出错。 这是论坛上的一个题目,我看了在我之前那个人做的代码之后,受到了启发,就利用自己所学的有限的知识,花了一个星期的时间,终于做了出来。请大家批评指证。在VC6.0下运行通过,运行时得注意的几个地方如下:读者与书籍编号全部为3位,读者库,书籍库最好不要存满,至少留有一个空位.代码与注释,及原程序及原程序附件如下: #include <iostream.h> #include <fstream.h> #include <string.h> #include <iomanip.h> class reader { private: char code[4]; //读者编号 char name[10]; //读者姓名 public: void get() //输入读者资料 { cout<<"请输入读者编号:"; cin>>code; cout<<"请输入读者姓名:"; cin>>name; } void print() //打印读者资料 { cout<<"读者编号:"<<code<<endl; cout<<"读者姓名:"<<name<<endl; } char* getcode() { return(code); } char* getname() { return(name); } };

class book { private: char code[4]; //书籍编号 char name[10]; //书籍名称 char writer[10]; //书籍作者 char concern[10]; //书籍出版社 float price; //书籍价格 public: char flag; //判断此书是否借出 book() //利用构造函数,将flag变量默认为'N',即没有借出 { flag = 'N'; } void get() //输入书籍资料 { cout<<"请输入书籍编号:"; cin>>code; cout<<"请输入书籍名称:"; cin>>name; cout<<"请输入书籍作者:"; cin>>writer; cout<<"请输入书籍出版社:"; cin>>concern; cout<<"请输入书籍价格:"; cin>>price; } void print() { cout<<"书籍编号:"<<code<<endl; cout<<"书籍名称:"<<name<<endl; cout<<"书籍作者:"<<writer<<endl; cout<<"书籍出版社:"<<concern<<endl; cout<<"书籍价格:"<<price<<endl; } void getflag() { cout<<"确认要租此书吗?[Y/N]"; cin>>flag; } char* getcode() { return(code); } char* getname() { return(name); } };

class readerborrowbook //用于记录租书情况的类 { public: char readercode[4]; char bookcode[4];

void borrowbook() { cout<<"请输入您的读者编号:"; cin>>readercode; cout<<"请输入您要借的书籍的编号:"; cin>>bookcode; } void print() { cout<<"借书证号:"<<readercode<<endl; cout<<"借的书籍:"<<bookcode<<endl; }

};

reader readerzlk[50]; //定义读者库数组(读者库) book library[100]; //定义书籍数组(书籍库) readerborrowbook rbb[100]; //定义借书记录数组(借书库)

fstream file_reader; //定义读者库文件对象(全局的) fstream file_book; //定义书籍库文件对象(全局的) fstream file_rbb; //定义借书库文件对象(全局的)

int r = 0; //记录读者个数 int b = 0; //记录书籍本数 int t = 0; //记录借书记录

J3PLQ4U5.txt (16.5 KB) 我做的简易图书馆。

[此贴子已经被作者于2005-6-19 10:54:39编辑过]

搜索更多相关主题的帖子: 图书馆 
2005-06-07 19:55
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 

void CSHreader() //初始化读者库函数 { file_reader.open("readerfile.txt", ios::in); //打开文件 file_reader.read((char*)&readerzlk[0], sizeof(readerzlk[0]));//将文件内容读到读者库数组的第一个对象 if (strlen(readerzlk[0].getcode()) == 0)//判断第一个对象的内容是否为空,如为空,则文件为空 { cout<<"读者库信息为空,请建立读者信息。"<<endl; } else { while(!file_reader.eof())//否则将文件后面的内容读到读者库数组后面的对象之中,从而达到初始化的效果 { r++; file_reader.read((char*)&readerzlk[r], sizeof(readerzlk[r])); if (r >= 50) { cout<<"读者库已满!"<<endl; break; } } cout<<"初始化读者库成功……"<<endl; } file_reader.close(); }

void CSHbook() //初始化书籍库函数(注释同读者库一样) { file_book.open("bookfile.txt", ios::in); file_book.read((char*)&library[0], sizeof(library[0])); if (strlen(library[0].getcode()) == 0) { cout<<"书籍库信息为空,请建立书籍信息。"<<endl; } else { while(!file_book.eof()) { b++; file_book.read((char*)&library[b], sizeof(library[b])); if (b >= 100) { cout<<"书籍库已满!"<<endl; break; } } cout<<"初始化书籍库成功……"<<endl; } file_book.close(); }

void CSHrbb() //初始化借书库 { file_rbb.open("rbb.txt", ios::in); file_rbb.read((char*)&rbb[0], sizeof(rbb[0])); if (strlen(rbb[0].readercode) == 0) { cout<<"借书库信息为空,暂时无借书情况。"<<endl; } else { while (!file_rbb.eof()) { t++; file_rbb.read((char*)&rbb[t], sizeof(rbb[t])); if (t >= 100) { cout<<"借书库已满,请速让读者归还书籍。"<<endl; break; } } cout<<"初始化借书库成功……"<<endl; } file_rbb.close(); }

void borrowbook() //借书函数 { int d = 0; //逻辑判断值 int i = 0; char flag = 'y'; readerborrowbook temp; while (flag == 'y' || flag == 'Y') { temp.borrowbook(); for (i = 0; i < r; i++)//判断有无此读者编号 { if (strcmp(temp.readercode, readerzlk[i].getcode()) == 0) { d = 1; //为1则有此编号,否则无此编号 break; } } if (d == 0) { cout<<"对不起!您的编号不存在!"<<endl; return; } d = 0, i = 0; //恢复初始值,进行书的编号的判断 for (i = 0; i < b; i++) //判断有无此书籍编号 { if (strcmp(temp.bookcode, library[i].getcode()) == 0) { d = 1; //同上 break; } } if (d == 0) { cout<<"对不起!我们这里没有此书籍!"<<endl; return; } //判断书籍是否借出,本意是想通过".flag"是否等于'Y'或'y'来判断书是否借出的,可是总是判断不成功。 //本意是if (library[i].flag == 'Y' || library[i].flag == 'y') // {cout<<"非常抱歉,此书已经租出。"<<endl;return;} int j = 0; for (j = 0; j < t; j++) { if (strcmp(temp.bookcode, rbb[j].bookcode) == 0) { cout<<"非常抱歉,此书已经租出。"<<endl; return; } } library[i].getflag(); if (library[i].flag == 'Y' || library[i].flag == 'y') { file_rbb.open("rbb.txt", ios::app); library[i].print(); rbb[t] = temp; file_rbb.write((char*)&rbb[t], sizeof(rbb[t])); t++; cout<<"借书成功!请按时归还!"<<endl; file_rbb.close(); } else { cout<<"您不中意此书吗?借书未成功。"<<endl; } cout<<"要继续租书吗?[Y/N]"; cin>>flag; } }

void Printborrowbook() //查看借书情况函数 { int i = 0; for (i = 0; i < t; i++) { rbb[i].print(); cout<<endl; } }

void borrow() { char ch; cout<<"1.凭证借书 2.查看借书情况 3.退出"<<endl; cout<<"请输入功能代码:"; cin>>ch; switch (ch) { case '1': borrowbook(); break; case '2': Printborrowbook(); break; case '3': return; break; default: cout<<"输入错误,请重新输入:"<<endl; } }

void replacebook() //还书模块 { char bookcode[4]; int i = 0, d = 0;

cout<<"您要还的书籍的编号是:"; cin>>bookcode; for (i = 0; i < t; i++) { if (strcmp(bookcode, rbb[i].bookcode) == 0) { d = 1; //逻辑判断,为1则租出,否则没有租出 break; //因为书籍编号具有唯一性,故退出循环 } } if (d == 0) { cout<<"此书尚未租出或者不存在。"<<endl; return; } else { cout<<"此书租出情况如下:"<<endl; rbb[i].print(); } char flag; cout<<"确认要还此书吗?[Y/N]"; cin>>flag; if (flag == 'y' || flag == 'Y') { int p, j = 0; p = t - i; //P为要循环的次数 for (j = 0; j <= p; j++) { rbb[i] = rbb[i + 1]; i++; } t--; //以下为观察借书数组变化的代码 for (i = 0; i < t; i++) { rbb[i].print(); cout<<endl; } } }

void rbbwritefile() //将借书库删除内容后的数组写入文件,以达到还书的效果,在程序结束之前调用即可 { int i = 0; file_rbb.open("rbb.txt", ios::out); for (i = 0; i < t; i++) { file_rbb.write((char*)&rbb[i], sizeof(rbb[i])); } file_rbb.close(); }

void addreader() //增加读者函数 { if (r >= 50) { cout<<"读者库已经满,无法添加!"<<endl; return; }

char f = 'y'; int j = 0; int p = 0; //逻辑判断值 reader temp; file_reader.open("readerfile.txt", ios::app); while (f == 'Y' || f == 'y') { p = 0; //假设编号为不存在 temp.get(); for (j = 0; j < r; j++)//判断读者编号是否重复 { if (strcmp(temp.getcode(), readerzlk[j].getcode()) == 0) { cout<<"对不起!此读者编号已经存在!"<<endl; p = 1;//为1则存在,为0则不存在 } } if (p == 0) { readerzlk[r] = temp; file_reader.write((char*)&readerzlk[r], sizeof(readerzlk[r])); //写入读者库 cout<<"写入读者库成功……"<<endl; r++; } cout<<"要继续吗?[Y/N]"; cin>>f; } file_reader.close(); }

void addbook() //增加书籍函数 { if (b >= 100) { cout<<"读者库已经满,无法添加!"<<endl; return; }

char f = 'Y'; int j = 0; int p = 0; book temp; file_book.open("bookfile.txt", ios::app); while (f == 'Y' || f == 'y') { p = 0; temp.get(); for (j = 0; j < b; j++) { if (strcmp(temp.getcode(), library[j].getcode()) == 0) { cout<<"对不起!此书籍编号已经存在!"<<endl; p = 1; } } if (p == 0) { library[b] = temp; file_book.write((char*)&library[b], sizeof(library[b])); cout<<"写入书籍库成功……"<<endl; b++; } cout<<"要继续吗?[Y/N]"; cin>>f; } file_book.close(); }

void readerLC() //列出所有读者 { for (int j = 0; j < r; j++) { readerzlk[j].print(); cout<<endl; } }

void bookLC() //列出所有书籍 { for (int j = 0; j < b; j++) { library[j].print(); cout<<endl; } }

void readFind_code() //读者编号查找函数 { int j = 0; int p = 0; //保存对象下标 int d = 0; //逻辑判断值 char flag = 'Y'; char code[4]; while (flag == 'Y' || flag == 'y') { d = 0; //默认为没有找到 cout<<"请输入要查找的读者的编号:"; cin>>code; for (j = 0; j < r; j++) { if (strcmp(code, readerzlk[j].getcode()) == 0) { p = j; //将下标传给p d = 1; //为1则找到对象 break; //因为code具有唯一性,故后面的不用找了,所以跳出循环. } } if (d == 1) { readerzlk[p].print(); } else { cout<<"非常抱歉!没有找到你想要的!"<<endl; } cout<<"要继续查找吗?[Y/N]"; cin>>flag; } }

void bookFind_code() //书籍编号查找函数 { int j = 0; int p = 0; //保存对象 int d = 0; //逻辑判断值 char flag = 'Y'; char code[4]; while (flag == 'Y' || flag == 'y') { d = 0; //默认为没有找到 cout<<"请输入要查找的书籍的编号:"; cin>>code; for (j = 0; j < b; j++) { if (strcmp(code, library[j].getcode()) == 0) { p = j; //将下标传给p d = 1; //为1则找到对象 break; //因为code具有唯一性,故后面的不用找了,所以跳出循环. } } if (d == 1) { library[p].print(); } else { cout<<"非常抱歉!没有找到你想要的!"<<endl; } cout<<"要继续查找吗?[Y/N]"; cin>>flag; } }

void readFind_name() //读者姓名查找模块 { char name[10]; char flag = 'Y'; int d = 0; //逻辑判断值 while (flag == 'Y'|| flag == 'y') { d = 0; //默认为没有找到. cout<<"请输入要查找读者的姓名:"; cin>>name; for (int i = 0; i < r; i++) { if (strcmp(name, readerzlk[i].getname()) == 0) { d = 1; //找到记录,将d值变为1 readerzlk[i].print(); //因为姓名不具有唯一性,所以得循环完. cout<<endl; } } if (d == 0) { cout<<"非常抱歉!没有找到你想要的!"<<endl; } cout<<"要继续查找吗?[Y/N]"; cin>>flag; } }

void bookFind_name() //书籍名称查找模块 { char name[10]; char flag = 'Y'; int d = 0; while (flag == 'Y'|| flag == 'y') { d = 0; cout<<"请输入要查找书籍的名称:"; cin>>name; for (int i = 0; i < b; i++) { if (strcmp(name, library[i].getname()) == 0) { d = 1; library[i].print(); cout<<endl; } } if (d == 0) { cout<<"非常抱歉!没有找到你想要的!"<<endl; } cout<<"要继续查找吗?[Y/N]"; cin>>flag; } }

void readerFind() //读者查找 { char flag; while (1) { cout<<"1.按读者编号查找 2.按读者姓名查找 3.退出"<<endl; cout<<"请输入功能代码:"; cin>>flag; switch (flag) { case '1': //编号查找模块 readFind_code(); break; case '2': //姓名查找模块 readFind_name(); break; case '3': return; break; default: cout<<"输入错误,请重新输入:"<<endl; } } }


学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2005-06-07 20:03
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 

void bookFind() //书籍查找 { char flag; while (1) { cout<<"1.按书籍编号查找 2.按书名查找 3.退出"<<endl; cout<<"请输入功能代码:"; cin>>flag; switch (flag) { case '1': //按书籍编号查找模块 bookFind_code(); break; case '2': //按书名查找模块 bookFind_name(); case '3': return; break; default: cout<<"输入错误,请重新输入:"<<endl; } } }

void readerdelete() //读者删除 { char code[4]; int d = 0, i = 0, j = 0; cout<<"请输入要删除的读者的编号:"; cin>>code; for (i = 0; i < r; i++) //首先判断读者库有没有此读者 { if (strcmp(code, readerzlk[i].getcode()) == 0) { d = 1;//为1则有 break; } } if (d == 0) { cout<<"对不起,此读者不存在."<<endl; return; } d = 0, j = 0;//恢复初值,在借书库进行判断 for (j = 0; j < t; j++) { if (strcmp(code, rbb[j].readercode) == 0) { d = 1;//为1则有书未还 break; } } if (d == 1) { cout<<"此读者有书未还,还书后方可删除此读者."<<endl; return; } char flag; int p = r - i; cout<<"确认删除此读者吗?[Y/N]"; cin>>flag; if(flag == 'Y' || flag == 'y') { for (j = 0; j <= p; j++) //挪动读者数组; { readerzlk[i] = readerzlk[i +1]; i++; } r--; cout<<"读者删除成功"<<endl; }

for (i = 0; i < r; i++) { readerzlk[i].print(); cout<<endl; } }

void readerdeletefile() //删除读者文件上的操作 { int i = 0; file_reader.open("readerfile.txt", ios::out); for (i = 0; i < r; i++) { file_reader.write((char*)&readerzlk[i], sizeof(readerzlk[i])); } file_reader.close(); }

void librarydelete() //书籍删除 { char code[4]; int d = 0, i = 0, j = 0; cout<<"请输入要删除的书籍编号:"; cin>>code; for (i = 0; i < b; i++) //首先判断读者库有没有此读者 { if (strcmp(code, library[i].getcode()) == 0) { d = 1;//为1则有 break; } } if (d == 0) { cout<<"对不起,此书籍不存在."<<endl; return; } d = 0, j = 0;//恢复初值,在借书库进行判断 for (j = 0; j < t; j++) { if (strcmp(code, rbb[j].bookcode) == 0) { d = 1;//为1则有书未还 break; } } if (d == 1) { cout<<"此书未还,还后方可删除此书籍."<<endl; return; } char flag; int p = b - i; cout<<"确认删除此书籍吗?[Y/N]"; cin>>flag; if(flag == 'Y' || flag == 'y') { for (j = 0; j <= p; j++) //挪动读者数组; { library[i] = library[i +1]; i++; } b--; cout<<"书籍删除成功"<<endl; }

for (i = 0; i < b; i++) { library[i].print(); cout<<endl; } }

void librarydeletefile() //删除书籍文件上的操作 { int i = 0; file_book.open("bookfile.txt", ios::out); for (i = 0; i < b; i++) { file_book.write((char*)&library[i], sizeof(library[i])); } file_book.close(); }

void readerWH() //读者维护 { char flag; while (1) { cout<<"1.增加读者 2.删除读者 3.查找读者 4.列出所有读者 5.退出"<<endl; cout<<"请输入功能代码:"; cin>>flag; switch (flag) { case '1': addreader();//增加读者 break; case '2': readerdelete();//删除读者 break; case '3': readerFind();//查找读者 break; case '4': readerLC();//列出所有读者 break; case '5': return; break; default: cout<<"输入错误,请重新输入:"<<endl; } } }

void bookWH() //图书维护 { char flag; while (1) { cout<<"1.增加图书 2.删除图书 3.查找图书 4.列出所有图书书 5.退出"<<endl; cout<<"请输入功能代码:"; cin>>flag; switch (flag) { case '1': addbook();//增加图书 break; case '2': librarydelete();//删除图书 break; case '3': bookFind();//查找图书 break; case '4': bookLC();//列出图书 break; case '5': return; break; default: cout<<"输入错误,请重新输入:"<<endl; } } }

void main() { char ch,dh; cout<<"欢迎使用简易图书馆!"<<endl; CSHreader();//初始化读者库 CSHbook(); //初始化书籍库 CSHrbb(); //初始化借书库 stop: while(1) { cout<<"1. 进入系统 2.退出系统"<<endl; cout<<"请输入功能代码:"; cin>>ch; switch (ch) { case '1': while (1) { cout<<"1.借书 2.还书 3.图书维护 4.读者维护 5.返回上一层"<<endl; cout<<"请输入功能代码:"; cin>>dh; switch (dh) { case '1': //借书模块 borrow(); break; case '2': //还书模块 replacebook(); break; case '3': //图书维护 bookWH(); break; case '4': //读者维护 readerWH(); break; case '5': goto stop; break; default: cout<<endl<<"输入错误!请重新输入:"<<endl; } } case '2': rbbwritefile(); //重写借书库 librarydeletefile();//重写书籍库 readerdeletefile();//重写读者库 cout<<"谢谢您的使用!BYEBYE!"<<endl; return; break; default: cout<<endl<<"输入错误!请重新输入:"<<endl; } } }


学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2005-06-07 20:04
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
呵呵,是不是眼睛都花了啊,这是我学习C++以来写的最长的一个程序,大家看不习惯的话把附件下载后运行啊。

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2005-06-07 20:06
tary
Rank: 1
等 级:新手上路
帖 子:780
专家分:0
注 册:2004-10-5
收藏
得分:0 
不错!!!

[此贴子已经被作者于2005-6-7 21:09:50编辑过]



┌→¨ ≮我可以学会对你很冷落≯¨←┐ │  <却学不╓══╦══╖会将爱> │ │¨←┐ ╭╩╮哭‖哭╭╩╮ ┌→¨│ └──┘收 ╲╱ ◇‖◇ ╲╱回└──┘
2005-06-07 21:07
shan183
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2005-5-30
收藏
得分:0 
眼花缭乱,继续努力!
2005-06-08 16:06
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
我上传的附件呢?

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2005-06-08 19:28
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
顶一下。

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2005-06-19 10:51
lihuashiwd
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-6-19
收藏
得分:0 
呵呵
不错啊
我是学C语言的
不过看得懂这个

$$$$$$$$$$$$$$$$$$$$$$$ 玩游戏不如做游戏 决定学好编程!! E---mail: lihuashiwd@ qq: 233690170 ##################
2005-06-19 21:33
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
呵呵,看得懂就好。

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2005-06-20 01:15
快速回复:我做的简易图书馆。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017943 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved