07.05.2013, 00:30 | #1 (permalink) |
Новичок
Регистрация: 07.05.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Структуры
вот код Код:
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); //переходим в гл.мен. } } } |
07.05.2013, 00:30 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Обратите внимание на эти топики, тут может быть решение проблемы Структуры Структуры Программирование циклической структуры в Pascal ABC Программирование алгоритмов разветвляющейся структуры Структуры |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|