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

Задача 51. Очистка диска

Программа Очистка диска (рис. 61) удаляет ненужные, созданные в процессе компиляции проектов C++Builder, файлы obj, tds, и резервные копии (~bpr, ~dfm, ~h, ~cpp) из указанного пользователем каталога и всех его подкаталогов. Для выбора каталога (папки) используется стандартное окно Обзор папок .

Рис 61

Вывод: В этом задании мы создали программу которая удаляет ненужные, созданные в процессе компиляции проектов C++Builder, файлы obj, tds, и резервные копии (~bpr, ~dfm, ~h, ~cpp) из указанного пользователем каталога.

Листинг

voidfastcallTMainForm::ButtonlClick(TObject *Sender) { if ( SelectDirectory("Выберите каталог","", aDirectory)) { // диалог Выбор файла завершен щелчком на ОК Label3->Caption = aDirectory; Button2->Enabled = true; // теперь кнопка Выполнить // доступна

// удаляет ненужные файлы из текущего каталога и его // подкаталогов void fastcall Clear(void)

TSearchRec SearchRec; // информация о файле или каталоге

cDir = GetCurrentDir()+"\\";

if ( FindFirst("*.*", faArchive,SearchRec) в 0) do { // проверим расширение файла int p = SearchRec.Name.Pos("."); FileExt = SearchRec.Name.Substring(p+1,MAX_PATH); if ( ( FileExt[1] =='-') || ( FileExt == "obj" ) || ( FileExt == "tds" )

)

{

MainForm->Memol-> Lines->Add(cDir+SearchRec.Name); DeleteFile(SearchRec.Name);

258 Часть 1. Примеры и задачи

while ( FindNext(SearchRec) == 0);

// обработкаподкаталоговтекущегокаталога if ( FindFirst("*", faDirectory, SearchRec) == 0) do if ((SearchRec.Attr & faDirectory) == SearchRec.Attr )

// каталоги и тоже каталоги, // но в них входить не надо!!! if (( SearchRec.Name != "." ) && ( SearchRec.Name != ".." ))

// войти в подкаталог ChDir (SearchRec. Name) ; // очистить каталог Clear(); // выйти из каталога ChDir("..");

while ( FindNext(SearchRec) ==0 );

// щелчокнакнопкеВыполнить void fastcall TMainForm::Button2Click(TObject *Sender)

{

Memol->Clear(); // очистить поле Memol ChDir(aDirectory); // войти в каталог, который выбрал // пользователь

Clear(); // очистить текущий каталог и его // подкаталоги

Игры и другие полезные программы 259

Memol->Lines->Add(""); if (n) Memol->Lines->Add("Удалено файлов: " + IntToStr(n)); else Memol->Lines->Add("В указанном каталоге нет файлов, " "которые надо удалить.");

Задача 52.Печать

Программа Счет (рис. 62), позволяет распечатать (вывести на принтер) счет.

Рис 62

Вывод: При выполнении этой задачи мы научились создавать программу, которая при нажатии на кнопку Печать выводит данные из таблицы.

Листинг:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

StringGrid1->Options<<goEditing<<goTabs ;

StringGrid1->Cells[0][0] ="";

StringGrid1->Cells[1][0] = "Наименование";

StringGrid1->Cells[2][0] = "Цена";

StringGrid1->Cells[3][0] = "Кол-во";

StringGrid1->Cells[4][0] = "Сумма";

StringGrid1->ColWidths[0] = 30;

StringGrid1->ColWidths[1] = 250;

StringGrid1->ColWidths[2] = 80;

StringGrid1->ColWidths[3] = 50;

StringGrid1->ColWidths[4] = 80;

for ( int i = 1; i < 11; i++)

if (i < 10)

StringGrid1->Cells[0][i] = " " + IntToStr(i);

else

StringGrid1->Cells[0][i] = IntToStr(i);

int w = 0;

for (int i = 0;

i < StringGrid1->ColCount; i++)

w += StringGrid1->ColWidths[i];

StringGrid1->Width = w + StringGrid1->ColCount + 1 ;

StringGrid1->Height =

StringGrid1->DefaultRowHeight * StringGrid1->RowCount + StringGrid1->RowCount + 1;

#include "Printers.hpp"

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

TPrinter *Prn;

#define LEFT_MARGIN 2

#define TOP_MARGIN 2

float dpiX, dpiY;

float kx, ky;

int p[5];

int x1,y1,x2,y2;

int px, py;

int i, j;

Prn = Printer ();

dpiX = GetDeviceCaps(Prn->Handle,LOGPIXELSX);

dpiY = GetDeviceCaps(Prn->Handle,LOGPIXELSY);

kx = dpiX / Screen->PixelsPerInch;

ky = dpiY / Screen->PixelsPerInch;

px = LEFT_MARGIN / 2.54 * dpiX;

py = TOP_MARGIN / 2.54 * dpiY;

p[0] = px;

for (i = 1; i < 5; i++ )

p[i] = p[i-1] + StringGrid1->ColWidths[i-1]* kx + i;

Prn->BeginDoc();

Prn->Canvas->Font->Name = Label1->Font->Name;

Prn->Canvas->Font->Size = Label1->Font->Size;

Prn->Canvas->TextOut(px,py,Label1->Caption);

py = py + Label1->Font->Size * 2 * ky;

x1 = px;

y1 = py;

Prn->Canvas->Font->Name = StringGrid1->Font->Name;

Prn->Canvas->Font->Size = StringGrid1->Font->Size;

x2 = p[4] + StringGrid1->ColWidths[4]* kx;

y2 = py + StringGrid1->RowCount *

StringGrid1->RowHeights[1] * ky;

for ( j = 0; j < StringGrid1->RowCount; j++)

{

// строкитаблицы

for (i = 0 ; i < StringGrid1->ColCount; i++)

Prn->Canvas->TextOut(p[i],py,

StringGrid1->Cells[i][j]);

// горлиния

Prn->Canvas->MoveTo(p[0],py);

Prn->Canvas->LineTo(x2,py);

}

py = py+ StringGrid1->RowHeights[j]* ky;

// вертикальныелинии

for ( i = 0; i < StringGrid1->ColCount; i++ )

{

Prn->Canvas->MoveTo(p[i],y1);

Prn->Canvas->LineTo(p[i],y2);

}

// праваяграница

Prn->Canvas->MoveTo(x2,y1);

Prn->Canvas->LineTo(x2,y2);

// нижняяграница

Prn->Canvas->MoveTo(x1,y2);

Prn->Canvas->LineTo(x2,y2);

py = y2 + 0.5 / 2.54 * dpiY; // здесь 1 - это 1 см.

Prn->Canvas->TextOut(p[3],py,Label2->Caption);

Prn->EndDoc(); // закрытаяпечать

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

float summ;

summ = 0;

for ( int i = 1; i < 11; i++)

{

// если ячейка Сумма пустая, то привыполнении

// функции StrToFloat возникает ошибка (исключение)

try

{

summ += StrToFloat(StringGrid1->Cells[4][i]);

}

catch (Exception &e)

{ }

}

Label2->Caption = "всего: " + FloatToStr(summ) + " руб.";

}