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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2010, 19:59   #1
Lucchese
Новичок
Джуниор
 
Регистрация: 25.01.2010
Сообщений: 2
Вопрос Поправить Код...

Нужна еше помощь вот код программы что я уже сделал
Код:
#define _CRT_SECURE_NO_DEPRECATE
 
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <fstream.h>
 
//Объявления структуры------------------------------------
struct DBase
{
        char PIB[20]; //ФИО работника
        unsigned int salary; //зарплата 
        unsigned int experience; //стаж работы
};
 
void menu(void) {
        printf( 
                    "\n"
                "1. Dobavit.\n"
                "2. Prosmotr.\n"
                "3. Uparyadkuvat.\n"
                "4. Nayti.\n"
                        "5. Podnyat.\n"
                "9. Exit.\n\n"
                          );
}
    //Начало програмы------------------------------------
    int main()
        {
        // открытие файла на запись------------------------------------
        FILE *f;
        f = fopen( "database.txt", "ab+" );
                if( f == NULL ) 
                {
                 return -1;
                 }
        menu();
                char c;
   while(true) {
                cout << "\rViberite rijim roboti: ";
                DBase t;
                c = getch();
    switch (c) {
                case '1': // Добавление ----------------------------------
                cout << "\n\n Popolneniya 'file.dat'.\n"
                "Dlya vihoda v menu vvedite 0 Vmesto FIO rabotnika ili Zarplati.\n\n";
                fseek( f, 0, SEEK_END );
                    // работа с файлом------------------------------------
                while( true )  
                                {
                cout << "FIO Rabotnika: ";
                cin >> t.PIB;
                if( t.PIB[0]=='0' ) break;
                
                                cout << "Zarplata: ";
                cin >> t.salary;
                                if( t.salary=='0' ) break;
                
                                cout << "Staz Roboti: ";
                cin >> t.experience;
                fwrite( &t, sizeof(t), 1, f );
                cout << "Informacia dobavlena.\n\n";
                }
                menu();
                break;
                case '2': // Просмотр ------------------------------------
                cout << "\n\nSoderzimoe bazi 'database.txt'\n\n";
                                                
                                fseek( f, 0, SEEK_SET );                               
                                setlocale( LC_ALL, "Rus" );                          
                                while( true )                                           
                                {
                                        if( fread( &t, sizeof(DBase), 1, f ) !=1 ) break;
                                        cout << "\tFIO:" << t.PIB 
                                             << "\tZarplata:" << t.salary 
                                                 << "\tStaz:" << t.experience 
                                                 << "\n";
                                }                                    
                                menu();                             
                                break;
                                
                                case '4': // ПОИСК ------------------------------------
                                int s_salary;
                                cout << "\nVvedite Zrplatu dlya poiska: ";
                                cin >> s_salary; //Зарплата для поиска.
                                fseek( f, 0, SEEK_SET );
                                while( true )
                {
                if (feof(f)) break;
                fread( &t, sizeof(DBase), 1, f );
                while ( t.salary == s_salary )
                {
                                 if ( t.salary != s_salary ) break;
                 if ( t.salary == s_salary ) 
                {           
                             cout << "\tFIO:" << t.PIB << "\tZarplata:" << t.salary << "\tStaz:" << t.experience << "\n";
                                }
                        }                                                                          
                }
                menu();
                break;
Lucchese вне форума Ответить с цитированием
Старый 25.01.2010, 20:00   #2
Lucchese
Новичок
Джуниор
 
Регистрация: 25.01.2010
Сообщений: 2
По умолчанию

продолжение.................
Код:
                                case '5': //Поднятие зарплаты
                                int otvet;
                                cout << "\nVi uverini chto hotite podnyat zarplatu?\n";
                                cout << "Da = 1 \ Net = 0 ";
                                cin >> otvet;
                                if( otvet=='0' ) break;         
                int u_zarplata;
                                fseek( f, 0, SEEK_SET );
                                while( true )
                {
                if (feof(f)) break;
                fread( &t, sizeof(DBase), 1, f );
                if (t.experience>=10)
                                {
                                  while(true)
                                  {
                                  u_zarplata = (t.salary * 10)/100;
                                  fwrite( &t.salary, sizeof(u_zarplata), 1, f );
                                }
                                }
                                }
                                menu();
                break;  
                                case '9': // Выход------------------------------------
                return 0;
 
}
}
}
Нужно подправить вот это, а то выводит по несколько раз одного и того же человека...
Код:
    case '4': // ПОИСК ------------------------------------
                                int s_salary;
                                cout << "\nVvedite Zrplatu dlya poiska: ";
                                cin >> s_salary; //Зарплата для поиска.
                                fseek( f, 0, SEEK_SET );
                                while( true )
                {
                if (feof(f)) break;
                fread( &t, sizeof(DBase), 1, f );
                while ( t.salary == s_salary )
                {
                                 if ( t.salary != s_salary ) break;
                 if ( t.salary == s_salary ) 
                {           
                             cout << "\tFIO:" << t.PIB << "\tZarplata:" << t.salary << "\tStaz:" << t.experience << "\n";
                                }
                        }                                                                          
                }
                menu();
                break;
Вот еще не могу понять, мне нужно поднять зарплату на 10% всем работникам у кого стаж работы больше или равен 10 годам, как заменить те данные что в файле, на те что увеличены
Код:
                                case '5': //Поднятие зарплаты
                                int otvet;
                                cout << "\nVi uverini chto hotite podnyat zarplatu?\n";
                                cout << "Da = 1 \ Net = 0 ";
                                cin >> otvet;
                                if( otvet=='0' ) break;         
                int u_zarplata;
                                fseek( f, 0, SEEK_SET );
                                while( true )
                {
                if (feof(f)) break;
                fread( &t, sizeof(DBase), 1, f );
                if (t.experience>=10)
                                {
                                  while(true)
                                  {
                                  u_zarplata = (t.salary * 10)/100;
                                  fwrite( &t.salary, sizeof(u_zarplata), 1, f );
                                }
                                }
                                }
И последний вопрос как сделать сортирование по увеличению зарплаты?
Заранее огромнейшее спасибо всем кто поможет!
Lucchese вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поправить функцию Iskin Microsoft Office Excel 6 27.03.2010 08:05
Помогите поправить код связанный с копированием нескольких папок daget Компоненты Delphi 3 24.12.2009 21:01
Одномерные массивы на C. Поправить код. STS_1991 Помощь студентам 2 05.03.2009 16:59
Помогите поправить код SANTA_KLAUD Общие вопросы Delphi 5 30.05.2008 09:01
помогите поправить! koyot Работа с сетью в Delphi 4 13.02.2008 18:46