在C语言中我要用链表做图书管理系统功能有从文件中录入图书信息不是手动录入并输出图书信息查找图书信息通过查找图书的名称来找书借阅图书借阅人学号借阅时间并输出这些信息归还图书并输出归还的时间退出程序
以下是一个使用链表实现的简单图书管理系统的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 图书信息结构体
typedef struct Book {
char title[50];
char author[50];
int year;
struct Book* next;
} Book;
// 添加图书到链表
void addBook(Book** head, char title[], char author[], int year) {
// 创建新的图书节点
Book* newBook = (Book*)malloc(sizeof(Book));
strcpy(newBook->title, title);
strcpy(newBook->author, author);
newBook->year = year;
newBook->next = NULL;
// 如果链表为空,则直接将新节点设为头节点
if (*head == NULL) {
*head = newBook;
return;
}
// 找到链表的末尾
Book* current = *head;
while (current->next != NULL) {
current = current->next;
}
// 将新节点连接到链表的末尾
current->next = newBook;
}
// 从文件中读取图书信息到链表
void readBooksFromFile(Book** head, char filename[]) {
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件 %s\n", filename);
return;
}
char title[50];
char author[50];
int year;
while (fscanf(file, "%s %s %d", title, author, &year) != EOF) {
addBook(head, title, author, year);
}
fclose(file);
}
// 输出图书信息
void printBooks(Book* head) {
printf("图书信息:\n");
printf("书名\t\t作者\t\t出版年份\n");
Book* current = head;
while (current != NULL) {
printf("%s\t\t%s\t\t%d\n", current->title, current->author, current->year);
current = current->next;
}
}
// 通过图书名称查找图书信息
void searchBook(Book* head, char title[]) {
Book* current = head;
while (current != NULL) {
if (strcmp(current->title, title) == 0) {
printf("找到图书:\n");
printf("书名\t\t作者\t\t出版年份\n");
printf("%s\t\t%s\t\t%d\n", current->title, current->author, current->year);
return;
}
current = current->next;
}
printf("未找到图书: %s\n", title);
}
// 借阅图书
void borrowBook(Book* head, char title[], char borrower[], int studentId) {
Book* current = head;
while (current != NULL) {
if (strcmp(current->title, title) == 0) {
printf("借阅图书信息:\n");
printf("书名\t\t作者\t\t出版年份\n");
printf("%s\t\t%s\t\t%d\n", current->title, current->author, current->year);
printf("借阅人: %s\n", borrower);
printf("学号: %d\n", studentId);
// 在这里添加你处理借阅时间的代码
return;
}
current = current->next;
}
printf("未找到图书: %s\n", title);
}
// 归还图书
void returnBook(Book* head, char title[]) {
Book* current = head;
while (current != NULL) {
if (strcmp(current->title, title) == 0) {
printf("归还图书信息:\n");
printf("书名\t\t作者\t\t出版年份\n");
printf("%s\t\t%s\t\t%d\n", current->title, current->author, current->year);
// 在这里添加你处理归还时间的代码
return;
}
current = current->next;
}
printf("未找到图书: %s\n", title);
}
// 释放链表内存
void freeList(Book* head) {
Book* current = head;
while (current != NULL) {
Book* next = current->next;
free(current);
current = next;
}
}
int main() {
Book* head = NULL; // 头节点初始化为空
// 从文件中读取图书信息到链表
readBooksFromFile(&head, "books.txt");
int choice;
char title[50];
char author[50];
int year;
char borrower[50];
int studentId;
do {
printf("\n图书管理系统\n");
printf("1. 输出图书信息\n");
printf("2. 查找图书信息\n");
printf("3. 借阅图书\n");
printf("4. 归还图书\n");
printf("0. 退出程序\n");
printf("请输入选择: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printBooks(head);
break;
case 2:
printf("请输入要查找的图书名称: ");
scanf("%s", title);
searchBook(head, title);
break;
case 3:
printf("请输入要借阅的图书名称: ");
scanf("%s", title);
printf("请输入借阅人姓名: ");
scanf("%s", borrower);
printf("请输入借阅人学号: ");
scanf("%d", &studentId);
borrowBook(head, title, borrower, studentId);
break;
case 4:
printf("请输入要归还的图书名称: ");
scanf("%s", title);
returnBook(head, title);
break;
case 0:
printf("程序已退出\n");
break;
default:
printf("无效选择\n");
break;
}
} while (choice != 0);
// 释放链表内存
freeList(head);
return 0;
}
请注意,此示例代码中的图书信息是从名为 "books.txt" 的文件中读取的,文件中每一行包含图书的名称、作者和出版年份,以空格分隔。你可以根据需求修改文件名和文件格式。另外,示例代码中的借阅和归还图书的时间处理部分需要你自己完成
原文地址: https://www.cveoy.top/t/topic/hKBC 著作权归作者所有。请勿转载和采集!