文件操作,链表操作,管理系统
运行截图,
文件储存
逻辑详解,
1,为什么写在这个要用链表,
1.1,链表的插入和删除 速度相比数组来说,速度快,我们操作书籍数据,不停的的插入课删除,
1.2, 链表的数据都在堆区开辟,理论上讲链表没有尽头,所以不会限制你的系统存储的书籍上限
1.3,整个链表只有一个指针指向的地址去存储数据,所以操作比较方便尤其是文件操作
代码区
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <list>
using namespace std;
//3.数据的设计?
//3.1 程序用什么东西处理数据---->容器--->链表
//3.2 数据的结构 ---->图书的信息
struct bookInfo
{
char name[20]; //书名
float price; //书籍的价格
int num; //书的数量
};
struct Node
{
struct bookInfo data;
struct Node* next;
};
struct Node* listBook = NULL;
//创建表头: 表头就是一个结构体变量
//另一个部分:用户信息
struct student
{
char name[20];
char tel[20];
int curNum;
struct bookInfo userBook[3];
};
list<student> myList;
struct Node* createHead()
{
//动态内存申请
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
//变量的基本规则>? 使用前必须初始化
headNode->next = NULL;
return headNode;
}
//创建节点: 为插入做准备
//把用户的数据变为结构体变量
struct Node* createNode(struct bookInfo data)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//插入:只需要一种插入方式
void insertNodeByHead(struct Node* headNode, struct bookInfo data)
{
struct Node* newNode = createNode(data);
//必须先连接后断开
newNode->next = headNode->next;
headNode->next = newNode;
}
//指定删除
//posLeftNode->next=posNode->next;
//free(posNode);
void deleteNodeByName(struct Node* headNode, char *bookName)
{
struct Node