Member 13603572 Ответов: 1

Как я пишу программу меню еды


как написать текстовый файл, чтобы сделать меню еды, которое включает в себя
1.Добавить Меню
2.Меню Поиска
3.Изменить Меню
4.Меню Дисплея
5.Удалить Меню
только для начинающего программиста на C++

Что я уже пробовал:

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<windows.h>
#include<string.h>
#pragma warning(disable:4996)

void mainMenu();
void addMenu();
void searchMenu();
void modifyMenu();
void displayMenu();

typedef struct
{
	char code[10];
	char name[31];
	double price;
	char description[100];
}Menu;

void addMenu()
{

	Menu menu;
	FILE*add;
	char cont;

	add = fopen("menu.txt", "a");

	do
	{
		printf("Please enter the food code:");
		rewind(stdin);
		scanf("%[^\n]", menu.code);

		printf("Please enter the name of the food:");
		rewind(stdin);
		scanf("%[^\n]", menu.name);

		printf("Please enter the price:RM ");
		rewind(stdin);
		scanf("%.2f", &menu.price);

		printf("Please enter the description of the food:");
		rewind(stdin);
		scanf("%[^\n]", &menu.description);

		fprintf(add, "%s:%s:%.2f:%s\n", menu.code,menu.name,menu.price,menu.description);

		printf("Added Successfully!!\n");

		printf("Do you want to add more records (Y/N) ? :");
		rewind(stdin);
		scanf("%c", &cont);
		system("cls");

	} while (toupper(cont) == 'Y');
	fclose(add);
	return;
	system("cls");
}

void searchMenu()
{
	char code[10];
	char name[31];
	double price;
	char description[100];
	int i = 0, found;
	char cont;

	Menu m[100];

	FILE *search;

	search = fopen("menu.txt", "r");

	while (fscanf(search, "%[^:]:%[^:]:%.2f:%[^:]\n", &m[i].code, &m[i].name, &m[i].price, &m[i].description) != EOF)
	{
		i++;
	}

	do
	{
		printf("\nPlease Enter food code to Search : ");
		rewind(stdin);
		scanf("%[^\n]", &code);
		found = 0;
		printf("Food Code\tName\t\t\tPrice\tDescription\n");
		printf("=========\t====\t\t\t======\t===========\n");

		for (i = 0; i < 100; i++)
		{
			if (strcmp(code, m[i].code) == 0)
			{
				found = 1;
				printf("%s\t\t%s\t\tRM%.2f\t%s\n", m[i].code, m[i].name, m[i].price, m[i].description);
				printf("\nMenu found !!~\n");
			}

		}


		if (!found)
		{
			printf("\nInvalid food code!\n");
		}

		printf("\nWould you like to search again ? (Y/N)\n");
		rewind(stdin);
		scanf("%c", &cont);
		system("cls");


		if (toupper(cont) == 'Y')
		{
			/*printf("\nPlease Enter Food Code to Search : ");*/
			/*scanf("%s", &code);*/
		}
		else if (toupper(cont) == 'N')
		{
			printf("\nSEARCH COMPLETED !\n\n ");
		}
		else
		{
			printf("\nINVALID INPUT !\n\n ");
		}

	} while (toupper(cont) == 'Y');
	fclose(search);
	return;
}


void modifyMenu()
{
	char ans, cont;
	char code[6], updName[20], updDescription[100];
	int i = 0, modiCount = 0, updPrice;
	int menuCount, found;

	Menu m[100];
	FILE*fp, *modify;

	fp = fopen("menu.txt", "r");


	while (fscanf(fp, "%[^:]:%[^:]:%.2f:%[^:]\n", &m[i].code, &m[i].name, &m[i].price, &m[i].description) != EOF)
	{
		i++;
	}

	menuCount = i;

	do
	{
		printf("Please enter food code to be modified:");
		rewind(stdin);
		scanf("%[^\n]", &code);
		found = 0;

		printf("Food Code\tName\tPrice\tDescription\n");
		printf("=========\t====\t======\t==========\n");

		for (i = 0; i < menuCount; i++)
		{
			if (strcmp(code, m[i].code) == 0)
			{
				found = 1;
				printf("%s\t\t%s\t\tRM%.2f\t\t%s\n", m[i].code, m[i].name, m[i].price, m[i].description);

				printf("Please enter new name of the food:");
				rewind(stdin);
				scanf("%[^\n]", updName);
				printf("Please enter new price of the food:RM ");
				rewind(stdin);
				scanf("%c", &updPrice);
				printf("Please enter new description:");
				rewind(stdin);
				scanf("%[^\n]", &updDescription);
				printf("Confirm to modify (Y/N)?:");
				rewind(stdin);
				scanf("%c", &ans);
				system("cls");

				if (toupper(ans) == 'Y')
				{
					strcpy(m[i].name, updName);
					m[i].description == updDescription;
					m[i].price = updPrice;
					modiCount++;
				}
				else
				{
					printf("Back to main menu.\n");
					mainMenu();
					system("cls");
				}

				printf("\nUpdated List:\n");
				printf("Food Code\tName\tPrice\tDescription\n");
				printf("=========\t====\t======\t==========\n");
				printf("%s\t\t%s\t\tRM%.2f\t\t%s\n", m[i].code, m[i].name, m[i].price, m[i].description);
			}
		}

		if (found == 0)
		{
			printf("\n%s Food Code not found!\n", code);
		}


		printf("More Food Code to modify (Y/N)?:");
		rewind(stdin);
		scanf("%c", &cont);
		system("cls");

	} while (toupper(cont) == 'Y');

	modify = fopen("menu.txt", "w");

	for (i = 0; i < menuCount; i++)
	{

		fprintf(modify, "%s:%s:%.2f:%s\n", &m[i].code, &m[i].name, &m[i].price, &m[i].description);
	}

	printf("\n%d of Menu Code modified.\n", modiCount);
	system("cls");
	fclose(fp);
	fclose(modify);
	return;
}

void displayMenu()
{
	Menu m[100];
	FILE *display;
	int count = 0, i = 0;
	/*int f=0;*/

	display = fopen("menu.txt", "r");

	if (display == NULL)
	{
		printf("Error!!...");
		exit(-1);
	}
	printf("Food Code\tName\t\tPrice\tDescription\n");
	printf("=========\t====\t\t=====\t===========\n");

	while (fscanf(display, "%[^:]:%[^:]:%.2f:%[^:]\n", &m[i].code, &m[i].name, &m[i].price, &m[i].description) != EOF)
	{
		printf("%s\t\t%s\t\tRM%.2f\t%s\n", m[i].code, m[i].name, m[i].price, m[i].description);
		i++;
	}

	/*f = i;*/

	/*for (i = 0; i < f; i++)
	{
	printf("%s\t\t%s\t\t%.2f\t\t%s\n", m[i].code, m[i].name, m[i].price, m[i].description);
	}*/

	printf("\n\n%d Menu listed\n\n", i);
	fclose(display);
	return;
}

void mainMenu()
{
	int userChoice;

	do
	{
		printf("============================\n");
		printf("   Welcome To PAPARICH !!!\n");
		printf("============================\n");
		printf("Food Menu\n");
		printf("---------------------\n");
		printf("1. Add menu\n");
		printf("2. Search menu\n");
		printf("3. Modify menu\n");
		printf("4. Display menu\n");
		printf("5. Exit\n");
		printf("\nEnter your option:");
		scanf("%d", &userChoice);
		rewind(stdin);
		system("cls");

		switch (userChoice)
		{
		case 1:
			addMenu();
			break;
		case 2:
			searchMenu();
			break;
		case 3:
			modifyMenu();
			break;
		case 4:
			displayMenu();
			break;
		case 5:
			break;
		default:
			printf("Please enter available choices only!\n");
		}
	} while (userChoice != 5);
	return;
}

void main()
{
	mainMenu();

	system("pause");
}

CHill60

Что не так с кодом, который у вас уже есть?

Member 13603572

мой вывод получил много странных чисел и кодов

Member 13603572

мое описание не может работать хорошо, и я не знаю, как добавить функцию меню удаления

ZurdoDev

Где ты застрял?

Member 13603572

мой вывод получил много странных чисел и кодов я думаю что меню описания там не может работать хорошо и я не знаю как добавить функцию удаления

1 Ответов

Рейтинг:
0

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поставить точку останова на строке:
rewind(stdin);

и запустите свое приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Member 13603572

можете ли вы помочь мне написать новую программу??