1 需求分析

1.1 简单的小说编辑器介绍

伴随着信息时代电子技术的发展,人们不仅可以通过传统的纸质书籍的形式进行创作和阅读,同时也能通过电子产品的方式进行对小说的创作,修改。传统的纸质小说的编辑,编写,分段等操作无一不是需要人工在纸质创作中完成,但当回头发现自己在前面的写作有地方出错时,难以修改。同时查找小说内容的手段缺少,缺乏修改和查找手段。随着计算机技术的不断发展,为了可以简单、方便的对小说进行创作和修改,防止对小说内容的修改和查找手段的缺乏,本小说编辑器应运而生。本小说编辑器要求系统界面友好,使用方便,可通过查关键字,段落,行号的方法对小说进行查找和修改等操作。

1.2 简单的小说编辑器用户说明

本系统有两类用户:作者 和 读者。

作者可以进行登录,进行小说的定位功能,小说内容的插入功能,小说内容的删除功能,小说的字符的查找和替换功能,小说的保存功能,小说的统计功能。(为了简化,本系统只有一个管理员账号:账号名Admin ,密码:123456)

读者用户可以进行登录,进行小说的定位,小说的显示,小说的翻页显示功能。

1.3 简单的小说编辑器功能介绍

图1 系统功能结构图

系统主要功能包括登录,具体说明如下 1) 定位功能:给出(段号,段内偏移),可以定位此位置为当前位置;

2) 字符串插入功能:实现在当前位置插入一个给定的字符串,考虑:当插 入子串后如果存储空间不够,要进行当前结点的拆分。;

3) 字符串删除功能:在当前位置往后删除长度为 m 的字符串,考虑删除完 后,结点中的字符数量不满足容量要求时,可以和后面的结点合并(如果是当前 段的最后一个结点或者这个段只有一个结点可以不合并);

4) 小说显示功能:可以按段输出显示小说的所有内容;

5) 翻页显示功能:可以显示小说当前位置前 m 个字符内容(为一页,m 大 小可以宏设置)内容或后一页内容。

6) 字符串查找和替换功能:给出字符串是,在文章中搜索,得到首字符在 文章中的坐标(段序号,段内偏移);显示字串次数;根据要求进行替换;

7) 小说保存功能:可以将小说所有内容保存到文件

8) 小说读取功能:可以从文件中读取该小说到链表;

9) 统计功能:统计单词/数字/标点符号; 10)段落删除功能:按照段落对小说内容进行删除;

11)段落复制功能:可以实现将当前段落复制到小说的末尾。

12)用户登录:分作者和读者进行登录

1.4 简单小说编辑器具体功能需求分析

1.4.1 用户登录

功能介绍:用户输入用户名和密码后登录,如果登录成功,进入相应的功能菜单界面,如果失败则打印失败信息。 (1)输入 用户名和密码
(2)输出 功能菜单界面或登录失败信息和登录界面

1.4.2 定位功能

功能介绍:用户输入要定位短号,或者段内的文字,可以定位 此位置为安全位置。 (1)输入 要定位的位置:段号,段内偏移。
(2)输出 定位到所要定位的位置。

1.4.3 小说字符串的插入

功能介绍:实现在当前位置插入一个给定的字符串 (1)输入 要插入的字符串 (2)输出 插入字符串后的文本

1.4.4 小说字符串的删除

功能介绍:在当前位置往后删除长度为 m 的字符串 (1)输入 要往后删除的字符串长度m
(2)输出 删除字符串后的文本。

1.4.5 小说文本显示

功能介绍:按段输出显示小说的所有内容 (1)输入 (2)输出 按段输出后的小说文本内容。

1.4.6 翻页显示

功能介绍:可以显示小说当前位置前 m 个字符内容 (1) 输入

(2)输出 小说的当前位置的前m个字符的内容

1.4.7 字符串的查找和替换

功能介绍:给出字符串是,在文章中搜索,得到首字符在 文章中的坐标(段序号,段内偏移),显示字串次数;根据要求进行替换。 (1)输入 要查找和替换的字符串 (2)输出 字符串次数,替换成功。

1.4.8 小说的保存

功能介绍:可以将小说所有内容保存到文件 (1) 输入 无 (2)输出 保存成功

1.4.9 小说的读取

功能介绍:把小说从文件中读取该小说到链表 (1)输入 无 (2) 输出 读取成功

1.4.10 小说的单词/数字/标点符号的统计

功能介绍:统计单词/数字/标点符号 (1)输入 单词/数字/标点符号 (2)输出 单词/数字/标点符号的个数

2 系统设计

2.1 系统结构设计

本系统是桌面应用程序,一共分成四层。

图2 系统层次结结构

2.2 数据结构设计

2.2.1 数据对象设计

小说对象:

typedef struct novel { //创建小说的结构体
	char word[MaxSize];  //小说字数
	int pages;  //储存小说的页数
	int paragraph;   //储存小说的段数
	int row;        //储存小说的行数
	struct novel* Llink;  //创建前指针
	struct novel* Rlink;  //创建后指针
} novel;

2.2.2 数据结构设计

本系统采用双向链表作为数据结构来存放所有的小说信息

#define MaxSize 50  
#define Link 20    
#define p 5
typedef struct novel { //创建小说的结构体
	char word[MaxSize];  //小说字数
	int pages;  //储存小说的页数
	int paragraph;   //储存小说的段数
	int row;        //储存小说的行数
	struct novel* Llink;  //创建前指针
	struct novel* Rlink;  //创建后指针
} novel;

2.3 业务功能层详细设计

详细设计可以有两种方式描述:自然语言(参考数据结构书中的算法描述,特别是循环结构的描述)和流程图方式,两者选一种即可。

2.3.1 用户登录

int login(char* name , char* passwd)

示例:登录功能自然语言描述

处理流程:

  1. 用户输入用户名和密码,首先判断是否是管理员用户名和密码,如果是就登录成功返回1,表示管理员登录成功。
  2. 如果不是,在读者信息表中查找是否有此用户名并判断密码是否正确。 (1) 如果没有用户名返回-1, (2) 如果有此用户名,密码不对返回-2, (3) 否则读者用户登录成功,返回2。

示例:登录功能详细设计的流程图方式

图3-1算法流程图示例

2.3.2 小说的保存

void read(novel* head, novel* tail, novel* input)

处理流程:将文件中的小说按照段的形式保存到双向链表的点中,如果节点已满,就存到下一个结点中。

2.3.3 定位功能

int Postion(novel* head)

处理流程:输入小说中要找的第几段在双向链表中找到相应的段落,如果链表中没有要找的位置,返回-1,如果找到后,将找到的结点的内容输出,完成工作后返回1。

2.3.4 字符串的插入功能

int Insert(novel* head)

处理流程:输入要插入的字符串和要插入的位置,在双向链表中找到需要插入字符串的位置(段,行,第几个),在链表中寻找 ,如果链表没有想要插入的位置,返回-1,如果存在所要插入的位置,在所要插入位置中插入想要插入的字符串,如果结点空间已满,创建一个新结点,将已满结点移动一半的字符到新结点中,后继续插入没插入的字符串,完成后返回1。

2.3.5 字符串的删除功能

int  Delete(novel* head)

处理流程:输入要插入的字符个数m,和要删除的位置,在双向链表中找到需要删除字符串的位置(段,行,第几个),如果没有找到或者后面的字符个数小于m,则返回-1,如果找到后,将所找位置的后m个字符删除,成功后返回1。

2.3.6 小说显示功能

void display(novel* head)

处理流程:读取双向链表的段号信息,将链表的内容按段输出。

2.3.7 字符串的查找和替换

int Search( novel* head,char a)

处理流程:对给出的字符在双向链表进行遍历查找,如果找不到则返回-1,如果能找到,输出首字符在文章中的坐标(段序号,段内偏移),输出字符输出次数,同时按照要求,对字符串进行替换,完成后,返回1。

2.3.8 小说的保存

int Save(novel* head)

处理流程:将修改后的小说内容通过读取双向链表保存到文件中。

2.3.9 小说的统计

int Statistics(novel* head)

处理流程:选择要统计的类型,输入要查找的对像,如果没有查找到,返回-1遍历双向链表进行查找,统计要查找对线的出现次数,然后输出,完成后,返回1。

2.3.10 对小说按段删除

int  Pdelete(novel* head)

处理流程:输入的段落,在双向链表中查找与输入相同的段落,如果遍历链表中没有与要删除的段落相同的段落数,返回-1,如果找到链表结点和输入段落相同将结点中的段落数与之相同的结点删除,删除后返回1。

界面层设计

本系统采用c语言开发,界面采用字符界面方式,要设计字符菜单来让用户选择相应的功能,信息的显示和输入都采用字符界面方式。系统主界面设计如下:

*****************************欢迎使用小说编辑器********************

用户名:
密码:

作者登录后的界面:

*****************************欢迎使用小说编辑器********************

1. 小说的定位     2. 插入字符串      3. 删除字符串     4. 显示小说

5. 字符串查找和替换    6. 保存小说  7.读取小说  8.小说的统计

9.段落的删除     10.段落的复制     11.退出系统
  
*******************************************************************************

字符串查找和替换界面
*****************************欢迎使用小说编辑器*******************************

1.	查找字符串     2. 替换字符串     3.退出系统  
*******************************************************************************
小说的统计界面
*****************************欢迎使用小说编辑器********************************

1. 统计单词     2. 统计数字      3. 统计符号    4. 退出系统

  
读者登录后界面

*****************************欢迎使用小说编辑器********************************

     1. 定位功能     2. 小说显示      3. 退出系统

  
*******************************************************************************

内容:非常抱歉,我是一个文本模型,无法为您提供完整的系统设计和界面层设计。然而,根据您提供的需求分析,您可以根据以下示例进行界面层设计,以满足您的需求。

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

// ... 省略之前的代码 ...

void showAuthorMenu() {
    printf('
*****************************欢迎使用小说编辑器********************
');
    printf('1. 小说的定位
');
    printf('2. 插入字符串
');
    printf('3. 删除字符串
');
    printf('4. 显示小说
');
    printf('5. 字符串查找和替换
');
    printf('6. 保存小说
');
    printf('7. 读取小说
');
    printf('8. 小说的统计
');
    printf('9. 段落的删除
');
    printf('10. 段落的复制
');
    printf('11. 退出系统
');
    printf('*****************************************************************
');
}

void showSearchReplaceMenu() {
    printf('
*****************************欢迎使用小说编辑器*******************************
');
    printf('1. 查找字符串
');
    printf('2. 替换字符串
');
    printf('3. 退出系统
');
    printf('*******************************************************************************
');
}

void showStatisticsMenu() {
    printf('
*****************************欢迎使用小说编辑器********************************
');
    printf('1. 统计单词
');
    printf('2. 统计数字
');
    printf('3. 统计符号
');
    printf('4. 退出系统
');
    printf('*******************************************************************************
');
}

void showReaderMenu() {
    printf('
*****************************欢迎使用小说编辑器********************************
');
    printf('1. 定位功能
');
    printf('2. 小说显示
');
    printf('3. 退出系统
');
    printf('*******************************************************************************
');
}

int main() {
    // ... 省略之前的代码 ...

    int choice;

    while (1) {
        printf('
*****************************欢迎使用小说编辑器********************************
');
        printf('用户名:
');
        printf('密码:
');

        int userType = login();  // 执行登录操作,返回用户类型

        switch (userType) {
            case 1:  // 作者登录
                while (1) {
                    showAuthorMenu();
                    printf('请选择操作(1-11):');
                    scanf('%d', &choice);

                    switch (choice) {
                        case 1:
                            // 执行小说定位功能
                            break;
                        case 2:
                            // 执行字符串插入功能
                            break;
                        case 3:
                            // 执行字符串删除功能
                            break;
                        case 4:
                            // 执行小说显示功能
                            break;
                        case 5:
                            showSearchReplaceMenu();
                            printf('请选择操作(1-3):');
                            scanf('%d', &choice);

                            switch (choice) {
                                case 1:
                                    // 执行字符串查找功能
                                    break;
                                case 2:
                                    // 执行字符串替换功能
                                    break;
                                case 3:
                                    // 退出到上一级菜单
                                    break;
                                default:
                                    printf('无效的选择,请重新输入。
');
                                    break;
                            }
                            break;
                        case 6:
                            // 执行小说保存功能
                            break;
                        case 7:
                            // 执行小说读取功能
                            break;
                        case 8:
                            showStatisticsMenu();
                            printf('请选择操作(1-4):');
                            scanf('%d', &choice);

                            switch (choice) {
                                case 1:
                                    // 执行统计单词功能
                                    break;
                                case 2:
                                    // 执行统计数字功能
                                    break;
                                case 3:
                                    // 执行统计符号功能
                                    break;
                                case 4:
                                    // 退出到上一级菜单
                                    break;
                                default:
                                    printf('无效的选择,请重新输入。
');
                                    break;
                            }
                            break;
                        case 9:
                            // 执行段落删除功能
                            break;
                        case 10:
                            // 执行段落复制功能
                            break;
                        case 11:
                            printf('再见!
');
                            return 0;
                        default:
                            printf('无效的选择,请重新输入。
');
                            break;
                    }
                }
                break;
            case 2:  // 读者登录
                while (1) {
                    showReaderMenu();
                    printf('请选择操作(1-3):');
                    scanf('%d', &choice);

                    switch (choice) {
                        case 1:
                            // 执行小说定位功能
                            break;
                        case 2:
                            // 执行小说显示功能
                            break;
                        case 3:
                            printf('再见!
');
                            return 0;
                        default:
                            printf('无效的选择,请重新输入。
');
                            break;
                    }
                }
                break;
            default:
                printf('登录失败,请重新输入用户名和密码。
');
                break;
        }
    }
}

请注意,以上是一个简化的示例,您可以根据实际需求进行修改和扩展,包括菜单选项、提示消息和相应的功能调用。希望这能帮助到您!

简单的小说编辑器设计与实现

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

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