Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2015, 20:08   #1
Dashbalzhin
Пользователь
 
Регистрация: 11.03.2015
Сообщений: 19
По умолчанию Работа с файлами

Здравствуйте, ребята!
Помогите пожалуйста решить задачу.
Составить на языке Си программу. Используя функции и режим меню, создать двоичный файл из 10 записей, просмотреть файл, добавить в файл новую информацию и, при¬меняя режим прямого доступа, выполнить задание по своему варианту.
Запись имеет вид: фамилия студента, номер зачетной книжки, 4 оценки за экзамен. Выводить информацию о всех двоечниках и корректировать ее.
Dashbalzhin вне форума Ответить с цитированием
Старый 26.04.2015, 04:51   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Объявите список структур с указателем на список структур, объявите указатели на головной элемент списка и воуля

Хотя можно не объявлять указатель на список структур, так как величина уже у вас указана-10 записей
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 26.04.2015, 08:11   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Dashbalzhin
Попытки какие-нибудь "попытывал"?
А то ведь сча спецы тебе на каком-нибудь бусте решат, и препод сразу поймет что ты отличный кандидат в сержанты стройбата
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2015, 12:57   #4
Dashbalzhin
Пользователь
 
Регистрация: 11.03.2015
Сообщений: 19
По умолчанию

У меня пример есть. Я пробовал много раз. Но что-то там не получается((

В программе предусмотреть использование меню при работе с двоичными файлами.
Меню должно включать пункты:
1. Создание нового файла;
2. Просмотр файла;
3. Добавление информации в конец файла;
4. Поиск по названию товара и изменение цены и количества;
5. Выход с подтверждением.
Dashbalzhin вне форума Ответить с цитированием
Старый 26.04.2015, 15:04   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Дак скиньте ваш пример, не бойтесь, здесь свои все)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 26.04.2015, 17:14   #6
Dashbalzhin
Пользователь
 
Регистрация: 11.03.2015
Сообщений: 19
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct tov {char name[10]; float c; int kol;} t1;
void input(FILE *); // создание нового файла
void print(FILE *); // просмотр файла
void app(FILE *); // добавление в файл
void find(FILE *); // поиск и изменение
main()
{ char c;
FILE *tf;
while (1)
{ //clrscr();
printf("\n");
puts(" 1 – новый файл");
puts(" 2 – просмотр файла");
puts(" 3 – добавление в файл");
puts(" 4 – поиск и изменение");
puts(" 0 - выход");
c=getch();
switch(c)
{ case '1':input(tf);break;
case '2':print(tf);break;
case '3':app(tf);break;
case '4':find(tf);break;
case '0':return 0;
default : puts(" неверный режим");
}
}
}
void input(FILE *tf)
{ char ch;
tf=fopen("file1.dat","wb"); // открытие бинарного файла для записи
//clrscr();
printf("\n Ввод товаров\n");
do
{ printf("\n название: "); scanf("%s",t1.name);
printf(" цена: "); scanf("%f",&t1.c);
printf(" количество: "); scanf("%d",&t1.kol);
fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1
printf("\n Закончить? y/n ");
ch=getch();
}
while (ch != 'y');
fclose(tf);
}
void print(FILE *tf)
{ int i;
//clrscr();
tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
i=1;
fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1
while (!feof(tf))
{ printf("\n %3d tovar %10s cena %6.2f kolic %4d",i,t1.name,t1.c,t1.kol);
fread(&t1,sizeof(t1),1,tf);
i++;
}
getch();
}
void app(FILE *tf)
{ char ch;
tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
//clrscr();
printf("\n Ввод товаров \n");
do
{ printf("\n название: "); scanf("%s",t1.name);
printf(" цена: "); scanf("%f",&t1.c);
printf(" количество: "); scanf("%d",&t1.kol);
fwrite(&t1,sizeof(t1),1,tf);
printf(" Закончить? y/n ");
ch=getch();
}
while (ch != 'y');
fclose(tf);
}
void find(FILE *tf)
{ char c,tov[10];
long int i;
tf=fopen("file1.dat","rb+"); // открытие бинарного файла для чтения и записи
//clrscr();
puts(" Название искомого товара: ");
gets(tov);
fread(&t1,sizeof(t1),1,tf);
while (!feof(tf))
{ if (strcmp(t1.name,tov)==0)
{ printf(" tovar %10s cena %6.2f kolic %d",t1.name,t1.c,t1.kol);
printf("\n изменить? y/n ");
c=getch();
if (c=='y')
{ printf("\n количество: ");scanf("%d",&t1.kol);
printf("\n цена: ");scanf("%f",&t1.c);
i=sizeof(t1);
fseek(tf,-i,1); // возврат на sizeof(t1) байт назад
fwrite(&t1,sizeof(t1),1,tf); // запись изменённой структуры на прежнее место
break;
}
}
fread(&t1,sizeof(t1),1,tf);
}
fclose(tf);
}

Последний раз редактировалось Stilet; 26.04.2015 в 17:41.
Dashbalzhin вне форума Ответить с цитированием
Старый 26.04.2015, 18:04   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Dashbalzhin
Ну. Уже неплохо.
Теперь подробно рассказывай чем сей код не катит. Поправим
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2015, 18:36   #8
Dashbalzhin
Пользователь
 
Регистрация: 11.03.2015
Сообщений: 19
По умолчанию

Как выводить информацию о всех двоечниках и корректировать ее?
Как это сделать?))
Dashbalzhin вне форума Ответить с цитированием
Старый 26.04.2015, 19:11   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как выводить информацию о всех двоечниках
Для начала нужно создать структуру
Код:
struct stu {
 char fio[100]; //фамилия студента, 
 int multipass; //номер зачетной книжки, 
 int balls[4]; // оценки за экзамен.
} stud[10000];
Теперь функция ввода:
Код:
void inp(FILE *f,int n){
 for(int i=0;i<n;i++){
  printf("Внеси новое:\n");
  printf("ФИО: \t");scanf("%100s",stud[i].fio);
  printf("Книжка: \t");scanf("%d",stud[i].multipass);
  printf("Оценки через пробел: \t");scanf("%d %d %d %d"
   ,stud[i].balls[0],stud[i].balls[1],stud[i].balls[2],stud[i].balls[3]);
 }
 fwrite(&stud,sizeof(stu),n,f);
 rewind(f);
}
Ну и считка:
Код:
void inp(FILE *f,int n){
 fread(&stud,sizeof(stu),n,f);
 for(int i=0;i<n;i++){
  printf("ФИО:%s\nКнижка: %d\nОценки: %d %d %d %d\n"
   ,stud[i].fiostud[i].multipass
   ,stud[i].balls[0],stud[i].balls[1],stud[i].balls[2],stud[i].balls[3]);
 }
 rewind(f);
}
Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2015, 20:15   #10
Dashbalzhin
Пользователь
 
Регистрация: 11.03.2015
Сообщений: 19
По умолчанию

И нужно считать все "2", да?
Все ясно)) Спасибо. Пробую написать программу)
Dashbalzhin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами: запись, добавление, чтение (найти ошибку в коде) / C для начинающих Надо создать программу для работы с файлами Konlor Общие вопросы C/C++ 2 18.05.2014 12:37
Работа с файлами (C) FauLL Помощь студентам 4 20.12.2013 00:21
Работа с файлами. forged Паскаль, Turbo Pascal, PascalABC.NET 3 19.12.2013 14:15
Работа с файлами С# Mr Anonim Помощь студентам 0 15.03.2012 21:41