2.2 Cấu Trúc dữ liệu và biến _Chính là: struct userInfo : Hình 2.1 Được sử dụng để tổ chức thông tin người dùng như: Họ và Tên,Ngày Tháng Năm Sinh, Thành Phố, Giới Tính, Email, Số Điện
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TPHCM
VIỆN ĐÀO TẠO CHẤT LƯỢNG CAO
Trang 2TPHCM, Ngày 21, Tháng 1, Năm 2024
Trang 3LỜI NÓI ĐẦU
_Nhóm 4 chúng em xin gửi đến thầy Bùi Văn Thượng lời chào trântrọng Đồng thời chúng em xin phép được giới thiệu và trình bày về
dự án nhỏ mà em đã thực hiện với hy vọng nhận được sự hướng dẫn
và phản hồi từ thầy Dự án của chúng em là một ứng dụng nhậpthông tin người dùng và lưu trữ, được viết bằng ngôn ngữ lập trìnhC++ Chúng em đã cố gắng tích hợp các khái niệm lập trình cơ bản
mà chúng em đã học từ các buổi giảng dạy từ thầy Trong bài viếtnày, chúng em sẽ trình bày về bài toán, cơ sở lý thuyết, phươngpháp thực hiện, quá trình thực hiện, kết quả thực nghiệm, ưu điểm,nhược điểm, kết luận, kiến nghị và hướng phát triển của dự án.Chúng em hi vọng rằng bài trình bày này sẽ thỏa mãn và đáp ứngđược những yêu cầu của đề tài mà thầy đã giao
_Em trân trọng cảm ơn thầy đã dành thời gian đọc qua bài viết vàmong nhận được sự hỗ trợ và đánh giá từ phía thầy
Chân thành cảm ơn, Thầy rất nhiều ạ
Trang 4MỤC LỤC
1.GIỚI THIỆU 1
1.1 Giới Thiệu Về Bài Toán 1
1.2 Bài Toán và Mục Tiêu 1
2.CƠ SỞ LÝ THUYẾT 2
2.1 Ngôn ngữ C++ 2
2.2Cấu Trúc dữ liệu và biến 2
2.3 Hàm và xử lý 2
2.4 Hàm kiểm tra mật khẩu 5
2.5 Hàm lưu thông tin vào tệp 5
3.Xử lí chuỗi và mảng 6
3.1 Sử dụng Menu và vòng lặp switch-case 11
3.2 Đọc và Ghi tệp tin 11
4.Kết quả thực nghiệm 12
4.1 Chạy chương trình 12
4.2 Yêu cầu chương trình 12
4.3 Kết quả 12
5.Ưu điểm và Nhược điểm 13
5.1 Ưu điểm 13
5.2 Nhược điểm 13
6.Kết luận kiến nghị và hướng phát triển 14
6.1 Kết luận kiến nghị 14
6.2 Gợi ý phát triển 14
Trang 5DANH MỤC HÌNH ẢNH
2.CƠ SỞ LÝ THUYẾT 2
Hình 2.1 2
Hình 2.2 2
Hình 2.3 3
Hình 2.4 3
Hình 2.5 4
Hình 2.6 4
Hình 2.7 5
Hình 2.8 5
3.Xử lí chuỗi và mảng 6
Hình 3.1 6
Hình 3.2 6
Hình 3.3 7
Hình 3.4 7
Hình 3.5 7
Hình 3.6 7
Hình 3.7 8
Hình 3.8 8
Hình 3.9 9
Hình 3.10 9
Hình 3.11 10
Hình 3.13 11
Hình 3.14 11
Hình 3.15 11
4.Kết quả thực nghiệm 12
Hình 4.1 12
Hình 4.2 12
Hình 4.3 12
Hình 4.4 13
Trang 61.GIỚI THIỆU1.1 Giới Thiệu Về Bài Toán
Trong thế giới số ngày nay, việc quản lý và bảo quản thông tin cánhân là một phần quan trọng của cuộc sống hàng ngày Để đơngiản hóa quá trình này, chúng ta có thể sử dụng các ứng dụng nhậpthông tin người dùng Bài viết này sẽ giới thiệu một ứng dụng đơngiản được viết bằng ngôn ngữ lập trình C++, giúp người dùng nhậpthông tin cá nhân và lưu trữ nó vào một tệp tin
1.2 Bài Toán và Mục Tiêu
Bài toán của chúng ta là xây dựng một chương trình C++ cho phépngười dùng nhập các thông tin như họ tên, ngày tháng năm sinh,thành phố, giới tính, email, số điện thoại, tên đăng nhập và mậtkhẩu Sau đó, chương trình sẽ lưu thông tin này vào một tệp tin vớitên được tạo từ họ tên của người dùng
Đề:
“Họtên:ChỉđượcchứakýtựchữcáiLatin-------
Ngàythángnămsinh:Cầnkiểmtratínhhợplệvàphảiđảmbảongườiđăngký>=16tuổi.Tỉnh, thànhphố:Chophéplựachọntừ10tỉnh,thànhphốchotrước.
Giớitính:chỉchophépnhập“male”,“female”hoặc“other”.
Email:Chỉnhậndữliệudạngchuỗiemail.
Sốđiệnthoại:Chỉnhậnxâukýtựgồm10kýtựlàcácchữsốtừ0->9.Tênđăngnhập:chỉđược chứacáckýtựlàchữcáiLatin,sốvàkýtựgạchdưới.(kýtựđầutiênchỉcóthểlàchữcáiLatin). Mậtkhẩu:Phảiítnhất8kýtự,khôngchứakhoảngtrống,phảicóđầyđủchữcáithường,chữcáiin hoa,sốvàkýtựđặcbiệt.
LưutoànbộthôngtinđăngkýcủangườidùngnếuhợplệvàofileUsername.txttrongđó Usernameđượclấytheohọtêncủangườidùngvàđãthaythếkhoảngtrốngtrongtênbằngkýtự gạchdưới”.
Trang 72.CƠ SỞ LÝ THUYẾT
2.1 Ngôn ngữ C++
_Chương trình sử dụng thư viện chuẩn như: <iostream>; <fstream>;
<string>; <ctime> nhằm mục đích để thực hiện các thao tác nhập xuất,
xử lí chuỗi, và làm việc quản lí thời gian
2.2 Cấu Trúc dữ liệu và biến
_Chính là: struct userInfo :
Hình 2.1
Được sử dụng để tổ chức thông tin người dùng như: Họ và Tên,Ngày Tháng Năm Sinh, Thành Phố, Giới Tính, Email, Số Điện Thoại, Tên Đăng Nhập và Mật Khẩu
2.3 Hàm và xử lý
Hàm Kiểm Tra chuỗi
isAlphaLatin( const string & str )
2
Trang 9 isAlphaSpace( const string & str )
Trang 102.4 Hàm kiểm tra mật khẩu
validPass( const string & password )
Sử dụng hàm này để kiểm tra tính hợp lệ của mật khẩu với các yêu cầu như ít nhất 8 ký tự, chứa chữ hoa, chữ thường, số, và ký tự đặc biệt có đủ điều kiện hay không.
Hình 2.7
2.5 Hàm lưu thông tin vào tệp
saveUserInfoToFile( const string & fileName , userInfo *& user )
Trang 11 Sử dụng hàm này để nhập họ tên Sau đó, họ tên được kiểm tra
để đảm bảo chỉ chứa ký tự Latinh và khoảng trắng Nếu điều kiệnkhông được đáp ứng, người dùng có lựa chọn nhập lại hoặc thoát chương trình
dayOfBirth( userInfo *& user )
6
Trang 12Hình 3.2
Sử dụng hàm này để nhập và kiểm tra định dạng ngày tháng nămsinh của người dùng theo định dạng dd/mm/yyyy Nếu định dạng không đúng, người dùng có lựa chọn nhập lại hoặc thoát chương trình
_Đoạn mã này giúp chúng ta chuyển đổi phần ngày, tháng, và năm từ chuỗi dayOfBirth( userInfo *& user ) sang số giá trị nguyên tương ứng để thuận cho việc tính tuổi
Hình 3.3
_Các đoạn mã giới hạn các ngày tháng năm
Kiểm tra xem tháng nhập vào lớn hơn 12, chương trình sẽ hiển thị thông báo lỗi, hỏi người dùng có muốn nhập lại hay không Nếu muốn nhập lại, sử dụng goto để
Trang 13quay lại điểm nhap Nếu không, chương trình sẽ thoát với mã lỗi exit(1).
Hình 3.4
Dành riêng cho các tháng
có 31 ngày
Trang 14người dùng Nếu tuổi chưa đủ, chương trình yêu cầu người dùng nhập lại thông tin Sử dụng goto để quay lại điểm nhập nếu cần, Nếu không muốn nhập lại, chương trình kết thúc với mã lỗi exit(1).
Nếu tuổi đủ, thông tin về ngày tháng năm sinh được lưu vào đối tượng user ->dateOfBirth
Hình 3.8
Gender( userInfo *& user )
Hình 3.9
Trang 15hoặc nhập sai kí tự sẽ thoát và cho nhập lại nếu muốn hoặcthoát ra nếu không muốn
email( userInfo *& user )
Hàm này để nhập email và kiểm tra đúng định dạng của nó là
“@gmail.com” hay không nếu không sẽ thoát cho nhập lại nếu muốn hoặc thoát nếu không muốn nhập lại
Hình 3.10
10
Trang 16 phoneNumbers( userInfo *& user )
Hàm này để nhập số điện thoại nếu số điện loại có size lớn hơn 10
số sẽ cho nhập lại nếu muốn và thoát nếu không muốn nhập lại
Hình 3.11
password( userInfo *& user )
Hàm này để nhập mật khẩu và kiểm tra mật khẩu của bạn có đúng định dạng hay không như kiểm tra xem
có kí tự đặc biệt hay một chữ cái viết hoa và và chữ
số hay không Nếu đầy đủ thì chương trình sẽ lưu mật khẩu cho bạn nếu sau sẽ cho bạn nhập lại và thoát ra nếu bạn không muốn nhập lại
Hình 3.12
Trang 17ofstream file(( fileName + ".txt" ).c_str(), ios ::out | ios ::app);
Chương trình mở hoặc tạo một tệp tin văn bản với tên được đặt theo
`fileName` Sau đó, nếu việc mở tệp thành công,
nó ghi thông tin người dùng (tên, ngày tháng năm sinh, thành phố, giới tính, email, số điện thoại, tên đăng nhập và mật khẩu) vào tệp tin Nếu mở tệp không thành công,
13
Hình 3.13
Hình 3.15
Trang 18chương trình thông báo lỗi Cuối cùng, chương trình đóng tệp tin và thông báo trên màn hình về việc đăng ký thành công hoặc không thành công.
4.Kết quả thực nghiệm4.1 Chạy chương trình
_khi chạy chương trình bạn sẽ nhập theo thứ tự đầu tiên là
4.2 Yêu cầu chương trình
_Nếu trong quá trình bạn nhập không đúng định dạng yêu cầu của chương trình Thì chương trình sẽ xuất ra “Nhap sai dinh dang” =>
“Ban co muon nhap lai(1/0)” nếu muốn tiếp tục bạn nhập 1 để nhậplại cho đúng định dạng và
nhập 0 để thoát chương
trình nếu không muốn
nhập nữa
Trang 19Hình 4.2
4.3 Kết quả
_Sau khi bạn đã điền đầy đủ thông tin và đúng định dạng chương trình sẽ tự động lưu thông tin của bạn vào file trong thư mục với tênthư mục là tên của bạn
1 Kiểm tra dữ liệu đầu vào
Chương trình kiểm tra một số định dạng và tính hợp lệ của dữ liệu đầu vào như họ và tên,ngày tháng năm sinh, số điện thoại,tên đăng nhập, mật khẩu
2 Sử dụng struct
Sử dụng cấu trục struct để quản lý người dùng giúp quảng lý thông tin một cách dễ dàng
3 Lưu trữ thông tin
Chương trình lưu thông tin của người dùng vào 1 file văn bản
để duy trì dữ liệu người dùng
4 Dùng hàm để phân chia chức năng
15
Trang 20Chương trình chia ra nhiều hàm nhỏ thực hiện các chức vụ riêng Tạo ra sự rõ ràng và dễ duy trì.
2 Không có giao diện cho người dùng.
3 Không có bảo mật mạnh mẽ cho mật khẩu.
4 Chưa kiểm tra 1 số điều kiện.
6.Kết luận kiến nghị và hướng phát triển
6.1 Kết luận kiến nghị
_Chương trình đa chức năng như nhập thông tin người dùng, kiểm tra định dạng, lưu thông tin vào file với một số quy tắc kiểm tra._Kiểm tra độ tuổi yêu cầu người dùng phải đủ 16 tuổi
_Sử dụng cấu trúc dữ liệu để quản lí thông tin người dùng có tổ chức
6.2 Gợi ý phát triển
_Lặp lại code hơi nhiều Gây khó khăn cho việc sữa lỗi.
_Tăng tính năng sửa đỗi cho phép người dùng sửa đỗi thông tin._Bảo mật thông tin tăng tính năng bảo mật thông tin cho người dùng
_Giao diện người dùng tạo sự tương tác cho người dùng.
_Kiểm tra độ mạnh của mật khẩu có thể thêm phần tránh trùng với tên đăng nhập để tăng độ bảo mật
Trang 21LINK THUYẾT TRÌNH
https://youtu.be/3GBT2-M232g
18