01/10/2018, 15:04

Cần giúp đỡ ý tưởng cho đồ án: quản lý SINH VIÊN

Chào mọi người!

Mình là sinh viên năm 2 của rường PTIT HCM. Mình hiện có tham gia vào 1 project nhỏ,cũng là bài thi cuối kì của các bạn mình. Project này có tên là QUẢN LÝ SINH VIÊN. Trong project này có 1 ý nhỏ mà mình chưa nghĩ ra dc cách viết code.

Trong phần danh sách sinh viên,có phần nhập tên sinh viên để in ra thông tin sinh viên đó.

Cái khó ở đây là nếu người dùng nhập 1 ký tự là kiểu số ,chứ ko phải char hay string thì kí tự đó lập tức bị xóa đi ngay lập tức trên màn hình nhập. TỨc là có dùng hàm gecth() để tiện theo dõi quá trình nhập. Nếu phát hiện có 1 số bất kỳ trong quá trình nhập,kí tự đó bị xóa ngay,và con trỏ lùi về 1 vị trí để bắt người dùng nhập lại cho đúng

Ví dụ: Tên sinh viên : Nguyên Nam

Người dùng nhập là : Nguy1
Ngay lập tức,tại vị trí số 1 dc xóa ngay,chỉ còn Nguy,và trên màn hình là Nguy_ (con trỏ tại vị trí vừa xóa là _)

Cảm ơn mọi người đã đọc! Rất mong dc mọi người góp ý ,giúp đỡ ạ!

Trần Hoàn viết 17:05 ngày 01/10/2018

Off topic:
Đồ án là ứng dụng chạy trên Windows à… Dùng luôn WPF (ngôn ngữ C#) cho dễ bạn ơi

Bùi Công Nguyên Nam viết 17:07 ngày 01/10/2018

Bên mình thầy bắt viết bằng C++ :v Ko dc phép dùng thư viện có sẵn,chỉ có code thủ công :v
Đồ án này chỉ viết trên trình biên dịch,Dev-C hoặc Visual Studio đều dc.

Aragami1408 viết 17:08 ngày 01/10/2018

Thế thì chỉ viết console là ok bạn nhé!

HelloWorld viết 17:09 ngày 01/10/2018

Bạn cần dùng thêm thư viện windows
chứ vụ lùi con trỏ này khá khoai, vì nếu k dùng thêm thư viện gì, chỉ có cách cls màn hình thôi, mà cls màn hình thì còn liên quan đến các thông tin khác và hay có hiện tượng nháy

Cong 5 viết 17:08 ngày 01/10/2018

hoặc có thể kiểm tra để lúc nhập tên thì không được nhập kí tự dạng số…

Bùi Công Nguyên Nam viết 17:07 ngày 01/10/2018

mình có 1 ý tưởng như sau,dựa trên topic CHƯƠNG TRÌNH MẬT KHẨU ĐƠN GIẢN C++

Đây là code mình chỉnh sửa lại chút

string passwordInput(unsigned maxLength)
{

string pw;
for (char c; (c = getch()); )
{
	if (!pw.empty()) {
		if((isdigit(c))) { // Nếu ký tự nhập vào là số thì xóa ngay ko cho nhập
			cout << "\b \b";
			pw.erase(pw.size()-1);
		}
	}
    if (c == '\n' || c == '\r') { //phím enter
        cout << "\n";
        break;
    } else if (c == '\b') { //phím backspace
        cout << "\b \b";
        if (!pw.empty()) pw.erase(pw.size()-1);
    } else if (c == -32) { //phím mui tên
        _getch(); //b? qua kí t? ti?p theo (hu?ng mui tên)
    } else if (isprint(c) && pw.size() < maxLength) { //isprint t?c là ch? nh?n nh?ng ký t? in ra du?c (có tính kho?ng tr?ng)
        cout << '*';
        pw += c;
    
    }
}
return pw;

}

Đoạn code này có 1 vấn đề . Nếu như mình nhập 1 con số vào,thì trên màn hình vẫn hiển thị dấu *,tức là vẫn nhận con số này vào chuỗi password. Cái mình muốn thấy là ngay khi mình nhập vào ,kiểm tra đk,nếu thỏa đk ko phải là char thì xóa ngay lập tức. Nhưng trong trường hợp này thì nó phải nhận 1 con số trước,còn những con số nhập lúc sau thì bị xóa ngay lập tức.

Mọi người xem giùm code có trục trặc chỗ nào ko ạ ?

Code này mình tham khảo từ topic CHƯƠNG TRÌNH MẬT KHẨU ĐƠN GIẢN C++,ko phải do mình viết.

Bài liên quan
0