01/10/2018, 11:26
Nhờ giúp đỡ sửa lỗi logic trong chương trình quản lí sinh viên
chào m.n mình đang viết một chương trình quản lí trường học gồm nhiều module quản lí và mình đang viết module quản lí môn học bao gồm các chức năng thêm , xóa , chỉnh sửa và lưu vào file.
vấn đề mình đang gặp phải là ở hàm update.
void update_sub()
{
subject list_subject[100];
fstream myfile;
myfile.open(file_mon_hoc,ios::in);
int count1 = 0;
int flag = 1;
while(!myfile.eof())
{
if(flag%2!=0)
{
myfile >> list_subject[count1].subject_code;
}
else
{
myfile >> list_subject[count1].subject_name;
}
if(flag%4 == 0)
count1++;
flag++;
}
myfile.close();
output_list_subject(list_subject,count1);
char old_sub[30],old_code_sub[30];
char new_sub[30],new_code_sub[30];
int temp;
cout << endl;
cout << "Enter old subject name: ";
cin.ignore(1);
gets(old_sub);
cout << "Enter new subject name: ";
cin.ignore(1);
gets(new_sub);
cout << "Enter old subject code: ";
cin.ignore(1);
gets(old_code_sub);
cout << "Enter new subject code: ";
cin.ignore(1);
gets(new_code_sub);
for(int k = 0;k<count1;k++)
{
if(strcmp(list_subject[k].subject_code,old_code_sub)==0 && strcmp(list_subject[k].subject_name,old_sub)==0)
{
strcpy(list_subject[k].subject_code,new_code_sub);
strcpy(list_subject[k].subject_name,new_sub);
}
}
cout << endl;
cout << "Update successful" << endl;
myfile.open(file_mon_hoc,ios::out);
for(int k = 0;k<count1;k++)
{
myfile << list_subject[k].subject_code << endl;
myfile << list_subject[k].subject_name << endl;
}
myfile.close();
cout << endl;
}
mình nghĩ là mình sai ở chỗ vòng lặp while , lúc đầu mình có thử cho chương trình đọc cả tên , mã môn , số môn lý thuyết, số môn thực hành , nhưng bị lỗi , thế nên mình đổi lại giống như trên nhưng cũng bị lỗi.
đây là kết quả sau khi xuất ra.
mình không biết tại sao ở chỗ in ra danh sách nó lại in ra số lượng môn lý thuyết , mà không in ra đầy đủ nội dung , và ở chỗ update nó cũng sai nốt, mình nghĩ mãi mà không ra cách , mong được giúp đỡ ạ.
link full code: http://codepad.org/XW9OV4lV .
Bài liên quan
A post was merged into an existing topic: Topic này chứa các post được cho là Off-topic
có máy nhà đâu , đó giờ toàn code ngoài net .
Lâu lắm rồi mới thấy bạn =)))
Góp ý nho nhỏ với bạn là nếu bạn chỉ muốn chụp màn hình console thì bạn dùng Alt + Print Screen để chụp màn hình đang mở hiện tại nhé.
Sao bạn không dùng
std::string
để xử lí xâu nhỉ?flag là cái gì bạn ơi @@
flag là một biến cờ ấy bạn đọc xong 4 dòng tăng biến đếm lên 1
và lúc đầu ý tưởng là ntn
nhưng nó không copy vào được số môn lý thuyết và thực hành , nên mình mới đổi giống như trên nhưng cũng bị lỗi giống như thế .
Bạn thử debug bằng cách sau khi đọc dữ liệu từ file thì cout hết dữ liệu ra ngoài màn hình và sau khi update dữ liệu (trước khi ghi lại vào file) thì cout hết dữ liệu ra ngoài màn hình, rồi chụp lên đây mình xem giúp.
bây giờ net sắp nghĩ , để mai được không bạn.
Được bạn ạ. Lúc nào bạn làm được thì cmt vào đây.
hello @sueruan012 đây là các bước debug của mình, mình đã cố gắng chụp từng bước rồi , bạn xem giúp mình nha
đây là các bước khi đọc dữ liệu từ file
đây là các bước sau khi update
Ở chỗ bước này nó nhảy lên for rồi nó bay xuống dưới luôn
đó là tất cả các bước của mình
@sueruan012 mình vừa nghĩ ra một cách giải quyết mới nhưng vẫn chưa khả quan lắm
mình có đặt lại hàm
output_list_subject(list_subject,n);
dưới hàm main và phần update thì mình đã bỏ khúc đọc xuất filethay vào đó mình đổi lại là so sánh mã môn vừa nhập với mã môn có sẵn , nếu trùng thì bắt đầu cập nhật tên môn , mã , số tiết lý thuyết và thực hành, nhập tới đâu lưu vào file tới đó , nhưng có một vấn đề là khi mình nhập và xuất danh sách xong tới phần update thì khi mình nhập mã vào nó không cho mình cập nhật mà nó hiện ra luôn danh sách file.
đây là quá trình mình nhập, về phần hiển thị thì nó đã ok rồi , duy chỉ có phần update là còn lỗi thôi, bạn xem giúp mình nó sai ở chỗ nào vậy. thank.
đây là code phần update của mình
đây là full code