1、课程名称:程序设计综合实训设计题目: 图书管理系统 姓 名:学 号:专业班级:指导老师:完成日期:1 设计任务1.1 设计目标利用所学知识,完成图书馆管理系统,经过实践加强对所学知识了解和巩固1.2设计内容建立图书馆管理系统,用户分为图书管理人员,读者。管理人员能够增加删除查看图书、读者。读者只能查看本身信息,和借还书1.3设计指标或要求管理人员能够访问任意图书和读者,而读者只能借还图书馆存在图书和查看自己信息。2 设计过程分析:因为管理系统用户有图书管理员和读者,但二者权限不一样,管理员有权访问全部图书信息和管理员信息,而读者只能访问全部图书信息和本身信息。所以她们相同点:全部能访问全部图书
2、信息不一样点:管理员能访问全部读者信息而管理员只能访问本身信息而不能访问其它读者信息;故此设计了三个类程序包含三个类:图书类(books),管理员类(manager),读者类reader,books类为抽象类,manager,和reader类为books类派生类。为了能让管理员和读者访问全部图书信息,全部全部继承了books类;而为了分出二者权限不一样,所以把全部读者信息做为一个链表作为管理员一个私有组员,而读者却只能放一个本身节点作为读者私有组员,然后分别设计各个类组员函数。2.1 程序功效Class books /虚基类 protected:books_node *broot;public
3、:books();/结构函数savebooks();/保留修改内容search_book();/查找某一本书print_books();/输出全部书信息virtual add_book()=0;/对于读者是还书,对于管理员添加书virtual delet_book()=0;/对于读者是借书,对于管理员是去掉某一本书;Class manager:public books /管理员类 protected:readers_node *rroot;public:manager(readers_node*);savereaders();add_book();/添加图书信息delet_book();/删除
4、图书search_reader();/查找读者信息add_reader();/添加读者delet_reader();/删除读者print_readers();/输出全部读者;class reader:public books/读者类private:readers_node* personnel;/存放读者本身信息public:reader(readers_node*);add_book();/还书reader_borrow();delet_book();reader_return();/借书print_me();/查看自己借书情况save_readers(readers_node*);2.2程
5、序步骤图开始菜单管理员菜单读者菜单添 删加 除图 图书 书添 删加 除读 读者 者借 还 查 查 看 看 所 自 有 身 图 信书 书 书 息 读者管理员图书维护读者维护后退后退后退后退后退3软件运行或测试结果(1)管理员身份登录:(2)读者身份登录:4 软件设计过程中碰到问题和处理措施因为编写前期做了大量设计工作,在编写过程中基础没有碰到难处理问题提,倒是在设计类时有些茫然,经过反复斟酌还是做了部分取舍,比如把读取读者文件放在了类外面等。5 总结经过此次课程设计学到了很多东西,对于c+对象含义有了深入认识,从而对类封装和设计有了一个新认识,不只是停留在表面,为以后学习积累了经验,设计不比编写
6、轻易,类设计好是整个程序写好前提,只有一个好计划才能写出好程序。不过也经过此次发觉了自己不足之处。总是:此次课程设计受益匪浅,动手能力大大增强;附录(程序源代码)#include#include#include#include#include#define max 3 typedef struct Bookschar book_name15;int total_num;int borrow_num;char book_num15;Books *next;books_node;typedef struct Readerschar reader_name15;char reader_no15;in
7、t reader_borrow_num;struct Reader_borrow_bookschar borrow_books_name15;char borrow_books_no15;reader_borrow_bookmax;Readers *next;readers_node;class books protected:books_node *broot;public:books();savebooks();search_book();print_books();virtual add_book()=0;virtual delet_book()=0;class manager:publ
8、ic books protected:readers_node *rroot;public:manager(readers_node*);savereaders();add_book();delet_book();search_reader();add_reader();delet_reader();print_readers();class reader:public booksprivate:readers_node* personnel;public:reader(readers_node*);add_book();reader_borrow();delet_book();reader_
9、return();print_me();save_readers(readers_node*);books:books()books_node *r;broot=new books_node;r=new books_node;r-next=NULL;broot=r;ifstream inFile;inFile.open(c:books.dat,ios:binary);if(inFile.is_open()=-1)coutcont open books.datnext=r-next;r-next=node;inFile.close();if(i2)cout临时没有图书数据next;ofstrea
10、m outFile;outFile.open(c:books.dat,ios:binary);while(L)outFile.write(char*)L,sizeof(books_node);L=L-next;outFile.close();books:search_book()char searchedbook15;coutsearchedbook;books_node *r;r=new books_node;r=broot-next;while(r)if(strcmp(searchedbook,r-book_name)=0)cout书名:book_name 书总量:total_num 借出
11、:borrow_num 书编号:book_numnext;if(r=NULL)cout对不起,没有此书next;while(r)cout书名: book_name 书总量:total_num 借出:borrow_num 书编号:book_numnext;delete r;manager:add_book()books_node *L;L=new books_node;L=broot;while(1)books_node *r;r=new books_node;r-next=NULL;coutr-book_name;coutr-book_num;r-borrow_num=0;coutr-tota
12、l_num;r-next=L-next;L-next=r;coutsign;if(sign=n|sign=N)break;broot=L;savebooks();manager:delet_book()char deleted15;coutdeleted; books_node *node,*L;node=new books_node;L=new books_node;node=broot;while(node-next)if(strcmp(deleted,node-next-book_name)=0)break;node=node-next;if(node-next=NULL) coutso
13、rry!There is no the book!next-borrow_num=0)node-next=node-next-next;savebooks()elsecout对不起,临时不能删除,因为还有没有归还书next;ofstream outFile;outFile.open(c:Readers.dat,ios:binary);while(L)outFile.write(char*)L,sizeof(readers_node);L=L-next;outFile.close();manager:add_reader()readers_node *L;L=new readers_node;L
14、=rroot;int sign=0;while(1)readers_node *r;r=new readers_node;r-next=NULL;coutr-reader_name;coutr-reader_no;r-reader_borrow_num=0;r-next=L-next;L-next=r;coutsign;if(sign=n|sign=N)break;root=L;savereaders();manager:delet_reader()char deleted15;coutdeleted; readers_node node,*L;node=new readers_node;L=
15、new readers_node;node=rroot;while(node-next)if(strcmp(deleted,node-next-reader_name)=0)break;node=node-next;if(node-next=NULL) coutsorry!There is no the reader!next=node-next-next;savereaders();manager:search_reader() readers_node *r;r=new readers_node;r=rroot-next;char reader15;coutreader;while(r)i
16、f(strcmp(reader,r-reader_name)=0)cout姓名:reader_name 编号:reader_no 借书总数:reader_borrow_numendl;for(int i=0;ireader_borrow_num;i+)cout书名:reader_borrow_booki.borrow_books_name 书编号:reader_borrow_booki.borrow_books_no;break;else r=r-next;if(!r)cout没有此人next;while(printL)cout姓名 编号 借书总数endl;coutreader_name re
17、ader_no reader_borrow_numendl;for(int i=0;ireader_borrow_num;i+)cout书名:reader_borrow_booki.borrow_books_name 书编号:reader_borrow_booki.borrow_books_no;printL=printL-next; delete printL;reader:reader(readers_node*node)(personnel)=new readers_node;personnel=node;reader:add_book()books_node*node;node=new
18、 books_node;node=broot-next;char returned15;coutreturned; for(int i=0;i=personnel-reader_borrow_num;i+)if(strcmp(returned,personnel-reader_borrow_booki.borrow_books_name)=0)break;if(i=personnel-reader_borrow_num+1)printf(不好意思,你没有此书);system(pause); elsewhile(node)if(strcmp(node-book_name,returned)=0)
19、break;else node=node-next;if(node)personnel-reader_borrow_num-;node-borrow_num-;savebooks();else cout对不起,没有你要还书或所还书被删除readerborrow_numnext;char borrowed15;coutborrowed;while(node)if(strcmp(node-book_name,borrowed)=0)break;else node=node-next;if(node&(node-total_num-node-borrow_num)0)strcpy(personnel
20、-reader_borrow_bookpersonnel-reader_borrow_num.borrow_books_name,node-book_name);strcpy(personel-reader_borrow_bookpersonnel-reader_borrw_num+.borrow_books_no,node-book_num);node-borrow_num+;savebooks();else cout对不起,没有你要借书或所要借书已经借完!endl;else cout对不起,你借书数量已经超出最大借数量endl;reader:print_me() cout姓名reader_
21、name 编号:reader_no 借书总数:reader_borrow_numendl;for(int i=0;ireader_borrow_num;i+)printf(书名:%s,书编号:%s,personnel-reader_borrow_booki.borrow_books_name,personnel-reader_borrow_booki.borrow_books_no)void Pause()getch();fflush(stdin);reader:reader_borrow()delet_book();reader:reader_return()add_book();reade
22、r:save_readers(readers_node *L)readers_node *root;root=new readers_node;root=L-next;ofstream outFile;outFile.open(c:Readers.dat,ios:binary);while(root)outFile.write(char)root,sizeof(readers_node);root=root-next;outFle.close();readers_node* read_readers()readers_node *r;r=new readers_node;r-next=NULL
23、;int flag=0;ifstream inFile;inFile.open(c:Readers.dat,ios:binary);if(inFile.is_open()=-1) coutcont open readers.datnext=r-next;r-next=node;inFile.close();if(flag2)cout暂无读者 endl; return r;elsereturn r;password()system(cls);char a=111111,b10,c;int n=0,k;cerrnnnnttt请输入密码,你将拥有3次机会:n;while(1)n+;k=0;coutt
24、tt输入密码:;while(1)c=getch();if(c=13)break;bk=c;k+;cerr*;bk=0;cout2)printf(你已经超出输入次数,系统将退出n);getch();if(strcmp(a,b)=0)break;else cout密码错误,请重新输入n;cerrn;void manager_menu_1(manager M)int N;while(1)coutn; cout 图书管图书管理系统 n; cout 菜单 n; coutn; cout增加图书 n; cout .删除图书 n;cout .查找图书 n;cout .输出全部 n; cout 退出请按0 n;
25、coutn; coutN;switch (N)case 1: M.add_book();getch();break;case 2: M.delet_book();getch();break;case 3: M.search_book();getch();break;case 4: M.print_books();getch();break;case 0: return;system(cls);void manager_menu_2(manager M)int N;while(1)coutn; cout 图书管图书管理系统 n; cout 菜单 n; coutn; cout增加读者 n; cou
26、t 删除读者 n;cout查找读者 n;cout输出全部 n; cout 退出请按0 n;coutn; coutN;switch (N)case 1: M.add_reader();getch();break;case 2: M.delet_reader();getch();break;case 3: M.search_reader();getch();break;case 4: M.print_readers();getch();break;case 0: return;system(cls);void manager_menu(readers_node*L)system(cls);pass
27、word();manager manager(L);int N;while(1)coutn; cout 图书管图书管理系统 n; cout 菜单 n; coutn; cout图书维护 n; cout读者维护 n; cout退出请按0 n;coutn; coutN;switch (N)case 1: system(cls); manager_menu_1(Manager);break;case 2: system(cls); manager_menu_2(Manager);break;case 0: return;system(cls);reader_menu(readers_node*L)char name15;coutname;readers_node* node;node=new readers_node;node=L-next;while(node)if(strcmp(nome,node-reader_name)=0)break;else node=node-next;if(node)reader Reader(node);int N;while(1)coutn; cout图书管图书管理系统 n; cout 菜单 n; coutn; cout借书 n; cout 还书 n;cout查找书