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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2017, 23:14   #11
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Если тебе интересны файлы, тогда сделай запись в файл.
Вот структура файла:

10.jpg
(я знаю, тебе удобней записывать в файл голые числа типа такого: "4 34.5 .....",.. но так не красиво. Лучше, потом при чтении, чуть-чуть заморочиться, но зато будет читаемо в файле).

Наверно тебе будет этот пункт слишком простым, поэтому сделай еще что-нибудь...

Когда сделаешь запись в файл, можно будет сразу общаться по поводу чтения из того же файла...
ura_111 вне форума Ответить с цитированием
Старый 13.03.2017, 23:49   #12
Andrey0072
Пользователь
 
Регистрация: 12.03.2017
Сообщений: 29
По умолчанию

Спасибо большое тебе за шаблон , с пунктами меню буду пробывать а на счет: Ктате, я придумал как удалить/добавить запись из/в массива. Через промежуточный (динамический) массив:
1) есть массив а[5]. Надо удалить одну позицию.
2) создаём b[5-1]. копируем из а[5] в b[4] и удаляем []а.
3) создаём новый массив а[4] и приваимаем элементы b[4].
4) удаляем b[4].
Я суть саму понял токо как это "копируем из а[5] в b[4]" в коде отобразить?
Andrey0072 вне форума Ответить с цитированием
Старый 14.03.2017, 00:05   #13
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Всмысли "копируем из а[5] в b[4]"?

Через "for..." конечно. А как ещё?

Конечно, если бы ты работал с STL (vector), тогда там есть специальные функции по копированию (да и удаления бы упростилось - тоже есть библиотечная функция)... но вы такого не учили. Поэтому, типа такого:
Код:
N=4 (надо удалить, например, 3-й)
k=0
for i =0; i<N
  if(i!=3)
    b[k]=a[i];
    k++
else
{ничего не делаем}
Да это потом - сначала можно сделать пункты запись/чтения из файла... и может ещё что-то... надо смотреть.
ura_111 вне форума Ответить с цитированием
Старый 14.03.2017, 00:25   #14
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

По поводу меню.
Я подумал, что его пункты (Редактирование данных/ 32. добавить запись
и Ввод данных:/из клавиатуры) дублируют друг друга, поэтому можно оставить один... Типа такого:
Код:
                      //cout << " МЕНЮ:\n";
				//cout << " 1. Вывести БД на экран\n";
				//            11. вывести всю БД на экран
				//            12. данные за определённый год
				//cout << " 2. Чтение данных из файла:\n";	
				//cout << " 3. Редактирование данных:\n";
				//cout << "   31. очистить БД\n";
				//cout << "   32. добавить запись\n";
				//cout << "   33. удалить запись\n";
				//cout << " 4. Сохранение данных в файле\n";							
				//cout << " 5. Очистить экран\n";
				//cout << " 6. Выход\n\n";
Да так лучше.
ura_111 вне форума Ответить с цитированием
Старый 14.03.2017, 00:41   #15
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я тут подумал, что если ты будешь добавлять и удалять записи, то они получаться не отсортироваными.

Может тебе в пункте меню "Редактирование данных" еще один подпункт предусмотреть "Сортировать данные по году"?
ura_111 вне форума Ответить с цитированием
Старый 14.03.2017, 00:51   #16
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ещё я тут подумал, что может лучше сделать подпункты в меню сразу:

12.jpg

и что бы пользователь выбирал сразу (например, 12), а не "сначала 1, а потом 12".

Т.е. чистая эстетика...

Что ты думаешь по этому поводу?
ura_111 вне форума Ответить с цитированием
Старый 14.03.2017, 01:49   #17
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Шаблон поменял:
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;

struct basa
{
	int year;
	double gas;
	double svet;
	double voda;
	double stoki;
};

int main()
{
	// данные-заглушка (в конце удалить)
	basa a[4];
	int N = 4; // количество записей
	a[0].year = 2017; a[0].gas = 34.5; a[0].svet = 1.7; a[0].voda = 23.0; a[0].stoki = 0.5;
	a[1].year = 2018; a[1].gas = 32.5; a[1].svet = 1.6; a[1].voda = 22.0; a[1].stoki = 0.5;
	a[2].year = 2019; a[2].gas = 31.5; a[2].svet = 1.3; a[2].voda = 21.0; a[2].stoki = 0.7;
	a[3].year = 2020; a[3].gas = 29.3; a[3].svet = 1.5; a[3].voda = 23.0; a[3].stoki = 0.3;
	/////////////////////////////////////
	
	int meniu = 6;
	setlocale(LC_ALL, "rus");
	while (1)
	{
		if ((1 <= meniu && meniu <= 7) || (meniu == 41) || (meniu == 42) || (meniu == 43))
		{
			if (meniu == 1)
			{
				cout << "----------------------------------------\n";
				cout << " год    газ   свет   вода  стоки \n";
				for (int i = 0; i < N; i++)
				{
					cout << " " << a[i].year << "   " << a[i].gas << "   " << a[i].svet << "   " << a[i].voda << "   " << a[i].stoki << endl;
				}
				cout << "----------------------------------------\n";
			}			
			if (meniu == 2)
			{
				cout << "----------------------------------------\n";
				int god = 0;
				bool flag = false;
				cout << "введите год ";
				cin >> god;
				for (int i = 0; i < N; i++)
				{
					if (god == a[i].year)
					{
						cout << "\n год    газ   свет   вода  стоки \n";
						cout << " " << a[i].year << "   " << a[i].gas << "   " << a[i].svet << "   " << a[i].voda << "   " << a[i].stoki << endl;
						flag = true;
					}
				}
				if (flag == false)
				{
					cout << "такого года в БД нет!\n";
				}
				cout << "----------------------------------------\n";
			}
			if (meniu == 3)
			{
				;
			}
			if (meniu == 41)
			{
				;
			}
			if (meniu == 42)
			{
				;
			}
			if (meniu == 43)
			{
				;
			}
			if (meniu == 5)
			{
				;
			}
			if (meniu == 6)
			{
				system("cls");
				cout << " МЕНЮ:\n";
				cout << "  1.Просмотр всей БД:\n";
				cout << "  2.Поиск записи в БД\n";
				cout << "  3.Чтение данных из файла\n";				
				cout << "  4.Редактирование данных:\n";
				cout << "    41.очистить БД\n";
				cout << "    42.добавить запись\n";
				cout << "    43.удалить запись\n";
				cout << "  5.Сохранение данных в файл\n";
				cout << "  6.Очистить экран\n";
				cout << "  7.Выход\n\n";
			}
			if (meniu == 7)
			{
				break;
			}
		}
		else
		{
			cout << "ERROR! \n\n";
		}
		cout << "меню ";
		cin >> meniu;
	}
	system("pause");
	return 0;
}
Теперь, вроде красивее выводит (чем в старом шаблоне):

12.jpg

Последний раз редактировалось ura_111; 14.03.2017 в 10:07.
ura_111 вне форума Ответить с цитированием
Старый 14.03.2017, 11:39   #18
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вроде забацал (удаление с помощью дополнительного динамического массива; а также сделал п. меню Очистить БД):
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;

struct basa
{
	int year;
	double gas;
	double svet;
	double voda;
	double stoki;
};

int main()
{
	int N;   // количество записей
	basa *a; // ссылка на ОСНОВНОЙ массив
	basa *b; // ссылка на вспомагательный массив

	// данные-заглушка (после того как программа будет завершена - удалить)	
	N = 7;
	a = new basa[N];
	a[0].year = 2017; a[0].gas = 34.5; a[0].svet = 1.7; a[0].voda = 23; a[0].stoki = 0.5;
	a[1].year = 2018; a[1].gas = 32.5; a[1].svet = 1.6; a[1].voda = 22; a[1].stoki = 0.5;
	a[2].year = 2019; a[2].gas = 31.5; a[2].svet = 1.3; a[2].voda = 21; a[2].stoki = 0.7;
	a[3].year = 2021; a[3].gas = 29.3; a[3].svet = 1.5; a[3].voda = 23; a[3].stoki = 0.3;
	a[4].year = 2022; a[4].gas = 29.2; a[4].svet = 1.6; a[4].voda = 22; a[4].stoki = 0.9;
	a[5].year = 2023; a[5].gas = 30.3; a[5].svet = 1.3; a[5].voda = 23; a[5].stoki = 0.2;
	a[6].year = 2024; a[6].gas = 31.3; a[6].svet = 1.5; a[6].voda = 26; a[6].stoki = 0.1;
	/////////////////////////////////////
	
	int meniu = 6;
	setlocale(LC_ALL, "rus");
	while (1)
	{
		if ((1 <= meniu && meniu <= 7) || (meniu == 41) || (meniu == 42) || (meniu == 43))
		{
			if (meniu == 1)
			{
				cout << "----------------------------------\n";
				cout << " год    газ   свет   вода  стоки \n";
				for (int i = 0; i < N; i++)
				{
					cout << " " << a[i].year << "   " << a[i].gas << "   " << a[i].svet << "   " << a[i].voda << "   " << a[i].stoki << endl;
				}
				cout << "----------------------------------\n";
			}			
			if (meniu == 2)
			{
				cout << "----------------------------------\n";
				int god = 0;
				bool flag = false;
				cout << "введите год ";
				cin >> god;
				for (int i = 0; i < N; i++)
				{
					if (god == a[i].year)
					{
						cout << "\n год    газ   свет   вода  стоки \n";
						cout << " " << a[i].year << "   " << a[i].gas << "   " << a[i].svet << "   " << a[i].voda << "   " << a[i].stoki << endl;
						flag = true;
					}
				}
				if (flag == false)
				{
					cout << "  такого года в БД нет!\n";
				}
				cout << "----------------------------------\n";
			}
			if (meniu == 3)
			{
				;
			}
			if (meniu == 41)
			{
				if (N != 0) // на случай, если пользователь удалит несколько раз - это запрещёно!
				{
					N = 0;
					delete[] a;
					cout << "  БД удалена!\n\n";
				}
				else
				{
					cout << "  Нельзя удалять пустую БД\n\n";
				}
			}
			if (meniu == 42)
			{
				;
			}
			if (meniu == 43)
			{
				if (N != 0) // удалить можно, если в БД есть хотябы одна запись
				{
					cout << "----------------------------------\n";
					int god = 0;
					bool flag = false;
					cout << "введите год ";
					cin >> god;
					int i;
					for (i = 0; i < N; i++)
					{
						if (god == a[i].year)
						{
							flag = true;
							break;
						}
					}
					if (flag == false)
					{
						cout << "  такого года в БД нет!\n";
					}
					else
					{   
						// 1) есть массив а[4]. Надо удалить одну позицию, например №2 (номер позиции предварительно нашёл и храню в "i").
						// 2) создаём b[4 - 1]. копируем из а[4] в b[3] и удаляем[]а.
						b = new basa[N - 1];
						int k = 0;
						for (int j = 0; j < N; j++)
						{
							if (j != i)
							{
								b[k] = a[j];
								k++;
							}
							else
							{
								; // пустой оператор - ничего не делаем
							}
						}
                                                delete[] a;
						// 3) создаём новый массив а[3] (я хотел сказать, выделяем память под нет, а ссылка уже усть!) и присваимаем элементы b[3].
						N = N - 1;
						a = new basa[N];
						for (int j = 0; j < N; j++)
						{
							a[j] = b[j];
						}
						// 4) удаляем b[4] (я хотел сказать, освобождаем память, а ссылка ОСТАЁТСЯ - для следующего раза!)
						delete[] b;
						cout << "  удаление прошло успешно! \n";
					}				
					cout << "----------------------------------\n";
				}
				else
				{
					cout << "  В БД нет ни одно записи!\n\n";
				}
			}
			if (meniu == 5)
			{
				;
			}
			if (meniu == 6)
			{
				system("cls");
				cout << " МЕНЮ:\n";
				cout << "  1.Просмотр всей БД:\n";
				cout << "  2.Поиск записи в БД\n";
				cout << "  3.Чтение данных из файла\n";				
				cout << "  4.Редактирование данных:\n";
				cout << "    41.очистить БД\n";
				cout << "    42.добавить запись\n";
				cout << "    43.удалить запись\n";
				cout << "  5.Сохранение данных в файл\n";
				cout << "  6.Очистить экран\n";
				cout << "  7.Выход\n\n";
			}
			if (meniu == 7)
			{
				break;
			}
		}
		else
		{
			cout << "  ERROR! \n\n";
		}
		cout << "меню ";
		cin >> meniu;
	}
	system("pause");
	return 0;
}
Получается вот, что (обрати внимание на БД до и после работы п.меню 43):

12.jpg

Твоя задача - хорошенько протестировать то, что есть на сегодняшний момент (в принципе программа вся готова, кроме пунктов 3, 42, 5). При этом можешь удалять и добавлять (добавлять пока вручную в самом тексте программы, - только когда добавляешь элементы - следи за "N"); удалять несколько раз и с чередованием с остальными пунктами меню; проверить обработку всех ошибок (корректно ли реагирует на их программа?)...
Короче, хорошее тестирование занимает столько же времени как и писать сам код программы (а иногда и большее время).
___________________________________ __________________________

Пару слов о самой структуре:
Код:
struct basa
{
	int year;
	double gas;
	double svet;
	double voda;
	double stoki;
};
Не уверен, что нужна именно такая... Когда я, в первый раз полез в интернет с запросом "база комунальных платежей", то мне вывело не по годам, а по людям, что-то вроде такого:
Код:
 Фамилия   Имя   стоимость_света   оплата за свет....
  кукушка   ира       34.4                       55..... 
  снарр       коля      55                          56....
Сначала и хотел создавать такую структуру, но потом посмотрел у тебя в коде как она заполняется и понял что-то не то...
А ну напиши как ты понимаешь задание (просто, пример БД).
___________________________________ ____________________________
У меня на строчку:
#include "stdafx.h"
всегда ошибку выдаёт и я её постоянно комментирую у себя... Наверно это зависит от компилятора.
А у тебя в этой строчке ошибки нет?
_______________
Теперь о том, что ты можешь уже написать:
1) добавить запись в БД (по аналогии с удаление)
2) запись в файл (как должна храниться информация в файле я тебе чуть выше показывал).

Сделай эти пункты, а я их протестирую.

Последний раз редактировалось ura_111; 14.03.2017 в 12:52.
ura_111 вне форума Ответить с цитированием
Старый 14.03.2017, 21:50   #19
Andrey0072
Пользователь
 
Регистрация: 12.03.2017
Сообщений: 29
По умолчанию

Я в Visual Studio 2010 работаю без этой строчки #include "stdafx.h" у меня тогда проект не запускаеться, ну и спасибо за новый шаблон с удалением,буду пробовать сохранить запись и просмотреть.

Последний раз редактировалось Andrey0072; 14.03.2017 в 22:02.
Andrey0072 вне форума Ответить с цитированием
Старый 14.03.2017, 21:58   #20
Andrey0072
Пользователь
 
Регистрация: 12.03.2017
Сообщений: 29
По умолчанию

а про то как я понимаю пример БД , ну я понимаю так : записать в бд запись(сохранить другими словами), просмотреть запись или записи,удалить запись и добавление новой записи.
Andrey0072 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсовая работа Evgesha1222 Фриланс 3 20.06.2013 14:12
Курсовая работа по БД Suslik963 Фриланс 6 23.05.2013 11:55
Курсовая работа(( Юрико Помощь студентам 4 27.12.2012 17:09
курсовая работа по с# сишарп Фриланс 1 05.06.2012 23:15
Курсовая работа! ...Dls... Паскаль, Turbo Pascal, PascalABC.NET 0 26.12.2008 12:42