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


 

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

52088. Їх долі обпалені війною 67 KB
  Ми повинні памятати тих хто її пережив тих хто не дожив не доспівав не до кохав. Память загиблих вшановуємо хвилиною мовчання. Афганська війна Не наша вина Ми молодість там залишили Щоб ви памятали й жили. Скільки років щасливої тиші Та вривається голос в ефір Що благає нагадує кличе: Захистіть збережіть люди мирКожен день кожен час пам'ятайтеСкільки жертв нам війна принесла.
52090. Кліматичні пояси й області Африки 126 KB
  Обладнання: підручники фізична карта Африки кліматична карта Африки атласи тести ілюстрації різнокольорові картки таблиця памятка. Із собою в дорогу ми візьмемо: фізичну карту Африки кліматичну карту світу атласи ілюстрації пейзажу Африки. В екваторіальній області Африки опадів випадає: а багато; б мало.
52091. Африка 57.5 KB
  ФГП материка. Открытие и исследование материка. Фронтальный опрос на знание номенклатуры карты по теме ФГП материка. Индивидуальный опрос: а План изучения материка.
52092. Африка 69.5 KB
  Проблемный вопрос Почему в природе трех материков Африки Австралии и Южной Америки много общего Ответ: Потому что все эти материки являются частью единого материка Гондвана. Какой материал мы будем изучать первым вы узнаете если отгадаете загадку: Этот материк по площади в 3 с лишним раза больше другого и почти такой же по площади как два других материка Какой это материк Ответ: Африка так как по площади он в 3 с лишним раза больше Австралии и почти такой же по площади как Южная Америка и Антарктида вместе взятые. Проблемный...
52093. Африка. Фізико-географічне положення. Історія відкриття й дослідження материка 51 KB
  Вивчення нового матеріалу Відкриття та дослідження Африки Час дослідження Дослідники Результати досліджень ІІІ тис. Експедиція під керівництвом португальця Бартоломеу Діама Здійснила плавання вздовж західних берегів Африки до м. Експедиція під керівництвом португальця Васко да Гама На шляху до Індії дісталася південних берегів Африки. Африки.
52094. Населення і народи Африки 55.5 KB
  Мета уроку: формування первинних знань учнів про етнічний склад населення Африки особливості його формування динаміку і розміщення; сприяти розумінню демографічних проблем Африки та шляхи їх вирішення.Формувати первинні практичні вміння характеризувати загальні риси населення материка; вдосконалювати практичні вміння працювати з тематичними картами атласу. Зміст курсу Географія материків і океанів передбачає не тільки вивчення природи материків але й ознайомлення з характеристиками населення материків та його господарською діяльністю.
52095. Тропічні пустелі та напівпустелі. Твердолисті вічнозелені ліси та чагарники 68.5 KB
  Навчальна мета: повторити вивчений матеріал; зясувати рівень оволодіння учнями навчальним матеріалом з попередніх тем; сформувати знання про особливості розміщення природних зон Африки; поглибити систему знань учнів про взаємозв'язки природних компонентів у складі природних зон; сформувати в учнів уміння складати характеристику природних зон у певній послідовності за типовим планом; удосконалювати практичні вміння учнів працювати з картами атласами. Обладнання: фізична карта Африки кліматична карта Африки карта природних зон Африки...
52096. Африка 63.5 KB
  Посовещавшись команды должны выбрать капитана и название команды можно предложить выбрать из названий стран Африки. Название команды пишут маркером на чистых табличках. За каждый правильный ответы команды получают красные жетоны 2 ВОСХОЖДЕНИЕ на Джомолунгму На доске магнитной нарисована гора с маршрутамиступеньками по количеству команд. Команды выбирают одного игрока альпиниста который будет защищать честь команды при восхождении.