C语言实现简单的图书管理系统
更新时间:2023-08-09前言:
图书管理系统是一个用于管理图书馆或书店中图书信息的软件系统。该系统的主要功能包括图书的录入、借阅、归还以及查询等。本文将使用C语言来实现一个简单的图书管理系统,并逐步介绍代码的设计和编写过程。
实现思路:
首先,我们需要定义一个结构体来表示图书的属性,例如书名、作者、出版社等。接着,我们可以使用链表数据结构来存储图书的信息,每个节点代表一本图书。然后,我们需要实现几个基本的功能:添加图书、删除图书、借阅图书、归还图书以及查询图书。最后,我们可以通过一个简单的菜单界面来展示系统的功能,供用户选择操作。
代码实现:
#include#include #include // 定义图书结构体 struct Book { char title[100]; char author[100]; char publisher[100]; }; // 定义图书链表节点结构体 struct Node { struct Book book; struct Node* next; }; // 全局变量,指向链表头节点 struct Node* head = NULL; // 添加图书 void addBook(struct Book book) { // 创建新节点 struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->book = book; newNode->next = NULL; // 如果链表为空,则新节点作为头节点 if (head == NULL) { head = newNode; } else { // 否则遍历至链表末尾,并将新节点插入 struct Node* current = head; while (current->next != NULL) { current = current->next; } current->next = newNode; } } // 删除图书 void removeBook(char* title) { // 如果链表为空,则直接返回 if (head == NULL) { return; } // 如果头节点的书名匹配,则删除头节点 if (strcmp(head->book.title, title) == 0) { struct Node* temp = head; head = head->next; free(temp); return; } // 遍历链表,找到匹配的节点并删除 struct Node* current = head; struct Node* prev = NULL; while (current != NULL) { if (strcmp(current->book.title, title) == 0) { prev->next = current->next; free(current); return; } prev = current; current = current->next; } } // 借阅图书 void borrowBook(char* title) { // 遍历链表,找到匹配的图书并修改状态为借出 struct Node* current = head; while (current != NULL) { if (strcmp(current->book.title, title) == 0) { // 修改状态为借出 printf("成功借出图书:%s\n", title); return; } current = current->next; } printf("未找到该图书:%s\n", title); } // 归还图书 void returnBook(char* title) { // 遍历链表,找到匹配的图书并修改状态为归还 struct Node* current = head; while (current != NULL) { if (strcmp(current->book.title, title) == 0) { // 修改状态为归还 printf("成功归还图书:%s\n", title); return; } current = current->next; } printf("未找到该图书:%s\n", title); } // 查询图书 void searchBook(char* title) { // 遍历链表,找到匹配的图书并打印信息 struct Node* current = head; while (current != NULL) { if (strcmp(current->book.title, title) == 0) { printf("图书信息:\n"); printf("书名:%s\n", current->book.title); printf("作者:%s\n", current->book.author); printf("出版社:%s\n", current->book.publisher); return; } current = current->next; } printf("未找到该图书:%s\n", title); } int main() { int choice; struct Book book; char title[100]; while (1) { printf("\n图书管理系统\n"); printf("1. 添加图书\n"); printf("2. 删除图书\n"); printf("3. 借阅图书\n"); printf("4. 归还图书\n"); printf("5. 查询图书\n"); printf("6. 退出系统\n"); printf("请选择操作:"); scanf("%d", &choice); switch (choice) { case 1: printf("请输入图书信息(书名 作者 出版社):"); scanf("%s %s %s", book.title, book.author, book.publisher); addBook(book); break; case 2: printf("请输入要删除的图书书名:"); scanf("%s", title); removeBook(title); break; case 3: printf("请输入要借阅的图书书名:"); scanf("%s", title); borrowBook(title); break; case 4: printf("请输入要归还的图书书名:"); scanf("%s", title); returnBook(title); break; case 5: printf("请输入要查询的图书书名:"); scanf("%s", title); searchBook(title); break; case 6: exit(0); } } return 0; }
代码解释:
上述代码首先定义了一个Book结构体,用于表示图书的属性。接着定义了一个Node结构体,表示图书链表的节点,其中包含一个Book类型的数据和一个指向下一个节点的指针。全局变量head指向链表的头节点。
addBook函数用于添加图书,它将新的图书信息作为参数,创建一个新的节点,并将其插入到链表的末尾。
removeBook函数用于删除图书,它接受一个书名作为参数,遍历链表找到匹配的节点,并删除。
borrowBook和returnBook函数分别用于借阅图书和归还图书,它们也接受一个书名作为参数,遍历链表找到匹配的节点,并修改图书的借阅状态。
searchBook函数用于查询图书,它接受一个书名作为参数,遍历链表找到匹配的节点,并打印图书的详细信息。
最后,main函数实现了一个简单的菜单界面,通过用户输入选择不同的功能操作。根据用户的选择,调用相应的函数进行图书管理操作。
总结:
通过上述代码的实现,我们成功地创建了一个简单的图书管理系统,实现了图书的添加、删除、借阅、归还以及查询功能。这个系统可以作为初学者入门C语言的一个练手项目,同时也可以作为后续学习更复杂的图书管理系统的基础。