bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [157]
АВС [6]
КПиЯП [80]
ОАиП [305]
ОКТ [79]
СиСПО [8]
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Файловый архив
Файлы » ПОИТ » КПиЯП

ПОИТ (д.), КПиЯП, Контрольная работа №2, 2015
Подробности о скачивании 15.12.2015, 16:14
Преподаватель: Бахтизин.
Задание: Сформировать базу данных результатов экзамена студентов. Разработать программу, которая удаляет соответствующие записи из файла тех, чья оценка меньше 5 и помещает их в другой файл.
Листинг программы.
#include <stdio.h>//библиотека стандартного ввода и вывода
#include <conio.h>//консольный ввод-вывод
#include <stdlib.h>//функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие
#include <locale.h>//нформациюя о текущей кодировке
#include <string.h>//работа со строками

int main()
{
setlocale(LC_ALL,"Russian");
FILE *fid_source, *fid_dest, *fid_tmp;
char str_source[]="C:\\exam.txt", str_dest[]="C:\\exam_edit.txt", st[50], st_wr[50];
char tmp_file[]="C:\\tmp.txt";
int start, finish, mark;
char ch;

//Проверка, есть ли файл, если нет, то выйти из программы
if((fid_source=fopen(str_source,"r+t"))==NULL)//открыть файл для записи и чтения, содержимое файла не теряется
{
puts("Cannot open the file");
puts("Press any key");
return 1;
}

start=ftell(fid_source);
puts("Search for the students with mark not eq 5...");
while((fscanf(fid_source,"%s", st))!=EOF)//прочитать строку из файла fid в st до тех пор, пока не будет достигнут конец файла
{
finish=ftell(fid_source);
mark=atoi(st);
if(mark) {
if (mark!=5) {
if(start==0)
fseek(fid_source,start,SEEK_SET);
else
fseek(fid_source,start+1,SEEK_SET);
fgets(st_wr,sizeof(st_wr),fid_source);
if((fid_dest=fopen(str_dest,"a+t"))==NULL) //открыть файл для записи и чтения в конец файла, содержимое файла не теряется
{
puts("Cannot open the file");
puts("Press any key");
return 1;
}
fputs(st_wr,fid_dest);
fclose(fid_dest);

// fseek(fid_source,finish+1,SEEK_SET);
printf("The length of input string is: %d\n", strlen(st_wr));
printf("What we read from file: %s\n",st_wr);
printf("The start position is: %d \t and The finish position is: %d \n", start, finish);
printf("What we will write down: %s\n",st_wr);
}

else {

if((fid_tmp=fopen(tmp_file,"a+t"))==NULL)//открыть файл для записи и чтения в конец файла, содержимое файла не теряется
{
puts("Cannot open the file");
puts("Press any key");
return 1;
}

if(start==0) fseek(fid_source,start,SEEK_SET);
else fseek(fid_source,start+1,SEEK_SET);

fgets(st_wr,sizeof(st_wr),fid_source);
fputs(st_wr,fid_tmp);
// fseek(fid_source,finish+1,SEEK_SET);
fclose(fid_tmp);
}
start=finish+1;//обновляем начальное значение курсора
}
}

fclose(fid_source);//закрыть фай
if((fid_source=fopen(str_source,"wt"))==NULL)//открыть файл для записи и чтения, содержимое файла теряется
{
puts("Cannot open the file");
puts("Press any key");
return 1;
}

if((fid_tmp=fopen(tmp_file,"rt"))==NULL)//открыть файл для чтения
{
puts("Cannot open the file");
puts("Press any key");
return 1;
}

while(!feof(fid_tmp))//до тех пор, пока не будет достигнут конец файла
{
fgets(st_wr,50,fid_tmp);//читаем строку из временного файла
fputs(st_wr,fid_source);//записываем строку в файл
}

fclose(fid_tmp);//закрываем временный файл
fclose(fid_source);//закрываем файл

//удаляем временный файл
if(remove(tmp_file)) {
printf("Error removing file");
return 1;
}

puts("");
puts("Press any key");
getch();
return 0;
}
Категория: КПиЯП | Добавил: ksu
Просмотров: 1144 | Загрузок: 13
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]