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 с.


 

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

60432. Умовність, узагальнення. Стилізація. «Зима і весна. Стрітення» 265.5 KB
  Основні поняття: стилізація зображення. Актуалізація опорних знань і вмінь Прийом Мозковий штурм Учитель пропонує учням пригадати відомості про декор орнамент та прийоми створення декоративного зображення.
60433. ЗИМОВІ СВЯТА В НАРОДНОМУ КАЛЕНДАРІ 66.5 KB
  А зима висіває сніжок з рукава І сріблом обсипає ялинки. Здрастуй білий пухнастий веселий сніжок Здрастуй гостя зима-чарівниця Викликай же на гірку малят на лужок А мороз хай румянить їм лиця.
60434. Зимові свята в Україні: традиції, звичаї, обряди 82 KB
  Шановні гості Дорогі діти Вітаємо Вас з наступаючими новорічними святами. Діти кожна людина має свою Батьківщину яку любить над усе на світі. Саме Вам дорогі діти зберігати любити і продовжувати народні звичаї і обряди українського народу.
60436. Обрядові пісні зимового циклу 78 KB
  Вступне слово вчителя української літератури: Християнський звичай величати Різдво Христове Щедрий вечір і Водохреща пісенним словомколядками має історичне коріння що сягає ще давніх цивілізацій Землі.
60438. Добірка текстів по темі «Ділова поїздка за кордон» 400 KB
  Методична розробка призначена для роботи на заняттях англійської мови з метою розвитку навичок усного, монологічного та діалогового мовлення; Розвитку зацікавленості до країни, мови до якої вивчаємо.
60439. Жінки і Україна 84.5 KB
  Познайомити учнів із життям та творчістю видатних українських жінок які зробили великий внесок у розвиток української культури; виховувати шанобливе ставлення до жінок як особистості почуття національної гордості любов до рідного краю; розвивати духовність.
60440. Ця чудова країна „Цирк” 59.5 KB
  Діти сьогоднішнє заняття незвичайне адже ви зустрінетеся з улюбленими циркачами більше дізнаєтесь про них що вони роблять які вони; зможете цікаво розповісти рідним друзям а може хтось з вас захоче стати циркачем і вже сьогодні вибере ким саме.