Российская международная академия туризма
Опубликован: 09.09.2008 | Доступ: свободный | Студентов: 811 / 38 | Оценка: 4.33 / 4.33 | Длительность: 13:07:00
Лекция 3:

Текстовой формат данных для Smartdevice. Ввод-вывод в текстовые файлы

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Шаг 11. Функция проверки цифровых полей

Для того, чтобы наш калькулятор вычислял цену автомобиля необходимо чтобы пользователь вводил цифры в соответствующие поля. В противном случае программа будет прерываться, генерируя соответствующее исключение. Для проверки правильности ввода и корректировки ошибок создадим функцию Accountest()

private void Accountest()	
{// проверяем цену продавца
if (!char.IsDigit(textBox4.Text[0])) {
textBox4.Text = "0"; // корректируем ошибки ввода – вводим в поля нули
MessageBox.Show("Введите цену владельца!","Ошибка");
return;
	}
base_acc=int.Parse(textBox4.Text);
// проверяем цифры для каждого each	
foreach (Control NT in this.tabPage2.Controls)		
if (NT is TextBox)	{
	if (!char.IsDigit(NT.Text.Trim()[0]))	{
	NT.Text = "0"; // корректируем ошибки ввода – вводим в поля нули
		}
	}		
}

Шаг 12. Процедуры пересчета цены

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

private void checkBox1_CheckStateChanged_1
  (object sender, System.EventArgs e)
{
Accountest(); // вызваем функцию проверки правильности ввода 
// считываем в переменную предыдущее значение цены комплектации
appe_acc=int.Parse(textBox5.Text);
if (this.checkBox1.Checked = = false){comp_acc=comp_acc-appe_acc ;}
else {comp_acc=comp_acc+appe_acc ;}
this.textBox13.Text=comp_acc.ToString();
this.textBox14.Text=(base_acc-comp_acc).ToString();
}

Для второго флажка меняется только строчка:

if (this.checkBox2.Checked = = false){comp_acc=comp_acc-appe_acc ;}

и так далее, до восьмого флажка включительно.

Шаг 13. Защита данных базовой комплектации

Файл price.txt в программе создается по умолчанию и содержит данные базовой комплектации для всех других вариантов файлов. Чтобы каждый раз не создавать данные в случае неквалифицированных или случайных действий пользователей, следует ограничить доступ к данным файла. Для этого всем полям на закладке "Комплектация" (Усилитель руля, Кондиционер, Тонированные стекла, Дисковые тормоза, Сигнализация, Фаркоп, Противотуманные фары, Диски легкосплавные) изначально устанавливается свойство ReadOnly=True. На закладке "Владелец" такое же свойство устанавливается для полей "Комплектация" и "Базовая цена", так как поля являются вычисляемыми и пользователю нет необходимости в доступе к этим полям.

Доступ для редактирования полей закладки "Комплектация" открывается опцией главного меню "Редактор цен", для которой создается процедура:

private void menuItem2_Click_1(object sender, System.EventArgs e)
{// блокируем флажки
this.checkBox1.Checked=false;
this.checkBox2.Checked=false;
this.checkBox3.Checked=false;
this.checkBox4.Checked=false;
this.checkBox5.Checked=false;
this.checkBox6.Checked=false;
this.checkBox7.Checked=false;
this.checkBox8.Checked=false;
// прячем флажки
this.checkBox1.Visible=false;
this.checkBox2.Visible=false;
this.checkBox3.Visible=false;
this.checkBox4.Visible=false;
this.checkBox5.Visible=false;
this.checkBox6.Visible=false;
this.checkBox7.Visible=false;
this.checkBox8.Visible=false;
// обнуляем комплектацию
comp_acc=0;
this.textBox13.Text=comp_acc.ToString();
this.textBox14.Text=(base_acc-comp_acc).ToString();
// показываем кнопку редактора
this.button1.Visible=true;
//отклываем текстовые поля для редактирования
this.textBox12.ReadOnly=false;
this.textBox11.ReadOnly=false;
this.textBox10.ReadOnly=false;
this.textBox9.ReadOnly=false;
this.textBox8.ReadOnly=false;
this.textBox7.ReadOnly=false;
this.textBox6.ReadOnly=false;
this.textBox5.ReadOnly=false;
}

После того, как данные на закладке "Комплектация" отдедактированы, закрываем к ним доступ кнопкой "ОК":

private void button1_Click_1(object sender, System.EventArgs e)
{// делаем кнопку "ОК" невидимой
this.button1.Visible=false;
// поля - недоступными
this.textBox12.ReadOnly=true;
this.textBox11.ReadOnly=true;
this.textBox10.ReadOnly=true;
this.textBox9.ReadOnly=true;
this.textBox8.ReadOnly=true;
this.textBox7.ReadOnly=true;
this.textBox6.ReadOnly=true;
this.textBox5.ReadOnly=true;
// флажки - показываем
this.checkBox1.Visible=true;
this.checkBox2.Visible=true;
this.checkBox3.Visible=true;
this.checkBox4.Visible=true;
this.checkBox5.Visible=true;
this.checkBox6.Visible=true;
this.checkBox7.Visible=true;
this.checkBox8.Visible=true;
}

Шаг 14. Диалог сохранения файла

Вариантов цен и комплектаций может быть много, поэтому каждый вариант храним в отдельном файле. Для этого пишем процедуру опции "Сохранить как" ( menuItem5_Click ).

private void menuItem5_Click(object sender, System.EventArgs e)
{// в качестве имени файла используем значение поля
file_name=this.textBox1.Text; 
saveFileDialog1.FileName=file_name;
if (saveFileDialog1.ShowDialog()==DialogResult.OK) {
file_name=saveFileDialog1.FileName;
FileStream fin_out;		
try	{
	fin_out=new FileStream(file_name,FileMode.OpenOrCreate);
	fin_out.Close();
	}
catch(IOException exc)	{
	MessageBox.Show ("Невозможно открыть файл.","Ошибка");
	return;
}
file_write(); // загружаем функцию записи данных в файл
	}
}

Шаг 15. Диалог открытия файла

По умолчанию всегда загружаются данные из файла price.txt – чтобы загрузить данные конкретной комплектации из другого файла создаем процедуру опции главного меню "Открыть" ( menuItem3_Click )

private void menuItem3_Click(object sender, System.EventArgs e){
if (openFileDialog1.ShowDialog()==DialogResult.OK) {
	file_name=openFileDialog1.FileName;
	file_read(); // загружаем функцию чтения данных из файла
	}
}

Шаг 16. Закрываем приложение

Одна из особенностей операционной системы для SmartDevice в том, что привычная кнопка закрытия приложения не удаляет программу из оперативной памяти. По сути приложение только сворачивается и делается не видимым. Чтобы освободить память пишем процедуру для опции главного меню "Выход" ( menuItem7_Click )

private void menuItem7_Click(object sender, System.EventArgs e) {
Application.Exit(); 
}

Теперь можно установить свойство для формы Form1 ControlBox=False – выход из программы будет осуществляться использованием опции "Выход"

Шаг 17. Авторские права

Хорошим тоном является авторизация разработки – общественность должна знать своих героев. Пишем процедуру для опции "О программе":

private void menuItem6_Click(object sender, System.EventArgs e){
MessageBox.Show("Калькулятор цены автомобиля \n (C)2006, 
\n Родигин Л.А.\n Задача: сохранить значения цен комплектующих в файле 
\n и подсчитать сумму выбранных значений из калькуляции.","Help");
}
< Лекция 2 || Лекция 3: 123 || Лекция 4 >