实验一:图书信息管理系统的设计与实现
(一)实验内容:
设计并实现一个图书信息管理系统。根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能。 该系统至少包含以下功能:
- 根据指定图书个数,逐个输入图书信息;
- 逐个显示图书表中所有图书的相关信息;
- 能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置;
- 根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
- 能统计表中图书个数;
- 实现图书信息表的图书去重;
- 实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
- 图书信息表按指定条件进行批量修改;
- 利用快速排序按照图书价格降序排序;
- 实现最贵图书的查找;
(二)实验流程图:
(三)实验内容:
图书信息的定义:
typedef struct {
char no[8]; //8位书号
char name[20]; //书名
int price; //价格
}Book;
定义线性链表结构:
typedef struct LNode{
Book data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
通过各种函数调用实现
1.显示图书表中所有图书的相关信息
void print ();
遍历链表输出数据即可
2.插入到图书表中指定的位置
void insert();
在头结点之后插入首元结点,紧接着再往后面插入数据
3.删除图书
void Delete(int i) {
LNode* p = first;
int j = 0;
//寻找删除位置前一个位置
while (p && j < i - 1)
{ p = p->next; j++; }
if (!p || !p->next)cout << "位置出错" << endl;
else {
LNode* q = p->next;
Book book = q->data;
p->next = q->next;
cout << "删除的图书信息为:" << q->data.no << q->data.name << setiosflags(ios::fixed) << setprecision(2) << q->data.price << endl;
delete q;
}
}
4.统计图书个数
int statis() {
LNode* p = first->next;
int count = 0;
while (p) {
count++;
p = p->next;
}
return count;
}
5.图书去重
void norepetition() {
LNode* p = first->next, * r = p->next;
while (p) {
r = p->next;
while (r) {
if (strcmp(p->data.no, r->data.no) == 0) {
p->next = r->next;
}
r = r->next;
}
p = p->next;
}
}
6.书籍查询
void inquire()
7.批量修改
void modific();
8.快速排序按照图书价格降序排序
void sort() {
LNode* p = first->next;
LNode* q = p->next;
while (p != NULL) {
q = p->next;
while (q != NULL) {
if (p->data.price < q->data.price) {
Book x;
x = p->data;
p->data = q->data;
q->data = x;
}q = q->next;
}p = p->next;
}
}
10.最贵图书查找
void expensive();
打印出最贵图书