某学校的图书管理系统中,书本种类信息包括,书号、书名、价格三项属性,目中的种头数不相过20,编写代码希别用顺序存储方式或链式存储方式实现该图书管群系统数据结构的构建,并至少能够进行初始化、清空、增加、删除、查找操作。用C语言和C++分别写出来关于这个问题的答案
时间: 2024-10-20 22:07:15 浏览: 35
首先,让我们用C语言和C++分别来实现这个简单的图书管理系统数据结构。由于题目的要求,我们将会分别使用数组(顺序存储)和动态链表(链式存储)来实现。
**C语言 - 顺序存储(数组)**
```c
#include <stdio.h>
#define MAX_BOOKS 20
typedef struct {
char book_id[50];
char book_title[100];
double price;
} Book;
Book books[MAX_BOOKS];
// 初始化
void init_books() {
for (int i = 0; i < MAX_BOOKS; i++) {
books[i].book_id = "\0";
books[i].book_title = "\0";
books[i].price = 0.0;
}
}
// 清空
void clear_books() {
for (int i = 0; i < MAX_BOOKS; i++) {
books[i] = {0};
}
}
// 添加书籍
void add_book(char *id, char *title, double p) {
if (books_count < MAX_BOOKS) {
strcpy(books[books_count].book_id, id);
strcpy(books[books_count].book_title, title);
books[books_count].price = p;
books_count++;
} else {
printf("无法添加更多书籍,已满!\n");
}
}
// 删除书籍
bool delete_book(char *id) {
for (int i = 0; i < books_count; i++) {
if (!strcmp(books[i].book_id, id)) {
memmove(&books[i], &books[i + 1], sizeof(Book) * (books_count - i - 1));
books_count--;
return true;
}
}
return false;
}
// 查找书籍
bool search_book(char *id) {
for (int i = 0; i < books_count; i++) {
if (!strcmp(books[i].book_id, id)) {
printf("找到书本:ID %s, Title %s, Price %.2f\n", books[i].book_id, books[i].book_title, books[i].price);
return true;
}
}
printf("未找到该书本。\n");
return false;
}
// 获取当前图书数量
int get_books_count() {
return books_count;
}
int main() {
int choice;
while (1) {
// ...其他业务逻辑...
}
}
```
**C++ - 链式存储(动态链表)**
```cpp
#include <iostream>
#include <string>
using namespace std;
struct Book {
string book_id;
string book_title;
double price;
};
class BookList {
private:
Book* books;
int count;
public:
BookList() : books(new Book[MAX_BOOKS]), count(0) {}
~BookList() {
for (int i = 0; i < count; i++)
delete books[i];
delete[] books;
}
void add_book(const string& id, const string& title, double p) {
if (count < MAX_BOOKS) {
books[count++] = {id, title, p};
} else {
cout << "已达最大容量,无法添加更多书本。\n";
}
}
bool delete_book(const string& id) {
for (int i = 0; i < count; ++i) {
if (books[i].book_id == id) {
for (int j = i; j < count - 1; ++j)
books[j] = books[j + 1];
books[count - 1].~Book();
count--;
return true;
}
}
return false;
}
void search_book(const string& id) {
for (int i = 0; i < count; i++) {
if (books[i].book_id == id) {
cout << "找到书本:ID " << books[i].book_id << ", Title " << books[i].book_title << ", Price " << books[i].price << endl;
return;
}
}
cout << "未找到该书本。\n";
}
int get_books_count() {
return count;
}
};
int main() {
BookList book_list;
// ...其他业务逻辑...
}
```
在这个例子中,C语言版本使用了数组,而C++版本使用了动态链表。注意在实际应用中,你需要处理用户输入并管理循环,这里只展示了基本的数据结构和操作函数。
阅读全文