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


 

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

41024. Укладання та виконання зовнішньоторговельного контракту (продовження) 158.5 KB
  Укладання та виконання зовнішньоторговельного контракту продовження План Формування ціни контракту та умов платежу. Ціни контрактів за узгодженням сторін фіксуються у валюті однієї з країн контрагентів або у валюті третьої країни. Для платежу тобто для взаємних розрахунків між продавцем і покупцем може бути обрана інша валюта не та у якій зафіксовані ціни.
41025. Особистість у системі соціальних зв’язків 154 KB
  Визначення соціології особистості Соціальна поведінка Поняття структури особистості Соціальні статуси та соціальні ролі особистості Соціалізація особистості як процес Девіантна поведінка особистості Соціологічні теорії особистості Соціологія особистості галузь соціології предметом вивчення якої є особистість як суб'єкт і об'єкт соціальних відносин суспільноісторичного процесу на рівні взаємозв'язків особи і соціальних спільностей. Соціологія особистості це об'єкт наукових пошуків для багатьох західних дослідників ...
41026. Порядок роботи Верховної Ради України 39.5 KB
  Порядок роботи Верховної Ради України встановлюється Конституцією України та Законом про регламент Верховної Ради України Згідно з ч. 1 статті 82 Конституції України Верховна Рада України працює сесійно. Сесія Верховної Ради України термін протягом якого Верховна Рада проводить пленарні засідання ти приймає рішення з питань віднесених до її відання Конституцією України.
41027. Леонтьев А.Н. Лекции по общей психологии 3.41 MB
  Это значит что они принадлежат живому субъекту. Значит психическое отражение о котором идет речь свойственно только живым существам животным и человеку. Опосредствованностъ это значит оно служит средством то есть процесс происходит через ощущения посредством восприятия. Значит не опыт вообще а опыт воспоминания внутренний опыт процесс проверяющий внутри нас.
41029. Основные понятия реляционной модели данных (РМД) 47 KB
  Основные понятия реляционной модели данных РМД Цели обучения: формирование у учащихся системы базовых понятий теории реляционных баз данных. Ожидаемые результаты обучения: учащиеся должны знать: понятие реляционная модель данных и её основные признаки; аспекты данных изучаемых реляционной моделью данных; основные реляционные объекты данных отношение поле запись кортеж кардинальное число степень первичный ключ домен; свойства отношений; соответствие элементов реляционной модели данных архитектуре NSI...
41030. Генетика популяций, Экологическая характеристика популяций 59 KB
  Размеры ареала от активности организмов и особенностей природных условии. Возрастная структура популяций организмов разных видов варьирует в зависимости от продолжительности жизни интенсивности размножения возраста достижения половой жизни. Генетические характеристики популяции: Генофонд аллелефонд совокупность аллелей образующих генотипы организмов данной популяции....
41031. Методы: основные понятия 182.5 KB
  Метод – это функциональный элемент класса, который реализует вычисления или другие действия, выполняемые классом или его экземпляром (объектом). Метод представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Он описывается один раз, а вызываться может многократно. Совокупность методов класса определяет, что конкретно может делать класс.
41032. Поняття та особливості сучасного міжнародного права 88.5 KB
  Проблема визначення міжнародного права. Характерні риси міжнародноправової системи в порівнянні з внутрішньодержавною системою права. Функції міжнародного права.