close

Вход

Забыли?

вход по аккаунту

?

отчет лаб2

код для вставкиСкачать
 МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ, МОЛОДЕЖИ И СПОРТА УКРАИНЫ
ВОСТОЧНОУКРАИНСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ
ИМ. В. ДАЛЯ
Лабораторная работа №2
"Новые информационные технологии"
Выполнил: Студентка Беликова Ю.П.
Группа KT-792
Проверил: Балалаечников А.В. Луганск 2013
Вариант№2
Тема: Изучение классов и типов пространства имен SYSTEM.IO для
работы с папками и файлами.
Выполнение:
Создала новый проект для изучения классов и типов пространства System.IO. Исходная форма содержит:
- ToolStripContainer.
- ToolStrip, который содержит ToolStripButton (свойство Text = Загрузить,
свойство Name = toolSBLoadInfo).
- GroupBox. Свойство Text = "Список данных:". Свойство Dock = Fill.
- ListBox. Свойство Dock = Fill.
- Заголовок формы содержит надпись "Изучение System.IO".
Добавила в приложение возможность получения информации о текущем каталоге приложения. Информация о текущем каталоге может быть получена двумя способами (с помощью Directory и DirectoryInfo). Текущий каталог - тот, из которого запускается приложение. Для добавления в ListBox строки с информацией о текущем каталоге с помощью Directory выполните действия:
- Сгенерировала обработчик события кнопки "Загрузить".
- Ввела код как обработки кнопки.
Если нажать кнопку "Загрузить" несколько раз, то каждый раз будет добавлена одна и та же информация. Добавила код предварительной очистки списка и строку Использование System.IO.Directory
private void toolSBLoadInfo_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.Add("Использование System.IO.Directory");
listBox1.Items.Add(System.IO.Directory.GetCurrentDirectory());
}
Добавила строки для получения данных о дате создания и родительском каталоге:
listBox1.Items.Add(System.IO.Directory.GetCreationTime("."));
listBox1.Items.Add(System.IO.Directory.GetParent("."));
Второй способ получения информации - использование DirectoryInfo. Этот класс предоставляет методы экземпляра класса для создания, перемещения и перечисления в каталогах и подкаталогах. Метод DirectoryInfo рекомендуется использовать, если необходимо использовать объект неоднократно. Модифицировала имеющийся код для получения данных об имени текущего каталога с помощью DirectoryInfo:
listBox1.Items.Add("Использование System.IO.DirectoryInfo");
System.IO.DirectoryInfo d_inf = new
System.IO.DirectoryInfo(".");
listBox1.Items.Add(d_inf.Name);
Добавила код для получения информации о дате создания и родительском каталоге с помощью свойств d_inf. listBox1.Items.Add(d_inf.Parent);
listBox1.Items.Add(d_inf.CreationTime);
При написании кодов нужно придерживаться правила: "Ничего не пишем дважды". Если вы замечаете, что вынуждены повторно писать один и тот же код, то это означает, что необходимо вынести этот код в отдельную процедуру или функцию. В C# процедуры и функции являются методами. Метод представляет собой блок кода, содержащий набор инструкций.
Объявляя метод, вы задаете ему имя, передаваемые параметры, возвращаемый тип, уровень доступа public или private. Объявите метод createDirLog() для создания каталога.
Для начала метод будет выводить на экран сообщение о том, что он был вызван:
private void createDirLog()
{
MessageBox.Show("Вызов метода CreateDirLog()", "Сообщение");
}
Созданный метод доступен только в коде класса, в котором он объявлен, на что указывает private. Метод не возвращает значений - типом возвращаемого параметра является void.
При вызове метода параметры не передаются, поэтому скобки пустые - CreateDirLog().
Разместила вызов метода в конструкторе класса после InitializeComponent();
public Form1()
{
InitializeComponent();
createDirLog();
}
Создала перегруженный метод CreateDirLog, который принимает в качестве параметра строку сообщения. Добавила код перегруженного метода после существующего CreateDirLog:
private void createDirLog(string message)
{
MessageBox.Show(message, "Сообщение");
}
Добавила вызов перегруженного метода:
public Form1()
{
InitializeComponent();
createDirLog();
createDirLog("Вызов перегруженного метода");
}
При разработке программ часто возникает необходимость создания каталогов для служебных целей. Например, каталог для ведения журналов событий или журналов регистрации сбоев и ошибок. В ходе эксплуатации служебный каталог может бать умышленно или случайно удален, переименован или удален. Поэтому, перед созданием нового каталога или перед использованием уже имеющегося каталога, выполняют проверку на наличие каталога с таким же именем. Добавила такую проверку и создание каталога Log в коде createDirLog:
private void createDirLog()
{
MessageBox.Show("Вызов метода CreateDirLog()", "Сообщение");
string dir_patch = System.IO.Directory.GetCurrentDirectory();
if (!System.IO.Directory.Exists(dir_patch + "\\Log"))
{
System.IO.Directory.CreateDirectory(dir_patch + "\\Log");
}
}
Выполнилазапуск приложения. Проверила наличие созданной папки, удалила ее и вновь запустила приложение - папка должна снова появиться. Это связано с тем, что вызов процедуры createDirLog() выполняется в конструкторе формы при запуске приложения.
Для сокращения кода выполнила подключение пространства System.IO. Перешла в начало кода программы и добавила строку для подключения:
using System.IO;
Теперь код программы может быть короче:
private void createDirLog()
{
MessageBox.Show("Вызов метода CreateDirLog()", "Сообщение");
string dir_patch = Directory.GetCurrentDirectory();
if (!Directory.Exists(dir_patch + "\\Log"))
{
Directory.CreateDirectory(dir_patch + "\\Log");
}
}
Выполнила создание файла в каталоге Log с помощью отдельной процедуры. Предварительно выполняем проверку отсутствия файла с таким именем, иначе будет сообщение об ошибке. Код процедуры:
private void createFile()
{
if (!File.Exists(Directory.GetCurrentDirectory() + "\\Log\\empty.log"))
{
File.Create(Directory.GetCurrentDirectory() + "\\Log\\empty.log");
}
}
Выполнила вызов процедуры после InitializeComponent():
public Form1()
{
InitializeComponent();
createDirLog();
createDirLog("Вызов перегруженного метода");
createFile();
}
Запустила приложение. Убедилась в наличии файла - перешла в каталог приложения, затем в каталог Log,внутри которого должен появиться файл empty.log.
private void writeLogFile(string action_user)
{
string file_path = Directory.GetCurrentDirectory() + "\\Log\\empty.log";
FileStream fs = new FileStream(file_path, FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now.ToLocalTime() + "-" + action_user);
sw.Close();
}
Выполнила вызов writeLogFile после InitializeComponent()
public Form1()
{
InitializeComponent();
createDirLog();
createDirLog("Вызов перегруженного метода");
createFile();
writeLogFile("Конструктор формы");
}
Выполнила вызов writeLogFile в обработчике события нажатия на кнопке "Загрузить":
writeLogFile("toolSBLoadInfo_Click");
Выполнила вызов writeLogFile в методах createDirLog:
writeLogFile("CreateDirLog()");
private void createDirLog(string message)
{
MessageBox.Show(message, "Сообщение");
writeLogFile("createDirLog c параметром");
}
Выполнила вызов writeLogFile в createFile:
private void createFile()
{
if (!File.Exists(Directory.GetCurrentDirectory() + "\\Log\\empty.log"))
{
File.Create(Directory.GetCurrentDirectory() + "\\Log\\empty.log");
}
writeLogFile("createFile");
}
Выполнила запуск приложения, нажала кнопку "Загрузить" несколько раз. Закрыла приложение. Перешла к текущему каталогу приложения, в папке Log должен появиться файл file.log, который содержит информацию о действиях пользователя. Средствами блокнота просмотрела содержимое файла.
Добавила метод для записи даннях в файл:
private void writeLogFile(string action_user)
{
string file_path = Directory.GetCurrentDirectory() + "\\Log\\empty.log";
FileStream fs = new FileStream(file_path, FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now.ToLocalTime() + "-" + action_user);
sw.Close();
}
Добавила метод readLog для чтения данных файла:
private void readLog()
{
string file_path = Directory.GetCurrentDirectory() + "\\Log\\file.log";
string input;
if (File.Exists(file_path))
{
StreamReader sr = new StreamReader(file_path);
while ((input = sr.ReadLine()) != null)
{
listBox1.Items.Add(input);
}
sr.Close();
}
writeLogFile("readLog");
}
Добавила вызов метода readLog в обработчик кнопки:
Добавила кнопку для удаления папки и файла из приложения.
private void toolStripButton2_Click(object sender, EventArgs e)
{
string file_path = Directory.GetCurrentDirectory() + "\\Log";
string[] allfiles = Directory.GetFiles(file_path);
foreach (string fileName in allfiles)
File.Delete(fileName);
Directory.Delete(file_path);
}
Добавила кнопку для очистки file.log. private void toolStripButton1_Click(object sender, EventArgs e)
{
string file_path = Directory.GetCurrentDirectory() + "\\Log\\file.log";
FileStream fs = new FileStream(file_path, FileMode.Create,
FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now.ToLocalTime() + " - " + "Clear file.log");
sw.Close();
}
Задание к лабораторной работе №2
Добавьте процедуру протоколирования в приложение, разработанное в лабораторной работе №1.
1. Журнал событий должен протоколировать все события приложения и содержать следующие параметры событий:
· Дата записи в журнал;
· Текущие входные данные в зависимости от варианта: только дата для расчета, дата и ФИО и т.д.;
· Текущее событие (выбор типа расчета, переключение режима, очистка даты и т.д.);
· Текущий режим отображения;
· Результаты расчета (если расчеты производятся на этом этапе).
2. Перед записью необходимо выполнять проверку на наличие файла на диске.
3. Организуйте чтение файла журнала в приложении.
4. Осуществите предотвращение либо перехват исключительных событий для обеспечения отказоустойчивости приложения.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace labor1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
writeLogFile("Запуск приложения");
writeLogFile("Выбран первый внешний вид приложения");
createDirLog(); }
private void createDirLog()
{
string dir_patch = Directory.GetCurrentDirectory();
if (!Directory.Exists(dir_patch + "\\Log"))
{
Directory.CreateDirectory(dir_patch + "\\Log");
}
writeLogFile("Проверили наличие/создали каталог для журнала");
}
private void writeLogFile(string action_user)
{
string file_path = Directory.GetCurrentDirectory() + "\\Log\\file.log";
FileStream fs = new FileStream(file_path, FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now.ToLocalTime() + "-" + action_user);
sw.Close();
}
private void readLog()
{
string file_path = Directory.GetCurrentDirectory() + "\\Log\\file.log";
string input;
if (File.Exists(file_path))
{
StreamReader sr = new StreamReader(file_path);
listBox2.Items.Clear();
while ((input = sr.ReadLine()) != null)
{
listBox2.Items.Add(input);
}
sr.Close();
}
writeLogFile("Журнал Прочтен");
}
private void tsmiCalculate_Click(object sender, EventArgs e)
{
try
{
listBox1.Items.Clear();
// объявляем переменную и заносим значение
DateTime BirthDate = DateTime.Parse(maskedTextBox1.Text);
writeLogFile("Введена дата " + maskedTextBox1.Text);
// объявляем переменную и получаем результат
TimeSpan interval = DateTime.Today - BirthDate;
// формируем строку вывода
string tmp = "Дата рождения: " + BirthDate.ToShortDateString().ToString() + " / ";
// количество лет
if (rbYears.Checked)
{
listBox1.Items.Add(tmp + "Кол-во полных лет " + (interval.Days / 365).ToString());
writeLogFile("Выбран расчет лет");
resultToJournal();
return;
}
if (rbMonth.Checked)
{
listBox1.Items.Add(tmp + "Кол-во месяцев " + (interval.Days / 30).ToString());
writeLogFile("Выбран расчет месяцев");
resultToJournal();
return;
}
if (rbDay.Checked)
{
listBox1.Items.Add(tmp + "Кол-во дней " + interval.Days.ToString());
writeLogFile("Выбран расчет дней");
resultToJournal();
return;
}
// количество часов
if (rbClock.Checked)
{
listBox1.Items.Add(tmp + "Количество полных часов: " + (interval.TotalHours).ToString());
writeLogFile("Выбран расчет часов");
resultToJournal();
return;
}
// количество минут
if (rbMinutes.Checked)
{
listBox1.Items.Add(tmp + "Количество полных минут: " + (interval.TotalMinutes).ToString());
writeLogFile("Выбран расчет минут");
resultToJournal();
return;
}
// количество секунд
if (rbSecond.Checked)
{
listBox1.Items.Add(tmp + "Количество полных секунд: " + (interval.TotalSeconds).ToString());
writeLogFile("Выбран расчет секунд");
resultToJournal();
return;
}
MessageBox.Show("Выберите необходимую единицу измерения");
writeLogFile("Не была выбрана единица измерения");
}
catch (FormatException fexp)
{
//если ничего не выбрано - предупреждаем пользователя
MessageBox.Show("Введите правильную дату");
writeLogFile("Введенная дата не верна");
}
}
private void clearDate_Click(object sender, EventArgs e)
{
maskedTextBox1.Clear();
writeLogFile("Очищена дата");
}
private void clearRez_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
writeLogFile("Очищен результат");
}
private void AboutProg_Click(object sender, EventArgs e)
{
MessageBox.Show("Программа расчета прожитого времени в различных единицах измерения",
"О программе",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
writeLogFile("Выбрано меню О Программе");
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
writeLogFile("Выбран второй внешний вид приложения");
myGb.Visible = true;
gbСalculate.Visible = false;
gbRez.Visible = false;
toolStrip1.Visible = false;
}
else {
writeLogFile("Выбран первый внешний вид приложения");
myGb.Visible = false;
toolStrip1.Visible = true;
gbRez.Visible = true;
gbСalculate.Visible = true; } }
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
switch (comboBox1.SelectedIndex)
{
case 0:
// объявляем переменную и заносим значение
DateTime BirthDate = DateTime.Parse(maskedTextBox1.Text);
// объявляем переменную и получаем результат
TimeSpan interval = DateTime.Today - BirthDate;
// формируем строку вывода
string tmp = "Дата рождения: " + BirthDate.ToShortDateString().ToString() + " / ";
// количество лет
if (comboBox2.SelectedIndex == 0)
{
textBox1.Text = tmp + "Кол-во полных лет " + (interval.Days / 365).ToString();
writeLogFile("Выбран расчет лет");
writeLogFile("Результат " + textBox1.Text);
}
else if (comboBox2.SelectedIndex == 1)
{
textBox1.Text = tmp + "Кол-во месяцев " + (interval.Days / 30).ToString();
writeLogFile("Выбран расчет месяцев");
writeLogFile("Результат " + textBox1.Text); }
else if (comboBox2.SelectedIndex == 2)
{
textBox1.Text = tmp + "Кол-во дней " + interval.Days.ToString();
writeLogFile("Выбран расчет дней");
writeLogFile("Результат " + textBox1.Text);
}
else if (comboBox2.SelectedIndex == 3)
{
textBox1.Text = tmp + "Количество полных часов: " + (interval.TotalHours).ToString();
writeLogFile("Выбран расчет часов");
writeLogFile("Результат " + textBox1.Text);
}
else if (comboBox2.SelectedIndex == 4)
{
textBox1.Text = tmp + "Количество полных минут: " + (interval.TotalMinutes).ToString();
writeLogFile("Выбран расчет минут");
writeLogFile("Результат " + textBox1.Text);
}
else if (comboBox2.SelectedIndex == 5)
{
textBox1.Text = tmp + "Количество полных секунд: " + (interval.TotalSeconds).ToString();
writeLogFile("Выбран расчет секунд");
writeLogFile("Результат " + textBox1.Text);
}
else
MessageBox.Show("Выберите единицу рассчета! ",
"Произошла ошибка",
MessageBoxButtons.OKCancel);
writeLogFile("Не выбрана единица расчета");
break;
case 1: maskedTextBox1.Clear();
writeLogFile("Очищена дата");
break;
case 2: textBox1.Text = "";
writeLogFile("Очищен результат");
break;
}
}
catch (FormatException f)
{
MessageBox.Show("Введите дату! ",
"Произошла ошибка",
MessageBoxButtons.OKCancel);
writeLogFile("Не верно введена дата");
}
}
private void resultToJournal()
{
string s = listBox1.Items[listBox1.Items.Count - 1].ToString();
writeLogFile("Результаты расчета " + s);
}
//показать журнал
private void button1_Click(object sender, EventArgs e)
{
readLog(); }
}
}
Документ
Категория
Рефераты
Просмотров
79
Размер файла
375 Кб
Теги
лаб2, отчет
1/--страниц
Пожаловаться на содержимое документа