Вывести список сотрудников по отделам в порядке убывания стажа - C (СИ)
Формулировка задачи:
Информация о сотрудниках предприятия содержит:
- Ф.И.О.;
- номер отдела;
- должность;
- дату начала работы.
Вывести список сотрудников по отделам в порядке убывания ста¬жа.
Программа почти работает... Создает файл, но не выводит... и помогите пожалуйста с сортировкой...
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
#pragma argsused
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Sved
{
char Fio[50];
int nom[10];
char dol[50];
char data[50];
float S_Bal;
}zap;
char Spis[] = "d:\Sp.dat";
FILE *F_zap;
void main ()
{
int i, kodR, size = sizeof(Sved);
float s;
// clrscr();
while(1)
{
puts(" sozdanie - 1");
puts(" Prosmotr - 2");
puts(" Dobavlenie - 3");
puts(" Vixod - 0");
scanf("%d", &kodR);
switch(kodR)
{
case 1:
case 3:
if(kodR == 1)
F_zap = fopen(Spis, "w+b");
else
F_zap = fopen(Spis, "a+b");
while(4)
{
puts(" FIO (end = 0)");
scanf("%s", zap.Fio);
if ((zap.Fio[0])=='0') break;
puts(" vvedite nomer otdela ");
scanf("%d", &zap.nom[i]);
puts (" Dolshnost ");
scanf ("%s", &zap.dol);
puts(" Data nachala raboti ");
scanf("%s", &zap.data);
}
zap.S_Bal = s / 3;
fwrite(&zap, size, 1, F_zap);
}
fclose(F_zap);
break;
F_zap=fopen(Spis,"r+b");
while(4)
{
if(!fread(&zap, size, 1, F_zap)) break;
printf("%20s %2d %2d %2d %5.2f\n",
zap.Fio,
zap.nom[10],
zap.dol,
zap.data,
zap.S_Bal);
}
fclose(F_zap);
break;
return;
}
}Решение задачи: «Вывести список сотрудников по отделам в порядке убывания стажа»
textual
Листинг программы
F_zap=fopen(Spis,"r+b");
while(4)
{
if(!fread(&zap, size, 1, F_zap)) break;
printf("%20s %2d %2d %2d %5.2f\n",
zap.Fio,
zap.nom[10],
zap.dol,
zap.data,
zap.S_Bal);
}
fclose(F_zap);
break;
Объяснение кода листинга программы
- Открывается файл
Spisдля чтения и записи данных в двоичном формате с помощью функции fopen. - Запускается цикл while, который будет выполняться до тех пор, пока не будет прочитано 4 элемента.
- Внутри цикла while считывается один элемент из файла с помощью функции fread.
- Выводится список сотрудников на экран с помощью функции printf. Выводятся следующие данные:
- ФИО сотрудника (переменная zap.Fio).
- Номер отдела (переменная zap.nom[10]).
- Должность сотрудника (переменная zap.dol).
- Дата приема на работу (переменная zap.data).
- Стаж работы сотрудника (переменная zap.S_Bal).
- Если в процессе чтения файла возникла ошибка (например, достигли конца файла), то цикл while прерывается с помощью оператора break.
- После завершения работы с файлом он закрывается с помощью функции fclose.
- В случае возникновения ошибки при работе с файлом программа завершается с помощью оператора break.