Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <locale.h>
- //Объявление структуры
- struct number
- {
- char name[20];
- char education[10];
- char gender[2];
- int age;
- int starofwork;
- };
- //Прототипы
- void change(char *); //создание и добавление табло рейсов
- void show(char *); //табло рейсов с информацией
- void view(char *); //поиск рейсов
- void view_2(char *); //покупка билетов
- void del(char* );
- void menu (char*);
- void text ();
- // Главная функция
- int main()
- {
- char file_name[25];
- puts("\n Enter the file name \n"); // ввод имени файла
- gets(file_name);
- // Вывод на экран текста меню
- menu(file_name);
- return;
- }
- void menu (char *file)
- { FILE *f;
- system ("cLs");
- int ans;
- while (1)
- {
- system ("cLs");
- puts(" \n M E N U"); puts(" \n 1.Create or Add");
- puts(" \n 2.Show file"); puts(" \n 3.View young workers with higher education");
- puts(" \n 4.View the oldest worker"); puts(" \n 5.Delete");
- puts(" \n 6.The task"); puts(" \n 7.Exit");
- puts(" \n\n select menu item - ");
- scanf("%d",&ans);
- // Обработка меню
- switch (ans)
- {
- case 1: change (file);break;
- case 2: show (file);break;
- case 3: view (file);break;
- case 4: view_2 (file);break;
- case 5: del (file);break;
- case 6: text ();break;
- case 7: system ("cLs");
- printf("\n\n end of program \n\n");
- system ("pause");
- return 0;
- default:
- system ("cLs");
- printf("\n\n \ there is no such menu item \n\n");
- system ("pause");
- return;
- }
- }
- }
- typedef struct number Human;// новое имя типа
- // Ввод данных об одном рейсе
- Human in_plane(void)
- {
- Human number;
- printf("Staff \nName - ");
- gets(number.name);
- printf("Education - ");
- gets(number.education);
- printf("Gender - ");
- gets(number.gender);
- printf("Age - ");
- scanf("%d",&number.age);
- printf("Start of working - ");
- scanf("%d",&number.starofwork);
- return number;
- }
- // Заполнение файла
- void change (char *file)
- { FILE *fp=fopen(file, "rb+");
- int changing;
- fseek(fp,0,SEEK_END); // курсор в конец
- int lenght=sizeof(Human); // сохраняем размер одной записи (необязательно)
- int size = ftell(fp) / lenght; // узнаем количество записей
- fflush(stdin);
- system("cLs");
- printf("In file %s %d elements\n",file,size);
- do
- {
- puts("Enter # of element to change");
- scanf("%d",&changing);
- } while (changing<=0 || changing>size);
- fflush(stdin);
- Human number;
- printf("Staff \nName - ");
- gets(number.name);
- printf("Education - ");
- gets(number.education);
- printf("Gender - ");
- gets(number.gender);
- printf("Age - ");
- scanf("%d",&number.age);
- printf("Start of working - ");
- scanf("%d",&number.starofwork);
- printf("Changed in file %s element #%d -> <%s>\teducation <%s>\tgender <%s>\tage <%d>\tstart of work <%d>\n",\
- file,changing,number.name,number.education,number.gender,number.age,number.starofwork);
- fseek(fp,(changing-1)*sizeof(number),SEEK_SET); // смещаемся на начало элемента в файле
- fwrite(&number,sizeof(number),1,fp);
- system("pause");
- fclose(fp);
- }
- // Вывод данных об одном рейсе
- void out_plane(Human number )
- {
- printf("|<%s>\t|\t<%s>\t|\t<%s>\t|\t<%d>\t|\t<%d>\t\t|\n",\
- number.name,number.education,number.gender,number.age,number.starofwork);
- }
- // Просмотр всего файла
- void show(char *file)
- {
- FILE *f;
- Human number;
- system ("cLs");
- if((f=fopen(file,"rb"))==NULL)
- {
- perror("\n open error_2 show ");
- puts("\n press any key....\n");
- system("pause");
- return;
- }
- // Вывод шапки таблицы
- // Пока в файле есть записи, чтение из файла данных об одном рейсе
- printf("|\tName\t|\teducation\t|\tgender\t|\tage\t|\tstart of work \t|\n");printf("_________________________________________________________________________________________________\n");
- while (fread(&number, sizeof(number),1,f))
- out_plane (number); // Вывод прочитанных данных на экран
- printf("_________________________________________________________________________________________________\n");
- printf("\n");
- system ("pause");
- fclose(f);
- }
- void view(char * file)
- { FILE *f;
- int i=0;
- char ky[20]="higher";
- Human number;
- system ("cLs");
- f=fopen(file, "rb");
- fflush(stdin);
- printf("\n");
- printf("\n");
- printf(" The young workers with higher education\n\n");
- printf("_________________________________________________________________________________________________\n");
- printf("|\tName\t|\teducation\t|\tgender\t|\tage\t|\tstart of work \t|\n");printf("_________________________________________________________________________________________________\n");
- while (fread(&number,sizeof(number),1,f))
- if((2020-(number.age)) < 28)
- {if(!strcmp(number.education,ky))
- out_plane(number);
- }
- printf("_________________________________________________________________________________________________\n");
- system ("pause");
- fclose(f);
- }
- void view_2(char * file)
- {
- FILE *f;
- Human number;
- int i=0,min = 2020-(number.age);
- system ("cLs");
- f=fopen(file, "rb");
- fflush(stdin);
- printf("\n");
- printf("\n");
- printf(" The oldest worker");
- while (fread(&number,sizeof(number),1,f))
- {
- if((2020-(number.age))> min)
- {min=2020-(number.age);
- printf("%d ",min);
- out_plane(number);
- }
- }
- system ("pause");
- fclose(f);
- }
- void del (char * file) // Удаление записи
- {
- int i,todelete;
- FILE *fp=fopen(file, "rb");
- FILE *fp2=fopen("temp.dat", "wb");
- fseek(fp,0,SEEK_END); // курсор в конец
- int lenght=sizeof(Human); // сохраняем размер одной записи (необязательно)
- int size = ftell(fp) / lenght; // узнаем количество записей
- Human number;
- rewind(fp);
- fflush(stdin);
- printf("In file %s %d elements\n",file,size);
- do
- {
- puts("Enter number of element to delete");
- scanf("%d",&todelete);
- } while (todelete<=0 || todelete>size);
- fflush(stdin);
- for (i = 0; i < size; ++i)
- {
- fread(&number,sizeof(Human),1,fp);
- if (i!=(todelete-1)) // если текущая запись не удаляемая
- {
- fwrite(&number,sizeof(Human),1,fp2); // то записываем
- printf("Added to file %s -> <%s>\teducation <%s>\tgender <%s>\tage <%d>\tstart of work <%d>\n",\
- file,number.name,number.education,number.gender,number.age,number.starofwork);
- }
- }
- system("pause");
- fclose(fp2);
- fclose(fp);
- remove(file);
- rename("temp.dat",file);
- }
- void text ()
- {setlocale(LC_ALL, "Rus");
- system("cLs");
- printf("\nВ файле содержатся сведения о сотрудниках лаборатории: фамилия, год рождения, пол,\
- образование (среднее, высшее), год поступления наработу. Найти самого старшего сотрудника\
- среди мужчин. Вывести списокмолодых специалистов (до 28 лет) с высшим образованием.\n");
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement