Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Microsoft .NET

  Все выпуски  

RFpro.ru: Microsoft .NET


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Асмик Александровна
Статус: Академик
Рейтинг: 7638
∙ повысить рейтинг »
Micren
Статус: Профессор
Рейтинг: 1873
∙ повысить рейтинг »
Andrew Kovalchuk
Статус: Профессионал
Рейтинг: 692
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Microsoft .NET : C#

Номер выпуска:207
Дата выхода:06.04.2011, 14:00
Администратор рассылки:Alexey G. Gladenyuk (Управляющий)
Подписчиков / экспертов:162 / 58
Вопросов / ответов:1 / 1

Вопрос № 182687: ∙ Исходная информация хранится в текстовом файле input.txt, каждая строка которого содержит полную информацию о некотором объекте, результирующая информация должна быть записана в файл output.txt. ∙ Для хранения данных внутри программ...



Вопрос № 182687:

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

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

С#. Если можно ,то оформите пожалуйста с комментариями .

Отправлен: 01.04.2011, 13:17
Вопрос задал: relliko (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Micren (Профессор) :
Здравствуйте, relliko!
Программа:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;

namespace Application
{
class MainClass
{
// Имена файлов
const string inFile = "input.txt";
const string outFile = "output.txt";

// Разделитель полей в файлах
const char delimiter = ':';

public static void Main (string[] args)
{
try {
// Сортируем данные
Array.Sort (Data);
PrintLuggage ("Исходный список:", Data);

// Ввод максимального веса
Console.Write ("Заданный вес:");
string str = Console .ReadLine ();
double weight = double.Parse (str);

// Пассажиры с весом превышающим допустимый
Luggage[] lot = (from c in Data
where c.Weight / c.Count > weight
select c).ToArray ();

PrintLuggage ("Превышает вес:", lot);

// Выводим в файл
using (StreamWriter sw = new StreamWriter (outFile)) {
for (int i = 0; i < lot.Length; ++i) {
sw.WriteLine ("{0:F}", lot[i]);
}
}
} catch (Exception ex) {
Console.WriteLine (ex.Message);
}
}

// Распечатка массива
static void PrintLuggage (string msg, Luggage[] l)
{
Console.WriteLine (msg);
if (l != null) {
for (int i = 0; i < l.Length; ++i) {
Console.WriteLine (l[i]);
}
}
}

// Читает данные из файла
static Luggage[] GetData (string file)
{
List<Luggage> luggages = new List<Luggage& gt; ();
try {
using (StreamReader sr = new StreamReader (file)) {
string line;
while ((line = sr.ReadLine ()) != null) {
line = line.Trim ();
if (!string.IsNullOrEmpty (line)) {
string[] fields = line.Split (delimiter);
uint count = uint.Parse (fields[1]);
double weight = double.Parse (fields[2]);
luggages.Add (new Luggage (fields[0], count, weight));
}
}
}
} catch (Exception) {
throw;
}
return luggages.ToArray ();
}

static Luggage[] Data {
get {
if (data == null) {
data = GetData (inFile);
}
return data;
}
}

private static Luggage[] data = null;

// Собственно сама структура
struct Luggage : IComparable, IFormattable
{
public Luggage (string who, uint count, double weight)
{
this.who = who.Trim();
this.count = count;
this. weight = weight;
}

public string Who {
get { return who; }
set { who = value; }
}

public uint Count {
get { return count; }
set { count = value; }
}

public double Weight {
get { return weight; }
set { weight = value; }
}

public int CompareTo (object obj)
{
Luggage l = (Luggage)obj;
if (count == l.count) {
return 0;
} else if (count > l.count) {
return 1;
} else {
return -1;
}
}

public override string ToString ()
{
return string.Format ("{0}, {1}, {2}", Who, Count, Weight);
}

public string ToString (string format, IFormatProvider formatProvider)
{
switch (format) {
case "F":
return string.Format ("{0} " + delimiter + " {1} " + delimiter + " {2}", Who, Count, Weight);
default: return ToString ();
}
}

private string who;
private uint count;
private double weight;

}
}
}

Файл input.txt:
Код:
Сидоров И.П. :  3  : 5
Петров С.Н. : 1 : 10
Иванов М.Г. : 2 : 7

Пример работы:
Код:
Исходный список:
Петров С.Н., 1, 10
Иванов М.Г., 2, 7
Сидоров И.П., 3, 5
Заданный вес:5
Превышает вес:
Петров С.Н., 1, 10

-------------------------------------

Исходный список:
Петров С.Н., 1, 10
Иванов М.Г., 2, 7
Сидоров И.П., 3, 5
Заданный вес:2
Превышает вес:
Петров С.Н., 1, 10
Иванов М.Г., 2, 7

Ответ отправил: Micren (Профессор)
Ответ отправлен: 01.04.2011, 16:04
Номер ответа: 266496
Украина, Краматорск

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 266496 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное