Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Файлы


Автор: Funtik 8.6.2007, 13:09
Умоляю вас помогите мне доделать функции: 1) удаления записи в файле; 2)просмотра данных из файла по алфавиту пункта назначения
Пожалуйста не добавляйте в функции какие-нибудь новые навороты, ведь мне надо чтобы пошло на VC++6.0
Плиз объяните как же сделать эти две функции, а то я умру. И подскажите плиззззз как мне правильно работать с файлом при его открытии или создании, а то че-то вообще как-то не могу!!!!!!!!! smile 


Код

#include "stdafx.h"
#include "iomanip.h"
#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#include "string.h"
#include "dos.h"
#include "stdlib.h"
#include "fstream.h"

static int sz=0;

struct TRANZ
{
    int nomer_poezda;
    char priznak_tranz[20];
    char punkt_naz[20];
    int date[3];
};

TRANZ t[10];

void menu();               
void writee();              
void readd();          
void delet();          
void alfavit();
void do_punkta();


int recsize = sizeof(int)+20*sizeof(char)+20*sizeof(char)+4*sizeof(int);

fstream potok;  

int main()                  
{   
    char *filename="poezd.txt";
    
    ofstream build(filename, ios::binary);

    potok.open( filename, ios::binary | ios::in | ios::out );  
    
    if(!potok)
    {
        cout << "\aFail " << filename << " ne bil uspershno otkrit";   
        return -1;
    }
    
    menu();       
    
    potok.close();     
    
    return 0;
}

void menu()       
{
    int choice;
    
    system ("cls");     
    
    cout << "\n\n\t\t|Zapic           ------ 1|"; 
    cout << "\n\n\t\t|Chtenie         ------ 2|"; 
    cout << "\n\n\t\t|Udalenie        ------ 3|";
    cout << "\n\n\t\t|Korrekt         ------ 4|";
    cout << "\n\n\t\t|Po alfavity     ------ 5|";
    cout << "\n\n\t\t|Do_punkta_naz   ------ 6|";
    cout << "\n\n\t\t|Vixod           ------ 7|";
    
    cout << "\n\n\n\t\t\t\tVash vibor >>> "; 
    cin >> choice;      
    
    switch(choice)                       
    {
    case 1: writee();   break;
    case 2: readd();    break;
    case 3: delet();    break;
    case 4: writee();   break;
    case 5: alfavit();  break;
   // case 6: do_punkta();break;
    case 7: exit(0);  
    default: cout<<"\aNe verno!!! "; menu();
    }
}

void writee()        
{
    int n;
    char choice='y';
        
    do
    {
        system("cls");    
        
        cout << "\n\t\t\t nomer dla zapici >>> "; cin>>n;
        if(sz<n){sz=n;}
        
        cout<< "\n\t\t\tvvedite nomer poezda \n>>> "; 
        cin.ignore();
        cin>>t[n].nomer_poezda;
        
        cout << "\n\t\t\tVvedite priznak tranzitnosti\n>>> ";
        cin.ignore();
        cin.get( t[n].priznak_tranz, 20*sizeof(char));
        
        cout << "\n\t\t\tVvedite konechnii punkt\n>>> ";
        cin.ignore();
        cin.get( t[n].punkt_naz, 20*sizeof(char));
        
        cout<<"\n\t\t\tVvedite vremya otpravleniya: "; 
        
        cout<<"\nVvedite deni >>> ";
        cin >> t[n].date[0]; 
        
        cout << "\nVvedite chas >>> ";
        cin >> t[n].date[1];
        
        cout<<"\nVvedite minyti >>> ";
        cin>> t[n].date[2];          
        
        potok.seekg((n-1)*recsize);
        potok.write(reinterpret_cast<char*>(&t[ n ]), sizeof(t[ 0 ]));
        
        cout<<"\n\t\t\t-----------------------------\n";
        cout << "\n\t\t\tProdoljiti? (y/n) "; 
        cin >> choice;   
                
    } while(choice != 'n');  
    
    menu();
}

void readd()
{   
    int nomer,d1,d2,d3;
    char priznak[20],kon_punkt[20];    
    
    system("cls");
    
    for(int l=0;l<sz;l++)   
    {
        potok.seekg(l*recsize);   
        
        potok.read(reinterpret_cast<char*>(&nomer),4); 
        potok.read(priznak,20);
        potok.read(kon_punkt,20);
        potok.read(reinterpret_cast<char*>(&d1),4); 
        potok.read(reinterpret_cast<char*>(&d2),4); 
        potok.read(reinterpret_cast<char*>(&d3),4); 
        potok.clear();
            
        printf("\n------------------------------------------------------");
        printf("\n\tNomer <<< %d",nomer);
        printf("\n\n\t\tPriznak <<< %s",priznak);
        printf("\n\n\t\t\tKon_punkt <<< %s",kon_punkt);           
        printf("\n\n\t\t Vremya: ");
        printf("\n\n\t\t Deni   <<< %d",d1);
        printf("\n\n\t\t Chas <<< %d",d2);
        printf("\n\n\t\t Minyti  <<< %d",d3);             
    }
    
    printf("\n\n-------------------------------------------");
    printf("\nNajmite chto-nibudi ");
    
    getch();  
    
    menu();
}

void delet()
{
    /*char choice = 'y';
    int pos = 0;
    int count = 0;
        
    cout << "\nVvedite nomer zapici dla udaleniya ";
    cin >> pos;      
   
    potok.seekg(pos-1);
    for (int i = 0; i < 10; ++i)
    {
        if (pos == i) continue;

        potok.write(reinterpret_cast<char*>(&t[ i ]), sizeof(t[ 0 ]));

        /*fbin.write(f[i].familiya,20);
        fbin.write(reinterpret_cast<char*>(&f[i].nomer_gruppi),4);
        fbin.write(reinterpret_cast<char*>(&f[i].sr_usp),8);
    }*/

    getch();
    
    menu();
}

void alfavit()
{
    system("cls");    
}


Добавлено через 3 минуты и 35 секунд
Ой вначале 
Код

int recsize = sizeof(int)+20*sizeof(char)+20*sizeof(char)+3*sizeof(int);

Автор: Funtik 8.6.2007, 21:41
Ой записи удалили. Ай-да какие хорошие люди. smile

Добавлено @ 21:50
Хотя ба скажите почему не помагаете


M
Alexeis
Цитата(Правила раздела "Центр помощи")

>В данном разделе запрещено поднимать темы, т. е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.


Товарищ вам тут ничем не обязаны. Во время сессии много вопросов. Даже суток не прошло. Создавайте тему в разделе работа и устанавливайте свои условия.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)