小说管理系统详细设计:流程图与代码示例

本文将详细介绍一个小说管理系统的设计流程,并提供相应的代码示例。系统主要功能包括登录、小说保存、定位、字符串插入、删除、显示、查找替换、统计、段落删除等。

1. 登录功能

流程图:

[图片:登录流程图]

代码示例:

int login() {
    char username[20];
    char password[20];
    printf("用户名:");
    scanf("%s", username);
    printf("密码:");
    scanf("%s", password);
    
    if (strcmp(username, "Admin") == 0 && strcmp(password, "123456") == 0) {
        return 1;  // 管理员登录成功
    } else if (strcmp(username, "Reader") == 0 && strcmp(password, "123456") == 0) {
        return 2;  // 读者登录成功
    } else {
        return -1;  // 登录失败
    }
}

2. 小说保存

流程图:

[图片:小说保存流程图]

代码示例:

void saveNovel(Novel* novel, const char* filename) {
    FILE* file = fopen(filename, "w");
    if (file == NULL) {
        printf("文件无法打开。\n");
        return;
    }
    
    Node* current = novel->head;
    while (current != NULL) {
        fprintf(file, "%s\n", current->content);
        current = current->next;
    }
    
    fclose(file);
    printf("小说已保存到文件。\n");
}

3. 定位功能

流程图:

[图片:定位功能流程图]

代码示例:

void position(Novel* novel) {
    int paragraph;
    int offset;
    printf("请输入段号和段内偏移:");
    scanf("%d %d", &paragraph, &offset);
    
    Node* current = novel->head;
    int currentParagraph = 1;
    
    while (current != NULL && currentParagraph != paragraph) {
        current = current->next;
        currentParagraph++;
    }
    
    if (current == NULL) {
        printf("未找到指定位置。\n");
    } else {
        novel->current = current;
        printf("已定位到指定位置。\n");
    }
}

4. 字符串的插入功能

流程图:

[图片:字符串插入功能流程图]

代码示例:

void insertString(Novel* novel, char* str) {
    int len = strlen(str);
    int remainingSpace = MAX_SIZE - strlen(novel->current->content);
    
    if (len > remainingSpace) {
        int splitPos = MAX_SIZE / 2;
        char remainingStr[MAX_SIZE + 1];
        strncpy(remainingStr, novel->current->content + splitPos, MAX_SIZE - splitPos);
        remainingStr[MAX_SIZE - splitPos] = '\0';
        
        Node* newNode = (Node*)malloc(sizeof(Node));
        strncpy(newNode->content, str, MAX_SIZE);
        newNode->content[MAX_SIZE] = '\0';
        
        newNode->prev = novel->current;
        newNode->next = novel->current->next;
        if (novel->current->next != NULL) {
            novel->current->next->prev = newNode;
        }
        novel->current->next = newNode;
        
        strncpy(novel->current->content + splitPos, str, splitPos);
        novel->current->content[splitPos] = '\0';
        
        if (remainingSpace >= MAX_SIZE / 2) {
            insertString(novel, remainingStr);
        }
    } else {
        strncat(novel->current->content, str, len);
    }
}

5. 字符串的删除功能

流程图:

[图片:字符串删除功能流程图]

代码示例:

void deleteString(Novel* novel, int length) {
    Node* current = novel->current;
    while (length > 0 && current != NULL) {
        int len = strlen(current->content);
        if (len <= length) {
            length -= len;
            Node* next = current->next;
            if (current->prev != NULL) {
                current->prev->next = current->next;
            }
            if (current->next != NULL) {
                current->next->prev = current->prev;
            }
            if (current == novel->head) {
                novel->head = current->next;
            }
            free(current);
            current = next;
        } else {
            strncpy(current->content, current->content + length, MAX_SIZE);
            length = 0;
        }
    }
    novel->current = current;
}

6. 小说显示功能

流程图:

[图片:小说显示功能流程图]

代码示例:

void displayNovel(Novel* novel) {
    Node* current = novel->head;
    while (current != NULL) {
        printf("%s\n", current->content);
        current = current->next;
    }
}

7. 字符串的查找和替换

流程图:

[图片:字符串查找和替换流程图]

代码示例:

int searchAndReplace(Novel* novel, char* str) {
    int count = 0;
    Node* current = novel->head;
    
    while (current != NULL) {
        char* foundStr = strstr(current->content, str);
        while (foundStr != NULL) {
            count++;
            
            // 替换字符串
            char temp[MAX_SIZE + 1];
            strncpy(temp, current->content, foundStr - current->content);
            temp[foundStr - current->content] = '\0';
            strcat(temp, "REPLACED");
            strcat(temp, foundStr + strlen(str));
            strncpy(current->content, temp, MAX_SIZE);
            
            foundStr = strstr(current->content, str);
        }
        
        current = current->next;
    }
    
    return count;
}

8. 小说的统计功能

流程图:

[图片:小说统计功能流程图]

代码示例:

void countWords(Novel* novel) {
    int wordCount = 0;
    Node* current = novel->head;
    
    while (current != NULL) {
        char* token = strtok(current->content, " ");
        while (token != NULL) {
            wordCount++;
            token = strtok(NULL, " ");
        }
        
        current = current->next;
    }
    
    printf("单词数量:%d\n", wordCount);
}

9. 对小说按段删除

流程图:

[图片:按段删除流程图]

代码示例:

int  Pdelete(Novel* head) {
    int paragraph;
    printf("请输入要删除的段落号:");
    scanf("%d", &paragraph);
    
    Node* current = head;
    int currentParagraph = 1;
    
    while (current != NULL && currentParagraph != paragraph) {
        current = current->next;
        currentParagraph++;
    }
    
    if (current == NULL) {
        return -1; // 未找到指定段落
    }
    
    // 删除结点
    if (current->prev != NULL) {
        current->prev->next = current->next;
    }
    if (current->next != NULL) {
        current->next->prev = current->prev;
    }
    if (current == head) {
        head = current->next;
    }
    free(current);
    return 1; // 删除成功
}

10. 完整代码示例

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

#define MAX_SIZE 100

typedef struct Node {
    char content[MAX_SIZE + 1];
    struct Node* prev;
    struct Node* next;
} Node;

typedef struct Novel {
    Node* head;
    Node* current;
} Novel;

Novel* createNovel() {
    Novel* novel = (Novel*)malloc(sizeof(Novel));
    novel->head = NULL;
    novel->current = NULL;
    return novel;
}

// ... 登录、保存、定位、插入、删除、显示、查找替换、统计、段落删除等函数的代码示例...

int main() {
    Novel* novel = createNovel();
    novel->head = (Node*)malloc(sizeof(Node));
    novel->head->prev = NULL;
    novel->head->next = NULL;
    novel->current = novel->head;
    
    // ... 主函数中的其他代码 ...
    
    return 0;
}

总结

本文详细介绍了小说管理系统的详细设计流程,并提供相应的代码示例。希望这可以帮助您更好地理解和设计小说管理系统。


原文地址: https://www.cveoy.top/t/topic/SKu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录