数据结构图书管理系统文件读取代码
时间: 2023-11-16 07:57:20 浏览: 152
根据引用中的描述,图书管理系统采用链表作为数据结构,可以通过相应的函数进行文件的存储与读取。具体实现可以参考以下步骤:
1. 定义图书信息的结构体,包括图书编号、书名、作者、出版社、价格等信息。
2. 定义链表节点的结构体,包括指向下一个节点的指针和指向图书信息结构体的指针。
3. 定义链表头节点的指针。
4. 编写函数进行文件的读取和存储,可以使用fopen()函数打开文件,使用fread()函数读取文件内容,使用fwrite()函数将数据写入文件中。
5. 在系统初始化时,调用读取文件的函数进行数据的初始化。
6. 编写函数进行图书信息的添加、删除、修改和查询等操作,可以通过遍历链表实现。
7. 在程序结束时,调用存储文件的函数将数据写入文件中。
具体实现细节可以根据实际需求进行调整和改进。同时,需要注意文件的格式统一,以便于读取和存储。
相关问题
数据结构图书管理系统c语言代码如何实现
下面是一个简单的数据结构图书管理系统的C语言代码实现,包括书籍的增加、删除、查询和修改等功能。具体实现方法如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书结构体
typedef struct book {
int id; // 编号
char name[20]; // 书名
char author[20]; // 作者
char press[20]; // 出版社
float price; // 价格
struct book *next;
} Book;
// 定义全局变量
Book *head = NULL; // 头结点指针
// 函数声明
void add_book();
void delete_book();
void search_book();
void modify_book();
void display_book();
void save_book();
void load_book();
// 主函数
int main() {
int choice;
// 加载图书数据
load_book();
while (1) {
printf("\n");
printf("1. Add book\n");
printf("2. Delete book\n");
printf("3. Search book\n");
printf("4. Modify book\n");
printf("5. Display books\n");
printf("6. Save books\n");
printf("7. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_book();
break;
case 2:
delete_book();
break;
case 3:
search_book();
break;
case 4:
modify_book();
break;
case 5:
display_book();
break;
case 6:
save_book();
break;
case 7:
// 退出程序前保存数据
save_book();
exit(0);
default:
printf("Invalid choice!\n");
}
}
return 0;
}
// 添加图书
void add_book() {
Book *p, *tail;
// 创建新结点
p = (Book *) malloc(sizeof(Book));
if (p == NULL) {
printf("Memory allocation failed!\n");
return;
}
// 输入图书信息
printf("Enter book id: ");
scanf("%d", &p->id);
printf("Enter book name: ");
scanf("%s", p->name);
printf("Enter book author: ");
scanf("%s", p->author);
printf("Enter book press: ");
scanf("%s", p->press);
printf("Enter book price: ");
scanf("%f", &p->price);
// 将新结点插入链表尾部
p->next = NULL;
if (head == NULL) {
head = p;
} else {
tail = head;
while (tail->next != NULL) {
tail = tail->next;
}
tail->next = p;
}
printf("Book added successfully!\n");
}
// 删除图书
void delete_book() {
int id;
Book *p, *prev;
// 输入图书编号
printf("Enter book id: ");
scanf("%d", &id);
// 查找对应结点
p = head;
prev = NULL;
while (p != NULL) {
if (p->id == id) {
break;
}
prev = p;
p = p->next;
}
if (p == NULL) {
printf("Book not found!\n");
return;
}
// 删除结点
if (prev == NULL) {
head = p->next;
} else {
prev->next = p->next;
}
free(p);
printf("Book deleted successfully!\n");
}
// 查找图书
void search_book() {
int id;
Book *p;
// 输入图书编号
printf("Enter book id: ");
scanf("%d", &id);
// 查找对应结点
p = head;
while (p != NULL) {
if (p->id == id) {
printf("Book id: %d\n", p->id);
printf("Book name: %s\n", p->name);
printf("Book author: %s\n", p->author);
printf("Book press: %s\n", p->press);
printf("Book price: %.2f\n", p->price);
break;
}
p = p->next;
}
if (p == NULL) {
printf("Book not found!\n");
}
}
// 修改图书
void modify_book() {
int id;
Book *p;
// 输入图书编号
printf("Enter book id: ");
scanf("%d", &id);
// 查找对应结点
p = head;
while (p != NULL) {
if (p->id == id) {
break;
}
p = p->next;
}
if (p == NULL) {
printf("Book not found!\n");
return;
}
// 修改结点信息
printf("Enter new book name: ");
scanf("%s", p->name);
printf("Enter new book author: ");
scanf("%s", p->author);
printf("Enter new book press: ");
scanf("%s", p->press);
printf("Enter new book price: ");
scanf("%f", &p->price);
printf("Book modified successfully!\n");
}
// 显示图书
void display_book() {
Book *p;
printf("--------------------\n");
printf("ID | Name | Author | Press | Price\n");
printf("--------------------\n");
// 遍历链表输出信息
p = head;
while (p != NULL) {
printf("%d | %s | %s | %s | %.2f\n", p->id, p->name, p->author, p->press, p->price);
p = p->next;
}
}
// 保存图书
void save_book() {
FILE *fp;
Book *p;
// 打开文件
fp = fopen("book.txt", "w");
if (fp == NULL) {
printf("File open failed!\n");
return;
}
// 遍历链表写入文件
p = head;
while (p != NULL) {
fprintf(fp, "%d %s %s %s %.2f\n", p->id, p->name, p->author, p->press, p->price);
p = p->next;
}
// 关闭文件
fclose(fp);
printf("Books saved successfully!\n");
}
// 加载图书
void load_book() {
FILE *fp;
Book *p, *tail;
int id;
char name[20], author[20], press[20];
float price;
// 打开文件
fp = fopen("book.txt", "r");
if (fp == NULL) {
printf("File open failed!\n");
return;
}
// 读取文件内容并插入链表
while (fscanf(fp, "%d %s %s %s %f", &id, name, author, press, &price) != EOF) {
p = (Book *) malloc(sizeof(Book));
if (p == NULL) {
printf("Memory allocation failed!\n");
return;
}
p->id = id;
strcpy(p->name, name);
strcpy(p->author, author);
strcpy(p->press, press);
p->price = price;
p->next = NULL;
if (head == NULL) {
head = p;
} else {
tail = head;
while (tail->next != NULL) {
tail = tail->next;
}
tail->next = p;
}
}
// 关闭文件
fclose(fp);
printf("Books loaded successfully!\n");
}
```
此代码实现了一个简单的图书管理系统,可以通过菜单选择进行图书的增加、删除、查询、修改、显示、保存和加载等操作。其中,图书的信息以链表形式存储,保存在文件book.txt中,程序启动时会将文件中的数据加载到链表中,程序结束时会将链表中的数据保存到文件中,以便下次启动时使用。
c语言图书管理系统链表从文件读取数据怎么写
在C语言中,设计一个图书管理系统并使用链表从文件读取数据,可以分为以下几个步骤:
1. **数据结构定义**:
- 定义一个包含书名、作者和ID等信息的链表节点结构体,例如:
```c
typedef struct Book {
char title[100];
char author[100];
int id;
struct Book* next; // 指向下一个节点的指针
} BookNode;
```
2. **打开和关闭文件**:
- 使用`fopen()`函数打开文件,检查是否成功,并设置文件指针到开头:
```c
FILE* file = fopen("books.txt", "r");
if (file == NULL) {
printf("Error opening file.\n");
return;
}
```
- 使用完后记得关闭文件:
```c
fclose(file);
```
3. **读取文件内容**:
- 使用`fgets()`逐行读取文件,将每一行解析成新的BookNode,并添加到链表中:
```c
while (!feof(file)) {
char line[500]; // 假设每行数据不超过500字节
fgets(line, sizeof(line), file);
// 解析字符串,创建新节点并将节点添加到链表
}
```
4. **链表操作**:
- 创建链表头节点,然后遍历读取的内容,在每个节点之间建立连接。
5. **处理错误**:
- 文件读取过程中可能出现的错误需要捕获和处理,比如文件损坏或格式异常。
完整示例代码不会在这里列出,因为这会很冗长,但以上就是基本的设计思路。以下是部分关键代码片段:
```c
// 添加节点到链表
void addNode(BookNode** head, const char* line) {
BookNode* newNode = (BookNode*)malloc(sizeof(BookNode));
// 分割每行数据并填充到节点属性...
newNode->next = *head;
*head = newNode;
}
// 从文件中读取并添加节点到链表
void readFromFile(char* fileName, BookNode** head) {
FILE* file = fopen(fileName, "r");
if (file != NULL) {
// ...继续读取和添加节点
fclose(file);
}
}
```
阅读全文