请你用c语言写一个功能较为完整的图书馆管理系统
时间: 2024-04-03 14:35:55 浏览: 17
好的,我会为您提供一个基于C语言的图书馆管理系统的代码示例。这个系统包括添加书籍、删除书籍、借阅书籍、归还书籍、查询借阅记录等功能。由于篇幅限制,我只提供部分代码,您可以根据需要进行修改和完善。
首先,我们需要创建一个MySQL数据库来存储图书馆的书籍信息、借书人信息、借阅记录等。可以使用MySQL客户端或其他工具来创建数据库和表。
接下来是程序代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
// 定义MySQL连接句柄
MYSQL mysql;
// 定义书籍信息结构体
typedef struct Book {
int id; // 书籍ID
char title[100]; // 书名
char author[100]; // 作者
char publisher[100]; // 出版社
char isbn[20]; // ISBN编号
int quantity; // 数量
} Book;
// 定义借阅信息结构体
typedef struct Borrow {
int id; // 借阅ID
int book_id; // 书籍ID
char name[100]; // 姓名
char phone[20]; // 联系电话
char borrow_date[20]; // 借阅日期
char return_date[20]; // 归还日期
} Borrow;
// 初始化MySQL连接
void init_mysql()
{
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "localhost", "root", "password", "library", 0, NULL, 0))
{
printf("Error connecting to database: %s\n", mysql_error(&mysql));
exit(1);
}
}
// 关闭MySQL连接
void close_mysql()
{
mysql_close(&mysql);
}
// 添加书籍
void add_book(Book *book)
{
char sql[1024];
sprintf(sql, "INSERT INTO books (title, author, publisher, isbn, quantity) VALUES ('%s', '%s', '%s', '%s', %d)",
book->title, book->author, book->publisher, book->isbn, book->quantity);
if (mysql_query(&mysql, sql))
{
printf("Error adding book: %s\n", mysql_error(&mysql));
exit(1);
}
book->id = mysql_insert_id(&mysql);
printf("Book added successfully. Book ID: %d\n", book->id);
}
// 删除书籍
void delete_book(int id)
{
char sql[1024];
sprintf(sql, "DELETE FROM books WHERE id = %d", id);
if (mysql_query(&mysql, sql))
{
printf("Error deleting book: %s\n", mysql_error(&mysql));
exit(1);
}
printf("Book deleted successfully.\n");
}
// 借阅书籍
void borrow_book(Borrow *borrow)
{
char sql[1024];
// 检查书籍是否存在
sprintf(sql, "SELECT * FROM books WHERE id = %d", borrow->book_id);
if (mysql_query(&mysql, sql))
{
printf("Error borrowing book: %s\n", mysql_error(&mysql));
exit(1);
}
MYSQL_RES *result = mysql_store_result(&mysql);
if (mysql_num_rows(result) == 0)
{
printf("Book not found.\n");
mysql_free_result(result);
return;
}
mysql_free_result(result);
// 检查书籍数量是否足够
sprintf(sql, "SELECT quantity FROM books WHERE id = %d", borrow->book_id);
if (mysql_query(&mysql, sql))
{
printf("Error borrowing book: %s\n", mysql_error(&mysql));
exit(1);
}
result = mysql_store_result(&mysql);
MYSQL_ROW row = mysql_fetch_row(result);
int quantity = atoi(row[0]);
mysql_free_result(result);
if (quantity <= 0)
{
printf("Book not available.\n");
return;
}
// 更新书籍数量
sprintf(sql, "UPDATE books SET quantity = %d WHERE id = %d", quantity - 1, borrow->book_id);
if (mysql_query(&mysql, sql))
{
printf("Error borrowing book: %s\n", mysql_error(&mysql));
exit(1);
}
// 添加借阅记录
sprintf(sql, "INSERT INTO borrows (book_id, name, phone, borrow_date, return_date) VALUES (%d, '%s', '%s', '%s', '%s')",
borrow->book_id, borrow->name, borrow->phone, borrow->borrow_date, borrow->return_date);
if (mysql_query(&mysql, sql))
{
printf("Error borrowing book: %s\n", mysql_error(&mysql));
exit(1);
}
borrow->id = mysql_insert_id(&mysql);
printf("Book borrowed successfully. Borrow ID: %d\n", borrow->id);
}
// 归还书籍
void return_book(int id)
{
char sql[1024];
// 检查借阅记录是否存在
sprintf(sql, "SELECT * FROM borrows WHERE id = %d", id);
if (mysql_query(&mysql, sql))
{
printf("Error returning book: %s\n", mysql_error(&mysql));
exit(1);
}
MYSQL_RES *result = mysql_store_result(&mysql);
if (mysql_num_rows(result) == 0)
{
printf("Borrow not found.\n");
mysql_free_result(result);
return;
}
MYSQL_ROW row = mysql_fetch_row(result);
int book_id = atoi(row[1]);
mysql_free_result(result);
// 更新书籍数量
sprintf(sql, "UPDATE books SET quantity = quantity + 1 WHERE id = %d", book_id);
if (mysql_query(&mysql, sql))
{
printf("Error returning book: %s\n", mysql_error(&mysql));
exit(1);
}
// 删除借阅记录
sprintf(sql, "DELETE FROM borrows WHERE id = %d", id);
if (mysql_query(&mysql, sql))
{
printf("Error returning book: %s\n", mysql_error(&mysql));
exit(1);
}
printf("Book returned successfully.\n");
}
// 查询借阅记录
void query_borrows()
{
char sql[1024];
sprintf(sql, "SELECT borrows.id, books.title, borrows.name, borrows.phone, borrows.borrow_date, borrows.return_date FROM borrows INNER JOIN books ON borrows.book_id = books.id");
if (mysql_query(&mysql, sql))
{
printf("Error querying borrows: %s\n", mysql_error(&mysql));
exit(1);
}
MYSQL_RES *result = mysql_store_result(&mysql);
printf("ID\tTitle\tName\tPhone\tBorrow Date\tReturn Date\n");
while (MYSQL_ROW row = mysql_fetch_row(result))
{
printf("%s\t%s\t%s\t%s\t%s\t%s\n", row[0], row[1], row[2], row[3], row[4], row[5]);
}
mysql_free_result(result);
}
// 主函数
int main()
{
// 初始化MySQL连接
init_mysql();
// 添加书籍
Book book = {0, "C Programming Language", "Brian Kernighan, Dennis Ritchie", "Prentice Hall", "978-0131103627", 10};
add_book(&book);
// 删除书籍
delete_book(1);
// 借阅书籍
Borrow borrow = {0, 2, "John", "123456789", "2021-01-01", "2021-02-01"};
borrow_book(&borrow);
// 归还书籍
return_book(1);
// 查询借阅记录
query_borrows();
// 关闭MySQL连接
close_mysql();
return 0;
}
```
这个图书馆管理系统使用了MySQL数据库来存储书籍信息、借书人信息、借阅记录等,提供了添加书籍、删除书籍、借阅书籍、归还书籍、查询借阅记录等功能。程序中使用了MySQL C API来连接和操作数据库,使用了结构体来存储书籍信息和借阅信息。需要注意的是,本示例程序仅供参考,实际开发中需要进行修改和完善。