效果
C语言双向链表学习
编程是安全狗必不可少的一项技能,今日所书写的内容就是学习中的一些内容。
双向链表小项目 “图书管理系统” 它又叫DobleLinkBookLibrarySystemProject没想到吧,这么个小东西还有这么吊的名字!
release版本:成品下载

代码:
头文件 fuzz.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
struct Book* AppendBook(struct Book* CurrentBook, char * bookName, int bookNumber, float bookPrice);

int main();

c文件
BookLibraryEntry.c

#include "fuzz.h"


struct Book {
    int BookNumber;
    char BookName[50];
    float BookPrice;
    struct Book* UpLink;
    struct Book* DownLink;
};
//书籍头节点
struct Book* Books = NULL;
//
int nCount = 0;
//添加书籍
struct Book* AppendBook(struct Book* CurrentBook,char * bookName,int bookNumber, float bookPrice) {
    //1空节点 是第一次添加
    if (CurrentBook==NULL)
    {
        CurrentBook = (struct Book*)malloc(sizeof(struct Book));
        CurrentBook->BookNumber = bookNumber;
        strncpy(CurrentBook->BookName, bookName,50);
        CurrentBook->BookPrice = bookPrice;
        CurrentBook->UpLink = NULL;
        CurrentBook->DownLink = NULL;
        nCount++;
        system("cls");
        printf("添加成功!\n");
        system("pause");
        system("cls");
        //syste
        return CurrentBook;
    }
    else
    {
        struct Book * TempBookNode = (struct Book*)malloc(sizeof(struct Book));
        CurrentBook->DownLink = TempBookNode;
        TempBookNode->UpLink = CurrentBook;
        TempBookNode->BookNumber = bookNumber;
        strncpy(TempBookNode->BookName, bookName, 50);
        TempBookNode->BookPrice = bookPrice;
        TempBookNode->DownLink = NULL;
        nCount++;
        system("cls");
        printf("添加成功!\n");
        system("pause");
        system("cls");
        return TempBookNode;
    }
}
//查询所有书籍
void QueryALLBooks(struct Book* CurrentBook) {
    if (CurrentBook==NULL)
    {
        printf("图书馆内没有书籍,请先添加书籍!\n");
        return;
    }
    /*while (CurrentBook->UpLink!=NULL)
    {
        printf("编号:%d 书名:%s 价格:%f\n", CurrentBook->BookNumber, CurrentBook->BookName, CurrentBook->BookPrice);
        CurrentBook = CurrentBook->UpLink;
    }*/
    if (CurrentBook->UpLink==NULL)
    {
        printf("编号:%d 书名:%s 价格:%f\n", CurrentBook->BookNumber, CurrentBook->BookName, CurrentBook->BookPrice);
    }
    else {
        for (size_t i = 0; i < (nCount-1); i++)
        {
            //printf("编号:%d 书名:%s 价格:%f\n", CurrentBook->BookNumber, CurrentBook->BookName, CurrentBook->BookPrice);
            CurrentBook = CurrentBook->UpLink;
        }
        for (size_t i = 0; i < nCount; i++)
        {
            printf("编号:%d 书名:%s 价格:%f\n", CurrentBook->BookNumber, CurrentBook->BookName, CurrentBook->BookPrice);
            CurrentBook = CurrentBook->DownLink;
        }
    }
    
}
bool QueryTheBook(struct Book* CurrentBook, char* bookName) {

        for (size_t i = 0; i < (nCount - 1); i++)
        {
            //printf("编号:%d 书名:%s 价格:%f\n", CurrentBook->BookNumber, CurrentBook->BookName, CurrentBook->BookPrice);
            CurrentBook = CurrentBook->UpLink;
        }
        for (size_t i = 0; i < nCount; i++)
        {
            //printf("%s\n", CurrentBook->BookName);
            if (!strcmp(CurrentBook->BookName,bookName))
            {
                system("cls");
                printf("已经找到《%s》这本书!\n", bookName);
                printf("编号:%d 书名:%s 价格:%f\n", CurrentBook->BookNumber, CurrentBook->BookName, CurrentBook->BookPrice);
                return true;
            }
            
            CurrentBook = CurrentBook->DownLink;
            
        }
    
        return false;
}


void Menu() {
    printf(" ======Xinux Ver1.0==========\n");
    printf("||1.添加书籍                 =\n");
    printf("||2.查询所有书籍             =\n");
    printf("||3.查询指定书籍             =\n");
    printf("||4.修改书籍价格             =\n");
    printf("||5.删除书籍                 =\n");
    printf(" ============================\n");
    //system("color a");
}

bool ModifyBookPrice(struct Book* CurrentBook, char* bookName) {

    for (size_t i = 0; i < (nCount - 1); i++)
    {
        CurrentBook = CurrentBook->UpLink;
    }
    for (size_t i = 0; i < nCount; i++)
    {
        //printf("%s\n", CurrentBook->BookName);
        if (!strcmp(CurrentBook->BookName, bookName))
        {
            printf("已经找到《%s》这本书!当前价格为%f .\n", bookName,CurrentBook->BookPrice);
            char* tmpbkName = CurrentBook->BookName;
            int tmpbkNumber = CurrentBook->BookNumber;
            float tmpbkPrice = CurrentBook->BookPrice;

            printf("请输入最新价格:");
            float newPrice = 0;
            scanf("%f", &newPrice);
            CurrentBook->BookPrice = newPrice;
            printf("原-->编号:%d 书名:%s 价格:%f\n", tmpbkNumber, tmpbkName, tmpbkPrice);
            printf("新-->编号:%d 书名:%s 价格:%f\n", CurrentBook->BookNumber, CurrentBook->BookName, CurrentBook->BookPrice);

            return true;
        }

        CurrentBook = CurrentBook->DownLink;
    }
    return false;
}


bool DelBook(struct Book** pBooks, char* bookName) {
    struct Book* CurrentBook = *pBooks;

    // 查找要删除的书籍
    while (CurrentBook != NULL) {
        if (strcmp(CurrentBook->BookName, bookName) == 0) {
            printf("已经找到《%s》这本书!正在执行删除操作.\n", bookName);

            // 保存要删除的节点的前一个和后一个节点
            struct Book* prevBook = CurrentBook->UpLink;
            struct Book* nextBook = CurrentBook->DownLink;

            // 释放要删除的节点的内存
            free(CurrentBook);

            // 更新链表连接
            if (prevBook != NULL) {
                prevBook->DownLink = nextBook;
            }
            else {
                // 如果删除的是第一个节点,更新头节点指针
                *pBooks = nextBook;
            }

            if (nextBook != NULL) {
                nextBook->UpLink = prevBook;
            }

            nCount--;
            return true;
        }

        CurrentBook = CurrentBook->DownLink;
    }

    // 未找到要删除的书籍
    return false;
}

int main() {
    //命令
    int inCmd = 0;
    char BookName[50];
    int BookNumber = 0;
    float BookPrice = 0.0;
    while (1)
    {
        Menu();
        printf("请输入相关指令:");
        scanf("%d", &inCmd);
        switch (inCmd)
        {
        case 1:
            //添加书籍
            memset(BookName, 0, 50);
            printf("请输入书籍名称:\n");
            scanf("%s", BookName);
            printf("请输入书籍编号:\n");
            scanf("%d", &BookNumber);
            printf("请输入书籍价格:\n");
            scanf("%f", &BookPrice);
            Books = AppendBook(Books,BookName,BookNumber,BookPrice);
            break;
        case 2:
            //查询所有书籍
            system("cls");
            QueryALLBooks(Books);
            system("pause");
            system("cls");
            break;
        case 3:
            //查询指定书籍
            if (nCount==0)
            {
                system("cls");
                printf("图书馆里没有书,请先添加书籍.\n");
                system("pause");
                system("cls");

                break;
            }
            memset(BookName, 0, 50);
            printf("请输入要查询的指定书籍名称:\n");
            scanf("%s", BookName);
            bool isFound = QueryTheBook(Books, BookName);
            if (!isFound) {
                system("cls");
                printf("无此书籍!\n");
                system("pause");
            }
            else
            {
                system("pause");
                system("cls");
            }
            break;
        case 4:
            //修改书籍价格
            if (nCount == 0)
            {
                system("cls");
                printf("图书馆里没有书,请先添加书籍.\n");
                system("pause");
                system("cls");

                break;
            }
            memset(BookName, 0, 50);
            printf("请输入要修改价格的书籍名称:\n");
            scanf("%s", BookName);
            bool isTrue = ModifyBookPrice(Books,BookName);
            if (isTrue)
            {
                printf("修改成功!\n");
                system("pause");
                system("cls");
            }
            else
            {

                printf("修改失败!\n");
                system("pause");
                system("cls");
            }
            break;
        case 5:
            //删除书籍
            if (nCount == 0)
            {
                system("cls");
                printf("图书馆里没有书,请先添加书籍.\n");
                system("pause");
                system("cls");
                break;
            }
            printf("请输入要删除的书籍名称:\n");
            scanf("%s", BookName);
            if (DelBook(&Books, BookName)) {
                printf("删除成功!\n");
                system("pause");
                system("cls");
            }
            else
            {
                printf("删除失败!\n");
                system("pause");
                system("cls");
            }
            break;
        default:
            break;
        }
    }
    return 0;
}

标签: C语言, 学习

添加新评论