简单文件管理系统.docx
《简单文件管理系统.docx》由会员分享,可在线阅读,更多相关《简单文件管理系统.docx(30页珍藏版)》请在冰点文库上搜索。
![简单文件管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-7/2/bf7f6ba9-6c06-4e80-81c5-f5704a361a80/bf7f6ba9-6c06-4e80-81c5-f5704a361a801.gif)
简单文件管理系统
数据结构课程设计
题目:
简单文件管理系统
学生姓名:
丁东伟,黄益辉,冯建豪
学号:
丁东伟201441402143,冯建豪201441402140,黄益辉201441402131
院(系):
计算机学院
专业班级:
计算机科学与技术1班
一、需求分析
Generaldescription总体概述
AbouttheProject项目介绍
这是一个简单商品分类管理系统,对商品进行分类管理.,主要功能:
1、浏览当前商品分类目录的所有内容(子分类和当前目录下的商品)
2、切换当前分类目录到上一级分类目录或下一级子分类目录(扩展,切换到任何一个目录)或直接切换到根目录
3、在当前分类目录下添加新商品目录,或者添加新商品信息。
4、在当前目录下删除某个子商品分类或某个商品信息
5、在当前目录下修改某个商品或分类目录的信息
6、根据某个商品编号(或名称)在整个系统中查找某个商品并显示全部信息
EnvironmentofProduct产品环境介绍
本系统为Windows控制台应用程序,编程语言为C语言,在VC++6.0下编译。
Softwarefunction软件功能
Usercharacteristics用户特征
本软件适合小型商场的商品分类,无年龄限制,用户需会使用键盘及鼠标。
SpecificRequirements具体需求
2.1到根目录
1.介绍:
转到文件目录的根目录;
2.输入:
CatalogNode*pCurrCatNode
3.处理:
将当前目录指针pCurrCatNode指向根目录root
4.输出:
true或者false
2.2到子目录
1.介绍:
转到当前文件目录的子目录;
2.输入:
CatalogNode*pCurrCatNode
3.处理:
判断当前目录指针pCurrCatNode的子目录指针choiceCatalog是否为空,若为空返回false,否则返回true
5.输出:
true或者false
2.3到父目录
1.介绍:
转到当前文件目录的父目录;
2.输入:
CatalogNode*pCurrCatNode
3.处理:
判断当前目录指针pCurrCatNode的父目录指针fatherCatalogNode是否为空,若为空返回false,否则返回true
4.输出:
true或者false
2.4添加目录
1.介绍:
在当前文件目录下添加一个新的子目录;
2.输入:
CatalogNode*currCatalogNode,CatalogNode*catNode
3.处理:
输入新目录名、创建年月日,调用目录添加函数addCatalog_fun(),若添加成功则返回true,否则返回false
4.输出:
true或者false
2.5修改目录
1.介绍:
修改当前目录下的一个子目录;
2.输入:
CatalogNode*currCatalogNode,CatalogNode*catNode
3.处理:
选择目录序号,修改所选目录的名称。
成功则返回true,否则返回false
4.输出:
true或者false
2.6删除目录
1.介绍:
删除当前目录下的一个子目录;
2.输入:
CatalogNode*currCatalogNode,CatalogNode*catNode
3.处理:
选择当前目录序号,删除所选序号的目录,成功则返回true,否则返回false
4.输出:
true或者false
2.7查看商品
1.介绍:
查看当前目录下的一个商品信息;
2.输入:
CatalogNode*rootCatNode,string*fileNumber
3.处理:
输入当前目录的一个商品的序号,显示该商品的信息。
查看成功则返回true,否则返回false
4.输出:
true或者false
2.8修改商品
1.介绍:
在当前文件目录下添加一个新的商品;
2.输入:
void
3.处理:
输入当前目录的一个商品的序号,修改该商品的信息。
修改成功则返回true,否则返回false
4.输出:
true或者false
2.9删除商品
1.介绍:
修改当前文件目录下的一个商品信息;
2.输入:
Catalog*currCatalog,FileNode*fileNode
3.处理:
输入当前目录的一个商品的序号,删除该商品的信息。
删除成功则返回true,否则返回false
4.输出:
true或者false
2.10添加商品
1.介绍:
删除当前文件目录下的一个商品信息;
2.输入:
void
3.处理:
先当前目录添加一个新的商品信息,若添加成功则返回true,否则返回false
4.输出:
true或者false
2.11查询商品
1.介绍:
按商品的编号在所有目录查找相符的商品信息并显示。
2.输入:
CatalogNode*rootCatNode,string*fileNumber
3.处理:
输入一个商品的编号,在所有目录进行查找该商品编号,若查找成功则返回true,否则返回false
4.输出:
true或者false
二、系统设计
1概要设计
1.1软件系统上下文定义
简单商品分类管理系统,对商品进行分类管理。
1.2DesignConsiderations设计思路
1)采用技术
本系统为Windows控制台应用程序,编程语言为C语言,开发工具为VC++6.0,在win7系统专业版下进行编程。
2)工程源码结构
1.3SystemArchitecture系统结构
系统功能包括到根目录,到父目录,到子目录,添加目录,修改目录,删除目录,查看商品,添加商品,修改商品,删除商品查询商品等11个模块。
1 到根目录:
转到文件目录的根目录;
2 到父目录:
转到当前文件目录的父目录;
3 到子目录:
转到当前文件目录的子目录;
4 添加目录:
在当前文件目录下添加一个新的子目录;
5 修改目录:
修改当前目录下的一个子目录;
6 删除目录:
删除当前目录下的一个子目录;
7 查看商品:
查看当前目录下的一个商品信息;
8 添加商品:
在当前文件目录下添加一个新的商品;
9 修改商品:
修改当前文件目录下的一个商品信息;
10 删除商品:
删除当前文件目录下的一个商品信息;
11 查询商品:
按商品的编号在所有目录查找相符的商品信息并显示。
1.4InterfaceDescription接口描述
程序分为三个层次:
界面层负责界面显示功能,包括选择菜单、目录及商品的输出;业务逻辑层负责调用数据访问层的方法,完成对菜单选项处理、目录及商品添加、修改和删除功能;数据访问层负责各项函数的实现,包括目录下文件链表及子目录链表中的信息。
1DataStructureDesignDescription数据结构设计
//字串结构体
typedefstruct
{
chars[81];
}string;
//商品文件结构体
typedefstruct
{
stringnumber;
stringname;
floatprice;
intcount;
}File;
//文件节点结构体
structFileNode
{
Filefile;
FileNode*nextFileNode;
};
//分类目录结构体
typedefstruct
{
stringname;
intbuildYear;//建立年份
intbuildMonth;//建立月份
intbuildDay;//建立日
FileNode*filesHead;//目录下文件链表头指针
}Catalog;
//目录节点结构体
structCatalogNode
{
CatalogNode*fatherCatalogNode;//父目录指针
Catalogcat;//目录
CatalogNode*nextCatNode;//下一个目录指针
CatalogNode*sonsCatHead;//子目录链表头指针
};
UIDesign界面设计
1)界面原型
2)界面说明
1 到根目录:
转到文件目录的根目录;
2 到父目录:
转到当前文件目录的父目录;
3 到子目录:
转到当前文件目录的子目录;
4 添加目录:
在当前文件目录下添加一个新的子目录;
5 修改目录:
修改当前目录下的一个子目录;
6 删除目录:
删除当前目录下的一个子目录;
7 查看商品:
查看当前目录下的一个商品信息;
8 添加商品:
在当前文件目录下添加一个新的商品;
9 修改商品:
修改当前文件目录下的一个商品信息;
10 删除商品:
删除当前文件目录下的一个商品信息;
11 查询商品:
按商品的编号在所有目录查找相符的商品信息并显示。
DetailedDesignofModule模块详细设计
2.1界面层
/**面向数据结构内的函数**********************************************************************/
//功能:
初始化文件结构体函数
//参数:
f-所需初始化的文件
//返回值:
true-成功,false-失败
boolinitFile(File*f)
{
f->count=-1;
f->name.s[0]='\0';
f->number.s[0]='\0';
f->price=-1;
returntrue;
}
//功能:
复制文件函数
//参数:
toFile-复制的目标文件f-复制文件的模板
//返回值:
true-成功,false-失败
boolcopyFile(File*toFile,File*f)
{
toFile->count=f->count;
strcpy(toFile->name.s,f->name.s);
strcpy(toFile->number.s,f->number.s);
toFile->count=f->count;
toFile->price=f->price;
returntrue;
}
//功能:
初始化目录结构体函数
//参数:
cat-所需初始化的目录
//返回值:
true-成功,false-失败
boolinitCatalog(Catalog*cat)
{
cat->name.s[0]='\0';
cat->buildDay=-1;
cat->buildMonth=-1;
cat->buildYear=-1;
cat->filesHead=NULL;
returntrue;
}
//功能:
初始化目录节点函数
//参数:
catNode-所需初始化目录的节点
//返回值:
true-成功,false-失败
boolinitCatalogNode(CatalogNode*catNode)
{
initCatalog(&catNode->cat);
catNode->fatherCatalogNode=NULL;
catNode->nextCatNode=NULL;
catNode->sonsCatHead=NULL;
returntrue;
}
/**************************************************************/
/*****面向服务层的函数*********************************************************/
//功能:
添加文件函数
//参数:
currCatalog-当前目录file-所需添加的文件
//返回值:
true-成功,false-失败
booladdFile(Catalog*currCatalog,File*file)
{
FileNode*fn=(FileNode*)malloc(sizeof(structFileNode));
copyFile(&(fn->file),file);
fn->nextFileNode=NULL;
FileNode*fnTemp=currCatalog->filesHead;
currCatalog->filesHead=fn;
fn->nextFileNode=fnTemp;
returntrue;
}
//功能:
删除文件函数
//参数:
currCatalog-当前目录file-所需删除文件的所在节点
//返回值:
true-成功,false-失败
booldelFile(Catalog*currCatalog,FileNode*fileNode)
{
FileNode*pFileNode=currCatalog->filesHead;
FileNode*p1FileNode=pFileNode;
while(pFileNode!
=NULL)
{
if(pFileNode==fileNode)break;
p1FileNode=pFileNode;
pFileNode=pFileNode->nextFileNode;
}
if(pFileNode==NULL)
{
printf("Thefileisnoexit!
");
returnfalse;
}
else
{
if(pFileNode==currCatalog->filesHead)currCatalog->filesHead=pFileNode->nextFileNode;
else
{
p1FileNode->nextFileNode=pFileNode->nextFileNode;
}
returntrue;
}
}
//功能:
查询文件函数
//参数:
rootCatNode-根目录file-所需查询商品编号
//返回值:
查询到的商品文件节点,查询失败返回NULL
File*searchFile(CatalogNode*rootCatNode,string*fileNumber)
{
FileNode*pfn=rootCatNode->cat.filesHead;
while(pfn!
=NULL)
{
if(strcmp(pfn->file.number.s,fileNumber->s)==0)return&(pfn->file);
pfn=pfn->nextFileNode;
}
CatalogNode*pcn=rootCatNode->sonsCatHead;
File*f=NULL;
while(pcn!
=NULL)
{
f=searchFile(pcn,fileNumber);
if(f!
=NULL)returnf;
pcn=pcn->nextCatNode;
}
returnf;
}
//功能:
添加目录函数
//参数:
currCatalog-当前目录catNode-所需添加目录的节点
//返回值:
true-成功,false-失败
booladdCatalog(CatalogNode*currCatalogNode,CatalogNode*catNode)
{
CatalogNode*fnTemp=currCatalogNode->sonsCatHead;
currCatalogNode->sonsCatHead=catNode;
catNode->nextCatNode=fnTemp;
catNode->fatherCatalogNode=currCatalogNode;
returntrue;
}
//功能:
删除目录函数
//参数:
currCatalog-当前目录catNode-所需删除目录的节点
//返回值:
true-成功,false-失败
booldelCatalog(CatalogNode*currCatalogNode,CatalogNode*catNode)
{
CatalogNode*pCatNode=currCatalogNode->sonsCatHead;
CatalogNode*p1CatNode=pCatNode;
while(pCatNode!
=NULL)
{
if(pCatNode==catNode)break;
p1CatNode=pCatNode;
pCatNode=pCatNode->nextCatNode;
}
if(pCatNode==NULL)
{
printf("Thecatalogisnoexit!
");
returnfalse;
}
else
{
if(pCatNode==currCatalogNode->sonsCatHead)currCatalogNode->sonsCatHead=pCatNode->nextCatNode;
else
{
p1CatNode->nextCatNode=pCatNode->nextCatNode;
}
returntrue;
}
}
2.2业务逻辑层
//功能:
添加目录服务函数
//参数:
currCatalog-当前目录catNode-所需添加目录的节点
//返回值:
true-成功,false-失败
booladdCatalog_fun(CatalogNode*currCatalogNode,CatalogNode*catNode)
{
returnaddCatalog(currCatalogNode,catNode);
}
//功能:
删除目录服务函数
//参数:
currCatalog-当前目录catNode-所需删除目录的节点
//返回值:
true-成功,false-失败
booldelCatalog_fun(CatalogNode*currCatalogNode,CatalogNode*catNode)
{
returndelCatalog(currCatalogNode,catNode);
}
//功能:
添加文件服务函数
//参数:
currCatalog-当前目录file-所需添加的文件
//返回值:
true-成功,false-失败
booladdFile_fun(Catalog*currCatalog,File*f)
{
returnaddFile(currCatalog,f);
}
//功能:
删除文件服务函数
//参数:
currCatalog-当前目录file-所需删除文件的所在节点
//返回值:
true-成功,false-失败
booldelFile_fun(Catalog*currCatalog,FileNode*fileNode)
{
returndelFile(currCatalog,fileNode);
}
//功能:
查询文件服务函数
//参数:
rootCatNode-根目录file-所需查询商品编号
//返回值:
查询到的商品文件节点,查询失败返回NULL
File*searchFile_fun(CatalogNode*rootCatNode,string*fileNumber)
{
returnsearchFile(rootCatNode,fileNumber);
}
//功能:
输入数值函数
//参数:
//返回值:
返回输入的数值,输入非法返回-1
intinputANumber()
{
charstr[16];
intres;
fflush(stdin);
scanf("%s",str);
inti=0;
while(str[i]!
='\0')
{
if(str[i]<'0'&&str[i]>'9')return-1;
i++;
}
res=0;
i--;
intt=i;
while(i>=0)
{
res+=(int)(pow(10,t-i)*(str[i]-'0'));
i--;
}
returnres;
}
2.3数据访问层
/**面向数据结构内的函数**********************************************************************/
//功能:
初始化文件结构体函数
//参数:
f-所需初始化的文件
//返回值:
true-成功,false-失败
boolinitFile(File*f)
{
f->count=-1;
f->name.s[0]='\0';
f->number.s[0]='\0';
f->price=-1;
returntrue;
}
//功能:
复制文件函数
//参数:
toFile-复制的目标文件f-复制文件的模板
//返回值:
true-成功,false-失败
boolcopyFile(File*toFile,File*f)
{
toFile->count=f->count;
strcpy(toFile->name.s,f->name.s);
strcpy(toFile->number.s,f->number.s);
toFile->count=f->count;
toFile->price=f->price;
returntrue;
}
//功能:
初始化目录结构体函数
//参数:
cat-所需初始化的目录
//返回值:
true-成功,false-失败
boolinitCatalog(Catalog*cat)
{
cat->name.s[0]='\0';
cat->buildDay=-1;
cat->buildMonth=-1;
cat->buildYear=-1;
cat->filesHead=NULL;
returntrue;
}
//功能:
初始化目录节点函数
//参数:
catNode-所需初始化目录的节点
//返回值:
true-成功,false-失败
boolinitCatalogNode(CatalogNode*catNode)
{
initCatalog(&catNode->cat);
catNode->fatherCatalogNode=NULL;
catNode->nextCatNode=NULL;
catNode->sonsCatHead=NULL;
returntrue;
}
/**************************************************************/
/*****面向服务层的函数*********************************************************