> # ♻️ 资源
> **大小:** 513KB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010548**](https://www.yuque.com/sxbn/ks/100010548)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87400399**](https://download.csdn.net/download/s1t16/87400399)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 《数据结构》课程设计报告
# 一、设计内容及其要求
资源管理器的模拟实现(A)
- 用树结构,模拟实现资源管理器的功能,包括:
- 文件夹的建立;
- 文件的增加;
- 文件的删除;
- 文件夹的删除。
- 在此基础上增加了复制/移动/重命名文件
# 二、基本原理
- C/C++ 基本语法
兄弟孩子法表示的多叉树的存储结构及其操作
- 存储多叉树的链式栈的存储结构及其操作
- 结构体指针的熟练使用
- 文件读写操作
- 双序确定一棵唯一二叉树
- Windows 命令行操作文件的命令
# 三、具体设计方案(设计说明、框图、流程图等)
设计说明:
Ⅰ、需求分析
用树结构设计一个资源管理器,能够模拟资源管理器的基本功能,如创建文件/文件夹,删除文件/文件夹,重命名文件/文件夹,复制/移动文件,查看文件/文件夹的路径等。
- 输入的形式和输入值的范围:
程序的输入形式以字符串和整数为主,字符串主要是输入文件夹/文件的名字,而整数主要是定义文件的类型,1 为文件夹类型,2 为文件类型,还有-1 是退出程序的命令。
- 输出的形式:
输出的形式主要是字符串类型,如执行完命令的提醒,函数返回的文件路径,函数输出的文件系统结构等,都由字符串构成。
- 程序所能达到的功能:
能够在程序内的文件树中模拟文件的操作过程,结点的增加或删除代表文件的增加或删除,在此基础上,通过命令行将文件树的结构映射到系统盘中,以实现在修改文件树的结点的同时会在操作系统中完成相应的操作,实现真正能够管理部分系统文件的功能,同时能够把程序的操作数据保存下来,在程序下次启动时可以恢复上次操作完的状态,以达到程序的循环重复使用。
- 测试数据:
测试数据根据用户使用而定,只要按照用户手册要求输入数据即可。
Ⅱ、概要设计
**抽象数据类型**
```c
typedef struct TreeNode {
} TreeNode, *Tree;
//定义存储文件系统的多叉树(兄弟孩子表示法)
typedef struct Stack {
} Stack, *LinkStack;
//定义遍历多叉树需要用到的链式栈
```
设计各程序模块及各模块之间的调用关系
```c
bool initStack(LinkStack &S)//链栈的初始化
bool Push(LinkStack &S, Tree T) //入栈
bool Pop(LinkStack &S, Tree &T) //出栈
bool getTop(LinkStack S, Tree &T) //取栈顶元素
bool isStackEmpty(LinkStack S) //判断栈是否为空
void createFileSystem(Tree &T) //建立文件系统(创建文件树的根结点)
void createNewTreeNode(Tree &T, string name, int type, int level)
//创建一个新结点,用于初始化文件系统,新建文件,移动文件,复制文件等操作。
bool initFilePath(Tree &T) //初始化文件系统 (创建文件树的必要结点)
void saveFileSystem(Tree T) //保存文件系统数据到TXT文件中
void traverseFilePath(Tree T) //遍历文件系统,并输出文件系统结构
```
重载:
```c
Tree findFileNode(Tree T, string filename)
//在文件树上找到名为filename的文件夹,用于查找、新建、删除、重命名、移动、复制文件等操作
Tree findFileNode(Tree T, string parentname, string filename)
//在文件树上找到父母为parentname,名为filename的文件,用于查找、新建、删除、重命名、移动、复制文件等操作
Tree findFirstNextEmptyRoot(Tree T)
//找到第一个nextSibling为空的根节点,在插入(创建新文件)时要使用
bool checkSameName(Tree T, string filename, int type)
//重名判别函数(判定一个文件夹中是否已有同名文件),在新建、移动、复制、重命名文件时要用到此函数
```
重载:
```c
string getFilePath(Tree T, string filename)
//获取名为filename的文件夹在系统中的路径
string getFilePath(Tree T, string parentname,string filename)
//获取父母为parentname,名为filename的文件在系统中的路径
bool createNewFile(Tree &T, string filename, string newfilename, int type)
//创建一个新的文件/文件夹
```
重载:
```python
bool deleteFile(Tree &T, string defilename)
//删除名为defilename的文件夹
bool deleteFile(Tree &T,string parentname, string defilename)
//删除父母为parentname,名为defilename的文件夹
```
重载:
```c
bool reNameFile(Tree &T, string filename, string newfilename)
//重命名名为filename的文件夹为newfilename
bool reNameFile(Tree &T, string parentname,string filename, string newfilename)
//重命名父母为parentname,名为filename的文件为newfilename
bool lsFileChild(Tree T, string filename)
//列出名为filename的文件夹下的所有文件
bool moveFile(Tree &T, string mvparentname, string mvfilename, string tofilename)
//移动父母为mvparentname,名为mvparentname的文件到名为tofilename的文件夹中
bool copyFile(Tree &T, string parentname, string cpfilename, string tofilename)
//复制父母为parentname,名为cpfilename的文件到名为tofilename的文件夹中
//从外存中读入文件系统树数据
void readFile()
//利用读入的数据重建树
Tree readSystemFromTxt(MainData *preorder, MainData *midorder, int len)
//将重建后的树的双亲和前驱还原
void connectPreParent(Tree &T)
void menu() //程序运行显示的菜单
void run(Tree &T) //main函数的入口
```
各模块之间的调用关系:(下页)
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712883984371-acc56a0e-65ec-4d92-beae-0de9dd1ab179.png#averageHue=%23fefefe&id=mhHOQ&originHeight=891&originWidth=1473&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
程序执行的流程图:
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712883984478-ba36b936-d92e-4737-85e3-2ecd905a0c72.png#averageHue=%23ebf4f7&id=AZPex&originHeight=766&originWidth=1835&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
组员分工:无。
Ⅲ、详细设计
抽象数据类型的具体实现:
```c
typedef struct TreeNode {
string fileName; //文件名
int fileType;
//fileType为1代表文件夹 为0代表文件 根节点为文件夹类型
int nodeLevel;
//存结点的层次,注意并不是在树中的深度,因为采用的是孩子兄弟表示法 存这个数主要是为了输出文件系统目录
struct TreeNode *pre; //前驱
struct TreeNode *parent; //父亲
struct TreeNode *firstChild; //第一个孩子
struct TreeNode *nextSibling; //下一个兄弟
} TreeNode, *Tree;
typedef struct Stack {
Tree data;
struct Stack *next;
} Stack, *LinkStack;
```
主要操作的伪码算法:
```c
bool createNewFile(Tree &T, string filename, string newfilename, int type) // {
TreeNode *p = findFileNode(T, filename);//找到要新建的文件所在文件夹的指针
if(type == 1 && checkSameName(T, newfilename, type))//判别文件夹中是否有重名文件夹
{
cout<<"Warning:"<<endl;
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现(控制台)资源管理器【100010548】
共8个文件
txt:3个
cpp:2个
doc:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 118 浏览量
2023-01-28
11:01:38
上传
评论
收藏 514KB ZIP 举报
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010548 用树结构设计一个资源管理器,能够模拟资源管理器的基本功能,如创建文件/文件夹,删除文件/文件夹,重命名文件/文件夹,复制/移动文件,查看文件/文件夹的路径等。
资源推荐
资源详情
资源评论
收起资源包目录
100010548-基于C++实现(控制台)资源管理器.zip (8个子文件)
sourcemanager
数据结构课程设计资源管理器
数据结构课程设计报告.doc 629KB
SourceCode
B-TREE.cpp 5KB
源码
资源管理器Source Manager-v1.0.cpp 27KB
fileone.txt 55B
filetwo.txt 55B
注意:fileone和filetwo为数据文件,请不要随意修改.txt 0B
LICENSE 1KB
README.md 30KB
共 8 条
- 1
资源评论
神仙别闹
- 粉丝: 2704
- 资源: 7645
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功