C++图书库存记录管理系统[2023-09-02]

发布时间 2023-09-06 11:22:59作者: bigbeet

C++图书库存记录管理系统[2023-09-02]

第三部分 C++语言课程设计
C++语言程序设计上机实验及学习指导

选题一:图书库存记录管理
一、程序菜单功能
图书库存记录是一个数据库列表,每一个记录包含一本图书的信息如书名、书号和库存量等信息,如表1-1所示。
表1-1图书库存记录数据库列表

书号	书名	库存量(本)	价格(元)等备选项
1001	明朝那些事儿	20
1002	文化苦旅	10
1003	C++程序设计教程	50

主菜单如图1-1所示。程序执行过程:显示主菜单,用户在“请输入选择:”处输人选项(按照功能列表输入1~10,0中的一个数字),按回车后,执行相应的功能。
各菜单项功能及内部实现如下:

1.追加图书记录
2.删除图书记录
3.显示所有图书记录
4.查询图书
5.图书入库
6.图书销售
7.批量导入图书记录
8.导出图书记录
9.按书号排序
10.删除全部图书记录
0.退出
请输入选择:

图1-1

1.追加图书记录
输人书号、书名、库存量等信息,在库存列表尾部追加一条记录。此功能一次只能追加一本图书记录,用于初期建立库存记录。
2.删除图书记录
输入一本图书的书号(书号是图书的唯一标识,即一个书号指定一本图书,不同的图书,书号不同),首先在库表中查询该图书是否存在,若存在,则显示该图书记录,并提问是否删除该图书,根据回答(y / n)确定是否删除该图书;若不存在,提示该图书不存在。
3.显示所有图书记录
每行显示一本图书记录信息。
4.查询图书
输人一本图书的书号,查询该书是否存在,若存在,则显示该书记录信息,否在提示该图书不存在。
5.图书入库
输入一本书的书号及入库数量。首先在库存列表中查询该图书,若存在,则修改已有图书记录的库存量;若不存在,则追加一条图书记录。
6.图书销售
输入一本书的书号及销售数量。若该图书存在,并且库存量充足,则修改库存量;否则提示图书不存在或库存量不足等信息。
7.批量导入图书记录
用户输人一个文件名,系统自动将该文件中的图书记录追加到库存列表中。本功能可实现一次性从数据文件追加多本图书记录,而功能1一次只能追加一本图书的记录。
在执行本功能前,请准备好正文文件,文件名请自行给出如inbooks. txt,文件格式如下:第1行表示共有2本图书,从第2行开始,每行是一本图书的信息。

2
1004	做最好的自己	20
1005	C语言程序设计	50

程序运行时提示输入文件名,系统将该文件的全部图书记录追加图书库表末尾。为了简单,假定导入的都是新书,即导入的书号跟库表中已有图书不同。同学可实现更高级的功能,即首先查询该书是否存在,若存在则修改库存记录,若不存在,增加图书记录。
8.导出图书记录
提示用户输入一个文件名,如outbooks. txt,然后系统自动将库表中全部图书的信息写入该正文文件,文件格式与上述导入文件格式相同。
9.按书号排序
将库表中的图书记录按书号排成升序。执行本功能后,可执行功能3查看排序结果。同学可扩展功能,让用户可选择排序字段,如选择按书号、按书名、按库存量等排序。
10.删除全部图书记录。
提问是否删除全部图书,根据回答(y / n)确定是否删全部图书。
0.退出

二、数据结构说明
1.定义一个类 Book用于表示一本图书库存记录类名: Book
私有数据成员:
(1) bookNo //书号,字符数组
(2) bookName ll书名,字符数组
(3) Num //库存量(即图书本数),整型量
(4) ……//可根据需要添加其他属性,如图书价格( double型量)、出版社( char型数组)
公有成员函数:
(1) Book( . . . ) ; 11构造函数,各参数均有缺省值(2) void Show(…); 17显示一本图书信息
(3) void Print( ofstream &out)//将库存记录写入文件, out是输出文件流对象
(4) void setInfo( char * nop,char * nap,int n);/7/设置库存记录信息
(5) void setNum( int n);/7设置库存量
(6) int getNum (); 11获取库存量
(7) friend class bookList;//将bookList类说明为友元类,后续定义
(8)……//可根据需要添加其他公有函数接口
提示:成员函数的实现可参考实验十第4~5题,即学生类Student的实现。
2.定义一个类bookList,用于表示多本图书库存记录
本类的实现可参考实验八第⒉题和实验十第6题(或教材例10.15),将两题结合起来。实验八第⒉2题图书信息列表是使用结构体数组实现的,数组元素是结构体变量,在pkList类中将其改为Book类的对象,用对象数组存储多本图书库存记录。
实验十第6题是将教材例10.15的线性表元素由整型量改为字符型量,而在 bookList中的线性表是对象数组,数组的每个元素都是Book类型的对象,表示一本图书的库存信,多本图书库存记录存入该数组。
数据结构如图1-2所示, booksObj是 bookList类的一个对象。
实现如下:
类名: bookList //图书库存记录列表,即线性表类私有数据成员:
(1) Books // Book类型指针,即线性表的首指针,指向一个动态申请的对象数组,每个元素是一本图书的库存记录。数组相当于Books[ maxLen]。
(2) curLen !/现有图书记录数,整型量
(3) maxLen //线性表最大长度,整型量公有成员函数:
(1) bookList( int Len =20 ) ; 1/构造函数,初始化图书列表,即动态申请线性表空间
(2) ~ bookList (); 1/析构函数,释放线性表空间
(3) void appendBook ( char * nop , char * nap,int n);//将参数指定的一本图书信息追加到线性表尾部
(4) int isIn ( char * bkNo) ;1/按书号查找图书,若存在,返回其下标;否则返回-1
(5) Book & getBooks( int i); 1/返回下标为i的图书库存记录的引用
(6) void deleteBook ( char * bkNo);//删除指定书号的图书记录
(7) void sortBooks ();//按书号将线性表排成升序,比较书号大小用strcmp()函数1/参考实验八第⒉题按价格排序,注意区别
(8) void showAll ();17显示全部图书库存记录
(9) int curBookLen (); /1返回现有图书记录数
(10) void setCurBookLen( int len); //设置现有图书记录数(11) void initBookList ( );
1/初始化线性表,用于系统启动时,从文件bookdata.txt中
//读入全部信息存入 Books数组。该函数调用readFromFile ()函数。
(12) void readFromFile( char * filename); //从参数指定的文件中读入库存记录
(13) void writeToFile( char * filename );
/将线性表中的图书库存记录写到参数指定的文件中
(14)……/可根据需要添加其他公有函数接口
3.数据文件
数据文件中的信息是可以永久保存的,而内存中的信息当程序结束后就不存在了。本课设用bookdata. txt文件模拟实现“数据库(即数据文件)”,数据厍中存储的是图书厍仔化录数据库列表,可永久保存。当程序运行时,所有的图书库存记录信息从数据库搬入内存,即存储在内存中的booksObj的成员对象数组(线性表) Books[ ]中。
当程序结束运行时,所有的图书库存记录信息均由内存搬到(存储到)数据文件 bookdata. txt 中,下次运行时再次调入到内存的线性表中。注意这个文件对使用系统的用户来说是“看不见的”,是系统内部
处理用到的,即程序开始运行创建booksObj对象后通过该对象调用initBookList ()函数将其内容调入内存 Books[ ]数组中,当退出系统时,相应的处理函数Quit ()中通过booksObj对象调用writeToFile()将内存Books[]数组的内容写人该文件。前面或后续代码实现提示会提及这里所说的一些处理函数。
菜单功能"7.批量导入图书记录”和“8.导出图书记录”涉及的文件不是bookdata. txt ,而是由用户命名的“可见”的文件,如前述的inbooks. txt 和 outbooks. txt ,这些文件或由用户“手工”建立,或者系统自动导出时建立的。导入文件可以有多个,导出文件也可以有多个。
上述两类文件的格式可用统一格式,如前面功能7描述中给出的格式。
三、课程设计实现说明
1.定义并实现book类。本类的实现参考实验十第4~5题。
2.定义并实现bookList类。本类的实现参考教材例10.15(或实验十第6题)以及实验八第2题。
3.定义主函数,在主函数中定义一个bookList类对象booksObj,所有的菜单操作都是针对该对象执行的。
4.在主函数中仿照上述菜单设计练习,给出本题的菜单实现.可将菜单设计练习中的“cout <<" Function1" <<endl;”等替换成调用每一个菜单功能的实现函数,其参数全部都是booksObj对象的引用。
5.对应于每个菜单功能的实现函数参见“四、部分函数代码提示”。
五、其他说明
1.应完成上述规定的基本功能。
2.可根据需要增加或修改功能,如果完成得好,可加分。增加的功能例如:
(1)将图书库存记录逆序。
(2)排序功能增加排序选项:按书号、书名、库存量排序等。
(3)自行设计增加其他功能,注意增加的功能是针对图书库存列表的操作,不能增加如系统进入口令等“花架子”的功能。
3.在调试程序时,可简化数据输入,如: 1 ,a,1分别表示书号、书名和本数。当程序调试完毕,再使用正式数据运行系统。