Войти

Показать полную графическую версию : Проверьте код, найдите ошибку


кэп
25-12-2012, 20:37
Создать файл, содержащий сведения о сотрудниках фирмы. Запись включает: Ф.И.О. сотрудников; табельный номер; количество проработанных часов за месяц; почасовой тариф. Рабочее время свыше 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
кэп, два раза пытаюсь увидеть ошибку, два раза эта каша (код) идет полотенцем. Т.е. ни о чем.
На этом форуме есть тег 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
На этом форуме есть тег code #. »
Лучше так: «…есть тэг [code] (http://forum.oszone.net/misc.php?do=bbcode#code)».

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

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

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

name ГвС| ¶¤↕number 2089883808
chasi 1310720
tarif 1354704
zarplata -825264512
2. После добавления второго персонажа выводится всё правильно, но когда меню выбора выбираю удалить первого персонажа, удаляется второй, а первый остаётся. Не корректно происходит удаление выбраного персонажа.
3. Пункты меню с 4 и 5 не работает вообще. Причём пятый не работает вообще, а четвёртый предлагает ввести какую-то цифру, после ввода которой появляется снова выбор меню.
4. Нет проверки корректности выбранного пункта.




© OSzone.net 2001-2012