Advertisement
Guest User

asfasf

a guest
Jun 2nd, 2015
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.25 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include <stdlib.h>
  4. #define LENGTH 1024
  5. typedef struct Rec1
  6. {
  7. long nomer;
  8. char name[50];
  9. int year;
  10. long count;
  11. };
  12. typedef struct ELT{
  13. Rec1 data;
  14. struct ELT *next;
  15. }ELT;
  16. void AddElement(ELT **last,Rec1 x){
  17. ELT *q;
  18. q=(ELT*)malloc(sizeof(ELT));
  19. q->data=x;
  20. q->next=NULL;
  21. (*last)->next=q;
  22. *last=q;
  23. }
  24. int CreateHead(ELT **head,ELT **last,char *fileName){
  25. *head=(ELT*)malloc(sizeof(ELT));
  26. (*head)->next=NULL;
  27. *last=*head;
  28. FILE *f;
  29. Rec1 buf;
  30. if((f=fopen(fileName,"r"))==NULL)
  31. return 1;
  32. while(fread(&buf,sizeof(Rec1),1,f)==1)
  33. AddElement(last,buf);
  34. fclose(f);
  35. return 0;
  36. }
  37. void Print(ELT *head)
  38. {
  39. ELT *q;
  40. q=head->next;
  41. while(q!=NULL){
  42. printf("\nNomer: %d\n",q->data.nomer);
  43. printf("Name: %s\n",q->data.name);
  44. printf("Year: %d\n",q->data.year);
  45. printf("Count: %ld\n",q->data.count);
  46. q=q->next;
  47. }
  48. printf("\n");
  49. }
  50. void Distruct(ELT *head,ELT **last){
  51. ELT *q,*t;
  52. q=head->next;
  53. while(q!=NULL){
  54. t=q;
  55. q=q->next;
  56. free(t);
  57. }
  58. head->next==NULL;
  59. *last=head;
  60. }
  61.  
  62.  
  63. long Size(char *fname)
  64. {
  65. FILE *f;
  66. long n;
  67. if((f=fopen(fname,"rb"))==NULL)
  68. return -1;
  69. fseek(f,0,SEEK_END);
  70. n=ftell(f);
  71. fclose(f);
  72. return n;
  73. }
  74. int CreateFileIn(char *fname, bool flag)
  75. {
  76. FILE *f;
  77. struct Rec1 rec;
  78. int i=1;
  79. if(flag){
  80. if((f=fopen(fname, "wt"))==NULL)
  81. return 1;
  82. }
  83. else if((f=fopen(fname, "at"))==NULL)
  84. return 1;
  85. printf("Nomer:");
  86. scanf("%d",&rec.nomer);
  87. while(rec.nomer!=000)
  88. {
  89. rec.nomer=i;
  90. printf("Name:");
  91. scanf("%s",rec.name);
  92. printf("Year:");
  93. scanf("%d",&rec.year);
  94. printf("count:");
  95. scanf("%ld",&rec.count);
  96. fwrite(&rec,sizeof(rec),1,f);
  97. printf("Nomer:");
  98. scanf("%d",&rec.nomer);
  99. i++;
  100. }
  101. fclose(f);
  102. return 0;
  103. }
  104. int CreateFileOut(char *fname, ELT *head)
  105. {
  106. FILE *f;
  107. struct Rec1 rec;
  108. int i=1;
  109. if((f=fopen(fname, "wt"))==NULL)
  110. return 1;
  111. ELT *q;
  112. q=head->next;
  113. while(q!=NULL)
  114. {
  115. rec=q->data;
  116. fwrite(&rec,sizeof(rec),1,f);
  117. q=q->next;
  118. }
  119. fclose(f);
  120. return 0;
  121. }
  122. int AddFileIn(FILE *f,const struct Rec1 *rec)
  123. {
  124. fseek(f,0,SEEK_END);
  125. fwrite(rec,sizeof(*rec),1,f);
  126. if(ferror(f))
  127. return 1;
  128. else
  129. return 0;
  130. }
  131.  
  132. int ReadFileIn(char *fname)
  133. {
  134. FILE *f;
  135. if((f=fopen(fname, "rt"))==NULL)
  136. return 1;
  137. struct Rec1 rec;
  138. while(fread(&rec,sizeof(rec),1,f))
  139. {
  140.  
  141. printf("\nNomer: %d\n",rec.nomer);
  142. printf("Name: %s\n",rec.name);
  143. printf("Year: %d\n",rec.year);
  144. printf("Count: %ld\n",rec.count);
  145.  
  146. }
  147. fclose(f);
  148. return 0;
  149. }
  150. int ReadFileOut(char *fname2)
  151. {
  152. FILE*f2;
  153. Rec1 rec1;
  154. if((f2=fopen(fname2,"rb"))==NULL)
  155. return -1;
  156. while (fread(&rec1,sizeof(rec1),1,f2))
  157. printf("Nazvanie:%10s Year: %10d Count: %ld\n",rec1.name,rec1.year,rec1.count);
  158. fclose(f2);
  159. return 0;
  160. }
  161. void CountSortNom(char *fname)
  162. {
  163. FILE *f;
  164. Rec1 *a,buf;
  165. int flag;
  166. long n,i,r;
  167. if((f=fopen(fname,"r+b"))==NULL)
  168. return;
  169. n=Size(fname)/sizeof(Rec1);
  170. a=(Rec1*)malloc(n*sizeof(Rec1));
  171. if(a==NULL||fread(a,sizeof(Rec1),n,f)!=n){
  172. fclose(f);
  173. return;
  174. }
  175. r=n;
  176. do{
  177. flag=0;
  178. for(i=1;i<r;i++)
  179. if(a[i-1].nomer>a[i].nomer){
  180. buf=a[i];a[i]=a[i-1];a[i-1]=buf;
  181. flag=1;
  182. }
  183. r--;
  184. }while(flag);
  185. rewind(f);
  186. fwrite(a,sizeof(Rec1),n,f);
  187. fclose(f);
  188. free(a);
  189. }
  190. void CountSortCount(char *fname)
  191. {
  192. FILE *f;
  193. Rec1 *a,buf;
  194. int flag;
  195. long n,i,r;
  196. if((f=fopen(fname,"r+b"))==NULL)
  197. return;
  198. n=Size(fname)/sizeof(Rec1);
  199. a=(Rec1*)malloc(n*sizeof(Rec1));
  200. if(a==NULL||fread(a,sizeof(Rec1),n,f)!=n){
  201. fclose(f);
  202. return;
  203. }
  204. r=n;
  205. do{
  206. flag=0;
  207. for(i=1;i<r;i++)
  208. if(a[i-1].count<a[i].count)
  209. {
  210. buf=a[i];a[i]=a[i-1];a[i-1]=buf;
  211. flag=1;
  212. }
  213. r--;
  214. }while(flag);
  215. rewind(f);
  216. fwrite(a,sizeof(Rec1),n,f);
  217. fclose(f);
  218. free(a);
  219. }
  220. int CreateHeadNew(ELT **head1,ELT **last1,ELT *head){
  221. *head1=(ELT*)malloc(sizeof(ELT));
  222. (*head1)->next=NULL;
  223. *last1=*head1;
  224. ELT *q;
  225. q=head->next;
  226. while(q!=NULL){
  227. AddElement(last1,q->data);
  228. q=q->next;
  229. }
  230. return 0;
  231. }
  232. int main()
  233. {
  234. ELT *head,*last,*head1,*last1;
  235. int a;
  236. char *fname = "C:\\struct1.date";
  237. char *fname2 = "C:\\struct2.date";
  238.  
  239. printf("Vibirite deystvie\n");
  240. printf("1.Sozdat'ishodniy FILE\n");
  241. printf("2.Vivesty ishodniy FILE na monitor.\n");
  242. printf("3.Dobavit' v konec FILE elementy.\n");
  243. printf("4.Sozdat' spisok iz FILE.\n");
  244. printf("5.Redaktirovat' spisok po kriteriu.\n");
  245. printf("6.Sozdat' noviy spisok po kriteriu.\n");
  246. printf("7.Sozdat' konechniy FILE.\n");
  247. printf("8.Vivesty konechniy FILE.\n");
  248. scanf("%d",&a);
  249. while(a)
  250. {
  251. if(a==1)
  252. CreateFileIn(fname,true);
  253. if(a==2)
  254. ReadFileIn(fname);
  255. if(a==3)
  256. CreateFileIn(fname,false);
  257. if(a==4)
  258. CreateHead(&head,&last,"C:\\struct1.date");
  259. if(a==6)
  260. CreateHeadNew(&head1,&last1,head);
  261. if(a==7)
  262. CreateFileOut(fname2,head1);
  263. if(a==8)
  264. ReadFileIn(fname2);
  265. if(a==10)
  266. Print(head1);
  267. printf("Vibirite sleduyushee deystvie\n");
  268. scanf("%d",&a);
  269. }
  270. printf("Redaktirovanie zaversheno\n");
  271. return 0;
  272. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement