Завдання: Сформувати файл “ЕХ”, що містить відомості про експорт товарів такого зразка: порядковий номер запису, найменування,
Завдання: Сформувати файл “А”, що містить інформацію про зарплату співробітників: порядковий номер запису, прізвище, ім`я та по-батькові, посада, посадовий оклад, рік народження. Виокристовуючи ці дані, визначити, у кого із інженерів найбільша, а у кого найменша зарплата. Забезпечити можливість поповнення файлу “А” з клавіатури, а також вилучення обраних по порядковому номеру записів. Після модифікації файлу “А” інформація про найбільшу і найменшу зарплату повинна оновлюватись автоматично. Забезпечити можливість відновлення попередньої версії модифікованого файлу.
#include <conio.h>
#include <stdio.h>
#include <string.h>
struct stSpivrobitnuk
{
char sPrizv[11];
char sImja[11];
char sPobat[11];
char sPosada[11];
int iOklad;
int iYear;
stSpivrobitnuk *next;
};
struct stSpivrobitnuk *first,*rob;
int records;
void addrecord()
{
char string[100];
int i;
char q;
clrscr();
printf("\nПрiзвище: ");
scanf("%s",string);
strncpy(rob->sPrizv,string,10);
printf("Iм`я: ");
scanf("%s",string);
strncpy(rob->sImja,string,10);
printf("По-батьковi: ");
scanf("%s",string);
strncpy(rob->sPobat,string,10);
printf("Посада: ");
scanf("%s",string);
strncpy(rob->sPosada,string,10);
printf("Оклад: ");
scanf("%i",&rob->iOklad);
printf("Рiк: ");
scanf("%i",&rob->iYear);
rob->next=new stSpivrobitnuk;
rob=rob->next;
rob->next=NULL;
records++;
}
void deleterecord(void)
{
int del,i=0;
clrscr();
printf("Введiть номер запису для вилучення:");
scanf("%i",&del);
if ((del<1)||(del>records)) return;
if (del==1) {
first=first->next;
} else {
rob=first;
while(rob->next!=NULL)
{
i++;
if (i==(del-1)) {
rob->next=(rob->next)->next;
break;
}
rob=rob->next;
}
}
records--;
return;
}
void showrecords(void)
{
int i=0;
clrscr();
rob=first;
printf("%-4s %-11s %-11s %-11s %-11s %-5s %-5s\n","N",
"Прізвище","Iм`я","По-батьковi","Посада","Оклад","Рiк");
printf("----------------------------------------------------\n");
while(rob->next!=NULL)
{
printf("%-4i %-11s %-11s %-11s %-11s %-5i %-5i\n",++i,
rob->sPrizv,rob->sImja,rob->sPobat,rob->sPosada,
rob->iOklad,rob->iYear);
rob=rob->next;
}
records=i;
printf("\nНатиснiть будь-яку клавiшу для продовження...");
getch();
};
void showmatch(void)
{
int i=0,flag,min,max;
char *c;
rob=first;
min=32767;
max=0;
//find min and max
while(rob->next!=NULL)
{
if (strcmp(rob->sPosada,"Iнженер")==0) {
if (min>rob->iOklad) min=rob->iOklad;
if (max<rob->iOklad) max=rob->iOklad;
}
rob=rob->next;
}
printf("%-4s %-11s %-11s %-11s %-11s %-5s %-5s\n","N",
"Прiзвище","Iм`я","По-батьковi","Посада","Оклад","Рiк");
printf("---------------------------------------------------\n");
//print
rob=first;
while(rob->next!=NULL)
{
i++;
if (strcmp(rob->sPosada,"Iнженер")==0) {
if ((rob->iOklad==min) || (rob->iOklad==max))
{
if(rob->iOklad==min)
printf(" MIN: ");
else
printf(" MAX: ");
printf("%-4i %-11s %-11s %-11s %-11s %-5i %-5i\n",
i,rob->sPrizv,rob->sImja,rob->sPobat,
rob->sPosada, rob->iOklad,rob->iYear);
}
}
rob=rob->next;
}
};
int save_to_file(char *filename)
{
FILE *out;
int i=0;
if ((out = fopen(filename, "w+"))
== NULL)
{
printf("Cannot create file '%s'.\n",filename);
return 1;
}
rob=first;
while(rob->next!=NULL)
{
fprintf(out,"%-3i %-10s %-10s %-10s %-10s %-4i %-4i\n",
++i,rob->sPrizv,rob->sImja,rob->sPobat,
rob->sPosada,rob->iOklad,rob->iYear);
rob=rob->next;
}
fclose(out);
return 0;
}
int read_from_file(char *filename)
{
FILE *in;
int i;
if ((in = fopen(filename, "r"))
== NULL)
{
printf("Cannot open file '%s'.\n",filename);
return 1;
}
records=0;
rob=first;
while(!feof(in))
{
fscanf(in,"%i %10s %10s %10s %10s %i %i\n",&i,
rob->sPrizv,rob->sImja,rob->sPobat,
rob->sPosada,&rob->iOklad,&rob->iYear);
records++;
if (rob->next==NULL) {
rob->next= new stSpivrobitnuk;
rob=rob->next;
rob->next=NULL;
} else {
rob=rob->next;
}
}
rob->next=NULL;
fclose(in);
return 0;
}
void main (void)
{
char c;
//create an empty list
records=0;
first = new stSpivrobitnuk;
rob=first;
rob->next=NULL;
//read saved database
read_from_file("A");
//create backup copy
save_to_file("A.BAK");
do{
//show menu
clrscr();
printf("[ESC] - Вихiд\n");
printf("[ 1 ] - Додaти запис\n");
printf("[ 2 ] - Вилучити запис\n");
printf("[ 3 ] - Показати записи\n");
printf("[ 4 ] - Вiдмiнити останню дiю\n");
printf("------------------------\n");
printf("В базi записiв: %i\n\n",records);
showmatch();
c=getch();
switch (c)
{
case '1': {
save_to_file("A.BAK"); //create a backup copy
addrecord();
save_to_file("A");
break;
}
case '2': {
save_to_file("A.BAK"); //create a backup copy
deleterecord();
save_to_file("A");
break;
}
case '3': {
showrecords();
break;
}
case '4': {
//restore from backup
read_from_file("A.BAK");
save_to_file("A");
break;
}
}
}while(c!=0x1B);
}
Вміст файлу “А”
1 Кузнецов Василь Романович Iнженер 440 1980
2 Перебийнic Олег Степанович Технiк 360 1984
3 Перейма Вiталiй Борисович Дизайнер 500 1980
4 Джмiль Олена Петрiвна Секретар 300 1985
5 Стаканов Степан Васильович Сантехнiк 270 1960
6 Дейнега Валентина Василiвна Iнженер 460 1979
7 Шлемко Тарас Павлович Програмicт 600 1986
8 Цибульский Євген Михайлович Iнженер 500 1970
9 Шеремета Василь Павлович Iнженер 700 1984
10 Коваленко Олена Михайлiвна Лаборант 400 1986