У вас вопросы?
У нас ответы:) SamZan.net

Вариант 16 Работу выполнил студент группы ИС147 Арсений Борисович Чистый Работу

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 4.3.2025

РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ

ГИДРОМЕТЕОРОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА МОРСКИХ ИНФОРМАЦИОННЫХ СИСТЕМ.

Курсовая работа.

Вариант №16

  

Работу выполнил

студент группы ИС-147

Арсений Борисович Чистый

Работу принял

доцент кафедры ВСиИ

Неклюдова С.А.

Санкт-Петербург

2013.

  1.    Условия задачи:

Создать однофайловое консольное приложение (проект).

В этом проекте описать структуру, соответствующую предметной области вашего индивидуального задания из семинара №6. Для хранения данных использовать массив, состоящий из n элементов типа этой структуры. Количество переменных типа структуры (величину n) вводить с клавиатуры в процессе выполнения программы.

Программа должна предлагать меню для выбора режима работы с ней.

Выбрав соответствующую опцию меню, можно производить следующие действия:

  1.  Вводить данные в структуру двумя способами: из текстового файла и с клавиатуры. Выбор способа ввода должен осуществляться из программы. Возможен вариант, когда в одном сеансе работы часть данных вводится из файла, а часть – с клавиатуры.
  2.  Просматривать все введенные данные в отсортированном порядке по полю, указанному в вашем индивидуальном варианте.
  3.  Выводить информацию по запросу с клавиатуры. Если по запросу данных нет, выдать на монитор соответствующее сообщение.
  4.  Удалять информацию по запросу.

После выполнения выбранного действия, программа снова должна предлагать меню. И так до тех пор, пока пользователь не решит завершить работу с программой.

Действия, выполняемые по каждому пункту меню, должны быть оформлены в программе в виде функций.

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

Задание семинара №6:

Описать структуру с именем ZNAK, содержащую следующие поля:

□ фамилия, имя;

□ знак Зодиака;

□ дата рождения (массив из трех чисел);

Написать программу, выполняющую следующие действия:

□ ввод с клавиатуры данных в массив, состоящий из восьми    

  элементов типа ZNAK: записи должны быть упорядочены по   

  датам рождения;

□ вывод на экран информации о людях, родившихся под знаком,

   название которого введено с клавиатуры;

□ если таких нет, выдать на дисплей соответствующее сообщение;

  1.    Таблица имен:

Имя объекта в задаче

Имя объекта в программе

Тип объекта

Содержательный смысл

Структура

ZNAK

Структура

Исходная структура

Содержащая поля: фамилия (surname), имя (name), знак Зодиака (zodiak), дата рождения.(date[3])

man[size]

Массив структур

типа ZNAK

Исходный массив структур

n

size

Целое число

Количество структур типа ZNAK 

Фамилия

surname [30]

Символьная переменная

Фамилия человека

Имя

name[30]

Символьная переменная

Имя человека

Знак Зодиака

zodiak[20]

Символьная переменная

Знак Зодиака

человека

Дата рождения

date[3]

Целый одномерный массив

Массив из трех чисел каждому из которых соответствует год, месяц и день рождения человека

ne_nayden

Логическая переменная

ne_nayden = true означает отсутствие людей с искомым знаком Зодиака

iskomyznak[30]

Символьная переменная

Искомый знак Зодиака

imin

Целое число

Переменная для хранения индекса минимального элемента

choice

Символьная переменная

Переменная принимающая результат вызова функции menu()

*man1

Указатель на массив структур man[size]

Передает адрес массива структур man[size]

*size_adress

Указатель на целочисленное значение size

Передает адрес размера массива структур man[size]

ch

Символьная переменная

Передает значение нажатой клавиши в функцию main()

fout

Объект класса ifstream

Объект считывания данных из файла

end_[10]

Символьная переменная

Переменная для сравнения считанных данных из файла с условным обозначение конца файла ‘endoffile’

buf[40]

Символьная переменная

Переменная для считывания данных из файла, которая при получении последовательности символов ‘endoffile’ заканчивает считывание данных  

put

Объект класса ofstream 

Объект для записи данных в файл

deleteznak[30]

Символьная переменная

Переменная   получающая искомый параметр по которому удаляются данные

a

Структура типа ZNAK

Переменная для обмена местами элементов массива структур типа ZNAK 

enter()

Функция

Функция ввода данных вручную

init_list()

Функция

функция заполняющая все элементы массива знаков Зодиака NULL символами

search()

Функция

функция поиска по знаку Зодиака

Choose_delete()

Функция

функция выборочного удаления (по введенному знаку Зодиака)

display()

Функция

функция вывода всей информации

file_enter()

Функция

функция выводящая информацию из файла

Save_file()

Функция

функция сохранения данных в файл

menu()

Функция

функция меню ,считывающая нажатую кнопку

main()

Функция

Входная функция программы

i

Целое число

Расч. переменная

j

Целое число

Расч. переменная

  1.  Блок-схема алгоритма:

Начало

ZNAK:

surname[30] name[30] zodiac[20] date[3]

Конец

file_enter(*man1, *size_adress)

main()

init_list(*man1, *size_adress)

menu ( )

enter (*man1, *size_adress)

Save_file (*man1, *size_adress)

display (*man1, *size_adress)

search (*man1, *size_adress)

Choose_delete(*man1, *size_adress)


True

True

True

True

True

True

True

Конец

False

False

False

False

False

False

False

file_enter(man,&size)

display (man,&size)

search(man,&size)

Choose_delete(man,&size)

Save_file(man,&size)

enter (man,&size)

choise=’ж

choise=’е

choise=’д

choise=’г

choise=’в

choise=’б

choise=’a’

choise= menu()

От i=1 до i>0 с шагом 0

init_list(man, &size)

Ввод size

main()


False

True

1

continue

break

!*man1[i].zodiak

От i=0 до i<*size_adress с шагом 1

enter (*man1,*size_adress)

Конец

False

return tolower(ch)

True

!strchr("абвгдеж", tolower(ch))

Ввод ch

Вывод таблицы меню

menu()

Конец

man1[i].zodiak=’\0’

От i=0 до i<*size_adress с шагом 1

init_list(*man1,*size_adress)


Ввод man1[i].surname[30],

man1[i].name[30], man[i].zodiac[20]

True

True

True

1 < man1[i].date[1] <  12

Конец

False

True

Конец

return

Вывод Список полон

i=*size_adress

1

1 < man1[i].date[2] <  31

Ввод man1[i].date[2]

Ввод man1[i].date[1]

1900 < man1[i].date[0]  

            < 2014

Ввод man1[i].date[0]

False

False

False


False

True

Конец

continue

Вывод из fout в man1[j].name man1[j].zodiak man1[j].date[0] man1[j].date[1] man1[j].date[2]

strcpy( man1[j].surname, buf )

!strcmp(buf, end)

Вывод из fout в buf

От j=0 до j<*size_adress с шагом 1

False

True

end_= "endoffile"

Конец

return

Вывод Список полон

i=*size_adress

True

False

!*man1[i].zodiak

break

continue

file_enter (*man1,*size_adress)

От i=0 до i<*size_adress с шагом 1


Save_file(*man1,*size_adress)

Конец

True

False

*man1[i].zodiak = '\0'

!strcmp(deleteznak,man1[i] .zodiak)

От i=0 до i<*size_adress с шагом 1

Ввод deleteznak

Choose_delete (*man1,*size_adress)

False

True

Конец

Ввод в put "endoffile"

Ввод в put man1[j].surname

man1[j].name man1[j].zodiak man1[j].date[0] man1[j].date[1] man1[j].date[2]


*man1[i].zodiak

От i=0 до i<*size_adress с шагом 1

True

False

False

True

Конец

Вывод Человек не найден

ne_nayden

Вывод man1[i].date[j]

От j=0 доj<3 с шагом 1

Вывод man1[i].surname[30],

man1[i].name[30], man[i].zodiac[20]

!strcmp( iskomyznak, man1[i].zodiak )

От i=0 до i<*size_adress с шагом 1

ne_nayden = true

Ввод iskomyznak

ne_nayden = false

search(*man1,*size_adress)


4

3

2

man1[j].date[2] <man1[imin].date[2]

man1[j].date[1] =man1[imin].date[1]

man1[j].date[1] <man1[imin].date[1]

man1[j].date[0] =man1[imin].date[0]

man1[j].date[0] <man1[imin].date[0]

От j=i+1 до j<size_adress с шагом 1

display(*man1,*size_adress)

От i=0 до i<size_adress-1 с шагом 1

imin = j

False

False

False

True

False

True

True

False

True

imin = j

imin = j

True

imin = i


Конец

Вывод man1[i].surname[30],

man1[i].name[30], man[i].zodiac[20]

man1[i].date[0], man1[i].date[1] , man1[i].date[2]

От i=0 до i<size_adress-1 с шагом 1

4

3

man1[imin] = a

2

ZNAK a = man1[i]

man1[i] = man1[imin]


  1.  Код программы:

#include <iostream>

#include <cctype>

#include <cstring>

#include <iomanip>

#include <fstream>

#include <Windows.h>

using namespace std;

struct ZNAK

{

 char surname[30];

 char name[30];

 char zodiak[20];

 int date[3];

};

void enter(ZNAK *man1, int *size_adress) , init_list(ZNAK *man1, int *size_adress);

void search(ZNAK *man1, int *size_adress) , Choose_delete(ZNAK *man1, int *size_adress);

void display(ZNAK *man1, int *size_adress), file_enter(ZNAK *man1, int *size_adress);

void Save_file(ZNAK *man1, int *size_adress);

int menu();

int main()

{

SetConsoleCP(1251);

   SetConsoleOutputCP(1251);

 char choice;

cout << "Введите размерность массива " << endl;

 int size;

cin >> size;

ZNAK *man = new ZNAK[size];

init_list(man, &size);

 for(int i = 1;i>0;i=i+0)

{

 choice = menu();

 switch ( choice )

 {

 case 'а' : enter(man, &size);    

  break;     

 case 'б' : file_enter(man, &size);            

  break;  

 case 'в' : Save_file (man, &size);

  break;

 case 'г' : display(man, &size);                             

  break;                                  

 case 'д' : search(man, &size);                                  

  break;                            

 case 'е' : Choose_delete(man, &size);                      

  break;                          

 case 'ж' : return 0;                               

 }        

}

}

void init_list(ZNAK *man1, int *size_adress)

{

 int i;

 for( i = 0; i<*size_adress; i++)

 *man1[i].zodiak = '\0';                             

}

int menu()

{

 char ch;

cout << endl ;

 do 

{

cout << "--------------------------------------\n";

cout << "|   (А)-|-Ввод_ручной                |\n";

 cout << "|   (Б)-|-Вывод_данных_из_файла      |\n";

cout << "|   (В)-|-Сохранение_данных_в_файл   |\n";

cout << "|   (Г)-|-Просмотр_всех_данных       |\n";

cout << "|   (Д)-|-Поиск_по_знаку_Зодиака     |\n";

cout << "|   (Е)-|-Удаление_данных            |\n";

cout << "|   (Ж)-|-Выход                      |\n";

cout << "--------------------------------------\n";

 cout << "Выберите команду: "; cin >> ch;

 } while (!strchr("абвгдеж", tolower(ch)));                            

 return tolower(ch);

}

void enter(ZNAK *man1, int *size_adress)

{

 int i;

 for(i=0; i<*size_adress; i++ )

 if (!*man1[i].zodiak)

  break;  

 else 

  continue;

 if (i==*size_adress)                                              

{                      

 cout <<"Список полон \n";

 return;

}

cout << "Имя и фамилия: ";                                             

cin >> man1[i].surname >> man1[i].name;

cout << "Знак Зодиака:  ";

cin >> man1[i].zodiak;

 cout <<

"Введите дату рождени в формате - ( 1900 < год < 2014  : месяц : день )"

 << endl;

 do 

cin >> man1[i].date[0];

 while(man1[i].date[0]<1900||man1[i].date[0]>2014 );

 do

cin >> man1[i].date[1];

 while (man1[i].date[1]<1 || man1[i].date[1] > 12 );

 do 

cin >>  man1[i].date[2];

 while (man1[i].date[2]<1||man1[i].date[2]> 31 );

cout << endl;

}

void file_enter(ZNAK *man1, int *size_adress)

{           

 int i;        

 for(i=0; i<*size_adress; i++ )    

 if (!*man1[i].zodiak) break;

 else 

  continue;

 

 if (i==*size_adress)                            

{

 cout <<"Список полон\n";

 return;

}

   ifstream fout("Experement_6_.txt");

 char end_[10] = "endoffile";  

 char buf[40];

 for ( int j = i ; j < *size_adress ; j++ )

{

fout >> buf;

 if ( !strcmp( buf, end_ ))                           

 continue;       

 else

{

 strcpy( man1[j].surname, buf );

 fout >> man1[j].name >> man1[j].zodiak >>       

        man1[j].date[0] >> man1[j].date[1]

 >> man1[j].date[2];

}

}

   fout.close();

}

void Save_file(ZNAK *man1, int *size_adress)

{

ofstream put;

put.open("Experement_6_.txt");

 for(int i=0; i<*size_adress; i++ )

{

 if (*man1[i].zodiak)          

  put << man1[i].surname << " "  <<

            man1[i].name << " " <<  man1[i].zodiak <<   

           " "<<man1[i].date[0]<<" " <<man1[i].date[1]

           << " " << man1[i].date[2] << " " <<endl;

}

put << "endoffile";

put.close();

}

void Choose_delete(ZNAK *man1, int *size_adress)

{

 char deleteznak[30];

cout <<

        "Введите данные (знак Зодиака) для удаления: " 

        << endl;

cin >> deleteznak;

 for (int i = 0; i<*size_adress; i++ )

{

 if ( !strcmp(deleteznak,man1[i].zodiak))                                        

 *man1[i].zodiak = '\0';                     

}

}

void search(ZNAK *man1, int *size_adress)

{

 char iskomyznak[30];

cout << "Введите искомый знак Зодиака: " << endl;

cin >> iskomyznak;                                 

 bool ne_nayden = true;      

 for ( int i = 0; i < *size_adress; i++ )

{

 if ( !strcmp( iskomyznak, man1[i].zodiak ) )              

 {           

  ne_nayden = false;

  cout <<

    "Информация о человеке с искомым знаком Зодиака: "    

            << endl;

  cout<< "Фамилия и Имя: " << man1[i].surname

            << " " << man1[i].name << endl;

  cout << "Знак Зодиака:  " << man1[i].zodiak

            << endl;

  cout << "Дата рождения: ";

  for ( int j = 0; j < 3; j++ )

   cout << setw(5) << man1[i].date[j];

  cout << endl << endl;

 }

}

 if ( ne_nayden )               

 cout << "Человек не найден " << endl;

}

void display(ZNAK *man1, int *size_adress)

{

 for ( int i = 0; i < *size_adress - 1; i++ )                       

{

 int imin = i;

 for ( int j = i + 1; j < *size_adress ; j++ )

 {

  if ( man1[j].date[0] < man1[imin].date[0] )         

   imin = j;                                              

  if ( man1[j].date[0] == man1[imin].date[0] )                         

  {                                       

   if(man1[j].date[1]< man1[imin].date[1] )                    

    imin = j;       

      if(man1[j].date[1]==man1[imin].date[1])

        

                if(man1[j].date[2]<man1[imin].date[2])

     imin = j;

  }

 }

 ZNAK a = man1[i];   

 man1[i] = man1[imin];

 man1[imin] = a;

}

cout << endl;

 for ( int i = 0; i<*size_adress; i++)

 if (*man1[i].zodiak)                          

 {

 cout << "Фамилия и Им:    " << man1[i].surname

       << " " << man1[i].name << endl;

 cout << "Знак Зодиака:    "<<  man1[i].zodiak

       << endl;

 cout << "Дата рождения:   " << setw(5) <<

        man1[i].date[0]

 << setw(3) << man1[i].date[1] << setw(3) <<

        man1[i].date[2];

 cout << endl << endl;

 }

}

  1.  Тестирование программы:

Содержимое файла до работы:

Планкина Соня Водолей 1981 2 25

Кумарова Оля Овен 1995 5 7

Погодина Даша Рыбы 1992 4 20

Доброва Ира Водолей 1981 2 25

Маслов Миша Водолей 1981 1 7

Патчин Гоша Водолей 1981 1 5

Колин Иосиф Козерог 1972 12 1

Веселов Коля Овен 1969 10 24

endoffile

Порядок введенных команд:

  1.  Размерность массива: 11

2-(Б)- Вывод_данных_из_файла

3-(Г)-Просмотр_всех_данных


Веселов Коля Овен           1969    10    24

Колин Иосиф Козерог      1972    12    1

Патчин Гоша Водолей      1981    1      5

Маслов Миша Водолей    1981    1      7

Доброва Ира Водолей       1981    2      25

Планкина Соня Водолей  1981    2      25

Погодина Даша Рыбы       1992    4      20

Кумарова Оля Овен          1995    5       7

4- (А) –Ввод_ручной

Железов Евгений Водолей    1981     1      8

5-(А)-Ввод_ручной

Никонов Владислав Весы      1977     2      3

6-(А)-Ввод_ручной

Каплин Станислав Водолей   1999     1      1

7-(А)-Ввод_ручной

Список полон

8-(Г)-Просмотр_всех_данных

Веселов Коля Овен              1969    10    24

Колин Иосиф Козерог         1972    12      1

Никонов Владислав Весы   1977     2       3

Патчин Гоша Водолей         1981     1       5

Маслов Миша Водолей       1981      1       7

Железов Евгений Водолей 1981     1      8

Доброва Ира Водолей          1981     2      25

Планкина Соня Водолей     1981      2      25

Погодина Даша Рыбы          1992     4      20

Кумарова Оля Овен             1995      5       7

Каплин Станислав Водолей 1999     1      1

9-(Е)-Удаление_по_знаку_Зодиака

Введенный знак: Водолей

10-(Г)-Вывод_всех_данных

Веселов Коля Овен              1969    10    24

Колин Иосиф Козерог         1972    12      1

Никонов Владислав Весы   1977     2       3

Погодина Даша Рыбы          1992     4      20

Кумарова Оля Овен             1995      5       7

11-(Д)-Поиск_по_знаку_Зодиака

Введенный знак: Овен

Веселов Коля Овен              1969    10    24

Кумарова Оля Овен             1995      5       7

12-(В)-Сохранение_данных_в_файл

13-(Ж) -Выод



Содержимое файла после работы:

Веселов Коля Овен              1969    10    24

Колин Иосиф Козерог         1972    12      1

Никонов Владислав Весы   1977     2       3

Погодина Даша Рыбы          1992     4      20

Кумарова Оля Овен             1995      5       7

  1.  Результаты и выводы

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




1. Характеристика доводов, позволяющих оценить рекламу объективные, субъективные, контролируемые, верифицируемые
2. П должность уч
3. П. Стельмашенко ldquo;rdquo;2013 р
4. діловий; публіцистичний; художній; розмовний; конфесійний; епістолярний
5. По внешнему виду представляет собой стерильный раствор для инъекций от желтого до коричневого цвета.
6. Курсовая работа- Платёжеспособность ссудозаёмщика и кредитный риск банка
7. ЗАПИШИТЕ ЦИФРАМИ ЧИСЛА ДВА ЧЕТЫРЕ
8. com-beutifulbstrdclub Любое копирование без ссылки на группу ЗАПРЕЩЕНО Часть одиннадцатая Сказать чт
9. Dopted rnge of pproches to combt wste
10.  100г черной смородины 120г красной смородины 350г клубники лучше взять мелкую клубнику или разрезать крупные я