Автор работы: Пользователь скрыл имя, 18 Марта 2014 в 23:39, курсовая работа
Представление данных в виде структур применяется в основном при машинной обработке документов. Любой документ делится на три части: «шапка», колонки и строки. Каждая строка документа является записью, которая представляет из себя единое целое и состоит из отдельных данных, называемых реквизитами, с разной формой (числа, буквенные рядки и т.д.). Цель курсовой работы – освоить способы организации программ при решении задач с использованием структур. Проанализирована задача и выведены методы ее программной реализации. Написана программа для решения индивидуального задания. В курсовой работе использованы приемы передачи массива записей в функцию, организации графического интерфейса в текстовом режиме. Реализована возможность построения графика.
Вступление …………………..….….……………….……… ..… 4
Постановка задачи .…………………………………………. 5
Анализ существующих методов работы со структурами .6
Описание программы …………………………………….... 7
Общие сведения ……………………………………….. 7
Исходные данные …………….………………………. 13
Обработанные данные ………………………………... 14
Переменные, константы и функции ………..……….. 15
Выводы …………………………………………………………... 17
Функції
Прототип |
Описання |
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(
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(
NewIter->last=This->TopIter;
NewIter->wb=new WorkBook[WBnum];
NewIter->TableNum=TableNum;
strcpy(NewIter->Surname,
strcpy(NewIter->Name,Name);
strcpy(NewIter->Patron,Patron)
for(i=0;i<3;i++)
{NewIter->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]=
NewIter->wb[i].EndDate[j]=wb[
strcpy(NewIter->wb[i].FactName
exp=exp+(NewIter->wb[i].
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->
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->
for(j=0;j<This->TopIter->
{for(k=0;k<3;k++)
{buffer[n-i-1].wb[j].
buffer[n-i-1].wb[j].EndDate[k]
strcpy(buffer[n-i-1].wb[j].
buffer[i].TableNum = This->TopIter->TableNum;
strcpy(buffer[n-i-1].Surname,
strcpy(buffer[n-i-1].Name,
strcpy(buffer[n-i-1].Patron,
for(j=0;j<3;j++)
{buffer[n-i-1].BirthDate[j]=
buffer[n-i-1].StDate[j]=This->
buffer[n-i-1].Exp=This->
MyStackPop(This);}
for(i=0;i<n;i++)
{for(j=0;j<n-1;j++)
{if(buffer[j].Exp>buffer[j+1].
{buf1=buffer[j];
buffer[j]=buffer[j+1];
buffer[j+1]=buf1;}}}
for(i=0;i<n;i++)
{MyStackPush(This,buffer[i].
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->
for(j=0;j<This->TopIter->
{for(k=0;k<3;k++)
{buffer[n-i-1].wb[j].
buffer[n-i-1].wb[j].EndDate[k]
strcpy(buffer[n-i-1].wb[j].
buffer[n-i-1].TableNum = This->TopIter->TableNum;
strcpy(buffer[n-i-1].Surname,
strcpy(buffer[n-i-1].Name,
strcpy(buffer[n-i-1].Patron,
for(j=0;j<3;j++)
{buffer[n-i-1].BirthDate[j]=
buffer[n-i-1].StDate[j]=This->
buffer[n-i-1].Exp=This->
MyStackPop(This);}
for(i=0;i<n;i++)
{for(j=0;j<n-1;j++)
{if(buffer[j].TableNum>buffer[
{buf1=buffer[j];
buffer[j]=buffer[j+1];
buffer[j+1]=buf1;}}}
for(i=0;i<n;i++)
{MyStackPush(This,buffer[i].
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->
for(j=0;j<This->TopIter->
{for(k=0;k<3;k++)
{buffer[n-i-1].wb[j].
buffer[n-i-1].wb[j].EndDate[k]
strcpy(buffer[n-i-1].wb[j].
buffer[n-i-1].TableNum = This->TopIter->TableNum;
strcpy(buffer[n-i-1].Surname,
strcpy(buffer[n-i-1].Name,This
strcpy(buffer[n-i-1].Patron,
for(j=0;j<3;j++)
{buffer[n-i-1].BirthDate[j]=
buffer[n-i-1].StDate[j]=This->
buffer[n-i-1].Exp=This->
MyStackPop(This);}
for(i=0;i<n;i++)
{MyStackPush(This,buffer[i].
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,
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].
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,
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].
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->
for(j=0;j<This->TopIter->
{for(k=0;k<3;k++)
{buffer[n-i-1].wb[j].
buffer[n-i-1].wb[j].EndDate[k]
strcpy(buffer[n-i-1].wb[j].
buffer[n-i-1].TableNum = This->TopIter->TableNum;
strcpy(buffer[n-i-1].Surname,
strcpy(buffer[n-i-1].Name,
strcpy(buffer[n-i-1].Patron,
for(j=0;j<3;j++)
{buffer[n-i-1].BirthDate[j]=
buffer[n-i-1].StDate[j]=This->
buffer[n-i-1].Exp=This->
MyStackPop(This);}
for(i=1;i<n;i++)
{MyStackPush(This,buffer[i].
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:
menuWrite(it,num,itSelect);
break;}
case 80:
{itSelect=itSelect<num-1?
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-
for(j=0;j<This->TopIter->
{for(k=0;k<3;k++)
{buffer[i].wb[j].StartDate[k]=
buffer[i].wb[j].EndDate[k]=
strcpy(buffer[i].wb[j].
buffer[i].TableNum = This->TopIter->TableNum;
strcpy(buffer[i].Surname,This-
strcpy(buffer[i].Name,This->
strcpy(buffer[i].Patron,This->
for(j=0;j<3;j++)
{buffer[i].BirthDate[j]=This->
buffer[i].StDate[j]=This->
buffer[i].Exp=This->TopIter->
MyStackPop(This);}
for(i=0;i<n;i++)
{MyStackPush(This,buffer[n-i-
i=0;
while(i<n)
{fprintf(f,"%d %s %s %s %d %d %d %d %d %d %d ",buffer[n-i-1].TableNum,
for(j=0;j<buffer[i].WBnum;j++)
{fprintf(f,"%d %d %d %d %d %d %s ",buffer[n-i-1].wb[j].