Обработка динамических массивов структур данных

МОСКОВСКИЙ  АВИАЦИОННЫЙ ИНСТИТУТ

     (Государственный  технический университет)

     Филиал  «Восход» 
 

     Кафедра ВТ                          «Утверждаю»

     Преподаватель______Дронов А.А.

     «___»_______2010г. 
 
 

       Отчет

       по  курсовой работе

       на  тему: «обработка динамических массивов структур данных»

       по  дисциплине: программирование на языках высокого уровня 
 
 
 
 

       Студент гр. ДА2-44_____Есиркепов М.Е.

       «____»_______2010г. 
 
 
 
 
 
 

       Байконур 2010г.

       Содержание

   Введение…………………………………………………………………….

  1. Постановка задачи………………………………………………….......
  2. Реализация алгоритма программы………………………………........
    1. Общая схема алгоритма……………………………………………….
    2. Алгоритм работы процедуры ввода данных………………………..
    3. Алгоритм работы процедуры вывода данных...……………………….
    4. Алгоритм работы  процедуры вывода фамилии о работниках, чей стаж работы превышает значение, введенное с клавиатуры…………
    5. Алгоритм процедуры сортировки………………………………………

    2.6 Алгоритм   работы процедуры «writef»………………………………...

    2.7 Алгоритм  работы процедуры «readf»…………………………………...

    2.8 Алгоритм  работы функции «main»……………………………………...

   2.9 Стандартные процедуры и функции, используемые в программе……

   3. Анализ результата…………………………………………………………

   Заключение…………………………………………………………………...

 Список литературы…………………………………………………………..

 Приложение  А………………………………………………………………..

 Приложение  Б………………………………………………………………...

 Приложение  В………………………………………………………………... 
 

        
 
 
 
 
 

     Введение

       В данной курсовой работе рассмотрено  решение задачи с использованием языка программирования Borland C++ Builder.

       Задание: обработка информации о рабочих.

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

    1. Постановка задачи и определение требований.
 

Задание: обработка информации о работниках

а) создать  массив (не менее 10 записей) со следующей  структурой:

      -Фамилия  и инициалы работника;

      -название  занимаемой должности;

      -год  поступления на работу;

б) реализовать  следующие действия:

      -отсортировать записи в алфавитном порядке.

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

      -если  таких работников нет, вывести  на дисплей соответствующее сообщение. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

    1. Реализация  алгоритма программы
 
    1. Общая схема  алгоритма
 

       На  основе поставленной задачи и выбранного метода решения составлен алгоритм программы, представленный в приложении А.

     В задании нужно смоделировать  работу с базой данных с использованием массива. После определения массива любой его элемент можно использовать, указывая индекс (позицию) элемента в массиве. Индексация массива предоставляет возможность его обработки в циклах. Сначала осуществляется  выделение динамической памяти для массивов. Происходит инициализация графического режима, производится вывод пунктов.

     Очищается экран. На экран выводятся пункты меню от 1 до 7. Введённый с клавиатуры номер выбранного пункта меню считывается в переменную пункта меню. Поскольку требуется провести несколько действий, то рационально организовать текстовое меню.

Выбор пункта меню будет осуществляться путём введения с клавиатуры его порядкового номера.

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

    - при нажатии клавиши 1 выбирается  пункт меню « ZAPOLNENIYA MASSIVA S KLAVIATURY». В данном пункте программа потребует ввести количество записей, затем пользователь должен ввести эти записи в соответствии с тем, какое количество записи он ввел.  Так как в задании указано, что вводятся не меньше 10 записей, то на экране должно появится не меньше 10 записей. Эти записи состоят из поля фамилия и инициалы сотрудника, его должность и год поступления на работу. При нажатии любой клавиши происходит возврат в меню.

    -при  нажатии клавиши 2 выбирается  второй пункт меню «ZAPOLNENIYA MASSIVA IZ FAILA». В данном пункте пользователь может  заполнить массив из файла, то есть те данные, которые он вводил с клавиатуры, но перед тем как заполнить данные из файла ему необходимо сохранить эти записи в файл. При нажатии любой клавиши происходит возврат в меню.

    -при  нажатии клавиши 3 выбирается  третий пункт меню «VYVODA IMEYUSHEGOSYA MASSIVA». В данном пункте пользователь может  вывести на экран имеющийся массив. При нажатии любой клавиши происходит возврат в меню.

     -при  нажатии клавиши 4 выбирается  следующий пункт меню «SORTIROVKA IMEYUSHEGOSYA MASSIVA». В данном пункте  происходит сортировка записей в алфавитном порядке. При нажатии этой клавиши выводится на экран уже отсортированный массив. При нажатии любой клавиши происходит возврат в меню.

     -при  нажатии клавиши 5 выбирается  следующий пункт меню «VYVOD NA EKRAN INFORMACIYU O RABOTNIKAH CHEI STAZH PREVYSHAET UKAZANNYI». В данном пункте пользователю необходимо ввести стаж работы, по введенной информации, программа распечатает на экран список фамилии, чей стаж превышает указанный, если таких фамилии нет, то программа  выведет соответствующую информацию.   При нажатии любой клавиши происходит возврат в меню.

     -при  нажатии клавиши 6 выполняется  выбор предпоследнего пункта  меню «SOHRANENIYA MASSIVA V FAILE». В данном пункте пользователь может  сохранить введенный массив в файл. При нажатии любой клавиши происходит возврат в меню.

     -при  нажатии клавиши 7 выполняется  выбор последнего пункта меню  «VYHOD». При нажатии этой клавиши происходит выход из нашей программы. 

    1. Алгоритм  работы процедуры ввода данных.
 

       На  основе анализа задачи и выбора метода ее решения составлен алгоритм работы функции сортировки массива, представленный в приложении А. (Блок-схема процедуры ввода массива «vvod» расположен в приложении А2)

     В функции «vvod» вводятся данные с помощью использования стандартного объекта-потока cin. В этой процедуре происходит формирование основного списка путём введения с клавиатуры требуемой информации: фамилия и инициалы работника, название занимаемой должности, год поступления на работу. Покажем выполнение работы каждого блока.

  1. Указывается начало процедуры ввода данных (Блок 1)
  2. Очищается экран (Блок 2)
  3. Вводится количество записей (Блок 4)
  4. Создается массив с новой структурой с учетом введенного количества записей (Блок 5)

     Далее выполняется ввод данных массива.

  1. Очищается экран (Блок 7)
  2. Ввод фамилии и инициалы работника (Блок 9)
  3. Ввод должности работника (Блок 11)
  4. Ввод года поступления на роботу работника (Блок 13)
  5. Цикл ввода продолжается пока условие станет неудовлетворительным (Блок 6)
  6. Завершение данной процедуры (Блок 14).
 

     2.3 Алгоритм работы процедуры вывода данных. 

     На  основе анализа задачи и выбора метода ее решения составлен алгоритм работы функции сортировки массива, представленный в приложении А. В функции «vyvod» (Блок-схема процедуры вывода массива «vyvod» расположен в приложении А3) выводится на экран ранее набранная с клавиатуры информация.

  1. Начало данной процедуры (Блок 1)
  2. Очищается экран (Блок 2)

     Далее выполняется вывод данных по отдельности.

  1. Вывод данных фамилии и инициалов работника (Блок 5)
  2. Вывод данных занимаемой должности работника (Блок 6)
  3. Вывод данных года поступления на работу (Блок 7)
  4. Цикл вывода продолжается пока условие станет неудовлетворительным (Блок 4)
  5. Завершение процедуры (Блок 9).
 

     2.4 Алгоритм работы  процедуры вывода фамилии о работниках, чей стаж работы превышает значение, введенное с клавиатуры. 

     На  основе анализа задачи и выбора метода ее решения составлен алгоритм работы функции сортировки массива, представленный в приложении А. В функции «vyvod_rabotnik»  (Блок-схема процедуры «vyvod_rabotnik» расположен в приложении А4) выводится на экран фамилии о работниках чей стаж работы превышает значение, введенное с клавиатуры. 

  1. Начало данной процедуры (Блок 1)
  2. Очищается экран (Блок 2)
  3. Ввод стажа (Блок 5)
  4. Расчет стажа работы работника (Блок 6)
  5. Происходит сравнение стажа работника со стажем, который ввели с клавиатуры (Блок 9)
  6. Если выполняется условие, то выводится фамилия работника, чей стаж превышает указанный (Блок 11)
  7. А если таких работников нет, то выводится информация о том, что работников с таким стажем нет. (Блок 13)
  8. Завершение процедуры (Блок 15).
 

     2.5 Алгоритм процедуры сортировки. 

       На  основе анализа задачи и выбора метода ее решения составлен алгоритм работы функции сортировки массива, представленный в приложении А (Блок-схема процедуры «sortirovka» расположена в приложении А5).

       Эта функция осуществляет сортировку записей в алфавитном порядке. Для того чтобы отсортировать записи в алфавитном порядке мы вводим функцию которая возвращает позицию символа в английском алфавите представленную в приложении А1.

       Опишем  работу этой функции по блок-схеме.

  1. Начало данной процедуры (Блок 1)
  2. Вводим целочисленную переменную temp равной 0 (Блок 2)
  3. Далее выполняется условие проверки буквы, затем присваивается к каждой букве английского алфавита его порядковый номер (Блоки 3-56)
  4. Завершение процедуры (Блок 58).

       Опишем  работу процедуры сортировки по блок-схеме.

  1. Начало процедуры сортировки записи в алфавитном порядке (Блок 1)
  2. Структура WORKER применяет функцию temp (Блок 2)
  3. Цикл от первого элемента до последнего элемента массива (Блок 3)
  4. В цикле от второго элемента до последнего элемента (Блок 4)
  5. Переменная temp принимает значение предпоследнего элемента массива (Блок 5)
  6. Вспомогательной целочисленной переменной a присваиваем предпоследний элемент массива ссылающуюся на первый элемент фамилии (Блок 6)
  7. Вспомогательной целочисленной переменной b присваиваем последний элемент массива ссылающуюся на первый элемент фамилии (Блок 7)
  8. Идет сравнение a и b (Блок 8)
  9. Если a>b, то к последнему элементу присваивается предпоследний элемент массива (Блок 9)
  10. А затем к переменной temp присваивается последний элемент массива.

    Цикл  продолжается до тех пор, пока массив не отсортируется в алфавитном порядке.

    1.     Завершение процедуры (Блок 11).

    2.6 Алгоритм  работы процедуры «writef».

     На  основе анализа задачи и выбора метода ее решения составлен алгоритм работы функции сортировки массива, представленный в приложении А (Блок-схема процедуры «writef» расположен в приложении А6)

       В данной функции «writef» сохранение введенного массив в файл. Опишем работу процедуры сохранения по блок-схеме. 

     1. Начало процедуры сохранения (Блок 1)

     2. Создается  файл WORKER с расширением txt (Блок 3)

     3. В цикле от 0 до последнего элемента  массива (Блок 4)

     4. Записываются данные в файл (Блок 5)

     5. Закрывается файл (Блок 6)

     6. Завершение процедуры сохранения (Блок 7).     

    1. Алгоритм работы процедуры  «readf».
 

       На  основе анализа задачи и выбора метода ее решения составлен алгоритм работы функции сортировки массива, представленный в приложении А (Блок-схема процедуры считывания с файла «readf» расположен в приложении А7).Эта функция реализует считывание с файла данных.

       Опишем  работу процедуры считывания с файла  по блок-схеме.

  1. Начало процедуры считывания с файла (Блок 1)
  2. Переменная t принимает значение WORKER (Блок 3)
  3. Размер массива принимает значение 0 (Блок 4)
  4. Открывается файл WORKER (Блок 5)
  5. В цикле  пока не конец файла считывается файл и увеличивается шаг на единицу (Блоки 6-8)
  6. Создается массив со структурой WORKER (Блок 10)
  7. Открывается файл WORKER с расширением txt (Блок 11)
  8. В цикле от 0 до конца размера массива происходит считывание с файла (Блоки 13-14)
  9. Происходит закрытие (Блоки 15-16)
  10. Завершение процедуры считывания с файла (Блок 17). 
 

    2.8 Алгоритм  работы функции «main» 

     На  основе анализа задачи и выбора метода ее решения составлен алгоритм работы функции сортировки массива, представленный в приложении А (Блок-схема процедуры «main» расположен в приложении А8).

     Программа на языке С++ состоит их функций, описаний и директив препроцессора. Одна из функций  должна иметь имя main. Выполнение программы начинается с первого оператора этой функции.

     Как правило, функция используется для  вычисления какого-либо значения, поэтому  перед именем функции указывается  его тип.

     1. Начало процедуры Main (Блок 1)

     2. Булева переменная vyhod принимает значение «ложь» (Блок 2)

     3. Переменная i принимает целочисленный тип. (Блок 3)

     4. В цикле пока vyhod принимает значение «истина» (Блок 4)

     5. Выводится меню пользователя (Блоки  6-12)

     6. Вводят значение переменной i, т.е команду выбора пункта меню пользователя.(Блок 14)

     7. Если i=1, то выполняется процедура «vvod» (Блоки 15-16)

     8. Если i=2, то выполняется процедура «readf». (Блоки 17-18)

     9. Если i=3, то выполняется процедура «vyvod» (Блоки 19-20)

     10. Если i=4, то выполняются процедуры «sortirovka»   и «vyvod» (Блоки 21-22)

     11. Если i=5, то выполняется процедура «vyvod_rabotnik»  (Блоки 23-24)

     12. Если i=6, то выполняется процедура «writef»  (Блоки 25-26)

     13. Если i=7, то выполняется процедура «break» (Блоки 27-28)

     14. Завершение процедуры «main» (Блок 30).  

     2.9 Стандартные процедуры и функции, используемые в программе. 

     В процессе разработки программы были использованы модули: conio.h, iostream.h.

     Заголовочный  файл «iostream.h» содержит описание набора классов для управления вводом/выводом. В нем определены стандартные объекты-потоки cin и cout.

      Модуль conio.h предназначен для работы с экраном в текстовом режиме. В нем хранятся функции для очистки экрана, изменения цвета текста и фона, атрибутов текста, процедуры для буферизированного и не буферизированного ввода с клавиатуры. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

    3. Анализ результата 

    В результате работы программы был  сформирован список сведений о работниках, состоящий из фамилии и инициалов работника, года поступления, занимаемой должности. Над списком стало возможно произвести все необходимые действия, заданные по условию выполнения задачи. Листинг программы представлен в приложении Б. Результат выполнения программы представлен в приложении В. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

      Заключение 

           В процессе выполнения индивидуального задания и отчета по курсовой работе я ознакомился со способами обработки динамических массивов структур данных.

       Анализируя  полученное задание, я выбрала метод решения поставленной задачи, на основе которого получил алгоритмы в виде блок-схем. Преимущество блок-схем состоит в их наглядности. Кодирование алгоритмов осуществлено на языке программирования Borland C++ Builder. Листинг программы представлен в приложении Б.

       Преимущество  программы состоит в простой  организации пользовательского интерфейса, в удобстве ввода сведений о сотрудниках. Программа сортирует список по фамилии в алфавитном порядке.

       Недостатками  программы являются:

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

     Список  литературы

    1. Программирование на языке высокого уровня / Т.А.Павловская
    2. Карпов Б., Баранов Т.

    С++: специальный  справочник – СПб: Питер, 2003

    1. Пахомов Б.И.

    С/С++ и Borland C++ Builder для начинающих.

    1. Конспект лекций по программированию на ЯВУ.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

 

 

 

 

 

 

 

 
 
Приложение Б

(обязательное)

#include<iostream.h>                                                                                                        

#include<fstream.h>                                                                                                          

#include<conio.h>

using namespace std; 

int chrtoint(char a){

int temp=0;

if(a=='A'||a=='a'){temp=1;};

if(a=='B'||a=='b'){temp=2;};

if(a=='C'||a=='c'){temp=3;};

if(a=='D'||a=='d'){temp=4;};

if(a=='E'||a=='e'){temp=5;};

if(a=='F'||a=='f'){temp=6;};

if(a=='G'||a=='g'){temp=7;};

if(a=='H'||a=='h'){temp=8;};

if(a=='I'||a=='i'){temp=9;};

if(a=='J'||a=='j'){temp=10;};

if(a=='K'||a=='k'){temp=11;};

if(a=='L'||a=='l'){temp=12;};

if(a=='M'||a=='m'){temp=13;};

if(a=='N'||a=='n'){temp=14;};

if(a=='O'||a=='o'){temp=15;};

if(a=='P'||a=='p'){temp=16;};

if(a=='Q'||a=='q'){temp=17;};

if(a=='R'||a=='r'){temp=18;};

if(a=='S'||a=='s'){temp=19;};

if(a=='T'||a=='t'){temp=20;};

if(a=='U'||a=='u'){temp=21;};

if(a=='V'||a=='v'){temp=22;};

if(a=='W'||a=='w'){temp=23;};

if(a=='X'||a=='x'){temp=24;};

if(a=='Y'||a=='y'){temp=25;};

if(a=='Z'||a=='z'){temp=26;};

return temp;}; 

struct WORKER{

char fam[256];

char inic[256];

char dolzh[256];

int god;}; 

int razmer_massiva=0;

WORKER *mass=new WORKER[razmer_massiva];

Приложение  Б

(продолжение)

void vvod(){

clrscr();

cout<<"Vvedite kolichestvo zapisey:"<<endl;

cin>>razmer_massiva;

mass=new WORKER[razmer_massiva];

for(int i=0;i<razmer_massiva;i++){

clrscr();

cout<<"Vvedite familiu i inicyaly "<<" "<<i+1<<" rabotnika:"<<endl;

cin>>mass[i].fam>>mass[i].inic;

cout<<"Vvedite dolzhnost' "<<" "<<i+1<<" rabotnika:"<<endl;

cin>>mass[i].dolzh;

cout<<"Vvedite god postupleniya na rabotu "<<" "<<i+1<<" rabotnika:"<<endl;

cin>>mass[i].god;};

}; 

void vyvod(){

clrscr();

cout<<"Vash massiv"<<endl;

for(int i=0;i<razmer_massiva;i++){

cout<<mass[i].fam<<" "<<mass[i].inic<<endl;

cout<<mass[i].dolzh<<endl;

cout<<mass[i].god<<endl;};

system("pause");}; 

void vyvod_rabotnik(){

clrscr();

cout<<"Vvedite stazh:"<<endl;

int g;

cin>>g;

g=2010-g;

bool b=false;

for(int i=0;i<razmer_massiva;i++){

if(mass[i].god<g){

b=true;

cout<<mass[i].fam<<endl;};

};

if(b==false){cout<<"Rabotnikov s takim stazhem net."<<endl;};

system("pause");}; 
 

 

Приложение  Б

(продолжение)

void sortirovka(){

WORKER temp;

for(int k=1;k<razmer_massiva;k++){

for(int i=1;i<razmer_massiva;i++){

temp=mass[i-1];

int a=chrtoint(mass[i-1].fam[0]);

int b=chrtoint(mass[i].fam[0]);

if(a>b){

mass[i-1]=mass[i];

mass[i]=temp;};

};

};

}; 

void writef(){

ofstream file;

file.open("WORKER.txt",ios::binary);

Обработка динамических массивов структур данных