Demo entry 5145770

menu

   

Submitted by anonymous on Jun 06, 2016 at 19:40
Language: C. Code size: 5.1 kB.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>

struct Building {
	int Flat, square, numOfRooms, numOfNeighFlats;
};
int counter = 0;
struct Building ** flats;

void printBuilding(const struct Building * flat) {
	printf("Квартира:\t%d\n", flat->Flat);
	printf("Площадь:\t%d\n", flat->square);
	printf("Комнат:\t%d\n", flat->numOfRooms);
	printf("Соседи:\t%d\n", flat->numOfNeighFlats);
}

void readBuilding(struct Building * flat) {
	printf("Квартира (% d): ", flat->Flat);
	scanf("%d", &(flat->Flat));
	printf("Площадь (%d): ", flat->square);
	scanf("%d", &(flat->square));
	printf("Комнат (%d): ", flat->numOfRooms);
	scanf("%d", &(flat->numOfRooms));
	printf("Соседей (%d): ", flat->numOfNeighFlats);
	scanf("%d", &(flat->numOfNeighFlats));
}

void printMenu() {
	system("clear");
	printf("1. Считать данные из файла\n");
	printf("2. Вывести данные на экран\n");
	printf("3. Сортировать по номеру квартиры\n");	
	printf("4. Сортировать по площади\n");
	printf("5. Сортировать по количеству комнат\n");
	printf("6. Сортировать по количеству соседних квартир\n");
	printf("7. Вывести N-й элемент\n");
	printf("8. Изменить N-й элемент\n");
	printf("9. Вывести данные в файл\n");
	printf("0. Выход\n");
	printf("Выберите действие: ");
}

void deleteData() {
	int i;
	for(i = 0; i < counter; i++) {
		free(flats[i]);
	}
	free(flats);
}

void readData() {
	deleteData();
	FILE * f = fopen("Data1.csv", "r");
	int Flat, square, numOfRooms, numOfNeighFlats;
	counter = 0;
	while(!feof(f)) {
		if(fscanf(f, "%d%d%d%d", &Flat, &square, &numOfRooms, &numOfNeighFlats) != 4) {
			break;
		}
		counter++;
	}
	fseek(f, 0, SEEK_SET);
	flats = (struct Building**)malloc(sizeof(struct Building*) * counter);
	int i;
	for (i = 0; i < counter; i++) {
		flats[i] = (struct Building*)malloc(sizeof(struct Building));
		fscanf(f, "%d%d%d%d",
				&(flats[i]->Flat),
				&(flats[i]->square),
				&(flats[i]->numOfRooms),
				&(flats[i]->numOfNeighFlats));
	}
	fclose(f);
}

void printData() {
	if(counter == 0) {
		printf("Нет данных\n");
		return;
	}
	int i;
	printf("\tКварт\tПлощадь\tКомнат\tСоседей\n");
	for(i = 0; i < counter; i++) {
		printf("%d\t%d\t%d\t%d\t%d\n", i,
				flats[i]->Flat, flats[i]->square,
				flats[i]->numOfRooms, flats[i]->numOfNeighFlats);
	}
}

void sortByFlats() {
	int i, j, k;
	struct Building * x;

	for(i = 0; i < counter - 1; i++) {
		k = i;
		x = flats[i];
		for(j = i + 1; j < counter; j++) {
			if(x->Flat > flats[j]->Flat) {
				x = flats[j];
				k = j;
			}
		}
		flats[k] = flats[i];
		flats[i] = x;
	}
}

void sortBySquare() {
	int i, j, k;
	struct Building * x;

	for(i = 0; i < counter - 1; i++) {
		k = i;
		x = flats[i];
		for(j = i + 1; j < counter; j++) {
			if(x->square > flats[j]->square) {
				x = flats[j];
				k = j;
			}
		}
		flats[k] = flats[i];
		flats[i] = x;
	}
}

void sortByNumOfRooms() {
	int i, j, k;
	struct Building * x;

	for(i = 0; i < counter - 1; i++) {
		k = i;
		x = flats[i];
		for(j = i + 1; j < counter; j++) {
			if(x->numOfRooms > flats[j]->numOfRooms) {
				x = flats[j];
				k = j;
			}
		}
		flats[k] = flats[i];
		flats[i] = x;
	}
}

void sortByNumOfNeighFlats(){
	int i, j, k;
	struct Building * x;
	for(i = 0; i < counter - 1; i++){
		k = i;
		x = flats[i];
		for(j = i + 1; j < counter; j++){
			if(x->numOfNeighFlats > flats[j]->numOfNeighFlats){
				x = flats[j];
				k = j;
			}
		}
		flats[k] = flats[i];
		flats[i] = x;
	}
}

void printNth() {
	printf("Введите номер элемента: ");
	int N;
	scanf("%d", &N);
	if( (N < 0) || (N >= counter) ) {
		printf("Элемент с номером %d не существует\n", N);
		return;
	}
	printBuilding(flats[N]);
}

void changeNth() {
	printf("Введите номер элемента: ");
	int N;
	scanf("%d", &N);
	if( (N < 0) || (N >= counter) ) {
		printf("Элемент с номером %d не существует\n", N);
		return;
	}
	readBuilding(flats[N]);
}

void saveToFile() {
	printf("Введите имя файла: ");
	char fileName[256];
	scanf("%s", fileName);
	FILE * f = fopen(fileName, "w");
	int i;
	for (i = 0; i < counter; i++) {
		fprintf(f, "%d\t%d\t%d\t%d\n", flats[i]->Flat,
				flats[i]->square,
				flats[i]->numOfRooms,
				flats[i]->numOfNeighFlats);
	}

	fclose(f);
}

int main(int argc, char * argv[]) {
	SetConsoleCP(CP_UTF8);
	SetConsoleOutputCP(CP_UTF8);

	int selectedItem = 0;
	do {	
		printMenu();
		scanf("%d", &selectedItem);
		switch (selectedItem) {
		case 1:
			readData();
			break;
		case 2:
			printData();
			break;
		case 3:
			sortByFlats();
			break;
		case 4: 
			sortBySquare();
			break;
		case 5:
			sortByNumOfRooms();
			break;
		case 6:
		sortByNumOfNeighFlats();
		case 7:
			printNth();
			break;
		case 8:
			changeNth();
			break;
		case 9:
			saveToFile();
			break;
		case 0:
			deleteData();
			break;
		}
		if(selectedItem != 0)	{
			int c;
			while( (c = getchar()) != '\n' ) {}
			getchar();
		}
	} while(selectedItem != 0);
	return 0;
}

This snippet took 0.02 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).