基于线性表的图书信息管理系统顺序表实现
时间: 2024-09-19 20:04:13 浏览: 139
基于线性表的图书信息管理系统可以使用顺序表来实现。具体来说,可以将每一本书的信息保存在一个结构体中,然后将所有的结构体放在一个数组中,即可实现一个顺序表。每个结构体包含书名、作者、出版社、出版日期等信息。
除了保存图书信息的数组外,我们还需要记录当前数组的长度以及数组的最大长度。为了方便查询、修改和删除图书信息,我们可以根据书名或者作者来建立两个索引数组,分别保存每个书名或作者对应的图书信息在顺序表中的下标。
下面是一个示例代码,展示了如何使用顺序表实现基于线性表的图书信息管理系统:
```
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100 //最大长度
typedef struct Book {
char name[50]; // 书名
char author[20]; // 作者
char publisher[20]; // 出版社
char publish_date[15]; // 出版日期
} Book;
Book books[MAX_LENGTH]; // 存储所有图书信息的数组
int length = 0; // 当前数组中图书信息的数量
int max_length = MAX_LENGTH; // 数组最大容量
int index_by_name[MAX_LENGTH]; // 根据书名建立的索引数组
int index_by_author[MAX_LENGTH]; // 根据作者建立的索引数组
// 根据书名查找图书信息的下标
int search_by_name(char* name) {
for (int i = 0; i < length; i++) {
if (strcmp(books[i].name, name) == 0) {
return i;
}
}
return -1;
}
// 根据作者查找图书信息的下标
int search_by_author(char* author) {
for (int i = 0; i < length; i++) {
if (strcmp(books[i].author, author) == 0) {
return i;
}
}
return -1;
}
// 添加一本新书
void add_book(Book book) {
if (length >= max_length) {
printf("Error: the book list is full!\n");
return;
}
books[length] = book;
index_by_name[length] = length;
index_by_author[length] = length;
length++;
}
// 根据书名删除图书
void delete_book_by_name(char* name) {
int index = search_by_name(name);
if (index == -1) {
printf("Error: book not found!\n");
return;
}
// 将要删除的图书信息与最后一本图书交换位置,然后删除最后一本图书
Book tmp = books[index];
books[index] = books[length-1];
books[length-1] = tmp;
length--;
}
// 根据作者删除图书
void delete_book_by_author(char* author) {
int index = search_by_author(author);
if (index == -1) {
printf("Error: book not found!\n");
return;
}
// 将要删除的图书信息与最后一本图书交换位置,然后删除最后一本图书
Book tmp = books[index];
books[index] = books[length-1];
books[length-1] = tmp;
length--;
}
// 修改图书信息
void modify_book(int index, Book new_book) {
if (index < 0 || index >= length) {
printf("Error: invalid index!\n");
return;
}
books[index] = new_book;
}
// 根据书名打印图书信息
void print_book_by_name(char* name) {
int index = search_by_name(name);
if (index == -1) {
printf("Error: book not found!\n");
return;
}
printf("Name: %s\n", books[index].name);
printf("Author: %s\n", books[index].author);
printf("Publisher: %s\n", books[index].publisher);
printf("Publish date: %s\n", books[index].publish_date);
}
// 根据作者打印图书信息
void print_book_by_author(char* author) {
int index = search_by_author(author);
if (index == -1) {
printf("Error: book not found!\n");
return;
}
printf("Name: %s\n", books[index].name);
printf("Author: %s\n", books[index].author);
printf("Publisher: %s\n", books[index].publisher);
printf("Publish date: %s\n", books[index].publish_date);
}
// 打印所有图书信息
void print_all_books() {
for (int i = 0; i < length; i++) {
printf("Name: %s\n", books[i].name);
printf("Author: %s\n", books[i].author);
printf("Publisher: %s\n", books[i].publisher);
printf("Publish date: %s\n", books[i].publish_date);
printf("\n");
}
}
int main() {
// 添加几本图书
Book book1 = {"The Catcher in the Rye", "J.D. Salinger", "Little, Brown and Company", "1951-07-16"};
add_book(book1);
Book book2 = {"To Kill a Mockingbird", "Harper Lee", "J. B. Lippincott & Co.", "1960-07-11"};
add_book(book2);
Book book3 = {"1984", "George Orwell", "Secker and Warburg", "1949-06-08"};
add_book(book3);
// 根据书名和作者打印图书信息
print_book_by_name("1984");
print_book_by_author("Harper Lee");
// 修改一本图书的信息
Book new_book3 = {"1984", "George Orwell", "Harcourt Brace Jovanovich", "1949-06-08"};
modify_book(2, new_book3);
// 删除一本图书
delete_book_by_name("To Kill a Mockingbird");
// 打印所有图书信息
print_all_books();
return 0;
}
```
阅读全文