Viết một chương trình C++ để hiển thị một menu cho phép người dùng lựa chọn hoặc quan sát tất cả bản ghi của sinh viên hoặc chỉ quan sát các bản ghi của một sinh viên cụ thể bởi lựa chọn id của sinh viên đó. ========================================================== MENU========================================================== 1. Quan sat tat ca ban ghi cua sinh vien 2. Quan sat mot ban ghi cua sinh vien boi ID 3. Hien thi diem thi cuoi ky cao nhat va thap nhat Nhap lua chon cua ban (1-3): 1 |ID | Kiemtra1 | Kiemtra2 | Giuaky | Cuoiky | ================================================== |1232 | 10 | 23 | 45 | 56 | |2343 | 45 | 43 | 24 | 78 | |2343 | 34 | 45 | 45 | 45 | |3423 | 67 | 6 | 65 | 56 | Lời giảiDưới đây là chương trình C++ để giải bài tập trên. Chúng ta sử dụng các mảng hai chiều để lưu trữ các bản ghi liên quan tới sinh viên. #include <cstdlib> #include <iostream> using namespace std; void showheading(); int hivalue(int stu[4][5]); int lovalue(int stu[4][5]); void displaymenu(){ cout<<"========================================================"<<"\n"; cout<<" MENU "<<"\n"; cout<<"========================================================"<<"\n"; cout<<" 1. Quan sat tat ca ban ghi cua sinh vien"<<"\n"; cout<<" 2. Quan sat mot ban ghi cua sinh vien boi ID"<<"\n"; cout<<" 3. Hien thi diem thi cuoi ky cao nhat va thap nhat"<<"\n"; } void viewall(int stu[4][5]){ int i,j; //Hien thi tieu de showheading(); for(i=0;i<4;i++){ for(j=0;j<5;j++) cout<<stu[i][j]<<"\t\t"; cout<<"\n"; } } void viewbyid(int stu[4][5]){ int id,i,j; bool l=false; cout<<"Nhap ID cua sinh vien:"; cin>>id; for(i=0;i<4;i++){ if(stu[i][0]==id){ showheading();l=true; for(j=0;j<5;j++)cout<<stu[i][j]<<"\t\t";} cout<<"\n";} if(l==false) cout<<"Xin loi, khong tim thay!\n"; } void showhl(int stu[4][5]){ cout<<"Diem thi cao nhat la:"<<hivalue(stu); cout<<"\n"; cout<<"Diem thi thap nhat la:"<<lovalue(stu); cout<<"\n"; } void showheading(){ cout<<"========================================================\n"; cout<<"ID Kiemtra1 Kiemtra2 Giuaky Cuoiky\n"; cout<<"========================================================\n"; } int hivalue(int stu[4][5]){ int *max,i; max=&stu[0][4]; for(i=0;i<4;i++) if(*max<stu[i][4])*max=stu[i][4]; return(*max); } int lovalue(int stu[4][5]){ int *min,i; min=&stu[0][4]; for(i=0;i<4;i++) if(*min>stu[i][4])*min=stu[i][4]; return(*min); } int main(int argc, char *argv[]) { //xay dung mang hai chieu de luu tru ban ghi cua sinh vien int stu[4][5]={{6001,7,7,8,9},{6002,6,8,5,8},{6003,5,6,6,7},{6004,8,9,8,9}}; //Hien thi menu displaymenu(); int yourchoice; char confirm; do { cout<<"Nhap lua chon cua ban (1-3):"; cin>>yourchoice; switch(yourchoice){ case 1:viewall(stu);break; case 2:viewbyid(stu);break; case 3:showhl(stu);break; default:cout<<"Khong hop le"; } cout<<"Nhan y hoac Y de tiep tuc:"; cin>>confirm; }while(confirm=='y'||confirm=='Y'); return 0; } Download chương trình quản lý sinh viên có menu bằng C++ miễn phíQuay lại>>>
khi chọn case 2 thì nó chỉ hiện menu mà không xuất ra được mảng danh sách sinh viên #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct SinhVien { int maSV; char hoTen[30]; float diem; char xepLoai[15]; }SV; void nhapMotSV(SV &sv) { printf("-->MA SO SV: "); scanf("%d", &sv.maSV); printf("-->HO TEN SV: "); fflush(stdin); gets(sv.hoTen); printf("-->DIEM SV: "); scanf("%f", &sv.diem); } void nhapMangSV(SV sv[], int n) { for(int i=0; i<n; i++) { printf("Nhap thong tin sinh vien thu %d:\n", i+1); nhapMotSV(sv[i]); if(sv[i].diem >= 8) strcpy(sv[i].xepLoai, "GIOI"); else if(7 <= sv[i].diem && sv[i].diem < 8) strcpy(sv[i].xepLoai, "KHA"); else if(5 <= sv[i].diem && sv[i].diem < 7) strcpy(sv[i].xepLoai, "TRUNG BINH"); else strcpy(sv[i].xepLoai, "YEU"); for(int j=0; j<i; j++) while(sv[i].maSV == sv[j].maSV) { printf("Trung ma sinh vien. Moi nhap lai ma sinh vien: "); scanf("%d", &sv[i].maSV); } } } void xuatMotSV(SV sv, int i) { printf("%-5d %-20d %-30s %10.2f %20s\n", i, sv.maSV, sv.hoTen, sv.diem, sv.xepLoai); } void XuatMangSV(SV sv[], int n) { printf("%-5s %-20s %-30s %10s %20s\n", "STT", "MSSV", "HO TEN", "DIEM", "XEP LOAI"); for(int i=0; i<n; i++) xuatMotSV(sv[i], i+1); } int linearSearch(SV sv[], int n, int x) { int i = 0; sv[n].maSV = x; while(sv[i].maSV != x) i++; if(i<n) return i; return -1; } void HoanVi(SV &a, SV &b) { SV t = a; a = b; b = t; } void interChangeSort(SV sv[], int n) { for(int i=0; i<n-1; i++) for(int j=i+1; j<n; j++) if(sv[i].diem < sv[j].diem) HoanVi(sv[i], sv[j]); } void deleteY(SV sv[], int &n, int k) { for(int i=k; i<n-1; i++) sv[i] = sv[i+1]; n--; } int main() { int n, chon = 0 , x, kq; SV sv[MAX]; do { system("cls"); printf("\t\t\t ============MENU================================\n"); printf("\t\t\t |1. Tao danh sach sinh vien |\n"); printf("\t\t\t |2. Xuat danh sach sinh vien |\n"); printf("\t\t\t |3. Tim Kiem sinh vien ma X |\n"); printf("\t\t\t |4. Sap xep danh sach theo thu tu giam dan diem|\n"); printf("\t\t\t |5. Xoa sinh vien co ma Y |\n"); printf("\t\t\t |6. Thoat |\n"); printf("\t\t\t ================================================\n"); printf("Ban chon: "); scanf("%d", &chon); switch(chon) { case 1: printf("Nhap so luong sinh vien: "); scanf("%d", &n); nhapMangSV(sv,n); break; case 2: XuatMangSV(sv,n); break; case 3: printf("Nhap vao ma sinh vien can tim kiem: "); scanf("%d", &x); kq = linearSearch(sv,n,x); if(kq == -1) printf("Du lieu sai\n"); else { printf("THONG TIN SV TIM THAY:\n"); printf("%-5s %-20s %-30s %10s %20s\n", "STT", "MSSV", "HO TEN", "DIEM", "XEP LOAI"); xuatMotSV(sv[kq],kq); } break; case 4: interChangeSort(sv,n); printf("DANH SACH SAU KHI SAP XEP DIEM GIAM DAN:\n"); XuatMangSV(sv,n); break; case 5: printf("Nhap ma sinh vien can xoa: "); scanf("%d", &x); deleteY(sv,n,x); printf("DANH SACH SAU KHI XOA:\n"); XuatMangSV(sv,n); break; case 6: break; default: printf("Ban chon sai. Moi ban chon lai MENU!\n"); break; } }while(chon!=6); return 0; }
tự đề một đường nội dung hỏi một nẻo ? Không đưa phần code của hàm cần hỏi lên thì làm sao biết vì sao sai ? Đưa kiểu này thì chả có ai giúp được. 1 Like
đã show toàn code rồi đó @masoivn. Cái mình hỏi chỉ ở chỗ làm menu thôi còn mấy hàm khác là đúng hết rồi. Bạn test giúp mình thì biết
Mình có 1 vài góp ý .
@Chuong_Pham mình chỉ hỏi chỗ làm menu. Bây giờ bạn chạy thử giúp mình đi bạn sẽ hiểu mình hỏi cái gì
Mình chạy kết quả in ra bình thường nhé. Lưu ý bạn một số chỗ
huyenthoai:
thay vào đó bọn có thể dùng getchar();
1 Like
ok cảm ơn @Pham_Van_Hai nhe! . Chỗ menu ví dụ mình chọn 1 thì là nhập sinh viên sau đó mình muốn xoá sạch màn hình và tiếp tục chọn 2 và xuất ra, sau đó mình xoá sạch màn hình và tiếp tục chọn … thì dùng cách nào nhỉ
Lý do sao mình nói như vậy: swtich case là đơn giản: nên không thể gây ra lỗi. Nên lỗi có thể xảy ra trong hàm xử lý của swtich case đó. Do đó khi đọc code mình chỉ nghĩ lỗi xảy ra trong hàm. chỗ xóa màn hình tham khảo link này 1 Like
Tại s fflush ko thực sự hoạt động vậy bạn? Bạn có thể nói rõ thêm đc ko? Hoặc đưa link nói về vấn đề này cũng đc. 1 Like
Theo chuẩn C có nói bạn nhé.
Cụ thể bạn có thể xem ở đây 2 Likes Home Categories FAQ/Guidelines Terms of Service Privacy Policy |