#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define PATH_FILE "Worker.dat"
/*Opredelenie stryktyru*/
struct workData
{
int id; /*NOMER*/
char name[50]; /*Famalija Imja Otchestvo*/
char job[10]; /*Dolzhnost' - JOB*/
int date; /*Data postyplenija*/
}; /*Konec stryktyru*/
int enterChoice(void);
void writeFile(void);
void updateRecord(void);
void plist(void);
FILE *search(FILE *fPtr, char *name, struct workData *worker); //void poisk(void);
/*Glavnaja programma*/
int main()
{
int choice;
while( (choice=enterChoice()) != 7)
{
switch(choice)
{
case 1: writeFile(); break;/*запись данных в файл*/
case 2: updateRecord(); break; /*Obnovit' zapis'*/
case 5: plist(); break;/*Vuvod na ekran */
default: printf("The choice isn't valid.\n"); break;/*Vuvod oshibki esla ykazan nevernui nomer*/
}
}
// fclose(cfPtr);
return 0;
}
/*******************************************************************/
/*эта функция добавляет новые записи в файл(создает файл - если он не существует, или добавляет к существующему)*/
void writeFile()
{
FILE *writePtr;
struct workData worker;
if((writePtr=fopen(PATH_FILE,"a+"))==NULL)
{
printf("File could not be opened.\n");
}
else
{
printf("Enter the id, name, job and date.\n");
printf("Enter EOF to end input (ctrl+z).\n");
scanf("%d%s%s%d", &worker.id, worker.name, worker.job, &worker.date);
while(!feof(stdin))
{
fwrite(&worker,sizeof(struct workData),1,writePtr);
scanf("%d%s%s%d", &worker.id, worker.name, worker.job, &worker.date);
}
fclose(writePtr);
}
}
/************************ Vuvod na pechat' ***************************/
void plist(void)
{
FILE *fPtr;
struct workData work;
if(fPtr=fopen(PATH_FILE,"r"))
{
while (fread(&work, sizeof(struct workData),1,fPtr))
printf("%-6d%-16s%-11s%-6d\n",work.id,work.name,work.job,work.date);
fclose(fPtr);
}
else
printf("File could not be opened.\n");
}
/********************* Obnovit' dannue **************************/
void updateRecord(void)
{
char w_name[50];
FILE *fPtr;
struct workData worker;
int flag = 0, num = 0;
printf("Enter the worker's name for update data:\n");
scanf("%s", w_name);
if( fPtr = fopen(PATH_FILE, "r+") )
{
if(fPtr = search(fPtr, w_name, &worker))
{
printf("The data for update: %-6d%-16s%-11s%-6d\n",worker.id,worker.name,worker.job,worker.date);
printf("Enter the new data (id, name, job and date):\n");
scanf("%d%s%s%d", &worker.id, worker.name, worker.job, &worker.date);
fwrite(&worker,sizeof(struct workData),1,fPtr);
flag = 1;
}
fclose(fPtr);
if(!flag)
printf("Error input."); /*пользователь с таким именем не найден */
}
else
printf("File could not be opened.\n");
}
/******************************************************/
FILE *search(FILE *fPtr, char *w_name,struct workData *worker)
{
int flag = 0, num = 0;
while(fread(worker,sizeof(struct workData),1,fPtr) )
{
/*переменная worker - это указатель на структуру, поэтому обращаемся
к членам структуры(lastname, id ... - members) worker->name_membere */
if(strcmp(worker->name, w_name) == 0)
{
fseek(fPtr,num*sizeof(struct workData),SEEK_SET);
return fPtr; /*возвращаем указатель на файл установленный на адресс структуру для обновления*/
}
/*Считаем структуры, чтобы установить при помощи fseek указатель fPtr на нужный адресс, т.к. считываячитываем
структуру -> указатель начинает смотреть на следущую структуру, поэтому надо вернуться назад.*/
num++;
}
return NULL;/* возвращаем NULL если не нашли в файле введенное пользователем имя => error input */
}
/***************** Nashe menuy ***************************/
int enterChoice(void)
{
int menuChoice;
printf("\n MENU \n"
"1-Write worker's data.\n" /* == "3-Add new\n"*/
"2-Update\n"
"5-Print\n"
"7-Exit.\n");
scanf("%d",&menuChoice);
return menuChoice;
}
Почему не работает программа на С
И как сделать так чтоб если прогу не вбивая в в TURBOC просто перенеся ее в файл рууский язык не читался как лабуда всякая???
Программа составления каталога компакт-дисков.
[COLOR="Red"]какие проблемы сообщение отредактировать?[/COLOR] (moderator)
я конечно не претендую на совершенство кода, но больше такии ужасы исправлять не собираюсь.
Файлик не качается почемуто пишет что я лох и не авторизирован, хотя это далеко не так
странно, у меня все качается.
Оля спасибо большое тебе!!! Я бы без тебя пропал!А вот вопросик,но это только для себя это не для проги.Вот у меня есть время поступления на работу,а мне надо вывести на экран рабочего чей стаж работы в организации превышает значение введенное с клавы.Вот вопрос, во первых я так понимаю надо использовать функцию времени (как это делается).А во вторых можно простым вычитанием, ну короче формулами или как??? Еще раз повторю что это уже не обязательно просто мне интерестно, как если у тебя есть время поможешь??? Если нет то забей!!