Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include <stdlib.h>
- #define LENGTH 1024
- typedef struct Rec1
- {
- long nomer;
- char name[50];
- int year;
- long count;
- };
- typedef struct ELT{
- Rec1 data;
- struct ELT *next;
- }ELT;
- void AddElement(ELT **last,Rec1 x){
- ELT *q;
- q=(ELT*)malloc(sizeof(ELT));
- q->data=x;
- q->next=NULL;
- (*last)->next=q;
- *last=q;
- }
- int CreateHead(ELT **head,ELT **last,char *fileName){
- *head=(ELT*)malloc(sizeof(ELT));
- (*head)->next=NULL;
- *last=*head;
- FILE *f;
- Rec1 buf;
- if((f=fopen(fileName,"r"))==NULL)
- return 1;
- while(fread(&buf,sizeof(Rec1),1,f)==1)
- AddElement(last,buf);
- fclose(f);
- return 0;
- }
- void Print(ELT *head)
- {
- ELT *q;
- q=head->next;
- while(q!=NULL){
- printf("\nNomer: %d\n",q->data.nomer);
- printf("Name: %s\n",q->data.name);
- printf("Year: %d\n",q->data.year);
- printf("Count: %ld\n",q->data.count);
- q=q->next;
- }
- printf("\n");
- }
- void Distruct(ELT *head,ELT **last){
- ELT *q,*t;
- q=head->next;
- while(q!=NULL){
- t=q;
- q=q->next;
- free(t);
- }
- head->next==NULL;
- *last=head;
- }
- long Size(char *fname)
- {
- FILE *f;
- long n;
- if((f=fopen(fname,"rb"))==NULL)
- return -1;
- fseek(f,0,SEEK_END);
- n=ftell(f);
- fclose(f);
- return n;
- }
- int CreateFileIn(char *fname, bool flag)
- {
- FILE *f;
- struct Rec1 rec;
- int i=1;
- if(flag){
- if((f=fopen(fname, "wt"))==NULL)
- return 1;
- }
- else if((f=fopen(fname, "at"))==NULL)
- return 1;
- printf("Nomer:");
- scanf("%d",&rec.nomer);
- while(rec.nomer!=000)
- {
- rec.nomer=i;
- printf("Name:");
- scanf("%s",rec.name);
- printf("Year:");
- scanf("%d",&rec.year);
- printf("count:");
- scanf("%ld",&rec.count);
- fwrite(&rec,sizeof(rec),1,f);
- printf("Nomer:");
- scanf("%d",&rec.nomer);
- i++;
- }
- fclose(f);
- return 0;
- }
- int CreateFileOut(char *fname, ELT *head)
- {
- FILE *f;
- struct Rec1 rec;
- int i=1;
- if((f=fopen(fname, "wt"))==NULL)
- return 1;
- ELT *q;
- q=head->next;
- while(q!=NULL)
- {
- rec=q->data;
- fwrite(&rec,sizeof(rec),1,f);
- q=q->next;
- }
- fclose(f);
- return 0;
- }
- int AddFileIn(FILE *f,const struct Rec1 *rec)
- {
- fseek(f,0,SEEK_END);
- fwrite(rec,sizeof(*rec),1,f);
- if(ferror(f))
- return 1;
- else
- return 0;
- }
- int ReadFileIn(char *fname)
- {
- FILE *f;
- if((f=fopen(fname, "rt"))==NULL)
- return 1;
- struct Rec1 rec;
- while(fread(&rec,sizeof(rec),1,f))
- {
- printf("\nNomer: %d\n",rec.nomer);
- printf("Name: %s\n",rec.name);
- printf("Year: %d\n",rec.year);
- printf("Count: %ld\n",rec.count);
- }
- fclose(f);
- return 0;
- }
- int ReadFileOut(char *fname2)
- {
- FILE*f2;
- Rec1 rec1;
- if((f2=fopen(fname2,"rb"))==NULL)
- return -1;
- while (fread(&rec1,sizeof(rec1),1,f2))
- printf("Nazvanie:%10s Year: %10d Count: %ld\n",rec1.name,rec1.year,rec1.count);
- fclose(f2);
- return 0;
- }
- void CountSortNom(char *fname)
- {
- FILE *f;
- Rec1 *a,buf;
- int flag;
- long n,i,r;
- if((f=fopen(fname,"r+b"))==NULL)
- return;
- n=Size(fname)/sizeof(Rec1);
- a=(Rec1*)malloc(n*sizeof(Rec1));
- if(a==NULL||fread(a,sizeof(Rec1),n,f)!=n){
- fclose(f);
- return;
- }
- r=n;
- do{
- flag=0;
- for(i=1;i<r;i++)
- if(a[i-1].nomer>a[i].nomer){
- buf=a[i];a[i]=a[i-1];a[i-1]=buf;
- flag=1;
- }
- r--;
- }while(flag);
- rewind(f);
- fwrite(a,sizeof(Rec1),n,f);
- fclose(f);
- free(a);
- }
- void CountSortCount(char *fname)
- {
- FILE *f;
- Rec1 *a,buf;
- int flag;
- long n,i,r;
- if((f=fopen(fname,"r+b"))==NULL)
- return;
- n=Size(fname)/sizeof(Rec1);
- a=(Rec1*)malloc(n*sizeof(Rec1));
- if(a==NULL||fread(a,sizeof(Rec1),n,f)!=n){
- fclose(f);
- return;
- }
- r=n;
- do{
- flag=0;
- for(i=1;i<r;i++)
- if(a[i-1].count<a[i].count)
- {
- buf=a[i];a[i]=a[i-1];a[i-1]=buf;
- flag=1;
- }
- r--;
- }while(flag);
- rewind(f);
- fwrite(a,sizeof(Rec1),n,f);
- fclose(f);
- free(a);
- }
- int CreateHeadNew(ELT **head1,ELT **last1,ELT *head){
- *head1=(ELT*)malloc(sizeof(ELT));
- (*head1)->next=NULL;
- *last1=*head1;
- ELT *q;
- q=head->next;
- while(q!=NULL){
- AddElement(last1,q->data);
- q=q->next;
- }
- return 0;
- }
- int main()
- {
- ELT *head,*last,*head1,*last1;
- int a;
- char *fname = "C:\\struct1.date";
- char *fname2 = "C:\\struct2.date";
- printf("Vibirite deystvie\n");
- printf("1.Sozdat'ishodniy FILE\n");
- printf("2.Vivesty ishodniy FILE na monitor.\n");
- printf("3.Dobavit' v konec FILE elementy.\n");
- printf("4.Sozdat' spisok iz FILE.\n");
- printf("5.Redaktirovat' spisok po kriteriu.\n");
- printf("6.Sozdat' noviy spisok po kriteriu.\n");
- printf("7.Sozdat' konechniy FILE.\n");
- printf("8.Vivesty konechniy FILE.\n");
- scanf("%d",&a);
- while(a)
- {
- if(a==1)
- CreateFileIn(fname,true);
- if(a==2)
- ReadFileIn(fname);
- if(a==3)
- CreateFileIn(fname,false);
- if(a==4)
- CreateHead(&head,&last,"C:\\struct1.date");
- if(a==6)
- CreateHeadNew(&head1,&last1,head);
- if(a==7)
- CreateFileOut(fname2,head1);
- if(a==8)
- ReadFileIn(fname2);
- if(a==10)
- Print(head1);
- printf("Vibirite sleduyushee deystvie\n");
- scanf("%d",&a);
- }
- printf("Redaktirovanie zaversheno\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement