Вывести список сотрудников по отделам в порядке убывания стажа - 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;

Объяснение кода листинга программы

  1. Открывается файл Spis для чтения и записи данных в двоичном формате с помощью функции fopen.
  2. Запускается цикл while, который будет выполняться до тех пор, пока не будет прочитано 4 элемента.
  3. Внутри цикла while считывается один элемент из файла с помощью функции fread.
  4. Выводится список сотрудников на экран с помощью функции printf. Выводятся следующие данные:
    • ФИО сотрудника (переменная zap.Fio).
    • Номер отдела (переменная zap.nom[10]).
    • Должность сотрудника (переменная zap.dol).
    • Дата приема на работу (переменная zap.data).
    • Стаж работы сотрудника (переменная zap.S_Bal).
  5. Если в процессе чтения файла возникла ошибка (например, достигли конца файла), то цикл while прерывается с помощью оператора break.
  6. После завершения работы с файлом он закрывается с помощью функции fclose.
  7. В случае возникновения ошибки при работе с файлом программа завершается с помощью оператора break.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы