Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 07.05.2013, 00:30   #1 (permalink)
true
Новичок
 
Регистрация: 07.05.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Структуры

здравствуйте уважаемые программисты, помогите пожалуйста перевести программу из незнакомого мне языка c# в знакомый мне с++.

вот код


Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Lab4 //нэймспейс епрст
{
class Program
{
 
public struct Ttvbaze //структура базы данных телевизоров
{
public string Model; //модель телика
public int Size; // диагональ телика
public string Creator; //производитель телика
public int Cost; // цена телика
}
 
static Ttvbaze[] create() //функция создания массива, запускается при старте программы через Main.
{
Console.WriteLine("Здравствуйте. Сейчас мы создадим новую базу данных телевизоров");
 
Console.WriteLine();
 
Console.WriteLine("Введите количество записей в БД и нажмите Enter");
 
int k = Convert.ToInt16(Console.ReadLine()); //просим пользователя ввести кол-во записей
 
Ttvbaze[] Massive = new Ttvbaze[k]; //создаем массив с заданным количеством строк
 
Console.WriteLine();
 
Console.WriteLine("Заполните пожалуйста созданную БД");
 
//процедура заполнения массива
for (int i = 0; i < k; i++)
{
Console.WriteLine("Введите модель: ");
Massive[i].Model = Console.ReadLine();
 
Console.WriteLine("Введите диагональ: ");
Massive[i].Size = Convert.ToInt16(Console.ReadLine());
 
Console.WriteLine("Введите производителя: ");
Massive[i].Creator = Console.ReadLine();
 
Console.WriteLine("Введите цену: ");
Massive[i].Cost = Convert.ToInt32(Console.ReadLine());
 
Console.WriteLine("Элемент № {0} записан!",i);
Console.WriteLine();
 
}
Console.WriteLine("Всё. БД заполнена. Для перехода в меню жмите Enter");
Console.ReadLine();
return Massive; // возвращаем массив
}
 
static void add(Ttvbaze[] Massive) //процедура добавления элемента в конец массива
{
int OldSize = Massive.Length; //запоминаем старый размер массива в переменной
 
Console.WriteLine("Сколько элементов вы хотите добавить?");
int k = Convert.ToInt16(Console.ReadLine()); //узнаем сколько элементов нужно добавить
 
Array.Resize(ref Massive, Massive.Length + k); //с помощью класса Array который обращается к нашему массиву, и у которого есть метод Resize, прибавляем к длине нынешнего массива то число которое ввел пользователь
 
int NewSize = Massive.Length; //запоминаем новый размер массива
 
//цикл заполнения массива не с нуля, а со старого размера массива, который мы заранее запомнили
for (int i = OldSize; i < NewSize; i++)
{
Console.WriteLine("Введите модель");
Massive[i].Model = Console.ReadLine();
 
Console.WriteLine("Введите диагональ");
Massive[i].Size = Convert.ToInt16(Console.ReadLine());
 
Console.WriteLine("Введите производителя");
Massive[i].Creator = Console.ReadLine();
 
Console.WriteLine("Введите цену");
Massive[i].Cost = Convert.ToInt32(Console.ReadLine());
 
}
//выводим массив
for (int i = 0; i < Massive.Length; i++)
{
Console.Write("Модель: {0} | Диагональ: {1} | Производитель: {2} | Цена: {3} руб.", Massive[i].Model, Massive[i].Size, Massive[i].Creator, Massive[i].Cost);
Console.WriteLine();
}
Console.ReadLine();
 
menu(Massive); //возвращаемся в функцию menu
 
}
 
static void del(Ttvbaze[] Massive) //массив удаления элемента из массива.
//напрямую удалить какой то элемент массива нельзя, нет такого метода. Но, можно это сделать с помощью перемещения элементов массива на 1 элемент влево
//т.е. заменить удаляемый элемент идущим после него, и так до конца, чтобы в конце массива осталась пустая незаполненная ячейка. потом просто делаем Resize на 1 единицу.
{
Console.WriteLine("Введите модель телевизора чтобы удалить эту запись");
string Model = Console.ReadLine(); //просим у пользователя имя телевизора
int ind; //переменная для индекса этого телевизора
ind = 0;
 
//цикл нахождения индекса нужного элемента и сохранение его в переменной
for (int i = 0; i < Massive.Length; i++)
{
if (Massive[i].Model == Model)
{
ind = i; //индекс именно искомого элемента
}
}
 
//начинаем сдвигать массив влево если искомый элемент НЕ последний
if (ind < Massive.Length-1)
{
for (int i = ind; i < Massive.Length - 1; i++)
{
Massive[i].Model = Massive[i + 1].Model;
Massive[i].Size = Massive[i + 1].Size;
Massive[i].Creator = Massive[i + 1].Creator;
Massive[i].Cost = Massive[i + 1].Cost;
}
}
 
//если всё таки элемент последний в массиве, то просто отрезаем его нафиг :)
if (ind == Massive.Length-1)
{
for (int i = ind; i < Massive.Length - 1; i++)
{
Array.Resize(ref Massive, Massive.Length - 1); //все тем же знакомым классом Array и ресайзом
}
}
 
//если элемент не последний и массив уже сдвинут влево, отрезаем последний его пустой элемент. Всё :)
Array.Resize(ref Massive, Massive.Length - 1);
 
menu(Massive);
 
}
 
static void edit(Ttvbaze[]Massive) //редактирование элемента массива
{
//находим его как нашли функцией выше, в del();
Console.WriteLine("Введите модель телевизора чтобы изменить эту запись");
string Model = Console.ReadLine();
 
int ind;
ind = 0;
 
for (int i = 0; i < Massive.Length; i++)
{
if (Massive[i].Model == Model)
{
ind = i;
}
}
 
//делаем подменюшку чтобы выбирать что выбирать с помощью switch.
int x;
do
{
Console.WriteLine("Выберите, что вы хотите изменить для этой модели?");
Console.WriteLine("1.Изменить цену");
Console.WriteLine("2.Изменить производителя");
Console.WriteLine("3.Изменить размер диагонали");
Console.WriteLine("4.Изменить название модели");
Console.WriteLine("5.Закончить редактирование");
x = Convert.ToInt16(Console.ReadLine());
 
switch (x)
{
case 1:
{ //если пользователь выберет первый пункт, он обратится к найденному элементу и отредактирует его цену
Console.WriteLine("Введите новую цену для этой модели телевизора");
Massive[ind].Cost = Convert.ToInt16(Console.ReadLine());
}
break;
case 2:
{
Console.WriteLine("Введите нового производителя для этой модели телевизора");
Massive[ind].Creator = Console.ReadLine();
}
break;
case 3:
{
Console.WriteLine("Введите новую диагональ для этого телевизора");
Massive[ind].Size = Convert.ToInt16(Console.ReadLine());
}
break;
case 4:
{
Console.WriteLine("Введите новую модель для этого телевизора");
Massive[ind].Model = Console.ReadLine();
}
break;
case 5: //когда пользователь отредактирует сколько нужно, то с помощью 5 го пункта вернется в главное меню
menu(Massive);
break;
}
} while (x != 5);
 
 
 
}
 
static void search(Ttvbaze[]Massive) //функция поиска в массиве. Кстати, если немного подредактировать, получится функция которая принимает массив, ищет в нем и возвращает id элемента
{
Console.WriteLine("Введите диагональ телевизора чтобы найти");
int Size = Convert.ToInt16(Console.ReadLine()); //как обычно. спрашиваем у пользователя размер диагонали
 
//ищем диагональ в массиве, обычным перебором и сравнением
for (int i = 0; i < Massive.Length; i++)
{
if (Massive[i].Size == Size) //если есть совпадение, то выводит этот элемент на экран, все просто.
{
Console.Write("Модель: {0} | Диагональ: {1} | Производитель: {2} | Цена: {3} руб.", Massive[i].Model, Massive[i].Size, Massive[i].Creator, Massive[i].Cost);
Console.WriteLine();
}
}
}
 
static void show(Ttvbaze[] Massive) //самая простая функция в программе - вывод массива
{
//цикл вывода массива
for (int i = 0; i < Massive.Length; i++)
{
Console.Write("Модель: {0} | Диагональ: {1} | Производитель: {2} | Цена: {3} руб.", Massive[i].Model, Massive[i].Size, Massive[i].Creator, Massive[i].Cost);
Console.WriteLine();
}
Console.ReadLine();
Console.WriteLine();
menu(Massive);
}
 
static void quit() //нет, ошибся, оказывается есть еще проще функция - выход из программы.
{
Environment.Exit(0);
}
 
static void menu(Ttvbaze[] Massive) //функция главного меню, не путайте с главной функцией Main, она внизу
{
int x;
Console.Clear(); //перед каждым выходом в главное меню - очищаем консоль, мы же не грязнули
do
{
 
Console.WriteLine("Вы находитесь в главном меню. Выберите номер действия и нажмите Enter");
Console.WriteLine();
Console.WriteLine("1.Добавление");
Console.WriteLine("2.Удаление");
Console.WriteLine("3.Редактировать");
Console.WriteLine("4.Показать все");
Console.WriteLine("5.Поиск");
Console.WriteLine("6.Выход");
 
x = Convert.ToInt16(Console.ReadLine());
 
switch (x) //с помощью свитча бабахаем меню и вызываем те или иные функции в зависимости от выбора пользователя
{
 
case 1: add(Massive); break;
case 2: del(Massive); break;
case 3: edit(Massive); break;
case 4: show(Massive); break;
case 5: search(Massive); break;
case 6: quit(); break;
 
default: Console.WriteLine("Вы неправильно выбрали номер действия, попробуйте еще раз"); break;
}
 
Console.Write("\n\n\t\tДля выбора нового действия нажмите Enter");
Console.ReadLine();
Console.Clear();
 
}
while (x != 6); //выводим меню пока пользователь не закроет консоль или не нажмет выход
}
 
static void Main(string[] args) //главная функция
{
 
Ttvbaze[] Massive = new Ttvbaze[1]; //создаем любой пустой массив, чтобы его можно было передать в функцию menu
Massive = create(); //заменяем этот пустой массив, тем массивом который передаст нам функция Create в начале программы
menu(Massive); //переходим в гл.мен.
 
}
}
}
true вне форума   Ответить с цитированием

Старый 07.05.2013, 00:30
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Обратите внимание на эти топики, тут может быть решение проблемы

Структуры
Структуры
Программирование циклической структуры в Pascal ABC
Программирование алгоритмов разветвляющейся структуры
Структуры

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 23:38.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.