1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
| #include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
#include <string.h>
struct Vedomost
{
char FIO[255];
char Doljnost[255];
int Money = 0;
int Bolnychnyy = 0;
float Nalog = 0;
float Profsouz = 0;
float Zarplata = 0;
char Otmetka;
Vedomost *Next = NULL;
};
Vedomost *TURN;
FILE *file;
Vedomost n;
void SaveToFile(Vedomost *Head){
file = fopen("D:\\base.txt", "a+b");
if (Head == NULL){//конец очереди
fclose(file);
}
else {
fwrite(&(*Head), 519, 1, file);
fclose(file);
SaveToFile(Head->Next);
}
}
// процедура загрузки списка из файла
void LoadFromFile(Vedomost** Head){
file = fopen("D:\\base.txt", "r+b");
fseek(file, 519, SEEK_CUR); //перемещение указателя в текущее положение файла
if (char c = getc(file) == EOF){
fclose(file);
return; //завершение выполнения функции и передача управления вызывающей функции
}
else{
fread(&(*Head), 519, 1, file);
*Head = new Vedomost();
fclose(file);
(*Head)->Nalog = ((*Head)->Money + (*Head)->Bolnychnyy)*0.13;
(*Head)->Profsouz = ((*Head)->Money + (*Head)->Bolnychnyy)*0.01;
(*Head)->Zarplata = (*Head)->Money + (*Head)->Bolnychnyy - (*Head)->Nalog - (*Head)->Profsouz;
LoadFromFile(&(*Head)->Next);
}
}
void AddToTurn(Vedomost **Head, Vedomost n){
if ((*Head) == NULL){
*Head = new Vedomost(); strcpy((*Head)->FIO, n.FIO); strcpy((*Head)->Doljnost, n.Doljnost); (*Head)->Money = n.Money; (*Head)->Bolnychnyy = n.Bolnychnyy;
(*Head)->Nalog = n.Nalog; (*Head)->Profsouz = n.Profsouz; (*Head)->Zarplata = n.Zarplata; (*Head)->Otmetka = n.Otmetka;
// В область памяти Head помещаются значения временного списка n
(*Head)->Next = NULL;
}
else {
AddToTurn((&(*Head)->Next), n);
}
}
void AddToTurn2(){
printf("Введите фамилию, имя и отчество\n"); // процедура ввода элементов списка
scanf("%s", n.FIO);
printf("\nВведите должность\n");
scanf("%s", n.Doljnost);
printf("\nВведите оклад\n");
int a;
scanf("%d", &a);
n.Money = a;
printf("\nВведите оплату по б/л\n");
scanf("%d", &a);
n.Bolnychnyy = a;
printf("\nВведите отметку о получении\n");
scanf("%s", &n.Otmetka);
// считывание введенных значений
n.Nalog = (n.Money + n.Bolnychnyy) * 0.13;
n.Profsouz = (n.Money + n.Bolnychnyy)*0.01;
n.Zarplata = n.Money + n.Bolnychnyy - n.Nalog - n.Profsouz;
// расчет значений для некоторых полей
AddToTurn(&TURN, n); // добавление элемента из списка n в список для всех элементов TURN с использованием процедуры AddToTurn
} |