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

Поиск:

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


Новичок



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

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



Помогите пожалуйста новичку с решением задачи. Есть консольное приложение на C#.Которое выполняет следующие действия:

1)Пользователь несколько раз вводит доход, после этого выводится общая сумма его дохода.
2)затем аналогично вводится расход,после чего приложение выводит "Баланс" , т.е "Баланс"= "Доход"-"расход"
3)Кроме того вся информация,  которая была выведена приложением на экран, записывается в файл "money.txt" ,который создается в папке "Data"

  
Необходимо доработать приложение слудующим образом:

1)Обеспечить возможность ввода из консоли абсолютного (от названия диска до названия файла) либо относительного (от корневой директории приложения) пути к файлу с данными
2)Произвести разбор входящего файла с данными следующего формата:
Пример входящего файла
Доходы:
100
11.12.2009
200
15.05.2010
Расходы:
150
23.09.2010


3) И вывести на экран  ифнормацию следующим образом:
Результат работы программы
Доходы:
100 рублей от 11.12.2009
200 рублей от 15.05.2010
Расходы:
150 рублей от 23.09.2010
Общий баланс: 150 рублей


Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace CSLesson1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Сначала папка
            DirectoryInfo di = new DirectoryInfo("Data");

            // Если уже есть - удаляяем
            if (di.Exists)
                di.Delete(true);

            // И создаем заново
            di.Create();

            StreamWriter sw = File.CreateText("Data\\money.txt");

            if (File.Exists("Data\\money.txt"))
            {
                Console.WriteLine("Привет!");

                // Вводим доход
                int debitSum = 0;

                for (int i = 0; i < 10; i++)
                {
                    string debit = "";

                    Console.Write("Введите доход: ");
                    debit = Console.ReadLine();

                    int debitInt;
                    int.TryParse(debit, out debitInt);
                    debitSum += debitInt;
                }

                // Сначала напишем в консоль
                Console.WriteLine("Ваш доход: " + debitSum.ToString());
                Console.WriteLine();

                // А потом сохраним в файл
                sw.WriteLine("Ваш доход: " + debitSum.ToString());
                sw.WriteLine();

                // Вводим расход
                int creditSum = 0;

                for (int i = 0; i < 10; i++)
                {
                    string credit = "";
                    Console.Write("Введите расход: ");
                    credit = Console.ReadLine();

                    int creditInt = 0;
                    int.TryParse(credit, out creditInt);
                    creditSum += creditInt;
                }

                // Сначала напишем в консоль
                Console.WriteLine("Ваш расход: " + creditSum.ToString());
                Console.WriteLine();

                // А потом сохраним в файл
                sw.WriteLine("Ваш расход: " + creditSum.ToString());
                sw.WriteLine();

                /* Подсчет баланса
                 Вывод на экран текущего состояния дел
                 */
                int balance = debitSum - creditSum;

                Console.WriteLine("Ваш баланс: " + balance.ToString());
                sw.WriteLine("Ваш баланс: " + balance.ToString());

                if (balance > 0)
                {
                    Console.WriteLine("Поздравляем! Вы в плюсе!");
                    sw.WriteLine("Поздравляем! Вы в плюсе!");
                }
                else
                {
                    Console.WriteLine("Увы, у вас долги!");
                    sw.WriteLine("Увы, у вас долги!");
                }

                // И не забыть закрыть за собой
                sw.Close();
            }
            else
            {
                Console.WriteLine("Ошибка при открытии файла");
            }
            
            Console.ReadKey();
        }
    }
}



Это сообщение отредактировал(а) SP7 - 22.10.2010, 19:39
PM MAIL   Вверх
Fortnox
Дата 22.10.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

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



Не стал создавать новый проект и делать на свой лад. Использовал ваш код:
Код

class Program
    {
        private static bool isExit = false; // флаг выхода

        static void Main(string[] args)
        {
            PrintMenu();
            do
            {
                switch (Console.ReadLine())
                {
                    case "1": EnterData(); break;
                    case "2": ShowData(); break;
                    case "3": isExit = true; break;
                    default: PrintMenu(); break;
                }
            } while (!isExit);
        }

        static void EnterData()
        {
            CheckDirectory();
            try
            {
                using (StreamWriter sw = new StreamWriter("Data\\money.txt", false, Encoding.UTF8))
                {
                    Console.WriteLine("Привет!");

                    int debitSum = 0;
                    sw.WriteLine("Доходы:");
                    for (int i = 0; i < 3; i++)
                    {
                        int debitInt = 0;
                        DateTime date = new DateTime();

                        // ввод даты. Если дата будет введена неверно - запрос повторного ввода
                        do
                        {
                            Console.Write("Введите дату: ");
                        } while (!DateTime.TryParse(Console.ReadLine(), out date));

                        // ввод суммы дохода
                        do
                        {
                            Console.Write("Введите доход: ");
                        } while (!int.TryParse(Console.ReadLine(), out debitInt));

                        // записываем баланс файл
                        sw.WriteLine(debitInt);
                        sw.WriteLine(date.ToString("dd.mm.yyyy"));

                        debitSum += debitInt;
                    }

                    Console.WriteLine("Ваш доход: " + debitSum.ToString());
                    Console.WriteLine();

                    int creditSum = 0;
                    sw.WriteLine("Расходы:");
                    for (int i = 0; i < 3; i++)
                    {
                        int creditInt = 0;
                        DateTime date = new DateTime();

                        do
                        {
                            Console.Write("Введите дату: ");
                        } while (!DateTime.TryParse(Console.ReadLine(), out date));

                        do
                        {
                            Console.Write("Введите расход: ");
                        } while (!int.TryParse(Console.ReadLine(), out creditInt));
                        sw.WriteLine(creditInt);
                        sw.WriteLine(date.ToString("dd.mm.yyyy"));
                        creditSum += creditInt;
                    }

                    Console.WriteLine("Ваш расход: " + creditSum.ToString());
                    Console.WriteLine();

                    // выводим и записываем баланс в файл
                    int balance = debitSum - creditSum;
                    sw.WriteLine("Общий баланс: {0} рублей", balance);
                    Console.WriteLine("Ваш баланс: " + balance.ToString());

                    if (balance > 0)
                        Console.WriteLine("Поздравляем! Вы в плюсе!");
                    else
                        Console.WriteLine("Увы, у вас долги!");
                }
            }
            catch (Exception e)
            {
                PrintError(e.Message);
            }
        }

        /// <summary>
        /// Проверка существования директории и файла
        /// </summary>
        private static void CheckDirectory()
        {
            DirectoryInfo di = new DirectoryInfo("Data");

            if (di.Exists)
            {
                // если файл не существует, то создать
                if (!File.Exists("Data\\money.txt"))
                     File.Create("Data\\money.txt").Close();
            }
            else
                di.Create();
        }

        /// <summary>
        /// Вывод меню
        /// </summary>
        private static void PrintMenu()
        {
            Console.WriteLine("Меню:");
            Console.WriteLine("1 - ввод данных");
            Console.WriteLine("2 - вывод старых данных из файла");
            Console.WriteLine("3 - выход");
            Console.Write("Ваш выбор: ");
        }

        /// <summary>
        /// Вывод данных из файла
        /// </summary>
        private static void ShowData()
        {
            try
            {
                Console.WriteLine("Введите путь к файлу (оставьте пустым, чтобы использовать стандартный путь: Data\\money.txt)");
                Console.Write("Путь: ");
                string path = Console.ReadLine();

                if (path == string.Empty)
                    path = "Data\\money.txt";

                if (!File.Exists(path))
                    throw new FileNotFoundException();

                using (StreamReader sr = new StreamReader(path, Encoding.UTF8))
                {
                    // считываем весь файл с разбиением на строки в массив
                    string[] data = sr.ReadToEnd().Split(new string[] {Environment.NewLine},
                                                         StringSplitOptions.RemoveEmptyEntries);

                    if (data.Length == 0)
                        return;

                    // выводим данные
                    for (int i = 0; i < data.Length - 1; ++i)
                    {
                        if (data[i] == "Доходы:")
                        {
                            Console.WriteLine(data[i]);
                            continue;
                        }
                        else if (data[i] == "Расходы:")
                        {
                            Console.WriteLine(data[i]);
                            continue;
                        }

                        decimal sum = int.Parse(data[i]);
                        i++;
                        Console.WriteLine("{0} рублей от {1}", sum, data[i]);
                    }
                    Console.WriteLine(data[data.Length - 1]); // выводим текущий баланс
                }
            }
            catch(Exception e)
            {
                PrintError(e.Message);
            }
        }

        /// <summary>
        /// Вывод ошибки
        /// </summary>
        /// <param name="p">Сообщение ошибки</param>
        private static void PrintError(string p)
        {
            ConsoleColor oldColor = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Error: {0}", p);
            Console.ForegroundColor = oldColor;
        }
    }


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  ConsoleApplication2.zip 20,45 Kb
PM MAIL   Вверх
SP7
Дата 22.10.2010, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Fortnox, Спасибо большое за помощь. smile Сейчас буду разбираться в твоем коде. smile
PM MAIL   Вверх
SP7
Дата 23.10.2010, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Fortnox, а можно как-нибудь считать информацию из файла с ипользованием цикла while?
PM MAIL   Вверх
Fortnox
Дата 23.10.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

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



SP7, можно. Измененный метод ShowData:
Код

/// <summary>
        /// Вывод данных из файла
        /// </summary>
        private static void ShowData()
        {
            try
            {
                Console.WriteLine("Введите путь к файлу (оставьте пустым, чтобы использовать стандартный путь: Data\\money.txt)");
                Console.Write("Путь: ");
                string path = Console.ReadLine();

                if (path == string.Empty)
                    path = "Data\\money.txt";

                if (!File.Exists(path))
                    throw new FileNotFoundException();

                using (StreamReader sr = new StreamReader(path, Encoding.UTF8))
                {
                    // считываем весь файл с разбиением на строки в массив
                    string[] data = sr.ReadToEnd().Split(new string[] {Environment.NewLine},
                                                         StringSplitOptions.RemoveEmptyEntries);

                    if (data.Length == 0)
                        return;
                    int index = 1;

                    Console.WriteLine("Доходы:");
                    while (data[index].Trim() != "Расходы:")
                    {
                        decimal sum = int.Parse(data[index]);
                        index++;
                        Console.WriteLine("{0} рублей от {1}", sum, data[index]);
                        index++;
                    }

                    Console.WriteLine("Расходы:");
                    index++;
                    while (index <= data.Length - 2)
                    {
                        decimal sum = int.Parse(data[index]);
                        index++;
                        Console.WriteLine("{0} рублей от {1}", sum, data[index]);
                        index++;
                    }
                    Console.WriteLine(data[data.Length - 1]); // выводим текущий баланс
                }
            }
            catch(Exception e)
            {
                PrintError(e.Message);
            }
        }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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