Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕТОДИЧКА прикладное ПРОГРАМ.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Список представляет собой таблицу

№

Фамилия и инициалы

Курс

Группа

1

Иванов А.А.

1

ИСТ – 101

2

Сидоров Б.Б.

1

АСУ – 120

.

…

…

…

# include <iostream.h>

# include <fstream.h>

# include <string.h>

# include <iomanip.h>

# include <stdlib.h>

const int N=200;

struct student

{

char name[30];

int kurs;

char gr[7];

};

struct group

{

char gr[7];

int ng;

};

// Прототипы функций

student *inputstudentfile ( int &nn);

void outputstudent ( student st[], int nn);

group *perechengroup ( student st[], int nn, int &kk);

void outputgroup (group z[], int kk);

void outputgroupfile (group z[], int kk);

// Ввод исходного массива задолжников из файла

student *inputstudentfile ( int &nn)

{

ifstream fin;

char file[10];

char iniz[7]; // рабочая переменная для инициалов

student t; // рабочая переменная для подсчета записей в файле

student *ps;

int i;

cout << ”Имя файла:” ;

cin >> file;

fin.open(file);

if( fin==NULL) {cout<<”Файл не открыт.\n”; exit(1);}

// подсчет записей в файле

nn =0;

do {

fin >> t.name >> iniz >> t.kurs >> t.gr ;

nn++;

}while (fin.good());

nn--;

fin.close();

// выделение памяти для динамического массива

ps= new student [nn];

if( ps=NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}

// ввод массива задолжников из файла

fin.open(file);

if( fin==NULL) {cout<<”Файл не открыт.\n”; exit(1);}

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

{

fin >> ps[i].name >> iniz >> ps[i].kurs >> ps[i].gr ;

strcat( ps[i].name, “ “); // добавление инициалов через

strcat( ps[i].name, iniz); // пробел к фамилии

}

fin.close();

return ps;

}

// Вывод массива задолжников на экран

void outputstudent ( student st[], int nn)

{

cout<< “Фамилия и инициалы Курс Группа \n”;

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

cout << setw(16)<< st[i].name << setw(7)<< st[i].kurs << setw(8) << st[i].gr << endl ;

}

// Формирование перечня групп, имеющих задолжников

group *perechengroup ( student st[], int nn, int &kk)

{

int i,j,fl;

group *p;

// выделение памяти для динамического массива (перечня)

p= new group [nn];

if( p==NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}

kk=0;

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

{

fl=1;

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

if (strcmp(st[i].gr, p[j].gr) == 0) { fl=1; p[j].ng++; }

if (fl==1) { strcpy(p[k].gr, st[i].gr); p[k].ng =1; kk++; }}

return p;

}

// Вывод перечня групп, имеющих задолжников, на экран

void outputgroup (group z[], int kk)

{

cout<< “ Группа Кол-во \n”;

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

cout << setw(8)<< z[i].gr << setw(8)<< z[i].ng << << endl ; }

// Вывод перечня групп, имеющих задолжников, в файл

void outputgroupfile (group z[], int kk)

{

оfstream fout;

char file[10];

int i;

cout << ”Имя файла:” ;

cin >> file;

fout.open(file);

if( !fout.good()) {cout<<”Файл не открыт.\n”; exit(1);}

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

fout << setw(8)<< z[i].gr << setw(8)<< z[i].ng << << endl ;

fout.close(); }

/*основная функция программы */

void main()

{

student *pst; // указатель на исходную таблицу задолжников

int n; // n – число строк в исходной таблице

group *pz; // указатель на перечень групп, имеющих задолжников

int k; // к – число групп в перечне

pst=inputstudentfile ( n);

cout << ” Исходный массив структур. \n” ;

outputstudent ( pst, n);

pz=perechengroup ( pst, n, k);

cout << ” Перечень групп, имеющих задолжников. \n” ;

outputgroup ( pz, k);

outputgroupfile ( pz, k);

delete [] pst;

delete [] pz;

}