fork download
  1.  
  2. #include <iostream>
  3. #include <string>
  4. #include <limits>
  5. using namespace std;
  6.  
  7. bool readInt(const string& msg, int& x) {
  8. while (true) {
  9. cout << msg;
  10. if (cin >> x) return true;
  11. if (cin.eof()) return false;
  12. cin.clear();
  13. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  14. cout << "Phai nhap so nguyen!\n";
  15. }
  16. }
  17. bool readDouble(const string& msg, double& x) {
  18. while (true) {
  19. cout << msg;
  20. if (cin >> x) return true;
  21. if (cin.eof()) return false;
  22. cin.clear();
  23. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  24. cout << "Phai nhap so!\n";
  25. }
  26. }
  27. string readLine(const string& msg) {
  28. cout << msg;
  29. string s;
  30. getline(cin >> ws, s);
  31. return s;
  32. }
  33.  
  34. struct Course { int id; string name; int maxStudents,registered; };
  35. Course* findCourse(Course* ds,int n,int id){
  36. for(int i=0;i<n;++i)if(ds[i].id==id)return &ds[i];
  37. return nullptr;
  38. }
  39. void input(Course* ds,int n){
  40. for(int i=0;i<n;++i){
  41. cout<<"\nKhoa hoc "<<i+1<<":\n";
  42. while(true){if(!readInt("ID: ",ds[i].id))return;
  43. if(findCourse(ds,i,ds[i].id)==nullptr)break;
  44. cout<<"ID trung!\n";}
  45. ds[i].name=readLine("Ten khoa hoc: ");
  46. do{if(!readInt("Suc chua: ",ds[i].maxStudents))return;
  47. if(ds[i].maxStudents<0)cout<<"Khong duoc am!\n";
  48. }while(ds[i].maxStudents<0);
  49. do{if(!readInt("Da dang ky: ",ds[i].registered))return;
  50. if(ds[i].registered<0||ds[i].registered>ds[i].maxStudents)
  51. cout<<"Can 0 <= registered <= maxStudents!\n";
  52. }while(ds[i].registered<0||ds[i].registered>ds[i].maxStudents);
  53. }
  54. }
  55. void show(Course* ds,int n){
  56. for(int i=0;i<n;++i)cout<<ds[i].id<<" | "<<ds[i].name
  57. <<" | "<<ds[i].registered<<"/"<<ds[i].maxStudents<<'\n';
  58. }
  59. void search(Course* ds,int n){
  60. int id;if(!readInt("ID can tim: ",id))return;
  61. Course* p=findCourse(ds,n,id);
  62. if(!p){cout<<"Khong tim thay!\n";return;}
  63. cout<<p->id<<" | "<<p->name<<" | "<<p->registered<<"/"<<p->maxStudents<<'\n';
  64. }
  65. void registerCourse(Course* ds,int n){
  66. int id;if(!readInt("ID dang ky: ",id))return;
  67. Course* p=findCourse(ds,n,id);
  68. if(!p){cout<<"Khong tim thay!\n";return;}
  69. if(p->registered>=p->maxStudents){cout<<"Da day!\n";return;}
  70. ++p->registered;cout<<"Dang ky thanh cong!\n";
  71. }
  72. void cancelCourse(Course* ds,int n){
  73. int id;if(!readInt("ID huy dang ky: ",id))return;
  74. Course* p=findCourse(ds,n,id);
  75. if(!p){cout<<"Khong tim thay!\n";return;}
  76. if(p->registered<=0){cout<<"Chua co dang ky de huy!\n";return;}
  77. --p->registered;cout<<"Huy thanh cong!\n";
  78. }
  79. void changeCapacity(Course* ds,int n,bool isTeacher){
  80. if(!isTeacher){cout<<"Student khong duoc sua maxStudents!\n";return;}
  81. int id;if(!readInt("ID khoa hoc: ",id))return;
  82. Course* p=findCourse(ds,n,id);
  83. if(!p){cout<<"Khong tim thay!\n";return;}
  84. int capacity;if(!readInt("Suc chua moi: ",capacity))return;
  85. if(capacity<p->registered){cout<<"Khong duoc nho hon so da dang ky!\n";return;}
  86. p->maxStudents=capacity;cout<<"Da cap nhat!\n";
  87. }
  88. bool login(bool& isTeacher){
  89. int role;if(!readInt("1.Teacher 2.Student: ",role))return false;
  90. if(role==2){isTeacher=false;return true;}
  91. if(role==1){string pass=readLine("Mat khau teacher: ");
  92. if(pass=="T123"){isTeacher=true;return true;}}
  93. cout<<"Dang nhap that bai!\n";return false;
  94. }
  95. int main(){
  96. int n;if(!readInt("Nhap n (1..1000): ",n)||n<1||n>1000)return 0;
  97. Course* ds=new Course[n];input(ds,n);
  98. int mainChoice=-1;
  99. do{
  100. if(!readInt("\n1.Dang nhap 0.Thoat: ",mainChoice))break;
  101. if(mainChoice==1){bool isTeacher=false;
  102. if(!login(isTeacher))continue;
  103. int choice=-1;
  104. do{
  105. if(!readInt("\n1.Hien thi 2.Tim 3.Dang ky 4.Huy dang ky 5.Sua suc chua 0.Dang xuat: ",choice))break;
  106. switch(choice){
  107. case 1:show(ds,n);break;
  108. case 2:search(ds,n);break;
  109. case 3:registerCourse(ds,n);break;
  110. case 4:cancelCourse(ds,n);break;
  111. case 5:changeCapacity(ds,n,isTeacher);break;
  112. case 0:break;
  113. default:cout<<"Lua chon sai!\n";
  114. }
  115. }while(choice!=0&&!cin.eof());
  116. }else if(mainChoice!=0)cout<<"Lua chon sai!\n";
  117. }while(mainChoice!=0&&!cin.eof());
  118. delete[] ds;ds=nullptr;return 0;
  119. }
  120.  
  121.  
Success #stdin #stdout 0.01s 5316KB
stdin
Standard input is empty
stdout
Nhap n (1..1000):