C语言链表实现简单图书管理系统

1. Description

通过链来实现简单的图书管理系统,实现如下功能:
1. 添加图书
2. 查询图书信息
3. 修改图书价格
4. 删除图书
5. 查看所有图书
6. 退出

需要熟悉结构体和指针的使用,具有简单的数据结构链表概念。还需要处理好一些细节,充分考虑到各种情况,比如没有图书或查询不到图书,在退出时候所有申请的内存空间是否已经释放掉了等等。写的过程中也是碰到各种bug然后通过调试不断来解决。

2. Code

编译环境:Visual Studio 2017
main.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct bookNode {
    
    
	char bookName[50];
	int bookNum;
	float bookPrice;
	struct bookNode *nextBookNode;
}bookNode;

bookNode *appendBook(bookNode *head);

void *searchBook(bookNode *head);

void modifyBook(bookNode *head);

bookNode *deleteBook(bookNode *head);

void freeAllNode(bookNode *head);

void showAllBook(bookNode *head);

main.c

#include "main.h"

int main(void) {
    
    
	int option;
	bookNode *head = NULL;

	printf("1. 添加图书\n");
	printf("2. 查询图书信息\n");
	printf("3. 修改图书价格\n");
	printf("4. 删除图书\n");
	printf("5. 查看所有图书\n");
	printf("6. 退出\n");
	while(printf("\n>请输入选项:") && (scanf("%d", &option) == 1))
	{
    
    
		switch (option)
		{
    
    
		case 1:
			head = appendBook(head);
			break;
		case 2:
			searchBook(head);
			break;
		case 3:
			modifyBook(head);
			break;
		case 4:
			head = deleteBook(head);
			break;
		case 5:
			showAllBook(head);
			break;
		case 6:
			freeAllNode(head);
			break;
		default:
			printf("错误选项,请重新输入。\n");
			break;
		}
	}
}

bookNode *appendBook(bookNode * head)
{
    
    
	bookNode *book = (bookNode*)malloc(sizeof(bookNode));
	printf("请输入添加图书的书名:");
	scanf("%s", book->bookName);

	printf("请输入添加图书的编号:");
	scanf("%d", &book->bookNum);

	printf("请输入添加图书的价格:");
	scanf("%f", &book->bookPrice);
	book->nextBookNode = NULL;

	if (head == NULL) {
    
    
		head = book;
	}
	else {
    
    
		bookNode *pNode = head;
		while (pNode->nextBookNode != NULL) {
    
    
			pNode = pNode->nextBookNode;
		}
		pNode->nextBookNode = book;

	}
	printf("图书添加成功!\n");
	return head;
}

void *searchBook(bookNode * head)
{
    
    
	bookNode *pNode = head;
	if (pNode == NULL) {
    
    
		printf("暂无图书\n");
		return NULL;
	}
	else {
    
    
		printf("请输入查找图书的书名: ");
		char bookName[50] = {
    
    0};
		scanf("%s", bookName);
		printf("查询结果:\n");
		if (strcmp(bookName, pNode->bookName) == 0) {
    
    
			printf("图书书名:%s\n", pNode->bookName);
			printf("图书编号:%d\n", pNode->bookNum);
			printf("图书价格:%.2f\n", pNode->bookPrice);
			return pNode;
		}
		while (pNode->nextBookNode != NULL) {
    
    
			pNode = pNode->nextBookNode;
			if (strcmp(bookName, pNode->bookName) == 0) {
    
    
				printf("图书书名:%s\n", pNode->bookName);
				printf("图书编号:%d\n", pNode->bookNum);
				printf("图书价格:%.2f\n", pNode->bookPrice);
				return pNode;
			}
		}
		printf("暂无此书\n");
		return NULL;
	}
}

void modifyBook(bookNode * head)
{
    
    
	char bookName[50];
	float newBookPrice;


	bookNode *pNode = head;
	if (pNode == NULL) {
    
    
		printf("暂无图书\n");
		
	}
	else {
    
    
		printf("请输入要修改价格图书的书名: ");
		scanf("%s", bookName);

		if (strcmp(bookName, pNode->bookName) == 0) {
    
    

			printf("请输入修图书改后的价格: ");
			scanf("%f", &newBookPrice);
			pNode->bookPrice = newBookPrice;
			printf("图书价格修改成功!\n");
			return;
		}
		else {
    
    
			while (pNode->nextBookNode != NULL) {
    
    
				pNode = pNode->nextBookNode;
				if (strcmp(bookName, pNode->bookName) == 0) {
    
    
					printf("请输入修图书改后的价格: ");
					scanf("%f", &newBookPrice);
					pNode->bookPrice = newBookPrice;
					printf("图书价格修改成功!\n");
					return;
				}
			}
		}
		printf("暂无此书\n");

	}

}

bookNode * deleteBook(bookNode * head)
{
    
    
	bookNode *pNode = head;
	if (pNode == NULL) {
    
    
		printf("暂无图书\n");
	}

	char bookName[50];
	printf("请输入要删除图书的书名:");
	scanf("%s", bookName);
	//删除图书为头节点
	if (strcmp(bookName, pNode->bookName) == 0) {
    
    
		head = head->nextBookNode;
		free(pNode);
		printf("删除成功!\n");
		return head;
	}
	else {
    
    
		while (pNode->nextBookNode != NULL) {
    
    
			if (strcmp(bookName, pNode->nextBookNode->bookName) == 0) {
    
    
				bookNode* tempNode = pNode->nextBookNode;
				pNode->nextBookNode = pNode->nextBookNode->nextBookNode;
				free(tempNode);
				printf("删除成功!\n");
				return head;
			}
			pNode = pNode->nextBookNode;
		}
		printf("暂无此书\n");
		return head;
	}
}

void freeAllNode(bookNode * head)
{
    
    
	bookNode *pNode = head;
	while (head != NULL) {
    
    
		head = head->nextBookNode;
		free(pNode);
		pNode = head;
	}

	exit(0);
}

void showAllBook(bookNode * head)
{
    
    
	
	if (head == NULL) {
    
    
		printf("暂无图书\n");
		return;
	}
	else {
    
    
		printf("所有图书:\n");
		bookNode *pNode = head;
		printf("%s\n", pNode->bookName);
		while (pNode->nextBookNode != NULL) {
    
    
			pNode = pNode->nextBookNode;
			printf("%s\n", pNode->bookName);
		}
	}
	return;
}

3. Show

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39643613/article/details/108254616