C++课程设计 文件管理系统
- 格式:docx
- 大小:130.87 KB
- 文档页数:21
《面向对象程序设计与C++》
课程设计
题目:文件管理系统
院、系:计算机信息与技术
学科专业:计算机科学与技术
学号:00000000
学生姓名:徐飞
指导教师:
2012年12月21日
目录
一.目的 (1)
二.总体介绍 (2)
三.详细介绍 (3)
四.功能测试及运行效果 (7)
五.设计体会及小结 (10)
六.参考文献 (11)
七.附录--源代码 (12)
中文摘要
本课程设计将实现一个文件管理系统。这个文件管理系统能实现对文件增、删、查、改等基本的文件的操作。本程序一改普通的control console的菜单界面,继而改用类似DOS 系统下的命令行界面。这样做的目的是为了提高用户使用程序的效率。
在课程设计中,采用了VC6.0。在程序设计中,采用了结构化与面向对象两种解决问题方法。结构化的思想主要应用在划分功能模块上,而面向对象的思想主要应用在把所有的属性和方法封装起来,以备各模块的调用,这样做的目的是为了让整个程序的结构清晰、体系完整,便于维护。
一.目的
此次课程设计的目的是用C++程序设计语言编写一个文件管理系统,这个文件管理系统
们把此目录叫做“操作目录”),提供进入到其它目录的命令以实现全磁盘的文件管理。
二. 总体介绍
C++提供的文件输入输出流的功能比较通用,所以在这个文件管理系统下,需要将C++中所提供的输入输出流的功能进行改造,隐藏掉一些不需要在这个文件管理系统中使用的功能,以适合这个文件管理系统的需要。
我们先建一个BaseClass(基类),提供最基本的输入输出流对象,以及提供打开与关闭流的功能方便派生类的“具有层次性的”调用(可结合下图阅读)。
同C++中的设计一样,我们用BaseClass 派生出FileOperatorIn 、FileOperatorOut 两个类,这两个类的基本作用分别是从外部读入文件(二进制形式,这样不会因为格式化的读入而将原始数据破坏)和将需要写入的内容向文件输出(格式同读入)。
有了FileOperatorIn 和FileOperatorOut 两个文件类后,我们可以结合各种C++或
Windows 给我们提供的文件操作函数来进行磁盘上的文件管理了。为了使程序的结构层次清晰,我们将各种操作封装到一个FunClass(操作类)中,方便main 函数进行调用。
整个架构图如下:
三.详细介绍
现在,我们依照总体介绍里的框架进行详细叙述。
BaseClass的实现:
BaseClass(string &name):flag(1){
ofile.open(name.data(),ios_base::out|ios_base::binary);
}
BaseClass(bool a,string &name):flag(2){
ifile.open(name.data(),ios_base::in|ios_base::binary);
}
BaseClass有两个重载构造函数,这样做的目的是为了区分是哪个派生类使用的,方便管理。而且所有的打开方式均为二进制形式,目的是不破坏源文件。置标志位目的是依据使用的构造函数来进行析构。
BaseClass的两个派生类(FileOperatorIn和FileOperatorOut):他们的构造函数唯一的的目的就是初始化基类。
string FileOperatorIn::readfile(){
getline(ifile,line,'\0');
return line;
}
FileOperatorOut::WriteFile(string &content){
ofile.write(content.data(),content.length());
}
两个派生类中的输入输出流都是用最基本的getline和write函数来实现的,因其比较简单,故不做过多解释(具体的细节请参考源代码)。
故不解释。
CreatFile函数是用来在操作目录下创建一个新文件,可以自定类型。关键语句:
FileOperatorOut a(k);
if(a.ofile)
return true;
return false;
用传入的参数(string类的一个对象,用于存放需要创建的文件名)来构造一个FileOperatorOut的对象(上面已经介绍过FileOperatorOut类)。
OpenFile函数是用来在操作目录下获取一个文件,并显示其中的信息(一般用于查看txt、log等文件)。关键语句:
FileOperatorIn a(true,k);
if(a.ifile){
cout< return true; } else return false; 用传入的参数(string类的一个对象,用于存放需要打开的文件名)来构造一个FileOperatorIn的对象如果构造成功,则读取其中的内容显示到屏幕,否则返回false。 WriteInFile函数用来向操作目录下的某个文件写入信息。关键语句: string t; FileOperatorOut a(k); cout<<"请输入需要写入的内容"< getline(cin,t); a.WriteFile(t); 先用k来构造一个FileOperatorOut的对象,用于先打开磁盘上相应的文件(如果磁盘上没有需要的文件则创建一个),然后用getline函数接受输入的内容,通过FileOperatorOut 对象的WriteFile方法写入到相应的文件中去。 CopyFile函数用于将操作目录下的某个文件复制并粘贴到任意目录下。第一个参数为操作目录下的文件名,第二个参数是需要复制到的目录,必须填入完整路径(不填默认为程序运行目录)。关键语句: out.ofile< 其中out和in分别为FileOperatorOut和FileOperatorIn类的对象,用in打开一个需要被复制的文件然后经过重定向加载到输出流对象中向目标磁盘输出,实现复制的功能。而且out和in对象对文件的打开方式均为二进制形式,所以不会破坏文件的源格式,继而保障复制的可靠性。 ReName函数用于将操作目录下的文件进行重命名操作。关键语句: ifstream in(k.data()); if(in){ //判断打开是否成功 in.close(); if(!rename(k.data(),NewName.data()) 调用rename函数(windows提供,用于函数的重命名)进行重命名操作。在调用rename 函数之前一定要先关闭打开的文件(即加上in.close())。 Dir函数用于显示操作目录下的文件与目录。关键语句: k.insert(k.length(),"*.*"); _finddata_t file; long lf; if((lf = _findfirst(k.data(), &file))==-1l)