Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
В записях создаваемого файла заполнено только первое Поле, остальные 2 поля содержат строку “pusto” .↑ ⇐ ПредыдущаяСтр 32 из 32 Содержание книги
Поиск на нашем сайте
// 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; просмотров: 373; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.119.129 (0.017 с.) |