1、数据结构图书系统二、结构图1.功能结构图图书管理系统新增图书信息的输入查询在架的图书信息恢复被删除图书信息为读者办理借书注册办理借书手续办理还书手续退出系统2.主流程图让用户选择要实行的操作.设置选择变量choiceStart输出提示借书 功能Choice=1还书 功能Choice=2图书 维护Choice=3读者 维护Choice=4退出 系统Choice=0StopChoice=其它数值提示输入错误三、程序设计的想法和具体思路图书管理系统分为图书管理和会员管理两大部分。设计一个图书类Book,包括一本图书的基本管理功能,具有以下私有数据:int tag。/删除标记 1:已删 0:未删int
2、 no。/图书编号char name20。/书名int onshelf。/是否再架 1:再架2:已借设计一个图书库类BDatabase,具有以下私有数据:int top。 /图书记录指针Book bookMaxb。 /图书记录在其构造函数中,将book.txt文件的所有录入读到book中。处理完毕,在析构函数中将book中的所有未删除记录笑道book.txt文件中,中间的处理是对book进行的。设计一个读者类Reader,包括一个读者的基本管理功能,具有以下私有数据:int tag。 /删除标记 1:已删 0:未删int no。 /读者编号char name10。 /读者姓名int borbo
3、okMaxbor。/所借图书设计一个读者库类RDatabase,具有以下私有数据:int top。 /读者记录指针Reader readMaxr。/读者记录在其构造函数中,将reader.txt文件的所有记录读到read中。处理完毕,在析构函数中将read中的所有未删除记录写到reader.txt文件中,中间的处理都是对reader进行的。四、参考文献1)谭浩强,C+程序设计,北京,清华大学出版社,2006年2)李振鹏,张小莉,郑艳娟,数据结构,中国铁道出版社,2007年3)杨小平,VisualC+项目案例导航,北京,科学出版社,2002年4)David Conger,软件开发:编程与设计,北
4、京,清华大学出版社,2006 年.5)Francis Glassborow Roberta Allen ,You Can Do It!C+编程新手互动教程,北京,人民邮电出版社,2005年五、课程设计总结心得体会选到这个课程设计题目的时候,感觉挺简单的,查找,增加,显示,统计,这些平时都学过,用过,但是实际操作中还是遇到了很多问题,所以特意到图书馆专门借了几本关于数据结构程序设计方面的书,同时也希望能把平时没有学好的地方好好补一补,能对知识有更深层次的理解.一切准备就绪,把平时写的相关的程序出来参考,对比,慢慢才找到一些感觉,把源程序写出来. 经过几天终于写完了程序的初稿,然后输入电脑,一编译
5、,发现错误几十个,还有好多警告,只得一条一条的看,一个一个的改,首当其冲的是再输入电脑过程中不小心漏掉的标点符号,有些括号忘了,有些是忘了写分号等粗心导致的小毛病,这些错误很容易改正.到后面的错误就有些麻烦了,当中有个头文件忘了写,编译过程中好几十个错误就是改不过来,后来和同学讨论才知道原来错在什么地方,这样一下就变成了几个错误,这时信心大增,有些错误都看不懂错在那里,因为英文水平不太好,只好去查字典,还要推敲这个单词在这里到底是哪个意思,再加上以往的经验和同学的帮助下,好不容易才得到零错误零警告,那时真开心,我的程序终于可以运行了,激动的按下运行,得到了预想的界面,按照提示操作,都很顺利,一
6、个一个的实验每一个功能,都以为成功了,当运行到了删除功能时,突然出现死循环,只见操作界面不停的闪.这是逻辑错误,很难找,后来只有一步一步的,一句一句的检查,找到了错误的根源,并改正.从进入大学来,我们学习了C+,数据结构。特别是高老师的认真授课,精心讲解下,同学们学到了很多东西,知识方面的很多,还有平时心的习惯也养成了.这对我们以后的学习生活很有好处,最后感谢常老师一学期以来对我们的教育帮助,对我们程序设计时的辅导.六、程序运行结果附录:源代码#include #include #include #include /输入/输出文件流类using namespace std。const int
7、Maxr=100。/最多的读者const int Maxb=100。/最多的图书const int Maxbor=5。/每位读者最多借五本书/读者类,实现对读者的信息的描述class Reader private: int tag。 /删除标记 1:已删 0:未删 int no。 /读者编号 char name10。 /读者姓名 int borbookMaxbor。/所借图书 public: Reader( char *getname( return name。 /获取姓名 int gettag( return tag。 /获取删除标记 int getno( return no。 /获取读者编
8、号 void setname(char na /设置姓名 strcpy(name,na。 void delbook( tag=1。 /设置删除标记 1:已删 0:未删 void addreader(int n,char *na/增加读者 tag=0。 no=n。 strcpy(name,na。 for(int i=0。i borbooki=0。 void borrowbook(int bookid/借书操作 for(int i=0。i if (borbooki=0 borbooki=bookid。 return。 int retbook(int bookid/还书操作 for(int i=0。
9、i if(borbooki=bookid borbooki=0。 return 1。 return 0。 void disp(/读出读者信息 cout no name借书编号:。 for(int i=0。i if(borbooki!=0 cout borbooki |。 cout /构造函数,将reader.txt读到read中 Reader s。 top=-1。 fstream file(reader.txt,ios:in。/打开一个输入文件 while (1 file.read(char *&s,sizeof(s。 if (!filebreak。 top+。 readtop=s。 file
10、.close(。 /关闭 reader.txt void clear(/删除所有读者信息 top=-1。 int addreader(int n,char *na/添加读者时先查找是否存在 Reader *p=query(n。 if (p=NULL top+。 readtop.addreader(n,na。 return 1。 return 0。 Reader *query(int readerid/按编号查找 for (int i=0。i if (readi.getno(=readerid & readi.gettag(=0 return &readi。 return NULL。 void
11、disp( /输出所有读者信息 for (int i=0。i readi.disp(。 void readerdata(。/读者库维护 RDatabase( /析构函数,将read写到reader.txt文件中 fstream file(reader.txt,ios:out。 for (int i=0。i if (readi.gettag(=0 file.write(char *&readi,sizeof(readi。 file.close(。 。void RDatabase:readerdata( char choice。 char rname20。 int readerid。 Reader
12、 *r。 while (choice!=0 cout 读者维护:t1新增t2更改t3删除t4查找t5显示t6全删t0退出 choice。 switch (choice case 1: cout readerid。 cout rname。 addreader (readerid,rname。 break。 case 2: cout readerid。 r=query(readerid。 if (r=NULL cout 该读者不存在 endl。 break。 cout rname。 r-setname(rname。 break。 case 3: cout readerid。 r=query(rea
13、derid。 if (r=NULL cout 该读者不存在 delbook(。 break。 case 4: cout readerid。 r=query(readerid。 if (r=NULL cout 该读者不存在disp(。 break。 case 5: disp(。 break。 case 6: clear(。 break。 default:cout char *getname( return name。 /获取姓名 int getno( return no。 /获取图书编号 int gettag( return tag。 /获取删除标记 void setname(char na/设
14、置书名 strcpy(name,na。 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。 return 0。 void retbook(/还书操作 onshelf=1。 void disp(/输出图书 cout no name /构造函数,将book.txt读到book中 Book b。 top=-1。 fstream file(book
15、.txt,ios:in。 while (1 file.read(char *&b,sizeof(b。 if (!file break。 top+。 booktop=b。 file.close(。 void clear(/全删 top=-1。 int addbook(int n,char *na/增加图书 Book *p=query(n。 if (NULL=p top+。 booktop.addbook(n,na。 return 1。 return 0。 Book *query(int bookid/查找图书 for (int i=0。i if (booki.getno(=bookid &boo
16、ki.gettag(=0 return &booki。 return NULL。 void bookdata(。/图书库维护 void disp( for (int i=0。i if (booki.gettag(=0 booki.disp(。 BDatabase(/析构函数,将book写到book.txt文件中 fstream file(book.txt,ios:out。 for (int i=0。i if (booki.gettag(=0 file.write(char *&booki,sizeof(booki。 file.close(。 。void BDatabase:bookdata(
17、char choice。 char bname40。 int bookid。 Book *b。 while (choice!=0 cout 图书维护:t1新增t2更改t3删除t4查找t5显示t6全删t0退出 choice。 switch (choice case 1: cout 输入图书编号: bookid。 cout 输入图书书名: bname。 addbook(bookid,bname。 break。 case 2: cout 输入图书编号: bookid。 b=query(bookid。 if (b=NULL cout 该图书不存在 endl。 break。 cout 输入新的书名: b
18、name。 b-setname(bname。 break。 case 3: cout 读入图书编号: bookid。 b=query(bookid。 if (b=NULL cout 该图书不存在 delbook(。 break。 case 4: cout 读入图书编号: bookid。 b=query(bookid。 if (b=NULL cout 该图书不存在disp(。 break。 case 5: disp(。 break。 case 6: clear(。 break。 default:cout 函数的实现,程序的主界面的引导void main( char choice。 int boo
19、kid,readerid。 RDatabase ReaderDB。 Reader *r。 BDatabase BookDB。 Book *b。 while(choice!=0 cout endlendlttt图书管理系统n 。 cout 1借书t2还书t3图书维护t4读者维护t0离开 choice。 switch (choice case 1: cout readerid。 cout bookid。 r=ReaderDB.query(readerid。/按编号查找 if (NULL=r cout 不存在该读者,不能借书。 if (b=NULL cout 不存在该图书,不能借书borrowboo
20、k(=0 cout 该图书已借出,不能借书borrowbook(b-getno(。 break。 case 2: coutreaderid。 cout bookid。 r=ReaderDB.query(readerid。 if (r=NULL cout 不存在该读者,不能还书 。 if (b=NULL cout 不存在该图书,不能还书 retbook(。 r-retbook(b-getno(。 break。 case 3: BookDB.bookdata(。 break。 case 4: ReaderDB.readerdata(。 break。 default:cout输入错误,请从新输入:。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1