1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo project i đề tài xây dựng ứng dụng lịch

30 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề XÂY DỰNG ỨNG DỤNG LỊCH
Tác giả Nguyễn Anh Đức, Ngô Văn Tân
Trường học ĐẠI HỌC BÁCH KHOA HÀ NỘI
Chuyên ngành Công nghệ thông tin
Thể loại Project
Thành phố Hà Nội
Định dạng
Số trang 30
Dung lượng 3,68 MB

Cấu trúc

  • 1. Giới thiệu (4)
    • 1.1 M c tiêu c a d ụ ủ ự án (0)
    • 1.2 do Lý chọn đề tài (0)
  • 2. Tổng quan về ứng dụng lịch (5)
    • 2.1 Hiển thị lịch theo tháng và năm (5)
    • 2.2 Thêm ghi và nhớ sự kiện (0)
    • 2.3 Lưu trữ sự kiện trong danh sách liên kết (0)
    • 2.5 Lưu trữ dữ liệu sự kiện (5)
    • 2.6 Kiểm tra xóa và sự kiện cũ (0)
  • 3. Phân tích Thiết kế Chi Tiết (6)
    • 3.4 Xem Danh Sách Sự Kiện (15)
    • 3.5 Hiển thị lịch (16)
    • 3.6 Chuyển Đổi Lịch Âm (17)
      • 3.6.1 Tính toán thời gian (17)
      • 3.6.2 Xác định tháng âm lịch chứa Đông Chí (19)
      • 3.6.3 Xác định năm âm lịch (20)
      • 3.6.4 Chuyển đổi từ ngày dương sang ngày âm (21)
    • 3.7 Xử Lý Ngoại Lệ (27)
    • 3.8 C u Trúc File ấ Lưu Trữ (0)
  • 4. KIỂM THỬ VÀ SỬA LỖI (29)
    • 4.1 Khó khăn (29)
    • 4.2 Giải pháp (29)
  • 5. Kết luận (30)

Nội dung

Dưới đây là các chức năng chính và tính năng quan trọng của ứng d ng: ụ2.1 Hiển thị lịch theo tháng và năm:- Ứng d ng có kh ụ ả năng hiển thị l ch dị ựa trên tháng và năm được ch n bọ ởi

Giới thiệu

do Lý chọn đề tài

Ứng dụng lịch là một ứng dụng đơn giản được phát triển để giúp người dùng quản lý thời gian cá nhân và theo dõi các s ựkiện và hoạt động trong cu c s ng hàng ộ ố ngày Dưới đây là các chức năng chính và tính năng quan trọng của ứng d ng: ụ

2.1 Hiển thị lịch theo tháng vànăm:

- Ứng d ng có kh ụ ả năng hiển thị l ch dị ựa trên tháng và năm được ch n bọ ởi người dùng

- Người dùng có th xem các tháng khác nhau và d dàng duy t qua các tháng ể ễ ệ tiếp theo hoặc trước đó.

2.2 Thêm ghi và nhớ sự kiện:

- Ứng dụng cho phép người dùng thêm s ựkiện ho c hoặ ạt động vào lịch cho m t ngày c ộ ụthể

- M i s ỗ ựkiện bao g m thông tin v ồ ềthời gian bắt đầu và nội dung liên quan đến s ựkiện đó.

2.3 Lưu trữ sự kiện trong danh sách liên kết:

- Các s ựkiện đã ghi nhớ được lưu trữ trong m t danh sách liên k t, cho phép ộ ế người dùng d dàng qu n lý và xem l i các s ễ ả ạ ựkiện đã tạo

- Ứng d ng cung c p kh ụ ấ ả năng chuyển đổ ngày dương sang ngày âm lịi ch, giúp người dùng có cái nhìn t ng quan v c lổ ề ả ịch dương lẫn lịch âm

2.5 Lưu trữ dữ liệu sự kiện:

- Thông tin v các s ề ựkiện và hoạt động được lưu trữ trong một tệp tin để đảm bảo r ng d ằ ữliệu không b m t sau khi ng dị ấ ứ ụng đượ ắt và khc t ởi động lại

2.6 Kiểm tra và xóa sự kiện cũ:

- Ứng dụng kiểm tra và xóa các s ựkiện đã qua thờ ạn quy định, giúp người h i dùng duy trì l ch trình s ch s và c p nh ị ạ ẽ ậ ật. Ứng dụng lịch giúp người dùng tổ chức cuộc sống hàng ngày, lên k ếhoạch cho các sự kiện quan tr ng và theo dõi th i gian m t cách d ọ ờ ộ ễ dàng Nó cũng cung cấp tính linh ho t và ti n ích trong vi c ghi chú và xem l i các s ạ ệ ệ ạ ựkiện đã diễn ra trong quá khứ hoặc s p tắ ới.

Tổng quan về ứng dụng lịch

Hiển thị lịch theo tháng và năm

- Ứng d ng có kh ụ ả năng hiển thị l ch dị ựa trên tháng và năm được ch n bọ ởi người dùng

- Người dùng có th xem các tháng khác nhau và d dàng duy t qua các tháng ể ễ ệ tiếp theo hoặc trước đó.

2.2 Thêm ghi và nhớ sự kiện:

- Ứng dụng cho phép người dùng thêm s ựkiện ho c hoặ ạt động vào lịch cho m t ngày c ộ ụthể

- M i s ỗ ựkiện bao g m thông tin v ồ ềthời gian bắt đầu và nội dung liên quan đến s ựkiện đó.

2.3 Lưu trữ sự kiện trong danh sách liên kết:

- Các s ựkiện đã ghi nhớ được lưu trữ trong m t danh sách liên k t, cho phép ộ ế người dùng d dàng qu n lý và xem l i các s ễ ả ạ ựkiện đã tạo

- Ứng d ng cung c p kh ụ ấ ả năng chuyển đổ ngày dương sang ngày âm lịi ch, giúp người dùng có cái nhìn t ng quan v c lổ ề ả ịch dương lẫn lịch âm

2.5 Lưu trữ dữ liệu sự kiện:

- Thông tin v các s ề ựkiện và hoạt động được lưu trữ trong một tệp tin để đảm bảo r ng d ằ ữliệu không b m t sau khi ng dị ấ ứ ụng đượ ắt và khc t ởi động lại

2.6 Kiểm tra và xóa sự kiện cũ:

- Ứng dụng kiểm tra và xóa các s ựkiện đã qua thờ ạn quy định, giúp người h i dùng duy trì l ch trình s ch s và c p nh ị ạ ẽ ậ ật. Ứng dụng lịch giúp người dùng tổ chức cuộc sống hàng ngày, lên k ếhoạch cho các sự kiện quan tr ng và theo dõi th i gian m t cách d ọ ờ ộ ễ dàng Nó cũng cung cấp tính linh ho t và ti n ích trong vi c ghi chú và xem l i các s ạ ệ ệ ạ ựkiện đã diễn ra trong quá khứ hoặc s p tắ ới.

Lưu trữ dữ liệu sự kiện

- Thông tin v các s ề ựkiện và hoạt động được lưu trữ trong một tệp tin để đảm bảo r ng d ằ ữliệu không b m t sau khi ng dị ấ ứ ụng đượ ắt và khc t ởi động lại

2.6 Kiểm tra và xóa sự kiện cũ:

- Ứng dụng kiểm tra và xóa các s ựkiện đã qua thờ ạn quy định, giúp người h i dùng duy trì l ch trình s ch s và c p nh ị ạ ẽ ậ ật. Ứng dụng lịch giúp người dùng tổ chức cuộc sống hàng ngày, lên k ếhoạch cho các sự kiện quan tr ng và theo dõi th i gian m t cách d ọ ờ ộ ễ dàng Nó cũng cung cấp tính linh ho t và ti n ích trong vi c ghi chú và xem l i các s ạ ệ ệ ạ ựkiện đã diễn ra trong quá khứ hoặc s p tắ ới.

Phân tích Thiết kế Chi Tiết

Xem Danh Sách Sự Kiện

- Mỗi sự kiện lần lượt chiếm 2 dòng trong file lưu trữ Hàm readCalendar(calendar) sẽ đọc thông tin trong file và lưu vào vector sự kiện calendar

- Hàm delete_event(calendar) sẽ kiểm tra các sự kiện trong vector sự kiện calendar và xóa các sự kiện không hợp lệ bằng cách duyệt iterator it trong calendar Nếu sự kiện đó không thỏa mãn hàm check_1year(it->date) thì sẽ bị xóa khỏi danh sách

- Các sự kiện hợp lệ sẽ được in ra bằng vòng lặp for duyệt qua các sự kiện I thuộc caledar

- Các event trong calendar sẽ được lưu lại trong file txt bằng hàm writeCalendar(calendar).

Hiển thị lịch

- Gọi hàm getCurrentDate() để lấy thông tin về ngày hiện hành và lưu vào các biến year month, , và day Hàm này dựa trên thời gian hệ thống để xác định ngày hiện tại

- int seeing_month, seeing_year;: Khai báo biến seeing_month và seeing_year để lưu trữ thông tin về tháng và năm mà bạn đang xem lịch (ban đầu sẽ là tháng và năm hiện hành)

- seeing_month = month; seeing_year = year;: Gán giá trị của month và year vào seeing_month và seeing_year để thiết lập mặc định cho việc xem lịch

- print_calendar(month, year);: Gọi hàm print_calendar() để in lịch cho tháng và năm hiện hành (month và yearchứa thông tin về ngày hiện tại) Hàm này được gọi ban đầu để hiển thị lịch cho ngày hiện tại.

Chuyển Đổi Lịch Âm

- Ứng d ng cung cụ ấp tính năng chuyển đổi ngày dương sang ngày âm lịch dựa trên tính toán l ch âm ị

Chương trình sử dụng Julian Date (JD) đểthực hi n các phép tính JD là m t h ệ ộ ệ thống giúp bi u di n thể ễ ời gian dưới dạng số ngày, t mừ ột điểm thời gian cố định

- UniversalToJD(int day, int month, int year): Hàm này chuyển đổi ngày tháng năm dương lịch sang s ố ngày Julius tương ứng Nó s d ng thu t toán tính toán ử ụ ậ

JD dựa trên ngày, tháng, và năm cung cấp

+ Hàm nhận 3 tham số đầu vào kiểu int là ngày, tháng, năm hiện tại và - đổi sang số ngày Julius( Lấy điểm gốc là ngày 1/1/4713 (TCN)) day là một số nguyên từ 1 đến 31, month từ 1 đến 12 và year là một số nguyên lớn hơn -4712 Hàm trả về kết quả là 1 số thực kiểu double

+ Đầu tiên, kiểm tra năm và tháng có nằm sau ngày 15/10/1582 hay không Đây là ngày mà lịch chuyển từ lịch Julian sang lịch Gregorian, nên cách tính số ngày Julius phải khác nhau trước và sau ngày này

• Nếu ngày, tháng và năm nằm sau ngày 15/10/1582 (year > 1582 hoặc year

== 1582 && month > 10 hoặc year == 1582 && month == 10 && day > 14), thì sử dụng công thức tính số ngày Julius sau thay đổi lịch Gregorian:

- 367 * year: Tính số ngày từ năm 0 đến năm hiện tại

- int(7 * (year + int((month + 9) / 12)) / 4): Điều chỉnh cho năm nhuận (leap year)

- int(3 * (int((year + (month - 9) / 7) / 100) + 1) / 4): Điều chỉnh cho các năm lớn (century years) không nhuận

- int(275 * month / 9): Điều chỉnh cho tháng

- day: Số ngày trong tháng

- 1721028.5: Đây là một hằng số để đảm bảo rằng số ngày Julius tính được chính xác

• Nếu ngày, tháng và năm nằm trước ngày 15/10/1582, sử dụng công thức tính số ngày Julius trước thay đổi lịch:

- 367 * year: Tính số ngày từ năm 0 đến năm hiện tại

- int(7 * (year + 5001 + int((month - 9) / 7)) / 4): Điều chỉnh cho năm nhuận và năm lớn trước thay đổi lịch

- int(275 * month / 9): Điều chỉnh cho tháng

- day: Số ngày trong tháng

- 1729776.5: Đây là một hằng số tương tự để đảm bảo tính toán chính xác Cuối cùng, hàm trả về số ngày Julius được tính toán dựa trên ngày, tháng và năm đầu vào Số ngày Julius này có thể được sử dụng để thực hiện các tính toán liên quan đến thời gian và lịch

- LocalFromJD(double JD): Hàm này chuyển đổ ối s ngày Julius thành ngày tháng năm dương lịch dựa trên múi gi ờ địa phương

+ Hàm nh n tham s u vào ậ ố đầ JD ( Juliusday - s ngày Julius) ki u s ố ể ốthực và tr ả về vector chứa ngày, tháng, năm tương ứng với lịch dương.

+ Hàm UniversalFromJD s ẽnhận tham s là JD + ố LOCAL_TIMEZONE/24.0 để tính số ngày Julius theo gi Local - C ờ ụthể ở đây LOCAL_TIMEZONE = 7.0 là múi gi c a Vi t Nam ờ ủ ệ

- LocalToJD(int int int D, M, Y): Hàm này chuyển đổi ngày tháng năm dương lịch thành s ngày Julius d a trên múi gi ố ự ờ địa phương

> Hàm hoạt động ngược lại so với hàm LocalFromJD

3.6.2 Xác định tháng âmlịch chứa Đông Chí:

- LunarMonth11(int Y): Hàm này xác định tháng âm l ch chị ứa Đông Chí (Tháng 11 âm l ch) c a mị ủ ột năm cụ ể Điều này đượ th c thực hiện bằng cách tính toán thời điểm Sóc (New Moon) gần Đông Chí

- Hàm LunarMonth11 tính tháng âm l ch ch ị ứa ngày Đông chí trong một năm dương lịch được xác định bởi tham s ố int Y (năm dương lịch) Tháng âm lịch chứa ngày Đông chí là một tháng quan tr ng trong l ch Âm, và nó ọ ị thường là tháng 11 ho c tháng 12 trong l ch âm l ch ặ ị ị

- Tính khoảng cách (offset) từ ngày 31/12 của năm Y trong lịch dương lịch đến một ngày gốc cụ thể trong lịch Julian Điều này được thực hiện bằng cách trừ đi một giá trị cố định (2415021.076998695) từ kết quả của hàm LocalToJD(31, 12, Y) Hàm này giúp tính toán khoảng cách này

- Dựa trên khoảng cách tính được ở bước 1, tính toán giá trị k bằng cách chia khoảng cách đó cho chu kỳ trung bình của một tháng âm lịch (29.530588853 ngày) Giá trị k này thường cho biết là tháng âm lịch thứ bao nhiêu trong chuỗi các tháng âm lịch

- Sử dụng giá trị k tính toán ngày Mặt trăng mới (New Moon) bằng cách gọi hàm NewMoon(k) Hàm này trả về ngày Mặt trăng mới ứng với tháng âm lịch thứ k

- Sử dụng kết quả ngày Mặt trăng mới (trong dạng Julian Date - jd) tính toán ngày, tháng và năm của tháng âm lịch chứa ngày Đông chí bằng cách gọi hàm LocalFromJD(jd) Kết quả trả về là một vector chứa thông tin về ngày, tháng và năm âm lịch

- Tính kinh độ của Mặt trời (Sun Longitude) vào thời điểm nửa đêm (local midnight) của ngày âm lịch được tính ở bước 4 bằng cách gọi hàm

SunLongitude với tham số LocalToJD(ret[0], ret[1], ret[2]) Kinh độ của Mặt trời cho biết vị trí của Mặt trời trên đường hoàng đạo

- Kiểm tra xem kinh độ của Mặt trời có lớn hơn giá trị 3*PI/2 (tương ứng với Đông chí) hay không Nếu có, thì tháng âm lịch được tính trước Đông chí và

20 k giảm đi 1 Sau đó, hàm tính lại ngày Mặt trăng mới bằng cách gọi

→ Cuối cùng, hàm trả về ngày, tháng và năm âm lịch của tháng âm lịch chứa ngày Đông chí

- LunarYear(int Y): Hàm này xác nh toàn b đị ộ năm âm lịch (13 tháng) dựa trên năm dương lịch Nó tính toán các tháng âm lịch và xác định năm nhuận

- Hàm LunarYear tính toán thông tin về lịch âm lịch của một năm dương lịch

Y Nó trả về một vector của vector, trong đó mỗi vector con chứa thông tin về một tháng trong lịch âm lịch bao gồm ngày, tháng, năm âm lịch và thông tin về tháng nhuận (nếu có).

- Khai báo biến ret là một vector của vector để lưu thông tin về lịch âm lịch Biến này sẽ được trả về cuối cùng Gọi hàm LunarMonth11(Y-1) để tính tháng âm lịch chứa ngày Đông chí của năm trước đó (Y-1) Điều này được thực hiện để xác định tháng 11 âm lịch của năm trước và tính toán chu kỳ của tháng âm lịch.

- Tính toán Julian Date của tháng 11 âm lịch được xác định ở bước 2 và lưu vào biến jdMonth11A

- Tính giá trị k bằng cách sử dụng jdMonth11A và công thức chu kỳ của tháng âm lịch Giá trị này đại diện cho k số tháng âm lịch trôi qua từ ngày gốc đến tháng 11 âm lịch

- Gọi hàm LunarMonth11(Y) để tính tháng âm lịch chứa ngày Đông chí của năm Y

- Tính khoảng cách (offset) giữa ngày Đông chí của năm và ngày Mặt trăng Y mới của tháng 11 âm lịch của năm Y-1 Nếu khoảng cách này lớn hơn 365 ngày, thì được xem xét là năm nhuận trong lịch âm lịch

Xử Lý Ngoại Lệ

- Ứng d ng x lý các ngo i l ụ ử ạ ệ như nhập ngày không h p l ợ ệhoặc nh p s ậ ựkiện không thành công b ng cách cung cằ ấp thông báo cho người dùng

- Hàm check_1year kiểm tra xem ngày được truyền vào (sdate) kiểu string- có nằm trong kho ng mả ột năm trước ho c mặ ột năm sau so với ngày hi n hành ệ không

Cách hoạt động của hàm:

- Trích xuất ngày, tháng và năm từ chuỗi sdate

- Lấy thời gian hiện tại và trích xuất năm hiện hành

- So sánh năm của sdate với năm hiện hành và xác định khoảng thời gian là một năm trước hoặc một năm sau so với năm hiện hành

- Kiểm tra xem ngày trong sdate nằm trong khoảng thời gian đã xác định hay không Nếu có, hàm trả về true, ngược lại trả về false

- Hàm check_3year là hàm không cho nhập sự kiện trước hiện tại 3 năm

- Cách hoạt động của hàm check_3year tương tự như hàm check_1year 3.8 Cấu Trúc File Lưu Trữ:

- Cấu trúc file lưu trữ sự kiện trong chương trình của bạn dựa trên văn bản (text file), và mỗi s ựkiện được lưu dưới dạng m t dòng trong tộ ệp tin Dưới đây là cấu trúc cơ bản của file lưu trữ sự kiện:

- Cấu trúc file lưu trữ sự kiện trong chương trình của bạn dựa trên văn bản (text file), và mỗi s ựkiện được lưu dưới dạng m t dòng trong tộ ệp tin Dưới đây là cấu trúc cơ bản của file lưu trữ sự kiện:

- Ngày (Date): Ngày c a s ủ ựkiện được lưu trữ ở đầu mỗi dòng Đây là thông tin quan trọng để phân chia s ựkiện theo ngày

- Giờ bắt đầu (Start Time): Giờ bắt đầu của s ựkiện được lưu trữ sau ngày, được phân tách b ng m t dằ ộ ấu g ch ngang "-ạ "

- Nội dung (Content): N i dung cộ ủa s ựkiện được lưu trữ sau giờ bắt đầu.

KIỂM THỬ VÀ SỬA LỖI

Khó khăn

+ Tính toán ngày đầu tiên trong 1 tháng b t k s ấ ỳ ẽ rơi vào thứ ấy m

+ Khi thêm , update 1 s ựkiện thì d u các s ữliệ ựkiện cũ trong file đã bị xóa đi + Các hàm tính toán ngày âm còn sai s ố

Giải pháp

+ S dử ụng hàm LocalTime trong thư viện của C++ để lấy thông tin về ngày tháng trong thư viện

+ Trước khi ch nh s a file d ỉ ử ữliệu, đọc d ữliệu cũ bằng hàm readCalendar, sau khi th c hi n c p nh t thì s ghi d u mự ệ ậ ậ ẽ ữliệ ới lên file b ng hàm writeCalendar ằ Như vậy dữ liệu trong file lưu trữ sự kiện s không mất đi ẽ

+ Điều chỉnh tăng độ chính xác của thu t toán x p x ậ ấ ỉ2pi

Ngày đăng: 13/06/2024, 16:33

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w