Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Приклад. Приклад запису структури у файл, зчитування даних та редагування






Приклад запису структури у файл, зчитування даних та редагування. Показано створення меню, забезпечення виведення в консолі українською мовою.

#include < iostream> #include < fstream> #include < string.h> #include < conio.h>  
#include < windows.h>   // бібліотека для роботи з вікнами
using namespace std;  
// опис наступної процедури необхідний для роботи її у вікні консолі, якщо ви працюїте в ВС то оголошувати її не потрібно
void gotoxy(int xpos, int ypos) { COORD scrn; HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE); scrn.X = xpos; scrn.Y = ypos; SetConsoleCursorPosition(hOuput, scrn); } //процедура забезпечує переведення курсору в задану позицію
const int d=20; char sf[40]; struct STUDENT { char Name[d]; int Year; }; STUDENT stud; //оголошуємо глобальні константи та змінні      
fstream f; //файловий потік пов'язаний зі змінною для запису та зчитування
// процедура додавання нових записів
void new_zap() {  
int i, z, pp, j, t; //оголошуємо локальні змінні
system(" cls"); // очищуємо екран
f.clear(); // очищуємо прапорці помилок
f.seekg(0, ios:: end); //переводимо курсор на кінець файлу
i = f.tellg(); //визначаємо розташування курсору у файлі
i= (int)i/sizeof(struct STUDENT); //визначаємо кількість записів
i++; s11: strcpy(stud.Name, " "); stud.Year=0; pp=1; cout< < " Введіте запісь № " < < i< < ": \n"; cout< < " ПІБ -> "; do { gets(stud.Name); t=strlen(stud.Name); } while (t==0); for (j = t; j < d-2; j++) strcat(stud.Name, " ");   cout< < " Рік народження -> "; cin > > stud.Year;  
f.write((char *)& stud, sizeof(struct STUDENT)); // записуємо структуру до файлу
s12: cout< < " Push -> Enter, or -> Esc \n"; while (! kbhit()); if ((pp=getch())! =27) if (pp==13) goto s11; else goto s12; }  
// процедура редагування запису
void edit_zap() { int i, z, j, t, d;  
system(" cls"); // очищуємо екран
cout< < " Редагування запису \n"; cout< < " Введіть номер запису = ";  
cin> > z; //вводимо нор запису для редагування
f.clear(); // очищуємо прапорці помилок
i= (int)((z-1)*sizeof(struct STUDENT)); // визначення позиції
f.seekp(i, ios:: beg);   //переведення курсору на заданий запис
strcpy(stud.Name, " "); stud.Year=0; cout< < " Введіть нові значення полів для запису № " < < z< < ": \n"; cout< < " ПІБ -> "; do { gets(stud.Name); t=strlen(stud.Name); } while (t==0); for (j = t; j < d-2; j++) strcat(stud.Name, " "); cout< < " Рік народження -> "; cin > > stud.Year; f.write((char *)& stud, sizeof(struct STUDENT)); cout< < " Зміни внесено \n"; while (! kbhit()); }  
// процедура виводить усі записи з файлу
void print_all() { system(" cls"); cout< < " Усі записи \n"; int i=0, d=0; f.clear(); f.seekg(0, ios:: beg); while(! f.eof()) { i++; f.read((char *)& stud, sizeof(struct STUDENT)); if (f.eof()) break; cout< < i < < ": | " < < stud.Name< < " | " < < stud.Year < < " |\n"; } while (! kbhit()); }  
//головна функція
int main() { int p;    
f.open(" c: \\stud.dat", ios_base:: in|ios_base:: out|ios:: binary); //відкриваємо існуючий файл в бінарному режимі для запису та считування
if(! f) { cout< < " Виникла помилка при відкритті файлу " < < endl; return 0; }  
Do { system(" cls");  
setlocale(LC_ALL, " Ukrainian"); // встановлюємо украінску мову для відображення у консолі
gotoxy(20, 5);   cout < < " ГОЛОВНЕ МЕНЮ"; gotoxy(20, 7); cout < < " 1. Новий запис"; gotoxy(20, 8); cout < < " 2. Усі записи"; gotoxy(20, 9); cout < < " 3. Редагування запису"; gotoxy(20, 10); cout < < " 6. Exit"; gotoxy(20, 11); cout < < " Введіть номер пункту: "; cin > > p; //переводимо курсор у задані координати
switch (p) { case 1: { new_zap(); break; } case 2: { print_all(); break; } case 3: { edit_zap(); break; } } } while (p! = 6);     // якщо було введено 1 то буде здійсненно виклик функції new_zap();      
f.close(); return 0; }  

 

Приклад головного меню:






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.