Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Курсова работа С++

Featured Replies

Да се състави програма на С за нуждите на федерацията за защита на потребителите, която поддържа следната информация за оценени фирми:

- име на фирма 

- данъчен номер

-град

-оценка

и извършва следните операции:

-съдава нов празен файл

-добавя нова информация за оценени фирми

-извежда името на града, от който има информация за най-много фирми

-извежда списък с данните на всички фирми с дадена оценка, чийто данъчен номер завършва на 0

 

Благодаря предварително!

#include <locale.h> // за български, ама за уиндоус конзола кодировката на
                    // редактора ти трябва да е OEM 866, а не уиндоус 1256 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


#define istina 1 // келешлик !!!
#define lazha 0

void printdata();

struct node
{
	char grad[32];          // структура за хеша и кофите
	int count;
	struct node* next;
}g;

struct node maxgrad;

const int hashsize = 503;  // българските градове са 277, 503 е просто число, таман за хеш сайз
struct node* hash[503];

typedef struct
{
	char ime[64];
	char danachen_nomer[32]; // основната структура
	char grad[32];
	char ocenka[32];
}firma;

firma f;



int hashindex(char* cp, int hashsize)
{
	unsigned long long verylong = 0;
	int i;
	if (cp[0] == 0) return -1;                   // хеш функцията, чисто логически
	for (i = 0; cp[i] != 0; i++)
	{
		verylong = (verylong << 4) + cp[i];
	}
	return (int)(verylong % hashsize);
}

void appendnew()
{
	FILE* d;
	printf("Въведете името на фирмата -> ");
	fgets(f.ime, 60, stdin);
	printf("Въведете данъчния номер -> ");
	fgets(f.danachen_nomer, 28, stdin);                 // добавяне на фирми към базата данни
	printf("Въведете града от който е фирмата -> ");
	fgets(f.grad, 28, stdin);
	printf("Въведете оценката на фирмата -> ");
	fgets(f.ocenka, 28, stdin);
	d = fopen("firmi.fir", "ab");
	fwrite(&f, sizeof(f), 1, d);
	fclose(d);
}

void putinhash(char* cp, int hashsize)
{
	struct node* conductor;
	struct node* monductor;
	int index;                                                // поставяне на градове и брой в хеша
	conductor = (struct node*)malloc(sizeof(struct node));
	conductor->next = 0;
	conductor->count = g.count;
	strcpy(conductor->grad, g.grad);
	index = hashindex(cp, hashsize);
	if (hash[index] == 0)
	{
		conductor->count = 1;
		hash[index] = conductor;
		return;
	}
	monductor = hash[index];
	for (;;)
	{
		if (strcmp(monductor->grad, conductor->grad) == 0)
		{
			monductor->count++;
			return;
		}
		if (monductor->next == 0)
		{
			monductor->next = conductor;
			conductor->count = 1;
			return;
		}
		monductor = monductor->next;
	}
}

int exists(char* fname)
{
	FILE *file;
	if (file = fopen(fname, "r"))            // проверка дали файл съществува
	{                                        
		fclose(file);
		return 1;
	}
	return 0;
}

void findmaxgrad(int hashsize)
{
	FILE* d;
	int i;
	maxgrad.count = 0;
	struct node* conductor;
	for (i = 0; i < hashsize; i++)
	{                                 //намиране на града с най много фирми
		if (hash[i] == 0) continue;
		conductor = hash[i];
		for (;;)
		{
			if (conductor->count > maxgrad.count)
			{
				maxgrad.count = conductor->count;
				strcpy(maxgrad.grad, conductor->grad);
				if (exists("maxgrad.fir")) system("del maxgrad.fir");
				d = fopen("maxgrad.fir", "ab");
				fwrite(&maxgrad, sizeof(maxgrad), 1, d);
				fclose(d);
			}
			else if (conductor->count == maxgrad.count)
			{
				maxgrad.count = conductor->count;
				strcpy(maxgrad.grad, conductor->grad);
				d = fopen("maxgrad.fir", "ab");
				fwrite(&maxgrad, sizeof(maxgrad), 1, d);
				fclose(d);
			}
			if (conductor->next == 0) break;
			conductor = conductor->next;
		}
	}
}

void destroyhash(int hashsize)
{
	int i;
	struct node* conductor;
	struct node* monductor;
	for (i = 0; i < hashsize; i++)
	{
		if (hash[i] == 0) continue;           // разрушаване на хеша, за да нема мемори лийк
		conductor = hash[i];
		for (;;)
		{
			if (conductor->next == 0)
			{
				free(conductor);
				break;
			}
			monductor = conductor;
			conductor = conductor->next;
			free(monductor);
		}
	}
}

void grad_nai_bash()
{
	int i;
	for (i = 0; i < hashsize; i++)
	{
		hash[i] = 0;
	}
	FILE* d;
	d = fopen("firmi.fir", "rb");
	if (d == 0)
	{                                         // баш функцията за намиране на града с най много фирми
		printf("Базата данни е празна !!!");  // другите дет съм ги изкоментирал са помощни
		return;
	}
	for (;;)
	{
		fread(&f, sizeof(f), 1, d);
		if (feof(d)) break;
		strcpy(g.grad, f.grad);
		putinhash(g.grad, hashsize);
	}
	fclose(d);
	findmaxgrad(hashsize);
	destroyhash(hashsize);
}

void ocenkanomernula(char* ocenka)        //за извеждане на фирми по еднаква зададена
{                                         // оценка и данъчен номер завършващ на 0
	int length, i;
	FILE* d;
	d = fopen("firmi.fir", "rb");
	if (d == 0)
	{
		printf("Базата данни е празна !!!");
		return;
	}
	for (;;)
	{
		fread(&f, sizeof(f), 1, d);
		if (feof(d)) break;
		length = strlen(f.danachen_nomer);
		for (i = length - 1; (f.danachen_nomer[i] == '/r') && (f.danachen_nomer[i] == '/n'); i--)
		{

		}
		if ((strcmp(ocenka, f.ocenka) != 0) && (f.danachen_nomer[i] != '0')) continue;
		printdata();
	}
	fclose(d);
}

void printdata()
{
	printf("\n%s%s%s%s", f.ime, f.danachen_nomer, f.grad, f.ocenka);
}

void printgraddata()
{
	printf("\n%s%d\n", maxgrad.grad, maxgrad.count);
}

void printfile()
{
	FILE* d;                                // разни мазни помощни функции за извеждане
	d = fopen("firmi.fir", "rb");
	for (;;)
	{
		fread(&f, sizeof(f), 1, d);
		if (feof(d)) break;
		printdata();
	}
	fclose(d);
}

void printgradfile()
{
	FILE* d;
	d = fopen("maxgrad.fir", "rb");
	for (;;)
	{
		fread(&maxgrad, sizeof(maxgrad), 1, d);
		if (feof(d)) break;
		printgraddata();
	}
	fclose(d);
}

int main()
{
	FILE* d;
	char ocenka[32];
	char c;
	setlocale(LC_ALL, "bg_BG");
nachalo:
	fflush(stdin);
	printf("               Меню\n");
	printf("За да въведете нова фирма натиснете 1\n");
	printf("За да изведете името на града с най много фирми натиснете 2\n");
	printf("За да изведете списък с данните на всички фирми с дадена оценка,\n"
		"чийто данъчен номер завършва на 0 натиснете 3\n");
	printf("За да създадете нова база данни и да изтриете старата натиснете 4\n");
	printf("За да излезете от програмата натиснете 5\n");
	for (;;)
	{
		c = getchar();
		fflush(stdin);
		if (c == '5') break;
		if (c == '1')
		{
			for (;;)
			{
				appendnew();
				printf("Ще въвеждате ли още фирми д/н -> ");
				c = getchar();
				if ((c == 'н') || (c == 'Н'))
				{
					fflush(stdin);
					goto nachalo;
				}
				fflush(stdin);
			}
		}
		if (c == '2')
		{
			for (;;)
			{
				grad_nai_bash();
				printgradfile();
				printf("Натиснете \"enter\" за да изведете началното меню");
				getchar();
				goto nachalo;
			}
		}
		if (c == '3')
		{
			printf("Въведете оценка -> ");
			fgets(ocenka, 28, stdin);
			ocenkanomernula(ocenka);
			printf("Натиснете \"enter\" за да изведете началното меню");
			getchar();
			goto nachalo;
		}
		if (c == '4')
		{
			d = fopen("firmi.fir", "wb");
			fclose(d);
			d = fopen("maxgrad.fir", "wb");
			fclose(d);
			printf("Базата данни бе изтрита, ся шефа шти трий сол на тиквата !!!");
			printf("\nНатиснете \"enter\" за да изведете началното меню");
			getchar();
			goto nachalo;
		}
	}
	return 0;
}

 

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.