Нужна еше помощь вот код программы что я уже сделал
Код | #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) { cout << "\n" "1. Dobavit.\n" "2. Prosmotr.\n" "3. Sortirovat.\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; 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 ); } } }
|
И еще как сделать что бы можно было ФИО вводить через пробел а то у меня только одним словом можно вести . И последний вопрос как сделать сортирование по увеличению зарплаты?
Заранее огромнейшее спасибо всем кто поможет!
|