用C语言写一个图书管理系统 目的:顺序表的应用 该系统含有的功能为:a、把图书按照专业进修分类,每个类的图书建立一个顺序表b、对图书的状态进行标注(数量、可借、不可借)c、如果可以借,标明馆藏地 d、如果借出,标明归还日期
时间: 2023-07-10 18:15:16 浏览: 122
好的,我了解了你的要求。下面是一个简单的基于顺序表的图书管理系统的C语言代码示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_BOOKS 100 // 图书馆最大容量
#define MAX_NAME_LEN 50 // 书名的最大长度
#define MAX_AUTHOR_LEN 50 // 作者姓名的最大长度
// 图书结构体
typedef struct {
char name[MAX_NAME_LEN]; // 书名
char author[MAX_AUTHOR_LEN]; // 作者姓名
int quantity; // 数量
int available; // 可借数量
char location[20]; // 馆藏地
char due_date[20]; // 归还日期
} Book;
// 按照专业进修分类的图书顺序表
typedef struct {
char category[20]; // 专业进修分类
Book books[MAX_BOOKS]; // 该分类下的图书列表
int count; // 该分类下的图书数量
} BookList;
// 图书馆
typedef struct {
BookList booklists[10]; // 图书馆的图书分类列表
int count; // 图书馆的图书总数量
} Library;
// 初始化图书馆
void init_library(Library *lib) {
lib->count = 0;
}
// 添加一本书到指定的分类中
void add_book(Library *lib, char *category, Book book) {
int i, j;
for (i = 0; i < lib->count; ++i) {
if (strcmp(lib->booklists[i].category, category) == 0) {
// 找到了指定的分类
BookList *list = &lib->booklists[i];
for (j = 0; j < list->count; ++j) {
if (strcmp(list->books[j].name, book.name) == 0) {
// 如果已经存在同名的书,则更新数量和可借数量
list->books[j].quantity += book.quantity;
list->books[j].available += book.available;
return;
}
}
// 如果不存在同名的书,则添加到该分类中
strcpy(list->books[list->count].name, book.name);
strcpy(list->books[list->count].author, book.author);
list->books[list->count].quantity = book.quantity;
list->books[list->count].available = book.available;
strcpy(list->books[list->count].location, book.location);
strcpy(list->books[list->count].due_date, book.due_date);
list->count++;
return;
}
}
// 如果指定的分类不存在,则创建一个新的分类并添加该书
strcpy(lib->booklists[lib->count].category, category);
BookList *list = &lib->booklists[lib->count];
list->count = 1;
strcpy(list->books[0].name, book.name);
strcpy(list->books[0].author, book.author);
list->books[0].quantity = book.quantity;
list->books[0].available = book.available;
strcpy(list->books[0].location, book.location);
strcpy(list->books[0].due_date, book.due_date);
lib->count++;
}
// 显示指定分类的所有书籍
void show_books(Library *lib, char *category) {
int i, j;
for (i = 0; i < lib->count; ++i) {
if (strcmp(lib->booklists[i].category, category) == 0) {
// 找到了指定的分类
BookList *list = &lib->booklists[i];
printf("书名\t作者\t数量\t可借\t馆藏地\t归还日期\n");
for (j = 0; j < list->count; ++j) {
printf("%s\t%s\t%d\t%d\t%s\t%s\n", list->books[j].name, list->books[j].author,
list->books[j].quantity, list->books[j].available,
list->books[j].location, list->books[j].due_date);
}
return;
}
}
printf("未找到分类:%s\n", category);
}
int main() {
Library lib;
init_library(&lib);
// 添加一些书籍
Book book1 = {"C Primer Plus", "Stephen Prata", 10, 5, "A001", ""};
add_book(&lib, "计算机科学与技术", book1);
Book book2 = {"数据结构与算法分析", "Mark Allen Weiss", 5, 2, "B001", ""};
add_book(&lib, "计算机科学与技术", book2);
Book book3 = {"计算机组成原理", "唐朔飞", 8, 8, "C001", ""};
add_book(&lib, "计算机科学与技术", book3);
Book book4 = {"高等数学", "同济大学数学系", 6, 6, "D001", ""};
add_book(&lib, "数学", book4);
Book book5 = {"西方哲学史", "Bertrand Russell", 3, 1, "E001", ""};
add_book(&lib, "哲学", book5);
// 显示图书馆中的所有书籍
show_books(&lib, "计算机科学与技术");
show_books(&lib, "数学");
show_books(&lib, "哲学");
return 0;
}
```
这个图书管理系统支持按照专业进修分类,每个分类下的书籍使用顺序表进行存储。可以添加、查询和显示所有书籍的信息。在添加书籍时,如果已经存在同名的书,则更新数量和可借数量,否则添加一本新书。
阅读全文