0 / 0 / 0
Регистрация: 27.03.2020
Сообщений: 11
|
|
1 | |
Создать код с использованием файловых потоков, используя этот код17.05.2020, 02:04. Показов 349. Ответов 2
Метки нет (Все метки)
#include <fstream>
#include <iostream> using namespace std; #pragma pack(push,1) struct scan_info { char model[25]; // наименование модели int price; //цена double x_size; //горизонтальный размер области сканирования double y_size; //вертикальный размер области сканирования int optr; //оптическое разрешение int gray; //число градаций серого }; #pragma pack(pop) //сохраняет массив записей int save_info(const char* file,const scan_info* info,unsigned long count) { unsigned long real_count =0; for (unsigned int k=0; k < count ;++k) if (info[k].price >= 200 && isalpha(info[k].model[0])) real_count++; if (real_count == 0) return -1; ofstream o_file(file,ios::binary); if (o_file.fail()) return -1; o_file.write((char*)&real_count,sizeof(long)); //для проверки на большую и маленькую букву char chrs[2][2] = {'A','Z','a','z'}; for (int j=0; j <2; ++j) { for (unsigned long i=0; i<count; ++i) { if (info[i].model[0] >= chrs[j][0] && info[i].model[0] <= chrs[j][1] && info[i].price >= 200) { o_file.write((char*)&info[i],sizeof(scan_info)); if (o_file.fail()) { o_file.close(); return -1; } } } } o_file.close(); return 0; } //загружает массив unsigned long load_info(const char* file,scan_info*& info) { ifstream i_file(file,ios::binary); if (i_file.fail()) return 0; unsigned long count = 0; i_file.read((char*)&count,sizeof(long)); try { info = new scan_info[count]; } catch (std::bad_alloc) { i_file.close(); return 0; } for (unsigned long i=0; i < count; ++i) { i_file.read((char*)&info[i],sizeof(scan_info)); if (i_file.eof() && i <count-1) { i_file.close(); delete [] info; return 0; } } i_file.close(); return count; } //получает значение переменной (проверяет ввод на ошибки) template <class T> inline void input_var(const char* desc,T& dst) { do { cout << desc; cin.sync(); cin.clear(); } while ((cin >> dst).fail() || cin.get() != 10); } //запрашивает значения записей unsigned long input(scan_info*& info_arr) { unsigned long count = 0; cout << endl; input_var("Count of records:",count); try { info_arr = new scan_info[count]; } catch (std::bad_alloc) { return 0; } for (unsigned long i=0; i < count; ++i) { cout << endl << "Record number "<< i+1 << endl; cout << "Model:"; cin.getline(info_arr[i].model,24,); input_var("Price:", info_arr[i].price); input_var("X-size:", info_arr[i].x_size); input_var("Y-size:", info_arr[i].y_size); input_var("Optical resolution:",info_arr[i].optr); input_var("Shade of gray:", info_arr[i].gray); } return count; } //выводит на экран одну запись void print_one(const scan_info* info,unsigned long n) { cout <<endl << "Number:" << n + 1 << endl; cout << "----------------------------" << endl; cout << "Model:"; cout << info[n].model << endl; cout << "Price:"; cout << info[n].price<< endl; cout << "X-size:"; cout << info[n].x_size<< endl; cout << "Y-size:"; cout << info[n].y_size<< endl; cout << "Optical resolution:"; cout << info[n].optr<< endl; cout << "Gray scale:"; cout << info[n].gray<< endl; cout << "----------------------------" << endl; } //выводит все записи void print_all(const scan_info* records,unsigned long count) { for (unsigned long i=0; i < count ;++i) print_one(records,i); } int main() { scan_info* records = 0; char file[25]; unsigned long count = 0; cin.tie(&cout); //first menu while (count == 0) { cout << "1.Input records" << endl << "2.Load from file" << endl << "3.Exit" << endl; cin.clear(); char ch = cin.get(); cin.get(); ////remove 0x0a switch (ch) { case '1': count = input(records); if (count == 0) cout << "Error, too many records" << endl << endl; break; case '2': input_var("File:",file); count = load_info(file,records); if (count == 0) cout << "Error reading file" << endl <<endl; break; case '3': exit(0); default: cout << "Incorrect input" << endl << endl; break; } } unsigned long rec_number = -1; //second menu while (true) { cout << endl << endl << "1.Show record" << endl << "2.Show all" << endl << "3.Save to file" << endl << "4.Exit" << endl; cin.clear(); char ch = cin.get(); cin.get(); ////remove 0x0a switch (ch) { case '1': input_var("Record number:",rec_number); if (--rec_number < count) print_one(records,rec_number); else cout << "Out of range" << endl; break; case '2': print_all(records,count); break; case '3': input_var("File:",file); if (save_info(file,records,count)) cout << "Error writing file" << endl <<endl; break; case '4': exit(0); default: cout << "Incorrect input" << endl; break; } } }
0
|
17.05.2020, 02:04 | |
Ответы с готовыми решениями:
2
Разобрать код и создать приложение использующее этот код Поиск в бинарном файле с использованием файловых потоков Исправить код записи в файл с использованием потоков Реализовать этот код с использованием цикла while или do … while |
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
|
||||||
17.05.2020, 02:07 | 2 | |||||
Ну на, наслаждайся
1
|
0 / 0 / 0
Регистрация: 27.03.2020
Сообщений: 11
|
|
19.06.2020, 00:27 [ТС] | 3 |
не создает файл
0
|
19.06.2020, 00:27 | |
19.06.2020, 00:27 | |
Помогаю со студенческими работами здесь
3
Поясните, что делает этот код с использованием указателей Как написать этот код с использованием класса в отдельном файле? Как с использованием map и lambda-функции преобразовать этот код? Возможно ли переделать этот код, используя switch case? Возможно ли переделать этот код, используя switch case? (без массива) как создать этот таблицу дайте код Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |