Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Проверьте код, найдите ошибку (http://forum.oszone.net/showthread.php?t=249961)

кэп 25-12-2012 20:37 2053346

Проверьте код, найдите ошибку
 
Создать файл, содержащий сведения о сотрудниках фирмы. Запись включает: Ф.И.О. сотрудников; табельный номер; количество проработанных часов за месяц; почасовой тариф. Рабочее время свыше 144 часов считается сверхурочным и оплачивается в двойном размере. ВЫВЕСТИ РАЗМЕР ЗАРАБОТНОЙ ПЛАТЫ КАЖДОГО СОТРУДНИКА ФИРМЫ ЗА ВЫЧЕТОМ ПОДОХОДНОГО НАЛОГА, КОТОРЫЙ СОСТАВЛЯЕТ 12% ОТ СУММЫ ЗАРАБОТНОЙ ПЛАТЫ.

Код:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
struct ved
{
        char name[20];
        int number;
        int chasi;
        int tarif;
        //int zarplata;
};

void main()
{
        int z=0;
        struct ved mas[20];
        int size=0;
        FILE *f;
        f=fopen("1.txt","r+");
        while(!feof(f))
        {
                fgets(mas[size].name,50,f);       
                fscanf(f,"%d\n",&mas[size].number);
                fscanf(f,"%d\n",&mas[size].chasi);
                fscanf(f,"%d\n",&mas[size].tarif);
                //fscanf(f,"%d\n",&mas[size].zarplata);
                size++;
        }
        size--;
        fclose(f);
        int a=12;
        while (a!=0)
        {
                printf("\nVibor\n");
                printf("1 prosmotr vseh\n");
                printf("2 add\n");
                printf("3 del\n");
                printf("4 edit\n");
                printf("5 vivod viplat po otd+sr.zp\n");
                printf("0 exit\n");
                printf("_____________________________\n\n");
                fflush(stdin);
                scanf("%d",&a);
                switch(a)
                {
                        case 1:
                        {       
                                for (int i=0; i<=size; i++)
                                {
                                        printf("\n");
                                        printf("name\t\t");
                                        fputs(mas[i].name,stdout);
                                        printf("number\t\t");
                                        printf("%d\n",mas[i].number);
                                        printf("chasi\t\t");
                                        printf("%d\n",mas[i].chasi);
                                        printf("tarif\t\t");
                                        printf("%d\n",mas[i].tarif);
                                        printf("zarplata\t");
                                        if(mas[i].chasi>120)
                                        {
                                                z=(mas[i].chasi-120)*(mas[i].tarif*2)+(120*mas[i].tarif);
                                        }
                                        else
                                        {
                                                z=mas[i].chasi*mas[i].tarif;
                                        }
                                        fprintf(stdout,"%d\n", z);
                                        printf("\n");
                                }
                                break;
                        }
                        case 2:
                        {
                                //добавление
                                size++;
                                fflush (stdin);
                                printf("name\t");
                                fgets(mas[size].name,50,stdin);
                                fflush (stdin);
                                printf("number\t");
                                scanf("%d", &mas[size].number);
                                fflush (stdin);
                                printf("chasi\t");
                                scanf("%d", &mas[size].chasi);
                                fflush (stdin);
                                printf("tarif\t");
                                scanf("%d", &mas[size].tarif);
                                break;
                        }
                        case 3:
                        {
                                //удаление
                                int k;
                                int c;
                                bool m=false;
                                fflush (stdin);
                                fputs("vvedite number\t",stdout);
                                scanf("%d",&c);
                                for(int i=0; i<=size; i++)
                                {
                                        if(mas[i].number==c)
                                        {
                                                k=i;
                                            m=true;
                                                break;
                                        }
                                }
                                while((k<=size)&m)
                                {
                                        mas[k]=mas[k+1];
                                        k++;
                                }
                                size--;
                                break;
                        }
                        case 4:
                        {
                                //редактирование
                                int temp;
                                fflush (stdin);
                                puts("vvedite number\t");
                                scanf("%d",&temp);
                                for(int i=0; i<=size; i++)
                                {
                                        if(temp==mas[i].number)
                                        {
                                                puts("1 - change name");
                                                puts("2 - change number");
                                                puts("3 - change chasi");
                                                puts("4 - change tarif");
                                                int op;
                                                fflush (stdin);
                                                scanf("%d",&op);
                                                fflush (stdin);
                                                switch (op)
                                                {
                                                case 1:
                                                        {
                                                                fflush (stdin);
                                                printf("name\t");
                                                fgets(mas[size].name,50,stdin);
                                                                break;
                                                        }
                                                case 2:
                                                        {
                                                                puts("vvedite new number\t");
                                                        scanf("%d", &mas[i].number);
                                                                break;
                                                        }
                                                case 3:
                                                        {
                                                                puts("vvedite new chasi\t");
                                                        scanf("%d", &mas[i].chasi);
                                                                break;
                                                        }
                                                case 4:
                                                        {
                                                                puts("vvedite new tarif\t");
                                                        scanf("%d", &mas[i].tarif);
                                                                break;
                                                        }
                                                }
                                                break;
                                        }
                                }
                                break;
                        }
                       
                }
                //сохранение в файл
                f=fopen("1.txt","w+");
                for (int i=0; i<=size; i++)
                {
                        fputs(mas[i].name,f);
                        fprintf(f,"%d\n",mas[i].number,f);
                        fprintf(f,"%d\n",mas[i].chasi,f);
                        fprintf(f,"%d\n",mas[i].tarif,f);
                        //fprintf(f,"%d\n",mas[i].zarplata,f);
                }       
                fclose(f);
        }       
        return;
}


lxa85 26-12-2012 00:07 2053434

кэп, два раза пытаюсь увидеть ошибку, два раза эта каша (код) идет полотенцем. Т.е. ни о чем.
На этом форуме есть тег code #. Он нужен для оформления программ.
В программе нет комментариев. Обычно ошибку видно. Она портит красоту структуры программы.
То, что написано, мне понять сложно. Транслит читать сложно. Есть множество break к месту и не к месту используемые.
Цитата:

Цитата кэп
if(mas[i].chasi>120)
{
z=(mas[i].chasi-120)*(mas[i].tarif*2)+(120*mas[i].tarif);
}
else
{
z=mas[i].chasi*mas[i].tarif;
} »

Я так понял, это самое интересное условие задачи?

Iska 26-12-2012 02:51 2053515

Цитата:

Цитата lxa85
На этом форуме есть тег code #. »

Лучше так: «…есть тэг [code]».

Drongo 26-12-2012 03:38 2053523

Лучше всего из цельного монолитного кода сделать модульный и вызывать в множественном выборе необходимую функцию, в которой будет описаны:

1. Функция печати
2. Функция редактирования
3. Функция добавления
4. Функция удаления
_______________

Из ошибок:
1. Нет проверки открытия пустого файла. При открытии пустого файла первый элемент струтуры получает какие-то дикие значения
Код:

1

name            ГвС|    ¶¤↕number              2089883808
chasi          1310720
tarif          1354704
zarplata        -825264512

2. После добавления второго персонажа выводится всё правильно, но когда меню выбора выбираю удалить первого персонажа, удаляется второй, а первый остаётся. Не корректно происходит удаление выбраного персонажа.
3. Пункты меню с 4 и 5 не работает вообще. Причём пятый не работает вообще, а четвёртый предлагает ввести какую-то цифру, после ввода которой появляется снова выбор меню.
4. Нет проверки корректности выбранного пункта.


Время: 18:38.

Время: 18:38.
© OSzone.net 2001-