Это мой первый пост, я изучаю программирование на Си.
Мне нужно создать программу для сохранения некоторой информации о студентах, такой как имя, идентификатор, 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;
}