Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Банковские счета


Автор: LiToRBoL 23.5.2009, 16:51
Напишите программу ведения банковских счетов. Ежемесячная процентная ставка по банковским вкладам составляет 6 % от суммы вклада. Если вклады сделаны до десятого числа, то проценты начисляются за весь месяц. Для того чтобы вкладчики не изымали часто вклады, приняты следующие меры: с вкладчика с минимальным балансом менее 1000 долларов, делающего более пяти изъятий в месяц, удерживают 50 центов с каждого изъятия после пяти изъятий. Процент начисляется ежемесячно по минимальному месячному балансу.
Программа должна обеспечивать:
ввод и хранение в файле информации (номер банковского счета; фамилия вкладчика; дата проведения операции; вид операции; сумма, с
которой проводилась операция; остаток вклада);

Код

#include <stdio.h>
#include <conio.h>
#include <string.h>

    struct bank
    {char F[20];                           //    фамилия вкладчика
    int date, number;                  // date -  (день меясца <= 30),  number - номер банковского счета
    int start, k;                            // start -  первоначальная сумма, 
    float end;                              // остаток
    }bk;

            float vklad (int day, int money)
            {
            if (day<10)
            return (money*1.06);
            else
            return (money+(money*(30-day)*0.002));
            }



void input()
{
FILE *f;
printf ("Введите фамилию вкладчика\n");      gets(bk.F);
printf ("Введите номер счета\n");                scanf ("%d", &bk.number);
printf ("Сегоднешнее число\n");              scanf ("%d", &bk.date);
printf ("Сумма которую вы хотите внести\n"); scanf ("%d", &bk.start);
bk.end = vklad(bk.date, bk.start);  
printf ("%f", bk.end);
bk.k=0;
f=fopen ("bank.dat","ab+");

fwrite (&bk, sizeof(bank),1,f);
fclose(f);
}


void output(char fam[15])                   \\ В этой функции информация не изменяется а дополняется в конец файла
{
FILE *f;
f=fopen ("bank.dat","ab+");
float min;
while (feof(f)==0)
    {
    fread (&bk, sizeof(bank),1,f);
    if (strcmp (fam,bk.F)==0 && feof(f)==0)
        {
        printf ("Остаток на вашем счете: %f\n", bk.end);
        printf ("Какую сумму вы хотите снять:\n");
        scanf ("%f", &min);
     
        if (bk.end>1000)
            {
            bk.end-=min;
            printf ("Остаток %f \n", bk.end);
            }
        else
            {
            printf ("Количество операций снятия %d \n", bk.k);
            if (bk.k>5)
                {
                bk.end=bk.end-min-0.05;
                printf ("Остаток %d \n", bk.end);
                bk.k++;
                }
            }

    }


    }
fwrite (&bk, sizeof(bank),1,f);
fclose(f);
}


    void poiskN (int a)
    {
    FILE *f;
    f=fopen ("bank.dat","rb");
    while (feof(f)==0)
        {
        fread (&bk, sizeof(bank),1,f);
        if (a==bk.number && feof(f)==0)
        printf ("%d %s %d %d %f", bk.number, bk.F, bk.date, bk.start, bk.end);
        }
    fclose(f);
    }


void poiskF(char fam[15])
{
FILE *f;
f=fopen ("bank.dat","rb");
while (feof(f)==0)
    {
    fread (&bk, sizeof(bank),1,f);
    if (strcmp (fam,bk.F)==0 && feof(f)==0)
    printf ("%d %s %d %d %f", bk.number, bk.F, bk.date, bk.start, bk.end);
    }
fclose(f);
}




  void main()
  {
    int No;
    char fam[15], s='\0';
    char temp[20];
        int k=0, tempN;
        FILE *f;
        f=fopen ("bank.dat","ab+");
            if(f!=0)
            {
            do
            {
            clrscr();
            printf ("Создать новый файл          0\n");
            printf ("                            1 Положить на счет\n");
            printf ("Выбрать тип операции:\n");
            printf ("                            2 Снять со счета\n");

            printf("\n                            3 Поиск информации по номеру счета\n");
            printf ("Поиск информации:\n");
            printf("                            4 Поиск информации по Фамилии\n");
            //clrscr();
            s=getche();
            }
            while ( s!='0' && s!='1' && s!='2' && s!='3' && s!='4');
            }
            if (s=='0')
            {
            f=fopen("bank.dat", "wb+");
            }

            if (s=='1')
            {
            input();
            getch();
            }

            if (s=='2')
            {
            printf ("Введите фамилию\n");
            gets(fam);
            output(fam);
            }
            if (s=='3')
            {
            printf ("\nВведите номер счета");
            scanf ("%d", &No);
            poiskN(No);
            getch();
            }

            if (s=='4')
            {
            printf ("\nВведите фамилию вкладчика");
            gets(fam);
            poiskF(fam);
            getch();
            }
     }



Прошу исправить косяк в функции output. Заране благодарен.



Автор: zim22 23.5.2009, 17:06
Цитата

[C++] Банковские счета

не увидел ни одной строчки на С++...
Цитата(LiToRBoL @  23.5.2009,  16:51 Найти цитируемый пост)
Прошу исправить косяк в функции output. Заране благодарен.

в чём косяк то?

Автор: LiToRBoL 23.5.2009, 17:26
Borland C 3.1

Я написал в коментах кода 
Цитата

В этой функции информация не изменяется а дополняется в конец файла

Автор: zim22 23.5.2009, 17:41
Цитата(LiToRBoL @  23.5.2009,  16:51 Найти цитируемый пост)
f=fopen ("bank.dat","ab+");

почитайте про фунцкию http://www.cplusplus.com/reference/clibrary/cstdio/fopen/

Цитата

"a+"    Open a file for reading and appending. All writing operations are performed at the end of the file, protecting the previous content to be overwritten. You can reposition (fseek, rewind) the internal pointer to anywhere in the file for reading, but writing operations will move it back to the end of file. The file is created if it does not exist.

английский понимаете?

Автор: mr.Anderson 23.5.2009, 17:47

M
mr.Anderson
Модератор: пользуйтесь тегами подсветки! Исправил.

Автор: LiToRBoL 25.5.2009, 06:52
Про "а+" понятно, но так все таки что мне делать то? smile

Автор: zim22 25.5.2009, 08:20
Цитата(LiToRBoL @  25.5.2009,  06:52 Найти цитируемый пост)
Про "а+" понятно, но так все таки что мне делать то?

использовать другие режимы открытия файла.
также вам пригодится функция fseek

Автор: LiToRBoL 25.5.2009, 19:45
ну я так понимаю читаю и записываю в файл "r+", вот с fseek'ом хз че делать, какие параметры в нем прописать? 

Автор: zim22 26.5.2009, 06:42
Цитата(LiToRBoL @  25.5.2009,  19:45 Найти цитируемый пост)
 вот с fseek'ом хз че делать, какие параметры в нем прописать?

http://www.cplusplus.com/reference/clibrary/cstdio/fseek/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)