Проекты

Проект Телефонные переговоры

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

Формат записей телефонной станции (ats.txt) - дата, время, продолжительность, номер исходящего телефона, номер вызываемого телефона, код звонка.

Формат записей конторы (office.txt) - дата, время, продолжительность, номер телефона.

Обратите внимание, что по крайней мере первые пять записей телефонных переговоров совпадают. Есть небольшие различия в дате приема телефонного переговора и продолжительности. Например, разница во времени первой записи составляет 40 секунд, а во второй записи разница составляет 40 секунд и разница в продолжительности разговора составляет 1 секунду. Эти телефонные переговоры считаются идентичными и нас не интересуют. Наша задача - найти "лишние" телефонные переговоры как со стороны телефонной станции, так и со стороны конторы.

Задача решается на языке C# (Visual Studio 2008).

Проект, которые служат учебным материалом для этой задачи можно скачать здесь - учебный файл.

Первый шаг

Итак, поступило несколько предложений для разработки проекта. Во-первых, нужно создать какой-то графический интерфейс программы. Создаем новый проект, далее на форму кладем две кнопки и два списка. С помощью кнопок мы будем загружать наши текстовые файлы и выводить их в списках ListBox. Таким образом, нам нужно написать код для кнопок. Кроме того, нужно как-то совместить два разных стандарта записей в текстовых файлах к общему знаменателю. Попытаемся узнать, по какому принципу идет формирование новой записи.

У файла ats.txt сначала идут 11 строк служебной информации. Далее 19 символов отводится на дату и время. 11 символов на продолжительность звонка (цифры дополняются пробелами слева). 8 символов на номер абонента (пробел и 7-значный номер телефона). Далее идут 14 пробелов. Потом 48 символов отводится для Абонента Б (11-значный номер+пробелы). Далее один символ отводится под код звонка.

У файла конторы 21 символ отводится на дату (19 символов даты + 2 пробела). На продолжительность отводится 8 символов (2-3 символа + пробелы). Номер звонка занимает 18 символов (10, 11, 12 цифр + пробелы). Общая длина строки 47 символов.

Наша задача на будущее - перевести формат АТС в формат конторы, чтобы было удобно сравнивать два списка.

Второй шаг

Необходим какой-то интерфейс для загрузки файла в список. Воспользуемся элементом OpenFileDialog и напишем процедуру для открытия файла.

// Процедура для выбора файла и загрузки его содержимого в список
private void OpenPhoneTextFile()
{
    oFileDiag.DefaultExt = "txt";
    oFileDiag.Filter = "Текстовые файлы (*.txt)|*.txt";
    DialogResult result = oFileDiag.ShowDialog();
    if (result == DialogResult.OK)

    // Открываем файл, копируем содержимое в список,
    {
        this.Text = oFileDiag.FileName; //  и так далее
    }      
}

Теперь нам необходимо загрузить сам файл в список.

// Загружаем файл АТС в список
private void butLoadFileAts_Click(object sender, EventArgs e)
{
    listAts.Items.Clear();                  // очистим список

    string fileName = OpenPhoneTextFile();  // полное имя файла   
    int index = 11;                         //номер строки, с которой начинать

    // Если выбран файл, то загружаем его в список
    if (fileName != "")
    {
        string[] allLines = System.IO.File.ReadAllLines(fileName);

        for (int i = index; i < allLines.Length; i++)            
        {                
            listAts.Items.Add(allLines[i]);
        }
    }
 }
Это задание для следующего шага.

Скачать учебный файл

Жду ваших предложений.

Реклама