Базы данных для карманного персонального компьютера

Сортировка записей в текстовом файле

Показывать лекцию целиком

Задача темы: изучить методику и получить навыки в разработке функциональности приложений, использующих данные текстового файла для просмотра и сортировки по шаблону.

Разработка: Приложение "Сортировка списка" для просмотра и сортировки текстового списка по шаблону.

Состав выполняемых функций:

  • Файловые операции: открыть, сохранить, закрыть
  • Алгоритмы: преобразование вводимого текста в верхний регистр, до-бавление и сохранение записей в файле, удаление записей из загруженного списка, сортировка записей загруженного списка по шаблону
  • Информационно-справочные: нет
  • Наращивание функциональности не предусматривается.

    Защита данных предусматривается только от неквалифицированных действий пользователей.

    В качестве входных данных используется текстовой файл Список.txt. Выходные данные программы – графическое отображение результатов в листбоксах – для исходного и отсортированных списков, в форме для SmartDevice.

    Шаг 1. Разработка графического интерфейса

    Используется только одна форма Form1 с текстовым полем, кнопкой добавления записей в текстовой файл, кнопкой загрузки данных текстового файла в listBox1 и кнопкой сортировки и загрузки данных из listBox1 в listBox2. Примерный дизайн формы приведен на рис.5.1.

    (рис 5.1)

    Шаг 2. Расширяем состав системных библиотек

    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using System.Data;
    //добавляем библиотеку
    using System.IO;

    Шаг 3. Тестируем наличие файла Список.txt в public Form1()

    InitializeComponent(); // после этой строки вставляем:
    /* Тестируем наличие файла с данными о сотрудниках и создаем файл 
    для записи значений 
    */
    FileStream fin;
    try {
    fin=new FileStream("Список.txt",FileMode.OpenOrCreate);
    	fin.Close();
    	}
    catch(IOException exc)	{
    MessageBox.Show ("Невозможно открыть файл.","Ошибка");
    return;
    	}

    Шаг 4. Создаем процедуру ввода новых записей в файл

    Для кнопки "Добавить в список" пишем:

    private void button1_Click_1(object sender, System.EventArgs e)
    {// Проверяем пустое поле
    if (textBox1.Text!=" ")	{// если поле не пустое
    //Автоматически переводим текст в верхний регистр
    string s=textBox1.Text.Trim().ToUpper()+"\r\n";
    // открываем файл для записи
    StreamWriter fin_out;
    try	{
    fin_out=new StreamWriter("Список.txt", true);
    	}
    catch(IOException exc)	{
    MessageBox.Show ("Невозможно открыть файл.","Ошибка");
    return;}
    fin_out.Write(s); // записываем в файл новую строку
    fin_out.Close();
    MessageBox.Show(s,"Запись добавлена");
    textBox1.Text=" "; // обнуляем текстовое поле
    }
    else	{
    MessageBox.Show("Введите текст!","Ошибка");
    return;}
    }

    Шаг 5. Создаем процедуру загрузки данных

    Для кнопки "Загрузить" пишем:

    private void button3_Click(object sender, System.EventArgs e) {
    FileStream fin;
    try	{
    fin=new FileStream("Список.txt",FileMode.Open);
    	}
    catch(IOException exc)	{
    MessageBox.Show ("Невозможно открыть файл.","Ошибка");
    return;}
    // Считываем значения из файла
    string s;
    StreamReader fstr_in=new StreamReader(fin);
    while((s=fstr_in.ReadLine())!=null)	{
    listBox1.Items.Add(s.Trim().ToUpper());
    	}
    fstr_in.Close();
    }

    Шаг 6. Создаем процедуру удаления записей из listBox1

    Для удаления записи из листбокса щелчком мыши пишем:

    private void listBox1_SelectedIndexChanged
      (object sender, System.EventArgs e)
    {// если листбокс не пустой
    if (listBox1.SelectedItem != null) // удаляем запись 
    listBox1.Items.Remove(listBox1.SelectedItem.ToString());
    }

    Шаг 7. Создаем процедуру сортировки по шаблону

    Для кнопки "Сортировать" пишем:

    private void button2_Click(object sender, System.EventArgs e) {
    listBox2.Items.Clear(); // чистим листбокс 2
    if (listBox1.Items.Count!=0)	
      {/* если число сторк в листбокс 1 не равно 0, 
     создаем константу шаблона сортировки. Кстати, константу можно 
      создать и в другом месте программы.
    */
    const string s_alfa="АБВГДЕЖЗИКЛМНОПРСТУФХЦШЩЭЮЯ";
    // вычисляем длину выбранной строки из алфавита
    for (int it=0;it<s_alfa.Length; it++)	{
    string	s_sym=s_alfa.Substring(it,1);
    string s_name=s_sym;	
    // Вложенный цикл поиска повторений do-while
    do { // вложенный цикл просмотра списка листбокса
    	for(int i=0; i<listBox1.Items.Count;i++)
    // сравниваем значения алфавита и листбокса
    	{s_name=listBox1.Items[i].ToString().Substring(0,1);
    	if (s_sym==s_name) {
    		int i_row=i;
    		if (i_row<=listBox1.Items.Count)	{
    		string s_new=listBox1.Items[i_row].ToString();
    		listBox2.Items.Add(s_new);
    		listBox1.Items.Remove(listBox1.Items[i_row].ToString());}
    		}
    	}
    }
    while (s_sym==s_name  listBox1.Items.Count!=0);
    	}
    }
    	else	{// если листбокс1 пустой, то	
    MessageBox.Show("Введите текст!","Ошибка");
    	return;}
    }
    Вернуться к учебному плану