Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 23:03   #1
LezhiK
 
Регистрация: 14.04.2011
Сообщений: 7
По умолчанию создать модель файловой системы на основе связанных списков

доброго времени суток, форумчане!!! В сентябре получил задание на курсовой проект по СПО:
"Файловая система использующая связанные списки для размещения файлов и связанный список для хранения информации о свободных блоках".

Вот особенности задания: Модель должна использовать некий файл в качестве виртуального жёсткого диска с виртуальной файловой структурой, аналогичной файловой структуре реального жёсткого диска. На этом виртуальном жёстком диске создаются "файлы" и "папки" в структуре файловой системы. Также должны быть реализованы основные операции реальной файловой системы.

Основные операции я реализовал:
Код:
#ifndef TEXT_H 
 #define TEXT_H
 
#include <iostream.h>
 #include <string.h>
 #include <alloc.h>
 #include <conio.h>
 #include <stdlib.h>
 
struct FDat {          //структура данных
 char Name[20];     //имя
 char r[4];             // расширение
 char d[10];          //       дата 
 int size;               // размер
 char attr[4];        //  атрибут
 FDat *Next;
 };

FDat *Add(FDat *, FDat *);
 FDat *Del(FDat *, int &);
 void Show (FDat *);
 void Find (FDat *);
 void FreeRam (FDat *);
 
#endif
Это хэдэр, а вот код:
Код:
#include "head.h"

FDat *Add(FDat *posl)
 {
 if (posl == NULL){
 posl = new FDat;
 }
 else { posl->Next = new FDat;
 posl = posl->Next;
 }

 cout << "Vvedite - Name, Racsherenie, Daty, Razmer and Attribut: \n";
 cin >> posl->Name >> posl->r >> posl->d >> posl->size >> posl->attr;
 posl->Next = NULL;
 return posl;
 }

FDat *Del(FDat *begin, int &identif )
 {
 FDat *prom, *begin_new, *next;
 int x = 0, j =  0, k = 0, y = 0;
 char name[20];
 
 cout << "Mi udalaem!!! \n";
 
 cout <<"Vvedite NAME : ";
 cin >> name;
 begin_new = prom = next = begin;
 while ( begin != NULL) {
 for (int i = 0; i<strlen(name); i++)
 if (name[i] == begin->Name[i]) j++;
 if (j == strlen(name)) {
 if (prom == begin) {
 begin_new = begin->Next;
 prom = begin->Next;
 delete begin;
 x = 1;
 y = 1;
 begin = prom;
 }
 else {
 while ( k == 0) {
 if (next->Next == begin){
 if (next->Next->Next == NULL) {
 k = 1;
 x = 1;
 delete begin;
 next->Next = NULL;
 begin = NULL;
 identif = 1;
 begin_new = next;
 }
 else {
 prom = begin->Next;
 delete begin;
 x = 1;
 k = 1;
 y = 1;
 next->Next = begin = prom;
 }
 }
 next = next->Next;
 }
 }
 }
 if (y == 1) begin = NULL;
 if (begin != NULL)  begin = begin->Next;
 j = 0;
 }
 if (x == 0)
 cout << "NAME nety ... ";
 getch();
 return begin_new;
 
}
 
void Show (FDat *begin)
 {
 cout << "Prosmotr spiska!!! \n";
 cout <<"Name, Racsherenie, Data, Razmer and Attribut\n";
 while ( begin != NULL) {
 cout <<"\n"<< begin->Name <<"."<<begin->r <<" "<<begin->d <<"  "
 << begin->size <<" byte"<<begin->attr <<" \n ";
 begin = begin->Next;
 }
 getch();

}

void Find (FDat *begin)
 {
 int x = 0, j =  0;
 char name[20];
 cout << "poisk!!! \n";
 cout <<"Vvedite NAME : ";
 cin >> name;
 while ( begin != NULL) {
 for (int i = 0; i<strlen(name); i++)
 if (name[i] == begin->Name[i]) j++;
 
 if (j == strlen(name)) {
 cout <<"\n"<< begin->Name <<"."<<begin->r <<" "<<begin->d <<"  "
 << begin->size <<" byte"<<begin->attr <<" \n ";
 x = 1;
 j = 0;
 }
 
 begin = begin->Next;
 }
 if (x == 0)
 cout << "NAME nety ... ";
 getch();
 }

void FreeRam (FDat *begin)
 {
 FDat *prom;
 cout << "ochistka!!! \n";
 prom = begin;
 while ( prom != NULL) {
 begin = begin->Next;
 delete prom;
 prom = begin;
 }
 }

////////////////////////////////

int main ()
 {
 long int mem;
 FDat *Begin = NULL, *Posl = NULL, *Dopol;
 int ch, iden = 0;               //   наж. клавиша

 mem = farcoreleft(); //     Размер своб. памяти
 cout <<"Memory - "<<mem<<"\n";
 do {
 cout<<" <1> - DOBAVIT ZAPIS \n"
 <<" <2> - UDALIT ZAPIS \n"
 <<" <3> - PROSMOTR SPISKA \n"
 <<" <4> - POISK \n"
 <<" <5> - EXIT \n";

                  cin>>ch;   //  {реализация меню}

                  switch (ch) {
 case 1 :
 cout <<"adress = " <<Begin;
 cout <<"adress = " <<Posl;
 if (Begin == NULL) {
 Begin = Add(Posl);
 Posl = Begin;
 }
 else Posl = Add( Posl);
 cout <<"adress = " <<Begin;
 break;
 case 2 :
 Dopol = Del(Begin, iden);
 if (iden == 0) Begin = Dopol;
 else Posl = Dopol;
 break;
 case 3 :
 Show(Begin);
 break;
 case 4 :
 Find(Begin);
 break;
 }
 } while (ch != 5);
 
 cout <<"\n Memory - " <<farcoreleft()<<"\n";

 FreeRam(Begin);    //   очистка памяти
 getch();

 cout <<"\n Memory - " <<farcoreleft()<<"\n";
 if (mem == farcoreleft()) cout <<"Pamat' ne poterana ... ";
 else cout << "ERROR!!! Potera Memory!!!";
 
 cout<<" Press key..."<<endl;
 getch();

 return 0;
 }
если есть ошибки, то исправьте пожалуйста))
Как связать размещение файлов со списком, создать файл-виртуальный жесткий диск???

Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.10.2011 в 23:23.
LezhiK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разработка виртуальной файловой системы ТриСемёрки Visual C++ 13 25.12.2010 11:57
Сложение длинных чисел одного знака при помощи двунаправленных связанных списков Povar Паскаль, Turbo Pascal, PascalABC.NET 0 11.12.2008 14:35
Устройство файловой системы Alexandr-vi-92 Операционные системы общие вопросы 2 06.11.2008 08:14
Проблемма с быстой сортировкой связанных списков Grind Помощь студентам 0 30.05.2008 20:33
Парсер файловой системы FAT32 svennick Общие вопросы C/C++ 4 26.03.2008 23:26