Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2016, 15:52   #1
egorsavenkov
Новичок
Джуниор
 
Регистрация: 03.11.2016
Сообщений: 12
По умолчанию Структура "Сотрудник" C++(проблема с кодом)

Задание:
Структура "Сотрудник":
- фамилия, имя, отчество;
- должность
- год рождения;
- заработная плата.
Удалить элемент с указанной фамилией, добавить элемент после элемента с указанным номером.

Проблема в том что он не может найти фамилию, препод сказал что это потому что кол. знаков fio(фамилия имя отчество) не совпадает с value(где поиск начинается). Ребят кто исправить может помогите пожалуйста.

Код:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <cstring>

using namespace std;

#pragma argsused
#pragma hdrstop

char bufRus[256];
char* Rus(const char* text)
{
CharToOem(text, bufRus);
return bufRus;
}

struct Employee
{
char fio[255];
char post[255];
int god_birth;
int zarp;
};
//создание
Employee new_struct()
{
Employee newemployee;
char instring[256];
printf(Rus("Введите фамилию Имя Отчетсво : "));
gets(instring);
strcpy(newemployee.fio, instring);
printf(Rus("должность: "));
gets(instring);
strcpy(newemployee.post, instring);
printf(Rus("год рождения: "));
gets(instring);
newemployee.god_birth = atoi(instring);
printf(Rus("зарплату: "));
gets(instring);
newemployee.zarp = atoi(instring);
return newemployee;
}
//печать
void print_struct(Employee em)
{
printf(Rus("Фамилия Имя Отчество: %s\n"), em.fio);
printf(Rus("должность: %s\n"), em.post);
printf(Rus("год рождения: %d\n"), em.god_birth);
printf(Rus("зарплата: %d\n"), em.zarp);
printf("------\n");
}
//запись
int write(Employee* ems, int size)
{
FILE *pFile;
size_t result;
pFile = fopen("file.txt" , "wb");
if (pFile==NULL)
{
printf(Rus("Ошибка открытия файла")); exit (1);
}
result = fwrite (ems, sizeof(Employee), size, pFile );
size_t tmpint = size;
if (result != tmpint)
{
printf(Rus("Ошибка в записи структур")); exit (2);
}
fclose (pFile);
return 0;
}
//чтение
Employee* read(int &size)
{
FILE* pFile;
long lSize;
Employee* buffer;
size_t result;
pFile = fopen("file.txt" , "rb");
if (pFile==NULL)
{
printf(Rus("Ошибка открытия файла")); exit (1);
}
//находим размер файла в иде числа
fseek(pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind(pFile);

buffer = (Employee*) malloc (lSize);
result = fread (buffer, sizeof(Employee), lSize/sizeof(Employee), pFile);

fclose (pFile);
size = lSize/sizeof(Employee);
return buffer;
}
//поиск по фамилии 
int find(Employee *employees, int size, char* value)
{
for(int i = 0; i < size; i++)
{
if(strcmp(employees[i].fio, value)==0)
{
return i;
}
}
return -1;
}
//поиск номера
int find2(Employee *employees, int size, int value)
{
for(int i = 0; i < size; i++)
{
if(i=value)
{
return i;
}
}
return -1;
}
//удаление элемента
Employee* del_element(Employee *employees, int &size, int index)
{
int j = 0;
for (int i=0; i<size; i++)
{
if (i!=index)
{
employees[j] = employees[i];
j++;
}
}
size--;
return employees;
}
//добавление элемента
Employee* add_element(Employee *employees, int &size, int index)
{
int j = 0;
for (int i=0; i<size; i++)
{
if (i!=index)
{
employees[j] = employees[i];
j++;
}
else
{
employees[j] = employees[i];
j++;
employees[j] = new_struct();
j++;
}
}
size++;
return employees;
}
//удаление с указанной фамилией
Employee* task(Employee *employees, int &size)
{
char instring[256];
int el;
printf(Rus("Введите фамилию для удаления: "));
gets(instring);
printf("\n");
el = find(employees, size, instring);
if (el>-1)
{
employees = del_element(employees, size, el);
}
else
{
printf(Rus("фамилия не найдена\n"));
}
return employees;
}
//добавление с указанным номером 
Employee* task2(Employee *employees, int &size)
{
int el, n;
char instring[256];
printf(Rus("Введите номер для добавления: "));
gets(instring);
printf("\n");
el = find2(employees, size, atoi(instring));
if (el>-1)
{
employees = add_element(employees, size, el);
}
else
{
printf(Rus("Номер не найден\n"));
}
return employees;
}
//------------------------------------------------------------------
int main(int argc, char* argv[])
{
Employee* employees;
Employee* buffer;
Employee pt;
int size = 0;
char instring[256];
bool running = true;
while (running)
{
printf(Rus("\n1 - Добавить сотрудника\n2 - Сохранить\n3 - Удалить структуру\n4 - Добавить структуру\n5 - Напечатать\n6 - Прочитать из файла\n7 - Выход\nВыберите действие: "));
gets(instring);
switch (atoi(instring))
{
case 1:
size += 1;
pt = new_struct();
buffer = employees;
employees = (Employee*) malloc (sizeof(Employee)*size);
for(int i = 0; i < size-1; i++)
{
employees[i] = buffer[i];
}
employees[size-1] = pt;
break;
case 2:
write(employees, size);
break;
case 3:
employees = task(employees, size);
break;
case 4:
employees = task2(employees, size);
break;
case 5:
for(int i = 0; i < size; i++)
{
print_struct(employees[i]);
}
break;
case 6:
employees = read(size);
break;
default:
running = false;
}
printf("\n");
}

getch();
return (0);
}
egorsavenkov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура "Сотрудник" C++ egorsavenkov Помощь студентам 18 04.11.2016 09:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Проблема с примером из книги "DirectX 9 с управляемым кодом" Sargonass Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 31.01.2012 18:54