2022年面向对象程序设计语言课设 .pdf
南京航空航天大学面向对象程序设计语言课程设计报告图 书 管 理 系 统学号:姓名:日期:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 9 页1 / 9 目录一.需求分析 .2 二.程序主要功能.2 三.程序运行平台.2 四.系统功能框架图.3 五.程序类说明.4 六.模块分析.6 七.比较有特色的地方.7 八.存在的不足与对策.11 九.编程体会.12 十.程序源代码.13 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 9 页2 / 9 一 需求分析本系统旨在实现一个小型的图书管理系统,对于一个小型的图书馆或藏书室来说,实施本系统不仅可以减少工作人员数量,降低成本,而且可以大大提高工作效率,降低工作强度,方便读者借书查书及办理各种手续,更方便工作人员对图书进行更有效的管理。程序主要实现读者管理、图书基本信息及库存管理、图书借还管理以及一些辅助功能等。二 程序主要功能该程序的主要功能有:读者功能可进行读者注册、登录查看、修改密码、注销读者、清除全部及查看帮助等操作。其中登录时要输入姓名密码。图书信息管理可以进行查找图书、添加新书、删除图书、清空全部、修改、显示全部等操作。其中添加内容包括:书名、ISBN 编号、作者、出版商、出版日期及内容简介、是否在架,方便读者根据不同需要进行查找、查看;修改图书中如果某一项不想修改,可以输入0保留该项原有信息。图书借还功能应该说这是整个系统最主要的功能,用户需先登录,借还时要输入ISBN 号精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 9 页3 / 9 借书/还书书库信息图书管理系统读者帮助退出系统有关该系统的一些说明. 登录查看. 注册. 注销. 修改密码. 帮助说明. 返 回 上 一. 新书入库. 查找. 删除. 修改. 显示全部在架书(登录).借书还书(查看图书时要记住ISBN 号,这是根据实际情况)。帮助一个简单的操作指南,指导用户下一步该如何操作。退出系统退出时将把所有内容以二进制保存到文件里,在运行时将从文件载入信息。另外,还制作了有关该系统的一些说明,版本信息等。运行程序后每一步都会有详细的提示,操作简便,大多数地方都考虑到防止用户出现误操作的情况,以提高程序的健壮性,可以放心使用!三程序运行平台该程序是用 VC+6.0 制做的,使用 Microsoft Visual C+ 6.0 运行该程序,具体操作是:打开Microsoft Visual C+ 6.0 ,菜单栏里点文件打开工作区找到“图书管理系统 .dsw”这个文件打开,或者在资源管理器中双击该文件,此时, VC+6.0 会自动打开,并载入该系统相关资源,点击Run 命令菜单或者或用快捷键 Ctrl+F5 运行该程序。四系统功能框架图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 9 页4 / 9 五程序类说明有关图书信息的类和书库类class Book/ 存储图书信息的类 char BookName20 。/书名,用于查找char ISBN20 。/ISBN 号,用于查找char Writer20 。/作者名,用于查找char Publisher20 。/出版商,用于查找char PublishDate20 。/出版日期,用于查找char BriefIntroduction100。/该书内容简介int i_o 。/判断书是否借出,0 为在架, 1 为借出Book *next 。 /指向下一个节点的指针 。/* 书库类链表 */ class BookList public: Book *node, *head_ptr。 /定义两个Book 指针, head_ptr为头指针,node 为活动指针BookList() / 构造函数,使指针初始化node = new Booksizeof(Book) 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 9 页5 / 9 head_ptr = NULL 。node-next = NULL 。 void save_file() 。 /存储文件void load_file() 。 /上传文件void AddNewBook() 。/ 新 书 登 记 , 对node 指向的类对象赋值void Add_list(Book *p)。 /增加结点到Book 链表中,用于添加新书时char *borrow_book() 。 /借书手续char *return_book() 。 /还书手续int search_ISBN(char *p) 。/按 ISBN 号查找图书int search_BookName(char *p) 。 /按书名查找图书int search_Writer(char *p) 。 /按作者名查找图书int search_Publisher(char *p) 。 /按出版商查找图书int search_PublishDate(char *p) 。 /按出版日期查找图书void search()。 /进入查找菜单void show_content(int n) 。 /显示某本书的内容void show_all() 。 /显示所有库存的未被借出的图书void delete_onebook() 。 /删除某本书void change_content() 。 /更改某本书的信息void GoInto_BookInfo()。 /进入书库信息菜单 。有关读者信息的类和读者类class Reader/存储读者信息的类 char ReaderName20。 /读者姓名精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 9 页6 / 9 char Password13。 /密码char book120,book220。/ 每人最多借两本书,可以根据需要增减限额int y_n。 /记录借的书的数目,0 为没有借书, 1 为借了一本, 2 为借了二本Reader *next。 /指向下一节点的指针 。/*读者类链表 */ class ReaderList private: int position。 /表明链表中的第几个节点public: Reader *point,*head_point。 /定义两个Rreader指针, head_point为头指针, point为活动指针ReaderList() / 构造函数,使指针初始化 head_point = NULL。point = new Readersizeof(Reader)。point-next = NULL。 void save_readerfile()。 /存储文件void load_readerfile()。 /上传文件void reader_register()。 /读者注册void Add_Point(Reader *p)。 /增加新结点到链表void reader_land()。 /读者登录int search_ReaderName(char *p)。 /按姓名查找void show_OneReader(Reader *p)。 /显示某读者信息void change_password()。 /修改密码void delete_reader()。 /读者注销void GoInto_ReaderInfo()。 /读者信息菜单 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 9 页7 / 9 六.模块分析1、读者信息:下设子菜单,包括:a.登录查看b.注册c.注销d.修改密码e.帮助说明f.返回上一层g.清空全部读者信息。所有函数均封装在读者类中(Reader_List ),信息存储在类Reader中,类中定义了两个Reader 指针,一个是 *head_point, 作为链表的头结点,另一个是*point ,作为活动指针,在不同的类的成员函数中都可使用,为了防止该活动指针使用过频,造成几个函数同时使用同一个指针指向不明,在有些函数里还定义了一些临时指针。其主要思路是:输入姓名密码后,将姓名放到一个临时数组中,让point 指到 head_point 的 位 置 , 使 用 point = point-next 在 链 表 中 移 动 指 针 ,用strcmp(a,b)找到与临时数组中字符相同的point-ReaderName ,再对其所在的类进行修改、删除、查看等一系列操作。2、书库信息:该部分内容最丰富,下设子菜单,包括a.新书入库b.查找c.删除d.修改e.显示全部在架书f.返回上一层g.清空全部图书内容查找的子菜单包括:a.按书名查找 b.按 ISBN 号查找 c.按作者查找 d.按出版商查找 e.按出版日期查找 f.返回上一层。链表的思路也跟读者信息一样,从头结点开始建,每当新增加一个类节点时,就把新增结点加到链表尾部,再让其中的next 指向 NULL 空,这里没有对链表进行排序。查找功能中,几个函数与读者查询类似不再赘述,只是把其中的变量名改了一下,查找方法也与上述方法一致。有关菜单的制作,就是先显示菜单,让用户输入选择,进行输入有效性检查,然后用 switch 来对不同的选择调用类中不同的函数。3、借书 /还书:这部分是系统最主要的功能,也是整个系统实现中有一定难度的地方,需要建立两个类之间的联系。GoInto_bor_ret(BookList *book_ptr,ReaderList *reader_ptr) 函数,把这两个类的地址传到函数中去,函数中分别又相应地定义了两个指针分别指向这两个类,再调用类成员函数或成员指针进行数据处理,读者类中(Reader )定义了精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 9 页8 / 9 一个 int y_n 变量,记录了该读者借了几本书(0 没借, 1 借了一本, 2 借了两本,由于是小型图书馆,所以上限为两本),图书类中(Book)定义了一个int i_o 变量(1 为借出, 0 为在架),记录了该书是否被借出,在进行借书时,分别更改两变量的记录,以表明书从图书馆借出到了读者手中,然后再把书名复制到读者中的book1 或 book2 数组中,这样显示的时候就可以看到借了什么书了,另外在其它函数中也要根据两个int 的变量的值来判断书有没有借出等,同样的,还书原理也类似上述。4、其它:主菜单中剩下的3 个选项: 4.帮助5.退出系统 6.有关该系统的一些说明,都是些文字说明,方便用户有不懂的地方时参考看一下,可能帮助里面写得不是很详细,以后有机会慢慢补充吧。选了退出系统后,将对文件进行保存,就是把新的修改过的链表放到指定文件中覆盖原来的链表以更新文件,所以必须要正常退出,不然直接按窗口的关闭的话就不会保存修改后的链表了。七比较有特色的函数有特色的函数指的是实现地较为巧妙的类的构造函数、成员函数、友元函数等函数,也可以是指针处理的函数,文件处理的函数等比较有特色的函数,能体现巧妙构思即可。特别应体现运算符重载!八存在的不足与对策此处主要总结自己在程序制作过程中存在的不足之处,有待进一步完善之处,考察学生对问题的总体把握和认识能力。学生应客观地做出分析,并说明为何存在不足,应如何进行完善等信息。九编程体会这里是学生对于完成整个系统过程中的一个总体的感受和体会,在这里学生可以自由地发挥,可以从各个方面进行总结,应中肯。此部分内容可以经提炼归纳后可作为以后教案改进的一个直接依据。十程序源代码略精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 9 页