1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO MÔN HỌC LẬP TRÌNH ỨNG DỤNG MÃ NGUỒN MỞ ĐỀ TÀI LẬP TRÌNH ỨNG DỤNG XEM THỜI TIẾT VÀ SỐ LIỆU COVID 19

45 15 0

Đ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 đề Lập Trình Ứng Dụng Xem Thời Tiết Và Số Liệu COVID 19
Tác giả Hoàng Ngọc Thành
Người hướng dẫn ThS. Trương Thị Hương Giang
Trường học Trường Đại Học Tây Nguyên
Chuyên ngành Công nghệ thông tin
Thể loại báo cáo
Năm xuất bản 2021
Thành phố Đắk Lắk
Định dạng
Số trang 45
Dung lượng 10,2 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

BÁO CÁO MÔN HỌC LẬP TRÌNH ỨNG DỤNG MÃ NGUỒN MỞ ĐỀ TÀI LẬP TRÌNH ỨNG DỤNG XEM THỜI TIẾT VÀ SỐ LIỆU COVID 19 1 Lý do chọn đề tài ​Do tình hình dịch covid 19 tại việt nam có nhưng chuyển biến phức tạp nên nhu cầu có một ứng dụng để xem thông tin về số ca nhiễm bệnh, số ca tử vong và những ca hồi phục trên cả thế giới nói chung và Việt Nam nói riêng từ đó lý do thực tiễn đó nên e đã chọn đề tài ứng dụng xem thông tin thời tiết và số liệu thống kê covid 19. ​Ứng dụng xem thời tiết và covid mang lại ý nghĩa khoa học thực tiễn giúp mọi người hiểu rõ hơn về tính nguy hiểm của dịch bệnh. 2 Mục đích nghiên cứu ​Mục đích nghiên cứu là giúp cho chúng ta nắm bắt và có cái nhìn khách quan và tính nguy hiểm của dịch bệnh trong và ngoài nước. ​Việc dịch bệnh covid 19 rất nguy hiểm thông qua số ca nhiễm và số cả tử vong lớn là rất đáng ngại để mọi người phòng tránh ​Từ đó nên mục đích xây dựng ứng dụng xem tình hình dịch covid 19 là nhu cầu thiết yếu để có thể đánh giá mức độ thực tế của dịch bệnh 3 Đối tượng nghiên cứu ​Ở đây đối tượng nghiên cứu là dịch bệnh covid 19 đang hoành hành trên cả thế giới trong đó có Việt Nam. Dịch bệnh do covid 19 gây ra sự náo loạn trên cả thế giới khiến người người nhà nhà đứng ngồi không yên. 4 Phạm vi nghiên cứu ​Vì covid đã lây lan và có mặt trên hầu hết các nước trên thế giới nên phạm vi nghiên cứu đã chia làm 2 phần trong đó là thế giới và Việt Nam

Trang 1

TRƯỜNG ĐẠI HỌC TÂY NGUYÊN

ThS Trương Thị Hương Giang

Đắk Lắk, tháng 09 năm 2021

Trang 2

TRƯỜNG ĐẠI HỌC TÂY NGUYÊN

ThS Trương Thị Hương Giang

Trang 3

Đắk Lắk, tháng 09 năm 2021

LỜI CẢM ƠN

Trong thời gian làm đồ án môn học, em đã nhận được nhiều sự giúp đỡ, đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô và bạn bè.

Em xin gửi lời cảm ơn chân thành đến cô Ths Trương Thị Hương Giang, giảng viên khoa Khoa học Tự nhiên và Công nghệ, cô đã tận tình hướng dẫn, chỉ bảo em trong suốt quá trình đồ án.

Em cũng xin chân thành cảm ơn các thầy cô giáo trong trường Đại học Tây Nguyên nói chung và các thầy cô trong khoa Khoa học Tự nhiên và Công nghệ nói riêng đã dạy dỗ cho chúng em những kiến thức về các môn học chuyên ngành Công nghệ thông tin, giúp chúng em có được cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ chúng em trong suốt quá trình học tập Cuối cùng, em xin chân thành cảm ơn gia đình và bạn bè đã luông tạo đièu kiện, quan tâm, giúp đỡ động viên em trong suốt quá trình học tập và hoàn thành đồ án này.

Em xin chân thành cảm ơn!

Trang 4

MỤC LỤC

Trang 5

DANH MỤC HÌNH ẢNH

Trang 6

ĐẶT VẤN ĐỀ

1 Lý do chọn đề tài

Do tình hình dịch covid 19 tại việt nam có nhưng chuyển biến phức tạp nên nhu cầu có một ứng dụng để xem thông tin về số ca nhiễm bệnh, số ca tử vong và những ca hồi phục trên cả thế giới nói chung và Việt Nam nói riêng

từ đó lý do thực tiễn đó nên e đã chọn đề tài ứng dụng xem thông tin thời tiết

và số liệu thống kê covid 19.

Ứng dụng xem thời tiết và covid mang lại ý nghĩa khoa học thực tiễn giúp mọi người hiểu rõ hơn về tính nguy hiểm của dịch bệnh.

2 Mục đích nghiên cứu

Mục đích nghiên cứu là giúp cho chúng ta nắm bắt và có cái nhìn khách quan và tính nguy hiểm của dịch bệnh trong và ngoài nước.

Việc dịch bệnh covid 19 rất nguy hiểm thông qua số ca nhiễm và số cả

tử vong lớn là rất đáng ngại để mọi người phòng tránh

Từ đó nên mục đích xây dựng ứng dụng xem tình hình dịch covid 19 là nhu cầu thiết yếu để có thể đánh giá mức độ thực tế của dịch bệnh

3 Đối tượng nghiên cứu

Ở đây đối tượng nghiên cứu là dịch bệnh covid 19 đang hoành hành trên cả thế giới trong đó có Việt Nam Dịch bệnh do covid 19 gây ra sự náo loạn trên cả thế giới khiến người người nhà nhà đứng ngồi không yên.

4 Phạm vi nghiên cứu

Vì covid đã lây lan và có mặt trên hầu hết các nước trên thế giới nên phạm vi nghiên cứu đã chia làm 2 phần trong đó là thế giới và Việt Nam

Trang 7

CHƯƠNG 1: GIỚI THIỆU VỀ FLUTTER 1.1 Giới thiệu

1.1.1 Giới thiệu chung

Flutter là mobile UI framework của Google để tạo ra các giao diện chất lượng cao trên iOS và Android trong khoảng thời gian ngắn Flutter hoạt động với những code sẵn có được sử dụng bởi các lập trình viên, các tổ

chức.Flutter hoàn toàn miễn phí và cũng là mã nguồn mở.

Các ứng dụng được xây dựng với Flutter hầu như không thể phân biệt với những ứng dụng được xây dựng bằng cách sử dụng Android SDK, cả về giao diện và hiệu suất Hơn nữa, với những tinh chỉnh nhỏ, chúng có thể chạy trên thiết bị iOS.

Flutter sử dụng Dart, một ngôn ngữ nhanh, hướng đối tượng với nhiều tính năng hữu ích như mixin, generic, isolate, và static type.

Flutter có các thành phần UI của riêng nó, cùng với một cơ chế để kết xuất chúng trên nền tảng Android và iOS Hầu hết các thành phần giao diện người dùng, đều sẵn dùng, phù hợp với các nguyên tắc của Material Design.

1.2 Lịch sử phát triển

 Tháng 5 năm 2017 phát hành bản alpha đầu tiên.

 Tháng 8 năm 2017 phát hành ứng dụng thương mại đầu tiên.

 Tháng 3 năm 2018 phát hành bản beta đầu tiên.

 Tháng 5 năm 2018 flutter tham gia 100 đại diện dành đầu của github.

 Tháng 12 năm 2018 Google phát hành bản flutter 1.0 và là bản ổn định

để có thể dung.

 Tháng 2 năm 2019 tại đại hội thế giới di động phát hành bản flutter 1.2.

 Tháng 5 năm 2019 flutter cho phiên bản xem trước trên web.

 Tháng 9 năm 2019 flutter phát hành bản 1.9.

 Tháng 12 năm 2019 Flutter interact Flutter 1.12 và Dart 2.7 , Flutter web hỗ trợ trong bản beta.

1.3 Mục tiêu phát triển

Flutter được phát triển để xây dựng giao diện có các hiệu ứng đa dạng

và phức tạp giúp nâng cao tính tương tác cho sản phẩm, làm cho sản phẩm trở

Trang 8

nên đẹp, đa dạng và sinh động, giúp lập trình viên giảm được rất nhiều thời gian không cần thiết khi xây dựng sản phẩm.

1.4 So sánh ưu nhược điểm

Viết code ứng dụng nhanh hơn: Như các bạn đã biết, tầng Framework của Flutter được viết bằng Dart- một ngôn ngữ hướng đối tượng hỗ trợ JIT(Just In Time), tức là hỗ trợ hot reload trong quá trình viết code Với hot reload bạn có thể cập nhật ứng dụng rất nhanh khi source code của bạn thay đổi mà không cần phải build lại bằng việc nhấn nút hot reload Trong quá trình viết ứng dụng, bạn sẽ thấy rõ điểm ưu việt này của hot reload.

Flutter dễ học và dễ sử dụng cách dùng nó để tạo ứng dụng di động vô cùng đơn giản Trước kia bạn đã dùng Java, Swift, React Native, thì khi sử dụng sang Flutter bạn sẽ thấy điểm khác biệt rõ nét là bạn có thể tạo ứng dụng gốc thực sự mà không cần code nhiều, hạn chế được nhiều lỗi.

Hiệu năng mạnh mẽ: Static language nhưng với syntax hiện đại, compiler linh động giữa AOT (for archive, build prod) và JIT (for development, hot reload).

Có thể chạy được giả lập mobile ngay trên web, tiện cho việc phát triển Các bộ đo lường chỉ số hiệu suất được hỗ trợ sẵn giúp lập trình viên kiểm soát tốt hiệu suất của ứng dụng.

Framework hiện đại: Dễ dàng tạo giao diện người dùng của bạn với framework hiện đại của Flutter và tập hợp các platform, layout và widget phong phú Giải quyết các thách thức giao diện người dùng khó khăn của bạn với các API mạnh mẽ và linh hoạt cho 2D, animation, gesture, hiệu ứng và hơn thế nữa.

Hỗ trợ đa nền tảng: Android, iOS, Desktop, Linux, Embbed System.

Trang 9

Thời gian xây dựng ứng dụng nhanh hơn, chi phí thấp hơn: Viết code nhanh, chỉ 1 basecode chạy trên 2 nền tảng Android, iOS vì vậy thời gian test, fix bugs sẽ nhanh hơn, tiết kiệm chi phí xây dựng app hơn

1.4.2 Nhược điểm

Thư viện và Supports hạn chế hơn so với native SDK Vì Flutter SDK mới chỉ phát hành chính thức vào năm 2017 nên cộng đồng chưa mạnh được như các nền tảng native.

Kích thước file lớn: Ví dụ cùng một app “Hello world”, App Flutter có kích thước là 4.7MB, App Kotlin là 550KB, App native Java là : 539KB Cũng dễ hiểu thôi, bởi cấu trúc của Flutter SDK chứa các thư viện để xử lý trên cả iOS và Android.

Bộ render UI gần như viết lại, không liên quan tới UI có sẵn của Framework native, dẫn đến memory sử dụng khá nhiều

Phải học thêm ngôn ngữ DART Dù dễ và thân thiện nhưng đây cũng là

1 rào cản quan trọng cần cân nhắc.

Mô hình dữ liệu mới: bloc pattern, DART Streaming; nếu đã quen với Redux khi làm phát triển React Native, bạn sẽ mất thời gian để học thêm

mô hình dữ liệu trong Flutter, mặc dù nó không khó.

Update quá nhanh… ngủ dậy sau một giấc thấy version tăng 2 số là bình thường Hiện đã stable nhiều hơn, với khi update cũng hiếm bị breaking change (lỗi source cũ).

1.4.3 So sánh với framework khác

Hình ảnh 1: Biểu đồ so sánh flutter và react native

Trang 11

Hình ảnh 4: Edit the system enviroment variables

Hình ảnh 5: Cấu hình

Trang 12

Hình ảnh 6: Path

Hình ảnh 7: Dán đường dẫn thư mục flutter SDK

Trang 13

Sau đó mở cmd kiểm tra với lệnh flutter doctor, sẽ hiển thị được như bên dưới hình

Hình ảnh 8: Kiểm tra cài đặt flutter

Tiếp theo chúng ta gõ lệnh flutter config

–android-studio-dir=”C:\Program Files\Android\Android Studio”

Hình ảnh 9: Sửa lỗi không nhận Android Studio

Tiếp theo gõ lệnh flutter doctor –android-licenses và màn hình

console sẽ thực hiện lệnh và khi có chỗ hỏi y/n chúng ta chọn yes để cấp phép cho flutter

Trang 14

Hình ảnh 10: Sửa lỗi Android toolchain Sau đó tất cả đều hiện tích xanh là chúng ta đã hoàn thành bước cài đặt.

Hình ảnh 11: Cài đặt thành công

1.6 Cấu trúc trong Flutter

Cấu trúc của flutter sau khi đợc tạo mới sẽ có các thư mục như hình bên dưới.

Hình ảnh 12: Cấu trúc thư mục flutter

Trang 15

CHƯƠNG 2: PHÂN TÍCH YÊU CẦU 2.1 Giới thiệu và cách thức giải quyết

Khi xây dựng ứng dụng xem thông tin của thời tiết và xem số lượng ca nhiễm Covid 19 sẽ có 2 phần là Backend và Fontend Backend có nhiệm vụ là lấy dữ liệu về thời tiết và covid 19 ( nhiệt độ, độ ẩm, số ca nhiễm, tử vong…).

Về phần Fontend đóng vai trò là giao diện để người dùng tương tác và hiển thị dữ liệu ra cũng như các chức năng của ứng dụng.

Phần giao diện của ứng dụng gồm 2 thành phần là xem dữ liệu thời tiết

và dữ liệu thống kê về tình hình Covid 19

Phần còn lại chính là Backend được lấy dữ liệu thông qua API, ứng dụng sẽ đọc dữ liệu từ API và xử lý dữ liệu và hiển thị lên phía Fontend cho người dùng.

Hình ảnh 13: Rest API

Trang 16

2.2 Phân tích hệ thống

Thời tiết Hiển thị tên thành phố đang sống và nhiệt độ cùng với tình trạng thời tiết Tìm kiếm thành phố Tìm kiếm và nhập tên thành phố muốn xem thời tiết

Covid 19

Bấm chưc năng này sẽ hiển thị ra tình hình covid trên thế giới và thành phố

Covid thế giới Hiển thị ra số liệu ca nhiễm, tử vong, lành bệnh trên toàn thế giới Covid quốc gia Hiển thị ra thanh tìm kiếm tên quốc gia

Tìm kiếm quốc gia

Nhập tên quốc gia sau đó sẽ hiển thị

dữ liệu covid về ca nhiễm, tử vong, lành bệnh trong nước đó

2.3 Yêu cầu hệ thống

- Tốc độ xử lý nhanh, mượt ít tốn thời gian.

- Giao diện thân thiện dễ dùng gọn gàng sạch đẹp.

Trang 17

CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG 3.1 Tạo mới ứng dụng trong Flutter

Để tạo mới một dự án flutter chúng ta khởi động cmd và tìm đến thư

mục chứa dự án và gõ câu lệnh flutter create myapp với myapp là tên của dự

án sau đó chúng ta sẽ có được.

Hình ảnh 14: Flutter sau khi được tạo mới Sau khi chạy dự án chúng ta sẽ có được demo như sau.

Hình ảnh 15: Chương trình demo

Trang 18

3.2 Xây dựng cấu trúc thư mục

Hình ảnh 16: Cấu trúc cây thư mục sau khi tạo mới

 Thư mục lib chứa tất cả các tệp liên quan đến fontend và backend.

 Thư mục pubspec.yaml dùng để chứa tất cả các liên kết đến các thư viện hỗ trợ cho flutter.

 Thư mục android và ios chứa các file liên quan đến việc chạy ứng dụng trên nền tảng android và ios cũng như để tinh chỉnh cho phù hợp với yêu cầu lập trình viên.

 Thư mục build là nơi mà chúng ta chuyển đổi từ code ra ứng dụng để chạy trên nền tảng android hay ios.

3.3 Cài đặt các gói bổ sung

 cupertino_icons: giúp flutter đùng được icons hỗ trợ bên ngoài.

 font_awesome_flutter: giúp sử dụng nhiều font hơn.

 http: để lấy dữ liệu từ các API http

Trang 19

Hình ảnh 17: Các gói bổ sung

3.4 Xây dựng bố cục cho ứng dụng

Hình ảnh 18: Giao diện tìm kiếm thời tiết thành phố

Trang 20

Hình ảnh 19: Giao diện thông tinm chi tiết của thành phố

Hình ảnh 20: Giao diện thông tin covid của thế giới

Trang 21

Hình ảnh 21: Giao diện thông tin covid được tìm kiếm

3.5 Xây dựng các thành phần cho ứng dụng

3.5.1 Xây dựng thanh navigation bên dưới

Phần code của giao diện:

Widget build(BuildContext context) {

Trang 22

BottomNavigationBarItem(

icon: Icon(FontAwesomeIcons.virus), label: "Covid-19",

3.5.2 Xây dựng thanh tìm kiếm

Phần code của giao diện:

Column(

mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[

Padding(

padding: EdgeInsets.fromLTRB(20, , 20, ), child: TextField(

controller: city,

decoration: InputDecoration(

focusedBorder: OutlineInputBorder( borderRadius: const BorderRadius.all( Radius.circular(30.0),

Trang 24

blurRadius: 20.0, // soften the shadow

spreadRadius: -10.0, //extend the shadow offset: Offset(

0.0, // Move to right 10 horizontally

0.0, // Move to bottom 10 Vertically

Icon(Icons.cloud_circle_sharp),

Text(

currently != null

? currently.toString()

Trang 25

3.5.4 Xây dựng giao diện hiển thị thời tiết sau khi tìm kiếm

Phần code giao diện:

Widget build(BuildContext context) {

decoration: new BoxDecoration(

image: new DecorationImage(

image: new AssetImage('assets/weather.gif'),

Trang 27

]),

),

Padding( padding: EdgeInsets.only(top: 20.0), child: Row(children: <Widget>[ Icon(Icons.cloud_circle_sharp), SizedBox( width: 10, ),

Text( currently != null ? currently.toString() : "Loading", style: TextStyle( color: Colors.black, fontSize: 30.0, //fontWeight: FontWeight.w700, fontFamily: 'JosefinSans'), ),

]),

),

],

),

]),

),

Expanded( child: Container( color: Color.fromRGBO(236, 229, 220, 0.6), child: Container( margin: EdgeInsets.fromLTRB(30, 50, 30, 80), //color: Colors.red, decoration: BoxDecoration( borderRadius: BorderRadius.all( Radius.circular(30.0), ),

color: Colors.white, boxShadow: [ //background color of box BoxShadow( color: Colors.grey, blurRadius: 20.0, // soften the shadow spreadRadius: -10.0, //extend the shadow offset: Offset( 0.0, // Move to right 10 horizontally 0.0, // Move to bottom 10 Vertically ),

)

],

),

//child: Padding(

//padding: EdgeInsets.all(30.0),

Trang 28

children: <Widget>[

ListTile(

leading: FaIcon(FontAwesomeIcons.thermometerHalf, color: Colors.black),

title: Text("Temperature",

style: TextStyle(

fontFamily: 'Syne', fontWeight: FontWeight.bold)), trailing: Text(

temp != null ? temp.toString() + "\u00b0" : "Loading", style: TextStyle(fontSize: 15)),

),

ListTile( leading: FaIcon(FontAwesomeIcons.cloud, color: Colors.black), title: Text("Weather", style: TextStyle( fontFamily: 'Syne', fontWeight: FontWeight.bold)), trailing: Text( description != null ? description.toString() : "Loading", style: TextStyle(fontSize: 15)), ),

ListTile( leading: FaIcon(FontAwesomeIcons.tint, color: Colors.black), title: Text("Humidity", style: TextStyle( fontFamily: 'Syne', fontWeight: FontWeight.bold)), trailing: Text( humidity != null ? humidity.toString() + "%" : "Loading", style: TextStyle(fontSize: 15)), ),

ListTile( leading: FaIcon(FontAwesomeIcons.wind, color: Colors.black), title: Text("Wind Speed", style: TextStyle( fontFamily: 'Syne', fontWeight: FontWeight.bold)), trailing: Text( windspeed != null ? windspeed.toString() + "m/s" : "Loading", style: TextStyle(fontSize: 15)), ),

],

),

)),

),

]),

Trang 29

3.5.5 Xây dựng thanh navigation chia thế giới và quốc gia

Phần code giao diện:

Widget build(BuildContext context) {

Size size = MediaQuery.of(context).size;

Trang 30

children: <Widget>[

NavigationOption(

title: "Thế Giới",

selected: navigationStatus == NavigationStatus.GLOBAL, onSelected: () {

setState(() {

navigationStatus = NavigationStatus.GLOBAL;

});

},

),

NavigationOption( title: "Quốc Gia", selected: navigationStatus == NavigationStatus.COUNTRY, onSelected: () { setState(() { navigationStatus = NavigationStatus.COUNTRY; });

},

)

],

),

),

],

),

);

}

3.5.6 Xây dựng giao diện covid 19 thế giới

Ngày đăng: 03/03/2022, 18:30

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w