课程设计报告 南航 图书库存管理系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
据进行合并
{
if (maxLen == curLen)
- 14 -
{ Book *newPtr = new Book[maxLen + 10]; for (int i = 0; i<curLen; i++) { newPtr[i] = bkPtr[i]; } maxLen += 10; delete[]bkPtr; bkPtr = newPtr;
<< bkNum << endl;
}
void print(ofstream &out) //向文件输出这一条记录
{
out << setw(10) << left << bkNo << setw(20) << left << bkName << setw(10) << left <<
bkNum << endl;
}
void setCurLen(int i) //设置现有的数据长度,在删除数据的时候会使用
{
curLen = 0;
}
int isIn(char *bkNo) //判断数据库中是否存在这条记录,若存在,则返回位置,不存在,返回
-1
{
for (int i = 0; i<curLen; i++)
if (strcmp(bkPtr[i].bkNo, bkNo) == 0)
return i;
return -1;
Biblioteka Baidu
}
Book &getBook(int i) //返回图书的引用,可以直接通过返回值操作原来的数据
{
return *(bkPtr + i);
}
void appendBook(char *bkNo, char *bkName, int bkNum) //追加图书,若重复,自动与原来的数
排序数组,根据 choice 进行不同的排序选择。 升序是分别通过冒泡法、插入法和选择法实现的。 降序的功能是通过对升序后的数据逆置实现的。
-8-
四、 函数调用关系图
五、 精选算法
1. 利用冒泡法对书号进行排序
-9-
- 10 -
2. 利用选择法对书名进行排序
- 11 -
3. 利用插入法对数量进行排序
{
bkPtr = new Book[n];
curLen = 0;
maxLen = n;
readFromFile("bookdata.txt");
}
~BookDatebase()
//析构函数,释放数组,将数据导出到bookdata.txt
{
writeToFile("bookdata.txt");
delete[]bkPtr;
-6-
f. void appendBook(char *bkNo, char *bkName, int bkNum) 在线性表的末尾追加一条库存记录,在追加之前判断线性 表是否已经满了,如果已经满了,则扩充线性表。
g. void alterBook(int i, int bkNum, bool flag = true) 修改图书记录,根据图书的位置更改图书的数量,利用 flag 参数判断是增加还是减少。
{
strcpy(this->bkNo, bkNo);
strcpy(this->bkName, bkName);
this->bkNum = bkNum;
}
void show() //展示这一条记录
{
cout << setw(10) << left << bkNo << setw(20) << left << bkName << setw(10) << left
3. 查询图书时候的分页功能 查询所有图书的时候每 5 条记录一页显示,按任意键后显示下一
-4-
页。 4. 输 入 文 件 的 名 字 如 果 不 包 含 .txt 则 自 动 添 加 , 通 过
return_file_name 函数实现。
三、 数据结构
1. BOOK 类 (1) 私有数据成员 a. char bkNo[10] //书号,字符数组 b. char bkName[20] //书名,字符数组 c. int bkNum //库存量,即数量 (2) 公有成员函数 a. int getNum() //获取库存量 b. void setNum(int bkNum) //设置库存量 c. void setData(char *bkNo, char *bkName, int bkNum)//写入库 存信息 d. void show() //显示一本图书信息 e. void print(ofstream &out) //将库存记录写入文件 (3) 友元的说明 friend class BookDatebase;//通过设置此友元,使访问变得更容 易,但是类的隐蔽性也被破坏。
2. 丰富排序功能 (1) 在课本上的按书号排序的基础上,本程序拓展出了六种排序的 方案,即分别对书号、书名和数量进行升序或降序排列。 (2) 本功能的子菜单设计与主菜单的设计思想相同。 (3) 对书名、书号和数量三个关键字进行升序排列分别使用了冒泡 法、选择法和插入法。 (4) 在对书号、书名和数量进行降序排列的时候所采用的方法是对 先前升序排列的结果进行逆置(时间换空间)。
-5-
2. BookDatebase 类 (1) 私有数据成员 a. Book *bkptr //Book 型的指针 b. int curLen, maxLen // 线性表的最大长度和当前长度 (2) 公有成员函数 a. BookDatebase(int n = 10) 构造函数,用来初始化线性表。并从 bookdata.txt 中导入数 据。 b. ~BookDatebase() 析构函数,用来释放线性表。并把数据导出到 bookdata.txt. c. void setCurLen(int i) 设置现在线性表的长度,在删除全部数据的时候会用到这 个函数。 d. int isIn(char *bkNo) 判断书籍记录是否存在,此功能使用频率较高,主要作用 是数据检查,防止出错。 e. Book &getBook(int i) 返回图书的引用,这一做法有两个好处,一是简化写法, 二是增强程序的可读性。返回值是一个引用,可以直接操 作原来的数据。
3. 显示所有图书记录 每行显示一本图书记录信息。
4. 查询图书 输入一本图书的书号,查询该书是否存在,若存在,则显示该书 记录信息,否则提示该书不存在。
5. 图书入库 输入一本书的书号,查询该书是否存在,若存在,则修改已有图 书记录的库存量;若不存在,则追加一条图书记录。
6. 图书销售 输入一本书的书号及销售数量。若该图书存在,并且库存量充足, 则修改库存量;否则提示该书不存在或库存不足等信息。
-2-
7. 批量导入图书记录 用户输入一个文件名,系统自动地讲该文件中的图书记录追加到 库存列表中,从而实现批量导入图书。
8. 导出图书记录 提示用户输入一个文件名,系统自动将库存表中的全部图书记录 信息写入该文件正文,文件格式与上述导入文件格式相同。
9. 排序 提供六种排序的选择,分别对三个关键字按升序或降序排列。使 用了冒泡法、选择法和插入法几种排序方法。
-3-
(2) 菜单五(批量导入图书记录) 批量导入图书记录实际上就是对追加图书记录的批量操作,同 样需要数据检查机制,以防止数据重复。在本程序中,对每一 个批量导入的数据进行检查,如果出现重复,则自动与先前的 数据进行合并。
(3) 系统初始化的时候会自动地从 bookdata.txt 中导入数据,虽然 这个数据中有重复数据的可能性比较小(因为我们是导出的数 据,而这个数据用户是看不到的,对用户来说是透明的),但 是为了避免错位,同样加入数据检查机制,具体操作和菜单五 的相同。
h. void deleteBook(int i) 删除图书记录,参数为图书的位置。要完成这一功能更, 只需要把后面所有的图书记录前移即可。
i. void showAllBook() 展示所有图书记录,同时每五个分一页,实现分页显示的 功能只需要在 i 被 5 整除的时候暂停即可。
j. void readFromFile(char *fileName) 从文件导入书籍,调用 appendbook 的函数,如果出现重复 书籍,则与原来的数据进行合并。如果没有添加.txt 可以自 动补全。
}
- 13 -
friend class BookDatebase; //将BookDatabase设置成友元,可以直接操作 };
class BookDatebase
{
Book *bkPtr; //Book型指针,用于数据的访问
int curLen, maxLen;
public:
BookDatebase(int n = 10) //构造函数,初始化数组,将bookdata.txt中的数据导入
- 12 -
六、 源程序
#include <iostream> #include <fstream> #include <iomanip> #include <cstring> #include <cstdlib> using namespace std;
class Book
{
char bkNo[10]; //书号,字符串类型
南京航空航天大学 《C++语言程序设计》课程设计报告
题目: 图书库存管理
班级: 学号: 姓名: 成绩: 指导教师:
0116202 011620231 苏瑞辅
潘梅园
日期:2017 年 5 月 18 日
目录
一、 程序功能 ................................................ - 2 二、 新增功能 ................................................ - 3 三、 数据结构 ................................................ - 5 四、 函数调用关系图 .................................... - 9 五、 精选算法 ................................................ - 9 六、 源程序 .................................................. - 13 七、 典型测试数据 ...................................... - 24 八、 问题的处理方法 .................................. - 35 九、 做课程设计作业的感受 ...................... - 36 -
k. void writeToFile(char *filename) 向文件输出数据,和输入数据的格式相同。如果文件名中 没有添加.txt 可以自动补全。
l. void reverse()
-7-
逆置数组,降序的功能是通过把升序的数组你逆置实现的。 m. void sort(int choice)
-1-
一、 程序功能
1. 追加图书记录 输入书号、书名和库存量,在库存列表尾部追加一条记录。此功 能每次只能追加一本图书记录,用于初期建立库存记录。
2. 删除图书记录 输入一本书的书号,首先在库表中查询该图书是否存在,若存在, 则显示该图书记录,并提问是否删除该图书,根据回答(y/n)确 定是否删除该图书;若不存在,提示该书不存在。
char bkName[20]; //书名,字符串类型
int bkNum;
//数量,整型
public:
int getNum() //得到库存量
{
return bkNum;
}
void setNum(int bkNum)//得到数量
{
this->bkNum = bkNum;
}
void setData(char *bkNo, char *bkName, int bkNum) //设置书名、书号和数量
10. 删除全部图书记录 提示用户是否确认(y/n),确认后删除全部图书记录。
0. 退出 提示用户是否确认退出(y/n),退出时将数据导出到 bookdata.txt.
二、 新增功能
1. 增加数据检查机制,防止添加重复数据 (1) 菜单一(追加图书记录) 追加图书记录的时候先判断是否有该记录,如果已经有的话, 则自动与原来的数据进行合并,即进行入库操作,并向用户提 示“与原来的数据进行了合并”。