82183

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

Курсовая

Информатика, кибернетика и программирование

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

Русский

2015-02-26

374.5 KB

3 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ  ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ «МИСиС»

ИНСТИТУТ_______________ИТАСУ_______________________________________

КАФЕДРА_________ИНЖЕНЕРНОЙ    КИБЕРНЕТИКИ______________________________ 

НАПРАВЛЕНИЕ_________________Энергосбережение_______________________________

КУРСОВАЯ
РАБОТА

на тему:_«Создание базы данных, содержащей сведения о двадцати сберегательных банках. Расположить список банков в алфавитном порядке с помощью метода сортировкидеревом»_______________________________________________________________________________________________________________________________________________________________

Студент________________________ ___________________________

Группа _______________________________________________________

Руководитель работы____________ _ 

Оценка________________________

Дата ________________________

Москва_________________20__


Содержание:

[0.0.0.1] НАПРАВЛЕНИЕ_________________Энергосбережение_______________________________

[1] Постановка задачи

[1.1] Текст задачи

[1.2]  Создать базу данных, содержащую сведения об участниках соревнований по биатлону для 20 спортсменов:

[1.3] фамилия и инициалы спортсмена,

[1.4]  страна,

[1.5]  время старта,

[1.6]  время финиша,

[1.7]  количество промахов при стрельбе,

[1.8]  дата проведения соревнования.

[1.9]  Результат каждого спортсмена определяется разностью между временем финиша и временем старта. Построить итоговую таблицу, расположив участников в порядке занятых мест с помощью метода сортировки Шелла. Составить список тех спортсменов, число промахов при стрельбе которых больше 4.
Данные задать самостоятельно.

[1.10] Формат данных

[2] Задачи и их реализация.

[2.1] 3) Печать результата

[2.2] История

[2.3] Пример

[3] Результат работы программы


Постановка задачи

Текст задачи

 Создать базу данных, содержащую сведения об участниках соревнований по биатлону для 20 спортсменов:

  •  фамилия и инициалы спортсмена,
  •   страна,
  •   время старта,
  •   время финиша,
  •   количество промахов при стрельбе,
  •   дата проведения соревнования.
  •   Результат каждого спортсмена определяется разностью между временем финиша и временем старта. Построить итоговую таблицу, расположив участников в порядке занятых мест с помощью метода сортировки Шелла. Составить список тех спортсменов, число промахов при стрельбе которых больше 4.
    Данные задать самостоятельно.

Формат данных

Данные считываются с txt файла. Они представлены в форме строк, элементы которых разделены “\t”.

Задачи и их реализация.

1) Создание структуры, поля которой будут содержать всю необходимую информацию о спортсменах.

public struct Biatlonist

   {

       public string surName;

       public string country;

       public TimeSpan startTime;

       public TimeSpan finishTime;

       public DateTime competitionDate;

       public int missesCount;

       

       public Biatlonist(string surName, string country, TimeSpan startTime, TimeSpan finishTime, int missesCount, DateTime competitionDate)

       {

           this.surName = surName;

           this.country = country;

           this.startTime = startTime;

           this.finishTime = finishTime;

           this.missesCount = missesCount;

           this.competitionDate = competitionDate;

       }

       

       // свойства возвращаюший результат каждого спортсмена -

       public TimeSpan Result

       {

           get { return finishTime - startTime; }

       }

   }

Описание переменных:

  1.  surName имя
  2.  country страна
  3.  startTime время старта
  4.  finishTime время финиша
  5.  competitionDate дата соревнования
  6.  missesCount кол.-во промохов

2) Чтение из файла. 

Для ввода из файла вначале открываю поток класса StreamReader, связываю его с файлом. StreamReader sr = new StreamReader(path);

Здесь sr – экземпляр класса StreamReader, а аргумент path передает конструктору строку, содержащую полный путь к файлу. Далее строки из файла по очереди считываются в переменную line, из которой далее, как обычно, извлекаются отдельные значения.

После окончания работы с объявленным  потоком, его следует закрыть методом Close:   sr.Close();

static void LoadFile(ref List<Biatlonist> lst)

       {

           string str;

           string path = "Sportsmen.txt";

           StreamReader sr = new StreamReader(path, Encoding.GetEncoding(1251));

           while ((str = sr.ReadLine()) != null)

           {

               string[] sp = str.Split('\t');

               lst.Add(new Biatlonist(sp[0],

                                       sp[1],

                                       TimeSpan.Parse(sp[2]),

                                       TimeSpan.Parse(sp[3]),

                                       int.Parse(sp[4]),

                                       DateTime.ParseExact(sp[5], "MM/dd/yyyy", provider)));

           }

           sr.Close();

       }

3) Печать результата

Для удобства создаю функцию для печати уже созданной структуры
static void Print(ref List<Biatlonist> lst)

       {

           foreach (var item in lst)

           {

               Console.WriteLine("{0,-17}{1,-10}{2,-10}{3,-10}{4,-5}{5,-15}{6,-3}", item.surName,

                                                                     item.country,

                                                                     item.startTime,

                                                                     item.finishTime,

                                                                     item.missesCount,

                                                                     item.competitionDate.Day.ToString() + "/" + item.competitionDate.Month.ToString() + "/" + item.competitionDate.Year.ToString(),

                                                                     item.Result);

           }        } Теперь можно в любое время обратиться к этой функции и вывести результат. Делать это придется не один раз, потому использование фукции – разумное решение.

Вывод списока спортсменов чьи промохи больше 4

foreach (Biatlonist item in lst)

           {

               if(item.missesCount > 4)

                   Console.WriteLine("{0,-17}{1,-10}{2,-10}{3,-10}{4,-5}{5,-15}{6,-3}", item.surName,

                                                                     item.country,

                                                                     item.startTime,

                                                                     item.finishTime,

                                                                     item.missesCount,

                                                                     item.competitionDate.Day.ToString() + "/" + item.competitionDate.Month.ToString() + "/" + item.competitionDate.Year.ToString(),

                                                                     item.Result);

           }

4)  Создание функции для записи данный в файл

 Выполняю аналогичные действия, как и при вводе данных: открытие потока класса StreamWriter, задаю имя потока и связываю его с файлом, предназначенным для размещения выводимых результатов, вывожу в этот поток необходимые результаты и закрываю поток оператором Close().

{

           StreamWriter sw = new StreamWriter("result.txt", false, Encoding.GetEncoding(1251));

           foreach (var item in lst)

               sw.WriteLine(

                  item.surName + '\t' +

                   item.country + '\t' +

                   Convert.ToString(item.startTime) + '\t' +

                   Convert.ToString(item.finishTime) + '\t' +

                   Convert.ToString(item.missesCount) + '\t' +

                   Convert.ToString(item.competitionDate.Day.ToString() + "/" + item.competitionDate.Month.ToString() + "/" + item.competitionDate.Year.ToString()) + '\t' +

                   Convert.ToString(item.Result));

           sw.Close();

       }

Сортировка

При сортировке Шелла сначала сравниваются и сортируются между собой значения, отстоящие один от другого на некотором расстоянии  (о выборе значения  см. ниже). После этого процедура повторяется для некоторых меньших значений , а завершается сортировка Шелла упорядочиванием элементов при  (то есть обычной сортировкой вставками). Эффективность сортировки Шелла в определённых случаях обеспечивается тем, что элементы «быстрее» встают на свои места (в простых методах сортировки, например, пузырьковой, каждая перестановка двух элементов уменьшает количество инверсий в списке максимум на 1, а при сортировке Шелла это число может быть больше).

История

Сортировка Шелла была названа в честь её изобретателя — Дональда Шелла, который опубликовал этот алгоритм в 1959 году.

Пример


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

На первом шаге сортируются подсписки , составленные из всех элементов , различающихся на 5 позиций, то есть подсписки , , , , .

В полученном списке на втором шаге вновь сортируются подсписки из отстоящих на 3 позиции элементов.

Процесс завершается обычной сортировкой вставками получившегося списка.

Программа

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Globalization;

namespace StructShellSort

{

   class Program

   {

       static List<Biatlonist> lst; // лист биатлонистов для сортировки        

       static CultureInfo provider = CultureInfo.InvariantCulture; // локализатор для даты

       static void Main(string[] args)

       {

           lst = new List<Biatlonist>(); // создание списка

           Console.WriteLine("******************************************************************************");

           Console.WriteLine("{0,-17}{1,-10}{2,-10}{3,-10}{4,-5} {5}   {6}", "И.Ф.", "Страна", "Старт", "Финиш", "Пром.", "Дата сорев.", "Результат");

           Console.WriteLine("******************************************************************************");

           LoadFile(ref lst);  // загружаем данные из файла в список

           Print(ref lst);     // печать списка до сортировки

           Console.WriteLine("\n---------------Сортировка списка методом Шелла---------------\n");

           ShellSort(ref lst); // сортируем список

           Print(ref lst);     // печать списка после сортировки

           

           // вывод тех спортсменов промохи которых больше 4

           Console.WriteLine("\nВывод тех спортсменов промохи которых больше 4\n");

           foreach (Biatlonist item in lst)

           {

               if(item.missesCount > 4)

                   Console.WriteLine("{0,-17}{1,-10}{2,-10}{3,-10}{4,-5}{5,-15}{6,-3}", item.surName,

                                                                     item.country,

                                                                     item.startTime,

                                                                     item.finishTime,

                                                                     item.missesCount,

                                                                     item.competitionDate.Day.ToString() + "/" + item.competitionDate.Month.ToString() + "/" + item.competitionDate.Year.ToString(),

                                                                     item.Result);

           }

           WriteFile(ref lst); // запись в файл

       }

       // сортировка Шелла

       public static void ShellSort(ref List<Biatlonist> lst)

       {

           int step = lst.Count / 2;//инициализируем шаг.

           while (step > 0)//пока шаг не 0

           {

               for (int i = 0; i < (lst.Count - step); i++)

               {

                   int j = i;

                   //будем идти начиная с i-го элемента

                   while (j >= 0 && lst[j].Result > lst[j + step].Result)

                   //пока не пришли к началу массива

                   //и пока рассматриваемый элемент больше

                   //чем элемент находящийся на расстоянии шага

                   {

                       //меняем их местами

                       Biatlonist temp = lst[j];

                       lst[j] = lst[j + step];

                       lst[j + step] = temp;

                       j--;

                   }

               }

               step = step / 2;//уменьшаем шаг

           }

       }

       // функция для добавления списка в файл

       public static void WriteFile(ref List<Biatlonist> lst)

       {

           StreamWriter sw = new StreamWriter("result.txt", false, Encoding.GetEncoding(1251));

           foreach (var item in lst)

               sw.WriteLine(

                  item.surName + '\t' +

                   item.country + '\t' +

                   Convert.ToString(item.startTime) + '\t' +

                   Convert.ToString(item.finishTime) + '\t' +

                   Convert.ToString(item.missesCount) + '\t' +

                   Convert.ToString(item.competitionDate.Day.ToString() + "/" + item.competitionDate.Month.ToString() + "/" + item.competitionDate.Year.ToString()) + '\t' +

                   Convert.ToString(item.Result));

           sw.Close();

       }

       // загрузка данных с текстового файла

       static void LoadFile(ref List<Biatlonist> lst)

       {

           string str;

           string path = "Sportsmen.txt";

           StreamReader sr = new StreamReader(path, Encoding.GetEncoding(1251));

           while ((str = sr.ReadLine()) != null)

           {

               string[] sp = str.Split('\t');

               lst.Add(new Biatlonist(sp[0],

                                       sp[1],

                                       TimeSpan.Parse(sp[2]),

                                       TimeSpan.Parse(sp[3]),

                                       int.Parse(sp[4]),

                                       DateTime.ParseExact(sp[5], "MM/dd/yyyy", provider)));

           }

           sr.Close();

       }

       static void Print(ref List<Biatlonist> lst)

       {

           foreach (var item in lst)

           {

               Console.WriteLine("{0,-17}{1,-10}{2,-10}{3,-10}{4,-5}{5,-15}{6,-3}", item.surName,

                                                                     item.country,

                                                                     item.startTime,

                                                                     item.finishTime,

                                                                     item.missesCount,

                                                                     item.competitionDate.Day.ToString() + "/" + item.competitionDate.Month.ToString() + "/" + item.competitionDate.Year.ToString(),

                                                                     item.Result);

           }

       }

   }

   public struct Biatlonist

   {

       public string surName; // имя

       public string country; // страна

       public TimeSpan startTime; // время старта

       public TimeSpan finishTime; // время финиша

       public DateTime competitionDate; // дата соревнования

       public int missesCount; // кол.-во промохов

       

       public Biatlonist(string surName, string country, TimeSpan startTime, TimeSpan finishTime, int missesCount, DateTime competitionDate)

       {

           this.surName = surName;

           this.country = country;

           this.startTime = startTime;

           this.finishTime = finishTime;

           this.missesCount = missesCount;

           this.competitionDate = competitionDate;

       }

       

       // свойства возвращаюший результат каждого спортсмена -

       public TimeSpan Result

       {

           get { return finishTime - startTime; }

       }

   }

}

Результат работы программы

Результат записанный в файл

Список использованной литературы:

  1.  Керниган, Брайан У., Ритчи, Деннис М. Язык программирования С, 2-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2012. – 304 с.: ил. – Парал. тит. англ.
  2.  Куренкова Т.В. Основы алгоритмизации и объектно-ориентированного программирования : учеб. пособие/ Т.В. Куренкова, Г.И. Светозарова. – М.: Изд. Дом МИСиС, 2011. – 197 с.
  3.  Светозарова Г.И., Козловский А.В., Сигитов Е.В. Современные методы программирования в примерах и задачах. – М.: Наука. Физматлит, 1995. – 427 с.
  4.  Сигитов Е.В. Информатика. Методы программирования и структуры данных: Учеб. пособие. –М.:Изд. Дом МИСиС, 2008. – 105 с.


 

А также другие работы, которые могут Вас заинтересовать

44581. Беспроводные ЛВС с радиопередачей данных 42 KB
  Переключение всех компьютеров в сети происходит синхронно. Есть сети построенные по данной технологии работающие со скоростью до 2 Мбит с на расстояние до 32 км на открытом пространстве и до 120 м – внутри здания. Если компьютеры оснастить сетевыми адаптерами Xircom CreditCrd Netwre и ОС Windows 95 98 или Windows NT то они могут без кабеля функционировать как одноранговые сети. Беспроводные ЛВС с радиопередачей данных Если уже работает сеть на основе Windows NT Server то к ней можно подключить сегмент беспроводной сети если к одному...
44583. Мобильные сети 83.5 KB
  Скорость передачи от 8 до 34 Кбит с. Они передают данные по существующим для передачи речи сетям в те моменты когда эти сети не заняты. Это очень быстрая технология связи с задержкой в доли секунды что делает ее вполне приемлемой для передачи в реальном масштабе времени.
44584. Базовая эталонная модель архитектуры сети 82 KB
  Сверху вниз от прикладного уровня к физическому; в рамках физического уровня горизонтально по сетевому кабелю к компьютеру – приемнику данных; полученные данные затем двигаются вверх по уровням сетевой модели Сетевая модель ISO OSI определяет сеть в терминах нескольких функциональных уровней. Каждый сетевой уровень включает строго определенные функции и применяет для этого один или несколько протоколов: физический уровень передает данные по сетевым каналам и включает в себя аппаратные...
44585. Основные функции уровней модели OSI 145 KB
  С точки зрения верхних уровней канальный и физический обеспечивают безошибочную передачу пакетов данных. а также алгоритмы переспроса и повторения пакетов. Пример передачи пакетов данных 3. Маршрутизация – существенная функция при работе в глобальных сетях с коммутацией пакетов когда необходимо определить маршрут передачи пакета выполнить перевод логических адресов узлов сети в физические.
44586. Назначение протоколов 37.5 KB
  Отметим три основных момента касающихся протоколов: Существует множество протоколов. В общем случае каждому уровню присущ свой набор правил Уровень Набор правил протокол Прикладной Инициация или прием запроса Представительский Добавление в сообщение форматирующей отображающей и шифрующей информации Сеансовый Добавление информации о трафике – с указанием момента отправки пакета Транспортный Добавление информации для обработки ошибок Сетевой Добавление адресов и информации о месте пакета в последовательности передаваемых пакетов Канальный...
44587. Основные типы протоколов 39.5 KB
  Протоколы этих стеков выполняют работу специальную для своего уровня. Однако коммуникационные задачи которые возложены на сеть приводят к разделению протоколов на три типа: прикладные протоколы; транспортные протоколы и сетевые протоколы. Уровни модели OSI и соответствующие им типы протоколов Прикладные протоколы работают на верхнем уровне модели OSI и обеспечивают взаимодействие приложений и обмен данными между ними. Транспортные протоколы поддерживают сеансы связи между компьютерами и гарантируют надежный обмен данными между ними.
44588. Наиболее распространенные стеки протоколов 32.5 KB
  Стек TCP IP включает в себя два основных протокола: TCP Trnsmission Control Protocol – протокол для гарантированной доставки данных разбитых на последовательность фрагментов. IP Internet Protocol – протокол для передачи пакетов относится к разряду сетевых протоколов. Стек TCP IP является промышленным стандартным набором протоколов которые обеспечивают связь в неоднородной среде т.
44589. Передача данных по сети 53.5 KB
  Пример передачи данных 1 Компьютер-отправитель устанавливает соединение с принтсервером. Если бы использовался более сложный протокол и соответствующие ему сетевые службы то время передачи увеличилось бы но зато повысилась бы достоверность передачи. Указанный в пакете адрес отправителя в этом случае использовался бы сетевой службой для формирования подтверждения и передачи его соответствующему приемнику.