Будь умным!


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

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

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

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

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

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

от 25%

Подписываем

договор

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

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

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

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

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

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

Вариант №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. Османская империя. Народные движения и власть султанов
4. реферату- Облікові регістри техніка і форми бухгалтерського облікуРозділ- Бухгалтерський облік оподаткува
5. ДОКЛАДНАЯ ЗАПИСКА Наименование должности с включением наименования организации
6. Тема 1. Антропологічні засади права
7.  Классификация норм права
8. N числа n месяца ему необходимо явиться в военкомат
9. Контрольная работа- Типы организационных структур, ресурсы организации
10. Отчет по практике (изучение современного состояния пахотных черноземов, используемых в сх)
11. Історія русів - яскравий твір барокової літератури
12. Финансовая политика это часть социальноэкономической политики государства по обеспечению роста финансо.html
13. Выпускная квалификационная работа (Дипломная работа)
14.  Философия и религия Философия и религия имеют совершенно различные задачи и суть различные по существу ф
15. III тыс до н э Она вызывает особый интерес благодаря возникновению своеобразных и знаменитых памяток культ
16. Мехатронные системы Методическое пособие к выполнению лабораторной работы
17. Индивидуальное обучение детей младшего школьного возраста
18. Лабораторная работа 46 1
19. Обновить номера страниц
20. психология необходимо обратиться к греческой мифологии.