M
murtukov
Привет всем!
Вот такая задачка:
Необходимо написать програмку которая создает файл в который можно добавлять список сотрудников и количество часов, которые они проработали. Проблема в том, что добавление информации в файл должно быть реализовано с помощью двух функций. С помощью первой можно добавить имена сотрудников с их номером, а с помощью второй к каждому имени можно приписать количество проработанных им часов.
Наглядно это будет выглядеть вот так (пример):
1. Андрей Иванов 25 часов
2. Мартин Скорсезе 13 часов
3. Роджер Желязны 15 часов
4. Рихард Штраус 68 часов
5. Фродо Беггинс 2000 часов
и т.д.
Первую функцию я написал, вот она:
На входе в функцию add поступают два массива x (имя) и y (фамилия).
Файл открывается три раза. Первый раз в режиме а, чтобы создать файл, если он не существует.
Второй раз файл открывается в режиме r, чтобы посчитать количество знаков \n и тем самым определить, какой номер будет у следующего имени.
i здесь глобальная переменная и ее значение сохраняется вне функции.
В наконец файл открывается в третий раз, чтобы собственно и записать имя и фамилию в файл:
Первый if здесь я использовал, так как по условию количество сотрудников не должно превышать 20 человек. MAX = 20.
Думаю открывать файл три раза не очень то и рационально, но другого способа я не нашел. Если есть полегче, буду благодарен посмотреть на ваш код.
В общем то моя программа сейчас создает список имен, но без часов. Вторая функция должна приписывать часы к заданному сотруднику. Вот в этом то и главный мой вопрос. Спасибо всем кто откликнулся.
Вот такая задачка:
Необходимо написать програмку которая создает файл в который можно добавлять список сотрудников и количество часов, которые они проработали. Проблема в том, что добавление информации в файл должно быть реализовано с помощью двух функций. С помощью первой можно добавить имена сотрудников с их номером, а с помощью второй к каждому имени можно приписать количество проработанных им часов.
Наглядно это будет выглядеть вот так (пример):
1. Андрей Иванов 25 часов
2. Мартин Скорсезе 13 часов
3. Роджер Желязны 15 часов
4. Рихард Штраус 68 часов
5. Фродо Беггинс 2000 часов
и т.д.
Первую функцию я написал, вот она:
C++:
int add(char x[], char y[])
{
char c;
FILE *f;
f = fopen("database.txt", "a");
fclose(f);
i=0;
f = fopen("database.txt", "r");
while(!feof(f))
{
fscanf(f, "%c", &c);
if(c=='\n')
i++;
}
fclose(f);
if(i<MAX+1)
{
f = fopen("database.txt", "r+");
fseek(f, 0L, SEEK_END);
if(i==0)
fprintf(f, "%d. %s %s\n", i+1, x, y);
else
fprintf(f, "%d. %s %s\n", i, x, y);
fclose(f);
}
На входе в функцию add поступают два массива x (имя) и y (фамилия).
Файл открывается три раза. Первый раз в режиме а, чтобы создать файл, если он не существует.
C++:
f = fopen("database.txt", "a");
fclose(f);
Второй раз файл открывается в режиме r, чтобы посчитать количество знаков \n и тем самым определить, какой номер будет у следующего имени.
C++:
f = fopen("database.txt", "r");
while(!feof(f))
{
fscanf(f, "%c", &c);
if(c=='\n')
i++;
}
fclose(f);
i здесь глобальная переменная и ее значение сохраняется вне функции.
В наконец файл открывается в третий раз, чтобы собственно и записать имя и фамилию в файл:
C++:
if(i<MAX+1)
{
f = fopen("database.txt", "r+");
fseek(f, 0L, SEEK_END);
if(i==0)
fprintf(f, "%d. %s %s\n", i+1, x, y);
else
fprintf(f, "%d. %s %s\n", i, x, y);
fclose(f);
}
Первый if здесь я использовал, так как по условию количество сотрудников не должно превышать 20 человек. MAX = 20.
Думаю открывать файл три раза не очень то и рационально, но другого способа я не нашел. Если есть полегче, буду благодарен посмотреть на ваш код.
В общем то моя программа сейчас создает список имен, но без часов. Вторая функция должна приписывать часы к заданному сотруднику. Вот в этом то и главный мой вопрос. Спасибо всем кто откликнулся.