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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2017, 23:02   #1
Andrey0072
Пользователь
 
Регистрация: 12.03.2017
Сообщений: 29
По умолчанию Курсовая работа C++

Пишу курсач на C++,помогите с удалением записи через динамический массив.
Вот код:

#include "stdafx.h"
#include<iostream>
#include<string>
#include<fstream>
#include<windows.h>
using namespace std;


int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
while (1)
{
string a,c,x,n;
string str;
int b;
int z;
char name[100];
setlocale(LC_ALL, "rus");
cout << " Тарифы на коммунальные услуги\n";
cout << "__________________________________ ___________________________________ ____" << endl;
cout << " Меню:\n";
cout << "1.Зделать список комунальных услуг" << endl;
cout << "2.Посмотреть список" << endl;
cout << "3.Очистить базу " << endl;
cout << "4.Добавить запись" << endl;
cout << "5.Удалить строку" << endl;
cin >> b;
switch (b)
{

case 1:
{
cout << "Введите год" << endl;
cin >> z;
if(z>=2017 && z<=2025){
}
else{
cout<<" Извините,но этот год не входит в диапазон!\n";
return 1;}

cout << "Введите цену на коммуналку " << endl;
cin>>a>>c>>x>>n;
ofstream fout("text1.txt");
fout << z << endl;
fout << a << endl;
fout << c << endl;
fout << x << endl;
fout << n << endl;
cout << endl;
cout << "Данные сохранены" << endl;
break;

}


case 2:
{
ifstream fout("text1.txt");
while (!fout.eof())
{
string str;
getline(fout, str);
cout << str << endl;
}
break;


}

case 3:
{
ofstream fout("text1.txt", ios_base::trunc);
cout << "База очищена." << endl;
break;
}
case 4:
{
char v[100];
cout << "Введите запись" << endl;
cin >> v;
ofstream fout("text1.txt", ios:ut | ios::app);
fout << v << endl;
break;
}
case 5:
{



break;

}


default:
{
cout << "Неправильный ввод.Попоробуйте еще раз." << endl;
}

}

}



return 0;
}

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

А причём тут "динамический массив"?
Я вижу только работу с файлами и всё...
ura_111 вне форума Ответить с цитированием
Старый 13.03.2017, 00:01   #3
Andrey0072
Пользователь
 
Регистрация: 12.03.2017
Сообщений: 29
По умолчанию

А как тогда удалить запись если не через динамический массив ?
Andrey0072 вне форума Ответить с цитированием
Старый 13.03.2017, 00:18   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А как удалять с помощью динамического массива?
(как ты себе это представляешь?)

А почему именно динамический?
Почему не статический (с запасом, скажем на 50 элементов)?

Ты думаешь, что размер динамического массива, в процессе работы программы, можно менять как тебе хочется? (кстате, в языке Делфи так можно поступать, но не в С++).
Динамический массив можно создать на любое количество элементов (в процессе работы программы) и всё, больше он НЕ меняется...
Притом-то нужно знать кол-во элементов массива (для первоначального создания), - как ты планируешь решать эту проблему?
В файле (в первой строчке, например) разместить кол-во элементов?
Их считать, а потом создавать массив...
___________________________________ ___________________

Дело в том, что в С++ есть ещё односвязные списки, в которые можно удалять/добавлять узлы...
Такое не проходили?
___________________________________ ___________________

Расскажи о задании подробней...

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

Последний раз редактировалось ura_111; 13.03.2017 в 23:15.
ura_111 вне форума Ответить с цитированием
Старый 13.03.2017, 00:31   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Может быть работа с файлами должно идти отдельный пункт меню?
Например.

Код:
Ввод данных:
   1) с клавиатуры.
   2) из файла
.........
.........
Вывод данных:
   5) на экран
   6) в файл

Последний раз редактировалось ura_111; 13.03.2017 в 00:38.
ura_111 вне форума Ответить с цитированием
Старый 13.03.2017, 00:42   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Кстате, (если ты так любишь файлы) не рассматривал возможность промежуточного файла:
построчно читаешь из оригинала и пишешь в промежуточный файл, доходишь до строчки, которую нужно удалить - пропускаешь её и продолжаешь писать дальше.
В конце не нужный файл можно и удалить. И без массива можно обойтись.

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

Кстате, придумал как обойтись без сохранения дополнительной переменой (размер массива):
1) прочитать весь файл чисто чтобы посчитать кол-во информации и рассчитать размер массива,
2) закрыть файл. Создать массив.
3) читать файл снова, но уже для переноса информации в массив.
ura_111 вне форума Ответить с цитированием
Старый 13.03.2017, 17:02   #8
Andrey0072
Пользователь
 
Регистрация: 12.03.2017
Сообщений: 29
По умолчанию

Односвязные списки не учили , а про курсовую работу подробней , так там тема "база данных коммунальных услуг" ну и нам говорили что должно быть сохранение информации,вывести информацию на екран и удаление записи,это можна сказать набросок я буду ещё структуры туда добавлять.

Последний раз редактировалось Andrey0072; 13.03.2017 в 17:06.
Andrey0072 вне форума Ответить с цитированием
Старый 13.03.2017, 17:29   #9
Andrey0072
Пользователь
 
Регистрация: 12.03.2017
Сообщений: 29
По умолчанию

Предлагали еще кто может в Windows Forms C++ зделать базу данных но я по формам книг не нашол.
Andrey0072 вне форума Ответить с цитированием
Старый 13.03.2017, 22:22   #10
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Это правильно (когда делаешь по легче, а если остаётся время на Forms, то разбираешься в нём)...

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

Код:
#include "stdafx.h"
#include <iostream>
#include<string>
using namespace std;

struct basa
{
	int year;
	double cost_gas;
	double cost_svet;
	double cost_voda;
	double cost_stoki;
};

int main()
{
	// данные-заглушка (в конце удалить)
	basa a[4];
	int N = 4; // количество записей
	a[0].year = 2017; a[0].cost_gas = 34.5; a[0].cost_svet = 1.7; a[0].cost_voda = 23.0; a[0].cost_stoki = 0.5;
	a[1].year = 2018; a[1].cost_gas = 32.5; a[1].cost_svet = 1.6; a[1].cost_voda = 22.0; a[1].cost_stoki = 0.5;
	a[2].year = 2019; a[2].cost_gas = 31.5; a[2].cost_svet = 1.3; a[2].cost_voda = 21.0; a[2].cost_stoki = 0.7;
	a[3].year = 2020; a[3].cost_gas = 29.3; a[3].cost_svet = 1.5; a[3].cost_voda = 23.0; a[3].cost_stoki = 0.3;
	/////////////////////////////////////

	int meniu = 5;
	setlocale(LC_ALL, "rus");				
	while (1)
	{
		if (1 <= meniu && meniu <= 6)
		{
			if (meniu == 1)
			{					
				cout << "----------------------------------------\n";
				cout << "  11. всю БД на экран\n";
				cout << "  12. за определённый год\n\n";
				cout << "меню ";
				cin >> meniu;				
				if (meniu == 11 || meniu == 12)
				{					
					if (meniu == 11)
					{
						cout << "\n год    газ   свет   вода  стоки \n";
						for (int i = 0; i < N; i++)
						{
							cout << " " << a[i].year << "   " << a[i].cost_gas << "   " << a[i].cost_svet << "   " << a[i].cost_voda << "   " << a[i].cost_stoki << endl;
						}
					}
					if (meniu == 12)
					{
						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].cost_gas << "   " << a[i].cost_svet << "   " << a[i].cost_voda << "   " << a[i].cost_stoki << endl;
								flag = true;
							}
						}
						if (flag == false)
						{
							cout << "такого года в БД нет!\n";
						}
					}
				}
				else
				{
					cout << "ERROR! \n";
				}
				cout << "----------------------------------------\n";
			}
			if (meniu == 2)
			{
				;
			}
			if (meniu == 3)
			{
				;
			}
			if (meniu == 4)
			{
				;
			}
			if (meniu == 5)
			{
				system("cls");
				cout << " МЕНЮ:\n";
				cout << "  1. Просмотр БД\n";
				cout << "  2. Ввод данных\n";
				cout << "  3. Редактирование данных\n";
				cout << "  4. Сохранение данных в файле\n";
				cout << "  5. Очистить экран\n";
				cout << "  6. Выход\n\n";
			}
			if (meniu == 6)
			{
				break;
			}
		}
		else
		{
			cout << "ERROR! \n\n";
		}
		cout << "меню ";
		cin >> meniu;
	}
	system("pause");
	return 0;
}
Получается что-то вроде такого:

12.jpg

пользователь играется с БД, а когда надоест - п.меню 6 выход. Если много информации на экране, тогда п.меню 5 Очистить экран.

p.s.1: поиграйся с кодом (с тем, что пока работает)...
Выбери себе какой-нибудь п.меню и попытайся его написать (по аналогии).
p.s.2: Данные-заглушки, эти которые:

Код:
	// данные-заглушка (в конце удалить)
	basa a[4];
	int N = 4; // количество записей
	a[0].year = 2017; a[0].cost_gas = 34.5; a[0].cost_svet = 1.7; a[0].cost_voda = 23.0; a[0].cost_stoki = 0.5;
	a[1].year = 2018; a[1].cost_gas = 32.5; a[1].cost_svet = 1.6; a[1].cost_voda = 22.0; a[1].cost_stoki = 0.5;
	a[2].year = 2019; a[2].cost_gas = 31.5; a[2].cost_svet = 1.3; a[2].cost_voda = 21.0; a[2].cost_stoki = 0.7;
	a[3].year = 2020; a[3].cost_gas = 29.3; a[3].cost_svet = 1.5; a[3].cost_voda = 23.0; a[3].cost_stoki = 0.3;
	/////////////////////////////////////
ты пока не удаляй. Пока пусть будут, - они полезны для реализации "сохранения в файл"... Но если ты будешь делать "ввод с клавитуры" и эти данные будут мешать, тогда можешь закомментировать.
p.s.3: пару слов о динамическом массиве.
Код:
int N=10;
basa *b = new basa [N];
всё, дальше работаешь как с обычным массивом (b[0]....b[1]....).
В конце правда надо удалить динамическую память.
Код:
delete [] b;
___________________________________ _____________________
Ктате, я придумал как удалить/добавить запись из/в массива. Через промежуточный (динамический) массив:
1) есть массив а[5]. Надо удалить одну позицию.
2) создаём b[5-1]. копируем из а[5] в b[4] и удаляем []а.
3) создаём новый массив а[4] и приваимаем элементы b[4].
4) удаляем b[4].
Всё.
___________________________________ _____________________

Пиши, что ты обо всём этом думаешь.

Последний раз редактировалось ura_111; 13.03.2017 в 23:21.
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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