Chương trình quản lí môn học bị lỗi ẩn đi nội dung của file , mong được giúp đỡ
hello , mình đang viết một chương trình quản lí với nhiều module và mình đang viết tới module quản lí môn học , hiện tại mình đang gặp lỗi ở phần chỉnh sửa môn học và xóa môn học.
lỗi mà mình gặp phải là khi mà mình vừa nhập vào số lượng môn và gọi hàm update
thì khi mình input nội dung từ file ra thì nó chỉ xuất mỗi phần update , còn các môn khác thì nó ẩn đi , và nếu mình gọi hàm delete
để xóa đi môn mà mình vừa cập nhật thì khi input nội dung từ file ra nó sẽ hiện các môn học bị ẩn đi , nhưng nó chỉ hiện mỗi một môn , mình có vào kiểm tra file thì chỉ có một môn các môn kia không thấy đâu ,mình không biết chương bị lỗi gì nữa , các bạn giúp mình với . ths alll .
đây là hàm update và delete
void update_subject(subject list_subject[])
{
char old_code_sub[30];
char old_sub_name[30];
int theory_sub;
int practice_sub;
cout << endl;
cout << "Enter old subject code: ";
fflush(stdin);
gets(old_code_sub);
cout << "Enter old subject name: ";
fflush(stdin);
gets(old_sub_name);
cout << "Enter the number of theoretical old subjects: ";
cin >> theory_sub;
cout << "Enter the number of practicetical old subjects: ";
cin >> practice_sub;
ofstream myfile(file_mon_hoc,ios::out);
for(int i = 0;i<n;i++)
{
if(strcmp(old_code_sub,list_subject[i].subject_code)==0 && strcmp(old_sub_name,list_subject[i].subject_name)==0 && (list_subject[i].number_theory_of_subject == theory_sub) && (list_subject[i].number_of_subject_practice == practice_sub))
{
// ghi tại vị trí này
fflush(stdin);
cout << "Enter new code : ";
gets(list_subject[i].subject_code);
myfile << list_subject[i].subject_code << endl;
cout << "Enter new name: ";
fflush(stdin);
gets(list_subject[i].subject_name);
myfile << list_subject[i].subject_name << endl;
cout << "Enter the number of theoretical new subjects: ";
fflush(stdin);
cin >> list_subject[i].number_theory_of_subject;
myfile << list_subject[i].number_theory_of_subject << endl;
cout << "Enter the number of practicetical new subjects: ";
fflush(stdin);
cin >> list_subject[i].number_of_subject_practice;
myfile << list_subject[i].number_of_subject_practice << endl;
}
}
myfile.close();
}
void del_sub(subject list_subject[])
{
char code_sub[50];
fflush(stdin);
cout << "Enter the subject code you want to delete: ";
gets(code_sub);
for(int k = 0;k<n;k++)
{
if(strcmp(list_subject[k].subject_code,code_sub)==0)
{
// xóa tai vi trí này
for(int i = k;i<n;i++)
{
list_subject[i] = list_subject[i+1];
n--;
}
}
}
for(int i = 0;i<n;i++)
{
ofstream myfile1 (file_mon_hoc,ios::out);
myfile1 << list_subject[i].subject_code << endl;
myfile1 << list_subject[i].subject_name << endl;
myfile1 << list_subject[i].number_theory_of_subject << endl;
myfile1 << list_subject[i].number_of_subject_practice << endl;
myfile1.close();
}
cout << endl;
}
còn đây là full code
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <stdlib.h>
#include <conio.h>
#include <iomanip>
#define file_mon_hoc "monhoc.txt"
int n;
using namespace std;
typedef struct subject
{
char subject_code[10];
char subject_name[100];
int number_theory_of_subject;
int number_of_subject_practice;
};
void menu_subject()
{
cout << endl;
cout << setw(47) << "*******MENU SUBJECT*******" << endl;
cout << setw(37) << " |-----------------|" << endl;
cout << setw(37) << " |1 ADD SUBJCET |" << endl;
cout << setw(37) << " |2 DELETE SUBJECT |" << endl;
cout << setw(37) << " |3 UPDATE SUBJECT |" << endl;
cout << setw(37) << " |4 SHOW SUBJECT |" << endl;
cout << setw(37) << " |0 QUIT |" << endl;
cout << setw(37) << " ------------------|" << endl;
cout << endl;
}
void enter_sub(subject list_subject[])
{
cout << "Enter number subject: ";
cin >> n;
fstream myfile;
myfile.open(file_mon_hoc,ios::out|ios::app);
cout << "*****ENTER SUBJECT*****" << endl;
for(int i = 0;i<n;i++)
{
fflush(stdin);
cout << "Enter code : ";
gets(list_subject[i].subject_code);
myfile << list_subject[i].subject_code << endl;
cout << "Enter name: ";
fflush(stdin);
gets(list_subject[i].subject_name);
myfile << list_subject[i].subject_name << endl;
cout << "Enter number of theoretical subjects: ";
fflush(stdin);
cin >> list_subject[i].number_theory_of_subject;
myfile << list_subject[i].number_theory_of_subject << endl;
cout << "Enter number of practicetical subjects: ";
fflush(stdin);
cin >> list_subject[i].number_of_subject_practice;
myfile << list_subject[i].number_of_subject_practice << endl;
}
myfile.close();
}
void output_list_subject(subject list_subject[])
{
cout << " |----------------------------|" << endl;
cout << " |******* LIST SUBJECT *******|" << endl;
cout << " |----------------------------|" << endl;
cout << "|---------------+---------------+"<< "----------------+---------------+" << endl;
cout << "| CODE SUBJECT |"<< " NAME SUBJECT |" << endl;
cout << "|---------------+---------------+"<< "----------------+---------------+" << endl;;
for(int i = 0;i<n;i++)
{
cout <<"| " << setw(20) << list_subject[i].subject_code << setw(5) << " |";
cout << setw(24) << list_subject[i].subject_name << " |" << endl;
cout << "|---------------+---------------+" << "----------------+---------------+"<< endl;
}
cout << "+---------------+---------------+" << "----------------+---------------+" << endl;
cout << "| THEORY |" << " PRACTICE |" << endl;
cout << "+---------------+---------------+" << "----------------+---------------+" << endl;
for(int i = 0;i<n;i++)
{
cout << "| " << list_subject[i].subject_name << ": " << setw(3) << list_subject[i].number_theory_of_subject << " | ";
cout << list_subject[i].subject_name << ": " << setw(3) << list_subject[i].number_of_subject_practice << " |" << endl;
cout << "+---------------+---------------+" << "----------------+---------------+" << endl;
}
}
void output_sub()
{
fstream myfile;
myfile.open(file_mon_hoc,ios::in);
char count1[50];
int flag = 1;
cout << "***** CONTENT FILE ***** " << endl;
cout << "|-----------------------|-----------------------|-----------------------|" << endl;
while(!myfile.eof())
{
myfile.getline(count1,50);
if(flag%4==0)
{
cout << setw(12)<< count1 << setw(12) << endl;
}
else
{
cout << setw(19) << count1 << setw(19);
}
flag++;
}
cout << endl;
cout << "|-----------------------|-----------------------|-----------------------|" << endl;
myfile.close();
}
void update_subject(subject list_subject[])
{
char old_code_sub[30];
char old_sub_name[30];
int theory_sub;
int practice_sub;
cout << endl;
cout << "Enter old subject code: ";
fflush(stdin);
gets(old_code_sub);
cout << "Enter old subject name: ";
fflush(stdin);
gets(old_sub_name);
cout << "Enter the number of theoretical old subjects: ";
cin >> theory_sub;
cout << "Enter the number of practicetical old subjects: ";
cin >> practice_sub;
ofstream myfile(file_mon_hoc,ios::out);
for(int i = 0;i<n;i++)
{
if(strcmp(old_code_sub,list_subject[i].subject_code)==0 && strcmp(old_sub_name,list_subject[i].subject_name)==0 && (list_subject[i].number_theory_of_subject == theory_sub) && (list_subject[i].number_of_subject_practice == practice_sub))
{
// ghi tại vị trí này
fflush(stdin);
cout << "Enter new code : ";
gets(list_subject[i].subject_code);
myfile << list_subject[i].subject_code << endl;
cout << "Enter new name: ";
fflush(stdin);
gets(list_subject[i].subject_name);
myfile << list_subject[i].subject_name << endl;
cout << "Enter the number of theoretical new subjects: ";
fflush(stdin);
cin >> list_subject[i].number_theory_of_subject;
myfile << list_subject[i].number_theory_of_subject << endl;
cout << "Enter the number of practicetical new subjects: ";
fflush(stdin);
cin >> list_subject[i].number_of_subject_practice;
myfile << list_subject[i].number_of_subject_practice << endl;
}
}
myfile.close();
}
void del_sub(subject list_subject[])
{
char code_sub[50];
fflush(stdin);
cout << "Enter the subject code you want to delete: ";
gets(code_sub);
for(int k = 0;k<n;k++)
{
if(strcmp(list_subject[k].subject_code,code_sub)==0)
{
// xóa tai vi trí này
for(int i = k;i<n;i++)
{
list_subject[i] = list_subject[i+1];
n--;
}
}
}
for(int i = 0;i<n;i++)
{
ofstream myfile1 (file_mon_hoc,ios::out);
myfile1 << list_subject[i].subject_code << endl;
myfile1 << list_subject[i].subject_name << endl;
myfile1 << list_subject[i].number_theory_of_subject << endl;
myfile1 << list_subject[i].number_of_subject_practice << endl;
myfile1.close();
}
cout << endl;
}
void main_menu()
{
cout << endl;
cout << setw(46) << " ******* MENU MAIN *******" << endl;
cout << setw(37) << " |-----------------|" << endl;
cout << setw(37) << " |1 MANAGE CLASS |" << endl;
cout << setw(37) << " |2 MANAGE SUBJECT |" << endl;
cout << setw(37) << " |3 MANAGE TUITION |" << endl;
cout << setw(37) << " |4 MANAGE STUDENT |" << endl;
cout << setw(37) << " |5 SIGN UP SUBJECT|" << endl;
cout << setw(37) << " |0 OUT |" << endl;
cout << setw(37) << " |-----------------|" << endl;
cout << endl;
}
int main()
{
int flag1;
main_menu();
while(1)
{
cout << "Please,enter a choose: ";
cin >> flag1;
system("cls");
if(flag1 == 0)
exit(0);
else
{
switch(flag1)
{
case 2:
{
int choose;
while(1)
{
menu_subject();
cout << "Please, enter choose: ";
cin >> choose;
system("cls");
if(choose == 0)
{
main_menu();
break;
}
else
{
subject list_subject[100];
switch(choose)
{
case 1:
{
system("cls");
enter_sub(list_subject);
cin.ignore();
system("cls");
break;
}
case 2:
{
system("cls");
output_sub();
del_sub(list_subject);
cout << "Update successful" << endl;
cin.ignore();
system("cls");
break;
}
case 3:
{
system("cls");
output_sub();
update_subject(list_subject);
cout << "Update successful" << endl;
cin.ignore();
system("cls");
break;
}
case 4:
{
system("cls");
int choose1;
cout << "==================" << endl;
cout << "|1 see file type |" << endl;
cout << "|2 see table type|" << endl;
cout << "==================" << endl;
cout << "Please, choose type output: ";
cin >> choose1;
system("cls");
switch(choose1)
{
case 1:
{
output_sub();
break;
}
case 2:
{
output_list_subject(list_subject);
break;
}
}
break;
}
}
}
}
}
}
}
}// ket thuc case 1
return 0;
}
Hi Hoài Nam Trương.
Có lẽ là do bạn đọc ghi file. Bạn xem lại tài liệu về phần này xem.
phần đọc ghi mình đâu thấy lỗi chỗ nào đâu nhỉ ?
Hi Hoài Nam Trương.
Mở file để ghi thì nó ghi từ đầu file nên bạn mất dữ liệu là đúng rồi.
vậy có cách nào để cho nó đọc ngay đoạn mình muốn không bạn ?
Hi Hoài Nam Trương.
mình không hiểu lắm , bạn có thể nói rõ hơn đc ko
Hi Hoài Nam Trương.
mình vừa chỉnh lại code và với lần nhập lần đầu thì ở hàm cập nhật và xóa nó đều hoạt động tốt , nhưng khi mà gọi lại hàm nhập , nhập thêm một môn khác thì nó lại phát sinh ra lỗi giống như trên , bạn xem coi mình chỉnh lại sai sót chỗ nào thế
code mình vừa sửa
Mình nghĩ bạn nên suy nghĩ cấu trúc binary rồi hiển thị lại chứ cho cả thêm xóa sửa mà viết kiểu này ngán lắm.