Как создать базу данных студентов, используя структуру и файл? - PullRequest
0 голосов
/ 28 октября 2019

Это мой первый пост, я изучаю программирование на Си.

Мне нужно создать программу для сохранения некоторой информации о студентах, такой как имя, идентификатор, cpf и номер телефона. Данные должны быть сохранены в текстовый файл и используя структуру. Пользователь может добавлять, удалять или искать студентов в файле. Функция для чтения пользовательских данных и сохранения в базе данных (в файле, который имитирует базу данных). Как я могу добавить более одного студента, не удаляя первого?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

#define MAX 256

struct customer {
   char  fname[20],lname[20];
   int id, cpf, phone_number;
};

struct customer input;

void add_student() {

 FILE *outfile;
   struct customer input;

   // open Accounts file for writing
   outfile = fopen ("database.txt", "w");
   if (outfile == NULL) {
      fprintf(stderr, "\nError opening accounts.txt\n\n");
      exit (1);
     }

   // endlessly read from keyboard and write to file
      // prompt user
      printf("\nFirst Name: ");
      scanf ("%s", input.fname);
      printf("Last Name : ");
      scanf ("%s", input.lname);
      printf("ID: ");
      scanf ("%d", &input.id);
      printf("CPF: ");
      scanf ("%f", &input.cpf);
      printf("Phone number: ");
      scanf ("%f", &input.phone_number);

      // write entire structure to Accounts file
      fwrite (&input, sizeof(struct customer), 1, outfile);
}

void read_student() {
  printf("\n");
 /*** open the accounts file ***/
   FILE *infile;
   infile = fopen ("database.txt","r");
   if (infile == NULL) {
      fprintf(stderr, "\nError opening accounts.txt\n\n");
      exit (1);
   }

   while (fread (&input, sizeof(struct customer), 1, infile)){
      printf ("Name = %s %s   ID = %d   CPF = %d   Phone number = %d\n",
          input.fname, input.lname, input.id, input.cpf, input.phone_number);
    }
}

void remove_student(){
  int lno, ctr = 0;
  char ch;
  FILE *fptr1, *fptr2;
  char fname[MAX] = "database.txt";;
    char str[MAX], temp[] = "temp.txt";
    fptr1 = fopen(fname, "r");
    if (!fptr1) {
            printf(" File not found or unable to open the input file!!\n");
            exit (1);
    }
    fptr2 = fopen(temp, "w"); // open the temporary file in write mode
    if (!fptr2) {
            printf("Unable to open a temporary file to write!!\n");
            fclose(fptr1);
            exit (1);
    }
    printf(" Input the line you want to remove : ");
    scanf("%d", &lno);
    lno++;
    // copy all contents to the temporary file except the specific line
    while (!feof(fptr1)) {
        strcpy(str, "\0");
        fgets(str, MAX, fptr1);
        if (!feof(fptr1)) {
            ctr++;
            /* skip the line at given line number */
            if (ctr != lno) {
                fprintf(fptr2, "%s", str);
            }
        }
    }
    fclose(fptr1);
    fclose(fptr2);
    remove(fname);            // remove the original file
    rename(temp, fname);    // rename the temporary file to original name
  /*------ Read the file ----------------*/
  fptr1 = fopen(fname,"r");
        ch = fgetc(fptr1);
      printf(" Now the content of the file %s is : \n", fname);
      while(ch!=EOF) {
            printf("%c",ch);
             ch=fgetc(fptr1);
      }
    fclose(fptr1);
  /*------- End of reading ---------------*/

}

int main() {

int choice;
char continuar;

do {
  printf("\n\t\t Choose from the following options\n\n");
  printf("\t\t\t 0.Exit \n");
  printf("\t\t\t 1.Register student \n");
  printf("\t\t\t 2.Search student \n");
  printf("\t\t\t 3.Remove student \n");
  printf("\n\n\t\t\t Your Choice: ");

  printf("\n\nSelect option: ");
  scanf("%i", &choice);

  switch(choice) {
    case 0:
       break;

    case 1:
       add_student();
       break;

    case 2:
       read_student();
       break;
    case 3:
       remove_student();
       break;

    default:
       printf("\nInvalid option.");
  }

  if(choice != 0){
    printf("\n\nOther question? (y/n) ");
    scanf("%c", &continuar);
  }
  //system("cls");

} while (choice != 0 && continuar != 'n') ;

return 0;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...