Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++|Builder] Задача со сложной структурой данных


Автор: Conqueror 23.12.2008, 10:04
Помогите решить задачу

По результатам обследования предприятий выяснить процентное выполнение плана по персоналу. Для каждого предприятия известно: наименование предприятия, фактическая численность персонала (промышленного и непромышленного) и плановая численность всего персонала. Число предприятий не более  30. Результаты распечатать в виде таблицы:
user posted image
Указания: Заполнить исходную таблицу и сортировать ее по уменьшению значений второго столбца. После этого в цикле, пока не откажется поль-зователь
•    запрашивать нижнюю границу процента выполнения плана по персона-лу,
•    копировать из исходной в рабочую таблицу строки с процентом выпол-нения плана по персоналу, большим заданного,
•    выявлять предприятие с наименьшей долей непромышленного персо-нала и запоминать его наименование,  
•    выдавать сведения о предприятиях. 


Какие-то наработки уже есть:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "math.h"
#include "stdio.h"
#include "string.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------



void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->Cells[0][0]="¹";
StringGrid1->Cells[0][1]="ï/ï";
StringGrid1->Cells[1][0]="Íàèìåíîâàíèå";
StringGrid1->Cells[1][1]="Ïðåäïðèÿòèÿ";
StringGrid1->Cells[2][0]="Âñåãî";
StringGrid1->Cells[2][1]="ïåðñîíàëà ïî ïëàíó";
StringGrid1->Cells[3][0]="Ôàêòè÷åñêè Ïåðñîíàëà";
StringGrid1->Cells[3][1]="Ïðîìûøëåííûé ";

StringGrid1->Cells[4][1]="Íåïðîìûøëåíûé ïåðñîíàëà";
  StringGrid1->Cells[5][0]="Äîëÿ";
  StringGrid1->Cells[5][1]="Íåïðîìûøëåíîãî ïåðñîíàëà";
StringGrid1->Cells[6][0]="Âûïîëíåíèå";
StringGrid1->Cells[6][1]="ïëàíà ïî ïåðñîíàëó";


StringGrid1->ColCount=7;
StringGrid1->RowCount=3;
}
struct TAB
{
char name[20];
int vsego;
int prom;
int nprom;
};
//---------------------------------------------------------------------------

void __fastcall TForm1::N3Click(TObject *Sender)
{
FILE*f; int i,n; TAB x;
if (SaveDialog1->Execute())
{
f=fopen (SaveDialog1->FileName.c_str(),"wb");
if(f==NULL)
{
 ShowMessage("Error open file");
exit(0);
}
n=StringGrid1->RowCount;
for(i=2; i<n; i++)
{
strcpy(x.name, StringGrid1->Cells[1][i].c_str());
x.vsego=StrToInt(StringGrid1->Cells[2][i]);
x.prom=StrToInt(StringGrid1->Cells[3][i]);
x.nprom=StrToInt(StringGrid1->Cells[4][i]);
fwrite(&x,sizeof(x),1,f);
}
fclose(f);
}
}




//---------------------------------------------------------------------------

void __fastcall TForm1::N4Click(TObject *Sender)
{
FILE*f; int i,n; TAB x;
if(OpenDialog1->Execute())
{
f=fopen(OpenDialog1->FileName.c_str(),"rb");
if (f==NULL)
{
ShowMessage("Error to file");
exit(0);
}
i=2;
while(fread(&x,sizeof(x),1,f))
{
StringGrid1->Cells[0][i]=i-1;
StringGrid1->Cells[1][i]=x.name;
StringGrid1->Cells[2][i]=x.vsego;
StringGrid1->Cells[3][i]=x.prom;
StringGrid1->Cells[4][i]=x.nprom;
i++;
}
fclose(f); }
}

//---------------------------------------------------------------------------




void __fastcall TForm1::N5Click(TObject *Sender)
{
float vsego,nprom,prom,dolya,plan;
int n,i;
n=StringGrid1->RowCount;
for(i=2;i<n;i++)
{
nprom=StrToFloat(StringGrid1->Cells[4][i]);
//plan=StrToFloat(StringGrid1->Cells[5][i]);
vsego=StrToFloat(StringGrid1->Cells[2][i]);
prom=StrToFloat(StringGrid1->Cells[3][i]);
dolya=nprom/vsego*100;
StringGrid1->Cells[5][i]=FloatToStrF(dolya,ffFixed,5,2);
plan=(nprom+prom)/vsego*100;
StringGrid1->Cells[6][i]=FloatToStrF(plan,ffFixed,5,2);


}



}

Автор: mrbrooks 23.12.2008, 10:25
Conqueror, я бы использовал БД.

Автор: Conqueror 23.12.2008, 10:39
Цитата(mrbrooks @  23.12.2008,  10:25 Найти цитируемый пост)
Conqueror, я бы использовал БД. 


Мне нужно именно по этому принципу 

Автор: Conqueror 24.12.2008, 11:04
народ помогите, там немного осталось кода дописать

Автор: likehood 24.12.2008, 11:33
Цитата(Conqueror @  24.12.2008,  11:04 Найти цитируемый пост)
народ помогите, там немного осталось кода дописать

Это тебе так кажется.
На самом деле, там есть еще не мало вопросов. Например, куда будет выводиться вторая таблица, как организовать ввод пользователем нижней границы, как сортировать строчки и т.д.
Здесь тебе могут помочь с логикой программы, но делать за тебя GUI мало кто возьмется.

Автор: Conqueror 25.12.2008, 15:34
Цитата(likehood @  24.12.2008,  11:33 Найти цитируемый пост)
куда будет выводиться вторая таблица

Там вроде одна таблица

Автор: Conqueror 31.12.2008, 09:21
Кто-нибудь может помочь?

Автор: Conqueror 8.1.2009, 12:47
UP!

Автор: Conqueror 12.1.2009, 10:23
UP!

Автор: Conqueror 17.1.2009, 14:31
Задача решена! Тема закрыта!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)