Учет и анализ заказов на поставку продукции
Создание и анализ графического интерфейса проекта для удобного хранения и обработки данных о заработной плате сотрудников фирмы. Основные методы соответствующих классов, влияющих на функции проекта. Разработка программного кода файлов, его листинг.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.01.2015 |
Размер файла | 138,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Введение
Цель работы: Получение навыков постановки задачи, алгоритмизации, программирования (с использованием объектно-ориентированного подхода) и отладки приложений на примере решения задачи учета и анализа заказов на поставку продукции в некоторой предметной области.
Задача проекта: Анализ заработной платы работников отдельной фирмы, включающий в себя расчёт средней и суммарной заработных плат сотрудников по определенной должности или режиму работы.
Описание процессов: В данном проекте исходные данные о сотрудниках загружаются в таблицу. Имеется возможность добавления, изменения и удаления записей в таблице, а также сохранения изменений в тестовый файл. Расчёт производится по нажатию соответствующих кнопок с последующим выводом результатов в текстовые поля и сохранением в файл. Добавлена возможность сортировки исходных данных по различным критериям (фамилия сотрудника, должность и т.д.), а также реализован поиск сотрудника по заданному значению фамилии или имени с последующим выводом на экран текстового сообщения о данном сотруднике. Также реализовано визуальное отображение данных с использованием столбчатой диаграммы.
В работе все функции работы с данных представлены и реализованы в виде методом соответствующих классов. Мною был разработан класс Data, содержащий в себе атрибут data, в котором располагается весь массив данных о сотрудниках, а также методы работы с этим массивом (например, поиск и сортировка массива).
1. Графический интерфейс проекта
2. Программный код файлов проекта
Файл CursovForm.h
// -
#ifndef CursovFormH
#define CursovFormH
// -
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
#include <ComCtrls.hpp>
#include <Chart.hpp>
#include <Series.hpp>
#include <TeEngine.hpp>
#include <TeeProcs.hpp>
// -
class TForm1: public TForm
{
__published: // IDE-managed Components
TListView *ListView1;
TSaveDialog *SaveDialog2;
TOpenDialog *OpenDialog1;
TButton *zapisi_bt;
TPanel *zapisi_panel;
TButton *new_bt;
TPanel *Panel1;
TLabel *Label7;
TLabel *Label8;
TLabel *Label9;
TLabel *Label10;
TLabel *Label11;
TLabel *Label12;
TEdit *new_name_fl;
TEdit *new_surname_fl;
TEdit *new_otch_fl;
TEdit *new_zar_fl;
TEdit *new_rez_fl;
TEdit *new_dol_fl;
TButton *add_bt;
TButton *delete_bt;
TButton *Button1;
TButton *CLEAN_BT;
TButton *read_bt;
TPanel *analiz_panel;
TPageControl *PageControl1;
TTabSheet *TabSheet1;
TLabel *Label2;
TLabel *Label1;
TLabel *Label3;
TButton *sr_job_bt;
TEdit *sr_job_fl;
TEdit *sum_job_fl;
TComboBox *ComboBox1;
TTabSheet *TabSheet2;
TLabel *Label6;
TLabel *Label4;
TLabel *Label5;
TButton *sr_rez_bt;
TEdit *sr_rez_fl;
TEdit *sum_rez_fl;
TComboBox *ComboBox2;
TButton *analiz_bt;
TTabSheet *TabSheet3;
TButton *sort_bt;
TButton *search_bt;
TButton *graf_bt;
TEdit *search_fl;
TButton *change_bt;
TComboBox *combo_sort;
void __fastcall read_btClick (TObject *Sender);
void __fastcall sr_job_btClick (TObject *Sender);
void __fastcall sr_rez_btClick (TObject *Sender);
void __fastcall new_btClick (TObject *Sender);
void __fastcall add_btClick (TObject *Sender);
void __fastcall delete_btClick (TObject *Sender);
void __fastcall del_rec_btClick (TObject *Sender);
void __fastcall CLEAN_BTClick (TObject *Sender);
void __fastcall Button1Click (TObject *Sender);
void __fastcall graf_btClick (TObject *Sender);
void __fastcall sort_btClick (TObject *Sender);
void __fastcall search_btClick (TObject *Sender);
void __fastcall zapisi_btClick (TObject *Sender);
void __fastcall analiz_btClick (TObject *Sender);
void __fastcall change_btClick (TObject *Sender);
void __fastcall search_flClick (TObject *Sender);
void __fastcall FormClose (TObject *Sender, TCloseAction &Action);
private: // User declarations
public: // User declarations
__fastcall TForm1 (TComponent* Owner);
};
// -
extern PACKAGE TForm1 *Form1;
// -
typedef struct
{
char surname[16];
char name[16];
char otch[16];
long zarplata;
char rezhim[16];
char dol[16];
} zapis;
// -
class Data
{
public:
zapis data[100];
void new_zapis (zapis* &data, int nrec, char* surname, char* name, char* otch, int zarplata, char* rez, char* dol);
void delete_zapis (zapis* &data, int num_del, int &nrec);
void sort_zp (zapis* data, int nrec);
void sort_surname (zapis* data, int nrec);
void sort_name (zapis* data, int nrec);
void sort_otch (zapis* data, int nrec);
void sort_rez (zapis* data, int nrec);
void sort_dol (zapis* data, int nrec);
void search (zapis* data, int nrec, char* key);
};
// -
void Data:delete_zapis (zapis* &data, int num_del, int &nrec)
{
for (int i=num_del; i<nrec-1; i++)
{
strcpy (data[i].surname, data [i+1].surname);
strcpy (data[i].name, data [i+1].name);
strcpy (data[i].otch, data [i+1].otch);
data[i].zarplata = data [i+1].zarplata;
strcpy (data[i].rezhim, data [i+1].rezhim);
strcpy (data[i].dol, data [i+1].dol);
}
nrec -;
}
// -
void Data:new_zapis (zapis* &data, int nrec, char* surname, char* name, char* otch, int zarplata, char* rez, char* dol)
{
strcpy (data[nrec].surname, surname);
strcpy (data[nrec].name, name);
strcpy (data[nrec].otch, otch);
data[nrec].zarplata = zarplata;
strcpy (data[nrec].rezhim, rez);
strcpy (data[nrec].dol, dol);
}
// -
void Data:sort_zp (zapis* data, int nrec)
{
int L =1, R = nrec-1, k = nrec-1;
do
{
for (int j = R; j >= L; j-)
if (data[j-1].zarplata > data[j].zarplata)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
L = k+1;
for (int j = L; j <= R; j++)
if (data[j-1].zarplata > data[j].zarplata)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
R = k-1;
} while (L <= R);
}
// -
void Data:sort_surname (zapis* data, int nrec)
{
int L =1, R = nrec-1, k = nrec-1;
do
{
for (int j = R; j >= L; j-)
if (strcmp(data [j-1].surname, data[j].surname)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
L = k+1;
for (int j = L; j <= R; j++)
if (strcmp(data [j-1].surname, data[j].surname)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
R = k-1;
} while (L <= R);
}
// -
void Data:sort_name (zapis* data, int nrec)
{
int L =1, R = nrec-1, k = nrec-1;
do
{
for (int j = R; j >= L; j-)
if (strcmp(data [j-1].name, data[j].name)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
L = k+1;
for (int j = L; j <= R; j++)
if (strcmp(data [j-1].name, data[j].name)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
R = k-1;
} while (L <= R);
}
// -
void Data:sort_otch (zapis* data, int nrec)
{
int L =1, R = nrec-1, k = nrec-1;
do
{
for (int j = R; j >= L; j-)
if (strcmp(data [j-1].otch, data[j].otch)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
L = k+1;
for (int j = L; j <= R; j++)
if (strcmp(data [j-1].otch, data[j].otch)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
R = k-1;
} while (L <= R);
}
// -
void Data:sort_rez (zapis* data, int nrec)
{
int L =1, R = nrec-1, k = nrec-1;
do
{
for (int j = R; j >= L; j-)
if (strcmp(data [j-1].rezhim, data[j].rezhim)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
L = k+1;
for (int j = L; j <= R; j++)
if (strcmp(data [j-1].rezhim, data[j].rezhim)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
R = k-1;
} while (L <= R);
}
// -
void Data:sort_dol (zapis* data, int nrec)
{
int L =1, R = nrec-1, k = nrec-1;
do
{
for (int j = R; j >= L; j-)
if (strcmp(data [j-1].dol, data[j].dol)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
L = k+1;
for (int j = L; j <= R; j++)
if (strcmp(data [j-1].dol, data[j].dol)>0)
{
zapis tmp = data [j-1]; data [j-1] = data[j]; data[j] = tmp;
k = j;
}
R = k-1;
} while (L <= R);
}
// -
void Data:search (zapis* data, int nrec, char* key)
{
bool check_done = false;
for (int i = 0; i<nrec; i++)
{
if ((! strcmp (key, data[i].surname))||(! strcmp (key, data[i].name))
||(! strcmp (key, data[i].otch)))
{
check_done = true;
char buffer[100];
sprintf (buffer, «Зарплата сотрудника ' % s % s % s' равна % d»,
data[i].surname, data[i].name, data[i].otch, data[i].zarplata);
ShowMessage(buffer);
sscanf (buffer, "»);
}
}
if (check_done == false) ShowMessage («404 Нет такого сотрудника»);
}
// -
int nrec = 0;
int select = -1;
bool b=false;
char DOL[16];
float AVE_DOL;
long SUM_DOL;
bool B_DOL;
char REZ[16];
float AVE_REZ;
long SUM_REZ;
bool B_REZ;
bool B_CHECK = false;
// -
class combo_box
{
public:
void reset_combobox();
};
// -
class box_rezhim: public combo_box
{
public:
char rezhim[16];
};
// -
class box_dol: public combo_box
{
public:
char dol[16];
};
// -
int count_combobox1 = 0;
int count_combobox2 = 0;
box_rezhim* Mass2 = new box_rezhim[100];
box_dol* Mass1 = new box_dol[100];
// -
#endif
Файл Unit2.h
// -
#ifndef Unit2H
#define Unit2H
// -
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Chart.hpp>
#include <ExtCtrls.hpp>
#include <Series.hpp>
#include <TeEngine.hpp>
#include <TeeProcs.hpp>
// -
class TForm2: public TForm
{
__published: // IDE-managed Components
TChart *Chart1;
TBarSeries *Series1;
private: // User declarations
public: // User declarations
__fastcall TForm2 (TComponent* Owner);
};
// -
extern PACKAGE TForm2 *Form2;
// -
#endif
Файл Cursov.cpp
// -
#include <vcl.h>
#pragma hdrstop
// -
USEFORM («CursovForm.cpp», Form1);
USEFORM («Unit1.cpp», Frame1); /* TFrame: File Type */
USEFORM («Unit2.cpp», Form2);
USEFORM («Unit3.cpp», DataModule3); /* TDataModule: File Type */
USEFORM («Unit4.cpp», Form4);
// -
WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm (__classid(TForm1), &Form1);
Application->CreateForm (__classid(TForm2), &Form2);
Application->CreateForm (__classid(TDataModule3), &DataModule3);
Application->CreateForm (__classid(TForm4), &Form4);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (…)
{
try
{
throw Exception(«»);
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
// -
Файл CursovForm.cpp
// -
// -
#include <vcl.h>
#include <stdio.h>
#include <string.h>
#pragma hdrstop
#include «Unit2.h»
#include «CursovForm.h»
// -
#pragma package (smart_init)
#pragma resource «*.dfm»
TForm1 *Form1;
// -
__fastcall TForm1:TForm1 (TComponent* Owner)
: TForm(Owner)
{
}
// -
Data object;
void __fastcall TForm1:read_btClick (TObject *Sender)
{
if (! OpenDialog1->Execute()) return;
FILE* inp = fopen (OpenDialog1->FileName.c_str(), «r»);
if (inp == NULL)
{
ShowMessage («404 Файл не найден»);
return;
}
while (! feof(inp))
{
memset (&object.data[nrec], 0, sizeof(zapis));
fscanf (inp, «%s % s % s % d % s % s», &object.data[nrec].surname,
&object.data[nrec].name, &object.data[nrec].otch, &object.data[nrec].zarplata,
&object.data[nrec].rezhim, &object.data[nrec].dol);
TListItem *Item = ListView1->Items->Add();
Item->Caption =object.data[nrec].surname;
Item->SubItems->Add (object.data[nrec].name);
Item->SubItems->Add (object.data[nrec].otch);
Item->SubItems->Add (object.data[nrec].zarplata);
Item->SubItems->Add (object.data[nrec].rezhim);
Item->SubItems->Add (object.data[nrec].dol);
nrec++;
}
count_combobox1 = 0;
for (int i=0; i<nrec; i++)
{
for (int j=0; j<count_combobox1; j++)
if (! strcmp (Mass1 [j].dol, object.data[i].dol))
b=true;
if (b==false) strcpy (Mass1 [count_combobox1++].dol, object.data[i].dol);
else b=false;
}
ComboBox1->Clear();
for (int i=0; i<count_combobox1; i++)
ComboBox1->Items->Add (Mass1 [i].dol);
count_combobox2 = 0;
for (int i=0; i<nrec; i++)
{
for (int j=0; j<count_combobox2; j++)
if (! strcmp (Mass2 [j].rezhim, object.data[i].rezhim))
b=true;
if (b==false) strcpy (Mass2 [count_combobox2++].rezhim, object.data[i].rezhim);
else b=false;
}
ComboBox2->Clear();
for (int i=0; i<count_combobox2; i++)
ComboBox2->Items->Add (Mass2 [i].rezhim);
fclose(inp);
}
// -
void __fastcall TForm1:new_btClick (TObject *Sender)
{
new_dol_fl->Clear();
new_name_fl->Clear();
new_otch_fl->Clear();
new_rez_fl->Clear();
new_surname_fl->Clear();
new_zar_fl->Clear();
if (Panel1->Visible == true)
Panel1->Visible = false;
else
Panel1->Visible = true;
}
// -
void __fastcall TForm1:add_btClick (TObject *Sender)
{
if ((new_dol_fl->Text == «»)||(new_name_fl->Text == «»)||
(new_otch_fl->Text == «»)||(new_rez_fl->Text == «»)||
(new_surname_fl->Text == «»)||(new_zar_fl->Text == «»))
{
ShowMessage («Заполните все поля!»);
return;
}
if (select == -1)
{
object.new_zapis (object.data, nrec, new_surname_fl->Text.c_str(),
new_name_fl->Text.c_str(),
new_otch_fl->Text.c_str(), StrToInt (new_zar_fl->Text),
new_rez_fl->Text.c_str(), new_dol_fl->Text.c_str());
TListItem *Item = ListView1->Items->Add();
Item->Caption = object.data[nrec].surname;
Item->SubItems->Add (object.data[nrec].name);
Item->SubItems->Add (object.data[nrec].otch);
Item->SubItems->Add (object.data[nrec].zarplata);
Item->SubItems->Add (object.data[nrec].rezhim);
Item->SubItems->Add (object.data [nrec++].dol);
}
else
{
object.new_zapis (object.data, nrec, new_surname_fl->Text.c_str(), new_name_fl->Text.c_str(), new_otch_fl->Text.c_str(), StrToInt (new_zar_fl->Text), new_rez_fl->Text.c_str(), new_dol_fl->Text.c_str());
ListView1->Items->Item[select]->Caption = new_surname_fl->Text;
ListView1->Items->Item[select]->SubItems->Strings[0] =
new_name_fl->Text;
ListView1->Items->Item[select]->SubItems->Strings[1] =
new_otch_fl->Text;
ListView1->Items->Item[select]->SubItems->Strings[2] =
new_zar_fl->Text;
ListView1->Items->Item[select]->SubItems->Strings[3] =
new_rez_fl->Text;
ListView1->Items->Item[select]->SubItems->Strings[4] =
new_dol_fl->Text;
select = -1;
new_dol_fl->Clear();
new_name_fl->Clear();
new_otch_fl->Clear();
new_rez_fl->Clear();
new_surname_fl->Clear();
new_zar_fl->Clear();
}
bool b=false;
count_combobox1 = 0;
for (int i=0; i<nrec; i++)
{
for (int j=0; j<count_combobox1; j++)
if (! strcmp (Mass1 [j].dol, object.data[i].dol))
b=true;
if (b==false) strcpy (Mass1 [count_combobox1++].dol, object.data[i].dol);
else b=false;
}
ComboBox1->Clear();
for (int i=0; i<count_combobox1; i++)
ComboBox1->Items->Add (Mass1 [i].dol);
count_combobox2 = 0;
for (int i=0; i<nrec; i++)
{
for (int j=0; j<count_combobox2; j++)
if (! strcmp (Mass2 [j].rezhim, object.data[i].rezhim))
b=true;
if (b==false) strcpy (Mass2 [count_combobox2++].rezhim, object.data[i].rezhim);
else b=false;
}
ComboBox2->Clear();
for (int i=0; i<count_combobox2; i++)
ComboBox2->Items->Add (Mass2 [i].rezhim);
}
// -
void __fastcall TForm1:sr_job_btClick (TObject *Sender)
{
char dol[16];
sscanf (ComboBox1->Text.c_str(), «%s», &dol);
strcpy (DOL, dol);
long sum_dol = 0;
int count = 0;
for (int i = 0; i<nrec; i++)
{
if (! strcmp (object.data[i].dol, dol))
{
sum_dol+= object.data[i].zarplata;
count++;
}
}
SUM_DOL = sum_dol;
if (count == 0)
{
ShowMessage («Такой должности нет в списке»);
B_DOL = true;
return;
}
float ave_dol = (float) sum_dol/(float) count;
AVE_DOL = ave_dol;
char buf[16];
sprintf (buf, «%.2f», ave_dol);
sr_job_fl->Text = buf;
sprintf (buf, «%d», sum_dol);
sum_job_fl->Text = buf;
}
// -
void __fastcall TForm1:sr_rez_btClick (TObject *Sender)
{
char rez[16];
sscanf (ComboBox2->Text.c_str(), «%s», &rez);
strcpy (REZ, rez);
long sum_rez = 0;
int count = 0;
for (int i = 0; i<nrec; i++)
{
if (! strcmp (object.data[i].rezhim, rez))
{
sum_rez+= object.data[i].zarplata;
count++;
}
}
SUM_REZ = sum_rez;
B_REZ = false;
if (count == 0)
{
ShowMessage («В списке нет людей с таким режимом работы»);
B_REZ = true;
return;
}
float ave_rez = (float) sum_rez/(float) count;
AVE_REZ = ave_rez;
char buf[16];
sprintf (buf, «%.2f», ave_rez);
sr_rez_fl->Text = buf;
sprintf (buf, «%d», sum_rez);
sum_rez_fl->Text = buf;
}
// -
void __fastcall TForm1:delete_btClick (TObject *Sender)
{
if (ListView1->Selected == NULL) ShowMessage («Сначала выберите запись»); else
{
if (MessageDlg («Вы точно хотите удалить запись?», mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
{
int num_del = ListView1->ItemIndex;
object.delete_zapis (object.data, num_del, nrec);
ListView1->Items->Item [num_del]->Delete();
}
}
bool b=false;
count_combobox1 = 0;
for (int i=0; i<nrec; i++)
{
for (int j=0; j<count_combobox1; j++)
if (! strcmp (Mass1 [j].dol, object.data[i].dol))
b=true;
if (b==false) strcpy (Mass1 [count_combobox1++].dol, object.data[i].dol);
else b=false;
}
ComboBox1->Clear();
for (int i=0; i<count_combobox1; i++)
ComboBox1->Items->Add (Mass1 [i].dol);
count_combobox2 = 0;
for (int i=0; i<nrec; i++)
{
for (int j=0; j<count_combobox2; j++)
if (! strcmp (Mass2 [j].rezhim, object.data[i].rezhim))
b=true;
if (b==false) strcpy (Mass2 [count_combobox2++].rezhim, object.data[i].rezhim);
else b=false;
}
ComboBox2->Clear();
for (int i=0; i<count_combobox2; i++)
ComboBox2->Items->Add (Mass2 [i].rezhim);
}
// -
void __fastcall TForm1:del_rec_btClick (TObject *Sender)
{
if (! SaveDialog2->Execute())
{
ShowMessage («Ошибка записи данных»);
return;
}
else
{
FILE* out = fopen (SaveDialog2->FileName.c_str(), «w»);
for (int i=0; i<nrec-1; i++)
{
fprintf (out, «%-9s%-11s%-14s % d%-9s % s\n», object.data[i].surname, object.data[i].name,
object.data[i].otch, object.data[i].zarplata, object.data[i].rezhim, object.data[i].dol);
}
fprintf (out, «%-9s%-11s%-14s % d%-9s % s», object.data[nrec].surname, object.data[nrec].name,
object.data[nrec].otch, object.data[nrec].zarplata, object.data[nrec].rezhim, object.data[nrec].dol);
fclose(out);
ShowMessage («Данные успешно записаны»);
}
}
// -
void __fastcall TForm1:CLEAN_BTClick (TObject *Sender)
{
ListView1->Clear();
nrec=0;
}
// -
void __fastcall TForm1: Button1Click (TObject *Sender)
{
FILE* out = fopen (SaveDialog2->FileName.c_str(), «w»);
if (! SaveDialog2->Execute())
{
ShowMessage («Ошибка записи в файл»);
fclose(out);
return;
}
for (int i=0; i<nrec-1; i++)
fprintf (out, «%-9s%-11s%-14s % d%-9s % s\n»,
ListView1->Items->Item[i]->Caption.c_str(),
ListView1->Items->Item[i]->SubItems->Strings[0].c_str(),
ListView1->Items->Item[i]->SubItems->Strings[1].c_str(),
StrToInt (ListView1->Items->Item[i]->SubItems->Strings[2].c_str()),
ListView1->Items->Item[i]->SubItems->Strings[3].c_str(),
ListView1->Items->Item[i]->SubItems->Strings[4].c_str());
fprintf (out, «%-9s%-11s%-14s % d%-9s % s»,
ListView1->Items->Item [nrec-1]->Caption.c_str(),
ListView1->Items->Item [nrec-1]->SubItems->Strings[0].c_str(),
ListView1->Items->Item [nrec-1]->SubItems->Strings[1].c_str(),
StrToInt (ListView1->Items->Item [nrec-1]->SubItems->Strings[2].c_str()), ListView1->Items->Item [nrec-1]->SubItems->Strings[3].c_str(),
ListView1->Items->Item [nrec-1]->SubItems->Strings[4].c_str());
ShowMessage («Данные успешно записаны»);
fclose(out);
}
// -
void __fastcall TForm1:graf_btClick (TObject *Sender)
{
Form2->Visible=true;
Form2->Series1->Clear();
for (int i=0; i<nrec; i++)
{
char buf[56];
sprintf (buf, «%s % s % s», object.data[i].surname, object.data[i].name,
object.data[i].otch);
switch (i % 10)
{
case 0: Form2->Series1->Add (object.data[i].zarplata, buf, clGreen); break;
case 1: Form2->Series1->Add (object.data[i].zarplata, buf, clYellow); break;
case 2: Form2->Series1->Add (object.data[i].zarplata, buf, clRed); break;
case 3: Form2->Series1->Add (object.data[i].zarplata, buf, clBlack); break;
case 4: Form2->Series1->Add (object.data[i].zarplata, buf, clSilver); break;
case 5: Form2->Series1->Add (object.data[i].zarplata, buf, clLime); break;
case 6: Form2->Series1->Add (object.data[i].zarplata, buf, clCream); break;
case 7: Form2->Series1->Add (object.data[i].zarplata, buf, clGray); break;
case 8: Form2->Series1->Add (object.data[i].zarplata, buf, clFuchsia); break;
case 9: Form2->Series1->Add (object.data[i].zarplata, buf, clHotLight); break;
default: Form2->Series1->Add (object.data[i].zarplata, buf, clWhite);
}
}
}
// -
void __fastcall TForm1:sort_btClick (TObject *Sender)
{
if (combo_sort->Text == «Зарплата»)
object.sort_zp (object.data, nrec);
else
if (combo_sort->Text == «Фамилия»)
object.sort_surname (object.data, nrec);
else
if (combo_sort->Text == «Имя»)
object.sort_name (object.data, nrec);
else
if (combo_sort->Text == «Отчество»)
object.sort_otch (object.data, nrec);
else
if (combo_sort->Text == «Режим работы»)
object.sort_rez (object.data, nrec);
else
if (combo_sort->Text == «Должность»)
object.sort_dol (object.data, nrec);
else
ShowMessage («Введите критерий сортировки!!!!!!!!!»);
ListView1->Clear();
for (int i = 0; i<nrec; i++)
{
TListItem *Item = ListView1->Items->Add();
Item->Caption = object.data[i].surname;
Item->SubItems->Add (object.data[i].name);
Item->SubItems->Add (object.data[i].otch);
Item->SubItems->Add (object.data[i].zarplata);
Item->SubItems->Add (object.data[i].rezhim);
Item->SubItems->Add (object.data[i].dol);
}
}
// -
void __fastcall TForm1:search_btClick (TObject *Sender)
{
char key[16];
strcpy (key, search_fl->Text.c_str());
object.search (object.data, nrec, key);
}
// -
void __fastcall TForm1:zapisi_btClick (TObject *Sender)
{
if (zapisi_panel->Visible == true) zapisi_panel->Visible = false; else
zapisi_panel->Visible = true;
}
// -
void __fastcall TForm1:analiz_btClick (TObject *Sender)
{
if (analiz_panel->Visible == true) analiz_panel->Visible = false; else
analiz_panel->Visible = true;
}
// -
void __fastcall TForm1:change_btClick (TObject *Sender)
{
if (ListView1->Selected == NULL)
{
ShowMessage («Сначала выберите запись»);
select = -1;
return;
}
else
{
if (Panel1->Visible == false) Panel1->Visible = true;
select = ListView1->ItemFocused->Index;
new_surname_fl->Text = object.data[select].surname;
new_name_fl->Text = object.data[select].name;
new_otch_fl->Text = object.data[select].otch;
new_zar_fl->Text = object.data[select].zarplata;
new_rez_fl->Text = object.data[select].rezhim;
new_dol_fl->Text = object.data[select].dol;
}
}
// -
void __fastcall TForm1:search_flClick (TObject *Sender)
{
if (search_fl->Text == «Введите имя сотрудника») search_fl->Text = «»;
}
// -
void __fastcall TForm1: FormClose (TObject *Sender, TCloseAction &Action)
{
delete [] Mass1;
delete [] Mass2;
}
// -
Выводы
Данный проект создан для удобного хранения и обработки данных о заработной плате сотрудников фирмы. В нём присутствует возможность быстрого расчёта среднего и суммарного значение величин заработных плат. Также имеются функции добавления, изменения и удаления записей, сортировки и поиска данных и моментального отображения изменений на форме. Все функции оформлены как различные методы соответствующих классов.
1) Объектно-ориентированный подход к программированию оказался очень удобным для реализации и решения различных задач, связанных с данным проектом.
2) Работа с выпадающими списками должностей и режимами работ сотрудников выполнена с использованием двух классов. Так как эти классы очень схожи, мной было принято решение о создании общего абстрактного класса combo_box с методом обновления данных в списке, а также двух классов, наследуемых от него (один для режима работа, другой - для должностей).
3) При реализации сортировок по различным атрибутам в работе используются практически идентичные методы сортировки в классе Data. В связи с этим целесообразно использование шаблонов для реализации этих методов.
4) Статический массив записей был заменен динамическим, что позволило сэкономить память и благоприятно сказалось на времени работы с массивом.
5) Мною был изучен компонент TChart, который я применил для отображения исходных данных в виде столбчатой диаграммы. Благодаря свойствам Axis и Legend можно работать с отображением координатных осей и легенды графика, а с помощью свойства Font можно выбирать цвет столбцов диаграммы, что облегчает визуальное восприятие графика.
6) В ходе работы с файловым вводом и выводом данных мною был приобретён опыт в работе с функциями из стандартной библиотеки работы с файлами <func.h>, а также с компонентами TSaveDialog и TOpenDialog.
7) Удобным оказалось использование диалогов с пользователем, реализующихся с помощью функций ShowMessage и MessageDlg, инструктирующие или предупреждающие пользователя.
8) Данный проект используется для создания упрощенной базы данных. Для более детального анализа поставленной задачи и создания более сложной базы данных эффективнее использовать другие специализированные программы, например Microsoft Office Access, так как в созданной мною базе данных храниться только основная информация и отсутствуют многие функции, позволяющие решать более сложные задачи.
Список литературы
интерфейс программный код графический
1. Программирование и основы алгоритмизации. / Шевченко А.В. - СПб: Издательство СПбГЭТУ «ЛЭТИ», 2011. 120 с.
2. C/C++. Программирование на языке высокого уровня / Павловская Т.А. - СПб: Издательство «Питер», 2003. -461 с.
3. Объектно-ориентированное программирование в С++/ Лафоре Р. - СПб: Издательство «Питер», 2004. 928 с.
Размещено на Allbest.ru
...Подобные документы
Анализ проектирования интерфейса программы. Выбор и назначение визуальных компонентов. Изучение экранных форм приложения. Модули, процедуры, функции проекта и их назначение. Листинг программного кода. Результаты работы автоматизированного продукта.
курсовая работа [1,9 M], добавлен 11.12.2017Рассмотрение условий работы сотрудников фирмы "Окна Марио". Составление базы данных для проектирования информационной системы учета и контроля заказов. Разработка проекта. Произведенный расчет экономической эффективности и экологичности программы.
дипломная работа [4,6 M], добавлен 29.08.2014Реляционная база данных. Создание и проектирование баз данных в среде Borland Delphi 7. Основные функции базы данных: учет информации об ассортименте продукции; учет сведений о дистрибьюторах фирмы. Назначение программы и инструкция пользователю.
курсовая работа [507,3 K], добавлен 22.06.2009Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.
курсовая работа [1,4 M], добавлен 07.08.2013Понятие базы данных, ее виды. Иерархическая, сетевая, реляционная модели данных. Создание автоматизированной системы "Учет зарплаты строительной фирмы". Анализ требований и выбор решений. Этапы создания базы данных. Источники финансирования проекта.
дипломная работа [1,4 M], добавлен 11.06.2013Разработка проекта приложения, содержащего локальную базу данных для хранения и обработки ведомости работы расчетно-кассового узла универсама. Процесс разработки интерфейса и проекта интерактивной системы. Запуск и отладка, инструкция по эксплуатации.
курсовая работа [34,2 K], добавлен 29.03.2011Создание информационной системы, способной автоматически выполнять учет продаж. Разработка физической модели базы данных, определение логических связей. Проектирование форм, запросов и графического интерфейса системы. Экономическая эффективность проекта.
дипломная работа [5,1 M], добавлен 02.10.2011Создание базы данных, автоматизирующей процесс ведения заказов продукции отделом организации. Описание предметной области. Построение инфологической модели. Задание имени проекта и его расположение. Схема связей между таблицами. Создание отчетов и форм.
курсовая работа [2,4 M], добавлен 03.03.2015Разработка и отладка программного проекта для осуществления автоматизированного складского учета материальных ценностей. Учет входящих заявок в базе данных от подразделений на получение материалов, осуществление их удобного просмотра и редактирования.
курсовая работа [610,1 K], добавлен 08.08.2013Проектирование информационной системы. Проект базы данных, проект пользовательского интерфейса системы, проекты реализации основных функций системы. Описание программного проекта: описание модулей (файлов) и подсистем проекта, глобальных данных.
курсовая работа [938,5 K], добавлен 31.10.2015Разработка и анализ интерфейса пользователя базы данных. Ознакомление с процессом поэтапного создания проекта и добавления файла локальной базы данных. Исследование и характеристика главных принципов программирования функциональной части интерфейса.
дипломная работа [3,0 M], добавлен 27.09.2017Особенности проектирования программы на языке С++ для обработки данных из таблиц базы данных. Основные функции программы, создание концептуальной модели базы данных и диаграммы классов, разработка интерфейса пользователя и запросов к базе данных.
курсовая работа [2,1 M], добавлен 08.06.2012Разработка проекта системы, программы, интерфейса взаимодействия пользователя с системой. Программная база для реализации проекта "Электронная администрация". Создание удобной среды для пользователей системы. Разработка форм входных и выходных данных.
дипломная работа [3,9 M], добавлен 20.06.2012Анализ современных форм представления статистических данных, используемых для выявления степени и уровня экономической асимметрии регионального развития. Создание удобного программного интерфейса для работы с базой данных. Разработка структуры модуля.
курсовая работа [2,1 M], добавлен 08.12.2013Разработка и реализация проекта информационной системы, предназначенной для хранения сведения о клиентах и недвижимости. Моделирование и реализация информационной системы. Разработка пользовательского интерфейса. Затраты на написание программы и отладку.
курсовая работа [1,0 M], добавлен 30.06.2022Разработка программного обеспечения, предназначенного для автоматизации деятельности туристической фирмы. Анализ и проектирование базы данных предметной области. Создание концептуальной, логической и физической моделей данных и программы их обработки.
курсовая работа [816,5 K], добавлен 05.02.2018Разработка программного обеспечения для ввода, хранения, редактирования и получения информации по материалам, клиентам, заказам, учету затрат и доходов строительной фирмы. Изучение предметной области; построение диаграммы потоков данных, структуры базы.
курсовая работа [1,1 M], добавлен 21.09.2015Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и оценка структур данных для ее хранения. Разработка основных алгоритмов решения и структурной схемы программного продукта. Проектирование интерфейса пользователя.
курсовая работа [449,8 K], добавлен 14.01.2011Сравнительная характеристика программ-аналогов. Разработка мультимедиа-проигрывателя по систематизированной обработке музыкальных файлов. Создание удобного пользовательского интерфейса. Поддержка списка воспроизведения, базовые функции управления.
курсовая работа [1,1 M], добавлен 02.02.2014Проектирование структуры и архитектуры программного продукта. Реализация программы конвертера файлов баз данных. Описание пользовательского интерфейса. Выбор порядка конвертации dbf файлов. Создание и исполнение шаблонов. Расчет себестоимости продукта.
дипломная работа [2,2 M], добавлен 21.06.2013