在C语言中我要用链表做图书管理系统功能有从文件中录入图书信息作者图书编码出版社数量不是手动录入并输出图书信息查找图书信息通过查找图书的名称来找书借阅图书借阅人学号借阅时间并输出这些信息归还图书并输出归还的时间退出程序
以下是一个使用链表实现的简单图书管理系统的C代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书结构体
typedef struct Book {
char title[100];
char author[100];
char code[20];
char publisher[100];
int quantity;
struct Book* next;
} Book;
// 全局变量,指向链表头节点
Book* head = NULL;
// 从文件中录入图书信息
void loadBooksFromFile() {
FILE* file = fopen("books.txt", "r");
if (file == NULL) {
printf("文件打开失败\n");
return;
}
char title[100];
char author[100];
char code[20];
char publisher[100];
int quantity;
while (fscanf(file, "%s %s %s %s %d", title, author, code, publisher, &quantity) != EOF) {
Book* newBook = (Book*)malloc(sizeof(Book));
strcpy(newBook->title, title);
strcpy(newBook->author, author);
strcpy(newBook->code, code);
strcpy(newBook->publisher, publisher);
newBook->quantity = quantity;
newBook->next = NULL;
if (head == NULL) {
head = newBook;
} else {
Book* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newBook;
}
}
fclose(file);
}
// 输出图书信息
void displayBooks() {
Book* current = head;
printf("图书信息:\n");
while (current != NULL) {
printf("书名:%s\n", current->title);
printf("作者:%s\n", current->author);
printf("编码:%s\n", current->code);
printf("出版社:%s\n", current->publisher);
printf("数量:%d\n", current->quantity);
printf("-----------------------\n");
current = current->next;
}
}
// 查找图书信息
void searchBook(char* bookTitle) {
Book* current = head;
while (current != NULL) {
if (strcmp(current->title, bookTitle) == 0) {
printf("书名:%s\n", current->title);
printf("作者:%s\n", current->author);
printf("编码:%s\n", current->code);
printf("出版社:%s\n", current->publisher);
printf("数量:%d\n", current->quantity);
return;
}
current = current->next;
}
printf("未找到该图书\n");
}
// 借阅图书
void borrowBook(char* bookTitle, char* borrower, char* studentId, char* borrowDate) {
Book* current = head;
while (current != NULL) {
if (strcmp(current->title, bookTitle) == 0) {
if (current->quantity > 0) {
current->quantity--;
printf("借阅成功\n");
printf("书名:%s\n", current->title);
printf("借阅人:%s\n", borrower);
printf("学号:%s\n", studentId);
printf("借阅时间:%s\n", borrowDate);
return;
} else {
printf("该图书已全部借出\n");
return;
}
}
current = current->next;
}
printf("未找到该图书\n");
}
// 归还图书
void returnBook(char* bookTitle, char* returnDate) {
Book* current = head;
while (current != NULL) {
if (strcmp(current->title, bookTitle) == 0) {
current->quantity++;
printf("归还成功\n");
printf("书名:%s\n", current->title);
printf("归还时间:%s\n", returnDate);
return;
}
current = current->next;
}
printf("未找到该图书\n");
}
// 退出程序,释放链表内存
void exitProgram() {
Book* current = head;
while (current != NULL) {
Book* next = current->next;
free(current);
current = next;
}
}
int main() {
loadBooksFromFile();
int choice;
char bookTitle[100];
char borrower[100];
char studentId[20];
char borrowDate[20];
char returnDate[20];
do {
printf("图书管理系统\n");
printf("1. 输出图书信息\n");
printf("2. 查找图书信息\n");
printf("3. 借阅图书\n");
printf("4. 归还图书\n");
printf("5. 退出程序\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
displayBooks();
break;
case 2:
printf("请输入图书名称:");
scanf("%s", bookTitle);
searchBook(bookTitle);
break;
case 3:
printf("请输入图书名称:");
scanf("%s", bookTitle);
printf("请输入借阅人姓名:");
scanf("%s", borrower);
printf("请输入学号:");
scanf("%s", studentId);
printf("请输入借阅时间:");
scanf("%s", borrowDate);
borrowBook(bookTitle, borrower, studentId, borrowDate);
break;
case 4:
printf("请输入图书名称:");
scanf("%s", bookTitle);
printf("请输入归还时间:");
scanf("%s", returnDate);
returnBook(bookTitle, returnDate);
break;
case 5:
exitProgram();
printf("程序已退出\n");
break;
default:
printf("无效选项\n");
break;
}
} while (choice != 5);
return 0;
}
在该示例中,图书信息存储在链表中,通过读取文件中的数据来初始化链表。然后,通过菜单选项来执行不同的功能,如输出图书信息、查找图书信息、借阅图书、归还图书和退出程序。每个功能都有对应的函数来处理。最后,程序退出时会释放链表所占用的内存。请注意,该示例仅提供了基本的功能,可以根据需要进行扩展和修改。
原文地址: https://www.cveoy.top/t/topic/hKCz 著作权归作者所有。请勿转载和采集!