![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
В записях создаваемого файла заполнено только первое Поле, остальные 2 поля содержат строку “pusto” .Содержание книги
Поиск на нашем сайте
// atc_765rus.cpp:ПРоверено в VS 2010 01.06.2013 // Файл создается из отдельных записей // вывод в файл осуществляется SIZE раз // #include "stdafx.h" #include<conio.h> #include<stdio.h> #include <iostream> using namespace std;
const int SIZE=10000; void main() { int i; struct telephon { long ntel; char fio[20]; char adr[26]; }; telephon abon;//,rab; FILE *fp; system("chcp 1251"); //переключаем консоль в кодировку win1251
if((fp=fopen("D:\\atc765", "wb"))==NULL) { puts(" Выходной файл не открыт... "); exit(1); } //сформировать массив структур-"пустышку" for(i=0;i<SIZE;i++) { abon.ntel=i+7650000; strcpy(abon.fio,"pusto"); strcpy(abon.adr,"pusto"); //записать в файл структуру-"пустышку" fwrite(&abon,sizeof(telephon),1,fp); //&-адрес } fclose(fp); puts("файл создан пока"); }
Задача 170. Программа в файле, созданном предыдущей программой (см. Задачу 169), осуществляет поиск заданного номера телефона и назначение его определенному абоненту (если телефон свободен). Реализован прямой доступ к бинарному файлу.
// atc_r765.cpp Программа осуществляет поиск заданного номера телефона // и назначение его определенному абоненту(если телефон свободен) // с помощью fseek(fp,0L,2) найти конец файла // и через last=ftell(in) найти длину файла // тогда n=last/sizeof(telefon) - количество записей #include "stdafx.h" #include<conio.h> #include<stdio.h> #include <iostream> using namespace std; void main() { int SIZE; long nt,pos,nz; struct telephon { long ntel; char fio[20]; char adr[26]; }; telephon rab; FILE *fp; system("chcp 1251"); //переключаем консоль в кодировку win1251 if((fp=fopen("D:\\atc765", "r+b"))==NULL) //и для чтения и для записи { puts(" файл для произвольного доступа не открыт... "); exit(1); } // Вычисляем длину файла в байтах fseek(fp,0L,2); SIZE=ftell(fp)/sizeof (telephon); puts("Какой телефон найти(напр, 7650012?"); cin>>nt; nz=nt-7650000; // это номер записи while(nz>0 && nz<SIZE) { pos=nz*sizeof(telephon); //находим смещение int k=fseek(fp,pos,SEEK_SET); //переход к нужной записи if(k!= 0){puts("Запись не найдена ");exit(3);} fread(&rab,sizeof(telephon),1,fp); //if(strncmp(rab.fio,"pusto",strlen("pusto"))==0) if(strcmp(rab.fio,"pusto")==0) { puts("Кому отдать этот телефон?"); fflush(stdin); gets(rab.fio); puts("Его адрес?"); gets(rab.adr); fseek(fp,pos,SEEK_SET); //переход к нужной записи fwrite(&rab,sizeof(telephon),1,fp); } else { puts("Извините, телефон занят"); printf("%ld %s %s\n",rab.ntel,rab.fio,rab.adr); } printf("следующий номер(или 0 для выхода)\n"); cin>>nt; nz=nt-7650000; } fclose(fp); puts("пока"); }
Задача 171. Программа в файле, обработанном предыдущей программой (см. Задачу 170), осуществляет поиск и печать занятых номеров телефонов и их владельцев. Реализован последовательный доступ к бинарному файлу.
// ats_print_765.cpp 2013г. // Поиск занятых телефонов #include "stdafx.h" #include<conio.h> #include<stdio.h> #include <iostream> using namespace std;
const int SIZE=10000; void main() { int i; struct telephon { long ntel; char fio[20]; char adr[26]; }; telephon abon; FILE *fp; system("chcp 1251"); //переключаем консоль в кодировку win1251
if((fp=fopen("D:\\atc765", "r+b"))==NULL) { puts(" Входной файл не открыт... "); exit(1); } for(i=0;i<SIZE;i++) { fread(&abon,sizeof(telephon),1,fp); if(strcmp(abon.fio,"pusto")!=0) printf("%ld %s %s\n",abon.ntel,abon.fio,abon.adr);
}
fclose(fp); puts("пока"); }
Задача 172. На некотором материальном складе ведётся учёт хранящихся там товаров. Каждая запись о товаре содержит сведения: -артикул (код) товара; -наименование товара; -цена за единицу товара; -количество единиц товара. Требуется создать комплекс программ, который обеспечивает: -создание файла информационной базы; -добавление записей в базу; -распечатку базы данных; -поиск нужной записи по некоторому ключевому полю; -корректировку записи с заданным ключевым полем; -удаление ненужной записи; -сортировку записей по некоторому ключевому полю; -создание файла стоимостей всех товаров по видам.
Предлагаемый комплекс программ обеспечивает создание и ведение информационной базы материального склада. Головной модуль этого проекта, выполненный в виде оконного меню, выступает в качестве связующего звена и обеспечивает корректные вызовы заранее запрограммированных функций, которые и реализуют перечисленные выше процедуры обработки данных.
Для модификации записей в файле и удаления ненужных записей соответствующие функции осуществляют последовательный поиск.
Для удобства слежения за состоянием информационной базы предусмотрены процедуры вывода данных на экран. Организована постраничная (поэкранно) выдача информации, которая не проявляется, если в базе недостаточно информации и совершенно необходима, если в базе свыше 25 записей. При добавлении новых записей в информационную базу ключевые поля (код товара, артикул и др.), однозначно идентифицирующие запись, не должны дублироваться. Для этого в соответствующей программе создан массив ключевых полей, и каждое вводимое ключевое поле новой записи проверяется на наличие его в этом массиве (см. функции add_skl(), make_skl()).
Если записи с повторяющимися ключевыми полями всё-таки попали в базу (например, при первичном создании информационной базы, где такой контроль отсутствует), то их легко удалить с помощью функции del_skl(), предварительно просмотрев базу данных вызовом функции put_skl().
// sklad_2012.cpp: 10.03.2012г CopyRight by V. Makogon // Программа отлажена в Visual Studio 2010 #include "stdafx.h" #include <io.h> #include <conio.h> #include <stdio.h> #include <windows.h> #include<iostream> using namespace std;
// Структура записей: struct tovar //tovar - имя нового типа! { int kod; //код товара char name[25]; //наименование товара float price; //цена за единицу unsigned quant; //количество }; FILE *inout; FILE *in, *out;
// функция устанавливает цвет текста и подложки в консоли (локальное) void SetColor(int text, int background) { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text)); }
// функция позиционирует курсрор в точку (х, у) void goto_xy (int x, int y) { COORD cd;// координаты курсора HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE); cd.X=x; cd.Y=y; SetConsoleCursorPosition(hd,cd); }
// ПРОТОТИПЫ ОСНОВНЫХ ФУНКЦИЙ: long size_bas(FILE *inout); //размер базы в байтах и число записей void make_skl(); //создание новой базы данных void put_skl(char *name); //печать содержимого базы данных int lpoisk(int *x,int n,int Q); // последовательный поиск в массиве. void add_skl(char* name); // добавление новых записей в базу данных. void del_skl(char *namein); //удаление записи с заданным ключевым полем. void obra_skl(char *namein); //стоимость каждой партии товара void updt_skl(char *namein); //Обновление записи с заданным ключевым полем void sort_skl(char *namein); //Сортировка файла информационной базы void poisk_skl(char *namein);//Поиск товара с заданным названием
/////////////////////ОСНОВНАЯ ПРОГРАММА начало////////////////////////
// sklad_2012.cpp 27.02.2012 CopyRight by V. Makogon // ОСНОВНАЯ ПРОГРАММА создает главное меню, проверяет наличие // файла базы данных, обеспечивает выбор необходимой функции обработки
// Структура записей: /*struct tovar //tovar - имя нового типа! { int kod; //код товара char name[25]; //наименование товара float price; //цена за единицу unsigned quant; //количество };
*/ #define cfone system("color 17");// синий фон. серые буквы глобальное const int m= 9,L=83; // размеры главного меню void colorputs(int cfon,int cl,int y); // прототип функции формирования меню char ch,str[m][L]= {" Создание файла информационной базы ", " Распечатка информационной базы ", " Обработка информационной базы ", " Добавление записей в базу данных ", " Удаление ненужных записей из базы ", " Изменение записи с заданным ключевым полем ", " Сортировка файла информационной базы ", " Поиск товара с заданным названием ", " Окончание работы " };
int main() { int y=0,j; char namein[15]; //setlocale(NULL, ".1251"); //ввод на русском не обеспечен system("chcp 1251"); //ВЫВОД и ввод на русском обеспечены!!! system("title БАЗА ДАННЫХ '\"СКЛАД'\" "); //заголовок окна m5:cfone; SetColor(14,1); // textcolor(YELLOW); system("cls"); // очистка экрана clrscr(); goto_xy(20,24); SetColor(12,1); //textcolor(LIGHTRED); printf("\030 Выбери пункт меню и жми Enter \031"); for (j=0;j<m;j++) colorputs(8,14,j); m6: colorputs(12,14,y); m7: switch(_getch()) { case 224: // СМЕНИЛ 27.02.2012 НА 224 (0xE0) switch(_getch()) { case 72: colorputs(8,14,y); y--; if (y<0) y=m-1; goto m6; case 80: colorputs(8,14,y); y++; if (y>m-1) y=0; goto m6; } goto m7; case 13: { if(y==m-1) {cfone; system("cls"); exit(0);} if(y!=0) // Файл должен существовать!
{ m1: system("cls"); cfone; goto_xy(10,10); SetColor(14,1); printf("Введите путь и имя файла базы данных,например, D:\\sklad\n");
goto_xy(20,12); SetColor(12,1); //textcolor(LIGHTRED); printf("=================== ");
goto_xy(20,12); gets_s(namein); //cin >> namein; if(_access(namein,00)) //проверка наличия файла {
SetColor(10,1); // зеленым выделить printf("\nТакой файл отсутствует. Вы можете: \r\n "); printf("1. Повторить попытку \r\n "); printf("2. Завершить работу \r\n "); printf(" Ваш выбор ==> ");
ch=_getch(); switch (ch) { case '1': goto m1; case '2': goto m5; //return; } } } } switch(y) { case 0: SetColor(12,1);/*textcolor(LIGHTRED);*/ cfone; make_skl(); goto m5;
case 1: SetColor(12,1);/*textcolor(LIGHTRED);*/ cfone; put_skl(namein); goto m5;
case 2: SetColor(12,1);/*textcolor(LIGHTRED);*/ cfone; obra_skl(namein); goto m5;
case 3: SetColor(12,1);/*textcolor(LIGHTRED);*/ cfone; add_skl(namein); goto m5;
case 4: SetColor(12,1);/*textcolor(LIGHTRED);*/ cfone; del_skl(namein); goto m5; case 5: SetColor(12,1);/*textcolor(LIGHTRED);*/ cfone; updt_skl(namein); goto m5; case 6: SetColor(12,1);/*textcolor(LIGHTRED);*/ cfone; sort_skl(namein); goto m5; case 7: SetColor(12,1);/*textcolor(LIGHTRED);*/ cfone; poisk_skl(namein); goto m5; case 8: cfone; system("cls"); exit(0); } } goto m7; }
/////////////////////ОСНОВНАЯ ПРОГРАММА конец////////////////////
/////////// функция формирования меню ///////////////////////// void colorputs(int cfon,int cl,int y) { //textcolor(cl);textbackground(cfon); SetColor(cl, cfon); goto_xy(17,2+y*2); printf("%s",str[y]); } ////////////////////////////////////////////////////////////////
//////////////// size_bas.cpp начало //////////////////////////
long size_bas(FILE *inout) { // Определим размер базы в байтах и число записей fseek(inout, 0L,SEEK_END); //В конец файла system("cls"); SetColor(10,1); //textcolor(4); long last=ftell(inout); goto_xy(30,10); printf("Размер базы - %ld байт",last); int n=last/sizeof(tovar); goto_xy(30,11); printf("В базе %d записей\n",n); SetColor(13,1); goto_xy(10,24);printf("\r\nДля продолжения жми Enter"); _getch(); system("cls"); rewind(inout);return n; } //////////////////size_bas.cpp конец//////////////////////////
//////////////////make_skl.cpp начало//////////////////////////
// make_skl.cpp обновлена 3 марта 2012г. // Предназначена для создания новой базы данных // Осуществляет тщательный контроль наличия файла с заданным // именем в текущем каталоге, используя функцию access() // При наличии файла возможно добавление записей в конец
// Структура записей: /* struct tovar //tovar - имя нового типа! { int kod; //код товара char name[25]; //наименование float price; //цена unsigned quant;//количество }; */ #define LIM 50 // макс число записей void make_skl() { char name[25], ch; int k=0; struct tovar zap; system("cls"); goto_xy(10,10); SetColor(14,1); printf("Введите путь и имя файла базы данных,например,\n \ D:\\sklad\n"); goto_xy(20,12); SetColor(12,1); printf("\1\1\1\2\2\2\2\3\3 ");
goto_xy(20,12); gets_s(name);
//варианты: cin >> name; //cin.getline(name, 25); //fgets(name, 25,stdin);
//Проверка наличия файла на МД if(!_access(name,00)) { SetColor(13,1); // сделать сообщение цветным printf("\n\n\nТакой файл существует... Вы можете: \r\n\n ");
SetColor(14,1); printf(" 1. Удалить его содержимое навсегда \r\n "); printf(" 2. Выполнить дозапись в конец файла \r\n "); printf(" 3. Завершить работу \r\n "); printf(" Ваш выбор ==> "); ch=_getch(); switch (ch) {
case '1': break; case '2': // добавление новых записей в существующую базу add_skl(name); case '3': return; } }
inout=fopen(name, "wb"); if(inout==NULL) { puts(" Не могу открыть выводной файл... "); _getch();return;//exit(2); }
SetColor(14,1); system("cls");
cout<<"\nВведи до "; SetColor(12,1); printf("%d",LIM); SetColor(14,1); cout<<" записей"<<'\n'; cout<<"Для прекращения - Enter в начале строки"<<'\n'; SetColor(10,1); printf("Название %d вида товара - ",k+1);
while((gets_s(zap.name)!=NULL) && (zap.name[0])!='\0' && k<LIM) { printf("код товара - "); cin>>zap.kod; printf("цена за единиу - "); cin>>zap.price; printf("количество - "); cin>>zap.quant; k++; //********* запись структуры в файл **** fwrite(&zap,sizeof(tovar),1,inout); //************************************** fflush(stdin); // очистка стандартного входного потока if(k<LIM) printf("Название %d вида товара - ",k+1); //cout<<"Название "<<k+1<<" вида товара - "; }
SetColor(13,1); printf("\r\n\n\n\nПока...Жми Enter"); fclose(inout); _getch(); }
//////////////////make_skl.cpp конец///////////////////////////
//////////////////put_skl.cpp начало////////////////////////// // Программа выводит на экран (при необходимости - постранично) // содержимое базы данных "Товары на складе"
// Структура записей: /* struct tovar { int kod; //код товара char name[25]; //наименование товара float price; //цена за единицу unsigned quant;//количество }; */
void put_skl(char *name) { inout=fopen(name, "rb"); if(inout==NULL) { puts(" Не могу открыть файл базы данных... "); _getch(); return; //exit(2); }
struct tovar zap; int k=0; int size=sizeof(struct tovar);
int page=1;
//*************статистика базы************* size_bas(inout); //***************************************** SetColor(14,1); system("cls"); // за 1 раз считываем 1 структуру while(fread(&zap,size,1,inout)==1) { SetColor(14,1); if(k==0) { goto_xy(10,1); SetColor(10,1); printf("\nТекущее состояние базы данных:"); goto_xy(70,1); printf("Лист %d\n",page); k=3; SetColor(14,1); } printf("\r\n%5d %-25s %10.2f %5u",zap.kod, zap.name, zap.price, zap.quant); k++; //постраничная печать if(k%23==0) { goto_xy(2,25); SetColor(13,1); printf("Жми Enter"); _getch(); SetColor(14,1); system("cls"); goto_xy(70,1);SetColor(13,1); printf("Лист %d",++page); k++; } } goto_xy(2,25); SetColor(13,1); printf("Жми Enter"); fclose(inout); _getch(); }
//////////////////put_skl.cpp конец//////////////////////////
/////////////////lpoisk.cpp начало////////////////////////// //функция осуществляет последовательный поиск //элемента Q в целочисленном массиве int lpoisk(int *x,int n,int Q) { int i=0; while (x[i]!=Q && i<n) i++; if (i==n) return -777; //Ключ отсутствует!!! else return i; } /////////////////lpoisk.cpp конец//////////////////////////
/////////////////add_skl.cpp начало//////////////////////////
// add_skl.cpp 4 марта 2012 // Программа предназначена для добавления новых // записей в базу данных. Структура записей:
/* struct tovar { int kod; char name[25]; //наименование товара float price; //цена за единицу unsigned quant;//количество }; */
#define LIM 50 // макс число записей в одном сеансе
void add_skl(char* name) { char ch; int k=0; struct tovar zap; SetColor(14,1); system("cls"); inout=fopen(name, "a+b"); if(inout==NULL) { puts(" Не могу открыть базу данных... "); _getch();return; }
/* Определим размер базы в байтах и число записей
fseek(inout, 0L,SEEK_END); //В конец файла long last=ftell(inout);printf("Размер базы - %ld байт\n",last); int n=last/sizeof(tovar); printf("В базе %d записей\n",n); rewind(inout); */
long n=size_bas(inout);
//Чтобы исключить попадание в базу данных записей с повторяющимся // ключевым полем (kod), перешлем коды всех записей в массив mas_kod[], // который откроем в динамической области памяти. При попытке дублиро // вания ключевого поля выдать сообщение (см ниже)
int *mas_kod=(int*)malloc(n*sizeof(int));
rewind(inout); int i=0; while(fread(&zap,sizeof(tovar),1,inout)==1) { mas_kod[i] = zap.kod; i++; } SetColor(14,1); system("cls"); cout<<"\nВведи до ";SetColor(12,1); printf("%d",LIM); SetColor(14,1);cout<<" записей"<<'\n'; m2: cout<<"\nДля прекращения - Enter в начале строки"<<"\n\n"; SetColor(10,1); printf("Название %d вида товара - ",k+1);
while((gets_s(zap.name)!=NULL) && (zap.name[0])!='\0' && k<LIM) { printf("код товара - "); cin>>zap.kod; if(lpoisk(mas_kod,n,zap.kod)>=0) { SetColor(13,1); // printf("\r\nЗапись с кодом %d есть в базе данных ",zap.kod); printf("\r\nт.к это недопустимо, \n "); SetColor(14,1); fputs("\n Вы можете: \n ",stderr); fputs("1. Повторить попытку \n ",stderr); fputs("2. Завершить работу \n ",stderr); fputs(" Ваш выбор ==> ",stderr); SetColor(14,1); ch=_getch(); switch (ch) { case '1': fflush(stdin);goto m2; case '2': fclose(inout); return; } } printf("цена за единиу - "); cin>>zap.price; printf("количество - "); cin>>zap.quant; k++; //*********запись структуры в файл **** fwrite(&zap,sizeof(tovar),1,inout); //************************************** fflush(stdin); // очистка стандартного входного потока
if(k<LIM) printf("Название %d вида товара - ",k+1); } SetColor(13,1); //gotoxy(10,24); printf("\r\n\n\n\nПока...Жми Enter"); fclose(inout); _getch(); }
//////////////////add_skl.cpp конец//////////////////////////
//////////////////del_skl.cpp начало//////////////////////////
// del_skl.cpp // Программа выполняет удаление из ранее созданного бинарного // файла, содержащего сведения о товарах на складе, записи с // заданным ключевым полем. Структура записей:
/* struct tovar { int kod; //код товара char name[25]; //наименование товара float price; //цена за единицу unsigned quant;//количество }; */
// На базе исходного файла создается временный файл temp, куда // переносятся записи базы данных, кроме записей с заданным ключевым // полем. Затем исходный файл удаляется, а файлу temp присваивается // имя исходного файла // void del_skl(char *namein) { int kod; //код товара char ch, nameout[15]="temp"; m2: if((in=fopen(namein, "rb"))==NULL) { puts(" Не могу открыть файл базы данных... "); _getch();return; }
if((out=fopen(nameout, "wb"))==NULL) { puts(" Не могу открыть выводной файл... "); _getch();return; }
struct tovar zap; // структура типа tovar int k=0; int size=sizeof(struct tovar);//размер структуры int found=0; size_bas(in);//Размер базы и число записей в ней //rewind(in); // в начало файла // за 1 раз считываем 1 структуру cfone; SetColor(14,1); system("cls"); printf("Какую запись удалять? \r\nВведи код записи или 0 "); SetColor(10,1); printf("==>");
scanf_s("%d",&kod); //cin>>kod; //??? while(fread(&zap,size,1,in)==1) { if(zap.kod!=kod) { // перезапись в файл temp fwrite(&zap,size,1,out); } else { goto_xy(2,20); SetColor(10,1); printf("Найдена запись %d:\r\n",++k); found=1;goto_xy(2,20); SetColor(14,1); printf("\n%5d %-25s %10.2f %5u ",zap.kod, zap.name, zap.price, zap.quant); goto_xy(2,23); SetColor(13,1); printf("Именно эту удалять(y/n)?"); ch=_getch(); switch (ch) { case 'y': case 'Y':case 'н':case 'Н': goto_xy(2,23); SetColor(13,1); printf("\nЗапись с кодом %d будет удалена...Жми Enter",kod); _getch();break; default: fwrite(&zap,size,1,out); // перезапись в файл temp } SetColor(14,1); system("cls"); } } fclose(in);fclose(out);//обязательно для удаления/переименования if(!found) { //****** если запись не найдена *****// SetColor(13,1); printf("\nЗапись с кодом %d не найдена",kod);
SetColor(14,1); printf("\n Вы можете: \r\n "); printf("1. Повторить попытку \r\n "); printf("2. Завершить работу \r\n "); printf(" Ваш выбор ==> ");
ch=_getch(); switch (ch) { case '1': goto m2; case '2': remove(nameout); // return;//удалить файл temp goto m3; } } else { remove(namein); //удалить исходный файл rename("temp",namein); //переименовать temp-файл } SetColor(10,1); system("cls"); printf("\nЗачистка завершена...\r\n"); cout<<"Продолжить процедуру удаления(y/n)? "; ch=_getch(); switch (ch) { case 'y': case 'Y':case 'н':case 'Н': goto m2; default: goto m3; } m3: goto_xy(2,25); SetColor(13,1); printf("Жми Enter"); fflush(stdin); _getch(); }
//////////////////del_skl.cpp конец//////////////////////////
//////////////////obra_skl.cpp начало////////////////////////
// Программа выполняет чтение записей ранее созданного бинарного // файла, содержащего сведения о товарах на складе и их обработку
// Структура записей: /* struct tovar { int kod; char name[25]; //наименование товара float price; //цена за единицу unsigned quant;//количество }; */
// На базе исходного файла создается новый файл, содержащий в каждой // записи дополнительное поле stoim (стоимость всей партии товара): // stoim = price * quant // Программа подсчитывает также общую стоимость всех товаров
void obra_skl(char *namein) { struct tovar1 //новая запись { int kod; //код товара char name[25]; //наименование товара float price; //цена за единицу unsigned quant;//количество double stoim; //стоимость партии }; char nameout[15]; char *pnameout=nameout,*pnamein=namein; system("cls"); if((in=fopen(namein, "rb"))==NULL) { puts(" Не могу открыть файл базы данных... "); _getch();return; //exit(2); } // Статистика базы данных size_bas(in); // формировать имя выводного файла while(*pnamein!= '.'&& *pnamein!= '\0') *pnameout++=*pnamein++; *pnameout='\0'; strcat_s(nameout,".out");
SetColor(14,1); printf("\nВыводной файл будет сохранен под именем %s\n",nameout); printf("Не поленитесь, запишите это имя, созданное программно \n \ и нажмите Enter\n"); _getch();
if((out=fopen(nameout, "wb"))==NULL) { puts(" Не могу открыть выводной файл... "); _getch();return; //exit(2); }
struct tovar zap; // структура типа tovar struct tovar1 zap1; // структура типа tovar1 int k; system("cls"); int size=sizeof(struct tovar); int size1=sizeof(struct tovar1); double total=0; int page=1; SetColor(13,1); goto_xy(10,1); printf("\n\t Результаты ревизии товаров на складе\n\n"); goto_xy(70,1); printf("Лист %d\n",page); k=3; SetColor(14,1); rewind(in); // в начало файла // за 1 раз считываем 1 структуру
while(fread(&zap,size,1,in)==1) { zap1.kod=zap.kod; strcpy_s(zap1.name,zap.name); zap1.price=zap.price; zap1.quant= zap.quant; zap1.stoim= zap1.price*zap1.quant; total+= zap1.stoim; printf("\n%5d %-25s %10.2f %5u %10.2lf ",zap1.kod, zap1.name, zap1.price, zap1.quant, zap1.stoim); // запись в файл fwrite(&zap1,size1,1,out); k++; // постраничная печать if(k%23==0) { goto_xy(2,25); SetColor(13,1); printf("Жми Enter"); _getch(); system("cls"); goto_xy(70,1); SetColor(13,1); printf("Лист %d",++page); k++; SetColor(14,1); } } SetColor(10,1);; printf("\n\n"); printf(" Общая стоимость всех товаров \t\t%.2lf", total); //k - кол-во прочитанных структур goto_xy(2,25); SetColor(13,1); printf("Жми Enter"); fclose(in);fclose(out); _getch(); }
//////////////////obra_skl.cpp конец//////////////////////////
//////////////////updt_skl.cpp начало////////////////////////
// Программа выполняет модификацию записи с // заданным ключевым полем в ранее созданном бинарном // файле, содержащем сведения о товарах на складе.
// Структура записей: /* struct tovar { int kod; //код товара char name[25]; //наименование товара float price; //цена за единицу unsigned quant;//количество }; */ // Воспользуемся тем, что записи исходного файла имеют строго фиксированную // длину -sizeof(struct tovar); запись с заданным ключевым полем после модификации // возвращается на свое место в базе данных. Это достигается функцией fseek() // void updt_skl(char *namein) { char tmpname[25]; char ch; int kod; //код товара float cena; unsigned kolic; SetColor(14,1); system("cls");
if((inout=fopen(namein, "r+b"))==NULL) { puts(" Не могу открыть файл базы данных... "); _getch();return; }
struct tovar zap; // структура типа tovar int size=sizeof(struct tovar); //размер базы long offst=size; // Статистика базы данных size_bas(inout); m2: rewind(inout); // в начало файла
// за 1 раз считываем 1 структуру SetColor(14,1); system("cls"); printf("Какую запись искать? \r\nВведи код записи или 0"); SetColor(13,1); printf("==>"); cin>>kod; fflush(stdin); //очистка stdin SetColor(14,1); while(fread(&zap,size,1,inout)==1 && zap.kod!=kod) ; if(zap.kod!=kod) { SetColor(13,1); //textcolor(5); printf("\nЗапись с кодом %d не найдена",kod); fputs("\n Вы можете: \n ",stderr); fputs("1. Повторить попытку \n ",stderr); fputs("2. Завершить работу \n ",stderr); fputs(" Ваш выбор ==> ",stderr); SetColor(14,1); //textcolor(14); ch=_getch(); switch (ch) { case '1': goto m2; case '2': fclose(inout); return; } } else { goto_xy(2,20); SetColor(14,1); printf("Найдена запись:\r\n"); printf("\n%5d %-25s %10.2f %5u ",zap.kod, zap.name, zap.price, zap.quant); goto_xy(2,23); SetColor(13,1); //textcolor(5);
printf("\nИменно эту изменять(y/n)?"); ch=_getch(); SetColor(14,1); system("cls");
fflush(stdin);
switch (ch) { case 'т': case 'Т':case 'n':case 'N': goto m2; //break; default: { puts("Чтобы сохранить старое название, нажать Enter"); puts("Чтобы сохранить числовые данные, набрать 0 и нажать Enter "); SetColor(10,1); goto_xy(1,3); //textcolor(2); printf("Название вида товара - "); goto_xy(25,3); SetColor(7,1); //textcolor(7); printf("%s",zap.name);
strcpy_s(tmpname, ""); // getch(); goto_xy(25,3); SetColor(13,1); gets_s(tmpname); //fgets(tmpname,20,stdin); if(tmpname[0]!='\0') {strncpy_s(zap.name,tmpname,strlen(tmpname)); zap.name[strlen(tmpname)] = '\0'; }
SetColor(10,1); //textcolor(2); printf(" код товара - "); goto_xy(25,4); SetColor(7,1); printf("%d",zap.kod); SetColor(13,1); //textcolor(4); _getch(); goto_xy(25,4); printf("%s"," "); goto_xy(25,4); cin>>kod; if(kod!=0) zap.kod=kod;
SetColor(10,1); //textcolor(2); printf(" цена за единиу - "); goto_xy(25,5); SetColor(7,1); //textcolor(7); printf("%.2f",zap.price); SetColor(13,1); _getch(); goto_xy(25,5); printf("%s"," "); goto_xy(25,5); cin>>cena; if(cena!=0) zap.price=cena;
SetColor(10,1); //textcolor(2); printf(" количество - "); //cin>>zap.quant; goto_xy(25,6); SetColor(7,1); //textcolor(7); printf("%d",zap.quant); SetColor(13,1); _getch();goto_xy(25,6); printf("%s", " "); goto_xy(25,6); cin>>kolic; if(kolic!=0) zap.quant=kolic;
//т к указатель установлен на следующую // запись, надо вернуться на 1 запись назад fseek(inout, -offst, 1); //*********запись структуры в файл **** fwrite(&zap,sizeof(tovar),1,inout); //************************************** SetColor(13,1); //textcolor(5); printf("\n\nОбновленная запись отправлена в базу "); printf("\r\nПродолжать(y/n)? ");ch=_getch(); switch (ch) { case 'y': case 'Y':case 'н':case 'Н': goto m2; default: goto m3; //fclose(inout); return; } } } } m3: fflush(stdin);goto_xy(2,25); SetColor(13,1); printf("Жми Enter"); _getch(); fclose(inout); }
//////////////////updt_skl.cpp конец//////////////////////////
//////////////////sort_skl.cpp начало////////////////////////
// Программа выполняет чтение записей ранее созданного бинарного // файла, содержащего сведения о товарах на складе, перезаписывает // их в другой файл и сортирует последний по возрастанию ключевого поля // Структура записей:
/* struct tovar { int kod; char name[25]; //наименование товара float price; //цена за единицу unsigned quant;//количество }; */ // in, out, inout - глобальные имена void sort_skl(char *namein) { char nameout[15]; char *pnameout=nameout,*pnamein=namein; SetColor(14,1); system("cls"); if((in=fopen(namein, "rb"))==NULL) { puts(" Не могу открыть файл базы данных... "); _getch();return; //exit(2); } // Статистика базы данных (см. далее) // size_bas(in); // формировать имя выводного файла while(*pnamein!= '.'&& *pnamein!= '\0') *pnameout++=*pnamein++; *pnameout='\0'; strcat_s(nameout,".sor");SetColor(14,1); printf("Выводной файл будет сохранен под именем %s\n",nameout); printf("Не поленитесь, запишите это имя, созданное программно \n \ и нажмите Enter\n"); _getch();
if((out=fopen(nameout, "wb"))==NULL) { puts(" Не могу открыть выводной файл... "); _getch();return; //exit(2); } struct tovar zap; SetColor(14,1); //textcolor(YELLOW); int k; system("cls"); int size=sizeof(struct tovar); //rewind(in); // в начало файла // за 1 раз считываем 1 структуру
while(fread(&zap, size,1,in)==1) // запись в файл fwrite(&zap,size,1,out);
fclose(in);fclose(out); // ///////////////////////////////////////////////////// if((inout=fopen(nameout, "r+b"))==NULL) { puts(" Не могу открыть файл базы данных... "); _getch();return; }
SetColor(14,1); ///textcolor(YELLOW); struct tovar x, y; // структуры типа tovar
// Определим размер базы в байтах и число записей fseek(inout, 0L, SEEK_END); //В конец файла system("cls"); SetColor(13,1); long last=ftell(inout); goto_xy(30,10); printf("Размер базы - %ld байт",last); int n=last/sizeof(struct tovar); goto_xy(30,11); printf("В базе %d записей\n",n); SetColor(14,1); goto_xy(10,24);printf("\r\nДля продолжения жми Enter"); _getch(); system("cls"); rewind(inout); // в начало файла
// сортировка int priz; k = n; //номер последней записи do { priz=1; k--; rewind(inout); // в начало файла for(int i=0; i < k; i++) { fseek(inout, (long)i*size, SEEK_SET); fread(&x,size,1,inout); fread(&y,size,1,inout); if(x.kod > y.kod) { fseek(inout, (long)i*size, SEEK_SET); //назад fwrite (&y,size,1,inout); fwrite (&x,size,1,inout); priz = 0; } } } while (priz == 0); goto_xy(2,23); SetColor(13,1); printf("\nСортировка завершена...Жми Enter"); _getch(); fclose(inout);
///////// распечатка БД после сортировки /////// put_skl(nameout); /////////////////////////////////////////////// }
//////////////////sort_skl.cpp конец//////////////////////////
//////////////////poisk_skl.cpp начало////////////////
// Программа выполняет поиск в ранее созданном бинарном // файле, содержащем сведения о товарах на складе, записи // с заданным названием товара. Структура записей:
/* struct tovar { int kod; //код товара char name[25]; //наименование товара float price; //цена за единицу unsigned quant;//количество }; */
void poisk_skl(char *namein) { char name[25]; //название товара char ch; if((in=fopen(namein, "rb"))==NULL) { puts(" Не могу открыть файл базы данных... "); _getch();return; }
struct tovar zap; // структура типа tovar int k=0; int size=sizeof(struct tovar);//размер структуры int found=0; size_bas(in);//Размер базы и число записей в ней m2:rewind(in); // в начало файла // за 1 раз считываем 1 структуру cfone; SetColor(14,1); system("cls"); printf("Какую запись искать? \r\nВведи название товара "); SetColor(10,1); printf("==>"); fflush(stdin); gets_s(name); //scanf_s("%s", name); //cin>>name; while(fread(&zap,size,1,in)==1) { if(strstr(zap.name, name)) //if(zap.name[strlen(name)]==' ') //name завершается пробелом?
{ goto_xy(2,20); SetColor(10,1); printf("Найдена запись %d:\r\n",++k); found=1;goto_xy(2,20); SetColor(14,1); printf("\n%5d %-25s %10.2f %5u ",zap.kod, zap.name, zap.price, zap.quant); goto_xy(2,23); SetColor(13,1); printf("Продолжать поиск(y/n)?"); ch=_getch(); if(ch== 'n' || ch== 'N' || ch== 'т'|| ch=='Т') break; }
}
if(!found) { //****** если запись не найдена *****/
SetColor(13,1); printf("\nЗапись с названием %s не найдена",name);
SetColor(14,1); printf("\n Вы можете: \r\n "); printf("1. Повторить попытку \r\n "); printf("2. Завершить работу \r\n "); printf(" Ваш выбор ==> ");
ch=_getch(); switch (ch) { case '1': goto m2; case '2': goto m3; } }
m3: goto_xy(2,25); SetColor(13,1); printf("Поиск завершен. Жми Enter"); fflush(stdin); _getch(); }
//////////////////poisk_skl.cpp конец//////////////////
Литература 1. Бьерн Страуструп. Язык программирования С++. Москва, 1995. 2. Программирование на С++. Под ред. А.Д. Хомоненко. 3. Дейтел Х., Дейтел П. Как программировать на С: Пер. с англ. М.: Издат. БИНОМ, 2000,-1008 с. 4. Дейтел Х., Дейтел П. Как программировать на С++. Пер. с англ. М.: Издат. БИНОМ, 2000,-1033 с. 5. Прата Стивен. Язык программирования С. Лекции и упражнения: Пер. с англ. Изд «ДиаСофт», 2000,-432с. 6. Бочков С.О. и др. Язык программирования Си для персонального компьютера. - М.: Радио и связь, 1991,-384 с. 7. Касаткин А. И., Вальвачев А. Н. Профессиональное программирование на языке Си. От Turbo C к Borland C++. Справочное пособие. -Мн.: Выш. шк. 1992. -240 с. 8. Керниган Б., Ритчи Д. Язык программирования Си. -М.: Финансы и статистика, 1985.-279 с. 9. Макогон В.С. Язык программирования Си для начинающих., Одесса; НПФ "Астропринт", 1993. -96 с. 10. Уэйт М. и др. Язык Си. Руководство для начинающих. - М.: Мир, 1988. -512 с. 11. Подбельский В. В. Язык Си++: Учеб. пособие. – М.: Финансы и статистика, 1999, 560с. 12. Крячков А. В. Сухинина И. В. Томшин В. К. Программирование на С и С++. Практикум – Телеком, 2000.-344с. 13. Bohm C., Jacopini G. Flow – Diagrams. Turing Mashines and Languages with only Two Formation Rules // Commun. of ACM, 1966, V. 9, № 5, p. 366 14. Светозарова Г. И., Мельников А. А., Козловский А. В. Практикум по программированию на языке Бейсик: Учебное пособие для вузов. – М.: Наука, 1988. – 368с. 15. Абрамов С. А., Гнездилова Г. Г., Капустина Е. Н., Селюн М. И. Задачи по программированию. – М.: Наука, 1988. – 224с. 16. Пильщиков В. Н. Сборник упражнений по языку Паскаль: Учебное пособие для вузов. – М.: Наука, 1989. – 160с. 17. Корн Г., Корн Т. Справочник по математике для научных работников и инженеров, М.: Наука, 1986. -720 стр.
|
|||||||||
Последнее изменение этой страницы: 2016-12-16; просмотров: 384; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.50.169 (0.01 с.) |