图书馆管理系统c++课设报告(附源代码).doc_第1页
图书馆管理系统c++课设报告(附源代码).doc_第2页
图书馆管理系统c++课设报告(附源代码).doc_第3页
图书馆管理系统c++课设报告(附源代码).doc_第4页
图书馆管理系统c++课设报告(附源代码).doc_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计语言课程设计报告图书馆管理系统目录1、 需求分析.32、系统总框图.33、每个模块的设计分析.44、列出所有定义的函数及说明.75、比较有特色的算法.206、存在的问题与不足及对策.277、使用说明.298、程序源代码.341 需求分析以往,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较繁琐。在借书时,读者首先将要借的书好借阅证交给工作人员,然后工作人员将每本书的信息卡片好读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息。在还书时,读者首先将要还的书交给工作人员,然后工作人员根据图书信息找到相应的书卡好借阅证,并填写相应的还书信息。南京航空航天大学的图书馆有许多书,如果靠人工的方式来进行管理,那么工作量会非常大。图书的统计和管理会成为让人头疼的问题,读者借阅图书进行登记也会十分的不方便。这时,利用计算机来为我们进行这些统计管理的工作,可以给我们的生活带来大大的便利,并且提高工作效率。由于条件有限,只能使用键盘输入书的信息,所以在输入图书的ISBN号时有些麻烦。所以在课设里,简化了ISBN号,没有输入书本的真实ISBN号。在现实生活中,采用扫描的方式录入ISBN号会更加准确,高效。2 系统总框图读者注册查找图书管理员登陆帮助退出系统读者中心修改密码注销帐户查看借书情况借还图书返回菜单书单信息中心添加新书删除图书清空全部修改图书显示全部返回菜单查找菜单按ISBN号按书名按出版商按作者关键字搜索显示所有返回菜单可选择保存,也可不保存图书管理系统读者登陆打开文本文件,读取提示信息注册后返回主菜单3 每个模块的设计分析(1) 主界面模块当进入该管理系统时候,提示相应的说明,够让使用者了解该如何进行操作。同时还要具有美观性。用户通过键盘输入选择,程序通过检测输入内容进行比对,调用不同的函数,从而实现不同的功能。并且,在输入错误数据时程序不会崩溃。(2) 读者注册模块新用户使用该管理系统时,可以通过注册获得一个属于自己的账号。注册模块要引导读者完成一步步的注册步骤,并且在最后把注册所得账号告知读者。在注册时,用了避免用户输错设定的密码,所以采用了输入两次的方式。如果两次输入的结果是一致的,那么就完成账号的注册。如果两次输的密码不一致,则用户需要重新输入设定的密码。这样的方式可以保证每一次的注册都是有效的,避免了用户因为输入错误,无法找回自己的密码。(3) 读者中心模块读者登陆成功之后才可以进入该模块。在该模块,读者可以进行密码重置,注销,查看借书情况,借书,还书。并且也设有返回菜单功能。注销帐户时,要考虑到删去该读者节点之后不能影响到整个链表的连续性。所有函数均封装在ReaderList类中,信息存储在Reade类r中,ReaderList类中定义了三个个Reader*指针,一个是head_point, 作为链表的头结点;一个是tail_point,作为链表的尾指针;另一个是point,作为活动指针,在不同的类的成员函数中都可使用。为了防止该活动指针使用过频,造成几个函数同时使用同一个指针指向不明,在有些函数里还定义了一些临时指针。(4) 借书还书模块读者在登录之后才可以进行借书,还书。借还书函数会分别调用读者链表和书单链表中的借还书函数,并且在调用这些函数之前会先进行借还书检查。比如,你不能还你没有借过的书,也不能超过限定数目借书。用户需先登录,借还时要输入ISBN号。以借书为例。借书操作调用的直接函数为:int ReaderList:Borrow(BookList*g, Reader *p, string bookISBN);它会调用四个函数来完成借书操作:bool BookList:Check_borrow_book(string ISBN_Of_Book) /Booklist中的借书检查void BookList:borrow_book(string ISBN_Of_Book) /Booklist中的借书手续bool ReaderList:Check_borrowBook(Reader*p, string BookISBN) /ReaderList中的借书检查void ReaderList:borrowBook(Reader*p, string BookISBN) /ReaderList中的借书手续在Booklist和ReaderList的类中都有借书检查和借书手续函数。首先会调用借书检查函数,如果不满足借书条件则不会继续借书的操作。只有在两个借书检查都返回true的时候才会进行借书操作,防止了在书类链表中借了书却在读者类链表中没有借书的情况,实现了两个链表借书的同步性。因为添加图书时会保证ISBN号的唯一性,如果有ISBN号相同的图书则不会成功添加到书类链表。借书函数都是通过ISBN号查找图书的,所以借书时不会有借错书的情况。(5) 查找图书模块用户不需要登陆就可以使用该模块。用户可以通过ISBN号,书名,出版社,作者对图书进行精确的查找。同时,为了提高用户的使用质量,增加了输入关键字搜索功能。输入查找信息后,程序会对图书的ISBN号,书名,出版社以及作者等信息进行比对,并且显示所有满足搜索条件的结果。这样,读者在搜索时的自由度就增加了。关键字搜索函数是通过string类中自带的find()函数实现的,所以减小了工作量。增加了显示全部图书的功能,便于满足用户需求。增加了返回主菜单的功能,提高了程序的连续操作性。(6) 管理图书模块要输入管理员密码以后才可以进入图书管理菜单。为了安全性,管理员在登录之后可以选择修改自己的密码。并且,这个密码在退出系统时可以保存下来,下一次打开程序时的密码就会使修改后的密码了。书单信息菜单里,可以对图书进行添加,删除,清空,修改,显示所有。都是分别调用了BookList类中的函数,对整个书单链表进行了一系列操作。在修改时会进入图书修改菜单在搜索书的ISBN号之后会返回该本书的指针,对该本书的信息进行一系列修改,并且也可以返回上级书库信息菜单。(7) 读取保存信息模块信息的读取和保存分为三大部分,读者信息,书单信息,管理员信息的保存。而这三个部分的信息又分别由六个函数负责读取和保存。在保存文件里,链表中的信息会依次存入txt文件。在读取时,会先将信息存入一个类的数组里,然后将类的数组依次存入链表里。系统在打开时会自动从文件里面读取上次存储的信息,在退出系统时可以选择保存或不保存本次操作的结果。如果要保存,则会将操作后的链表存入文件,刷新数据。总的来说,程序的各个菜单都有比较清晰的结构,也都有返回上级菜单的功能。基本上所有的函数都考虑到了读者输入错误数据的情况,并且能够进行一定的处理,具有较强的健壮性,不容易崩溃。4 列出所有定义的函数及说明管理员类中的函数#ifndef LIBRARIAN_H_INCLUDED#define LIBRARIAN_H_INCLUDED#includeclass Librarianprivate: string password;public: Librarian() password=880128; Librarian(string a) password=a; Librarian() password=; void changePassword(string a) password=a; int changePassword()/重载修改密码函数 cout是否需要修改管理员密码?按0表示确定,按其他任意键表示不需要修改:choice; if(choice=0) cout请设置新密码:password; cout修改成功!endl; return 0; else return 0; bool Login()/管理员登陆 cout 请输入管理员密码: pass; if (pass = password) cout 成功登录! endl; changePassword(); else cout 密码错误! endl; return false; system(pause);return true;string getPassword() return password;#endif / LIBRARIAN_H_INCLUDED书类中的函数#ifndef BOOK_H_INCLUDED#define BOOK_H_INCLUDED#include#include#includeusing namespace std;class BookList;class Book friend class BookList; friend void saveBooks(BookList*p);friend void readBooks(BookList*p);protected:string ISBN;string Kind; /图书分类string BookName; /书名string Writer;/作者名string Publisher;/出版商int number; /单个书的本数Book *next; /指向下一个节点的指针public:Book();Book(string isbn, string kind, string name, string writer, string publisher, int number); void copyBook(string isbn, string kind, string name, string writer, string publisher, int number); void copyBook(Book* p);void setISBN(string tem);void setKind(string tem);void setBookName(string tem);void setWriter(string tem);void setPublisher(string tem);void setNumber(int tem);void operator=(const Book &book);/运算符重载void setBook();/重新设定该本书的所有信息void displayBook();/展示一本书virtual void Add_list(class Book *p)/把书加入链表 next = p; p-next = NULL; virtual void AddNewBook()/添加新书并且设置它的信息 next = new class Book; next-setBook(); cout 已经成功添加新书: displayBook(); virtual void show_all()/显示所有书 system(cls); displayBook(); while (next!= NULL) next-displayBook(); next = next-next; ;#endif / BOOK_H_INCLUDED书链表类中的函数#ifndef BOOKLIST_H_INCLUDED#define BOOKLIST_H_INCLUDED#include#include#includeBook.husing namespace std;class ReaderList;class BookList;class Book;class BookList:public Book/书类的链表private:class Book *head;/头指针class Book *tail; /尾指针class Book *node; /活动指针static int N;public:friend ReaderList;friend void saveBooks(BookList*p);/保存图书到txt文件的函数BookList();BookList();void Add_list(class Book *p);/把一本书加入图书链表void AddNewBook();/添加一本书到链表里,并且设置它的各类信息bool Check_borrow_book(string ISBN_Of_Book);/检查是否有这一本书,并且它是否有库存 返回是否能借书的布尔变量void borrow_book(string ISBN_Of_Book);/在书类链表里的借书操作bool Check_return_book(string ISBN_Of_Book);/检查是否存在这本书void return_book(string ISBN_Of_Book);/在书类链表里进行还书操作class Book* search_ISBN(string isbn);/按ISBN查找图书,并且返回一个Book*void search_BookName(string bookname);/按书名查找并展示所有查找结果void search_Writer(string writer);/按作者名查找并展示所有查找结果void search_Publisher(string publisher);/按出版社查找并展示所有查找结果void search_keyword(string key);/按关键字查找并展示所有查找结果int search();/查找图书的菜单 用来调用其他的查找函数void show_all();/显示书库中的所有图书bool delete_onebook(string ISBN_Of_Book);/从链表中删除一本书int change_content(string ISBN_Of_Book);/图书修改菜单 用来调用不同的改变图书信息的函数int GoInto_BookInfo();/书库信息菜单,用来调用对图书管理的各种操作;#endif / BOOKLIST_H_INCLUDED读者类中的函数#ifndef READER_H_INCLUDED#define READER_H_INCLUDED#include#includeusing namespace std;class ReaderList;class Reader friend ReaderList; friend void saveReaders(ReaderList*g); friend void readReaders(ReaderList*g);protected:int ReaderID;string ReaderName; /读者姓名string Password; /密码string BookInHand5;/每人最多借5本书,可以根据需要增减限额int numberOfBooks; /记录借的书的数目,0为没有借书,1为借了一本,2为借了二本Reader *next; /指向下一节点的指针public:Reader();Reader();Reader(int ID,string name, string mi, string books5, int num);void setReader(int ID, string name, string mi, string books5, int num); void copyReader(Reader* p);void operator=(const Reader &reader);/运算符重载void resetPassword(string newpassword);/重设密码virtual void Add_Point(Reader *p)/添加一个读者节点 next=p; p-next=NULL;virtual void change_password() string newpassword; cinnewpassword; Password=newpassword;#endif / READER_H_INCLUDED读者链表类中的函数#ifndef READERLIST_H_INCLUDED#define READERLIST_H_INCLUDED#include#include#include#include#includeBookList.h#includeReader.husing namespace std;class BookList;class ReaderList;class Reader;class ReaderList:public Readerprivate: friend void saveReaders(ReaderList*g);Reader*head_point;Reader*tail_point;Reader*point; /定义两个Rreader指针,head_point为头指针,point为活动指针public:static int numberOfReader;ReaderList();/构造函数,使指针初始化ReaderList();void Add_Point(Reader *p); /增加新结点到链表void reader_register(); /读者注册Reader* search_ReaderID(int id); /按ID查找Reader* reader_land(int id,string passwordT); /读者登录,成功后将返回该读者的Reader*void show_OneReader(Reader *p,BookList*g); /显示某读者借书情况void change_password(Reader*p); /修改密码int delete_reader(Reader*p); /读者注销bool Check_borrowBook(Reader*p, string BookISBN);/检查是否可以借书void borrowBook(Reader*p, string BookISBN);/进行借书操作bool Check_returnBook(Reader*p, string BookISBN);/检查是否可以还书void returnBook(Reader*p, string BookISBN);/进行还书操作int Borrow(BookList*g, Reader *p, string bookISBN);/借书操作的总的函数,用来调用书类链表和读者类链表里的借书相关函数int Return(BookList*g,Reader *p, string bookISBN);/还书操作的总的函数,用来调用书类链表和读者类链表里的还书相关函数int GoInto_ReaderInfo(Reader*p,BookList*g); /登陆后的读者信息菜单;#endif / READERLIST_H_INCLUDED不在类中的函数帮助函数void help()system(cls);ifstream readHelp;readHelp.open(help.txt, ios:in);if (readHelp.fail()cout 无法打开文件! endl;exit(0);string temp;cout endl;while (!readHelp.eof()getline(readHelp, temp);cout temp endl;存储读取相关的函数void saveLibrarian(Librarian *t) ofstream saveLibrarian; saveLibrarian.open(Librarian.txt,ios:out); if(!saveLibrarian) cout保存管理员信息失败!endl; exit(0); saveLibrariangetPassword(); coutendl成功保存管理员信息!endlendl; saveLibrarian.close();void readLibrarian(Librarian *t) string tem; ifstream saveLibrarian; saveLibrarian.open(Librarian.txt,ios:in); if(!saveLibrarian) cout保存管理员信息失败!tem; t-changePassword(tem); coutendl成功读取管理员信息!endlendl; saveLibrarian.close();void saveBooks(BookList*p) ofstream saveBook; saveBook.open(Books.txt,ios:out); if(!saveBook) cout保存书单信息失败!head; int i=0; cout-endlendl; do i+; cout正在保存第i本书:BookNameendlendl; saveBookISBN Kind BookName Writer ; saveBookPublisher numbernext; while(tem!=NULL); cout书单信息保存完毕!endlendl; cout-endlendl; saveBook.close();void saveReaders(ReaderList*g) ofstream saveReader; saveReader.open(Readers.txt,ios:out); if(!saveReader) cout保存读者信息失败!head_point; cout-endlendl; do i+; cout正在保存第i个读者:ReaderNameendlendl; saveReaderReaderID ReaderName Password ; for(int i=0;iBookInHandi=) saveReader empty ; else saveReaderBookInHandi ; saveReadernumberOfBooksnext; while(tem!=NULL); cout读者信息保存完毕!endlendl; cout-endlendl; saveReader.close();void readBooks(BookList*p) ifstream readBooks; readBooks.open(Books.txt,ios:in); if(!readBooks) coutendl; cout读取书单信息失败!endl; exit(0); int i=0; string s5; int k=0; int temp_num=0; coutendl; cout-endl; do i+; for(k=0;ksk; readBookstemp_num; if(readBooks.fail() / if(i!=1)&(booksi-1.ISBN=booksi.ISBN) break; p-Add_list(&booksi); booksi.copyBook(s0,s1,s2,s3,s4,temp_num); coutendl; cout正在读取第i本书:s2endl; while(!readBooks.eof(); readBooks.close(); coutendl; cout书单信息读取完毕!endlendl; cout-endl; coutendl;void readReaders(ReaderList*g) string books5; ifstream readReaders; readReaders.open(Readers.txt,ios:in); if(!readReaders) cout读取读者信息失败!endl; exit(0); int id; string name,password; string b0,b1,b2,b3,b4; int num=0; int i=0; int k=0; coutendl; cout-endlidnamepasswordb0b1b2b3b4num; if(readReaders.fail() break; books0=b0; books1=b1; books2=b2; books3=b3; books4=b4; for(k=0;kAdd_Point(&readersi); cout正在读取读第i个读者:idnameendlendl; while(!readReaders.eof(); cout读者信息读取完毕!endlendl; cout-endl; coutendl; readReaders.close();退出时跳出询问保存的函数void exit_message(BookList*p, ReaderList*g,Librarian*t) int result=MessageBox(NULL,TEXT(是否需要保存本次操作?),TEXT(退出图书馆管理系统), MB_ICONINFORMATION|MB_YESNO); switch(result) case IDYES: saveLibrarian(t); saveBooks(p); saveReaders(g); MessageBox(NULL,TEXT(已经保存),TEXT(YES),MB_OK);break; case IDNO:MessageBox(NULL,TEXT(未保存),TEXT(NO),MB_OK);break; exit(0);菜单界面函数void menu(BookList*p, ReaderList*g,Librarian*t)Book * temBook = NULL;/主菜单cout 欢迎使用图书馆管理系统 endl;cout endl;cout ¥ 1 新用户注册 ¥ endl;cout ¥ 2 读者登录 ¥ endl;cout ¥ 3 查找图书 ¥ endl;cout ¥ 4 管理图书 ¥ endl;cout ¥ 5 帮助 ¥ endl;cout ¥ 6 退出系统 ¥ endl;cout choice;int id;string password;string ISBN;Reader*tem;switch (choice)case 1:g-reader_register(); break;case 2:cout id;cout password;tem = g-reader_land(id, password);if (tem = NULL)cout 登录信息有误! GoInto_ReaderInfo(tem,p);break;case 3:p-search(); break;case 4:if (t-Login()p-GoInto_BookInfo();break;case 5:help(); break;case 6: exit_message(p, g,t); exit(0); break;default:cout 错误的输入! endl;主函数int main() readLibrarian(&mitang);/读取管理员信息 readBooks(&list1);/读取书单链表 readReaders(&readerlist);/读取读者链表 cout信息已经读取完毕!欢迎使用图书管理系统!endlnumberOfBooks;if (i_tem = 5)cout 已经达到最大借书上限,不能再借书啦! endl;return false;elsereturn true;5 比较有特色的算法(1) 借还图书,以借书函数为例int ReaderList:Borrow(BookList*g, Reader *p, string bookISBN);是借书操作调用的直接函数它会调用四个函数来完成借书操作:bool BookList:Check_borrow_book(string ISBN_Of_Book) /Booklist中的借书检查void BookList:borrow_book(string ISBN_Of_Book) /Booklist中的借书手续bool ReaderList:C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论