Обработка записей

Автор работы: Пользователь скрыл имя, 18 Марта 2014 в 23:39, курсовая работа

Краткое описание

Представление данных в виде структур применяется в основном при машинной обработке документов. Любой документ делится на три части: «шапка», колонки и строки. Каждая строка документа является записью, которая представляет из себя единое целое и состоит из отдельных данных, называемых реквизитами, с разной формой (числа, буквенные рядки и т.д.). Цель курсовой работы – освоить способы организации программ при решении задач с использованием структур. Проанализирована задача и выведены методы ее программной реализации. Написана программа для решения индивидуального задания. В курсовой работе использованы приемы передачи массива записей в функцию, организации графического интерфейса в текстовом режиме. Реализована возможность построения графика.

Содержание

Вступление …………………..….….……………….……… ..… 4
Постановка задачи .…………………………………………. 5
Анализ существующих методов работы со структурами .6
Описание программы …………………………………….... 7
Общие сведения ……………………………………….. 7
Исходные данные …………….………………………. 13
Обработанные данные ………………………………... 14
Переменные, константы и функции ………..……….. 15
Выводы …………………………………………………………... 17

Прикрепленные файлы: 1 файл

Пояснительная записка.doc

— 258.50 Кб (Скачать документ)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Функції

Прототип

Описання

WorkBook WBFill

Создает одну запись типа WorkBook, заполняет ее поля заданными значениями и возвращает созданную структуру.

pMyStack MyStackCreate

Создает пустой стек.

Void MyStackPush

Создает одну запись типа worker, заполняет ее поля заданными значениями и добавляет в вершину стека.

Void MyStackPop

Удаляет из вершины стека одну запись.

Int MystackEmpty

Проверяет пустой ли стек, возвращает 1, если пустой, 0 если в стеке что-то есть.

Void MyStackDel

Удаляет стек и освобождает память.

Void MyStackSortExp

Сортирует стек по возрастанию стажа.

Void MyStackSortTable

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

Void MyStackPrint

Выводит стек на экран.

Void menuWrite

Перерисовывает пользовательский интерфейс.

Int menuMain

Возвращает значение выбранного пункта меню

Void SaveFile

Сохраняет текущий стек в файл по умолчанию или заданный пользователем файл.

Void ReadFile

Считывает данные из файла и создает новый стек.

Void Graphic

Рисует диаграмму количества работников в разрезе трудового стажа


 

 

 

 

 

 

 

 

 

 

 

Выводы

 

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

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

После окончания работы с программой, все сохраненные результаты работы программы можно просмотреть в соответствующих файлах. Исходя из этого, можно сказать, что работа с файлами идет также безошибочно. График, который можно рассмотреть во время работы с программой, отвечает данным из записей. Структура интерфейса простая и интуитивно-понятная, что делает ее очень простой в использовании. 
ЛИСТИНГ:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <graphics.h>

#include <math.h>

#include <string.h>

#include <iostream.h>

#include <iomanip.h>

 

#define norm RED

#define sel GREEN

#define txtbackgr BLUE

#define wndbackgr WHITE

 

int StackSize=0;

typedef struct MyStack *pMyStack;

 

struct WorkBook

{int StartDate[3];

  int EndDate[3];

  char FactName[20];};

 

WorkBook WBFill(int StartDate[3],int EndDate[3],char FactName[20])

{int i;

  WorkBook wb;

  for(i=0;i<3;i++)

   {wb.StartDate[i]=StartDate[i];

    wb.EndDate[i]=EndDate[i];}

  strcpy(wb.FactName,FactName);

  return wb;}

 

struct worker

{int TableNum;

  char Surname[20];

  char Name[20];

  char Patron[20];

  int BirthDate[3];

  int StDate[3];

  int Exp;

  WorkBook *wb;

  int WBnum;

  worker *last;};

 

struct MyStack

{worker *TopIter;};

 

struct buffStr

{int TableNum;

  char Surname[20];

  char Name[20];

  char Patron[20];

  int BirthDate[3];

  int StDate[3];

  int Exp;

  WorkBook *wb;

  int WBnum;};

 

pMyStack MyStackCreate()

{StackSize=0;

  pMyStack Stack;

  Stack=(MyStack*)malloc(sizeof(struct MyStack));

  if(Stack!=NULL)

   {Stack->TopIter = NULL;}

  return Stack;}

 

void MyStackPush(pMyStack This,int TableNum,char Surname[20],char Name[20],char Patron[20],int BirthDate[3],int StDate[3],WorkBook *wb,int WBnum)

{StackSize++;

  int i,j,exp=0;

  struct worker *NewIter;

  NewIter=(worker*)malloc(sizeof(struct worker));

  NewIter->last=This->TopIter;

  NewIter->wb=new WorkBook[WBnum];

  NewIter->TableNum=TableNum;

  strcpy(NewIter->Surname,Surname);

  strcpy(NewIter->Name,Name);

  strcpy(NewIter->Patron,Patron);

  for(i=0;i<3;i++)

   {NewIter->BirthDate[i]=BirthDate[i];

    NewIter->StDate[i]=StDate[i];}

  NewIter->WBnum=WBnum;

  for(i=0;i<WBnum;i++)

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

     {NewIter->wb[i].StartDate[j]=wb[i].StartDate[j];

      NewIter->wb[i].EndDate[j]=wb[i].EndDate[j];}

    strcpy(NewIter->wb[i].FactName,wb[i].FactName);

    exp=exp+(NewIter->wb[i].EndDate[2] - NewIter->wb[i].StartDate[2]);}

  NewIter->Exp=exp;

  This->TopIter=NewIter;}

 

void MyStackPop(pMyStack This)

{struct worker *Iter;

  StackSize--;

  Iter=This->TopIter;

  delete[] This->TopIter->wb;

  This->TopIter=This->TopIter->last;

  if(Iter!=NULL)

   {free(Iter);}}

 

int MyStackEmpty(pMyStack This)

{if(This==NULL)

   {return 1;}

  if(This->TopIter==NULL)

   {return 1;}

  return 0;}

 

void MyStackDel(pMyStack This)

{if(This==NULL)

   {return;}

  while(MyStackEmpty(This)==0)

   {MyStackPop(This);}

  free(This);}

 

void MyStackSortExp(pMyStack This)

{buffStr *buffer;

  buffStr buf1;

  int i,j,k,n;

  n=StackSize;

  buffer=new buffStr[StackSize];

  for(i=0;i<n;i++)

   {buffer[n-i-1].wb=new WorkBook[This->TopIter->WBnum];

    buffer[n-i-1].WBnum=This->TopIter->WBnum;

    for(j=0;j<This->TopIter->WBnum;j++)

     {for(k=0;k<3;k++)

       {buffer[n-i-1].wb[j].StartDate[k]=This->TopIter->wb[j].StartDate[k];

buffer[n-i-1].wb[j].EndDate[k]=This->TopIter->wb[j].EndDate[k];}

strcpy(buffer[n-i-1].wb[j].FactName,This->TopIter->wb[j].FactName);}

    buffer[i].TableNum = This->TopIter->TableNum;

    strcpy(buffer[n-i-1].Surname,This->TopIter->Surname);

    strcpy(buffer[n-i-1].Name,This->TopIter->Name);

    strcpy(buffer[n-i-1].Patron,This->TopIter->Patron);

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

     {buffer[n-i-1].BirthDate[j]=This->TopIter->BirthDate[j];

      buffer[n-i-1].StDate[j]=This->TopIter->StDate[j];}

      buffer[n-i-1].Exp=This->TopIter->Exp;

    MyStackPop(This);}

  for(i=0;i<n;i++)

   {for(j=0;j<n-1;j++)

     {if(buffer[j].Exp>buffer[j+1].Exp)

       {buf1=buffer[j];

buffer[j]=buffer[j+1];

buffer[j+1]=buf1;}}}

  for(i=0;i<n;i++)

   {MyStackPush(This,buffer[i].TableNum,buffer[i].Surname,buffer[i].Name,buffer[i].Patron,buffer[i].BirthDate,buffer[i].StDate,buffer[i].wb,buffer[i].WBnum);}

  for(i=0;i<n;i++)

   {delete[] buffer[i].wb;}

  delete[] buffer;}

 

void MyStackSortTable(pMyStack This)

{buffStr *buffer;

  buffStr buf1;

  int i,j,k,n;

  n=StackSize;

  buffer=new buffStr[StackSize];

  for(i=0;i<n;i++)

   {buffer[n-i-1].wb=new WorkBook[This->TopIter->WBnum];

    buffer[n-i-1].WBnum=This->TopIter->WBnum;

    for(j=0;j<This->TopIter->WBnum;j++)

     {for(k=0;k<3;k++)

       {buffer[n-i-1].wb[j].StartDate[k]=This->TopIter->wb[j].StartDate[k];

buffer[n-i-1].wb[j].EndDate[k]=This->TopIter->wb[j].EndDate[k];}

strcpy(buffer[n-i-1].wb[j].FactName,This->TopIter->wb[j].FactName);}

    buffer[n-i-1].TableNum = This->TopIter->TableNum;

    strcpy(buffer[n-i-1].Surname,This->TopIter->Surname);

    strcpy(buffer[n-i-1].Name,This->TopIter->Name);

    strcpy(buffer[n-i-1].Patron,This->TopIter->Patron);

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

     {buffer[n-i-1].BirthDate[j]=This->TopIter->BirthDate[j];

      buffer[n-i-1].StDate[j]=This->TopIter->StDate[j];}

      buffer[n-i-1].Exp=This->TopIter->Exp;

    MyStackPop(This);}

  for(i=0;i<n;i++)

   {for(j=0;j<n-1;j++)

     {if(buffer[j].TableNum>buffer[j+1].TableNum)

       {buf1=buffer[j];

buffer[j]=buffer[j+1];

buffer[j+1]=buf1;}}}

  for(i=0;i<n;i++)

   {MyStackPush(This,buffer[i].TableNum,buffer[i].Surname,buffer[i].Name,buffer[i].Patron,buffer[i].BirthDate,buffer[i].StDate,buffer[i].wb,buffer[i].WBnum);}

  for(i=0;i<n;i++)

   {delete[] buffer[i].wb;}

  delete[] buffer;}

 

void MyStackPrint(pMyStack This)

{clrscr();

  buffStr *buffer;

  int i,j,k,n,p,up,down,ch;

  n=StackSize;

  buffer=new buffStr[n];

  for(i=0;i<n;i++)

   {buffer[n-i-1].wb=new WorkBook[This->TopIter->WBnum];

    buffer[n-i-1].WBnum=This->TopIter->WBnum;

    for(j=0;j<This->TopIter->WBnum;j++)

     {for(k=0;k<3;k++)

       {buffer[n-i-1].wb[j].StartDate[k]=This->TopIter->wb[j].StartDate[k];

buffer[n-i-1].wb[j].EndDate[k]=This->TopIter->wb[j].EndDate[k];}

strcpy(buffer[n-i-1].wb[j].FactName,This->TopIter->wb[j].FactName);}

    buffer[n-i-1].TableNum = This->TopIter->TableNum;

    strcpy(buffer[n-i-1].Surname,This->TopIter->Surname);

    strcpy(buffer[n-i-1].Name,This->TopIter->Name);

    strcpy(buffer[n-i-1].Patron,This->TopIter->Patron);

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

     {buffer[n-i-1].BirthDate[j]=This->TopIter->BirthDate[j];

      buffer[n-i-1].StDate[j]=This->TopIter->StDate[j];}

    buffer[n-i-1].Exp=This->TopIter->Exp;

    MyStackPop(This);}

  for(i=0;i<n;i++)

   {MyStackPush(This,buffer[i].TableNum,buffer[i].Surname,buffer[i].Name,buffer[i].Patron,buffer[i].BirthDate,buffer[i].StDate,buffer[i].wb,buffer[i].WBnum);}

  window(1,1,80,25);

  textbackground(BLUE);

  textcolor(WHITE);

 

  up=0;

  if(n<4)

   {down=n;}

  else

   {down=3;}

  do

   {ch=getch();

    clrscr();

    switch(ch)

      {case 80:

{if(down<n)

  {up++;

   down++;}

break;}

       case 72:

{if(up>0)

  {up--;

   down--;}}

break;}

    gotoxy(1,1);

    cprintf("Num   Surname    Name       Patron          Birth Date Start Date Exp");

    gotoxy(1,2);

    cprintf("_____________________________________________________________________");

 

    gotoxy(1,3);

    cprintf("%-5d %-10s %-10s %-15s %2d.%2d.%4d %2d.%2d.%4d %2d",buffer[up].TableNum,buffer[up].Surname,buffer[up].Name,buffer[up].Patron,buffer[up].BirthDate[0],buffer[up].BirthDate[1],buffer[up].BirthDate[2],buffer[up].StDate[0],buffer[up].StDate[1],buffer[up].StDate[2],buffer[up].Exp);

    gotoxy(1,4);

    cprintf("         Start Date    End Date     Factory");

    for(j=0;j<buffer[up].WBnum;j++)

     {gotoxy(1,5+j);

      cprintf("         %2d.%2d.%2d    %2d.%2d.%2d    %-10s",buffer[up].wb[j].StartDate[0],buffer[up].wb[j].StartDate[1],buffer[up].wb[j].StartDate[2],buffer[up].wb[j].EndDate[0],buffer[up].wb[j].EndDate[1],buffer[up].wb[j].EndDate[2],buffer[up].wb[j].FactName);}

    p=5+buffer[up].WBnum;

    gotoxy(1,p);

    cprintf("_____________________________________________________________________");

 

  for(i=up+1;i<down;i++)

   {gotoxy(1,1+p);

    cprintf("%-5d %-10s %-10s %-15s %2d.%2d.%4d %2d.%2d.%4d %2d",buffer[i].TableNum,buffer[i].Surname,buffer[i].Name,buffer[i].Patron,buffer[i].BirthDate[0],buffer[i].BirthDate[1],buffer[i].BirthDate[2],buffer[i].StDate[0],buffer[i].StDate[1],buffer[i].StDate[2],buffer[i].Exp);

    gotoxy(1,2+p);

    cprintf("         Start Date    End Date     Factory");

    for(j=0;j<buffer[i].WBnum;j++)

     {gotoxy(1,3+p+j);

      cprintf("         %2d.%2d.%2d    %2d.%2d.%2d    %-10s",buffer[i].wb[j].StartDate[0],buffer[i].wb[j].StartDate[1],buffer[i].wb[j].StartDate[2],buffer[i].wb[j].EndDate[0],buffer[i].wb[j].EndDate[1],buffer[i].wb[j].EndDate[2],buffer[i].wb[j].FactName);}

    p=p+3+buffer[i].WBnum;

    gotoxy(1,p);

    cprintf("_____________________________________________________________________");}}

  while(ch!=27);

  for(i=0;i<n;i++)

   {delete[] buffer[i].wb;}

  delete[] buffer;

  textattr(7);}

 

void MyStackDelete(pMyStack This,int delnum)

{int i,j,k,n;

  buffStr *buffer;

  n=StackSize-delnum+1;

  buffer=new buffStr[n];

  for(i=0;i<n;i++)

   {buffer[n-i-1].wb=new WorkBook[This->TopIter->WBnum];

    buffer[n-i-1].WBnum=This->TopIter->WBnum;

    for(j=0;j<This->TopIter->WBnum;j++)

     {for(k=0;k<3;k++)

       {buffer[n-i-1].wb[j].StartDate[k]=This->TopIter->wb[j].StartDate[k];

buffer[n-i-1].wb[j].EndDate[k]=This->TopIter->wb[j].EndDate[k];}

strcpy(buffer[n-i-1].wb[j].FactName,This->TopIter->wb[j].FactName);}

    buffer[n-i-1].TableNum = This->TopIter->TableNum;

    strcpy(buffer[n-i-1].Surname,This->TopIter->Surname);

    strcpy(buffer[n-i-1].Name,This->TopIter->Name);

    strcpy(buffer[n-i-1].Patron,This->TopIter->Patron);

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

     {buffer[n-i-1].BirthDate[j]=This->TopIter->BirthDate[j];

      buffer[n-i-1].StDate[j]=This->TopIter->StDate[j];}

    buffer[n-i-1].Exp=This->TopIter->Exp;

    MyStackPop(This);}

  for(i=1;i<n;i++)

   {MyStackPush(This,buffer[i].TableNum,buffer[i].Surname,buffer[i].Name,buffer[i].Patron,buffer[i].BirthDate,buffer[i].StDate,buffer[i].wb,buffer[i].WBnum);}

  for(i=0;i<n;i++)

   {delete[] buffer[i].wb;}

  delete[] buffer;}

 

void menuWrite(char *it[],int itCount,int itSelect)

{int i;

  for(i=0;i<itCount;i++)

   {gotoxy(3,i*2+2);

    if(i!=itSelect)

     {textbackground(wndbackgr);

      cprintf("%d %-16s",i+1,it[i]);}

    else

     {textattr(sel);

      textbackground(txtbackgr);

      cprintf("%d %-16s",i+1,it[i]);

      textcolor(RED);}}}

 

 

 

int menuMain(char *it[],int num)

{int x,itSelect,ch,run=1;

  char buf[4096];

  gettext(10,2,60,24,buf);

  window(10,2,60,24);

  textattr(norm);

  textbackground(wndbackgr);

  clrscr();

  itSelect=0;

  menuWrite(it,num,itSelect);

  while(run)

   {ch=getch();

    switch(ch)

     {case 13:

       {switch(itSelect)

{case 0:

   {x=0;

    break;}

  case 1:

   {x=1;

    break;}

  case 2:

   {x=2;

    break;}

  case 3:

   {x=3;

    break;}

  case 4:

   {x=4;

    break;}

  case 5:

   {x=5;

    break;}

  case 6:

   {x=6;

    break;}

  case 7:

   {x=7;

    break;}

  case 8:

  {x=8;

    break;}

  case 9:

   {x=9;

    break;}

  case 10:

   {x=10;

    break;}}

run=0;

break;}

      case 27:

       {run=0;

x=-1;

break;}

      case 0:

       {ch=getch();

switch(ch)

{case 72:

   {itSelect=itSelect?itSelect-1:num-1;

    menuWrite(it,num,itSelect);

    break;}

  case 80:

   {itSelect=itSelect<num-1?itSelect+1:0;

    menuWrite(it,num,itSelect);

    break;}}}}}

  window(1,1,80,25);

  textbackground(BLACK);

  puttext(10,2,60,24,buf);

  return x;}

 

 

void SaveFile(pMyStack This,int fl)

{int i,n,j,k;

  char path[50]="C:/curs.txt";

  if(fl)

   {clrscr();

    cout<<endl<<"Enter path to the file: ";

    cin>>path;

    clrscr();}

  FILE * f;

  f=fopen(path,"wt");

  if(!f)

   {clrscr();

    cout<<"Can't open this file";

    getch();

    exit(1);}

  buffStr *buffer;

  n=StackSize;

  buffer=new buffStr[StackSize];

  for(i=0;i<n;i++)

   {buffer[i].wb=new WorkBook[This->TopIter->WBnum];

    buffer[i].WBnum=This->TopIter->WBnum;

    for(j=0;j<This->TopIter->WBnum;j++)

     {for(k=0;k<3;k++)

       {buffer[i].wb[j].StartDate[k]=This->TopIter->wb[j].StartDate[k];

buffer[i].wb[j].EndDate[k]=This->TopIter->wb[j].EndDate[k];}

strcpy(buffer[i].wb[j].FactName,This->TopIter->wb[j].FactName);}

    buffer[i].TableNum = This->TopIter->TableNum;

    strcpy(buffer[i].Surname,This->TopIter->Surname);

    strcpy(buffer[i].Name,This->TopIter->Name);

    strcpy(buffer[i].Patron,This->TopIter->Patron);

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

     {buffer[i].BirthDate[j]=This->TopIter->BirthDate[j];

      buffer[i].StDate[j]=This->TopIter->StDate[j];}

      buffer[i].Exp=This->TopIter->Exp;

    MyStackPop(This);}

  for(i=0;i<n;i++)

   {MyStackPush(This,buffer[n-i-1].TableNum,buffer[n-i-1].Surname,buffer[n-i-1].Name,buffer[n-i-1].Patron,buffer[n-i-1].BirthDate,buffer[n-i-1].StDate,buffer[n-i-1].wb,buffer[n-i-1].WBnum);}

  i=0;

  while(i<n)

   {fprintf(f,"%d %s %s %s %d %d %d %d %d %d %d ",buffer[n-i-1].TableNum,buffer[n-i-1].Surname,buffer[n-i-1].Name,buffer[n-i-1].Patron,buffer[n-i-1].BirthDate[0],buffer[i].BirthDate[1],buffer[n-i-1].BirthDate[2],buffer[n-i-1].StDate[0],buffer[n-i-1].StDate[1],buffer[n-i-1].StDate[2],buffer[n-i-1].WBnum);

    for(j=0;j<buffer[i].WBnum;j++)

     {fprintf(f,"%d %d %d %d %d %d %s ",buffer[n-i-1].wb[j].StartDate[0],buffer[n-i-1].wb[j].StartDate[1],buffer[n-i-1].wb[j].StartDate[2],buffer[n-i-1].wb[j].EndDate[0],buffer[n-i-1].wb[j].EndDate[1],buffer[n-i-1].wb[j].EndDate[2],buffer[n-i-1].wb[j].FactName);}

Информация о работе Обработка записей