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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2011, 18:33   #1
Донат
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 22
По умолчанию Структуры

#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include "windows.h"
#include <time.h>

using namespace std;

struct RABOCHIY
{
char fio[50];
char male[10];
int year;
float salary;
};
RABOCHIY st[10];
int numrec=0;

int YEAR = 0;


int ShowMenu();
void AddRecord();
void PrintRabochiy(int numrec);
int GetIndex();

int _tmain(int argc, _TCHAR* argv[])
{
int nMenu;
int i, index;
FILE *fp;

time_t rawtime;
time(&rawtime);

tm *ti = localtime(&rawtime);


SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Сегодня %02d", ti->tm_year + 1900);
YEAR = ti->tm_year + 1900;
getchar();
do
{
nMenu=ShowMenu();
switch(nMenu)
{
case 1:
{
AddRecord();
numrec++;
break;
}
case 2:
{
index=GetIndex();
if(index==-1)
break;
for(i=index;i<numrec-1;i++)
st[i]=st[i+1];
numrec--;
cout << "\nЗапись " << index+1 << " удалена." << endl;
break;
}
case 3:
{
if(numrec==0)
{
cout << "\nБаза данных пуста..." << endl;
break;
}
for(i=0;i<numrec;i++)
{
PrintRabochiy(i);
}
cout << "\nКонец списка." << endl;
break;
}
case 4:
{
fp=fopen("db.txt","w");
if(fp==NULL)
{
cout << "\nОшибка открытия файла..." << endl;
break;
}
fprintf(fp,"%d\n",numrec);
for(i=0;i<numrec;i++)
{
fprintf(fp,"%s\n",st[i].fio);
fprintf(fp,"%s\n",st[i].male);
fprintf(fp,"%d\n",st[i].year);
fprintf(fp,"%f\n",st[i].salary);
}
cout << "\nФайл сохранен." << endl;
fclose(fp);
break;
}
case 5:
{
fp=fopen("db.txt","r");
if(fp==NULL)
{
cout << "\nОшибка открытия файла..." << endl;
break;
}
fscanf(fp,"%d\n",&numrec);
for(i=0;i<numrec;i++)
{
fgets(st[i].fio,50,fp);
fgets(st[i].male,10,fp);
fscanf(fp,"%d\n",&st[i].year);
fscanf(fp,"%f\n",&st[i].salary);

st[i].fio[strlen(st[i].fio) - 1]='\0';
st[i].male[strlen(st[i].male) - 1]='\0';
}
cout << "\nФайл прочитан." << endl;
fclose(fp);
break;
}
default: cout << "\nНеправильный пункт меню..." << endl;
}
}while(nMenu!=0);
return 0;
}

int ShowMenu()
{
int choice;

cout << "\n================================ ===========================" << endl;
cout << "1 - Добавить запись" << endl;
cout << "2 - Удалить запись" << endl;
cout << "3 - Показать весь список" << endl;
cout << "4 - Сохранить данные в текстовый файл" << endl;
cout << "5 - Загрузить данные из текстового файла" << endl;
cout << "0 - Выход" << endl;
cout << "Количество записей в базе: " << numrec << endl;
cout << "Ваш выбор: ";
cin >> choice;
return choice;
}

void AddRecord()
{
flushall();
cout << "ФИО: ";
gets(st[numrec].fio);

cout << "Пол: ";
gets(st[numrec].male);
cout << "Год рождения: ";
cin >> st[numrec].year;
cout << "Месячная зарплата: ";
cin >> st[numrec].salary;


}

void PrintRabochiy(int i)
{
cout << "\n----- " << i+1 << " -----------------------------------"<< endl;
cout << "ФИО: " << st[i].fio << endl;
cout << "Пол: " << st[i].male << endl;
cout << "Год рождения: " << st[i].year << endl;
cout << "Месячная зарплата: " << st[i].salary << endl;

for (int i = 0; i < numrec; i++)
{
int rest = 0;
int YEAR1 = st[i].year;
if (st[i].male == 'м')
{
rest = YEAR - YEAR1;
scanf("%d", &rest);
}
printf("Возраст: %d", rest);
}

getch();
}

int GetIndex()
{
int index;
if(numrec==0)
{
cout << "\nБаза данных пуста..." << endl;
return -1;
}
cout << "\nВведите номер записи (1.." << numrec << "): ";
cin >> index;
if(index<1 || index>numrec)
{
cout << "\nНет записи с таким номером..." << endl;
return -1;
}
return index-1;
}
Донат вне форума Ответить с цитированием
Старый 18.12.2011, 18:33   #2
Донат
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 22
По умолчанию

В функции "void PrintRabochiy(int i)" необходимо посчитать возраст лиц мужского пола.
Ошибка: нельзя сравнивать строку с символом.
Помогите пожалуйста исправить
Донат вне форума Ответить с цитированием
Старый 18.12.2011, 18:45   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Донат Посмотреть сообщение
В функции "void PrintRabochiy(int i)" необходимо посчитать возраст лиц мужского пола.
Ошибка: нельзя сравнивать строку с символом.
Помогите пожалуйста исправить
Что должно хранится в поле структуры st[i].male ?
Какой то текст? Если да - приведите примеры.
_Bers вне форума Ответить с цитированием
Старый 18.12.2011, 18:48   #4
Донат
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 22
По умолчанию

Нет не текст, а лишь символ указывающий пол.
Донат вне форума Ответить с цитированием
Старый 18.12.2011, 18:50   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Донат Посмотреть сообщение
Нет не текст, а лишь символ указывающий пол.
Цитата:
struct RABOCHIY
{
char fio[50];
char male[10]; //ты считаешь, что так ты объявил символ?
int year;
float salary;
};
То есть, ты думаешь, что male имеет тип char?

И его можно сравнивать с char да?
_Bers вне форума Ответить с цитированием
Старый 18.12.2011, 18:57   #6
Донат
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 22
По умолчанию

Да в том то и проблема! Я начинающий. Делал по исходнику
пытался сравнить char male = 'м';
короче у МЕНЯ ничего не получилось.
Помогите чем сможете!
Донат вне форума Ответить с цитированием
Старый 18.12.2011, 19:13   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Донат Посмотреть сообщение
Да в том то и проблема! Я начинающий. Делал по исходнику
пытался сравнить char male = 'м';
короче у МЕНЯ ничего не получилось.
Помогите чем сможете!
Тип данных "массив" и тип данных "char" это два разных типа.
Сравнивать их - все равно, что сравнивать мягкое с тёплым.

Почему вы сравниваете вещи, которые сравнивать по меньше мере не логично?

struct RABOCHIY
{
char fio[50];
char male[10]; //либо здесь должно быть char male;
int year;
float salary;
};

Либо сравнение должно быть с "м", а не с 'м'
_Bers вне форума Ответить с цитированием
Старый 18.12.2011, 19:19   #8
Донат
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 22
По умолчанию

Если не сложно напишите код
Донат вне форума Ответить с цитированием
Старый 18.12.2011, 19:33   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Донат Посмотреть сообщение
Если не сложно напишите код
В функции, которая вызывает ошибку, сделай так:

if (st[i].male[0] == 'м')
{
rest = YEAR - YEAR1;
scanf("%d", &rest);
}
_Bers вне форума Ответить с цитированием
Старый 18.12.2011, 19:36   #10
Донат
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 22
По умолчанию

Спасибо БОЛЬШОЕ!!!
Донат вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
структуры Alexander1205 Общие вопросы C/C++ 12 15.04.2011 21:15
Структуры в с++ kosteck Помощь студентам 2 19.12.2010 19:22
Структуры Wertex Помощь студентам 3 30.10.2009 13:52
Структуры Shadovv13 Общие вопросы C/C++ 18 15.10.2009 23:03
Структуры в Си osichev Помощь студентам 2 12.09.2009 15:51