帮我用c语言写一个用文件存储信息的图书管理系统,其中包括录入图书,显示图书,查询图书,修改图书,删除图书。录入读者信息,显示读者信息,查询读者信息,修改读者信息,删除读者信息这些功能
时间: 2023-06-15 20:07:07 浏览: 105
c语言写的图书管理系统
好的,下面是一个简单的用文件存储信息的图书管理系统的C语言代码实现,其中包括录入图书,显示图书,查询图书,修改图书,删除图书,录入读者信息,显示读者信息,查询读者信息,修改读者信息,删除读者信息等功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 1000
#define MAX_READERS 1000
#define MAX_NAME 50
#define MAX_AUTHOR 50
#define MAX_PUBLISHER 50
#define MAX_ISBN 20
#define MAX_PHONE 20
// 定义图书结构体
typedef struct book {
char name[MAX_NAME]; // 书名
char author[MAX_AUTHOR]; // 作者
char publisher[MAX_PUBLISHER]; // 出版社
char isbn[MAX_ISBN]; // ISBN号
int amount; // 数量
int borrowed; // 已借出数量
} Book;
// 定义读者结构体
typedef struct reader {
char name[MAX_NAME]; // 读者姓名
char phone[MAX_PHONE]; // 读者电话号码
int borrowed_books[MAX_BOOKS]; // 借阅的图书编号
int borrowed_count; // 借阅的图书数量
} Reader;
// 存储所有的图书信息
Book books[MAX_BOOKS];
int books_count = 0;
// 存储所有的读者信息
Reader readers[MAX_READERS];
int readers_count = 0;
// 保存图书信息到文件中
void save_books() {
FILE *fp = fopen("books.dat", "wb");
if (fp == NULL) {
printf("无法打开文件 books.dat!\n");
return;
}
fwrite(&books_count, sizeof(int), 1, fp);
fwrite(books, sizeof(Book), books_count, fp);
fclose(fp);
}
// 从文件中读取图书信息
void load_books() {
FILE *fp = fopen("books.dat", "rb");
if (fp == NULL) {
printf("无法打开文件 books.dat!\n");
return;
}
fread(&books_count, sizeof(int), 1, fp);
fread(books, sizeof(Book), books_count, fp);
fclose(fp);
}
// 保存读者信息到文件中
void save_readers() {
FILE *fp = fopen("readers.dat", "wb");
if (fp == NULL) {
printf("无法打开文件 readers.dat!\n");
return;
}
fwrite(&readers_count, sizeof(int), 1, fp);
fwrite(readers, sizeof(Reader), readers_count, fp);
fclose(fp);
}
// 从文件中读取读者信息
void load_readers() {
FILE *fp = fopen("readers.dat", "rb");
if (fp == NULL) {
printf("无法打开文件 readers.dat!\n");
return;
}
fread(&readers_count, sizeof(int), 1, fp);
fread(readers, sizeof(Reader), readers_count, fp);
fclose(fp);
}
// 录入图书信息
void add_book() {
if (books_count >= MAX_BOOKS) {
printf("图书数量已达到上限!\n");
return;
}
Book new_book;
printf("请输入书名: ");
scanf("%s", new_book.name);
printf("请输入作者: ");
scanf("%s", new_book.author);
printf("请输入出版社: ");
scanf("%s", new_book.publisher);
printf("请输入ISBN号: ");
scanf("%s", new_book.isbn);
printf("请输入数量: ");
scanf("%d", &new_book.amount);
new_book.borrowed = 0;
books[books_count++] = new_book;
save_books();
printf("图书添加成功!\n");
}
// 显示所有图书信息
void show_books() {
if (books_count == 0) {
printf("暂无图书信息!\n");
return;
}
printf("编号\t书名\t作者\t出版社\tISBN号\t数量\t已借出数量\n");
for (int i = 0; i < books_count; i++) {
printf("%d\t%s\t%s\t%s\t%s\t%d\t%d\n", i, books[i].name, books[i].author, books[i].publisher, books[i].isbn, books[i].amount, books[i].borrowed);
}
}
// 查询图书信息
void search_book() {
char isbn[MAX_ISBN];
printf("请输入要查询的图书的ISBN号: ");
scanf("%s", isbn);
for (int i = 0; i < books_count; i++) {
if (strcmp(books[i].isbn, isbn) == 0) {
printf("书名: %s\n", books[i].name);
printf("作者: %s\n", books[i].author);
printf("出版社: %s\n", books[i].publisher);
printf("ISBN号: %s\n", books[i].isbn);
printf("数量: %d\n", books[i].amount);
printf("已借出数量: %d\n", books[i].borrowed);
return;
}
}
printf("没有找到相关图书信息!\n");
}
// 修改图书信息
void modify_book() {
int id;
printf("请输入要修改的图书的编号: ");
scanf("%d", &id);
if (id >= books_count || id < 0) {
printf("无效的编号!\n");
return;
}
printf("请输入书名: ");
scanf("%s", books[id].name);
printf("请输入作者: ");
scanf("%s", books[id].author);
printf("请输入出版社: ");
scanf("%s", books[id].publisher);
printf("请输入ISBN号: ");
scanf("%s", books[id].isbn);
printf("请输入数量: ");
scanf("%d", &books[id].amount);
save_books();
printf("图书信息修改成功!\n");
}
// 删除图书信息
void delete_book() {
int id;
printf("请输入要删除的图书的编号: ");
scanf("%d", &id);
if (id >= books_count || id < 0) {
printf("无效的编号!\n");
return;
}
for (int i = id + 1; i < books_count; i++) {
books[i - 1] = books[i];
}
books_count--;
save_books();
printf("图书信息删除成功!\n");
}
// 录入读者信息
void add_reader() {
if (readers_count >= MAX_READERS) {
printf("读者数量已达到上限!\n");
return;
}
Reader new_reader;
printf("请输入读者姓名: ");
scanf("%s", new_reader.name);
printf("请输入读者电话号码: ");
scanf("%s", new_reader.phone);
new_reader.borrowed_count = 0;
readers[readers_count++] = new_reader;
save_readers();
printf("读者信息添加成功!\n");
}
// 显示所有读者信息
void show_readers() {
if (readers_count == 0) {
printf("暂无读者信息!\n");
return;
}
printf("编号\t姓名\t电话号码\t借阅的图书编号\n");
for (int i = 0; i < readers_count; i++) {
printf("%d\t%s\t%s\t", i, readers[i].name, readers[i].phone);
for (int j = 0; j < readers[i].borrowed_count; j++) {
printf("%d ", readers[i].borrowed_books[j]);
}
printf("\n");
}
}
// 查询读者信息
void search_reader() {
char phone[MAX_PHONE];
printf("请输入要查询的读者的电话号码: ");
scanf("%s", phone);
for (int i = 0; i < readers_count; i++) {
if (strcmp(readers[i].phone, phone) == 0) {
printf("姓名: %s\n", readers[i].name);
printf("电话号码: %s\n", readers[i].phone);
printf("借阅的图书编号: ");
for (int j = 0; j < readers[i].borrowed_count; j++) {
printf("%d ", readers[i].borrowed_books[j]);
}
printf("\n");
return;
}
}
printf("没有找到相关读者信息!\n");
}
// 修改读者信息
void modify_reader() {
int id;
printf("请输入要修改的读者的编号: ");
scanf("%d", &id);
if (id >= readers_count || id < 0) {
printf("无效的编号!\n");
return;
}
printf("请输入姓名: ");
scanf("%s", readers[id].name);
printf("请输入电话号码: ");
scanf("%s", readers[id].phone);
save_readers();
printf("读者信息修改成功!\n");
}
// 删除读者信息
void delete_reader() {
int id;
printf("请输入要删除的读者的编号: ");
scanf("%d", &id);
if (id >= readers_count || id < 0) {
printf("无效的编号!\n");
return;
}
for (int i = id + 1; i < readers_count; i++) {
readers[i - 1] = readers[i];
}
readers_count--;
save_readers();
printf("读者信息删除成功!\n");
}
// 借阅图书
void borrow_book() {
char phone[MAX_PHONE];
printf("请输入借阅者的电话号码: ");
scanf("%s", phone);
int reader_id = -1;
for (int i = 0; i < readers_count; i++) {
if (strcmp(readers[i].phone, phone) == 0) {
reader_id = i;
break;
}
}
if (reader_id == -1) {
printf("没有找到相关读者信息!\n");
return;
}
int book_id;
printf("请输入要借阅的图书的编号: ");
scanf("%d", &book_id);
if (book_id >= books_count || book_id < 0) {
printf("无效的编号!\n");
return;
}
if (books[book_id].borrowed >= books[book_id].amount) {
printf("该图书已经全部借出!\n");
return;
}
readers[reader_id].borrowed_books[readers[reader_id].borrowed_count++] = book_id;
books[book_id].borrowed++;
save_books();
save_readers();
printf("借阅成功!\n");
}
// 归还图书
void return_book() {
char phone[MAX_PHONE];
printf("请输入归还者的电话号码: ");
scanf("%s", phone);
int reader_id = -1;
for (int i = 0; i < readers_count; i++) {
if (strcmp(readers[i].phone, phone) == 0) {
reader_id = i;
break;
}
}
if (reader_id == -1) {
printf("没有找到相关读者信息!\n");
return;
}
int book_id;
printf("请输入要归还的图书的编号: ");
scanf("%d", &book_id);
if (book_id >= books_count || book_id < 0) {
printf("无效的编号!\n");
return;
}
int borrowed_book_id = -1;
for (int i = 0; i < readers[reader_id].borrowed_count; i++) {
if (readers[reader_id].borrowed_books[i] == book_id) {
borrowed_book_id = i;
break;
}
}
if (borrowed_book_id == -1) {
printf("该读者没有借阅该图书!\n");
return;
}
for (int i = borrowed_book_id + 1; i < readers[reader_id].borrowed_count; i++) {
readers[reader_id].borrowed_books[i - 1] = readers[reader_id].borrowed_books[i];
}
readers[reader_id].borrowed_count--;
books[book_id].borrowed--;
save_books();
save_readers();
printf("归还成功!\n");
}
int main() {
load_books();
load_readers();
while (1) {
printf("\n请选择操作:\n");
printf("1. 录入图书信息\n");
printf("2. 显示所有图书信息\n");
printf("3. 查询图书信息\n");
printf("4. 修改图书信息\n");
printf("5. 删除图书信息\n");
printf("6. 录入读者信息\n");
printf("7. 显示所有读者信息\n");
printf("8. 查询读者信息\n");
printf("9. 修改读者信息\n");
printf("10. 删除读者信息\n");
printf("11. 借阅图书\n");
printf("12. 归还图书\n");
printf("13. 退出\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
add_book();
break;
case 2:
show_books();
break;
case 3:
search_book();
break;
case 4:
modify_book();
break;
case 5:
delete_book();
break;
case 6:
add_reader();
break;
case 7:
show_readers();
break;
case 8:
search_reader();
break;
case 9:
modify_reader();
break;
case 10:
delete_reader();
break;
case 11:
borrow_book();
break;
case 12:
return_book();
break;
case 13:
save_books();
save_readers();
printf("感谢使用图书管理系统!\n");
return 0;
default:
printf("无效的选项!\n");
break;
}
}
}
```
该图书管理系统使用了两个结构体,分别用于存储图书信息和读者信息。在程序运行时,会从文件中读取之前保存的图书信息和读者信息。用户可以选择不同的功能,例如录入图书、查询图书、借阅图书等等。每次用户进行修改后,程序会将最新的图书信息和读者信息保存到文件中以便下次使用时读取。
阅读全文