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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2013, 21:02   #1
M_Asja
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 14
По умолчанию [C]. Сортировка структуры

Стоит задача: ПО ВВОДИМОЙ С КЛАВИАТУРЫ ФАМИЛИИ АБОНЕНТА ВЫДАЕТСЯ ИНФОРМАЦИЯ О ВСЕХ ИМЕЮЩИХСЯ НОМЕРАХ ТЕЛЕФОНОВ (СОРТИРОВКА ПО ГОДУ УСТАНОВКИ). Задача, вроде, даже выполняется, но перед этим выводится на экран куча разной ерунды. Помогите исправить, пожалуйста.

Код:
//Создать файл, содержащий сведения о телефонах абонентов. 
//Каждая запись имеет поля: фамилия абонентов, год установки телефона, номер телефона. 
//На печать вывести информацию следующего вида: ПО ВВОДИМОЙ С КЛАВИАТУРЫ ФАМИЛИИ АБОНЕНТА 
//ВЫДАЕТСЯ ИНФОРМАЦИЯ О ВСЕХ ИМЕЮЩИХСЯ НОМЕРАХ ТЕЛЕФОНОВ (СОРТИРОВКА ПО ГОДУ УСТАНОВКИ), 
//ОПРЕДЕЛЯЕТСЯ КОЛИЧЕСТВО УСТАНОВЛЕННЫХ ТЕЛЕФОНОВ С XXXX ГОДА (ГОД ВВОДИТСЯ С КЛАВИАТУРЫ).
//Создать программу (выполнив функциональное разбиение), 
//реализующую следующие функции работы с бинарным файлом. 
//Предусмотреть создание меню со следующими пунктами:
//1 – СОЗДАНИЕ НОВОГО ФАЙЛА  
//2– ПРОСМОТР ФАЙЛА 
//3 – КОРРЕКТИРОВКА ЗАПИСЕЙ ФАЙЛА (изменение, добавление новой записи, удаление записи)
//4 – ВЫПОЛНЕНИЕ ЗАДАЧИ 
//5 – ВЫХОД


#include <stdio.h> //содержит стандартные функции файлового ввода-вывода
#include <io.h> //для работы с файлами
#include <conio.h> // функции для работы с консолью 
#include <process.h> //для очистки экрана
#include <locale.h>  // подключение setlocale
#include <malloc.h> // Функции для манипулирования динамической памятью 
#include <string.h> // для работы со строками
#include <fcntl.h.> //работы с функциями дискриптора
#include <stdlib.h> 
void A();
void B();
void C();
typedef struct zap{
	char fam[50]; 
	char tl[10]; 
	int year;
	} zp; 
zp a;

int cmp(const void* p1, const void* p2)
{
 if(strcmp( ((zap*)p1)->tl, ((zap*)p2)->tl )>0)
  return 1;
 if(strcmp( ((zap*)p1)->tl, ((zap*)p2)->tl )<0)
  return -1;
 if(strcmp( ((zap*)p1)->tl, ((zap*)p2)->tl )==0)
    return (((zap*)p1)->year-((zap*)p2)->year);
}
void A() {
	
	setlocale(LC_CTYPE, "Russian");
int i,n;
FILE *f;
printf("Введите количество вводимых абонентов: ");
scanf("%d",&n);
f=fopen("g:\\fl01.bin","wb"); 
for(i=0;i<n;i++)
{
printf("Vvedite fam %d-ogo cheloveka:",i+1);
scanf("%s",&a.fam);
printf("Vvedite year ystanovki:",i+1);
scanf("%d",&a.year);
printf("Vvedite number %d-ogo cheloveka:",i+1);
scanf("%s",&a.tl);
fwrite(&a, sizeof(a),1,f); 
}
printf("Vvod dannix zaver6en\n");
fclose(f);
}

void B() {
	FILE *f;
	if(!(f=fopen("g:\\fl01.bin", "rb")))
{ printf("Open file failed.\n");
    exit(0);    }
while(fread(&a, sizeof(a),1,f))
{  if(feof(f)) break;
    printf("\n Фамилия=%s Телефон=%s Год=%d\n", a.fam, a.tl, a.year);  }
fclose(f);
}
//int C() {}
void D() {
zap report[100];
 int count=1;
 zap buffer[250];
 char abonent[12];
 FILE *in;

 if(!(in=fopen("g:\\fl01.bin", "rb")))
 {
  printf("Ошибка открытия файла.\n");
  exit(0);
 }
 printf("\nВведите фамилию абонента: ");
 scanf("%s", &abonent);
  while(fread(buffer, sizeof(zap),1,in))
 {
	if(feof(in)) break;
    printf("\n  Фамилия абонента=%s Номер телефона=%s Год установки=%d",  (*(report+count)).fam, (*(report+count)).tl, (*(report+count)).year); 
  if (strcmp(abonent,buffer->fam)==0)
  {
   count++;
   memmove(&report[count],buffer,sizeof(zap));
  }
 
  }
 fclose(in);
  qsort(report,count,sizeof(zap),cmp);
  int counter=0;
 
 int i;
 FILE *out;
 out=fopen("fl01.bin", "wb");

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

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

puts("\nВведите номер функции: 1 – СОЗДАНИЕ НОВОГО ФАЙЛА;");
puts("\n			2 – ПРОСМОТР ФАЙЛА;");
puts("\n			3 – КОРРЕКТИРОВКА ЗАПИСЕЙ ФАЙЛА (изменение, добавление новой записи, удаление записи);");
puts("\n			4 – ВЫПОЛНЕНИЕ ЗАДАЧИ;");
puts("\n			5 – ВЫХОД. ");
scanf_s("%d", &n);
switch(n)       {
       	case 1: A(); break;
       	case 2: B(); break;
       	//case 3: C(); break;
		case 4: D(); break;
		case 5: break;
       	        }
_getch();
}
M_Asja вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка структуры Proger_1 Win Api 2 04.12.2012 20:45
сортировка структуры Си jana89 Общие вопросы C/C++ 5 27.11.2011 20:48
Сортировка элементов структуры JeyKip Общие вопросы C/C++ 2 31.10.2009 20:08
сортировка структуры vo_sa Общие вопросы C/C++ 1 25.06.2009 14:16
структуры. не получается сортировка. grewnica Общие вопросы C/C++ 2 12.05.2009 14:49