实验四:文件管理

操作系统实验
摘要由CSDN通过智能技术生成

实验四:文件管理

一、实验目的

  1. 本课程设计的目的是设计一个简单多用户文件系统,切身体验理解文件体统的内部构造,实现对文件,目录的操作,运用链表模拟实现各种功能,同时实现一级索引,二级索引等完成对空间的分配操作。
  2. 通过本课程设计理解文件系统的内部功能及内部实现,完善课本上各种文件系统的操作与认识。

二、实验要求及内容

1.delete 删除文件
2.open 打开文件
3.close 关闭文件
4.read 读文件
5.write 写文件

三、实验代码

#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<iomanip>
using namespace std;
 
#if _MSC_VER>1000
#pragma once
#endif	//_MSC_VER>1000
 
extern int disk_block[10000];
extern int disk_empty;
typedef struct UFD		//存储文件信息
{
   
	char name[10];		//文件名
	int attribute;		//属性
	int length;			//长度
	int a[10];		//为文件本身分配10个空间
	int *p1;			//一级索引,100个空间
	int (*p2)[100];		//二级索引,100*100个空间
	struct UFD *next;
}UFD;
typedef struct DIR		//存储目录信息
{
   
	DIR* above;			//上一结点
	char name[10];
	int length;
	DIR *next;			//下一结点
	UFD *File_head;		//此目录下的文件指针
	DIR *Dir_head;		//此目录下目录链表指针
}DIR;
 
class Cuse				//定义管理用户目录的类
{
   
	DIR *now;			//当前目录
	UFD *Fhead;			//文件的头结点
	DIR *Dhead;			//根目录的目录链头结点
	char code[10];		//密码
	char name[10];		//用户名
	int length;			//用户空间大小
	int status;			//是否获得空间
public:
	void set_status(int);
	int dele_user();
	int dis_file();		//显示文件所占外存块号
	int dis_dir(DIR *d);//当前路径
	int get_length();
	char const *get_name();
	char const *get_code();
	int get_status();
	int set_user(char *,char *);//设置用户名与密码
	DIR *get_now();
	int dele_file(UFD *f);		//删除文件
	int dele_dir(DIR*);			//删除目录
	Cuse();						//构造
	~Cuse();					//析构
	int goback();				//返回上级
	int dis_now();				//显示当前目录
	int new_file();
	int new_dir();
	int open_dir();
	int open_file();
	int first_dele_file();		//删除文件的前部分工作
	int first_dele_dir();		//删除目录的前部分工作
	int set_code();
};
 
class Cdisk{
   					//用户类
public:
	Cuse user[5];		//用户个数最多为5
	char code[10];
	int dis_disk();
	int first_dele_user();
	int dele_user(int);
	int new_user();				//查看当前用户与外存空间使用情况,后创建新用户
	int set_code();				//设置新密码
	int login(char);				//登陆
	Cdisk();
	virtual~Cdisk();			//虚函数,析构
};
 
int disk_block[10000];
int disk_empty;
Cdisk::Cdisk()		//管理磁盘的类,构造函数
{
   
	int i=0;
	char code[10]="123456";
	for(i=0;i<10000;i++)		//初始化所有磁盘块为空闲
		disk_block[i]=0;
	//this->user[0].set_user("student","123");//默认一个用户
	disk_empty=10000;
	cout.setf(ios::left);	//设置输出方式
}
Cdisk::~Cdisk()		//析构
{
   
}
 
int Cdisk::dele_user(int i)		//Cdisk类dele_user的构造
{
   
	Cuse C;
	C=user[i];
	user[i].dele_user();		//调用Cuse类的成员函数 int dele_user()
	return 1;
}
 
int Cdisk::dis_disk()		//检查磁盘信息
{
   
	int i=0;
	cout<<setw(14)<<"用户名"<<setw(14)<<"占用空间大小"<<endl;
	for(i=0;i<5;i++)
		if(user[i].get_status()==1)		//存在的用户的信息
			cout<<setw(14)<<user[i].get_name()<<setw(14)<<user[i].get_length()<<endl;
		cout<<"已用空间:"<<10000-disk_empty<<endl<<"剩余空间:"<<disk_empty<<endl;
		return 1;
}
int Cdisk::login(char b)		//登陆
{
   
	char n[10],c[10];
	int i;
	if(b=='1')
	{
   
		cout<<"用户:管理员"<<endl;
		cout<<"密码:默认\n"<<endl;
		system("pause");
		return 1;
	}
	else
	{
   
		if(!user[0].get_status())	//当前不存在用户
		{
   
			i=0;
			cout<<"当前用户为空,欢迎注册!"<<endl;
			user[i].set_status(1);		//为新用户分配权利
			cout<<"请输入用户名:"<<endl;
			cin>>n;
			cout<<"请输入密码:"<<endl;
			cin>>c;
			user[i].set_user(n,c);		//调用Cuse的成员函数,传递用户名与密码
 
			cout<<"恭喜,创建用户成功!"<<endl;
			return i;
		}
		else
		{
   
			cout<<"用户名:";
			cin>>n;
			cout<<"密码:";
			cin>>c;
			cout<<endl;
			for(i=0;i<5;i++)	//查找是否存在此用户
			{
   
				if(user[i].get_status())		//存在方比较
					if(!strcmp(n,user[i].get_name()))	//相等时为0,此判断为匹配
						if(!strcmp(c,user[i].get_code()))		//密码匹配
						{
   
							cout<<"登陆成功!"<<endl;
							cout<<"欢迎"<<user[i].get_name()<<"登陆"<<endl;
							return i;
						}
						else
						{
   
							cout<<"密码错误"<<endl;
							return -1;
						}
			}
			cout<<"此用户不存在!"<<endl;
			return -1;
		}
	}
}
 
int Cdisk::set_code()		//设置新密码
{
   
	char temp1[10],temp2
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值