1、目 录1题目描述22功能分析33系统设计43.1程序总体结构43.2主功能模块设计53.2.1 图书管理功能53.2.2 读者管理功能53.2.3 借阅管理功能53.3程序设计63.4类与函数的设计与实现73.4.1读者类73.4.2图书类83.4.3读者类库93.4.4图书库类104运行与测试结果125小结166参考文献17 第 1 页1题目描述 请设计一个图书登记管理程序。该程序应该具有下列功能:(1) 通过键盘输入某本图书的信息,并能对图书进行增加、修改、删除和查找;(2) 通过键盘输入读者信息,并可以增加读者、修改读者、删除读者、查找读者和显示读者信息;(3) 实现借阅功能;(4) 实
2、现还书功能。【题目要求】(1) 按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序;(2) 图书信息应该包含:编号、书名、作者姓名、出版社、价格等;(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。【输入要求】应用程序运行后,在屏幕上显示一个菜单(菜单显示外观见前面的图示)。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。【输出要求】(1) 应用程序运行后,要在屏幕上显示一个菜单;(2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等
3、。第 2 页2功能分析 根据图书管理的实际要求,结合本系统开发的要求,对与本章所要介绍的“图书管理系统”的需求实现如下功能:1、书籍管理部分:书籍信息管理包括书籍信息的添加、书籍信息的修改、书籍信息的查询、书籍信息的删除等。2、 读者管理部分:读者信息管理包括添加读者信息、修改读者信息、删除读者信息、查询读者信息和读者借阅图书情况等。3、 借阅管理部分:这一部分包括借书信息管理和还书信息管理两部分。main()函数图书维护模块读者维护模块还书模块借书模块图1功能模块图第 25 页3系统设计3.1程序总体结构开始选择相应功能(04)4、读者维护2、还书1、借书5、离开3、图书维护1、 新增2、
4、更改3、 删除4、 查找5、 显示6、 全删1、 新增2、 更改3、 删除4、 查找5、 显示6、 全删图2程序结构图3.2主功能模块设计3.2.1 图书管理功能书籍信息管理:包括书籍信息的添加、书籍信息的修改、书籍信息的查询、书籍信息的删除、书籍信息的显示和书籍信息的全删等6部分功能。其中,书籍信息包括图书编号、书名、图书作者、出版社、价格已及是否在架。 3.2.2 读者管理功能读者信息管理:包括读者信息的添加、读者信息的修改、读者信息的查询和读者信息的删除、读者信息的显示和读者信息的全删等6部分功能。其中,读者信息包括读者姓名、读者编号和已借书数量及编号。3.2.3 借阅管理功能借书管理:
5、借阅信息包括图书编号、读者编号。还书管理:还书信息与借阅信息各部分明细相同。3.3程序设计/main() 函数的实现,程序的主界面的引导 void main() char choice; Book *b; while(choice!=0) cout endlendlttt 图 书 管 理 系 统nnn; cout ttt1 借 书nnttt2 还 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开 choice;switch (choice) case 1: 借书 cout 不存在该读者,不能借书 endl; cout 不存在该图书,不能借书 endl; .cou
6、t 该图书已借出,不能借书 endl; break; case 2: 还书cout 不存在该读者,不能还书 endl; cout 不存在该图书,不能还书 endl; break; case 3: 图书维护break; case 4: 读者维护break; default: cout已退出!; 3.4类与函数的设计与实现3.4.1读者类/实现对读者的信息的描述class Reader private: int tag; /删除标记 1:已删 0:未删 int no; /读者编号 char name10; /读者姓名 int borbookMaxbor;/所借图书 public: Reader()
7、 char *getname() return name; /获取姓名 int gettag() return tag; /获取删除标记 int 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;iMaxbor;i+) borbooki=0; void borrowbo
8、ok(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借书编号:; for(int i=0;iMaxbor;i+) if(borbooki!=0) cout borbooki ;
9、 cout endl; ;3.4.2图书类/实现对图书的描述,图书的编号,书名,借出,还入等class Book private: int tag;/删除标记 1:已删 0:未删 int no;/图书编号 char name20;/书名char author100;/作者char pub200;/出版社int price;/价格int onshelf;/是否再架 1:再架 2:已借 public: Book() char *getname() return name; /获取姓名 int getno() return no; /获取图书编号int getprice() return price
10、; int gettag() return tag; /获取删除标记 void setname(char na)/设置书名 strcpy(name,na); void setauthor(char au)/设置作者 strcpy(author,au); void setpub(char pu)/设置出版社 strcpy(pub,pu); void delbook() tag=1;/删除图书 void addbook(int n,char *na,char *au,char *pu,int t)/增加图书 tag=0; no=n; strcpy(name,na); strcpy(author,a
11、u); strcpy(pub,pu); price=t;onshelf=1; int borrowbook()/借书操作 if (onshelf=1) onshelf=0; return 1; return 0; void retbook()/还书操作 onshelf=1; void disp()/输出图书 cout setw(6) no setw(18) name setw(20) author setw(30) pub setw(6) price setw(10) (onshelf=1? 在架:已借) endl; ;3.4.3读者类库/实现建立读者的个人资料 class RDatabase
12、 private: 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.close(); /关闭 reader.txt void clear()/删除所有读者信息 top=-1; int addreade
13、r(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=top;i+) if (readi.getno()=readerid & readi.gettag()=0) return &readi; return NULL; void disp() /输出所有读者信息 for (int i=0;i=top;i+) readi.disp(
14、); 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(); ;3.4.4图书库类/实现对图书的维护,查找,删除等 class BDatabase private: int top; /图书记录指针 Book bookMaxb; /图书记录 public: BD
15、atabase()/构造函数,将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; int addbook(int n,char *na,char *au,char *pu,int t)/增加图书 Book *p=query(n); if (NULL=p) top+; booktop.addboo
16、k(n,na,au,pu,t); return 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 f
17、ile(book.txt,ios:out); for (int i=0;i=top;i+) if (booki.gettag()=0) file.write(char *)&booki,sizeof(booki); file.close(); ;4运行与测试结果运行程序,在主界面选择要进行的操作。选择3 图书维护操作,进入图书维护界面。选择1新增操作,依次输入图书信息。若有无用信息,可以选择3删除操作,或者2更改操作。输入完毕后,选择5显示操作,可以显示刚输入的信息,核对是否正确。界面上有3删除,4查找和6全删操作,可依次进行操作。0退出操作,离开图书维护界面,回到主界面。选择4读者维护,进行
18、读者信息的添加,删除,查找等操作。已有图书和读者,可以进行借书操作。在图书维护的显示操作和读者维护的显示操作都可以看出借书成功。经读者维护中的5显示操作,看出确实已经借书成功。下面进行还书操作。且可以通过图书维护中显示操作,说明图书以在架。5小结本课程设计的目的在于开发一个“图书管理系统”,真正成为图书管理提供的一个电子平台。需要注意的是,本设计所介绍的系统只是图书管理系统的一个框架,由于现实管理的复杂性,在实际信息系统的开发中,还需要用户对实际需求进一步明确,对系统功能进一步加强。从开始接到课程设计题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战。在这段时间里我学到了
19、很多知识也有很多感受。从对c+很不了解的状态,我开始独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次试验的成功都会让我兴奋好长一段时间。虽然我的作品不是很成熟,还有很多不足之处,但当看着自己的程序能够正常的运行,就已经是莫大的幸福和欣慰。我相信其中的酸甜苦辣都最终会化为甜美的甘泉。这次做课程设计的经历也会使我终身受益,我感受到做设计是要真真正正的用心去做的一件事,是真正自己学习的过程和研究的过程,没有学习就没有研究的能力,没有自己的研究,就不会有所突破,那也就不叫课程设计了。希望这次的经历能让我在以后的
20、学习中激励我继续进步。6参考文献1、郑阿奇,C#实用教程,电子工业出版社,2008.12、叶核亚,JAVA 2程序设计实用教程(第2版),电子工业出版社,2007.13、陈圣国,C+程序设计,西安电子科技大学出版社,2008.1附录(程序源代码)#include #include #include #include /输入/输出文件流类 using namespace std; const int Maxr=100;/最多的读者 const int Maxb=100;/最多的图书 const int Maxbor=5;/每位读者最多借五本书class Reader private: int t
21、ag; /删除标记 1:已删 0:未删 int no; /读者编号 char name10; /读者姓名 int borbookMaxbor;/所借图书 public: Reader() char *getname() return name; int gettag() return tag; int getno() return no; void setname(char na) strcpy(name,na); void delbook() tag=1; void addreader(int n,char *na) tag=0; no=n; strcpy(name,na); for(int
22、 i=0;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借书编号:; for(int i=0;iMaxbor;i+) if(bor
23、booki!=0) cout borbooki ; cout endl; ; class RDatabase private: int top; Reader readMaxr; public: RDatabase() 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.close(); void clear() top=-1; int addreader(int n,char *na)
24、 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=top;i+) if (readi.getno()=readerid & readi.gettag()=0) return &readi; return NULL; void disp() for (int i=0;i=top;i+) readi.disp(); void readerdata();/读者库维护 RDatabase() fstre
25、am 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 rname20; int readerid; Reader *r; while (choice!=0) cout nnttt读 者 维 护nnntt 1 新 增nntt 2 更 改nntt 3 删 除nntt 4 查 找nntt 5 显 示nntt
26、 6 全 删nntt 0 退 出 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(readerid); if (r=NULL) cout 该读者不存在 delbook
27、(); break; case 4: cout readerid; r=query(readerid); if (r=NULL) cout 该读者不存在disp(); break; case 5: disp(); break; case 6: clear(); break; default:cout已退出!;break; class Book private: int tag;/删除标记 1:已删 0:未删 int no;/图书编号 char name20;/书名char author100;/作者char pub200;/出版社int price;/价格int onshelf;/是否再架 1
28、:再架 2:已借 public: Book() char *getname() return name; /获取姓名 int getno() return no; /获取图书编号int getprice() return price; int gettag() return tag; /获取删除标记 void setname(char na) strcpy(name,na); void setauthor(char au) strcpy(author,au); void setpub(char pu) strcpy(pub,pu); void delbook() tag=1;/删除图书 voi
29、d addbook(int n,char *na,char *au,char *pu,int t) tag=0; no=n; strcpy(name,na); strcpy(author,au); strcpy(pub,pu); price=t;onshelf=1; int borrowbook() if (onshelf=1) onshelf=0; return 1; return 0; void retbook() onshelf=1; void disp() cout setw(6) no setw(18) name setw(20) author setw(30) pub setw(6
30、) price setw(10) (onshelf=1? 在架:已借) endl; ; class BDatabase private: int top; Book bookMaxb; public: BDatabase() 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; int addbook(int n,char *na
31、,char *au,char *pu,int t) Book *p=query(n); if (NULL=p) top+; booktop.addbook(n,na,au,pu,t); return 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.
32、gettag()=0) booki.disp(); BDatabase() fstream file(book.txt,ios:out); for (int i=0;i=top;i+) if (booki.gettag()=0) file.write(char *)&booki,sizeof(booki); file.close(); ;void BDatabase:bookdata() char choice; char bname18,bauthor20,bpub30; int bookid,bookpri; Book *b; while (choice!=0) cout nnnttt图
33、书 维 护 endlendl; couttt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0 退 出 choice;switch (choice) case 1: cout 输入图书编号: bookid; cout 输入图书书名: bname;cout 输入图书作者: bauthor;cout 输入图书出版社: bpub; cout 输入图书价格: bookpri;addbook(bookid,bname,bauthor,bpub,bookpri); break; case 2: cout 输入图书编号: bookid; b=query(bo
34、okid); if (b=NULL) cout 该图书不存在 endl; cout 输入新的书名: bname; b-setname(bname); cout 输入新的作者: bauthor; b-setauthor(bauthor); cout 输入新的出版社: bpub; b-setpub(bpub); cout 输入新的价格: bookpri; break; case 3: cout 读入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图书不存在 delbook(); break; case 4: cout 读入图书编号: bookid;
35、 b=query(bookid); if (b=NULL) cout 该图书不存在disp(); break; case 5: disp(); break; case 6: clear(); break; default:cout已退出!; void main() char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!=0) cout endlendlttt 图 书 管 理 系 统nnn; cout ttt1 借 书nnttt2 还 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开 choice;s