用c语言写一个用文件储存信息的图书管理系统,其中包括图书显示,图书查询,图书修改,图书删除,显示读者信息,录入读者信息,查询读者信息,修改读者信息,删除读者信息,借阅图书,归还图书这些功能,你觉得这个项目的重难点在哪些方面
时间: 2023-06-17 07:06:26 浏览: 75
这个项目的重难点在以下几个方面:
1. 文件操作:图书管理系统需要用文件来储存信息,因此需要对文件进行读写操作。在进行文件操作时,需要注意文件打开、读写指针的位置以及文件关闭等问题,以避免文件被破坏或数据丢失。
2. 数据结构设计:图书管理系统需要设计合适的数据结构来储存图书和读者信息。需要考虑如何快速的查询、修改、删除图书和读者信息,以及如何方便的添加新的图书和读者信息。
3. 界面设计:用户界面应该简单易用,方便用户进行各种操作。需要设计合适的菜单和交互方式来呈现图书和读者信息,并且需要考虑如何进行输入验证,以避免输入错误或非法数据。
4. 借阅和归还功能:借阅和归还功能需要进行相关的业务逻辑处理,包括判断图书是否可借、读者是否有借书资格、记录借阅信息等。需要考虑如何处理异常情况,如图书已被借走、读者借书数量已达上限等。
5. 错误处理:在程序运行中可能会出现各种错误,如文件读写错误、输入错误、逻辑错误等。需要考虑如何进行错误处理,以避免程序崩溃或数据丢失。
相关问题
帮我用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;
}
}
}
```
该图书管理系统使用了两个结构体,分别用于存储图书信息和读者信息。在程序运行时,会从文件中读取之前保存的图书信息和读者信息。用户可以选择不同的功能,例如录入图书、查询图书、借阅图书等等。每次用户进行修改后,程序会将最新的图书信息和读者信息保存到文件中以便下次使用时读取。
帮我用c语言写一个图书管理系统,其中包括录入图书,显示图书,查询图书,修改图书,删除图书,录入读者信息,查询读者信息,修改读者信息,删除读者信息这些功能
好的,以下是一个简单的图书管理系统的代码示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_BOOKS 100
#define MAX_READERS 100
struct Book {
char title[50];
char author[50];
int year;
float price;
};
struct Reader {
char name[50];
int age;
char email[50];
};
struct Book books[MAX_BOOKS];
int num_books = 0;
struct Reader readers[MAX_READERS];
int num_readers = 0;
void add_book() {
struct Book book;
printf("Enter title: ");
scanf("%s", book.title);
printf("Enter author: ");
scanf("%s", book.author);
printf("Enter year: ");
scanf("%d", &book.year);
printf("Enter price: ");
scanf("%f", &book.price);
books[num_books++] = book;
printf("Book added successfully.\n");
}
void display_books() {
if (num_books == 0) {
printf("No books found.\n");
return;
}
printf("Title\tAuthor\tYear\tPrice\n");
for (int i = 0; i < num_books; i++) {
struct Book book = books[i];
printf("%s\t%s\t%d\t%.2f\n", book.title, book.author, book.year, book.price);
}
}
void search_book() {
char title[50];
printf("Enter title to search: ");
scanf("%s", title);
for (int i = 0; i < num_books; i++) {
struct Book book = books[i];
if (strcmp(book.title, title) == 0) {
printf("Title\tAuthor\tYear\tPrice\n");
printf("%s\t%s\t%d\t%.2f\n", book.title, book.author, book.year, book.price);
return;
}
}
printf("Book not found.\n");
}
void edit_book() {
char title[50];
printf("Enter title to edit: ");
scanf("%s", title);
for (int i = 0; i < num_books; i++) {
struct Book *book = &books[i];
if (strcmp(book->title, title) == 0) {
printf("Enter new title: ");
scanf("%s", book->title);
printf("Enter new author: ");
scanf("%s", book->author);
printf("Enter new year: ");
scanf("%d", &book->year);
printf("Enter new price: ");
scanf("%f", &book->price);
printf("Book edited successfully.\n");
return;
}
}
printf("Book not found.\n");
}
void delete_book() {
char title[50];
printf("Enter title to delete: ");
scanf("%s", title);
for (int i = 0; i < num_books; i++) {
struct Book *book = &books[i];
if (strcmp(book->title, title) == 0) {
for (int j = i; j < num_books - 1; j++) {
books[j] = books[j + 1];
}
num_books--;
printf("Book deleted successfully.\n");
return;
}
}
printf("Book not found.\n");
}
void add_reader() {
struct Reader reader;
printf("Enter name: ");
scanf("%s", reader.name);
printf("Enter age: ");
scanf("%d", &reader.age);
printf("Enter email: ");
scanf("%s", reader.email);
readers[num_readers++] = reader;
printf("Reader added successfully.\n");
}
void display_readers() {
if (num_readers == 0) {
printf("No readers found.\n");
return;
}
printf("Name\tAge\tEmail\n");
for (int i = 0; i < num_readers; i++) {
struct Reader reader = readers[i];
printf("%s\t%d\t%s\n", reader.name, reader.age, reader.email);
}
}
void search_reader() {
char name[50];
printf("Enter name to search: ");
scanf("%s", name);
for (int i = 0; i < num_readers; i++) {
struct Reader reader = readers[i];
if (strcmp(reader.name, name) == 0) {
printf("Name\tAge\tEmail\n");
printf("%s\t%d\t%s\n", reader.name, reader.age, reader.email);
return;
}
}
printf("Reader not found.\n");
}
void edit_reader() {
char name[50];
printf("Enter name to edit: ");
scanf("%s", name);
for (int i = 0; i < num_readers; i++) {
struct Reader *reader = &readers[i];
if (strcmp(reader->name, name) == 0) {
printf("Enter new name: ");
scanf("%s", reader->name);
printf("Enter new age: ");
scanf("%d", &reader->age);
printf("Enter new email: ");
scanf("%s", reader->email);
printf("Reader edited successfully.\n");
return;
}
}
printf("Reader not found.\n");
}
void delete_reader() {
char name[50];
printf("Enter name to delete: ");
scanf("%s", name);
for (int i = 0; i < num_readers; i++) {
struct Reader *reader = &readers[i];
if (strcmp(reader->name, name) == 0) {
for (int j = i; j < num_readers - 1; j++) {
readers[j] = readers[j + 1];
}
num_readers--;
printf("Reader deleted successfully.\n");
return;
}
}
printf("Reader not found.\n");
}
int main() {
int choice;
do {
printf("\n");
printf("1. Add book\n");
printf("2. Display books\n");
printf("3. Search book\n");
printf("4. Edit book\n");
printf("5. Delete book\n");
printf("6. Add reader\n");
printf("7. Display readers\n");
printf("8. Search reader\n");
printf("9. Edit reader\n");
printf("10. Delete reader\n");
printf("0. Exit\n");
printf("\nEnter your choice: ");
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1:
add_book();
break;
case 2:
display_books();
break;
case 3:
search_book();
break;
case 4:
edit_book();
break;
case 5:
delete_book();
break;
case 6:
add_reader();
break;
case 7:
display_readers();
break;
case 8:
search_reader();
break;
case 9:
edit_reader();
break;
case 10:
delete_reader();
break;
case 0:
printf("Exiting...\n");
break;
default:
printf("Invalid choice.\n");
break;
}
} while (choice != 0);
return 0;
}
```
该程序使用结构体来存储书籍和读者信息,通过调用不同的函数来实现不同的功能。可以通过不断输入不同的选项来进行不同的操作。
相关推荐
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)