CPP学习之——使用链表(15.14)

一 概述

本节结合上面的代码示例,使用链表做个一个图书管理系统,实现:

  • 重建图书
  • 显示图书
  • 插入图书
  • 删除图书
  • 显示图书数目等功能

二 示例功能

2.1 图书的创建功能

2.1.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main() 
{
string str;
begin:
cout<<"1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)"<<endl;
cin>>str;
if(str[0]=='1')
{
::head=create();
system("cls");
goto begin;
}
return 0;
}

2.1.2 输出结果

1
2
3
4
5
6
7
8
9
1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)
1
请输入图书的编号,以0结束
1
请输入图书的价格
11
请输入图书的编号,以0结束
0
1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)

2.2 图书的显示功能

2.2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
if(str[0]=='2')
{
if(head==NULL)
{
cout<<"您的图书现在还是空的,请添加图书"<<endl<<"按回车键返回主程序"<<endl;
cin.get();
cin.get();
system("cls");
goto begin;
}
showbook(head);
}

2.2.2 输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)
1
请输入图书的编号,以0结束
1
请输入图书的价格
11
请输入图书的编号,以0结束
0
1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)
2

图书信息如下:
图书编号:1 图书价格:11

2.2.3 错误修改

  • 系统菜单中选择1,输入0时,系统出现异常
  • 解决办法:create中p2->next去掉

2.3 图书的插入功能

2.3.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
if(str[0]=='3')
{
if(head==NULL)
{
cout << "您的图书现在还是空的,请添加图书" << endl << "按回车键返回主程序" << endl;
cin.get();
cin.get();
system("cls");
goto begin;
}
cout << "请输入要插入的图书的编号,按0返回" << endl;
string str;
cin >> str;
int num;
float price;
while (!check(str))
{
cout << "输入的不是数字,请重新输入,按0返回" << endl;
cin >> str;
}
num = atoi(str.c_str());
if (num != 0)
{
cout << "请输入图书的价格" << endl;
cin >> str;
while (!check(str))
{
cout << "输入的不是数字,请重新输入,按0返回" << endl;
cin >> str;
}
price = atof(str.c_str());
}else
{
system("cls");
goto begin;
}
insert(head,num,price);
cout<<"操作完毕,按会回车间返回主程序"<<endl;
}

2.3.2 输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)
1
请输入图书的编号,以0结束
1
请输入图书的价格
11
请输入图书的编号,以0结束
2
请输入图书的价格
22
请输入图书的编号,以0结束
0
1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)
3
请输入要插入的图书的编号,按0返回
4
请输入图书的价格
44
操作完毕,按会回车间返回主程序

2.4 图书的删除

2.4.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if(str[0]=='4')
{
if(head==NULL)
{
cout << "您的图书现在还是空的,请添加图书" << endl << "按回车键返回主程序" << endl;
cin.get();
cin.get();
system("cls");
goto begin;
}
cout << "请输入要删除的图书的编号,按0返回" << endl;
string str;
cin >> str;
int num;
while (!check(str))
{
cout << "输入的不是数字,请重新输入,按0返回" << endl;
cin >> str;
}
num = atoi(str.c_str());
Delete(head,num);
cout<<"操作完毕,按会回车间返回主程序"<<endl;
}

2.4.2 输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)
4
您的图书现在还是空的,请添加图书
按回车键返回主程序

1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)
1
请输入图书的编号,以0结束
1
请输入图书的价格
11
请输入图书的编号,以0结束
0
1->(重建图书)|2->(显示图书)|3->(插入图书)|4->(删除图书)|5->(图书数目)|Q->(退出)
4
请输入要删除的图书的编号,按0返回
1
操作成功
操作完毕,按会回车间返回主程序

2.5 查询图书的数量功能

2.5.1 代码

1
2
3
4
5
6
7
8
if(str[0]=='5')
{
cout<<"图书的数目是:"<<getBookNum(head)<<endl<<"按回车键返回主程序"<<endl;
cin.get();
cin.get();
system("cls");
goto begin;
}