标题:
图书管理系统-C语言代码
[打印本页]
作者:
rong666
时间:
2023-3-26 15:37
标题:
图书管理系统-C语言代码
1. 定义图书类Book,包括如下属性:
- 书名
- 作者
- 出版社
- 出版日期
- ISBN号
- 借出状态
2. 定义读者类Reader,包括如下属性:
- 姓名
- 学号/工号
- 借阅书籍数量
- 借阅历史
3. 定义图书馆类Library,包括如下属性:
- 图书馆名称
- 图书总量
- 已借出图书数量
- 图书列表
4. 定义如下函数进行图书管理:
- add_book():添加书籍
- remove_book():删除书籍
- borrow_book():借阅书籍
- return_book():归还书籍
- check_book_status():检查书籍借出状态
- search_book():查找书籍
- add_reader():添加读者
- remove_reader():删除读者
- borrow_history():查看借阅历史
- check_reader_status():检查读者借书状态
- search_reader():查找读者
5. 根据以上函数实现一个完整的图书馆管理系统。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 图书类
typedef struct book_struct {
char name[100];
char author[50];
char publisher[50];
char publish_date[20];
char isbn[50];
int borrowed;
} Book;
// 读者类
typedef struct reader_struct {
char name[50];
char id[50];
int borrow_amount;
Book *borrow_list[10]; // 保存借阅记录
} Reader;
// 图书馆类
typedef struct library_struct {
char name[50];
int total_books;
int borrowed_books;
Book *book_list[10000]; // 最多保存10000本书
Reader *reader_list[1000]; // 最多保存1000名读者
} Library;
// 函数声明
void add_book(Library *lib, Book *book);
void remove_book(Library *lib, Book *book);
void borrow_book(Library *lib, Reader *reader, Book *book);
void return_book(Library *lib, Reader *reader, Book *book);
void check_book_status(Book *book);
Book* search_book(Library *lib, char *name);
void add_reader(Library *lib, Reader *reader);
void remove_reader(Library *lib, Reader *reader);
void borrow_history(Reader *reader);
void check_reader_status(Reader *reader);
Reader* search_reader(Library *lib, char *name);
int main() {
// 初始化图书馆
Library lib = {"XX大学图书馆", 0, 0, {NULL}, {NULL}};
// 初始化几本书
Book b1 = {"算法导论", "Thomas H. Cormen", "机械工业出版社", "2006-8-1", "9787111187776", 0};
Book b2 = {"UNIX编程艺术", "Eric S. Raymond", "人民邮电出版社", "2004-1-1", "9787115120024", 0};
Book b3 = {"信息简史", "James Gleick", "中信出版社", "2002-7-1", "9787508600987", 0};
// 添加几本书到图书馆
add_book(&lib, &b1);
add_book(&lib, &b2);
add_book(&lib, &b3);
// 初始化读者
Reader r1 = {"张三", "2018001", 0, {NULL}};
// 添加读者
add_reader(&lib, &r1);
// 借一本书
borrow_book(&lib, &r1, &b1);
// 返还一本书
return_book(&lib, &r1, &b1);
return 0;
}
// 添加书籍
void add_book(Library *lib, Book *book) {
if(lib->total_books >= 10000) {
printf("Error: 图书馆容量已满,无法添加新书!\n");
return;
}
lib->book_list[lib->total_books] = book;
lib->total_books++;
printf("添加 \"%s\" 成功!\n", book->name);
}
// 删除书籍
void remove_book(Library *lib, Book *book) {
for(int i=0; i<lib->total_books; i++) {
if(strcmp(lib->book_list[i]->name, book->name)==0) {
// 如果这本书借出去了,不允许删除
if(lib->book_list[i]->borrowed) {
printf("Error: 书籍 \"%s\" 已借出,无法删除!\n", book->name);
return;
}
lib->total_books--;
for(int j=i; j<lib->total_books; j++) {
lib->book_list[j] = lib->book_list[j+1];
}
printf("删除 \"%s\" 成功!\n", book->name);
return;
}
}
printf("Error: 没有找到要删除的书籍!\n");
}
// 借阅书籍
void borrow_book(Library *lib, Reader *reader, Book *book) {
// 判断读者已经借了多少本书了
if(reader->borrow_amount >= 10) {
printf("Error: 读者 \"%s\" 借书已达上限!\n", reader->name);
return;
}
// 判断这本书是否已经借出去了
if(book->borrowed) {
printf("Error: 书籍 \"%s\" 已被借出!\n", book->name);
return;
}
reader->borrow_list[reader->borrow_amount] = book;
reader->borrow_amount++;
book->borrowed = 1;
lib->borrowed_books++;
printf("\"%s\" 已被 \"%s\" 借阅!\n", book->name, reader->name);
}
// 归还书籍
void return_book(Library *lib, Reader *reader, Book *book) {
// 查找这本书是否由该读者借阅
int found = 0;
for(int i=0; i<reader->borrow_amount; i++) {
if(reader->borrow_list[i] == book) {
found = 1;
for(int j=i; j<reader->borrow_amount-1; j++) {
reader->borrow_list[j] = reader->borrow_list[j+1];
}
reader->borrow_list[reader->borrow_amount-1] = NULL;
reader->borrow_amount--;
book->borrowed = 0;
lib->borrowed_books--;
printf("\"%s\" 已被 \"%s\" 归还!\n", book->name, reader->name);
break;
}
}
if(!found) {
printf("Error: \"%s\" 并没有借阅 \"%s\"!\n", reader->name, book->name);
}
}
// 检查书籍的借出状态
void check_book_status(Book *book) {
if(book->borrowed) {
printf("\"%s\" 已经被借出了!\n", book->name);
} else {
printf("\"%s\" 目前还没被借出!\n", book->name);
}
}
// 查找书籍
Book* search_book(Library *lib, char *name) {
for(int i=0; i<lib->total_books; i++) {
if(strcmp(lib->book_list[i]->name, name)==0) {
return lib->book_list[i];
}
}
printf("Error: 没有找到书籍 \"%s\"!\n", name);
return NULL;
}
// 添加读者
void add_reader(Library *lib, Reader *reader) {
if(lib->total_books >= 1000) {
printf("Error: 图书馆读者容量已满,无法添加新读者!\n");
return;
}
lib->reader_list[lib->total_books] = reader;
lib->total_books++;
printf("添加读者 \"%s\" 成功!\n", reader->name);
}
// 删除读者
void remove_reader(Library *lib, Reader *reader) {
for(int i=0; i<lib->total_books; i++) {
if(lib->reader_list[i] == reader) {
// 如果这个读者还有未归还的书,不允许删除
if(reader->borrow_amount > 0) {
printf("Error: 读者 \"%s\" 还有未归还的书籍,无法删除!\n", reader->name);
return;
}
lib->total_books--;
for(int j=i; j<lib->total_books; j++) {
lib->reader_list[j] = lib->reader_list[j+1];
}
printf("删除读者 \"%s\" 成功!\n", reader->name);
return;
}
}
printf("Error: 没有找到要删除的读者!\n");
}
// 查看读者借阅记录
void borrow_history(Reader *reader) {
printf("%s 的借阅历史:\n", reader->name);
for(int i=0; i<reader->borrow_amount; i++) {
printf("%d. %s (%s)\n", i+1, reader->borrow_list[i]->name, reader->borrow_list[i]->author);
}
}
// 检查读者是否有借书超期未归还的情况
void check_reader_status(Reader *reader) {
if(reader->borrow_amount == 0) {
return;
}
printf("检查 %s 是否有超期未归还的书籍...\n", reader->name);
// 模拟检查过程,假设借阅期限为14天,超过14天就算超期
for(int i=0; i<reader->borrow_amount; i++) {
if(reader->borrow_list[i]->borrowed == 1) {
printf("警告:\"%s\" 已经超期未归还 %d 天!\n", reader->borrow_list[i]->name, 28);
}
}
}
// 查找读者
Reader* search_reader(Library *lib, char *name) {
for(int i=0; i<lib->total_books; i++) {
if(strcmp(lib->reader_list[i]->name, name)==0) {
return lib->reader_list[i];
}
}
printf("Error: 没有找到读者 \"%s\"!\n", name);
return NULL;
}
复制代码
作者:
glinfei
时间:
2023-3-26 22:46
这应该是学习链表的代码,怎么不用呢?还有菜单也没写
作者:
a185980800
时间:
2023-3-26 23:16
牛,做个记号
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1