用c语言编写一个链表图书管理系统,里面包含录入图书信息,插入删除图书信息,查看图书信息函数
时间: 2024-05-22 17:13:30 浏览: 19
好的,这是一个很典型的链表应用场景,可以按照如下步骤实现:
1. 定义图书结构体,并包含书名、作者、出版社和出版日期等基本信息。
2. 定义链表节点结构体,并包含指向下一个节点的指针和指向对应图书信息结构体的指针。
3. 定义链表头结构体,并包含指向第一个节点的指针和链表中节点数量等基本信息。
4. 实现录入图书信息函数,可以通过从控制台输入方式获取图书信息,然后生成新的图书信息节点,并添加到链表中。
5. 实现插入和删除图书信息函数,可以根据图书信息中的唯一标识符(如书名)在链表中查找对应节点,然后进行信息修改或节点删除操作。
6. 实现查看图书信息函数,可以遍历整个链表,并依次输出各个图书节点包含的信息。
此外,需要注意链表节点的内存管理和错误处理等细节问题,具体实现可以参考相关 C 语言教程和代码示例。
相关问题
c语言图书信息管理系统
好的,你需要一个 C 语言图书信息管理系统,对吧?我可以为你提供一些基本的思路和建议。
首先,你需要考虑系统的功能和需求。一个基本的图书信息管理系统应该至少包含以下功能:
1. 图书信息的录入、修改、查询和删除
2. 图书分类管理
3. 图书借阅和归还
4. 借阅记录查询
5. 统计功能,如统计图书借阅数量、读者借阅情况等
接下来,你需要设计系统的数据结构。你可以使用结构体来表示图书信息,例如:
```c
struct book {
char title[100]; // 书名
char author[50]; // 作者
char publisher[50]; // 出版社
int year; // 出版年份
char category[20]; // 图书分类
int stock; // 库存
};
```
你还需要设计一个结构体来表示借阅记录:
```c
struct borrow_record {
char book_title[100]; // 书名
char reader_id[20]; // 读者 ID
char borrow_date[20]; // 借阅日期
char return_date[20]; // 归还日期
};
```
接下来,你需要实现这些功能。你可以使用文件来存储图书信息和借阅记录。例如,你可以将图书信息保存在一个文件中,每一行表示一本书,用逗号或制表符分隔不同的字段。例如:
```
C语言程序设计,谭浩强,清华大学出版社,2019,计算机,10
```
这一行表示一本书的信息,依次是书名、作者、出版社、出版年份、分类和库存数量。你可以使用 fscanf() 函数来读取这些信息。
你还可以使用链表来存储图书信息和借阅记录。例如,你可以定义一个结构体来表示每个节点:
```c
struct node {
struct book book_info; // 图书信息
struct borrow_record borrow_info; // 借阅记录
struct node *next; // 指向下一个节点的指针
};
```
你可以实现链表的插入、删除和查找等操作来实现图书信息和借阅记录的管理。
最后,你需要设计一个用户界面,让用户可以方便地使用系统。你可以使用控制台界面或者图形界面来实现。
希望这些思路和建议能够对你有所帮助!
c语言图书管理系统用链表实现,要有录入,删除,修改,查询,还书,借书,统计,输出
好的,以下是一个简单的基于链表实现图书管理系统的代码,包含录入、删除、修改、查询、还书、借书、统计和输出功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 图书结构体
typedef struct Book {
char name[50]; // 书名
char author[50]; // 作者
char press[50]; // 出版社
char publish_date[20]; // 出版日期
int status; // 状态,0表示未借出,1表示已借出
struct Book *next; // 指向下一本书的指针
} Book;
// 全局变量
Book *head = NULL; // 链表头指针
int book_count = 0; // 图书总数
// 函数声明
void add_book(); // 录入图书
void delete_book(); // 删除图书
void modify_book(); // 修改图书信息
void search_book(); // 查询图书
void borrow_book(); // 借阅图书
void return_book(); // 归还图书
void statistics(); // 统计图书信息
void output_books(); // 输出所有图书
int main() {
int choice;
printf("欢迎使用图书管理系统!\n");
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("0. 退出系统\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_book();
break;
case 2:
delete_book();
break;
case 3:
modify_book();
break;
case 4:
search_book();
break;
case 5:
borrow_book();
break;
case 6:
return_book();
break;
case 7:
statistics();
break;
case 8:
output_books();
break;
case 0:
printf("谢谢使用!\n");
exit(0);
default:
printf("输入无效,请重新输入!\n");
break;
}
}
return 0;
}
// 录入图书
void add_book() {
Book *p = (Book*)malloc(sizeof(Book));
printf("\n请输入图书信息:\n");
printf("书名:");
scanf("%s", p->name);
printf("作者:");
scanf("%s", p->author);
printf("出版社:");
scanf("%s", p->press);
printf("出版日期:");
scanf("%s", p->publish_date);
p->status = 0;
p->next = NULL;
if (head == NULL) {
head = p;
} else {
Book *q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
book_count++;
printf("录入成功!\n");
}
// 删除图书
void delete_book() {
char name[50];
printf("\n请输入要删除的图书名称:");
scanf("%s", name);
if (head == NULL) {
printf("链表为空,无法删除!\n");
return;
}
Book *p = head;
if (strcmp(p->name, name) == 0) {
head = p->next;
free(p);
book_count--;
printf("删除成功!\n");
return;
}
while (p->next != NULL) {
if (strcmp(p->next->name, name) == 0) {
Book *q = p->next;
p->next = q->next;
free(q);
book_count--;
printf("删除成功!\n");
return;
}
p = p->next;
}
printf("未找到该图书!\n");
}
// 修改图书信息
void modify_book() {
char name[50];
printf("\n请输入要修改的图书名称:");
scanf("%s", name);
if (head == NULL) {
printf("链表为空,无法修改!\n");
return;
}
Book *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("请输入修改后的信息:\n");
printf("书名:");
scanf("%s", p->name);
printf("作者:");
scanf("%s", p->author);
printf("出版社:");
scanf("%s", p->press);
printf("出版日期:");
scanf("%s", p->publish_date);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("未找到该图书!\n");
}
// 查询图书
void search_book() {
char name[50];
printf("\n请输入要查询的图书名称:");
scanf("%s", name);
if (head == NULL) {
printf("链表为空,无法查询!\n");
return;
}
Book *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("书名:%s\n", p->name);
printf("作者:%s\n", p->author);
printf("出版社:%s\n", p->press);
printf("出版日期:%s\n", p->publish_date);
printf("状态:%s\n", p->status == 0 ? "未借出" : "已借出");
return;
}
p = p->next;
}
printf("未找到该图书!\n");
}
// 借阅图书
void borrow_book() {
char name[50];
printf("\n请输入要借阅的图书名称:");
scanf("%s", name);
if (head == NULL) {
printf("链表为空,无法借阅!\n");
return;
}
Book *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
if (p->status == 1) {
printf("该图书已被借出,请选择其他图书!\n");
return;
} else {
p->status = 1;
printf("借阅成功!\n");
return;
}
}
p = p->next;
}
printf("未找到该图书!\n");
}
// 归还图书
void return_book() {
char name[50];
printf("\n请输入要归还的图书名称:");
scanf("%s", name);
if (head == NULL) {
printf("链表为空,无法归还!\n");
return;
}
Book *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
if (p->status == 0) {
printf("该图书未被借出,无法归还!\n");
return;
} else {
p->status = 0;
printf("归还成功!\n");
return;
}
}
p = p->next;
}
printf("未找到该图书!\n");
}
// 统计图书信息
void statistics() {
int borrowed_count = 0;
int available_count = 0;
Book *p = head;
while (p != NULL) {
if (p->status == 0) {
available_count++;
} else {
borrowed_count++;
}
p = p->next;
}
printf("\n图书总数:%d\n", book_count);
printf("借出图书数:%d\n", borrowed_count);
printf("可借阅图书数:%d\n", available_count);
}
// 输出所有图书
void output_books() {
if (head == NULL) {
printf("链表为空!\n");
return;
}
Book *p = head;
printf("\n所有图书信息如下:\n");
while (p != NULL) {
printf("书名:%s\n", p->name);
printf("作者:%s\n", p->author);
printf("出版社:%s\n", p->press);
printf("出版日期:%s\n", p->publish_date);
printf("状态:%s\n", p->status == 0 ? "未借出" : "已借出");
printf("-------------------------\n");
p = p->next;
}
}
```
注意,上述代码仅为示例,实际应用中可能需要针对具体需求进行修改和完善。同时,还需要注意内存泄漏问题,使用完动态分配的内存后,需要调用 `free()` 函数释放内存。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://img-home.csdnimg.cn/images/20210720083646.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)
![](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)