На междугородной АТС информация о разговорах содержит: - дату разговора; - код и название города; - время разговора; - тариф; - номер телефона в этом городе; - номер телефона абонента. Вывести по интересующему вас городу общее время разговора с ним и сумму.| Код | //--------------------------------------------------------------------------- #include <stdio.h> #include <string.h> #include <windows.h> #pragma hdrstop #include <conio.h> #include <iostream> #include <vcl.h> //---------------------------------------------------------------------------
#pragma argsused using namespace std;
const int l_name = 30; struct Ats { char data[10]; int kod; char gorod[30]; float time; float tarif; int nomG; int nomA; };
int compare(const void *atsl, const void *ats2); // Создание файла void create() { Ats ats; int pr; FILE *fbin; if ((fbin =fopen("dbase.bin","wb")) == NULL) { puts("Failed to create file\n "); getch(); } else { do { cout << ("\n Data razgovora: "); cin.get() ; gets (ats.data) ; cout << ("\n Kod goroda: "); cin >> ats.kod; cout << ("\n Gorod: "); cin >> ats.gorod; cout << ("\n Prodoljitelnost razgovora: "); cin >> ats.time; cout << ("\n Tarif: "); cin >> ats.tarif; cout << ("\n Nomer v gorode: "); cin >> ats.nomG; cout << ("\n Nomer abonenta: "); cin >> ats.nomA; fwrite(&ats, sizeof(ats),1,fbin); cout<<("\n Continue addition? (1-да/0-нет)"); cin >> pr; } while(pr == 1); } fclose(fbin); } // Просмотр файла void view() { FILE *fbin; if ((fbin =fopen("dbase.bin","rb")) == NULL) { puts("Failed to create file\n"); getch(); } else { fseek(fbin, 0, SEEK_END); int n_record = ftell(fbin)/sizeof(Ats); Ats *ats = new Ats[n_record]; fseek(fbin, 0, SEEK_SET); fread(ats, sizeof(Ats),n_record, fbin); fclose(fbin); qsort(ats, n_record, sizeof(Ats), compare); for (int i=0; i < n_record; i++) cout << "\n" << ats[i].data << " " << ats[i].kod << " " << ats[i].gorod << " " << ats[i].time << " " << ats[i].tarif << " " << ats[i].nomG << " "<< ats[i].nomA; cout << "\n"; getch(); } }
// Обработка файла void work() { char z_name[l_name]; char t[30]; float sum=0,fulltime=0; FILE *fbin; if ((fbin =fopen("dbase.bin","rb")) == NULL) { puts("Failed to create file\n"); getch(); } else { fseek(fbin, 0, SEEK_END); int n_record = ftell(fbin)/sizeof(Ats); Ats *ats = new Ats[n_record]; fseek(fbin, 0, SEEK_SET); fread(ats, sizeof(Ats),n_record, fbin); fclose(fbin); //qsort(ats, n_record, sizeof(Ats), compare); cout<<("\n Vvedite gorod:"); cin >> t;
for (int i=0; i < n_record; i++) { if (t==ats[i].gorod) sum=sum+(ats[i].time*ats[i].tarif); fulltime+=ats[i].time; } // cin.get();gets(z_name); //{ if (!strcmp(ats[i].data,z_name)) // cout << "\n" << ats[i].data << " " << // ats[i].kod << " " << ats[i].gorod << " " << ats[i].time << " " << // ats[i].tarif << " " << ats[i].nomG << " "<< ats[i].nomA; } cout << "\n"; //zp = ats.time * ats.tarif; //cout << " " << zp; cout << "\n Stoimost= " << sum << " Polnoe vremia=" << fulltime ; getch(); }
int main() { int num; do { cout << ("\n 1 - Create"); cout << ("\n 2 - View"); cout << ("\n 3 - Work"); cout << ("\n 4 - Exit"); cout << ("\n Your choise: "); cin >> num; switch(num) { case 1: create();break; case 2: view();break; case 3: work();break; } } while (num != 4); return 0; }
int compare(const void *atsl, const void *ats2) { return strcmp(((Ats *)atsl)->data, ((Ats *)ats2)->data); }
|
всё перепробовала что можно,гдето чтото не так сделала. подскажите как исправить в функции Work подсчёт общего времяни разговора и сумму. Зарание благодарна.
|