Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Гаряка Асмик
Статус: Профессор
Рейтинг: 6511
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2674
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2279
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1616
Дата выхода:29.12.2010, 19:00
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:327 / 182
Вопросов / ответов:1 / 1

Вопрос № 181547: Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос: Создать программу (на простом Cи выполненое в visual studo 2008 ,win 32 console aplication)(выполнив функциональное разбиение) реализующую следующие функции работы с бинарн...



Вопрос № 181547:

Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:
Создать программу (на простом Cи выполненое в visual studo 2008 ,win 32 console aplication)(выполнив функциональное разбиение) реализующую следующие функции работы с бинарным файлом. Предусмотреть создание меню со следующими пунктами:(желательно через case )
1 - Записать в файл введённые с клавиатуры данные
2 - Считать данные из файла и вывести на экран
3 - Корректировка
4 - Сформировать список.
5 - Выход

На междугородней АТС информация о разговорах содержит:
номер телефона абонента;
дату разговора;
код города, с которым проходил разговор;
время разговора;
номер телефона в другом городе.
ВЫВЕСТИ ПО КАЖДОМУ ГОРОДУ ОБЩЕЕ ВРЕМЯ РАЗГОВОРА С НИМ. ВЫПОЛНИТЬ РАСПЕЧАТКУ ЗВОНКОВ ДЛЯ ВВЕДЕННОГО АБОНЕНТА НА УКАЗАННУЮ ДАТУ, ОТСОРТИРОВАВ ЗВОНКИ В ПОРЯДКЕ УБЫВАНИЯ ИХ ДЛИТЕЛЬНОСТИ. Все выводится на консоль.

программа такого типа . При запуске появлется выбор наподобии
" нажмите"
1 - Записать в файл введённые с клавиатуры данные (при этом выборе появляется ввод строк структуры.
"""""""""""""""Введите количество абонентов. например 6
""""""""""""""" номер телефона абонента1; например 2472522
""""""""""""" дату разговора; например 23.12.11 можно задать как чар.
""""""""""""код города, с которым проходил разговор; например 032
"""""""""""""""""время разговора,сек; например 4564
"""""""""""""""" номер телефона в другом городе. например 36756845
""&qu ot;"""""""""""" номер телефона абонента2; например 3576389
Записывает например в file.bin )
Дополнение к заданию:
2 - Считать данные из файла и вывести на экран(считывает из файла)

3 - Корректировка(по строкам,вводиш номер строки и построчноо вводиш новые значения этой строки для
""""""""""""""" номер телефона абонента3
""""""""""""" дату разговора;
""""""""""""код города, с которым проходил разговор; и тд и тп
4 - Сформировать список. ВЫВОДИТ ПО КАЖДОМУ ГОРОДУ ОБЩЕЕ ВРЕМЯ РАЗГОВОРА С НИМ. Появляется вопрос "введите номер абонента"Вводиш номер и для его выводится все звонки отсортированные по дате в порядке убывания длительности разговора .
5 - Выход

Отправлен: 22.12.2010, 15:25
Вопрос задал: relliko (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Гаряка Асмик (Профессор) :
Здравствуйте, relliko!

Программа:
Код:
/*Создать программу (на простом Cи выполненое в visual studo 2008 ,win 32 console aplication)(выполнив функциональное разбиение) 
реализующую следующие функции работы с бинарным файлом. Предусмотреть создание меню со следующими пунктами:(желательно через case )
1 - Записать в файл введённые с клавиатуры данные
2 - Считать данные из файла и вывести на экран
3 - Корректировка
4 - Сформировать список.
5 - Выход

На междугородней АТС информация о разговорах содержит:
номер телефона абонента;
дату разговора;
код города, с которым проходил разговор;
время разговора;
номер телефона в другом город е.
ВЫВЕСТИ ПО КАЖДОМУ ГОРОДУ ОБЩЕЕ ВРЕМЯ РАЗГОВОРА С НИМ. ВЫПОЛНИТЬ РАСПЕЧАТКУ ЗВОНКОВ ДЛЯ ВВЕДЕННОГО АБОНЕНТА НА УКАЗАННУЮ ДАТУ,
ОТСОРТИРОВАВ ЗВОНКИ В ПОРЯДКЕ УБЫВАНИЯ ИХ ДЛИТЕЛЬНОСТИ. Все выводится на консоль.*/
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h> /* подключение scanf_s и printf_s */
#include <conio.h> /* подключение _getch */
#include <math.h>
#include <windows.h>
#include <locale.h>
//#include <malloc.h>

typedef struct razgovor
{
char number[12];
char date[12];
char kodgorda[6];
int vremya;//v sekundah
char sobesednik_number[12];
} W;

int cmp(const void* p1, const void* p2)
{
if(strcmp( ((razgovor*)p1)->date, ((razgovor*)p2)->date )>0)
return 1;
if(strcmp( ((razgovor*)p1)->date, ((razgovor*)p2)->date )<0)
return -1;
if(strcmp( ((razgovor*)p1)->date, ((razgovor*)p2)->date )==0)
return (((razgovor* )p1)->vremya-((razgovor*)p2)->vremya);
}

void PrintMenu();
void EnterStringToFile();
void ReadStringFromFile();
void UnderMenu();
void FormList();
void Update();
void AddNewRecord();
void EditRecord();
void DeleteRecord();



void main()
{
setlocale(LC_CTYPE, "Russian");

PrintMenu();
do
{
switch(_getch())
{
//--------------------------------------------------------------------------------------
case '1':
EnterStringToFile();
printf_s("Данные записаны.\n");
PrintMenu();
break;
//--------------------------------------------------------------------------------------
case '2':
ReadStringFromFile();
PrintMenu();
break;
//--------------------------------------------------------------------------------------
case '3':
Update();
PrintMenu();
break;
//------- -------------------------------------------------------------------------------
case '4':
FormList();
PrintMenu();
break;
//--------------------------------------------------------------------------------------
case '5':
exit(0);
}
//--------------------------------------------------------------------------------------
}
while (true);
}


void PrintMenu()
{
printf_s("\n");
printf_s("1 – Записать в файл введённые с клавиатуры данные\n");
printf_s("2 – Считать данные из файла и вывести на экран\n");
printf_s("3 – Корректировка\n");
printf_s("4 – Сформировать список.\n");
printf_s("5 – Выход\n");
printf_s("\n");
}

void EnterStringToFile()
{
int n,i;
FILE *out;
W zapis;
out=fopen("ats.bin", "w");
if(out==NULL)
{
printf("Cannot op en the file");
return;
}


//------------------------------------------------------------------------------------- ----------------
printf("Введите количество абонентов:");
scanf_s("%d",&n);
if(n<=0)
exit(0);
for(i=0; i<n;++i)
{
printf_s("%d-ая запись:", i+1);
printf_s("\nВведите номер телефона абонента: ");
scanf("%s", zapis.number);
printf_s("\nВведите дату разговора: ");
scanf("%s", zapis.date);
printf_s("\nВведите код города, с которым проходил разговор: ");
scanf("%s", zapis.kodgorda);
printf_s("\nВведите время разговора,сек: ");
scanf("%d", &(zapis.vremya));
printf_s("\nВведите номер телефона в другом городе: ");
scanf("%s", zapis.sobesednik_number);
fwrite(&zapis, sizeof(razgovor),1,out); //Пишем запись в файл
}
fclose(out);
}

void ReadStringFromFile()
{
W zapis;
FILE *in;
if(!(in=fopen("ats.bin", "rb")))
{ printf("Ошибка открытия файла.\n");
exit(0); }
int count=1;
while(fread(&zapis, sizeof(razgovor),1,in))
{ if(feof(in)) break;
printf("\n #=%d Ф.И.О.=%s номер группы=%s средний балл=%f доход=%f\n", count++,
zapis.number, zapis.date, zapis.kodgorda, zapis.vremya,zapis.sobesednik_number);
}
fclose(in);
}
//Сформировать список. ВЫВОДИТ ПО КАЖДОМУ ГОРОДУ ОБЩЕЕ ВРЕМЯ РАЗГОВОРА С НИМ.
//Появляется вопрос "введите номер абонента"Вводиш номер и для него выводятся все звонки,
//отсортированные по дате в порядке убывания длительности разговора .
void FormList()
{
razgovor report[100];
int count=0;
razgovor *buffer;
char abonent[12];
W zapis;
FILE *in;

if(!(in=fopen("ats.bin", "rb")))
{
printf("Ошибка открытия файла.\n");
exit(0);
}

printf_s("\nВведите номер абонента: ");
scanf("%s", & abonent);

while(fread(buffer, sizeof(razgovor),1,in))
{
if(feof(in)) break;
// printf("\n #=%d Номер телефона абонента=%s дата разговора=%s код города=%s время =%d сек\n", count+1,
// (*(report+count)).number, (*(report+count)).date, (*(report+count)).kodgorda, (*(report+count)).vremya);
if (strcmp(abonent,buffer->number)==0)
{
count++;
memmove(&report[count],buffer,sizeof(razgovor));

}
}
fclose(in);

//Обновление структуры и сортировка
//------------------------------------------------------------------------------------------------------------------------------------------------------
qsort(report,count,sizeof(razgovor),cmp);


int counter=0;


//------------------------------------------------------------------------------------------------------------------------------------------------------
//Запись отсортированой структуры в файл
int n,i;
FILE *out;
out=fopen("ats.bin", "wb");

for(i=0; i<count;++i)
{
fwrite(report+i, sizeof(razgovor),1,out); //Пишем запись в файл
}
fclose(out);
//-------------------------------------------------------------------------------------------------------
}

void UnderMenu()
{
printf_s("\n");
printf_s("1 – Добавить новую запись\n");
printf_s("2 – Исправить запись\n");
printf_s("3 – Удалить запись\n");
printf_s("4 - Вернуться в предыдущее меню\n");
printf_s("\n");
}

void Update()
{
bool ExitUnderMenu=true;
UnderMenu();
do
{
switch(_getch())
{
//--------------------------------------------------------------------------------------
case '1':
AddNewRecord();
UnderMenu();
break;
//-------------------------------------------------------------------------- ------------
case '2':
EditRecord();
UnderMenu();
break;
//------------------------------------------ --------------------------------------------
case '3':
DeleteRecord();
UnderMenu();
break;
//--------------------------------------------------------------------------------------
case '4':
ExitUnderMenu=false;
}
//--------------------------------------------------------------------------------------
} while(ExitUnderMenu);
}

void AddNewRecord()
{
FILE *out;
W zapis;
printf_s("\nВведите номер телефона абонента: ");
scanf("%s", zapis.number);
printf_s("\nВведите дату разговора: ");
scanf("%s", zapis.date);
printf_s("\nВведите код города, с которым проходил разговор: ");
scanf("%s", zapis.kodgorda);
printf_s("\nВведите время разговора,сек: ");
scanf("%d", &(zapis.vremya));
printf_s("\nВведите номер телефона в другом городе: ");
scanf("%s", zapis.sobe sednik_number);
out=fopen("ats.bin", "ab");
fwrite(&zapis, sizeof(razgovor),1,out); //Пишем запись в файл
fclose(out);
}

void EditRecord()
{
W zapis;
int counter=0;
printf("Введите номер строки, которую нужно отредактировать.\n");
scanf_s("%d", &counter);

//---------------------------------------------------------------------------------------------

FILE *temp1;
//Открываем временный файл в текущем директории с правами wb+
if(!(temp1 = fopen("temp.bin","wb"))){
printf("Ошибка при открытии файла\n");
exit(0);}
//Устанавливаем индикатор позиции на начало файла
//rewind (temp);

//Считывание данных из файла и запись в буферный файл
FILE *in;
if(!(in=fopen("ats.bin", "rb")))
{ printf("Ошибка открытия файла.\n");
exit(0); }
int count=1;

while(fread(&zapis, s izeof(razgovor),1,in))
{
if (count!=counter)
{
if(feof(in)) break;
count++;
fwrite(&zapis, sizeof(razgovor),1,temp1);
// printf("\n count%d code=%d name=%s sal=%f\n", count++, s.code, s.name, s.salary);

}
else
{
printf("ВВведите номер телефона абонента.\n");
printf_s("\nВведите номер телефона абонента: ");
//--------------------------------------------------------------------------------------------
scanf("%s", zapis.number);
printf_s("\nВведите дату разговора: ");
scanf("%s", zapis.date);
printf_s("\nВведите код города, с которым проходил разговор: ");
scanf("%s", zapis.kodgorda);
printf_s("\nВведите время разговора,сек: ");
scanf("%d", &(zapis.vremya));
printf_s("\nВведите номер телефона в другом городе: ");
scanf("%s", &zap is.sobesednik_number);
//--------------------------------------------------------------------------------------------
count++;
fwrite(&zapis, sizeof(razgovor),1,temp1);
}
}
fclose(in);
fclose(temp1);
//---------------------------------------------------------------------------------------------

FILE *temp2;
//Открываем временный файл в текущем директории с правами wb+
if(!(temp2 = fopen("temp.bin","a+b"))){
printf("Ошибка при открытии файла\n");
exit(0);}

//запись данных из буферного файла в наш

FILE *out;
if(!(out=fopen("ats.bin", "wb")))
{ printf("Ошибка открытия файла.\n");
exit(0); }


while(fread(&zapis, sizeof(razgovor),1,temp2))
{

if(feof(temp2)) break;
count++;
fwrite(&zapis, sizeof(razgovor),1,out);
// printf("\n count%d code=%d name=%s sal=%f\n", count++, s.cod e, s.name, s.salary);
}
fclose(out);
fclose(temp2);
//-------------------------------------------------------------------- -------------------------
}

void DeleteRecord()
{
W s;
int counter=0;
printf("Введите номер строки, которую нужно удалить.\n");
scanf_s("%d", &counter);

//---------------------------------------------------------------------------------------------

FILE *temp1;
//Открываем временный файл в текущем директории с правами wb+
if(!(temp1 = fopen("temp.bin","wb"))){
printf("Ошибка при открытии файла\n");
exit(0);}
//Устанавливаем индикатор позиции на начало файла
//rewind (temp);

//Считывание данных из файла и запись в буферный файл
FILE *in;
if(!(in=fopen("ats.bin", "rb")))
{ printf("Ошибка открытия файла.\n");
exit(0);
}
int count=1;

while(fread(&s, sizeof(razgovor),1,in))
{
if (count!=counter)
{
if(feof(in)) break;
fwrite(&s, sizeof(razgovor),1,temp1);
}
count++;
}
fclose(in);
fclose(temp1);
//---------------------------------------------------------------------------------------------

FILE *temp2;
//Открываем временный файл в текущем директории с правами wb+
if(!(temp2 = fopen("temp.bin","a+b"))){
printf("Ошибка при открытии файла\n");
exit(0);}

//запись данных из буферного файла в наш

FILE *out;
if(!(out=fopen("ats.bin", "wb")))
{ printf("Ошибка открытия файла.\n");
exit(0); }


while(fread(&s, sizeof(razgovor),1,temp2))
{

if(feof(temp2)) break;
count++;
fwrite(&s, sizeof(razgovor),1,out); }
fclose(out);
fclose(temp2);
//---------------------------------------------------------------------------------------------
}

Ответ отправил: Гаряка Асмик (Профессор)
Ответ отправлен: 29.12.2010, 01:18
Номер ответа: 265165
Армения, Ереван
Тел.: 37493385079
Адрес сайта: http://rus-kniga.biz/tv11073127-3155712.html
ICQ # 166073765
Mail.ru-агент: hasmikgaryaka@bk.ru
Абонент Skype: hasmik7

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 265165 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.25 от 13.12.2010

    В избранное