Листинг
League.h
#include <fstream>
#ifndef LEAGUE_H
#define LEAGUE_H
using namespace std;
class league {
public:
char t[30];
int p;
int w;
int d;
int l;
int pts;
int gf;
int ga;
int gd;
void read_table (league*,int &n, ifstream&);
void write_table (league*, int);
void write_table_to_file (league*, int, ofstream&);
void sorting_pts (league*, int);
void sorting_gf (league*, int);
void find_team (league*, char*, char*, int);
void round_result (league*,league, league, int);
};
void league:: read_table (league a[],int &n, ifstream &in)
{
int i=0;
while (!in.eof()) {
in>>a[i].t>>a[i].p>>a[i].w>>a[i].d>>a[i].l>>a[i].gf>>a[i].ga;
a[i].pts=a[i].w*3+a[i].d;
a[i].gd=a[i].gf-a[i].ga;
i++;
}
n=i;
}
void league:: write_table (league a[], int n)
{
ofstream fout("in.txt");
fout<<a[0].t<<' '<<a[0].p<<' '<<a[0].w<<' '<<a[0].d<<' ';
fout<<a[0].l<<' '<<a[0].gf<<' '<<a[0].ga;
for (int i=1; i<n; i++)
{
fout<<endl;
fout<<a[i].t<<' '<<a[i].p<<' '<<a[i].w<<' '<<a[i].d<<' ';
fout<<a[i].l<<' '<<a[i].gf<<' '<<a[i].ga;
}
fout.close();
}
void league:: write_table_to_file (league a[], int n, ofstream &f)
{
//table's head
f.width(49);
f.fill('-');
f<<'-';
f<<'\n';
f.fill(' ');
f<<'|';
f.setf(ios::left);
f.width(15);
f<<"Team";
f.width(1);
f<<'|';
f.width(3);
f<<"P";
f.width(1);
f<<'|';
f.width(3);
f<<"W";
f.width(1);
f<<'|';
f.width(3);
f<<"D";
f.width(1);
f<<'|';
f.width(3);
f<<"L";
f.width(1);
f<<'|';
f.width(3);
f<<"PTS";
f.width(1);
f<<'|';
f.width(3);
f<<"GF";
f.width(1);
f<<'|';
f.width(3);
f<<"GA";
f.width(1);
f<<'|';
f.width(3);
f<<"GD";
f.width(1);
f<<'|';
f<<'\n';
f.width(49);
f.fill('-');
f<<'-'<<'\n';
f.fill(' ');
int i;
for (i=0; i<n; i++)
{
f<<'|';
f.width(15);
f<<a[i].t;
f.width(1);
f<<'|';
f.width(3);
f<<a[i].p;
f.width(1);
f<<'|';
f.width(3);
f<<a[i].w;
f.width(1);
f<<'|';
f.width(3);
f<<a[i].d;
f.width(1);
f<<'|';
f.width(3);
f<<a[i].l;
f.width(1);
f<<'|';
f.width(3);
f<<a[i].pts;
f.width(1);
f<<'|';
f.width(3);
f<<a[i].gf;
f.width(1);
f<<'|';
f.width(3);
f<<a[i].ga;
f.width(1);
f<<'|';
f.width(3);
f<<a[i].gd;
f.width(1);
f<<'|';
f<<'\n';
}
f.width(49);
f.fill('-');
f<<'-'<<'\n';
}
void league:: sorting_pts (league a[], int n)
{
int i,j;
league c;
for (i=0; i<n-1; i++) {
for (j=0; j<n-1-i; j++) {
if (a[j].pts<a[j+1].pts) {
c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
if (a[j].pts==a[j+1].pts){
if (a[j].gd<a[j+1].gd){
c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
}
}
void league:: sorting_gf (league a[], int n)
{
int i,j;
league c;
for (i=0; i<n-1; i++) {
for (j=0; j<n-1-i; j++) {
if (a[j].gf<a[j+1].gf) {
c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
if (a[j].gf==a[j+1].gf){
if (a[j].pts<a[j+1].pts){
c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
}
}
void league:: find_team (league a[], char *b1, char *b2, int n)
{
int i;
int min=a[0].d;
int max=a[0].gd;
strcpy(b1,a[0].t);
strcpy(b2,a[0].t);
for (i=1; i<n; i++) {
if (a[i].d<min) {
strcpy(b1,a[i].t);
min=a[i].d;
}
if (a[i].gd>max) {
strcpy(b2,a[i+1].t);
max=a[i].gd;
}
}
}
void league:: round_result (league a[], league b1, league b2, int n)
{
int i;
for (i=0; i<n; i++) {
if (strcmp(b1.t,a[i].t)==0) {
if (b1.gf>b2.gf) {
a[i].p++;
a[i].w++;
a[i].gf=a[i].gf+b1.gf;
a[i].ga=a[i].ga+b2.gf;
}
if (b1.gf==b2.gf) {
a[i].p++;
a[i].d++;
a[i].gf=a[i].gf+b1.gf;
a[i].ga=a[i].ga+b2.gf;
}
if (b1.gf<b2.gf) {
a[i].p++;
a[i].l++;
a[i].gf=a[i].gf+b1.gf;
a[i].ga=a[i].ga+b2.gf;
}
}
if (strcmp(b2.t,a[i].t)==0){
if (b2.gf>b1.gf) {
a[i].p++;
a[i].w++;
a[i].gf=a[i].gf+b2.gf;
a[i].ga=a[i].ga+b1.gf;
}
if (b2.gf==b1.gf) {
a[i].p++;
a[i].d++;
a[i].gf=a[i].gf+b2.gf;
a[i].ga=a[i].ga+b1.gf;
}
if (b2.gf<b1.gf) {
a[i].p++;
a[i].l++;
a[i].gf=a[i].gf+b2.gf;
a[i].ga=a[i].ga+b1.gf;
}
}
}
for (i=0; i<n; i++) {
a[i].pts=a[i].w*3+a[i].d;
a[i].gd=a[i].gf-a[i].ga;
}
}
#endif
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "League.h"
#include <fstream>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
league a[30];
league b1, b2;
int n=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ifstream fin ("in.txt");
//создаем шапку таблицы
StringGrid1->RowCount=2;
StringGrid1->Cells[0][0]="Team";
StringGrid1->Cells[1][0]='P';
StringGrid1->Cells[2][0]='W';
StringGrid1->Cells[3][0]='D';
StringGrid1->Cells[4][0]='L';
StringGrid1->Cells[5][0]="PTS";
StringGrid1->Cells[6][0]="GF";
StringGrid1->Cells[7][0]="GA";
StringGrid1->Cells[8][0]="GD";
a->read_table (a, n, fin);
//строим таблицу и записываем данные по строкам
for (int i=0; i<n; i++)
{
StringGrid1->RowCount ++;
StringGrid1->Cells[0][i+1]=a[i].t;
StringGrid1->Cells[1][i+1]=a[i].p;
StringGrid1->Cells[2][i+1]=a[i].w;
StringGrid1->Cells[3][i+1]=a[i].d;
StringGrid1->Cells[4][i+1]=a[i].l;
StringGrid1->Cells[5][i+1]=a[i].pts;
StringGrid1->Cells[6][i+1]=a[i].gf;
StringGrid1->Cells[7][i+1]=a[i].ga;
StringGrid1->Cells[8][i+1]=a[i].gd;
}
StringGrid1->RowCount --;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{ //считываем текст с Edit1 и Edit2 и записываем в функции
strcpy (b1.t, AnsiString (Edit1->Text).c_str());
strcpy (b2.t, AnsiString (Edit2->Text).c_str());
b1.gf=StrToInt(Edit3->Text);
b2.gf=StrToInt(Edit4->Text);
a->round_result(a, b1, b2, n);
a->write_table (a, n);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ //сортируем по очкам
a->sorting_pts (a, n);
a->write_table (a, n);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{ //сортируем по GF
a->sorting_gf (a,n);
a->write_table (a, n);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{ //поиск команд
char team_d[30];
char team_gd[30];
a->find_team (a, team_d, team_gd, n);
Memo1->Text=team_d;
Memo2->Text=team_gd;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{ //записываем в документ
ofstream out ("out.txt");
a->write_table_to_file(a,n,out);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{ //слияние двух списков
Memo3->Lines->Add(Memo1->Text);
Memo3->Lines->Add(Memo2->Text);
}
//---------------------------------------------------------------------------