Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Покритикуйте код по задаче со структурами 
:(
    Опции темы
mastermedia
Дата 2.2.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 31.10.2010

Репутация: нет
Всего: нет



Выполнял задачу по структурам. Вроде выполнил правильно, но вышел достаточно кривой код. Прошу дать замечания по коду и проверить правильность выполнения мною задания.

Задание:
1. В задаче подразумевается, что исходная информация хранится в текстовом файле input.txt, каждая строка которого содержит полную информацию о некотором объекте, результирующая информация должна быть записана в файл output.txt.
2. Для хранения данных внутри программы организовать массив структур.
3. В типе структура реализуется метод CompareTo интерфейса IComparable, перегружается метод ToString базового класса object и необходимые операции отношения, поля данных и дополнительные методы продумайте самостоятельно.

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

Входной файл:
Цитата
Anton, 6, 42
Nina, 5, 11
Vasa, 2, 34
Lusa, 3, 48

Первое число - это количество вещей. Последнее средний вес багажа каждого пассажира.

Выходной файд:
Цитата
ФИО Vasa, количество вещей в багаже 2, вес багажа 34
ФИО Lusa, количество вещей в багаже 3, вес багажа 48
ФИО Anton, количество вещей в багаже 6, вес багажа 42

Код

namespace упражнения_2.Интерфейсы
{
    
    struct BagageList : IComparable
    {
        string Name;
        int CountOfThings;
        public static double Weight;
        double AverageWeight;
        
        public BagageList(string Name, int CountOfThings, double AverageWeight) : this()
        {
            this.Name = Name;
            this.CountOfThings = CountOfThings;
            this.AverageWeight = AverageWeight;
        }
 
        public bool checkWeight()
        {
            if (AverageWeight > Weight)
                return true;
 
            else
                return false;
        }
 
        public int CompareTo(object obj)
        {
            BagageList person = (BagageList) obj;
            return this.CountOfThings.CompareTo(person.CountOfThings);
        }
 
        public override string ToString()
        {
            return String.Format("ФИО {0}, количество вещей в багаже {1}, вес багажа {2}\n", Name, CountOfThings, AverageWeight);
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            BagageList[] passanger = new BagageList[4];
            string[] fileData =  new string[3];
            string[] fileData2 = new string[4];
            int i = 0;
            int newSize = 0;
            string data = string.Empty;
            StreamReader file = new StreamReader(@"c:\passanger.txt");
            Console.WriteLine("Считывание из файла.");
            while ((data = file.ReadLine()) != null)
            {
                string name = string.Empty;
                int things = 0;
                double weight = 0;
                fileData = data.Split(", ".ToCharArray());
                
                name = fileData[0];
                things = Convert.ToInt32(fileData[2]);
                weight = Convert.ToDouble(fileData[4]);
                   
                passanger[i] = new BagageList(name, things, weight);
                i++;
            }
 
            foreach (BagageList p in passanger)
            {
                Console.Write(p.ToString());
            }
            
            Console.WriteLine();
            
            Array.Sort(passanger);
            BagageList.Weight = 30;
 
            for (int j = 0; j < fileData2.Length; j++)
            {
                if (!passanger[j].checkWeight())
                {
                    continue;
                }
                
                fileData2[j] = passanger[j].ToString();
 
                if (!(fileData2[j] == null))
                {
                    newSize++;
                }
            }
 
            for (int j = 0; j < fileData2.Length - 1; j++)
            {
                string temp;
                if (fileData2[j] == null)
                {
                    temp = fileData2[j + 1];
                    fileData2[j + 1] = fileData2[j];
                    fileData2[j] = temp;
                }
            }
 
            Array.Resize(ref fileData2, newSize);
            File.WriteAllLines(@"c:\passanger2.txt", fileData2);
            Console.WriteLine("Запись в файл завершенна.");
        }
    }
}

PM MAIL   Вверх
VSB
Дата 3.2.2012, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 23.8.2007

Репутация: нет
Всего: 2



Вобщем вроде правильно, вот замечания

Избегайте ветвлений вида
Код

 if (условие) {return true;} else {return false;}
 - лучше используйте сразу 
Код

return условие;


Используйте IComparable<T> вместо IComparable

Старайтесь меньше использовать операторв continue и break в циклах, лучше используйте вложенные и/или сложные условия - как правило, можно обойтись без упомянутых операторов.

Кривовато сделан вывод в файл, но не подскажу как лучше - потребность простого файлового ввода-вывода возникала только пару раз и очень давно - делал тоже криво.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1058 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.