Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа. Калинин А. Вариант 7.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
399.72 Кб
Скачать

Начало Вывод на экран файла с самым большим количеством обращений

While(Не дойдем до конца)

Конец

If (элемент больше Max значеня)

Записываем значения

Переходим к след. элементу

да

Нет

N – переменная для задания количества вводимых файлов

Exit – переменная для выхода из программы

Choose – переменная для задания пунктов меню

Dest – переменная используемая при указателе на элемент, который хотим удалить

Name – имя файла

Kolvo – количество обращений к файлу

Date – дата создания файла

*iHead - Адрес на 1 элемент

*iNext - Адрес на текущий элемент

*iCurr - Адрес на следующий элемент

Temp – переменная для смены адреса начала списка

Видалення елементу

Операцію видалення виконує функція Delete. Програма запитує назву файлу і виконує пошук за допомогою функції strcmp. Починаючи з першого елементу функція порівнює властивість name наступного елементу за поточним та значення, що передалося у функцію. Якщо є збіг, встановлюється наступний за поточним на елемент, який знаходиться через один від поточного та видаляється наступний за поточним. Для того, щоб удосконалитися у правильному результаті, в пункті меню обираємо опцію виводу на екран.

Опис вхідних даних

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <iostream>

#include <string.h>

#include <stdlib.h>

#include <Windows.h>

#include <locale>

using namespace std;

struct Bases

{

char name[15];

int kolvo;

char date[15];

void Input(Bases &bases); //Функция ввода данных в структуру

Bases *Next;//Адрес на следующий элемент

};

Bases *iHead;//Адрес на 1 элемент

Bases *iNext;//Адрес на текущий элемент

Bases *iCurr;//Адрес на следующий элемент

void Bases::Input(Bases &bases)//Функция-шаблон для заполнения

{

cout<<"Имя файла: ";cin.getline(name,15);

cout<<"Дата создания: ";cin.getline(date,15);

cout<<"Кол-во обращений: ";cin>>kolvo; cin.ignore();

cout<<" "<<endl;

}

Вхідні данні вводяться з клавіатури користувачем. У цьому допомагає функція Input, яка є оболонкою, та функція Add, яка виконує безпосередньо заповнення списку. Всі змінні заповнюються у форматі символьної строки за для уникнення помилок при введенні.

Приклад заповнення списку:

Опис вихідних даних

Вихідними даними служить виведення на екран повного списку, а також вигляд списку після видалення заданого елемента списку. При цьому вигляд містить імя, дату створення та кількість звернень до файлу у вигляді строки.

Для русифікації була використовувана бібліотека locale для всього документу та функція setlocale(LC_ALL, "Russian") для головної частини, щоб зробити меню російською мовою.

З допомогою cout здійснюється вивод на екран.

Приклад виведення на екран:

Приклад видалення фалу:

Приклад виведення на екран файлу з найбільшою кількістю звернень:

Листинг

void Add(Bases &bases)//фукция добавления

{

Bases *temp=new Bases;

temp->Next=iHead; //Указываем, что адрес следующего элемента это начало списка

strcpy_s(temp->name,bases.name);

strcpy_s(temp->date,bases.date);

temp->kolvo=bases.kolvo;

iHead=temp; //Смена адреса начала списка

}

void Delete(char *name)//Функция удаления

{Bases *idest=iHead;//указатель на элемент, который хотим удалить

if(!strcmp(idest->name,name)){

if(idest->Next==NULL){//если после указателя больше ничего нет, то удаляем его

delete(idest);

idest=NULL;

return;}

iCurr=iHead;}//если нет, то текущий элемент принимает адрес первого

for(;iCurr!=NULL;iCurr=iCurr->Next)

{if(strcmp(iCurr->Next ->name, name)==0)

{delete(iCurr);}

if(idest->Next==NULL)iCurr->Next=NULL; //если после текущего ничего нет

else iCurr->Next=idest->Next;//в противном случае идем дальше

if(idest->Next==NULL) iNext=iCurr;

delete(idest);

return;}return;}

int Name(char name[])//функция, возвращающая значения, если существует файл

{if (!iHead) return 0;//если не первый, возвращаем 0

iCurr=iHead;

for(;iCurr!=NULL; iCurr=iCurr->Next){

if (!strcmp(iCurr->name, name)) return 1;}return 0;}

void Show()//функция вывода на экран

{

Bases *temp=iHead; //Объявляем указатель и изначально он указывает на начало

while (temp!=NULL) //Пока по адресу на начало хоть что-то есть

{

cout<<temp->name<<" ";

cout<<temp->kolvo<<" ";

cout<<temp->date<<endl;

temp=temp->Next; //Указываем на следующий адрес из списка

}

}

void Max()//функция вывода на экран максимальных значений

{

Bases *temp=iHead; //Объявляем указатель и изначально он указывает на начало

while (temp->Next)

{ if (temp->kolvo>30 )

{cout<<temp->name<<" ";

cout<<temp->kolvo<<" ";

cout<<temp->date<<endl;

temp=temp->Next; //Указываем на следующий адрес из списка

}

}

}

int main ()

{setlocale(LC_ALL, "Russian");

Bases base;

int N;

int exit=5;

int choose=0;

char dest[10];

while (choose!=exit)

{cout<<" \n"

"Каталог файлов\n"

"Главное меню. Выберите пункт:\n"

" 1-заполнить список;\n"

" 2-удалить файл;\n"

" 3-Вывод на экран файла с самым большиим количеством обращений;\n"

" 4-Вывод списка на экран;\n"

" 5-Выход\n"

"Введите цифру:"; cin >> choose; cin.ignore();

system("cls");//очистка экрана

switch (choose)

{case 1:

cout<<"Введите количество файлов: ";cin>>N;

cin.ignore();

for (int i=0;i<N;i++)

{

base.Input(base);

Add(base);//Передаем в функцию заполнения

} break;

case 2:

cout<<"Введите дату создания файла, которй нужно удалить"<<endl;

cin>>dest;

if (Name(dest)!=0) {

Delete(dest);}else{ cout<<"Такого файла не существует!\n";}

break;

case 3:

Max(); break;

case 4:

Show(); break;

default: if (choose==exit)cout << "Неверный пункт меню! " << choose << endl;}}}