实验一:图书信息管理系统的设计与实现(本链接)
一、实现内容
设计并实现一个图书信息管理系统。根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能。 该系统至少包含以下功能:
- 根据指定图书个数,逐个输入图书信息;
- 逐个显示图书表中所有图书的相关信息;
- 能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置;
- 根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
- 能统计表中图书个数;
- 实现图书信息表的图书去重;
- 实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
- 图书信息表按指定条件进行批量修改;
- 利用快速排序按照图书价格降序排序;
- 实现最贵图书的查找;
二、实验目标
- 了解并掌握数据结构和算法设计的方法,具备初步的独立分析和设计能力
- 初步掌握软件开发过程的问题分析分析、系统设计、程序编码和测试等基本方法和技能。
- 提高综合运用所学的理论知识和方法,独立分析和解决问题的能力。
- 训练用系统的观点和软件开发一般规范进行软件的开发,培养软件工作着所具备的科学工作方法和作风。
三、编程语言以及开发环境的选择
这里使用选择c++编程语言以及vs2019开发环境
四、数据结构方法选择
1、采用顺序表
2、采用链表
由于链表便于增删,所以这里我选择方法2。
五、实验思路
1、图书信息的定义以及链表的定义
//图书信息的定义:
typedef struct {
char no[8]; //8位书号
char name[20]; //书名
int price; //价格
}Book;
//链表的定义:
typedef struct LNode{
Book data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
2、用类包括具体方法和参数
//类实现功能的操作
class LibraryMS {
private:
LNode* first; //链表头结点
public:
//无参默认构造函数构造函数
LibraryMS(){
first = new LNode();
first->next = NULL; //创建头结点
}
//有参默认构造函数构造函数
LibraryMS(Book book[], int n);
//逐个显示图书表中所有图书相关信息
void bookPrint();
//能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置
void bookInsert(Book book, int n);
//根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
Book bookDelete(char no[]);
//能统计表中图书个数;
int bookNumber();
//实现图书信息表的图书去重;
void bookSameDelete();
//实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
void bookLoveFind(char name[]);
//图书信息表按指定条件进行批量修改;
void bookModify();
//利用快速排序按照图书价格降序排序;
void bookSort();
//实现最贵图书的查找;
void bookExpensive();
};
3、菜单设计
根据实验要求设计该系统的菜单和交互逻辑;
//菜单
void Menu() {
cout << "********图书管理系统********" << endl;
cout << "****1.输出所有图书信息" << endl;
cout << "****2.插入指定位置" << endl;
cout << "****3.根据书号删除" << endl;
cout << "****4.统计书的个数" << endl;
cout << "****5.图书去重" << endl;
cout << "****6.批量修改" << endl;
cout << "****7.最爱书查找" << endl;
cout << "****8.价格排序" << endl;
cout << "****9.最贵书查找" << endl;
cout << "****10.退出" << endl;
cout << " 请输入选项: " << endl;
}
4、图书数据的初始化
Book book[50]; //存储初始化图书信息
bool tag = true; //用于判断是否结束输入
char ch; //用于判断是否还输入下一个
int i = 0,length=0; //length为初始化长度
cout << "请输入书号,书名和价格(中间以空格符隔开)" << endl;
while (tag) { //
cin >> book[i].no;
cin >> book[i].name;
cin >> book[i++].price;
length++; //图书信息+1
cout << "是否还输入下一个Y/N" << endl;
cin >> ch;
if (ch != 'Y' && ch != 'y')tag = false;
}