Разработка программы, обеспечивающую с помощью средств языка С++ ввод анкетных данных студентов и вывод в табличном виде списка студентов, отобранных по заданному условию, страница 3

case 3: vedprint(); break;

case 4: break;

default: cout <<”\n неверный пункт меню”;

}

void DBOpen()

{ struct student z;

cout <<”\n Введите название группы:”;

cin>> group;

ifstream fin(group); //создание потока и открытие файла

if (!fin)

{cout<<”\n нельзя открыть файл” ; return;}

while (!fin.read((char*)&z, sizeof(struct student).eof())

{if (Add()!=0)

lastàs=z;}

fin.close();

return;

}

int Add()

{ref=last;

if((last=(struct ELIST*) calloc (1,sizeof(ELIST)))!= Ø)

{lastànext= Ø;

if (head== Ø) //список пуст?

head=ref=last;

else

{refànext=last;

ref=last;}

return1 ;}

else

{last=ref;

cout<<\n нет памяти!”;

return Ø;

}}

void vedprint()

{struct vedomost sved;

char vedfile[10];

strcpy (vedfile, group);

strcpy )vedfile+6, “.txt”);

ofstream fout (vedfile);

if(!fout) {cout <<”\n нельзя открыть файл!”; return;}

fout<<zag<<group; //вывод в файл загаловка таблицы

fout<<line<<shapka<<line             //вывод шапки таблицы

for (ref=head; ref!= Ø; ref=refànext)

{sved.num=refàs.num;     заполнение структуры

sved.FIO=refàs.FIO;        sved типа vedomost

fout<<sved<<line; //вывод строки ведомости

}

fout.close();

}

Задача №4 (проверить, максимальный оклад, минимальный)

ДАНО:                        Анкетные данные сотрудников предприятия содержат следующие данные:

ф.и.о.

пол

возраст

должность

оклад

ТРЕБУЕТСЯ:            Составить программу на языке С++ для подсчёта отношения максимального оклада мужчин к максимальному окладу женщин.

РЕШЕНИЕ:

#include <stdio.h>

Struct anketa {

char fio[20];

char pol;

int vozr;

char dolg[10];

int oklad;

} mas[100];

int n=100;

int maxoklad(anketa mas[],int n,char zpol)

{

int i;max=0;

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

if (mas[i].pol==zpol) ff(mas[i].oklad>max))

max=mas[i].oklad;

return max;

}

Void VVODDAN(anketa mas[],int n)

{

int i;

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

{

Printf(“\n Введите ФИО:\n”);

Scanf(“%s”,&mas[i].fio);

Printf(“\n Введите пол:\n”);

Scanf(“%с”,&mas[i].pol);

Printf(“\n Введите возраст:\n”);

Scanf(“%s”,&mas[i].vozr);

Printf(“\n Введите должность:\n”);

Scanf(“%s”,&mas[i].dolg);

Printf(“\n Введите оклад:\n”);

Scanf(“%s”,&mas[i].oklad);

}

}

Main

{

int x=0,y=0;

VVODDAN(mas,n) ;

X=maxoklad (mas,n,’М’);

Y=minoklad (mas,n,’Ж’);

Printf (“\n Отношение максимального оклада мужчин к минимальному окладу женщин равно %f”,x/y);

}

Задача №5

ДАНО:                       Каждая запись файла сотрудников предприятия. содержит следующую информацию:

табельный номер

ф.и.о.

пол

должность

дата рождения

оклад

ТРЕБУЕТСЯ:

1.  Разработать программу на языке С++ для создания и обработки файла сотрудников предприятия.

2.  Выдать на печать в виде таблицы анкетные данные сотрудников-инженеров заданного возраста и оклада.

РЕШЕНИЕ:

#include <stdio.h>

#define line printf(“\n -----------------------------------------------------------------------”);

#define shapka printf(“\n|табельный номер|Ф.И.О.|пол| должность|день рождения|оклад|”);

Struct anketa {

int tnum;

char fio[20];

char pol;

char dolg[10];

int dd,mm,yy;

int oklad;

}

char filename[10]=”base.txt”;

file fptz;

void vvodBD( )

{

anketa zap;

fptr=fopen(filename,”a”);

if (fptr= =0)

printf(‘\n Файл %s невозможно открыть”,filename);

exit 1;              /*выход по ошибке*/

printf(“\n Введите таб.номер:\t”);

Scanf(“%d”,&zap.tnum);

Printf(“\n Введите ФИО:\t”);

Scanf(“%s”,&zap.fio);

Printf(“\n Введите пол:\t”);

Scanf(“%c”,&zap.pol);

Printf(“\n Введите должность:\t”);

Scanf(“%s”,&zap.dolg);

Printf(“\n Введите дату рождения dd.mm.yy:\t”);

Scanf(“%d%d%d”,&zap.dd,&zap.mm,&zap.yy);

Printf(“\nВведите оклад: \t”);

Scanf(“%d”,&zap.oklad);

fwrite(&zap,sizeof(struct anketa),1,fptr);

fclose(fptr);

return;

}

void printBD( )

{

Struct anketa zap;