//Name: Christine //Purpose: The purpose of the program is to save all records. If the inputted // data finds a duplicate ID's, it will automatically save to // myfile2.dat. #include #include #include struct record { int studnumb; char studname[30]; }; typedef record stud_rec; // CLEAR FILE void clrfile() { FILE *fptr; // clrscr(); fptr = fopen("myfile.dat", "w"); if (fptr != NULL) { fclose(fptr); printf("File has been cleared. \n"); } else printf("Error in creating the file. \n"); getch(); } // FILE ENTRY void add_rec() { stud_rec stud, temp; char ans; FILE *fptr; FILE *fptr_trash; int max_rec, rec_num = 0; int duplicate = 0; // clrscr(); printf("Record Entry \n"); do { printf("Stud ID# : "); scanf("%d", &stud.studnumb); } while (stud.studnumb < 1000 || stud.studnumb > 9999); fflush(stdin); do { printf("Stud Name: "); gets(stud.studname); } while (strlen(stud.studname) == 0 || strlen(stud.studname) > 29); // fptr = fopen("myfile.dat", "a+"); if (fptr != NULL) { fseek(fptr, (long) 0, SEEK_END); max_rec = ftell(fptr) / sizeof(record); if (max_rec > 0) rewind(fptr); while (rec_num < max_rec) { fread(&temp, sizeof(record), 1, fptr); if (stud.studnumb == temp.studnumb) { duplicate = 1; break; } rec_num++; } if (!duplicate) { rewind(fptr); fwrite(&stud, sizeof(record), 1, fptr); printf("Record has been added to file. \n"); fclose(fptr); }else { fptr_trash = fopen("myfile2.dat", "a+"); fwrite(&stud, sizeof(record), 1, fptr_trash); printf("Invalid ID. Sent to myfile2.dat\n"); fclose(fptr_trash); } } else printf("Error in opening the file. \n"); getch(); } // DISPLAY ALL RECORDS void readrec() { stud_rec stud; char ans; long a = 0; FILE *fptr; int rec_num = 0, max_rec; // fptr = fopen("myfile.dat", "r"); if (fptr != NULL) { fseek(fptr, a, SEEK_END); max_rec = ftell(fptr) / sizeof(record); if (max_rec > 0) { rewind(fptr); while (rec_num < max_rec) { fread(&stud, sizeof(record), 1, fptr); printf("Stud ID# : %d \n", stud.studnumb); printf("Stud Name: %s \n", stud.studname); printf("\n"); rec_num++; } printf("End of file. \n"); fclose(fptr); } else printf("File is empty. \n"); } else printf("Error in opening file. \n"); getch(); } // DISPLAY nTH RECORD void readnth(int n) { stud_rec stud; FILE *fptr; int max_rec; // fptr = fopen("myfile.dat", "r"); if (fptr != NULL) { rewind(fptr); fseek(fptr, (long) 0, SEEK_END); max_rec = ftell(fptr) / sizeof(record); if (max_rec >= n) { rewind(fptr); fseek(fptr, (long) (n-1)*sizeof(record), SEEK_SET); fread(&stud, sizeof(record), 1, fptr); printf("Stud ID# : %d \n", stud.studnumb); printf("Stud Name: %s \n", stud.studname); printf("\n"); fclose(fptr); } else printf("Record # %d not existing. \n", n); } else printf("Error in opening file. \n"); getch(); } void main() { textmode(2); char ans; int n; do { clrscr(); printf("1. Record Entry \n"); printf("2. Display All Records \n"); printf("3. Display nth Record \n"); printf("9. Clear File \n"); printf("---------------------------------\n"); printf("0. Exit (or ESC) \n"); // ans = getch(); switch(ans) { case '1' : clrscr(); add_rec(); break; case '2' : clrscr(); readrec(); break; case '3' : clrscr(); do { printf("Enter Record#: "); scanf("%d", &n); } while (n < 1); readnth(n); break; case '9' : clrscr(); clrfile(); break; } } while (ans != 27 && ans != '0'); }