Форум программистов, компьютерный форум CyberForum.ru

Работа с текстовыми файлами - C++

Восстановить пароль Регистрация
 
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
30.11.2013, 19:36     Работа с текстовыми файлами #1
Есть готовая программа, но надо переделать, что бы в 4 case вместо сортировки, можно было найти студента, у которого имя и фамилия (из списка) совпадает с теми, что ввел пользователь.
Исходный файл что то вроде такого.
заранее спасибо!)
0 Uwe Boll 32 12 44
1 Valentin Strikalo 22 03 92
2 Eugene Belnikov 12 8 66
3 Ratibor Berestov 06 02 67
4 Peter Sundae 22 04 55
5 Janis Licis 13 07 22
6 Peter Dolgov 28 12 52
7 Hao Lichen 12 07 22
8 Ferdinand Lihachev 12 02 22


#include <stdio.h>
#include <conio.h>
#include <string.h> //libraries
#include <windows.h>
#define N 20

int main()
{
struct individual //define structure for
{ // Nr., Name, Surname, DOB
int Nr;
char name[30], surname[30];
struct birth
{
int day; //hell yeah a structure within a structure
int month; //INCEPTION
int year;
}date;
}student[N],temp[1];
int i, j, last,out,choice, exists; //some handy variables



FILE *list; //will be operating in two files
FILE *list_sorted; //original and edited
system("cls");
out=0; //initialize some stuff
j=0;
exists=0;
last=0;

do //a while loop for menu
{ //useful stuff. but takes a shitton of time to debug
system("cls");
printf("MENU:\n1.Aizpildit sarakstu no faila.'studenti.txt'.\n2.Papildinat sarakstu ar rokam.\n");
printf("3.Paradit sarakstu.\n4.Sakartot sarakstu pec dzimshanas datuma un uzvarda\n5.Saglabat datus\n6.Iziet\n");
scanf("%d", &choice);
switch(choice)
{
case 1: //case 1 to scan a file and read all data from it.
list = fopen ("studenti.txt", "r"); //file is prepared specially
//red in sequential way
if (list == NULL )
{
printf ("Nevar atvert failu \n");
system("pause");
exit (1);
}

for(i=0; i<N; i++)
{
//since there is no way to return the number of the lines in a file
fscanf(list, "%d", &student[i].Nr); //and if we try to return a nonexistent line, it will se the pointer to the end of line
fscanf(list, "%s", &student[i].name); //the return will be gibberish, but the pointer will stand on the same way before
fscanf(list, "%s", &student[i].surname); //and after the attempt to read stuff.
fscanf(list, "%d", &student[i].date.day); //therefore, if we see that pointer position doesnt change, we know ir is at the end.fscanf(list, "%1c");
fscanf(list, "%d", &student[i].date.month); //if so, we break out of the loop for it is set to go through the maximum list size N.
fscanf(list, "%d", &student[i].date.year);
if (feof(list))
{
last=i;
break;
}
}
fclose(list);
exists=1; //tiny variable for later use, to avoid processing empty list

break;


case 2:
choice=0;
while (choice!=1)
{
student[last].Nr = last;
printf("\nIevadiet %d. studenta informaciju\n", last);
printf("Vards: ");
scanf("%s", &(student[last].name));
printf("Uzvards: ");
scanf("%s", &(student[last].surname)); //manual input of data into structure.
printf("Dzimshanas datums. DIENA: ");
scanf("%2d", &(student[last].date.day));
printf("Dzimshanas datums. MENESIS: ");
scanf("%2d", &(student[last].date.month));
printf("Dzimshanas datums. GADS: ");
scanf("%2d", &(student[last].date.year));
printf("\n Pievienot vel? (1=beigt)"); //in order to give user the freedom to choose how many
scanf("%d", &choice); //items to add, we ask him at the end of every loop.
last++; //this way ca avoid making him write in t once 20 lines.
}
exists=1;
break;


case 3:
system("cls");
if (exists>0) //here's where we need the exists variable. if we don't have
{ //a check for structure existance, the compiler goes bananas trying to print.
printf("Studentu saraksts:\n");
for(i=0; i<last; i++)
{
printf("%2d%15s%15s%10d.%2d.%2d\n", student[i].Nr, student[i].name, student[i].surname,
student[i].date.day,
student[i].date.month,
student[i].date.year);
}
}else printf("Ludzu izveidojiet sarakstu!\n");
system("pause");



case 4:
system("cls");
if (exists>0)
{
printf("Sakartots saraksts:\n");
for (j=0;j<last;j++)
{
for (i=0; i<last;i++)
{
if (student[i].date.year>student[j].date.year)
{
temp[0]=student[j];
student[j]=student[i];
student[i]=temp[0];
}
else if(student[i].date.year==student[j].date.year && student[i].date.month>student[j].date.month)
{
temp[0]=student[j];
student[j]=student[i];
student[i]=temp[0];
}
else if(student[i].date.year==student[j].date.year && student[i].date.month==student[j].date.month && student[i].date.day>student[j].date.day)
{
temp[0]=student[j];
student[j]=student[i];
student[i]=temp[0];
}
else if(student[i].date.year==student[j].date.year && student[i].date.month==student[j].date.month && student[i].date.day==student[j].date.day &&
(strcmp(student[i].surname,student[j].surname)>0))
{
temp[0]=student[j];
student[j]=student[i];
student[i]=temp[0];
}
}
}
for(i=0; i<last; i++)
{
printf("%2d%15s%15s%10d.%2d.%2d\n", student[i].Nr, student[i].name, student[i].surname,
student[i].date.day,
student[i].date.month,
student[i].date.year);
}
}else printf("Ludzu izveidojiet sarakstu!\n");
system("pause");
break;

case 5:
system("cls");
if (exists>0)
{
list_sorted = fopen ("studenti_apstradats.txt", "w");
if (list_sorted == NULL )
{
printf ("Nevar atvert failu \n");
system("pause");
exit (1);
}
for(i=0; i<last; i++)
{
fprintf(list_sorted,"%2d%15s%15s%10d.%2d.%2d\n", student[i].Nr, student[i].name, student[i].surname,
student[i].date.day,
student[i].date.month,
student[i].date.year);
}
fclose(list_sorted);
printf ("Dati sekmigi saglabati faila 'studenti_apstradats.txt'! \n");
}else printf("Ludzu izveidojiet sarakstu!\n");
system("pause");
break;


case 6:
out=1;
break;


default:
system("cls");
printf("Ludzu izveidojiet sarakstu!\n");
system("pause");
break;

}
}
while(!out);
out=0;
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2013, 19:36     Работа с текстовыми файлами
Посмотрите здесь:

Работа с текстовыми файлами C++
работа с текстовыми файлами C++
C++ Работа с текстовыми файлами в С++
C++ Работа с текстовыми файлами
C++ Работа с текстовыми файлами
C++ Работа с текстовыми файлами
C++ Работа с текстовыми файлами
C++ Работа с текстовыми файлами

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru