C语言 指针综合应用 ( 高阶应用 )

前言

下面代码主要使用指针实现一个,图书馆管理系统的应用代码。

设计到关于指针的知识点有:

结构体指针、函数指针数组、数组指针、函数指针、结构体指针数组,还有枚举、类型定义、宏定义

主打一个为了使用指针而使用指针。

功能说明

图书管理系统,具有以下特点:

• 使用结构体存储书籍信息(书名、作者、类别)。

• 使用枚举定义书籍类别。

• 使用函数指针数组实现菜单选择操作。

使用数组指针和结构体指针数组管理书籍集合。

特性说明

• 结构体指针:书籍通过结构体指针动态管理,允许运行时动态分配和释放内存。

• 枚举:定义书籍的类别,使类别信息更清晰。

• 类型定义:提高代码的可读性和可维护性。

• 宏定义:用于定义常量,如最大书籍数量和菜单选项数,提高代码的可配置性。

• 数组指针和结构体指针数组:用于存储和管理书籍集合。

• 函数指针数组:实现菜单选择的多态性,根据用户输入调用不同的操作函数。

• 函数指针:menuFunctions数组中的每个元素是一个指向函数的指针,这些函数执行具体的操作,如添加书籍、删除书籍等。

这个案例综合运用了您要求的C语言知识点,展示了如何在实际应用中使用这些特性。

代码

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 100
#define MAX_TITLE_LENGTH 50
#define MAX_AUTHOR_LENGTH 50
// 枚举定义书籍类别
typedef enum BookCategory {
    FICTION,
    NONFICTION,
    SCIENCE,
    SPORTS,
    CATEGORY_COUNT // 用于统计类别数量
} BookCategory;
// 类型定义书籍结构体
typedef struct Book {
    char title[MAX_TITLE_LENGTH];
    char author[MAX_AUTHOR_LENGTH];
    BookCategory category;
} Book;
// 宏定义
#define MENU_OPTIONS 4
// 函数声明
void addBook(Book **books, int *count);
void deleteBook(Book **books, int *count);
void printBooks(Book **books, int count);
void exitProgram(Book **books, int *count);
// 函数指针数组,用于菜单操作
void (*menuFunctions[MENU_OPTIONS])(Book **, int *) = {
    addBook,
    deleteBook,
    printBooks,
    exitProgram
};
// 主函数
int main() {
    Book *books[MAX_BOOKS] = {0}; // 结构体指针数组
    int bookCount = 0;
    int choice;
    while (1) {
        printf("\nMenu:\n");
        printf("1. Add Book\n");
        printf("2. Delete Book\n");
        printf("3. Print Books\n");
        printf("4. Exit\n");
        printf("Enter choice: ");
        scanf("%d", &choice);
        if (choice < 1 || choice > MENU_OPTIONS) {
            printf("Invalid choice. Please try again.\n");
            continue;
        }
        // 调用相应的函数
        menuFunctions[choice - 1](&books[0], &bookCount);
        if (choice == MENU_OPTIONS) break; // 退出循环
    }
    return 0;
}
// 实现函数
void addBook(Book **books, int *count) {
    if (*count >= MAX_BOOKS) {
        printf("Maximum number of books reached.\n");
        return;
    }
    Book *newBook = (Book *)malloc(sizeof(Book));
    if (!newBook) {
        printf("Memory allocation failed.\n");
        return;
    }
    printf("Enter book title: ");
    scanf("%49s", newBook->title); // 防止溢出
    printf("Enter author name: ");
    scanf("%49s", newBook->author);
    printf("Enter category (0 for Fiction, 1 for Nonfiction, 2 for Science, 3 for Sports): ");
    scanf("%u", (unsigned int *)&newBook->category);
    books[*count] = newBook;
    (*count)++;
    printf("Book added successfully.\n");
}
void deleteBook(Book **books, int *count) {
    int index;
    printf("Enter index of book to delete: ");
    scanf("%d", &index);
    if (index < 0 || index >= *count) {
        printf("Invalid index.\n");
        return;
    }
    free(books[index]);
    for (int i = index; i < *count - 1; i++) {
        books[i] = books[i + 1];
    }
    books[*count - 1] = NULL;
    (*count)--;
    printf("Book deleted successfully.\n");
}
void printBooks(Book **books, int count) {
    if (count == 0) {
        printf("No books to display.\n");
        return;
    }
    printf("Books:\n");
    for (int i = 0; i < count; i++) {
        printf("%d: %s by %s, Category: %d\n", i, books[i]->title, books[i]->author, books[i]->category);
    }
}
void exitProgram(Book **books, int *count) {
    for (int i = 0; i < *count; i++) {
        free(books[i]);
    }
    printf("Exiting program...\n");
}
相关推荐
前端小咸鱼一条31 分钟前
16.迭代器 和 生成器
开发语言·前端·javascript
小陈工38 分钟前
2026年3月31日技术资讯洞察:AI智能体安全、异步编程突破与Python运行时演进
开发语言·jvm·数据库·人工智能·python·安全·oracle
爱编码的小八嘎42 分钟前
C语言完美演绎6-2
c语言
ok_hahaha1 小时前
java从头开始-黑马点评-Redission
java·开发语言
无巧不成书02181 小时前
Java面向对象零基础实战:从Employee类吃透自定义类核心,掌握封装精髓
java·开发语言·java入门·面向对象·自定义类·employee类·java核心技术
跃上青空1 小时前
Java如何优雅的使用fastjson2进行枚举序列化/反序列化,欢迎探讨
java·开发语言
Leo655351 小时前
动态透视报表 + 查询接口 + Excel导出
开发语言·windows·python
BioRunYiXue2 小时前
Nature Methods:CellVoyager 自主 AI 智能体开启生物数据分析新时代
大数据·开发语言·前端·javascript·人工智能·数据挖掘·数据分析
CoovallyAIHub2 小时前
VisionClaw:智能眼镜 + Gemini + Agent,看一眼就能帮你搜、帮你发、帮你做
算法·架构·github
CoovallyAIHub2 小时前
低空安全刚需!西工大UAV-DETR反无人机小目标检测,参数减少40%,mAP50:95提升6.6个百分点
算法·架构·github