Главная страница
Случайная страница
Разделы сайта
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов.
За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее.
✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать».
Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами!
Лекция 17
Файлы
Цели:
ü освоить методику написания алгоритмов с использованием файлов, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6.0.
Работу с файлами можно сравнить с работой с массивами. Главное преимущество файлов перед массивами заключается в том, что массивы хранятся в ОП и информация исчезает с завершением работы программы, а информация, хранящаяся в файлах, может храниться нужное время на каком-либо носителе. Основной задачей, которая предполагает использование файлов, является обработка и хранение большого объёма информации. Когда происходит обработка информации из файла, программа часто обращается к файлу, следовательно, и к некоторой области жёсткого диска, что может нанести вред поверхности жёсткого диска. Поэтому нужно, определив размер файла, выделить динамическую память, в которую затем записать информацию из файла, обработать эту информацию и переписать обработанную информацию в файл. Для хранения и обработки информации из файла используют динамический массив структур и динамические структуры – списки, стеки, очереди.
Пример. Каждого студента можно описать при помощи следующих характеристик: ФИО, курс, специальность, предмет1, предмет2, предмет3. Написать программу (с использованием файлов), определяющую количество студентов:
1) сдавших сессию на «отлично»;
2) не сдавших хотя бы 1 экзамен.
Ход выполнения работы
1. Алгоритм должен быть универсальным с точки зрения пользователя. Это означает, что он должен давать возможность не только определять указанные в задаче характеристики, но и предлагать пользователю вводить данные в файл, добавлять в конец файла новую порцию информации и читать информацию из файла. Для достижения этих целей при написании программы воспользуемся оператором выбора switch(). При этом работа с файлом будет осуществляться не напрямую, а через динамический массив структур. Для ввода-вывода значений будут использоваться потоковые функции.
2. Написать программу, соответствующую алгоритму:
Алгоритм
| Программа
| структурный_тип stud
{
сhar fio[30];
int kurs;
сhar spec[30];
int hist;
int math;
int phis;
};
объявление stud *st, FILE *pf; цел: var, n, i, count_5, count_2;
var=0
пока var! =0
ввод var
выбор var
случай 1: // создание и
// запись в файл
ввод n
выделение динамической
памяти под указатель st
для i=0 до n-1 шаг 1
заполнить каждое поле
элемента массива
структур отдельно
все_для i
открыть файл pf в режиме
записи
записать в файл pf массив st
закрыть файл
освободить выделенную
динамическую память под
указатель st
выход
случай 2: //открытие файла
// для добавления
ввод n
выделение динамической
памяти под указатель st
для i=0 до n-1 шаг 1
заполнить каждое поле
элемента массива
структур отдельно
все_для i
открыть файл pf в режиме
добавления
дозаписать в файл pf
массив st
закрыть файл
освободить выделенную
динамическую
память под указатель st
выход
случай 3: // открытие файл в
// режиме чтения
//определение
// характеристик
открыть файл pf в режиме
чтения
определить длину файла n
выделение динамической
памяти под указатель st
заполнить массив st из
файла pf
count_5=count_2=0
для i=0 до n-1 шаг 1
//определяем
//количество отличников
если sti–> hist= =5 & &
sti–> math= =5 & &
sti–> phis= =5
count_5++;
все_если
//определяем количество
// студентов, не
//сдавших хотя бы один
//экзамен
если sti–> hist= =2||
sti–> math= =2||
sti–> phis= =2
count_2++;
все_если
все_если
все_для i
закрыть файл
освободить выделенную
динамическую память под
указатель st
печать count_5;
печать count_2;
выход
все_выбор
все_цикл
| #include " stdio.h"
#include " stdlib.h"
#include " iostream.h"
#include " iomanip.h"
typedef struct
{
char fio[30];
int kurs;
char spec[30];
int hist;
int math;
int phis;
} stud;
int main()
{
stud *st;
FILE *pf;
int var, i, count_5, count_2;
long int n;
var=-1;
while(var! =0)
{
cout< < " 0–выход; 1–запись; "
< < " 2–добавление; "
< < " 3–характеристики: var=";
cin> > var;
switch(var)
{
case 1:
cout< < " n="; cin> > n;
st=(stud*)malloc(n*sizeof(stud));
//заполнение массива структур
for(i=0; i< =n-1; i++)
{
cout< < " fio="; cin> > ((st+i)–> fio);
cout< < " kurs="; cin> > ((st+i)–> kurs);
cout< < " spec="; cin> > ((st+i)–> spec);
cout< < " history="; cin> > ((st+i)–> hist);
cout< < " math="; cin> > ((st+i)–> math);
cout< < " phis="; cin> > ((st+i)–> phis);
}
//файл открывается для записи данных
if((pf=fopen(" my_f.dat", " w”))==NULL)
{
printf(" файл не открыт\n"); break;
}
//запись в файл
fwrite(st, sizeof(stud), n, pf);
fclose(pf);
free(st);
break;
case 2:
cout< < " n=";
cin> > n;
st=(stud*)malloc(n*sizeof(stud));
//заполнение массива структур
for(i=0; i< =n-1; i++)
{
cout< < " fio="; cin> > ((st+i)–> fio);
cout< < " kurs="; cin> > ((st+i)–> kurs);
cout< < " spec="; cin> > ((st+i)–> spec);
cout< < " history="; cin> > ((st+i)–> hist);
cout< < " math="; cin> > ((st+i)–> math);
cout< < " phis="; cin> > ((st+i)–> phis);
}
//файл открывается для добавления
if((pf=fopen(" my_f.dat", " a”))==NULL)
{
printf(" файл не открыт\n"); break;
}
//дозапись в файл
fwrite(st, sizeof(stud), n, pf);
fclose(pf);
free(st);
break;
case 3:
//файл открывается для чтения
if((pf=fopen(" my_f.dat", " r”))==NULL)
{
printf(" файл не открыт\n"); break;
}
//определение длины файла в байтах
fseek(pf, 0, SEEK_END);
n=ftell(pf);
//n – количества записей в файле
n=n/sizeof(stud);
st=(stud*)malloc(n*sizeof(stud));
rewind(pf);
//заполнение массива структур
fread(st, sizeof(stud), n, pf);
count_5=count_2=0;
for (i=0; i< =n-1; i++)
{ //количество отличников
if((st+i)–> hist= =5& &
(st+i)–> math= =5& &
(st+i)–> phis= =5)
count_5++;
//количество студентов, не
//сдавших хотя бы один экзамен
if((st+i)–> hist= =2||
(st+i)–> math= =2||
(st+i)–> phis= =2)
count_2++;
}
cout< < " count_5=" < < count_5< < endl;
cout< < " count_2=" < < count_2< < endl;
fclose(pf);
free(st);
break;
}
}return 1;
}
| Примечание. Записью в файле называется блок данных, хранящихся в одной структуре, т.е. порция информации об одном студенте (в данном примере).
3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
|