Advertisement
Merkava

Untitled

May 20th, 2014
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.58 KB | None | 0 0
  1. [B]Stilet[/B], ничего не так же, я попробовал осуществить свой план, но все равно ВСЕ нужно переделывать.
  2. Если все же будут идеи, напишите.
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <locale.h>
  6. #include <string.h>
  7. #include <conio.h>
  8. #define N 20
  9. struct city
  10. {
  11. char name_f[80];
  12. char name_p[80];
  13. char date[12];
  14. char type; //1 - взрослый, 0 - детский
  15. union
  16. {
  17. char adult[15];
  18. char child[15];
  19.  
  20. }type1;
  21. struct city *next;
  22. struct city *previous;
  23. };
  24.  
  25. struct city *head=NULL;
  26. struct city *last=NULL;
  27. struct city *current=NULL; //текущий элемент
  28. struct city *temp=NULL;
  29. struct city *newList=NULL;
  30.  
  31. typedef struct city DataType;
  32. struct list // Основная структура
  33. {
  34. DataType data;
  35. struct list *next;
  36. //struct city *head=NULL;
  37. };
  38.  
  39. /* добавление */
  40. void add_name(void)
  41. {
  42. newList = (struct city *) malloc(sizeof(struct city));
  43. printf("Название театра\n");
  44. scanf_s("%s", newList->name_f);
  45. printf("Название представления\n");
  46. scanf_s("%s", newList->name_p);
  47. printf("Дата представления\n");
  48. scanf_s("%s", newList->date);
  49. printf("Жанр (1) - шоу для взрослых, (0) - детский\n");
  50. scanf_s("%d",&newList->type);
  51. if (newList->type)
  52. {
  53. printf("Введите жанр шоу для взрослых\n");
  54. scanf_s("%s", newList->type1.adult);
  55. }
  56. else
  57. {
  58. printf("Введите возраст шоу для детей\n");
  59. scanf_s("%s", newList->type1.child);
  60. }
  61. newList->next = head;
  62. newList->previous = NULL;
  63. head = newList;
  64. if(last == NULL) last = head;
  65. else head->next->previous=head;
  66. return;
  67. }
  68.  
  69. /* Процедура удаления первого узла */
  70. void delete_unit()
  71. { newList=head;
  72. if(newList != NULL) //если список не пустой
  73. {
  74. head=head->next;
  75. free(newList); //удаление элемента
  76. if (head!=NULL) //элемент не единственный
  77. head->previous=NULL;
  78. else //удалили единственный, список стал пустым
  79. last = NULL;
  80. }
  81. }
  82. int count_L() /*подсчет числа элементов в списке*/
  83. {
  84. int count=0;
  85. newList = head;
  86. while(newList != NULL)
  87. {
  88. count=count+1;
  89. newList = newList->next;
  90. }
  91. return count;
  92. }
  93. /* Процедура вывода списка слева направо */
  94. void show_list(void)
  95. {
  96. struct city *info;
  97. info = head;
  98. puts(" _______________________________________________________________________");
  99. puts("| | | | |");
  100. puts("| Название театра | Название представления | Дата | Жанр |");
  101. puts("|_________________|________________________|__________|________________|");
  102. while(info)
  103. {
  104.  
  105. printf("|%17s|%24s|%10s|", info->name_f, info->name_p, info->date);
  106. if (newList->type)
  107. printf("18+:%12s|\n", info->type1.adult);
  108. else
  109. printf("0+:%13s|\n", info->type1.child);
  110. info = info->next;
  111. }
  112. puts("|_________________|________________________|__________|________________|");
  113. }
  114. /* Процедура вывода списка справа налево */
  115. void show_list_1(void)
  116. {
  117. struct city *info;
  118. info = last;
  119. puts(" _______________________________________________________________________");
  120. puts("| | | | |");
  121. puts("| Название театра | Название представления | Дата | Жанр |");
  122. puts("|_________________|________________________|__________|________________|");
  123. while(info)
  124. {
  125. printf("|%17s|%24s|%10s|", info->name_f, info->name_p, info->date);
  126. if (newList->type)
  127. {
  128. printf("18+:%12s|\n", info->type1.adult);
  129. }
  130. else
  131. {
  132. printf("0+: %13s|\n", info->type1.child);
  133. }
  134. info=info->previous;
  135. }
  136. puts("|_________________|________________________|__________|________________|");
  137. }
  138.  
  139.  
  140. //////////////
  141. struct list* read_sp(FILE *fp, struct list *begin)
  142. {
  143. struct list *temp, *new_element;
  144. int flag=1, flag2=1;
  145. int count;
  146. if((new_element=(struct list*)calloc(1, sizeof(struct list)))!=NULL)
  147. {
  148. if((fread(&(new_element->data), sizeof(DataType), 1, fp)==0))
  149. {
  150. free(new_element);
  151. return NULL;
  152. }
  153. else
  154. {
  155. begin=new_element;
  156. temp=begin;
  157. count++;
  158. while(1)
  159. {
  160. if ((new_element=(struct list*)calloc(1, sizeof(struct list)))==NULL)
  161. break;
  162. if ((fread(&(new_element->data), sizeof(DataType), 1, fp))==0)
  163. {
  164. free(new_element);
  165. temp->next=NULL;
  166. break;
  167. }
  168. count++;
  169. temp->next=new_element;
  170. new_element->next=NULL;
  171. temp=new_element;
  172. }
  173. return begin;
  174. }
  175. }
  176. else
  177. return NULL;
  178. }
  179.  
  180. void del_list(struct list* next)
  181. {
  182. struct list* temp;
  183. while(next)
  184. {
  185. temp=next;
  186. next=next->next;
  187. free(temp);
  188. }
  189. }
  190.  
  191.  
  192.  
  193. /////////////////
  194.  
  195.  
  196. /* Тело основной программы */
  197. int main(int argc, char *argv[])
  198. {
  199. setlocale(LC_ALL,"rus");
  200. char name_f;
  201. char name_p;
  202. int date;
  203. char genre;
  204. int key=-1;
  205.  
  206. ///////////////
  207.  
  208. DataType x;
  209. char *name;
  210. FILE * file; //указатель на файл
  211. struct list *begin=NULL;
  212. struct list *temp, temp2; //указатель на структуру
  213. file=fopen("txt.txt", "a+");
  214. if (argc>1)
  215. { //если у нас более одного арг. в argc
  216. name=argv[1]; //name указывает на введенное в кач-ве аргумента функции имя файла
  217. }
  218. else
  219. {
  220. name=(char *)malloc((N+1)*sizeof(char));
  221. printf("Введите имя файла или путь до него:\n");
  222. scanf("%s",name);
  223. }
  224. file=fopen(name,"rb+");
  225. // {
  226. // printf("Файла с таким именем не существует, пожалуйста, введите имя заново\n");
  227. // if((file=fopen(name,"wb+"))==NULL)
  228. // {
  229. // printf("Ошибка - файл не может быть создан\n");
  230. // return 1;
  231. // }
  232. // }
  233. begin=read_sp(file, begin);
  234. if(begin==NULL)
  235. printf("Список пуст\n");
  236. getch();
  237. fclose(file);
  238. ////////////
  239. system("cls");
  240. while(key)
  241. {
  242. printf("1. Запись нового представления\n");
  243. printf("2. Удаление двух записей\n");
  244. printf("3. Показать в прямом порядке\n");
  245. printf("4. Показать в обратном порядке\n");
  246. printf("0. Завершить работу\n");
  247. scanf("%d", &key);
  248. switch(key)
  249. {
  250. case 1:
  251. {
  252. system("cls");
  253. add_name();
  254. system("cls");
  255. break;
  256. }
  257. case 2:
  258. { system("cls");
  259. int n = count_L();
  260. if(n == 0)
  261. {
  262. printf("Невозможноу удалить элементы в стеке 0 элементов\n");
  263. getch();
  264. system("cls");
  265. }
  266. else if (n == 1)
  267. {
  268. printf("Невозможноу удалить элементы в стеке 1 элемент\n");
  269. getch();
  270. system("cls");
  271. }
  272. else if (n >= 2)
  273. {
  274. delete_unit();
  275. delete_unit();
  276. }
  277. break;
  278. }
  279. case 3:
  280. {
  281. system("cls");
  282. //int n = count_L();
  283. //if(n >= 1){
  284. printf(" Список представлений в прямом порядке\n");
  285. show_list();
  286. //else
  287. //printf("Никаких мероприятий не запланированно");
  288. getch();
  289. system("cls");
  290. break;
  291. }
  292. case 4:
  293. {
  294. system("cls");
  295. printf(" Список представлений в обратном порядке\n");
  296. show_list_1();
  297. getch();
  298. system("cls");
  299. break;
  300. }
  301. case 0:
  302. {
  303. system("cls");
  304. del_list(begin);
  305. printf("Пока");
  306. getch();
  307. return;
  308. }
  309. default:
  310. {
  311. system("cls");
  312. printf("Ошибка");
  313. getch();
  314. system("cls");
  315. break;
  316. }
  317. }
  318. }
  319. file=fopen(name,"rb+");
  320. temp=begin;
  321. while (temp)
  322. {
  323. fwrite(&(temp->data), sizeof(struct city), 1, file);
  324. temp=temp->next;
  325. }
  326. fclose(file);
  327. while(begin)
  328. {
  329. temp=begin;
  330. begin=begin->next;
  331. free(temp);
  332. }
  333. return 0;
  334. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement