《图书管理系统C课程设计报告.pdf》由会员分享,可在线阅读,更多相关《图书管理系统C课程设计报告.pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、高级语言程序设计高级语言程序设计课程设计报告课程设计报告设计题目设计题目图书管理系统图书管理系统专专业业计算机科学与技术计算机科学与技术班班级级姓姓名名学学号号2007 年年 6 月月 5 日日共 19 页 2页2目目录录1.1.设计目标设计目标3 32.2.设计思想设计思想3 33.3.类及对象设计类及对象设计4 44.4.程序源代码程序源代码5 55.5.调试记录调试记录16166 6.总结总结1818共 19 页 3页3图书管理系统图书管理系统1设计目标设计目标设计一个小型的图书管理系统,用链表来存储读者的基本信息(包括姓名、读者编号、读者借书情况等) ,完成借书、还书、图书维护、读者维
2、护、离开等功能。2 2设计思想设计思想(1)设计 class Reader 读者信息库, 实现对读者信息的描叙;class RDatabase读者类库实现建立读者的个人资料;class Book 图书类,实现对图书的描述,图书的编号,书名,借出,还入等;class BDatabase 图书库类,实现对图书的维护,查找,删除等。以下是函数功能表:函数功能char *getname()获取姓名int gettag()获取删除标记int getno()获取读者编号void setname(char na)设置姓名以及编号void addreader(int n,char *na)增加读者void d
3、elbook()设置删除标记void borrowbook(int bookid)借书操作int retbook(int bookid)还书操作void disp()读出读者信息BDatabase()构造函数,将 book.txt 读到 book中int addbook(int n,char *na)增加图书Book *query(int bookid)查找图书void bookdata()图书库维护BDatabase()析构函数,将 book写到 book.txt 文件共 19 页 4页4(2)用类的成员函数对链表的数据进行操作,其功能如上表所列。(3)设计菜单来实现功能设计1、 借 书2、
4、 还 书3、 图 书 维 护4 、读 者 维 护0 、离 开3设计类及对象设计类及对象(1) 本程序定义了三个类,定义如下:class Readerprivate:char *getname() return name; /获取姓名int gettag() return tag; /获取删除标记int getno() return no; /获取读者编号void setname(char na) /设置姓名void delbook() tag=1; /设置删除标记 1:已删 0:未删void addreader(int n,char *na)/增加读者int retbook(int booki
5、d)/还书操作void disp()/读出读者信息;class RDatabaseprivate:int top; /读者记录指针Reader readMaxr;/读者记录public:RDatabase() /构造函数,将 reader.txt 读到 read中void clear()/删除所有读者信息int addreader(int n,char *na)/添加读者时先查找是否存在Reader *query(int readerid)/按编号查找void disp() /输出所有读者信息void readerdata();/读者库维护RDatabase() /析构函数,将 read写到
6、reader.txt 文件中;class Bookprivate:char *getname() return name; /获取姓名int getno() return no; /获取图书编号int gettag() return tag; /获取删除标记共 19 页 5页5void setname(char na)/设置书名void delbook() tag=1;/删除图书void addbook(int n,char *na)/增加图书int borrowbook()/借书操作void retbook()/还书操作void disp()/输出图书class BDatabasepriva
7、te:BDatabase()/构造函数,将 book.txt 读到 book中void clear()/全删int addbook(int n,char *na)/增加图书Book *query(int bookid)/查找图书void bookdata();/图书库维护BDatabase()/析构函数,将 book写到 book.txt 文件中;(2)分别利用类 class Reader 、class RDatabase、class Book 、classBDatabase 定义了各自的对象 Book bookMaxb、RDatabase ReaderDB; Reader*r; BDatab
8、ase BookDB; Book *b;对其函数进行调用实现各种功能。(3)主函数实现,调用各种函数。4程序源代码程序源代码#include #include #include #include /输入/输出文件流类using namespace std;const int Maxr=100;/最多的读者const int Maxb=100;/最多的图书const int Maxbor=5;/每位读者最多借五本书/读者类,实现对读者的信息的描述class Readerprivate:int tag; /删除标记 1:已删 0:未删int no; /读者编号char name10; /读者姓名i
9、nt borbookMaxbor;/所借图书public:Reader() char *getname() return name; /获取姓名int gettag() return tag; /获取删除标记共 19 页 6页6int getno() return no; /获取读者编号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;
10、iMaxbor;i+)borbooki=0;void borrowbook(int bookid)/借书操作for(int i=0;iMaxbor;i+)if (borbooki=0)borbooki=bookid;return;int retbook(int bookid)/还书操作for(int i=0;iMaxbor;i+)if(borbooki=bookid)borbooki=0;return 1;return 0;void disp()/读出读者信息cout setw(5) no setw(10) name借书编号:;共 19 页 7页7for(int i=0;iMaxbor;i+)
11、if(borbooki!=0)cout borbooki |;cout endl;/读者类库,实现建立读者的个人资料class RDatabaseprivate:int top; /读者记录指针Reader readMaxr;/读者记录public:RDatabase() /构造函数,将 reader.txt 读到 read中Reader s;top=-1;fstream file(reader.txt,ios:in);/打开一个输入文件while (1)file.read(char *)&s,sizeof(s);if (!file)break;top+;readtop=s;file.clos
12、e(); /关闭 reader.txtvoid clear()/删除所有读者信息top=-1;int addreader(int n,char *na)/添加读者时先查找是否存在Reader *p=query(n);if (p=NULL)top+;readtop.addreader(n,na);return 1;共 19 页 8页8return 0;Reader *query(int readerid)/按编号查找for (int i=0;i=top;i+)if (readi.getno()=readerid &readi.gettag()=0)return &readi;return NUL
13、L;void disp() /输出所有读者信息for (int i=0;i=top;i+)readi.disp();void readerdata();/读者库维护RDatabase() /析构函数,将 read写到 reader.txt 文件中fstream file(reader.txt,ios:out);for (int i=0;i=top;i+)if (readi.gettag()=0)file.write(char *)&readi,sizeof(readi);file.close();void RDatabase:readerdata()char choice;char rname
14、20;int readerid;Reader *r;while (choice!=0)cout nnttt 读 者 维 护nnntt 1 新 增nntt 2 更改nntt3 删 除nntt 4 查 找nntt 5 显 示nntt 6 全 删nntt 0 退出 choice;switch (choice)共 19 页 9页9case 1:cout readerid;cout rname;addreader (readerid,rname);break;case 2:cout readerid;r=query(readerid);if (r=NULL)cout 该读者不存在 endl;break;
15、cout rname;r-setname(rname);break;case 3:cout readerid;r=query(readerid);if (r=NULL)cout 该读者不存在 delbook();break;case 4:cout readerid;r=query(readerid);if (r=NULL)cout 该读者不存在disp();break;case 5:disp();共 19 页 10页10break;case 6:clear();break;default:cout输入错误,请从新输入:;break;/图书类,实现对图书的描述,图书的编号,书名,借出,还入等cl
16、ass Bookprivate:int tag;/删除标记 1:已删 0:未删int no;/图书编号char name20;/书名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);void delbook() tag=1;/删除图书void addbook(int n,char *na)/增
17、加图书tag=0;no=n;strcpy(name,na);onshelf=1;int borrowbook()/借书操作if (onshelf=1)onshelf=0;共 19 页 11页11return 1;return 0;void retbook()/还书操作onshelf=1;void disp()/输出图书cout setw(6) no setw(18) name setw(10)(onshelf=1? 在架:已借) endl;/图书库类,实现对图书的维护,查找,删除等class BDatabaseprivate:int top; /图书记录指针Book bookMaxb; /图书
18、记录public:BDatabase()/构造函数,将 book.txt 读到 book中Book b;top=-1;fstream file(book.txt,ios:in);while (1)file.read(char *)&b,sizeof(b);if (!file) break;top+;booktop=b;file.close();void clear()/全删top=-1;共 19 页 12页12int addbook(int n,char *na)/增加图书Book *p=query(n);if (NULL=p)top+;booktop.addbook(n,na);return
19、 1;return 0;Book *query(int bookid)/查找图书for (int i=0;i=top;i+)if (booki.getno()=bookid &booki.gettag()=0)return &booki;return NULL;void bookdata();/图书库维护void disp()for (int i=0;i=top;i+)if (booki.gettag()=0)booki.disp();BDatabase()/析构函数,将 book写到 book.txt 文件中fstream file(book.txt,ios:out);for (int i=
20、0;i=top;i+)if (booki.gettag()=0)file.write(char *)&booki,sizeof(booki);file.close();void BDatabase:bookdata()char choice;char bname40;int bookid;Book *b;while (choice!=0)共 19 页 13页13cout nnnttt 图 书 维 护 endlendl;couttt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显示ntt6 全 删ntt0 退 出 choice;switch (choice)case 1:
21、cout 输入图书编号: bookid;cout 输入图书书名: bname;addbook(bookid,bname);break;case 2:cout 输入图书编号: bookid;b=query(bookid);if (b=NULL)cout 该图书不存在 endl;break;cout 输入新的书名: bname;b-setname(bname);break;case 3:cout 读入图书编号: bookid;b=query(bookid);if (b=NULL)cout 该图书不存在 delbook();break;case 4:cout 读入图书编号: bookid;b=que
22、ry(bookid);if (b=NULL)共 19 页 14页14cout 该图书不存在disp();break;case 5:disp();break;case 6:clear();break;default:cout输入错误,请从新输入:;/main() 函数的实现,程序的主界面的引导void main()char choice;int bookid,readerid;RDatabase ReaderDB;Reader *r;BDatabase BookDB;Book *b;while(choice!=0)cout endlendlttt 图 书 管 理 系 统nnn;cout ttt1
23、 借书 nnttt2 还书nnttt3 图书维 护nnttt4 读 者 维 护nnttt0 离 开 choice;switch (choice)case 1:cout readerid;cout bookid;r=ReaderDB.query(readerid);/按编号查找共 19 页 15页15if (NULL=r)cout 不存在该读者,不能借书 endl;break;b=BookDB.query(bookid);if (b=NULL)cout 不存在该图书,不能借书borrowbook()=0)cout 该图书已借出,不能借书borrowbook(b-getno();break;cas
24、e 2:coutreaderid;cout bookid;r=ReaderDB.query(readerid);if (r=NULL)cout 不存在该读者,不能还书 endl;break;b=BookDB.query(bookid);if (b=NULL)cout 不存在该图书,不能还书 retbook();r-retbook(b-getno();break;case 3:BookDB.bookdata();break;case 4:ReaderDB.readerdata();break;共 19 页 16页16default:cout输入错误,请从新输入:;5.调试纪录调试纪录1、读者维护
25、界面,新增读者功能共 19 页 17页172、程序的主界面以及图书维护界面共 19 页 18页183、查找读者功能界面6总结总结通过这次课程设计,让我了解了更多关于设计时容易出现的错误,而且进一步的认识到平时学习积累的重要性。在刚进行编译的时候发现了很多的错误,都是平时应该注意的细节问题,还好与同学进行了很好的交流,得以纠正错误。由于能力问题,我只能设计这个简单的图书管理系统。它存在很多缺陷,在很多地方都存在不足。编写程序最重要的是谨慎,认真,因为哪怕是一个字符或一个标点的错误都会导致程序的错误,从而使程序无法调试运行。共 19 页 19页19由这次编写课程设计的过程中让我更加了解到了自己的不足,那就是对编写程序的经验不足以及对理论知识的掌握不够透彻,以致程序中还存在许多缺点。如: 在程序中还有部分功能不能按我的意识表达运行,当经人指点还是比较不错的实现了。参考资料参考资料本程序参考书本:本程序参考书本:C+C+程序设计课程设计程序设计课程设计高级语言高级语言 C+C+程序设计程序设计