void record_update(FILE * fp) { emp_rec upd_emp; int emp_no,c=0; long pos; printf("Enter the employee no for update:"); scanf("%d",&emp_no); pos=record_search(fp,emp_no); if(pos !=-1) { fseek(fp,pos,SEEK_SET); fread(&upd_emp,sizeof(emp_rec),1,fp); printf("\t\t\tDetails of Employee No: %d\n",upd_emp.emp_no); printf("\tEmployee Name:%s\n",upd_emp.emp_name); printf("\tEmployee Salary:%lf",upd_emp.emp_sal); printf("\tEmployee Address:%s\n",upd_emp.emp_add); printf("\tEmployee Mobile:%s\n",upd_emp.emp_mobile); printf("Do you want to update Name?\n1. For Yes \n2. For No\n:"); scanf("%d",&c); getchar(); if(c==1) scanf("%[^\n]s",upd_emp.emp_name); printf("Do you want to update Salary?\n1. For Yes \n2. For No\n:"); scanf("%d",&c); getchar(); if(c==1) scanf("%lf",&upd_emp.emp_sal); printf("Do you want to update Address?\n1. For Yes \n2. For No\n:"); scanf("%d",&c); getchar(); if(c==1) scanf("%[^\n]s",upd_emp.emp_add); printf("Do you want to update Mobile?\n1. For Yes \n2. For No\n:"); scanf("%d",&c); getchar(); if(c==1) scanf("%[^\n]s",upd_emp.emp_mobile); fseek(fp,-sizeof(emp_rec),SEEK_CUR); fwrite(&upd_emp,sizeof(emp_rec),1,fp); } }
void record_delete(FILE * fp, FILE * delemp) { emp_rec del_emp; int emp_no; long pos; printf("Enter the employee number for deletion:"); scanf("%d",&emp_no); pos=record_search(fp,emp_no); if(pos!=-1) { fseek(fp,pos,SEEK_SET); del_emp.emp_no=-1; fwrite(&del_emp,sizeof(emp_rec),1,fp); fseek(delemp,0,SEEK_END); fwrite(&emp_no,sizeof(int),1,delemp); fwrite(&pos,sizeof(long),1,delemp); } }
int bbsfdel_main(void) { if (!loginok) return BBS_ELGNREQ; char *user = getparm("u"); if (*user != '\0') { char file[HOMELEN]; sethomefile(file, currentuser.userid, "friends"); record_t r; if (record_open(file, O_RDWR, &r) < 0) return BBS_EINTNL; override_t key; strlcpy(key.id, user, sizeof(key.id)); override_t *ptr = record_search(&r, &key, sizeof(key), lsearch, cmp_override); if (ptr != NULL) record_delete(&r, ptr, sizeof(*ptr)); record_close(&r); } printf("Location: fall\n\n"); return 0; }
//为每一个trie结点生成候选字列表 void gen_trie_each_node(struct SOTrie *so, const char *stroke_stack, int sp) { int i; //for (i = 0; i < sp; ++i) putchar(stroke_stack[i]); //putchar(' '); int start = 0, end = 0; record_search(stroke_stack, sp, &start, &end); //printf("start=%d,end=%d\n", start, end); srp_count = 0; for (; start <= end; ++start) { srp_array[srp_count] = &global_srecord[start]; srp_count ++; } qsort(srp_array, srp_count, sizeof(struct SRecord *), _comp); for (i = 0; i < (srp_count > MAX_DATA ? MAX_DATA : srp_count); ++i) { //putgbkchr(srp_array[i] -> chareter); if (so -> sdata == NULL) so -> sdata = sdata_new(); sdata_insert(so -> sdata, srp_array[i] -> chareter, so -> sdata -> count); } //putchar('\n'); }
void menu() { emp_rec ser_emp; int c=0,emp_no; long pos; FILE * fp,* eno,* delemp; if((fp=fopen("emp.dat","rb+"))==NULL) { printf("Error 1: Problem with main file opening.\n"); exit(ferror(fp)); } if((eno=fopen("empno.dat","rb+"))==NULL) { printf("Error 2: Problem with employee no file.\n"); exit(ferror(fp)); } if((delemp=fopen("delemp.dat","rb+"))==NULL) { printf("Error 3: Problem with deleted employee file.\n"); delemp=fopen("delemp.dat","wb+"); } while(c!=6) { printf("\t\t\t\t Menu for Employee Record Base\n"); printf("\t\t\t1.Employee Record Insertion\n"); printf("\t\t\t2.Employee Record Search\n"); printf("\t\t\t3.Employee Record Update\n"); printf("\t\t\t4.Employee Record Delete\n"); printf("\t\t\t5.Display All Employees\n"); printf("\t\t\t6.Exit the program.\n"); printf("\t\t\t\t Enter your choice:"); scanf("%d",&c); switch(c) { case 1: record_insert(fp,eno); break; case 2: printf("Enter the employee no to search:"); scanf("%d",&emp_no); if((pos=record_search(fp,emp_no))==-1) printf("Employee does not exist.\n"); else { printf("Employee exists.\n"); fseek(fp,pos,SEEK_SET); fread(&ser_emp,sizeof(emp_rec),1,fp); printf("\t\t\tDetails of Employee No: %d\n",ser_emp.emp_no); printf("\tEmployee Name:%s\n",ser_emp.emp_name); printf("\tEmployee Salary:%lf",ser_emp.emp_sal); printf("\tEmployee Address:%s\n",ser_emp.emp_add); printf("\tEmployee Mobile:%s\n",ser_emp.emp_mobile); } break; case 3: record_update(fp); break; case 4: record_delete(fp,delemp); break; case 5: fseek(fp,0,SEEK_END); pos=ftell(fp); fseek(fp,0,SEEK_SET); while((pos!=ftell(fp))&&(!feof(fp))) { fread(&ser_emp,sizeof(emp_rec),1,fp); if(ser_emp.emp_no!=-1) { printf("\t\t\tDetails of Employee No: %d\n",ser_emp.emp_no); printf("\tEmployee Name:%s\n",ser_emp.emp_name); printf("\tEmployee Salary:%lf",ser_emp.emp_sal); printf("\tEmployee Address:%s\n",ser_emp.emp_add); printf("\tEmployee Mobile:%s\n",ser_emp.emp_mobile); printf("\n\n"); } } break; case 6: printf("Exiting...and closing the files\n"); fclose(fp); fclose(eno); fclose(delemp); break; } } }