栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言双向链表实现图书管理系统 可读写文件

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言双向链表实现图书管理系统 可读写文件

#include 
#include 
#include 

int nCount = 0;

//书籍结构
typedef struct Node {
	struct Node * Blink;
	struct Node * Flink;
	char BookName[50];
	float BookPrice;
	int BookNumber;
};

struct Node * ndHeaderNode = NULL;

//增加书籍的函数
struct Node * AppendNode(struct Node * CurrentNode, char * BookName, int BookNumber, float BookPrice)
{
	struct Node * pNewNode = NULL;
	struct Node * pTempNode = NULL;
	struct Node * pHeadNode = CurrentNode;
	pNewNode = (struct Node *)malloc(sizeof(struct Node));
	if (pNewNode == NULL)
	{
		printf("memory malloc failed!n");
		return pNewNode;
	}
	if (CurrentNode == NULL)
	{
		CurrentNode = pNewNode;
		CurrentNode->Blink = NULL;
		CurrentNode->Flink = NULL;
	}
	else
	{
		while (pHeadNode->Flink != NULL)
		{
			pTempNode = pHeadNode;
			pHeadNode = pHeadNode->Flink;
		}
		pHeadNode->Flink = pNewNode;
		pHeadNode->Blink = pTempNode;
	}
	strcpy(pNewNode->BookName, BookName);
	pNewNode->BookPrice = BookPrice;
	pNewNode->BookNumber = BookNumber;
	pNewNode->Flink = NULL;
	nCount++;
	return CurrentNode;
}
//查询书籍的函数
void QueryNode(struct Node * HeaderNode, char * BookName)
{
	if (HeaderNode == NULL)
	{
		printf("ERROR:HeaderNode == NULLn");
		return;
	}
	if (strcmp(HeaderNode->BookName, BookName) == 0)
	{
		printf("书名:%sn", HeaderNode->BookName);
		printf("定价:%fn", HeaderNode->BookPrice);
		printf("书号:%dn", HeaderNode->BookNumber);
		return;
	}
	while (HeaderNode->Flink != NULL)
	{
		HeaderNode = HeaderNode->Flink;
		if (strcmp(HeaderNode->BookName, BookName) == 0)
		{
			printf("书名:%sn", HeaderNode->BookName);
			printf("定价:%fn", HeaderNode->BookPrice);
			printf("书号:%dn", HeaderNode->BookNumber);
			return;
		}
	}
	printf("Can Not Found!n");
}
//修改书籍信息
void ModifyNode(struct Node * HeaderNode, char * BookName, float BookPrice)
{
	if (HeaderNode == NULL)
	{
		printf("ERROR:HeaderNode == NULLn");
		return;
	}
	if (strcmp(HeaderNode->BookName, BookName) == 0)
	{
		HeaderNode->BookPrice = BookPrice;
		printf("ModifyNode Success!n");
		return;
	}
	while (HeaderNode->Flink != NULL)
	{
		HeaderNode = HeaderNode->Flink;
		if (strcmp(HeaderNode->BookName, BookName) == 0)
		{
			HeaderNode->BookPrice = BookPrice;
			printf("ModifyNode Success!n");
			return;
		}
	}

	printf("ModifyNode Failed!n");
	return;
}
//删除书籍的函数
void DeleteNode(struct Node * HeaderNode, char * BookName)
{
	struct Node * pNode = NULL;
	pNode = HeaderNode;
	for (size_t i = 0; i < nCount; i++)
	{
		if (strcmp(pNode->BookName, BookName) == 0)
		{
			if (pNode == HeaderNode)
			{
				pNode = HeaderNode->Flink;
				free(HeaderNode);
				ndHeaderNode = pNode;
				HeaderNode = ndHeaderNode;
				nCount--;
				return;
			}
			if (pNode->Flink == NULL)
			{
				pNode->Blink->Flink = NULL;
				free(pNode);
				nCount--;
				printf("Delete Success!n");
				return;
			}

			pNode->Blink->Flink = pNode->Flink;
			pNode->Flink->Blink = pNode->Blink;
			free(pNode);
			nCount--;
			printf("Delete Success!n");
			return;
		}
	}
}
//将书籍内容写入文件
void WriteFile(struct Node * HeaderNode, char * szFilePath)
{
	struct Node *p = HeaderNode;
	FILE * w = fopen(szFilePath, "wb");
	if (w == NULL)
	{
		printf("open file failed!n");
		system("pause");
		fclose(w);
		exit(0);//0正常退出 1异常退出
	}
	while (p)
	{
		//输出链表节点数据到屏幕 
		printf("%s ", p->BookName);
		printf("%f ", p->BookPrice);
		printf("%d ", p->BookNumber);
		printf("n");
		//输出链表节点数据到文件output.txt 
		fprintf(w, "%s ", p->BookName);
		fprintf(w, "%f ", p->BookPrice);
		fprintf(w, "%d", p->BookNumber);
		fprintf(w, "n");
		p = p->Flink;
	}
	fprintf(w, "n");
	fclose(w);
	return;

}
//读取文件内容
struct Node * ReadFile(char * szFilePath)
{
	struct Node * head = (struct Node *)malloc(sizeof(struct Node));
	head->Blink = NULL;
	head->Flink = NULL;
	char name[50];
	memset(name, 0, 50);
	float price;
	int number;
	struct Node * p;
	struct Node * q;
	p = q = head;
	FILE * r = fopen(szFilePath, "rb");
	if (r == NULL)
	{
		printf("open file failed!n");
		system("pause");
		fclose(r);
		exit(0);//0正常退出 1异常退出
	}
	while (fscanf(r, "%s", name) != EOF)
	{
		q = (struct Node *)malloc(sizeof(struct Node));
		fscanf(r, "%f", &price);
		fscanf(r, "%d", &number);
		strcpy(q->BookName, name);
		q->BookPrice = price;
		q->BookNumber = number;
		q->Blink = p;
		p->Flink = q;
		p = q;
	}
	p->Flink = NULL;
	return head->Flink;
}
//展示所有书籍信息
void show(struct Node * HeaderNode)
{
	printf("书名:%sn", HeaderNode->BookName);
	printf("定价:%fn", HeaderNode->BookPrice);
	printf("书号:%dn", HeaderNode->BookNumber);
	while (HeaderNode->Flink != NULL)
	{
		HeaderNode = HeaderNode->Flink;
		printf("书名:%sn", HeaderNode->BookName);
		printf("定价:%fn", HeaderNode->BookPrice);
		printf("书号:%dn", HeaderNode->BookNumber);
	}
}
void Start()
{
	while (1)
	{
		int nFlag = 0;
		int ReadFlag = 0;
		char szBookName[50];
		float fBookPrice = 0;
		float fNewBookPrice = 0;
		int nBookNumber = 0;
		printf("请输入需要使用的功能: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");
		scanf("%d", &ReadFlag);
		switch (ReadFlag)
		{
		case 1:
			//memset(szBookName, 0 ,50);
			printf("请输入书名:");
			scanf("%s", szBookName);
			printf("请输入定价 :");
			scanf("%f", &fBookPrice);
			printf("请输入书号:");
			scanf("%d", &nBookNumber);
			//新增函数
			ndHeaderNode = AppendNode(ndHeaderNode, szBookName, nBookNumber, fBookPrice);
			break;
		case 2:
			printf("请输入书名:");
			scanf("%s", szBookName);
			//查询函数
			QueryNode(ndHeaderNode, szBookName);
			break;
		case 3:
			printf("请输入书名:");
			scanf("%s", szBookName);
			printf("请输入新的定价:");
			scanf("%f", &fNewBookPrice);
			//code 修改的函数
			ModifyNode(ndHeaderNode, szBookName, fNewBookPrice);
			break;
		case 4:
			printf("请输入书名:");
			scanf("%s", szBookName);
			//删除函数
			DeleteNode(ndHeaderNode, szBookName);
			break;
		case 5:
			//C:UsersrkvirDocumentsVisual Studio 2015Projects
			WriteFile(ndHeaderNode, "information.txt");
			break;
		case 6:
			ndHeaderNode = ReadFile("information.txt");
			break;
		case 7:
			show(ndHeaderNode);
			break;
		case 8:
			nFlag = 1;
			break;
		}
		if (nFlag)
		{
			break;
		}
	}
}
int main()
{
	Start();
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号