You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
3.3 KiB
170 lines
3.3 KiB
2 years ago
|
#include <iostream>
|
||
|
using namespace std;
|
||
|
|
||
|
#include "sqlist.h" // 顺序表
|
||
|
|
||
|
// 图书信息
|
||
|
struct Book {
|
||
|
int id; // 编号
|
||
|
string title; // 标题
|
||
|
string author; // 作者
|
||
|
float price; // 价格
|
||
|
};
|
||
|
|
||
|
// 所有书的列表
|
||
|
SqList<Book> books;
|
||
|
|
||
|
int get_command(); // 读取命令
|
||
|
void DoAddBook(); // 添加图书
|
||
|
void DoFindBook(); // 查找图书
|
||
|
void DoDeleteBook(); // 删除图书
|
||
|
void DoPrintBook(); // 打印图书
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
bool finish = false;
|
||
|
|
||
|
InitList(books);
|
||
|
|
||
|
while (!finish) {
|
||
|
switch (get_command()) {
|
||
|
case 1: // Add book
|
||
|
DoAddBook();
|
||
|
break;
|
||
|
case 2: // Find book
|
||
|
DoFindBook();
|
||
|
break;
|
||
|
case 3: // Delete book
|
||
|
DoDeleteBook();
|
||
|
break;
|
||
|
case 4: // Print
|
||
|
DoPrintBook();
|
||
|
break;
|
||
|
case 0: // Exit
|
||
|
finish = true;
|
||
|
break;
|
||
|
default: // no command
|
||
|
cout << "Error command." << endl;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
DestroyList(books);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// 读取命令
|
||
|
int get_command()
|
||
|
{
|
||
|
int cmd;
|
||
|
cout << "Commands: (1) Add, (2) Find, (3) Delete, (4) Print, (0) Exit\n";
|
||
|
cout << "Enter your choice (0-4): ";
|
||
|
cin >> cmd;
|
||
|
return cmd;
|
||
|
}
|
||
|
|
||
|
// 输入一本书的信息
|
||
|
void read(Book& b)
|
||
|
{
|
||
|
cout << "ID : ";
|
||
|
cin >> b.id;
|
||
|
cin.ignore(1024, '\n'); // skip rest chars of the line
|
||
|
cout << "TITLE : ";
|
||
|
getline(cin, b.title);
|
||
|
cout << "AUTHOR: ";
|
||
|
getline(cin, b.author);
|
||
|
cout << "PRICE : ";
|
||
|
cin >> b.price;
|
||
|
}
|
||
|
|
||
|
// 打印一本书的信息
|
||
|
void print(const Book& b)
|
||
|
{
|
||
|
cout << "Book { id: " << b.id << ","
|
||
|
<< " title:\"" << b.title << "\","
|
||
|
<< " author: \"" << b.author << "\","
|
||
|
<< " price: " << b.price << " }"
|
||
|
<< endl;
|
||
|
}
|
||
|
|
||
|
// 根据 id 查找图书
|
||
|
// 若找到,返回元素的位序,找不到时返回 0
|
||
|
int find(int id)
|
||
|
{
|
||
|
|
||
|
for (int i = 1; i <= books.length; i++)
|
||
|
{
|
||
|
if (id == books.elem[i].id){
|
||
|
return i;
|
||
|
}
|
||
|
}
|
||
|
return 0; // not found
|
||
|
}
|
||
|
|
||
|
// 添加图书
|
||
|
void DoAddBook()
|
||
|
{
|
||
|
Book e;
|
||
|
read(e);
|
||
|
books.elem[books.length + 1] = e;
|
||
|
books.length++;
|
||
|
print(e);
|
||
|
cout << "Added" << endl;
|
||
|
}
|
||
|
|
||
|
// 查找图书
|
||
|
void DoFindBook()
|
||
|
{
|
||
|
int id;
|
||
|
cout << "Enter book ID: ";
|
||
|
cin >> id;
|
||
|
Book e;
|
||
|
|
||
|
if (find(id) == 0)
|
||
|
cout << "Not found" << endl;
|
||
|
else
|
||
|
{
|
||
|
e = books.elem[find(id)];
|
||
|
print(e);
|
||
|
cout << "Found" << endl;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 删除图书
|
||
|
void DoDeleteBook()
|
||
|
{
|
||
|
int id;
|
||
|
cout << "Enter book ID: ";
|
||
|
cin >> id;
|
||
|
Book e;
|
||
|
int c = find(id);
|
||
|
if (find(id) == 0)
|
||
|
cout << "Not found" << endl;
|
||
|
else
|
||
|
{
|
||
|
e = books.elem[c];
|
||
|
print(e);
|
||
|
for (int i = c; i < books.length; i++)
|
||
|
{
|
||
|
books.elem[i] = books.elem[i + 1];
|
||
|
}
|
||
|
--books.length;
|
||
|
cout << "Deleted" << endl;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 打印图书
|
||
|
void DoPrintBook()
|
||
|
{
|
||
|
int flag = 0;
|
||
|
for (int i = 0; i < books.length; i++)
|
||
|
{
|
||
|
Book e;
|
||
|
e = books.elem[i + 1];
|
||
|
print(e);
|
||
|
flag++;
|
||
|
}
|
||
|
cout << "Total: ";
|
||
|
cout << flag;
|
||
|
cout << " books" << endl;
|
||
|
}
|