明天要交,能写完的,我追加200分
图书的详细信息应存储在一个名为 book.dat 的文件中,该文件应包含下列详细信息:
代码(从 1 开始按顺序编码);
名称(最多 30 个字符);
出版商的名字(最多 30 个字符);
作者的名字(最多 30 个字符);
出版日期;
价格;
可用性状态(“A”代表可借阅,“I”代表已被借阅);
期刊的详细信息应存储在一个名为 periodical.dat 的文件中,该文件应包含下列详细信息:
代码(从 1 开始按顺序编码);
名称(最多 30 个字符);
出版商的名字(最多 30 个字符);
周期(“F”代表两周,“M”代表一个月,“S”代表六个月,“Y”代表一年);
每种期刊每一期的详细信息应保存在一个名为 issue.dat 的文件中,该文件应包含下列详细信息:
期刊代码;
发行期数;
发行日期;
价格;
可用性状态(“A”代表可借阅,“I”代表已被借阅);
资料库管理系统应以下列菜单开始:
LIBRARY MANAGEMENT SYSTEM
1. Add new Book details
2. Add new Periodical details
3. Record Issue/Return details
4. Delete old Periodical Issue details
5. View Available Books/Periodicals
6. Exit
Enter choice:
根据用户的选择,将执行下列操作:
Add new Book details(添加新书的详细信息)
通过访问 book.dat 文件中最后一本书的代码并将其加 1 生成新图书代码,接受图书的详细信息,确保书名、出版商名及作者名不为空,接受出版日期,确认书的价格大于 0,书的可用性状态不应接受,而应设为“A”,将记录保存到 book.dat 文件中。
Add new Periodical details(添加新期刊的详细信息)
询问用户是添加新期刊详细信息还是添加期刊的新一期的详细信息,根据用户的输入,执行下列任务:
• 新期刊:通过访问 periodical.dat 文件中最后一种期刊的代码并将其加 1 生成新期刊代码,接受新期刊的详细信息,确保期刊的名称和出版商的名字不为空,确认输入的周期是有效值,将记录保存到 periodical.dat 文件中。
• 新一期:接受期刊代码,并确保 periodical.dat 文件中存在该代码,接受发行期数,并确认 issue.dat 文件中不存在该期的详细信息,接收发行日期,确认该期的价格大于 0,该期的可用性状态不应被接受,而应设为“A”,将记录保存到 issue.dat 文件中。
添加期刊新一期详细信息的屏幕如图 4 所示,其中,必须输入特定期刊的发行期数、日期和价格,例如,假设接受一个名为“Oracle 杂志”的月刊,从一月开始,则可以输入 1 作为一月份的发行期数,该期刊二月份的发行期数为 2 ,依次类推。 Record Issue/Return details(记录借阅/归还的详细信息)
接受用户的事务类型,询问用户本次事务是关于图书还是关于期刊的某一期,根据事务的类型,更新该图书或该期期刊的可用性状态,如果事务类型是“Issue”,则状态应设置为“I”,如果类型是“Return”,则状态应设置为“A”。
Delete old Periodical Issue details(删除旧期刊某一期的详细信息)
接受期刊代码和发行期数,从 issue.dat 文件中删除所有小于输入的发行期数的那些期的记录。
View Available Books/Periodicals(查看可用的图书/期刊)
询问用户要查看图书还是期刊的详细信息,根据用户的输入,显示可用图书或期刊各期的清单。
Exit(退出)
关闭程序,并退出资料库管理系统。
应在整个系统中应用面向对象编程的概念,在系统的所有功能点处显示相应的消息。
第四部分:对应的知识点
一:高级函数特性
显示菜单并接受选项,根据输入的选项,调用函数以显示相应的消息,告知用户所选择的选项。
二:流
为图书、期刊和期刊的某一期创建类,接受并显示每一个类的数据。
三:文件操作和异常
根据菜单选项创建函数,调用函数来添加图书、添加期刊,并执行借出和归还、删除和查看等操作。
新书将添加到 book.dat 文件中,新期刊将被写入 periodical.dat 文件,而期刊各期的详细信息将存储在 issue.dat 文件中。
使用文件输入/输出流 (fstream) 函数来执行下列操作:
- open 打开文件;
- close 关闭文件;
- seekg 设置 get 指针的位置;
- write 将字符序列写入文件;
- read 读取数据块;
四:多态
将图书和期刊类的公共元素合并到基类中,适当地修改图书类和期刊类的数据项和函数来继承基类。