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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2015, 17:04   #1
Арий
Новичок
Джуниор
 
Регистрация: 02.06.2015
Сообщений: 3
Восклицание Как удалить элементы из списка? С++

ОЧЕНЬ НУЖНА ПОМОЩЬ!!!
Помогите удалить элементы по заданному ключу из однонаправленного списка.
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
/*СТРУКТУРА Книга*/
struct Book
{

	char name[50]; //Название книги
	char athor[50]; //Фамилия автора
	char country[50]; //страна выпуска
	int year; //год издания
	int price;// цена
	
	void Input(Book &book);  //Функция ввода данных в структуру 
	Book *Next; //Адрес на следующий элемент


};


class List
{
	Book *Head; //Указатель на начало списка
public:
	List() :Head(NULL){}; //Конструктор по умолчанию (Head=NULL)
	~List();//Деструктор
	
	void Add(Book &book);
	void Sort();
	void Show();
	void clear();
	void Del();
};

/*ФУНКЦИЯ ЗАПОЛНЕНИЯ ДАННЫХ ПО КНИГЕ*/
void Book::Input(Book &book)
{
	cin.ignore(cin.rdbuf()->in_avail());
	cout << "Название книги: "; cin.getline(name, 50);
	cin.ignore(cin.rdbuf()->in_avail());
	cout << "Автор: "; cin.getline(athor, 50);
	cin.ignore(std::cin.rdbuf()->in_avail());
	cout << "Страна издания: "; cin.getline(country, 50);
	cin.ignore(std::cin.rdbuf()->in_avail());
	cout << "Цена: "; cin >> price;
	cout << "Год: "; cin >> year;
}

List::~List() //Деструктор класса List
{
	while (Head != NULL) //Пока по адресу есть хоть что-то
	{
		Book *temp = Head->Next; //Сразу запоминаем указатель на адрес следующего элемента структуры
		delete Head; //Освобождаем память по месту начала списка
		Head = temp; //Меняем адрес начала списка
	}
}

/*ФУНКЦИЯ ДОБАВЛЕНИЯ НОВОЙ СТРУКТУРЫ В СПИСОК*/
void List::Add(Book &book)
{
	Book *temp = new Book; //Выделение памяти под новую структуру
	temp->Next = Head; //Указываем, что адрес следующего элемента это начало списка

	//Копирование содержимого параметра book в только что созданную переменную
	strcpy_s(temp->name, book.name);
	strcpy_s(temp->athor, book.athor);
	strcpy_s(temp->country, book.country);
	temp->year = book.year;
	temp->price = book.price;


	Head = temp; //Смена адреса начала списка


}


int main()
{

	setlocale(LC_ALL, "Russian");
	Book book; //Обяъвили переменную, тип которой Книга
	 int N;  //Объявили переменную - число книг
	List lst; //Объявили переменную типа Список. Она выступает как контейнер данных

	cout << "введите количество книг: "; cin >> N; //Ввели число книг
    cin.ignore(); //Игнорируем клавишу Enter



	for (int i = 0; i < N; i++)
	{
		book.Input(book); //Передаем в функцию заполнения переменную книга
		lst.Add(book); //Добавляем заполненную структуру в список

	}


	lst.Show(); //Показываем список на экране 


	system("PAUSE");
}


/*ФУНКЦИЯ КЛАССА LIST ДЛЯ ВЫВОДА СПИСКА НА ЭКРАН*/
void List::Show()
{
	Book *temp = Head; //Объявляем указатель и изначально он указывает на начало
	ofstream fout("book.xls", std::ios_base::out);


	while (temp != NULL) //Пока по адресу на начало хоть что-то есть
	{
		//Выводим все элементы структуры
		cout << temp->name << "  "; //Вывод названия
		cout << temp->athor << "  "; //Вывод фамилии автора
		cout << temp->country << "  "; //Вывод страны
		cout << temp->year << "  "; //Вывод года
		cout << temp->price << endl; // Вывод цены
		fout << temp->name << "\t"; //Вывод названия
		fout << temp->athor << "\t"; //Вывод фамилии автора
		fout << temp->country << "\t"; //Вывод страны
		fout << temp->year << "\t"; //Вывод года
		fout << temp->price << endl;
		temp = temp->Next; //Указываем на следующий адрес из списка

	}


	fout.close();

	ifstream fin("book.xls", ios::in);
	if (!fin.is_open()) // если файл не открыт
		cout << "Файл не может быть открыт!\n"; // сообщить об этом
	else
	{
		cout << "........................................................" << endl;
		cout << "Чтение из файла..." << endl;
	   cout << fin.rdbuf() << endl;
	}
	fin.close();

}
Арий вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как исключить из выпадающего списка пустые элементы? parsn Microsoft Office Excel 7 03.12.2023 11:23
C++, удалить элементы списка, начинающихся с "К" Алексей_2012 Помощь студентам 10 11.05.2015 23:56
Сформировать список из N целочисленных случайных элементов. Удалить из списка все элементы, содержащие делители числа N RomaBayn Паскаль, Turbo Pascal, PascalABC.NET 11 07.11.2014 11:37
Удалить элементы из списка.PROLOG Mediaplay Помощь студентам 0 11.12.2012 19:43
Как удалить совпадающие записи из списка? Ivan_RIV Microsoft Office Access 12 12.04.2010 18:55