2015-03-11 1 views
-3

Я создаю небольшую СУБД, которая записывает имена студентов, маты #, отдел и майор.студентов Система управления базами данных

Я использую текстовый файл в качестве моей базы данных; моя программа должна добавлять новых студентов, искать студентов, удалять студентов, обновлять информацию об учениках и т. д. На данный момент я добавляю информацию о студентах в базу данных и ее работу отлично, но я хочу постоянно добавлять учеников, не запуская программу снова, пока Я нажимаю клавишу.

Итак, я использовал цикл (оба цикла while и while), и он работает нормально, но я не могу добавить их в базу данных. Я не знаю, что происходит.

Если я не использую цикл, он добавит его в базу данных, но если я использую цикл, он не добавит его.

/* 
* Files.c 
* 
* Created on: Mar 2, 2015 
*  Author: ousainou 
*/ 

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

    void appending(); 
    void readFile(); 


    main() 
    { 

     //printf("do you want to add a student[y/n]"); 
     printf("*********************************\n"); 
     printf("*Students Management System(SMS)*\n"); 
     printf("*********************************\n"); 
     printf("press '1' to add a new student\n"); 
     printf("press '2' to view all students records\n"); 
     //frintf("press '3' to view a a student's information"); 
     //printf("press '4' to edit a student's infomation); 
     //printf("press '5' to delete a student); 
     int input; 
     scanf("%d",&input); 
     int x= 0; 
     do{ 
     //do{ 
     if(input == 1) 
     { 
     appending(); 
     } 
     else if(input == 2) 
     { 
      readFile(); 
     } 
     printf("press -1 to exit"); 
     scanf("%d",&input); 
     if(input == -1) 
      break; 

     }while(x == 0); 
} 
      int input; 

      char firstname[20]; 

      char lastname[20]; 

      char mat_number[10]; 

      char department[10]; 

      char major[20]; 
      char read; 
      int num = 1; 
      int count = 0; 

    void appending() 
    { 
     FILE*file = fopen("new file.txt","a"); 

     printf("enter first name\n"); 
     scanf("%s", firstname); 

     printf("enter second name\n"); 
     scanf("%s", lastname); 

     printf("enter mat number\n"); 
     scanf("%s", mat_number); 

     printf("enter department\n"); 
     scanf("%s", department); 

     printf("enter major\n"); 
     scanf("%s", major); 

     fprintf(file,"\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n",firstname,lastname,mat_number,department,major); 
     if(file) 
       { 
        printf("%s %s%s",firstname,lastname,"'s information has been stored\n"); 
       } 
       else 
       { 
        printf("database not found "); 
       } 

    } 

    void readFile() 
    { 

      FILE*rfile = fopen("new file.txt","r"); 


     if(!rfile) 
       { 
        printf("file not found"); 
        exit(-1); 
       } 
       else 
       { 
        do{ 
         read = fgetc(rfile); 

         printf("%c",read); 

         }while(read != EOF); 

       } 


    } 

ответ

0

вам необходимо закрыть файл, как только он откроется, вы можете написать непрерывно, но она не читает новые значения вашей функции чтения (потому что он открыт как новый). после чтения также вам может не понадобиться держать файл открытым. использование fclose()

/* 
* Files.c 
* 
* Created on: Mar 2, 2015 
*  Author: ousainou 
*/ 

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

    void appending(); 
    void readFile(); 


int main() 
    { 

     //printf("do you want to add a student[y/n]"); 
     printf("*********************************\n"); 
     printf("*Students Management System(SMS)*\n"); 
     printf("*********************************\n"); 

     do{ 
      printf("press '1' to add a new student\n"); 
      printf("press '2' to view all students records\n"); 
      printf("press -1 to exit"); 
     //frintf("press '3' to view a a student's information"); 
     //printf("press '4' to edit a student's infomation); 
     //printf("press '5' to delete a student); 
     int input; 
     scanf("%d",&input); 
     //do{ 
     if(input == 1) 
     { 
     appending(); 
     } 
     else if(input == 2) 
     { 
      readFile(); 
     } 
     else if(input == -1) 
     { 
      break; 
     } 

     }while(true); 
} 

      int input; 

      char firstname[20]; 

      char lastname[20]; 

      char mat_number[10]; 

      char department[10]; 

      char major[20]; 
      char read; 
      int num = 1; 
      int count = 0; 

    void appending() 
    { 
     FILE* file = fopen("new file.txt","a"); 

     printf("enter first name\n"); 
     scanf("%s", firstname); 

     printf("enter second name\n"); 
     scanf("%s", lastname); 

     printf("enter mat number\n"); 
     scanf("%s", mat_number); 

     printf("enter department\n"); 
     scanf("%s", department); 

     printf("enter major\n"); 
     scanf("%s", major); 

     fprintf(file,"\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n",firstname,lastname,mat_number,department,major); 
     if(file) 
       { 
        printf("%s %s%s",firstname,lastname,"'s information has been stored\n"); 
        fclose(file); 
       } 
       else 
       { 
        printf("database not found "); 
       } 

    } 

    void readFile() 
    { 

      FILE* rfile = fopen("new file.txt","r"); 


     if(!rfile) 
       { 
        printf("file not found"); 
        exit(-1); 
       } 
       else 
       { 
        do{ 
         read = fgetc(rfile); 

         printf("%c",read); 

         }while(read != EOF); 
        fclose(rfile); 
       } 


    } 
+0

Thanks bro. Я пробовал это и его работу. Знаете ли вы, как я могу найти конкретного ученика, просто набрав его номер макета – ous

+0

здесь, что я делаю. используйте структуру данных, такую ​​как Связанный список или дерево. после запуска программа должна прочитать файл и поместить его в структуру данных. а также когда я вставляю новую запись, она также помещается в структуру данных. и когда мне нужно найти какой-то один, то я могу просто использовать метод поиска в соответствии с моей структурой. или прочитайте файл по строкам, разделите строку и возьмите номер мата и проверьте его. , вам также может потребоваться рассмотреть размер базы данных. – mhs

+0

Могу ли я увидеть его в кодах? – ous