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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2011, 23:36   #1
SeregaTihonov
Пользователь
 
Регистрация: 20.12.2010
Сообщений: 12
По умолчанию файл произвольного доступа!!!

/*Дело в том, что информация которую я в ввожу в файл записывается непонятными символами, а нужно чтобы файл заполнялся так как я ввожу в пограмме*/
#include <iostream.h>
#include <stdio.h>
#include <process.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define MAX 2
//#include "Hedfun.h"
//#include "CrTable.h"
void main()
{
void Creat();
void Write();
void DefOp();
void Open();
void Correct();
void Del();
void Find();
char n;
//создание файла.
printf("=========================== =====================\n");
printf("\n *** Vi xotite sozdat noviy file?");
printf("(y/n) ***\n");
printf("\n Vvedite zhelaemoe deystviye: ");
scanf("%s",&n);
printf("=========================== =====================\n");
if(n=='y' || n=='Y')
{
Creat();
}
else if(n=='N' || n=='n')
{

}
else if(n!='n' || n!='N' || n!='y' || n!='Y')
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
_getch();
}
//запись в файл.
printf("\n *** Vi xotite zapisat dannie v file?");
printf("(y/n) ***\n");
printf("\n Vvedite zhelaemoe deystviye: ");
scanf("%s",&n);
if(n=='y' || n=='Y')
{
Write();
}
else if(n=='N' || n=='n')
{

}
else if(n!='n' || n!='N' || n!='y' || n!='Y')
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
_getch();
}
DefOp();
//открытие файла.
printf("\n *** Vi xotite otkrit file?");
printf("(y/n) ***\n");
printf("\n Vvedite zhelaemoe deystviye: ");
scanf("%s",&n);
if(n=='y' || n=='Y')
{
Open();
}
else if(n=='N' || n=='n')
{

}
else if(n!='n' || n!='N' || n!='y' || n!='Y')
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
_getch();
}
//редактирование файла.
printf("\n *** Vi xotite otredaktirovat file?");
printf("(y/n) ***\n");
printf("\n Vvedite zhelaemoe deystviye: ");
scanf("%s",&n);
if(n=='y' || n=='Y')
{
Correct();
}
else if(n=='N' || n=='n')
{

}
else if(n!='n' || n!='N' || n!='y' || n!='Y')
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
_getch();
}
//удаление файла.
printf("\n Vi xotite udalit file or ego elemnt?");
printf("\n y/n");
scanf("%s",&n);
if(n=='y' || n=='Y')
{
Del();
}
else if(n=='N' || n=='n')
{

}
else if(n!='n' || n!='N' || n!='y' || n!='Y')
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
_getch();
}
//поиск информации об элементе.
printf("Vi xotite poluchit opisanie elementa?");
printf("\n y/n");
scanf("%s",&n);
if(n=='y' || n=='Y')
{
Find();
}
else if(n=='N' || n=='n')
{

}
else if(n!='n' || n!='N' || n!='y' || n!='Y')
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
_getch();
}
}
продолжение ниже.
SeregaTihonov вне форума Ответить с цитированием
Старый 26.03.2011, 23:36   #2
SeregaTihonov
Пользователь
 
Регистрация: 20.12.2010
Сообщений: 12
По умолчанию

//Стуктура, содержащая данные о компьютере.
struct Comp {
int zapis;
char marka[20];
int hdd;
int ozu;
int date;
char monitor[20];
};
FILE *sfptr;
void DefOp()
{
if((sfptr=fopen("Comp.dat","r+"))== NULL)
{
printf("\n Error open file!!!\n");
exit(1);
}
}
//Функция открытие файла произвольного доступа.
void Open()
{
struct Comp OPEN;
rewind(sfptr);//перемотка.
while(!feof(sfptr))//Идет до конца файла
{
printf("\n========================= =======================\n");
fread(&OPEN,sizeof(struct Comp),1,sfptr);
printf("\n Nomer zapisi: %d",OPEN.zapis);
printf("\n Marka computera: %s ",OPEN.marka);
printf("\n Tip monitora: %s",OPEN.monitor);
printf("\n Razmer HDD (v gigabaytax): %d ",OPEN.hdd);
printf("\n Razmer OZU (v gigabaytax): %d ",OPEN.ozu);
printf("\n God vipuska: %d ",OPEN.date);
printf("\a");
}
printf("\n========================= =======================\n");
}

//Функия корректировки файла.
void Correct()
{
struct Comp CORRECT;
rewind(sfptr);
printf("\n Vvedite nomer zapisi: ");
printf("(0 to exit):");
scanf("%d",&CORRECT.zapis);

while(CORRECT.zapis!=0)
{
printf("\n * Vvedite marku: ");
scanf("%s",&CORRECT.marka);
printf("\n * Vvedite tip monitora: ");
scanf("%s",&CORRECT.monitor);
printf("\n * Vvedite razmer HDD: ");
scanf("%d",&CORRECT.hdd);
printf("\n * Vvedite razmer OZU: ");
scanf("%d",&CORRECT.ozu);
printf("\n * Vvedite god vipuska: ");
scanf("%d",&CORRECT.date);
fseek(sfptr,(CORRECT.zapis-1)*sizeof(struct Comp),SEEK_SET);
fwrite(&CORRECT,sizeof(struct Comp),1,sfptr);
printf("\n Vvedite nomer zapisi: ");
scanf("%d",&CORRECT.zapis);
}
}
//Функция удаления файла.
void Del()
{
int an,Deli,i;
struct Comp DEL = {0,"",0,0,0,""};
printf("\n Vi xotite udalit vse iz fiyla ili otdelniy elemnt?\n");
printf("\n Udalit vse - 1,Udalit otdelniy element - 2\n");
printf("To exit put - 0:");
scanf("%d",&an);
switch(an)
//Полное удаление.
{
case 1:
{
rewind(sfptr);
for(i=1;i<=10;i++)
{
fwrite(&Del,sizeof(struct Comp),1,sfptr);
}
}
break;
//Удаление некоторых частей.
case 2:
{
rewind(sfptr);
printf("\n Vvedite nomer zapisi: \n");
printf("(0 to exit):");
scanf("%d",&Deli);
while(Deli!=0)
{
fseek(sfptr,(Deli-1)*sizeof(struct Comp),SEEK_SET);
fwrite(&DEL,sizeof(struct Comp),1,sfptr);
printf("\n Vvedite nomer zapisi: \n");
scanf("%d",&Deli);
}
}
break;
case 0:exit(0);
break;
default:
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
_getch();
}
break;
}
}
//Функция поиска по файлу(Через название элемента игнорируя регистр)с помощью
//библиотечной фунцкции чравнения строк.
void Find()
{
char marka[10],an;
int n=1;
printf("\n Enter name of of the element:");
scanf("%s",marka);
struct Comp FIND;
rewind(sfptr);
while(n!=0)
{
while(!feof(sfptr))//Идет до конца файла
{
fread(&FIND,sizeof(struct Comp),1,sfptr);
if(strnicmp(marka,FIND.marka,9)==0)//Функция сравнивания двух строк(Игнорирует регистр)
{ //Если найдено совпадение возвращает 0

printf("\n Nomer zapisi:");
scanf("%d",&FIND.zapis);
printf("\n Marka:");
scanf("%s",&FIND.marka);
printf("\n HDD:");
scanf("%d",&FIND.hdd);
printf("\n OZU:");
scanf("%d",&FIND.ozu);
printf("\n Data:");
scanf("%d",&FIND.date);
printf("\n Monitor:");
scanf("%s",&FIND.monitor);
printf("\n Prodolzhat poisk?");
printf("\n(y/n)");
scanf("%d",&an);
if(an=='Y'||an=='y')
{
}
else if(an=='N'||an=='n')
{
break;
}
else if(n!='n'||n!='N'||n!='y'||n!='Y')
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
exit(0);
}
}
}
printf("\n Ne naydeno!");

printf("\n Nachat noviy poisk?");
printf("\n (y/n)");
scanf("%d",&an);
if(an=='Y'||an=='y')
{
rewind(sfptr);
printf("\n Vvedite nomer zapisi:");
scanf("%s",&marka);
}
else if(an=='N'||an=='n')
{
n=0;
}
else if(n!='n'||n!='N'||n!='y'||n!='Y')
{
printf("\n Nevernoe deystviye!!!");
printf("\n Nazhmite lubuyu klavishu dlya prodolgeniya...");
_getch();
exit(0);
}

}
}
продолжение ниже.
SeregaTihonov вне форума Ответить с цитированием
Старый 26.03.2011, 23:37   #3
SeregaTihonov
Пользователь
 
Регистрация: 20.12.2010
Сообщений: 12
По умолчанию

//Функция ввода данных в файл.
void Creat()
{
int i;
struct Comp sozdanie = {0,"",0,0,0,""};
if((sfptr=fopen("Comp.dat","w"))==N ULL)
{
printf("\n Nevozmozhno otkrit file!!!\n");
exit(1);
}
for(i=0;i<1;i++)
{
fwrite(&sozdanie,sizeof(struct Comp),1,sfptr);
}
}
void Write()
{
struct Comp WRITE;
printf("=========================== =====================\n");
printf("\n Vvedite nomer zapisi: ");
printf("(0 to exit): ");
scanf("%d",&WRITE.zapis);

while(WRITE.zapis!=0)
{
printf("\n * Vvedite marku computera: ");
scanf("%s",&WRITE.marka);
printf("\n * Vvedite tip monitora: ");
scanf("%s",&WRITE.monitor);
printf("\n * Vvedite razmer HDD (v gigabaytax): ");
scanf("%d",&WRITE.hdd);
printf("\n * Vvedite razmer OZU (v gigabaytax): ");
scanf("%d",&WRITE.ozu);
printf("\n * Vvedite god vipuska: ");
scanf("%d",&WRITE.date);
printf("\a");
fseek(sfptr,(WRITE.zapis-1)*sizeof(struct Comp),SEEK_SET);
fwrite(&WRITE,sizeof(struct Comp),1,sfptr);
printf("\n Vvedite nomer zapisi: ");
printf("(0 to exit): ");
scanf("%d",&WRITE.zapis);
}
fclose(sfptr);
}
SeregaTihonov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файл произвольного доступа ensoleille Помощь студентам 0 14.03.2011 22:51
Pascal файл прямого доступа AfeR Помощь студентам 2 13.07.2010 02:25
файлы произвольного доступа и множества(горю)) drcoxer Паскаль, Turbo Pascal, PascalABC.NET 2 03.06.2010 11:02
Создать в редакторе текстовый файл, внести в него 10 строк произвольного текста. Разработать программу, к Pan_rust Паскаль, Turbo Pascal, PascalABC.NET 0 24.05.2010 23:04
Задача:поиск и сортировка.(файл произвольного размера) xxxBITxxx Помощь студентам 3 11.01.2009 19:48