Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Лучше не лучше, но лучше.
 Аватар для BlacKCheT
16 / 14 / 3
Регистрация: 11.03.2018
Сообщений: 422

Начисление пени

18.02.2019, 14:41. Показов 1760. Ответов 4

Студворк — интернет-сервис помощи студентам
Памагити, Код раскомментирован...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
       //НАЧИСЛЕНИЕ ПЕНИ
 
        public static string timeNow = DateTime.Now.ToString("yyyy-MM-dd");
        public static string timeSaved = DateTime.Now.ToString("yyyy-MM-dd");
 
        private void Form12_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (Convert.ToDateTime(timeSaved) == Convert.ToDateTime(timeNow))
            {
                timeSaved = "2019-02-14";
            }
        }
        
 
        private void Form12_Load(object sender, EventArgs e)
        {
            timeSaved = "2019-02-14"; //ЭТО ВРЕМЕННО, А ТАК = timeNow;
            MessageBox.Show(timeSaved);
            TimeSpan timeSpan = Convert.ToDateTime(timeNow) - Convert.ToDateTime(timeSaved); //РАЗНИЦА ВО ВРЕМЕНИ
            MessageBox.Show(Convert.ToString(timeSpan));
            //ПЕНЯ = book_val/9*timeSpan
            foreach (DataGridViewRow row in dataGridView1.Rows)                           //ЕСЛИ ТЕКУЩЕЕ ВРЕМЯ БОЛЬШЕ ДАТЫ ВОЗВРАТА И СОХРАНЕННОЕ ВРЕМЯ НЕ РАВНО ТЕКУЩЕМУ
                if ((Convert.ToDateTime(timeNow) > Convert.ToDateTime(row.Cells["d_of_ret"].Value)) && (Convert.ToDateTime(timeSaved) != Convert.ToDateTime(timeNow)))
                {
 
                    //VARS
                    double val = Convert.ToSingle(row.Cells["penalty"].Value); //ЗНАЧЕНИЕ ПЕНИ
                    double book_val = Convert.ToSingle(row.Cells["book_val"].Value); //СТОИМОСТЬ КНИГИ
                    float penya = (float)(book_val) / 9; //10% ОТ СТОИМОСТИ примерно...
                    string id = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString(); //ИД
 
                    MySqlConnection coon = new MySqlConnection(connStr);
                    BindingSource bindingSorce = new BindingSource();
                    MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = coon;
                    if (Convert.ToSingle(row.Cells["penalty"].Value) == 0) //ЕСЛИ ПЕНИ НЕБЫЛО
                    {
                        //SQL row.Cells["penalty"].Value = Convert.ToDouble(book_val)/9;
                        cmd.CommandText = "UPDATE issued_books set penalty=@penya where id=@id";
 
                    }
                    else
                    {
                        //SQL row.Cells["penalty"].Value = val*Convert.ToDouble(timeSpan);
 
                        //ЕСЛИ ЕСТЬ ТО НАКИДЫВАЕМ СВЕРХУ
                        cmd.CommandText = "UPDATE issued_books set penalty=@val*@timeSpan where id=@id";
 
                    }
                    coon.Open();
                    cmd.Parameters.AddWithValue("@penya", penya);
                    cmd.Parameters.AddWithValue("@timeSpan", timeSpan);
                    cmd.Parameters.AddWithValue("@val", val);
                    cmd.Parameters.AddWithValue("@id", id);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Record Updated Successfully");
                    coon.Close();
                    
                }
                
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2019, 14:41
Ответы с готовыми решениями:

Начисление пени
Ну вот дописал, я свое чудо... Все работает, но есть один нюанс.., почему когда я изменяю запись, то начисление пени не происходит? ...

Начисление бонусов (операторы if)
using System; /* * Условие задачи * если сумма покупки равна 1-999 начисление бонуксов 2% * если сумма покупки равна 1000...

Начисление ежедневной пени
Доброе утро. подскажите как сделать так, чтоб определённая сума ежедневно умножалась на 0,3% ? к примеру 10$ ежедневно умножать на 0,3%...

4
Лучше не лучше, но лучше.
 Аватар для BlacKCheT
16 / 14 / 3
Регистрация: 11.03.2018
Сообщений: 422
18.02.2019, 14:45  [ТС]
Код работает, но вот так..
Миниатюры
Начисление пени  
0
Лучше не лучше, но лучше.
 Аватар для BlacKCheT
16 / 14 / 3
Регистрация: 11.03.2018
Сообщений: 422
18.02.2019, 16:52  [ТС]
Я так понял, что у меня не проходит по всем ячейкам?

Добавлено через 2 часа 5 минут
Пока переделал код, но есть дыра, которую не так то просто решить... Дело в том, что вот прошел день, даты не совпали, произошло начисление пени, хорошо, но дата возврата-то не изменилась... т.е при следующем начислении программа опять посчитает кол-во дней между текущей датой и временем возврата и добавит еще больше, чем нужно... Пока только придумал создать еще 1 таблицу, к ней привязать idшники клиентов, и после начисления обновлять эту дату, на текущую..или сохраненную... А пока вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 //НАЧИСЛЕНИЕ ПЕНИ
 
        public static string timeNow = DateTime.Now.ToString("yyyy-MM-dd");
        public static string timeSaved = DateTime.Now.ToString("yyyy-MM-dd");
 
        private void Form12_FormClosed(object sender, FormClosedEventArgs e)
        {
            File.WriteAllText("save_date.txt", timeNow);
        }
        
 
        private void Form12_Load(object sender, EventArgs e)
        {
            using (FileStream fstream = File.OpenRead(@"C:\Users\NiksoN\source\repos\WindowsFormsApp9\WindowsFormsApp9\bin\Debug\save_date.txt"))
            {
                // преобразуем строку в байты
                byte[] array = new byte[fstream.Length];
                // считываем данные
                fstream.Read(array, 0, array.Length);
                // декодируем байты в строку
                string timeSaved = System.Text.Encoding.Default.GetString(array);
            }
            MessageBox.Show(timeSaved);
            TimeSpan timeSpan = Convert.ToDateTime(timeNow) - Convert.ToDateTime(timeSaved); //РАЗНИЦА ВО ВРЕМЕНИ
            MessageBox.Show(Convert.ToString(timeSpan.TotalDays));
            //ПЕНЯ = book_val/9*timeSpan
            foreach (DataGridViewRow row in dataGridView1.Rows)                           //ЕСЛИ ТЕКУЩЕЕ ВРЕМЯ БОЛЬШЕ ДАТЫ ВОЗВРАТА И СОХРАНЕННОЕ ВРЕМЯ НЕ РАВНО ТЕКУЩЕМУ
                if ((Convert.ToDateTime(timeNow) > Convert.ToDateTime(row.Cells["d_of_ret"].Value)) && (Convert.ToDateTime(timeSaved) != Convert.ToDateTime(timeNow)))
                {
 
                    //VARS
                    double val = Convert.ToSingle(row.Cells["penalty"].Value); //ЗНАЧЕНИЕ ПЕНИ
                    double book_val = Convert.ToSingle(row.Cells["book_val"].Value); //СТОИМОСТЬ КНИГИ
                    //float penya = (float)(book_val) / 9; //10% ОТ СТОИМОСТИ примерно...
 
                    MySqlConnection coon = new MySqlConnection(connStr);
                    BindingSource bindingSorce = new BindingSource();
                    MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = coon;
                    if (Convert.ToSingle(row.Cells["penalty"].Value) == 0) //ЕСЛИ ПЕНИ НЕБЫЛО
                    {
                        row.Cells["penalty"].Value = Convert.ToDouble(book_val)/9;
                        cmd.CommandText = "UPDATE issued_books set penalty=@penya where id=@id";
 
                    }
                    else
                    {
                        row.Cells["penalty"].Value = val*(int)(timeSpan.TotalHours);
 
                        //ЕСЛИ ЕСТЬ ТО НАКИДЫВАЕМ СВЕРХУ
                        cmd.CommandText = "UPDATE issued_books set penalty=@penya where id=@id";
 
                    }
                    coon.Open();
                    cmd.Parameters.AddWithValue("@penya", Convert.ToSingle(row.Cells["penalty"].Value));
                    cmd.Parameters.AddWithValue("@id", Convert.ToSingle(row.Cells["id"].Value));
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Record Updated Successfully");
                    coon.Close();
                    
                }
                
        }
0
Лучше не лучше, но лучше.
 Аватар для BlacKCheT
16 / 14 / 3
Регистрация: 11.03.2018
Сообщений: 422
18.02.2019, 23:13  [ТС]
Что не так? дата не обновляется... d_of_penalty

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  //НАЧИСЛЕНИЕ ПЕНИ
 
        public static string timeNow = DateTime.Now.ToString("yyyy-MM-dd");
        public static string timeSaved = DateTime.Now.ToString("yyyy-MM-dd");
 
        private void Form12_FormClosed(object sender, FormClosedEventArgs e)
        {
            File.WriteAllText("save_date.txt", timeNow);
        }
 
 
        private void Form12_Load(object sender, EventArgs e)
        {
            
            using (FileStream fstream = File.OpenRead(@"C:\Users\NiksoN\source\repos\WindowsFormsApp9\WindowsFormsApp9\bin\Debug\save_date.txt"))
            {
                // преобразуем строку в байты
                byte[] array = new byte[fstream.Length];
                // считываем данные
                fstream.Read(array, 0, array.Length);
                // декодируем байты в строку
                string timeSaved = System.Text.Encoding.Default.GetString(array);
            }
            
            timeSaved = "2019-02-18";
            MessageBox.Show(timeSaved);
            TimeSpan timeSpan = Convert.ToDateTime(timeNow) - Convert.ToDateTime(timeSaved); //РАЗНИЦА ВО ВРЕМЕНИ
            MessageBox.Show(Convert.ToString(timeSpan.TotalDays));
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {                  //ЕСЛИ ТЕКУЩЕЕ ВРЕМЯ БОЛЬШЕ ДАТЫ ВОЗВРАТА И СОХРАНЕННОЕ ВРЕМЯ НЕ РАВНО ТЕКУЩЕМУ
                if (((Convert.ToDateTime(timeNow) > Convert.ToDateTime(row.Cells["d_of_ret"].Value)) && (Convert.ToDateTime(timeSaved) != Convert.ToDateTime(timeNow)) && (Convert.ToSingle(row.Cells["penalty"].Value)) == 0) && (Convert.ToString(row.Cells["d_of_penalty"].Value) == "1111-11-11"))
                {
                    //VARS
                    double val = Convert.ToSingle(row.Cells["penalty"].Value); //ЗНАЧЕНИЕ ПЕНИ
                    double book_val = Convert.ToSingle(row.Cells["book_val"].Value); //СТОИМОСТЬ КНИГИ
 
                    MySqlConnection coon = new MySqlConnection(connStr);
                    BindingSource bindingSorce = new BindingSource();
                    MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = coon;
 
                        row.Cells["penalty"].Value = Convert.ToDouble(book_val) / 9;
                        row.Cells["d_of_penalty"].Value = Convert.ToString(timeNow);
                        cmd.CommandText = "UPDATE issued_books set penalty=@penya, d_of_penalty=@d_of_pen where id=@id";
 
                    coon.Open();
                    cmd.Parameters.AddWithValue("@penya", Convert.ToString(row.Cells["penalty"].Value));
                    cmd.Parameters.AddWithValue("@d_of_pen", Convert.ToString(row.Cells["d_of_penalty"].Value));
                    cmd.Parameters.AddWithValue("@id", Convert.ToString(row.Cells["id"].Value));
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Record Updated Successfully");
                    coon.Close();
 
                }
                else if (((Convert.ToDateTime(timeNow) > Convert.ToDateTime(row.Cells["d_of_penalty"].Value)) && (Convert.ToDateTime(timeSaved) != Convert.ToDateTime(timeNow)) && (Convert.ToSingle(row.Cells["penalty"].Value)) != 0) && (Convert.ToString(row.Cells["d_of_penalty"].Value) != "1111-11-11"))
                {
 
                    //VARS
                    double val = Convert.ToSingle(row.Cells["penalty"].Value); //ЗНАЧЕНИЕ ПЕНИ
                    timeSpan = Convert.ToDateTime(timeNow) - Convert.ToDateTime(row.Cells["d_of_penalty"].Value);
                    MySqlConnection coon = new MySqlConnection(connStr);
                    BindingSource bindingSorce = new BindingSource();
                    MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = coon;
 
                    if ((int)(timeSpan.TotalHours) == 1)
                    {
                        row.Cells["penalty"].Value = val + val;
                    }
                    else
                    {
                        row.Cells["penalty"].Value = (int)(timeSpan.TotalHours) * val;
                    }
                    row.Cells["d_of_penalty"].Value = Convert.ToString(timeNow);
                    //ЕСЛИ ЕСТЬ ТО НАКИДЫВАЕМ СВЕРХУ
                    cmd.CommandText = "UPDATE issued_books set penalty=@penya, d_of_penalty=@d_of_pen where id=@id";
 
                    coon.Open();
                    cmd.Parameters.AddWithValue("@penya", Convert.ToString(row.Cells["penalty"].Value));
                    cmd.Parameters.AddWithValue("@d_of_pen", Convert.ToString(row.Cells["d_of_penalty"].Value));
                    cmd.Parameters.AddWithValue("@id", Convert.ToString(row.Cells["id"].Value));
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Record Updated Successfully");
                    coon.Close();
                }
 
            }
 
        }
Добавлено через 8 секунд
И начисление не идет..

Добавлено через 1 минуту
Переписал, добавил столбец d_of_penalty... и сделал на него проверку..
0
Лучше не лучше, но лучше.
 Аватар для BlacKCheT
16 / 14 / 3
Регистрация: 11.03.2018
Сообщений: 422
19.02.2019, 12:26  [ТС]
Вроде норм, но почему такие большие цифры в Пени получаются?!?!?!?!?!?!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 //НАЧИСЛЕНИЕ ПЕНИ
 
        public static string timeNow = DateTime.Now.ToString("yyyy-MM-dd");
 
 
        private void Form12_Load(object sender, EventArgs e)
        {
            
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {                  //ЕСЛИ ТЕКУЩЕЕ ВРЕМЯ БОЛЬШЕ ДАТЫ ВОЗВРАТА И СОХРАНЕННОЕ ВРЕМЯ НЕ РАВНО ТЕКУЩЕМУ
 
                if (((Convert.ToDateTime(timeNow) > Convert.ToDateTime(row.Cells["d_of_ret"].Value)) && (Convert.ToSingle(row.Cells["penalty"].Value)) == 0) && (Convert.ToString(row.Cells["d_of_penalty"].Value) == "1111.11.11"))
                {
                    //VARS
                    float val = Convert.ToSingle(row.Cells["penalty"].Value); //ЗНАЧЕНИЕ ПЕНИ
                    MessageBox.Show(Convert.ToString(val));
                    float book_val = Convert.ToSingle(row.Cells["book_val"].Value); //СТОИМОСТЬ КНИГИ
                    MessageBox.Show(Convert.ToString(book_val));
                    string d_of_pen = row.Cells["d_of_penalty"].Value.ToString();
                    string id = row.Cells["id"].Value.ToString();
                    TimeSpan timeSpan = Convert.ToDateTime(timeNow) - Convert.ToDateTime(row.Cells["d_of_ret"].Value); //РАЗНИЦА ВО ВРЕМЕНИ
                    MessageBox.Show(Convert.ToString(timeSpan));
 
                    MySqlConnection coon = new MySqlConnection(connStr);
                    BindingSource bindingSorce = new BindingSource();
                    MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = coon;
                               
                        val = ((book_val) / 9) * (int)(timeSpan.TotalHours);
                    MessageBox.Show(Convert.ToString(val));
                    d_of_pen = Convert.ToString(timeNow);
                        cmd.CommandText = "UPDATE issued_books set penalty=@penya, d_of_penalty=@d_of_pen where id=@id";
 
                    coon.Open();
                    cmd.Parameters.AddWithValue("@penya", Convert.ToString(val));
                    cmd.Parameters.AddWithValue("@d_of_pen", Convert.ToString(d_of_pen));
                    cmd.Parameters.AddWithValue("@id", Convert.ToString(id));
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Record Updated Successfully");
                    coon.Close();
 
                }
                else if ((Convert.ToDateTime(timeNow) > Convert.ToDateTime(row.Cells["d_of_penalty"].Value)) && (Convert.ToDateTime(row.Cells["d_of_penalty"].Value) != Convert.ToDateTime(timeNow)) && ((Convert.ToSingle(row.Cells["penalty"].Value)) != 0) && (Convert.ToString(row.Cells["d_of_penalty"].Value) != "1111.11.11"))
                {
 
                    //VARS
                    float val = Convert.ToSingle(row.Cells["penalty"].Value); //ЗНАЧЕНИЕ ПЕНИ
                    string d_of_pen = row.Cells["d_of_penalty"].Value.ToString();
                    string id = row.Cells["id"].Value.ToString();
                    TimeSpan timeSpan = Convert.ToDateTime(timeNow) - Convert.ToDateTime(row.Cells["d_of_penalty"].Value);
 
                    MySqlConnection coon = new MySqlConnection(connStr);
                    BindingSource bindingSorce = new BindingSource();
                    MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = coon;
 
                    if ((int)(timeSpan.TotalHours) == 1)
                    {
                        val = val + val;
                        MessageBox.Show(Convert.ToString(val));
                    }
                    else
                    {
                        val = val * (int)(timeSpan.TotalHours);
                        MessageBox.Show(Convert.ToString(val));
                    }
                    d_of_pen = Convert.ToString(timeNow);
                    //ЕСЛИ ЕСТЬ ТО НАКИДЫВАЕМ СВЕРХУ
                    cmd.CommandText = "UPDATE issued_books set penalty=@penya, d_of_penalty=@d_of_pen where id=@id";
 
                    coon.Open();
                    cmd.Parameters.AddWithValue("@penya", Convert.ToString(val));
                    cmd.Parameters.AddWithValue("@d_of_pen", Convert.ToString(d_of_pen));
                    cmd.Parameters.AddWithValue("@id", Convert.ToString(id));
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Record Updated Successfully");
                    coon.Close();
                }
                else if((Convert.ToDateTime(timeNow) == Convert.ToDateTime(row.Cells["d_of_penalty"].Value)))
                {
                    break;
                }
 
            }
 
        }
Добавлено через 1 минуту
Переделал, сделал отдельное поле, куда записывается последняя дата ничисления пени... разделил это двумя условиями ЕСЛИ нету пени и ЕСЛИ есть..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2019, 12:26
Помогаю со студенческими работами здесь

Расчёт пени
В общем помогите сообразить как сделать так: Шершу ваш форум и гугл.

Расчёт пени
Приветствую Вас, форумчане! Проблема следующая. Компания занимается реализацией авто в рассрочку. Есть три таблицы - График, Касса,...

Расчёт пени
В документе Задолженности в поле табличной части Пеня рассчитать собственно пеню. Исходная сумма берётся из поля Сумма табличной части...

Расчет пени по срокам
Доброго времени всем ребят, помогите решить проблему с расчетом пени. Есть определенная сумма, которую нужно оплатить. Размер...

Запрос на вычислении пени
Здравствуйте. Неполучается написать запрос на вычисление пени. Выдает по нулям. Запрос таков: Пеня: iif(>Date(); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru