Advertisement
Guest User

Untitled

a guest
May 30th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.67 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7.  
  8.  
  9.  
  10. typedef struct books{
  11. int number;
  12. char* bookname;
  13. char* surname;
  14. int year;
  15. int quanity;//количество книг в библиотеке
  16. int availability;//наличие
  17.  
  18.  
  19. }BOOKINFO;
  20. typedef struct list_elem //структура элемента списка
  21. {
  22. BOOKINFO books;
  23. struct list_elem *next;
  24.  
  25.  
  26. }LEL;
  27.  
  28. int num=1;//счетчик элементов
  29. int bookscount;
  30. void AddElem();
  31. void sort_by_year(void);
  32. void book_available(void);
  33. void edit_book_info(void);
  34. void DeleteAllOdd(void);
  35. void FreeList(void);
  36. void show_year(void);
  37. void find_year(void);
  38. void show_book_data(void);
  39. void BubbleSortArray(books arr[], int count);
  40. void SaveToFile();//бинарный
  41. void LoadFromFile();
  42. void saveIntoFile();//текстовый
  43.  
  44.  
  45. LEL *list; //глобальный указатель на начало списка
  46. LEL *end=NULL;
  47. const int strLength = 50;
  48.  
  49. int main()
  50. { setlocale(LC_ALL,"Russian");//подключение русского языка
  51.  
  52. int vibor;//переменная для выбора действия в меню
  53.  
  54.  
  55. printf("Курсовя работа по дисциплине «Алгоритмизация и программирование»\nСтудента 1го курса\nГруппы АИ152\nПасибаевой Ольги\n");
  56. printf("Задание: Реализовать динамическую структуру в которой содержится информация о \nкнигах в библиотеке\n");
  57. int menuNeeded=1;
  58. while (menuNeeded==1){
  59. puts("\nВыбирите дейтсвие , которое хотите выполнить 0-6.(число соответсвует номеру\nв списке возможностей программы)\n(^ ^)/\n\n ");
  60. puts("1 - Добавить новую книгу");
  61. puts("2 - Отобразить иноформацию обо всех книгах");
  62. puts("3 - Отобразить книги выпущенные после заданного года");
  63. puts("4 - Отобразить данные о наличии книги в библиотеке");
  64. puts("5 - Редактировать информацию о наличии книги в библиотеке");
  65. puts("6 - Cортировка книг по году выдачи(от меньшего к большему)");
  66. puts("7 - Cохранить данные в файл");
  67. puts("8 - Загрузить данные из файла");
  68. puts("0 - Очистить список");
  69. scanf("%d", &vibor);
  70. switch(vibor) {
  71.  
  72. case 1:
  73. AddElem();
  74. break;
  75.  
  76. case 2:
  77. show_book_data();
  78. break;
  79.  
  80. case 3:
  81. show_year();
  82. break;
  83.  
  84. case 4:
  85. book_available();
  86. break;
  87.  
  88. case 5:
  89. edit_book_info();
  90. break;
  91.  
  92. case 6:
  93. sort_by_year();
  94. break;
  95.  
  96. case 7:
  97. SaveToFile();
  98. break;
  99.  
  100. case 8:
  101. LoadFromFile();
  102. break;
  103.  
  104. case 0:
  105. FreeList();
  106. menuNeeded=0;
  107.  
  108. }
  109.  
  110. }
  111.  
  112. return 0;
  113. }
  114.  
  115.  
  116.  
  117. void AddElem() //функция присоединения нового элемента
  118. {
  119.  
  120. LEL *pel; //указатель на новый элемент
  121. do{pel=(LEL*)malloc(sizeof(LEL)); //выделение ДП
  122. printf("\n\t %d-ая книга: Номер книги -", num);
  123. scanf("%d", &pel->books.number);
  124. if(pel->books.number==0) //признак конца ввода
  125. { puts("Ввод завершен");
  126. free(pel);
  127. return;
  128. }
  129. fflush(stdin); //очищение буфера ввода
  130. pel->books.bookname = new char[strLength+1];
  131. pel->books.surname = new char[strLength+1];
  132. printf("\n\t Название книги ");
  133. gets(pel->books.bookname);
  134. fflush(stdin); //очищение буфера ввода
  135. printf("\n\t Фамилия и инициалы автора ");
  136. gets(pel->books.surname);
  137. fflush(stdin);
  138. printf("\n\t Год выпуска ");
  139. scanf("%d", &pel->books.year);
  140. fflush(stdin);
  141. printf("\n\t Количество книг в библиотеке ");
  142. scanf("%d", &pel->books.quanity);
  143. do{printf("\n\t Книга есть на складе, нажмите - 1\n\t Книга отсутсвует, нажмите - 0 ");
  144. scanf("%d", &pel->books.availability);
  145. }while(pel->books.availability!=1&&pel->books.availability!=0);
  146. pel->next=NULL; //новый элемент становится последним в списке
  147. if(list==NULL) //если список пустой
  148. {
  149. list=pel;
  150. end=pel;
  151. }
  152. else
  153. {
  154.  
  155. end->next=pel;//присоединение к последнему элементу в списке
  156. end=pel;
  157. }
  158.  
  159. num++;
  160. bookscount++;
  161. }while(pel->books.number!=NULL);
  162.  
  163. }
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171. /*
  172. void write_information(void)
  173.  
  174. { int i;
  175. struct characteristic {
  176. int number;
  177. int year;
  178. int quanity;//количество книг в библиотеке
  179. };
  180. struct auther{
  181. char surname[AUTHER_SURNAME];
  182. char bookname[BOOK_NAME];
  183. };
  184. struct bookinfo{
  185. struct characteristic
  186. aboutbook;
  187. struct auther
  188. writer;
  189. };
  190.  
  191. printf("Пожалуйста, введите данные о книгах в библиотеке. Для прекращения ввода нажмите - 404\n");
  192. struct bookinfo
  193. books[k];
  194. for (i = 0; i < k; i++ ){
  195. puts("1. Введите фамилию и инициалы автора книги через точку.");
  196. scanf("%s",&books[i].writer.surname);
  197. puts("2. Введите название книги(используйте нижнее подчеркивание для разделения слов)");
  198. scanf("%s",&books[i].writer.bookname);
  199. puts("3. Введите номер книги.Нельзя использовать число 404");
  200. scanf("%d",
  201. &books[pel->next=NULL; //новый элемент становится последним в списке
  202. if(list==NULL) //если список пустой
  203. list=pel;
  204. else
  205. last->next=pel; //присоединение к последнему элементу в списке
  206. num++;
  207. return pel;
  208. }i].aboutbook.number);
  209. puts("4. Введите год выпуска");
  210. scanf("%d",
  211. &books[i].aboutbook.year);
  212. puts("5. Введите кол-во книг в библиотеке");
  213. scanf("%d",
  214. &books[i].aboutbook.quanity);
  215. }
  216. */
  217.  
  218.  
  219.  
  220. void show_book_data(void)
  221. { int nomer=1;
  222. int choice;//выбор
  223. printf("Информация о книгах\n");
  224. LEL *pel=list;
  225.  
  226.  
  227.  
  228. printf("--------------------------------------------------------------------------------");
  229. printf(" | № книги | Название | Автор | Год | Кол-во экземпляров |\n");
  230. printf("--------------------------------------------------------------------------------");
  231.  
  232. while(pel!=NULL)
  233. {
  234. printf("%d| %-6d|\t%-15s|",nomer,pel->books.number, pel->books.bookname);
  235. printf(" %-10s | %-7d|",pel ->books.surname, pel->books.year);
  236. printf("\t%-30d",pel->books.quanity);
  237. printf("\n--------------------------------------------------------------------------------");
  238. pel=pel->next;
  239. nomer++;
  240. }
  241. if(list==NULL) //если список пустой
  242. {
  243. puts("\t\t\t\tCписок пустой!");
  244. }
  245. puts("\t\tХотите сохранить данные в файл?\n");
  246. puts("\t\t\t\tДа - нажмите 1 (чтобы сохранить в бинаром файле)\t\t\t\t\t 2 (в текстовом) ");
  247. puts("\t\t\t\tНет - нажмите 0 ");
  248. scanf("%d",&choice);
  249. switch(choice)
  250. {
  251. case 1: SaveToFile();
  252. break;
  253. case 2: saveIntoFile();
  254. case 0: return;
  255. }
  256.  
  257.  
  258. system("pause");
  259. system("CLS");
  260. }
  261.  
  262. void show_year(void)
  263. {
  264. LEL *pel=list;
  265. int choice1;
  266.  
  267. printf("Отобразить книги выпущенные после X года\n");
  268. int search_year;
  269. printf("Введите год издания ");
  270. scanf("%d",&search_year);
  271. printf("--------------------------------------------------------------------------------");
  272. printf(" | № книги | Название | Автор | Год | Кол-во экземпляров |\n");
  273. printf("--------------------------------------------------------------------------------");
  274. while(pel!=NULL){
  275. if(pel->books.year>search_year)
  276. {
  277. printf(" | %-6d|\t%-15s|",pel->books.number, pel->books.bookname);
  278. printf(" %-10s | %-7d|",pel ->books.surname, pel->books.year);
  279. printf("\t%-30d",pel->books.quanity);
  280. printf("\n--------------------------------------------------------------------------------");
  281. pel=pel->next;
  282.  
  283.  
  284. }
  285.  
  286.  
  287. else {
  288. pel=pel->next;
  289.  
  290.  
  291. }
  292.  
  293. }
  294. if(list==NULL) //если список пустой
  295. {
  296. printf("Книги выпущенные после %d года не найдены!",search_year);
  297. }
  298.  
  299.  
  300. printf("\n\t\t\tНажмите 1 - если хотите ввести другой год.\n\t\t\tНажмите 0 - чтобы вернуться в предыдущее меню");
  301. scanf("%d",&choice1);
  302. switch(choice1){
  303. case 1:show_year();
  304. break;
  305. case 0:return;}
  306.  
  307.  
  308.  
  309. }
  310.  
  311.  
  312.  
  313.  
  314.  
  315. void book_available(void)
  316. {
  317. printf("Наличие книги в библиотеке\n");
  318.  
  319. int choice;//выбор
  320. LEL *pel=list;
  321. printf("--------------------------------------------------------------------------------");
  322. printf(" | № книги | Название | Автор | Год | Кол-во экземпляров|\n");
  323. printf("--------------------------------------------------------------------------------");
  324. while(pel!=NULL)
  325. {
  326. printf(" | %-6d|\t%-15s|",pel->books.number, pel->books.bookname);
  327. printf(" %-10s | %-7d|",pel ->books.surname, pel->books.year);
  328. printf(" %d ",pel->books.quanity);
  329.  
  330. if(pel->books.availability==1)
  331. {
  332. printf("|ЕСТЬ в наличии\n");
  333. }
  334. if(pel->books.availability==0)
  335. {
  336. printf("|НЕТ в наличии\n");
  337. }
  338. pel=pel->next;
  339. }
  340. if(list==NULL) //если список пустой
  341. {
  342. printf("\n\t\t\tCписок пустой!");
  343. }
  344.  
  345. puts("\n\tНажмите - 1, если хотите отредактировать информацию о наличии книги\n\tНажмите - 0, чтобы вернуться в предыдущее меню.");
  346. do{ scanf("%d",&choice);
  347. if(choice!=1&&choice!=0)
  348. {
  349. puts("Ошибка, вы ввели неверное число\nПопробуйте снова\n");
  350. puts("\n\tНажмите - 1, если хотите отредактировать информацию о наличии книги\n\tНажмите - 0, чтобы вернуться в предыдущее меню.");
  351. }
  352.  
  353.  
  354. }while(choice!=1&&choice!=0);
  355. switch(choice) {
  356. case 1: edit_book_info();
  357. break;
  358. case 0: return;
  359. }
  360.  
  361.  
  362.  
  363. }
  364.  
  365. void edit_book_info(void)
  366. {LEL *pel=list;
  367. int choice1;
  368. int number_edit;//номер книги
  369. int edit;
  370. puts("Введите регистрационный номер книги, которую хотите отредактировать");
  371. scanf("%d",&number_edit);
  372. printf("--------------------------------------------------------------------------------");
  373. printf(" | № книги | Название | Автор | Год | Кол-во экземпляров|\n");
  374. printf("--------------------------------------------------------------------------------");
  375.  
  376. while(pel!=NULL){
  377.  
  378. if(pel->books.number==number_edit)
  379. { printf(" | %-6d|\t%-15s|",pel->books.number, pel->books.bookname);
  380. printf(" %-10s | %-7d|",pel ->books.surname, pel->books.year);
  381. printf(" %d ",pel->books.quanity);
  382.  
  383. do{printf("\n\t\t\tНажмите 1 - если книга снова доступна\n\t\t\tНажмите 0 - если книга в данный момент отсутсвует ");
  384. scanf("%d",&edit);}while(edit!=0&&edit!=1);
  385. if(edit==1)
  386. { puts("Изменения приняты!");
  387. pel->books.availability=1;
  388.  
  389.  
  390. }
  391. if(edit==0)
  392. { puts("Изменения приняты!");
  393. pel->books.availability=0;
  394. }
  395.  
  396. }
  397.  
  398.  
  399. pel = pel->next;
  400.  
  401. }
  402. if(list==NULL) //если список пустой
  403. {
  404. printf("\n\t\t\tCписок пустой!");
  405. }
  406. printf("\n\t\t\tНажмите 1 - если хотите продолжить редактирование.\n\t\t\tНажмите 2 - чтобы посмотреть обновленную информацию.");
  407. printf("\n\t\t\tНажмите 0 - чтобы вернуться в предыдущее меню");
  408. scanf("%d",&choice1);
  409. switch(choice1){
  410. case 1:edit_book_info();
  411. break;
  412. case 2:book_available();
  413. break;
  414. case 0:return;}
  415. }
  416. void sort_by_year(void)
  417. {
  418. if (bookscount==0)
  419. {
  420. puts("\t\t\t\tCписок пустой!");
  421. return;
  422. }
  423. else
  424. {
  425. printf("--------------------------------------------------------------------------------");
  426. printf(" | № книги | Название | Автор | Год | Кол-во экземпляров |\n");
  427. printf("--------------------------------------------------------------------------------\n");
  428.  
  429. if (bookscount== 1)
  430. {
  431.  
  432. printf(" | %-6d|\t%-15s|",list->books.number, list->books.bookname);
  433. printf(" %-10s | %-7d|",list ->books.surname,list->books.year);
  434. printf("\t%-30d\n",list->books.quanity);
  435. }
  436. else
  437. {
  438. LEL *pel=list;
  439.  
  440. BOOKINFO *arr = new BOOKINFO[bookscount];
  441. for (int i = 0; i <bookscount; i++)
  442. {
  443. arr[i] =pel->books;
  444. pel =pel->next;
  445. }
  446.  
  447. BubbleSortArray(arr, bookscount);
  448.  
  449. for (int i = 0; i < bookscount; i++)
  450. {
  451.  
  452.  
  453. printf(" | %-6d|\t%-15s|",arr[i].number,arr[i].bookname);
  454. printf(" %-10s | %-7d|",arr[i].surname, arr[i].year);
  455. printf("\t%-30d\n",arr[i].quanity);}
  456. }
  457.  
  458. }
  459.  
  460. }
  461.  
  462.  
  463.  
  464.  
  465. void FreeList(void) //функция стираний всего списка
  466. {
  467. LEL *pel=list;
  468. while(pel!=NULL)
  469. {
  470. list=list->next;
  471. free(pel); //удаление текущего элемента
  472. pel=list;
  473. }
  474. system("pause");
  475. system("CLS");
  476. }
  477. void SaveToFile()
  478. {
  479.  
  480. int choice;
  481.  
  482. FILE* file = fopen("F:\data_read.txt", "wb");
  483. LEL* pel = list;
  484. fwrite(&bookscount, sizeof(int), 1, file);
  485. while (pel!=NULL)
  486. {
  487.  
  488. fwrite(&pel->books.number, sizeof(long int), 1, file);
  489.  
  490. int size = strlen(pel->books.bookname) + 1;
  491. fwrite(&size, sizeof(size), 1, file);
  492. fwrite(pel->books.bookname, size, 1, file);
  493.  
  494. size = strlen(pel->books.surname) + 1;
  495. fwrite(&size, sizeof(size), 1, file);
  496. fwrite(pel->books.surname, size, 1, file);
  497.  
  498.  
  499. fwrite(&pel->books.year, sizeof(int), 1, file);
  500.  
  501.  
  502. fwrite(&pel->books.quanity, sizeof(int), 1, file);
  503.  
  504. fwrite(&pel->books.availability, sizeof(int), 1, file);
  505.  
  506.  
  507. pel = pel->next;
  508. }
  509. fclose(file);
  510. puts("Каталог успешно сохранен в файл F:\data_read.txt.");
  511. }
  512. void LoadFromFile()
  513. {LEL *pel=list;
  514.  
  515. FILE* file = fopen("F:\data_read.txt", "rb");
  516. int count;
  517. int size;
  518. fread(&count, sizeof(int), 1, file);
  519. for (int i = 0; i <count; i++)
  520. {
  521. BOOKINFO books;
  522. fread(&books.number, sizeof(long int), 1, file);
  523.  
  524. fread(&size, sizeof(size), 1, file);
  525.  
  526. books.bookname = (char*)malloc(sizeof(char)*strLength);
  527. fread(books.bookname, 1, size, file);
  528.  
  529. books.surname = (char*)malloc(sizeof(char)*strLength);
  530. fread(books.surname, 1, size, file);
  531. fread(&size, sizeof(size), 1, file);
  532.  
  533. fread(&books.year, sizeof(int), 1, file);
  534. fread(&size, sizeof(size), 1, file);
  535.  
  536. fread(&books.quanity, sizeof(int), 1, file);
  537. fread(&books.availability, sizeof(int), 1, file);
  538. while(pel!=NULL){
  539. //новый элемент становится последним в списке
  540. if(list==NULL) //если список пустой
  541. {
  542. list=pel;
  543. end=pel;
  544. }
  545. else
  546. {
  547.  
  548. end->next=pel;//присоединение к последнему элементу в списке
  549. end=pel;
  550. }
  551.  
  552. }}
  553. fclose(file);
  554. puts("Каталог успешно загружен из файла data_read.txt.");
  555. }
  556. void saveIntoFile() // запись данных в файл
  557. {
  558. printf( "Данные сохранены в файл.");
  559. LEL *pel = list;
  560. FILE *f;
  561. f = fopen("F:\data.txt", "w+");
  562. if (f == NULL)
  563. {
  564. printf("Невозможно открыть файл!\n");
  565. return;
  566. }
  567. while (pel != NULL)
  568. {
  569. fprintf(f, "%d ", pel->books.number);
  570. fprintf(f, "%s ", pel->books.bookname);
  571. fprintf(f, "%s ", pel->books.surname);
  572. fprintf(f, "%d ", pel->books.year);
  573. fprintf(f, "%d ", pel->books.quanity);
  574. fprintf(f, "%d ", pel->books.availability);
  575. fprintf(f, "\n");
  576. pel = pel->next;
  577. }
  578. fclose(f);
  579. }
  580.  
  581.  
  582. void BubbleSortArray(BOOKINFO arr[], int count)
  583. {int i;
  584. int j;
  585. for (i = 0; i < count; i++)
  586. {
  587. for ( j = 0; j < count - 1; j++)
  588. {
  589. if (arr[j].year < arr[j + 1].year)
  590. {
  591. BOOKINFO pel= arr[j];
  592. arr[j] = arr[j + 1];
  593.  
  594. arr[j + 1] = pel;
  595.  
  596. }
  597. }
  598. }
  599.  
  600. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement