一、目的、要求
1.使用编程语言C/C++/JAVA完成一个文件管理模拟系统的分析、设计和实施。通过课程设计掌握操作系统基础知识、Linux常用函数库的使用和应用程序的开发过程。
2.课程设计为学生提供了一个既动手又动脑,独立实践的机会,将教材上的理论知识和实践操作结合起来,锻炼学生分析解决问题的能力,提高学生实践编程能力。
3.培养学生在项目开发中团队合作精神、创新意识及能力。
二、主要内容
综合运用操作系统理论知识和编程知识设计实现一个文件管理模拟系统,该系统包含的基本信息:创建用户、登录用户、创建文件、删除文件、打开文件、显示文件、关闭文件等信息,能显示文件内容(50字符换行显示)、更改文件内容和更改文件名,并能修改文件的读写权限控制,支持查看文件的属性,主要包括:文件类型、文件长度、创建时间、文件权限等。
三、课程设计的目的与要求
1.使用编程语言C/C++/JAVA完成一个文件管理模拟系统的分析、设计和实施。通过课程设计掌握操作系统基础知识、Linux常用函数库的使用和应用程序的开发过程。
2.课程设计为学生提供了一个既动手又动脑,独立实践的机会,将教材上的理论知识和实践操作结合起来,锻炼学生分析解决问题的能力,提高学生实践编程能力。
3.培养学生在项目开发中团队合作精神、创新意识及能力。
四、设计正文
1.概述
1.1课程设计目的
1、掌握操作系统的基础知识并能熟练运用
2、熟悉Linux系统文件目录结构
1.2课程设计内容
2.系统需求分析
2.1系统目标
1、能够通过模拟文件管理系统,来实现创建用户,登录用户,创建文件,删除文件,打开文件,显示文件,关闭文件等信息,能显示文件内容,更改文件内容和更改文件名,并能够修改文件的读写权限控制的功能。支持查看文件的属性,主要属性包括:文件类型, 文件长度,创建时间,文件权限等
2.2主体功能
1、能够进行注册用户,登录用户,更改当前目录,创建子目录,删除子目录,显示当前目录的子目录,创建文件,删除文件,打开文件,关闭文件,读写文件,设置文件保护密码以及退出系统
2.3开发环境
操作系统:windows
开发语言:c
软件:dev-c++
3.系统总体设计
3.1系统的功能模块划分
本次的操作系统的课程设计只使用了一个cpp文件,在这个cpp文件中,创建了每一个功能的函数以及很多个结构体来实现信息的存储,并没有分文件编写,所以没有具体的模块划分。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<time.h>using namespace std;// 文件结构体
typedef struct file {char* filename;struct contentNode* contentHead;time_t createtime;bool flag = 0;int size;int permissions;int length;
} file;// 内容结点结构体
typedef struct contentNode {char* content;struct contentNode* next;
} contentNode;// 用户结构体
typedef struct user {char* username;file* files[100];int num_files;
} user;// 函数声明
void create_user();
void delete_user();
int count_files();
void create_file(user* u);
void delete_file(user* u);
file* open_file(user* u);
void close_file(file* f);
void read_file(file* f);
void write_file(file* f);
void display_directory(user* u);
void display_file(user* u);
user* alter_user(user* u);
void initialize_users(int num_users);
void print_menu();user users[100];
user* u;
int num_users = 0;
file* curFile;
int user_id;
int permission = 0;// 创建用户
void create_user() {if (num_users >= 100) {printf("用户数已达上限n");return;}char newname[100];printf("请输入新用户名:");fgets(newname, 100, stdin);newname[strcspn(newname, "n")] = 0;for (int i = 0; i < num_users; i++) {if (strcmp(users[i].username, newname) == 0) {printf("用户名已存在n");return;}}users[num_users].username = strdup(newname);num_users++;printf("用户创建成功n");
}// 删除用户
void delete_user() {char username[100];printf("请输入要删除的用户名:");fgets(username, 100, stdin);username[strcspn(username, "n")] = 0;int index = -1;for (int i = 0; i < num_users; i++) {if (strcmp(users[i].username, username) == 0) {index = i;break;}}if (index == -1) {printf("用户不存在n");return;}free(users[index].username);for (int i = index; i < num_users - 1; i++) {users[i] = users[i + 1];}num_users--;printf("用户删除成功n");
}// 统计文件数量
int count_files() {int count = 0;for (int i = 0; i < num_users; i++) {count += users[i].num_files;}return count;
}// 创建文件
void create_file(user* u) {char newname[100];printf("请输入要创建的文件名:");fgets(newname, 100, stdin);newname[strcspn(newname, "n")] = 0;for (int i = 0; i < u->num_files; i++) {if (strcmp(u->files[i]->filename, newname) == 0) {printf("文件已存在n");return;}}file* f =(file*)malloc(sizeof(file));f->filename = strdup(newname);f->contentHead = NULL;f->flag = false;f->size = 0;u->files[u->num_files++] = f;printf("文件创建成功n");
}
// 删除文件
void delete_file(user* u) {
char filename[100];
printf("请输入要删除的文件名:");
fgets(filename, 100, stdin);
filename[strcspn(filename, "n")] = 0;int index = -1;
for (int i = 0; i < u->num_files; i++) {if (strcmp(u->files[i]->filename, filename) == 0) {index = i;break;}
}if (index == -1) {printf("文件不存在n");return;
}contentNode* current = u->files[index]->contentHead;
contentNode* temp;
while (current != NULL) {temp = current;current = current->next;free(temp->content);free(temp);
}free(u->files[index]->filename);
free(u->files[index]);
for (int i = index; i < u->num_files - 1; i++) {u->files[i] = u->files[i + 1];
}
u->num_files--;
printf("文件删除成功n");}
// 打开文件
file* open_file(user* u) {
char filename[100];
printf("请输入要打开的文件名:");
fgets(filename, 100, stdin);
filename[strcspn(filename, "n")] = 0;for (int i = 0; i < u->num_files; i++) {if (strcmp(u->files[i]->filename, filename) == 0) {u->files[i]->flag = true;printf("文件打开成功n");return u->files[i];}
}
printf("文件不存在n");
return NULL;
}// 关闭文件
void close_file(file* f) {
if (f->flag == false) {
printf("文件已经关闭n");
return;
}
f->flag = false;
printf("文件关闭成功n");
}// 读文件
void read_file(file* f) {
if (f->flag == false) {
printf("文件还未打开,请先打开文件n");
return;
}
if (f->contentHead == NULL) {
printf("文件为空n");
return;
}
printf("文件内容为:n");
contentNode* current = f->contentHead;
while (current != NULL) {
printf("%s", current->content);
current = current->next;
}
printf("n");
}// 写文件
void write_file(file* f) {
if (f->flag == false) {
printf("文件还未打开,请先打开文件n");
return;
}
char content[1000];
printf("请输入要写入的内容:");
fgets(content, sizeof(content), stdin);
content[strcspn(content, "n")] = 0;contentNode* newNode = (contentNode*)malloc(sizeof(contentNode));
newNode->content = strdup(content);
newNode->next = NULL;if (f->contentHead == NULL) {f->contentHead = newNode;
} else {contentNode* current = f->contentHead;while (current->next != NULL) {current = current->next;}current->next = newNode;
}f->size += strlen(content);
f->length = strlen(content);
printf("文件写入成功n");
printf("文件大小为:%d",f->length);
}// 显示用户的文件
void display_directory(user* u) {
printf("用户 %s 的文件列表:n", u->username);
for (int i = 0; i < u->num_files; i++) {
printf("%sn", u->files[i]->filename);
}
}// 显示文件
void display_file(user* u) {file* f = open_file(u);if (f != NULL) {read_file(f);printf("文件大小为:%dn", f->size);close_file(f);}}
//更改文件内容
void modify_file_content(file* file, char* content) {strcpy(file->contentHead->content, content);file->length = strlen(content);printf("文件内容修改成功!n");
}// 更改文件名
void modify_file_name(file* file, char* new_name) {strcpy(file->filename, new_name);printf("文件名修改成功!n");
}// 更改文件权限
void modify_file_permissions(file* file, int permissions) {
if (permissions == 0) {
printf("文件已设为只读!n");
} else {
printf("文件已设为读写!n");
}
file->permissions = permissions;
}// 查看文件属性
void view_file_attributes(user* user,file* file) {if(file == curFile){printf("没有文件n");return;}
printf("*****************************n");
printf("*文件名:%s n", file->filename);
printf("*文件类型:文本文件 n");
printf("*文件大小:%d(byte) n", file->length);
printf("*创建时间:%s n", ctime(&file->createtime));
printf("*文件权限:%s n", file->permissions == 0 ? "只读" : "读写");
printf("*****************************n");
}// 转换用户
user* alter_user(user* u) {
printf("请选择用户:n");
for (int i = 0; i < num_users; i++) {
printf("%d. %sn", i + 1, users[i].username);
}
scanf("%d", &user_id);
getchar(); // 清除缓冲区
u = &users[user_id - 1];
return u;
}// 初始化用户
void initialize_users(int num_users) {
char str[10];
for (int i = 0; i < num_users; i++) {
printf("请为每个用户创建用户名:");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "n")] = 0; // 去除末尾换行
users[i].username = strdup(str);
}
}// 打印菜单
void print_menu() {
printf("*************************************************n");
printf("请选择操作选项:n");
printf("1. 创建用户tt");
printf("2. 删除用户tt");
printf("3. 统计文件数量n");
printf("4. 创建文件tt");
printf("5. 删除文件tt");
printf("6. 打开文件n");
printf("7. 关闭文件tt");
printf("8. 读文件tt");
printf("9. 写文件n");
printf("10. 更改文件内容tt");
printf("11. 更改文件名tt");
printf("12. 更改文件权限n");
printf("13.显示目录tt");
printf("14.显示文件tt");
printf("15.切换用户n");
printf("16.查看文件属性tt");
printf("17. 退出系统n");
}// 主函数
int main() {
// 初始化用户
printf("请确定用户数(1——100):");
scanf("%d", &num_users);
getchar(); // Clear input buffer
initialize_users(num_users);// 选择用户
printf("请选择要登陆的用户:n");
for (int i = 0; i < num_users; i++) {printf("%d. %sn", i + 1, users[i].username);
}
scanf("%d", &user_id);
getchar(); // Clear input buffer
u = &users[user_id - 1];// 文件系统操作选择
int choice;
do {print_menu();scanf("%d", &choice);getchar(); // Clear input bufferswitch (choice) {case 1:create_user();break;case 2:delete_user();break;case 3:printf("总文件数量:%dn", count_files());break;case 4:create_file(u);break;case 5:delete_file(u);break;case 6:curFile = open_file(u);break;case 7:close_file(curFile);break;case 8:read_file(curFile);break;case 9:write_file(curFile);break; case 10:{char content[1000];scanf("%[^n]",content);modify_file_content(curFile,content);}break;case 11:{char new_name[50];scanf("%s",new_name);modify_file_name(curFile,new_name);}break;case 12: modify_file_permissions(curFile,permission);break;case 13:display_directory(u);continue;case 14:display_file(u);break;case 15:u = alter_user(u);break;case 16:{view_file_attributes(u,curFile);}break;case 17:printf("退出文件系统n");break;default:printf("请输入1-17n");break;}
} while (choice != 17);return 0;}
本文发布于:2024-02-01 14:58:41,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170677072137426.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |