02.01.2011, 18:16. Просмотров 2454. Ответов 14
Здравствуйте. Помогите пожалуйста решить задачу по структурам. на С++. Вот текст задачи:
Определить структурированный тип, набор функций (в виде меню) для работы с массивом
структур. В структурированной переменной предусмотреть способ отметки ее как не
содержащей данных (т.е. «пустой»). Функции должны работать с массивом структур или с
отдельной структурой через указатели, а также при необходимости возвращать указатель на
структуру. В перечень обязательных функций входят:
- «очистка» структурированных переменных;
- поиск свободной структурированной переменной;
- ввод элементов (полей) структуры с клавиатуры;
- вывод элементов (полей) структуры с клавиатуры;
- поиск в массиве структуры и минимальным значением заданного поля;
дополнительные функции
- сортировка массива структур в порядке возрастания заданного поля (при сортировке
разрешается присваивание структурированных переменных);
- удаление заданного элемента;
- изменение (редактирование) заданного элемента.
Интерфейс пользователя осуществить в виде командного процессора:
Личная библиотека. Картотека домашней библиотеки: выходные данные книги (авторы,
название, издательство и так далее), раздел библиотеки (специальная литература, хобби,
домашнее хозяйство, беллетристика и так далее), происхождение (покупка, кража, подарок) и
наличие книги в данный момент. Выбор книг по автору, году; инвентаризация библиотеки
(вывод всего списка книг по категориям).
Происхождение реализовать с помощью перечисления.
Помогите пожалуйста кто может. помощи прошу т.к. заочник я и мне ни кто не обьяет как это всё делается. Делаю как понял. Вот моё подобие решения задачи. Выполнено примерно половина но не правильно. Помогите хотябы с этим пожалуйста.
Код
// 2.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
# include <iostream>
# include <stdio.h>
# include <cstring>
# include <windows.h>
#include <locale>
# define nam 30 //Название пункта
# define zap 30 //Кол-во структур
# define izd 30
# define nazv 30
# define razd 30
# define prois 30
# define nal 30
int er; //Переключатель
using namespace std;
struct katalog
{char avtor[nam];
char nazvanie[nazv];
char izdatelstvo[izd];
};
struct razdel
{int razde[razd];};
struct proishozhdenie
{
int proishozhdeni[prois];
};
struct nalichie
{
int nalichi[nal];
};
int sch=0; //Счетчик полных записей
void enter_new() // ф-ция ввода новой структуры
{ char avtor,nazvanie,izdatelstvo;
int razdel,proishozhdenie;nalichie;
if(sch<zap)
{
cout<<"Запись номер ";cout<<sch++;
cout<< endl<<"Выходные данные книги"<<endl;
cout<< endl<<"Автор"<<endl;
cin >> avtor[sch].name;
cout<< endl<<"Название"<<endl;
cin >> nazvanie[sch].nazvanie;
cout<< endl<<"Издательство"<<endl;
cin >> izdatelstvo[sch].izdatelstvo;
cout<<"Раздел библиотеки "<<endl;
cout <<endl<<"1. специальная литература"<<endl;
cout <<endl<<"2. хобби"<<endl;
cout <<endl<<"3. домашнее хозяйство"<<endl;
cout <<endl<<"4. беллетристика"<<endl;
cin >>razdel[sch];
cout<<"Происхождение "<<endl;
cout <<endl<<"1. Покупка"<<endl;
cout <<endl<<"2. Кража"<<endl;
cout <<endl<<"3. Подарок"<<endl;
cin>>proishozhdenie[sch];
cout<<"Наличие в данный момент "<<endl;
cout <<endl<<"1. Есть в наличии"<<endl;
cout <<endl<<"2. Нет в наличии"<<endl;
cin>>nalichie;
}
else cout<<"Запись не имеет смысла :(";
cout<<"Что делать дальше?"<<endl;
cin>>er;
}
void del() //ф-ция удаления записи
{ int d; //номер записи, которую нужно удалить
cout<<"\nВведите номер записи, которую необходимо удалить"<<endl;
cout<<"Если необходимо удалить все записи,нажмите '0'"<<endl;
cin>>d;
if (d!=0)
{for (int de_1=(d-1);de_1<sch;de_1++)
avtor[de_1]=avtor[de_1+1];
sch=sch-1;
}
if (d==0)
for(int i=0;i<zap;i++)
katalog[i]=bad;
cout<<"Что делать дальше?"<<endl;
cin>>er;
}
void change()
{int c; //номер записи, которую нужно изменить
char per;
cout<<"\nВведите номер записи"<<endl;
cin>> c;
do
{
cout<<"Введите: "<<endl;
cout<<"1-для изменения Автора"<<endl;
cout<<"2-для изменения Названия"<<endl;
cout<<"3-для изменения Издательства"<<endl;
cout<<"4-для изменения Раздела библиотеки\n";
cout<<"5-для изменения Происхождения\n";
cout<<"6-для изменения Наличия в данный момент\n";
cout<<"7-для прекращения\n";
cin>>per;
switch (per)
{
case 1: cout<<"Введите новое имя ";
cin>>avtor[c-1].name;break;
case 2: cout<<"Введите новое название ";
cin>>nazvanie[c-1].nazvanie;break;
case 3: cout<<"Введите новое издательство ";
cin>>izdatelstvo[c-1].izdatelstvo;break;
case 4: cout<<"Введите новый раздел библиотеки ";
cin>>razdel[c-1].razdel;break;
case 5: cout<<"Введите новую информацию о происхождении ";
cin>>proishozhdenie[c-1].prois;break;
case 6: cout<<"Введите новую информацию о наличии ";
cin>>nalichie[c-1].nal;break;
cin>>per;
}
}while(per!=7);
cout<<"Что делать дальше?"<<endl;
cin>>er;
}
void out() //ф-ция вывода записей
{
int sw; // переключатель
int o; //номер структ, кот. надо вывести
cout<<endl<<"Введите: "<<endl;
cout<<"1-если хотите вывести какую-либо запсь"<<endl;
cout<<"2-если хотите вывести все записи"<<endl;
cin>>sw;
if(sw==1)
{
cout<<"Введите номер записи, которую нужно вывести"<<endl;
cin>>o;
cout<<endl;
cout<<"имя автора ";cout<<avtor[o-1].name<<endl;
cout<<"дату поступления";cout<<mas_student[o-1].date<<endl;
cout<<"дату отчисления";cout<<mas_student[o-1].dat<<endl;
}
if(sw==2)
{ for(int i=0;i<sw;i++)
{
cout<<"имя";cout<<mas_student[i].name<<endl;
cout<<"название ";cout>>nazvanie[i].nazvanie;
cout<<"издательство ";cout>>izdatelstvo[i].izdatelstvo;
cout<<"раздел библиотеки ";cout>>razdel[i].razdel;
cout<<"происхождение ";cout>>proishozhdenie[i].prois;
cout<<"наличие ";cout>>nalichie[i].nal;
}
}
cout<<"Что делать дальше?"<<endl;
cin>>er;
}
{int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_CTYPE, "Russian");
cout<<"Записей пока нет"<<endl;
cout<<"Введите:"<<endl;
cout<<"1-для удаления записи"<<endl;
cout<<"2-для ввода новой записи"<<endl;
cout<<"3-для изменения записи"<<endl;
cout<<"4-для вывода записи(ей)"<<endl;
cout<<"5-для выхода"<<endl;
cin>>er;
do
{switch(er)
{
case 1:del();break;
case 2:enter_new();break;
case 3:change();break;
case 4:out();break;
}
}
while(er!=5);
}