Thứ Năm, 10 tháng 11, 2016

Rename file film hàng loạt bằng ứng dụng C# đơn giản

Đặt vấn đề:
Ví dụ có các file với tên dạng như sau:

PhimMoi.Net---Tap.81-Dao.Hai.Tac-One.Piece-1999-Vietsub-360p.mp4
PhimMoi.Net---Tap.82-Dao.Hai.Tac-One.Piece-1999-Vietsub-360p.mp4
PhimMoi.Net---Tap.83-Dao.Hai.Tac-One.Piece-1999-Vietsub-360p.mp4
...

Để đổi tên cho đẹp thành dạng: 

One Piece - 81ஜ763.mp4
One Piece - 82ஜ763.mp4
One Piece - 83ஜ763.mp4

Mình đã viết một app nho nhỏ để làm được điều này:


Bạn chỉ cần chọn đường dẫn chứa phim, chọn định dạng của phim để load.
Lưu ý số thứ tự tên phim nằm ở số thứ 1 (81, 82, 83...) còn số thứ 2 là 1999, vì vậy bạn chọn Tách số thứ 1.
Rồi gõ tên cần đổi, tổng số tập của phim rồi nhấn Đổi tên.
Thế là xong.



Thứ Hai, 22 tháng 8, 2016

Semantic UI CSS Framework (CSS only)

Giới thiệu:
Trong bài viết này tôi giới thiệu đến các bạn một framework mới gọi là Semantic UI framework giúp tạo layout và các thành phần khác của web hỗ trợ cơ chế responsive mang tính chất ngữ nghĩa, giúp người phát triển dễ dàng tiếp cận. Ngoài ra nó còn cung cấp một thư viện với rất nhiều loại control khác nhau giúp cho người dùng có thể dễ dàng sử dụng một cách thoải mái, nhanh chóng, có thẻ lựa chọn giao diện. Bên cạnh đó nó còn là một framework mã nguồn mở.
Đây là một framework tương tự như Bootstrap nhưng thư viện nhiều hơn, do đó các bạn nên nghiên cứu và ứng dụng nó trong quá trình phát triển các ứng dụng của mình sau này.
===
Link tải trên Github: https://github.com/Semantic-Org/Semantic-UI-CSS
Trang chủ, document: http://semantic-ui.com/

Thứ Ba, 19 tháng 7, 2016

TỔNG HỢP TẤT CẢ THỂ LOẠI MANGA NHẬT BẢN

TỔNG HỢP TẤT CẢ THỂ LOẠI MANGA NHẬT BẢN
1. 4-koma: Truyện tranh 4 khung, dọc từ trên xuống, ngắn gọn, súc tích, nội dung thường nhẹ nhàng và hài hước.
2. Action: Thể loại này thường có nội dung về đánh nhau, bạo lực, hỗn loạn, với diễn biến nhanh. Ví dụ: Arachnid, Cavalier of the Abyss, Seirei Tsukai no Kenbu,...
3. Adult: Thể loại có đề cập đến vấn đề nhạy cảm, chỉ dành cho tuổi 17+.
4. Adventure: Thể loại phiêu lưu, mạo hiểm, thường là hành trình của các nhân vật. Ví dụ: Onepiece, Fairy Tail, Magi - Labyrinth of magic,...
5. Angst: Truyện miêu tả sự đau khổ của nhân vật. Ví dụ: Socrates in Love, Confidential Confessions, Battle Royale, La Esperança,...
6. Bishojo: Còn gọi là "Moe",là thể loại truyện có các nhân vật nữ xinh xắn. Ví dụ: Geijutsuka Art Design Class, K-on!, Lucky Star,...
7. Bishonen: Tương tự Bishojo nhưng là thể loại có các nhân vật chính nam điển trai. Ví dụ: Free!, Hetalia,...
8. Chanbara: Thể loại truyện kiếm hiệp, nói về những người sử dụng kiếm - Lãng khách. Ví dụ: Rurouni Kenshin, Black Lagoon, Claymore,...
9. Comedy: Còn gọi là "Humor". Thể loại có các tình tiết gây cười, các xung đột nhẹ nhàng nhưng tạo được tiếng cười nơi độc giả, vài bộ còn mang chất "bựa" rất cao. Ví dụ: Gintama, Horimiya, Girl the Wild's,...
10. Dementia: Thể loại truyện "hâm hâm điên điên",chả giống ai. Ví dụ: Cat Soup, Devil Does Exist,...

11. Parody: Thể loại hài hước, nhái hay chọc những anime/manga. Ví dụ: Angel Blade, Good Luck Girl!,...
12. Doujinshi (hay Fanfiction): Thể loại truỵện phóng tác do fan hay có thể cả những Mangaka khác với tác giả truyện gốc. Tác giả vẽ Doujinshi thường dựa trên những nhân vật gốc để viết ra những câu chuyện theo sở thích của mình. Ví dụ: Doremon chế,...
13. Drama: Có tính kịch. Thể loại mang đến cho người xem những cảm xúc khác nhau: buồn bã, căng thẳng thậm chí là bi phẫn. Ví dụ: Defense Devil, Attack on Titan,...
14. Ecchi: Thể loại ở ranh giới giữa Hentai và Non-Hentai. Thường có những tình huống nhạy cảm nhằm lôi cuốn và gây cười người xem. Ví dụ: To Love Ru Darkness, Trinity Seven,...
15. Fantasy: Thể loại xuất phát từ trí tưởng tượng phong phú, từ pháp thuật đến thế giới trong mơ thậm chí là những câu chuyện thần tiên. Ví dụ: Fairy Tail, Akame ga Kiru!, Inuyasha,...
16. Gekiga: còn gọi là Kịch họa. Truyện có nội dung nghiêm túc. Không phải tất cả manga đều có mục đích giải trí đơn thuần. Nhiều manga được người đọc đọc để hiểu biết thêm về lịch sử, chính trị, hoặc những kiến thức khác, nó được sáng tác bởi một số họa sĩ truyện tranh nghiêm túc hơn và không muốn thương phẩm của họ bị coi là manga, mạn họa, những hình vẽ lung tung. Tuy vậy, qua thời gian Gekiga dần biến thành trường phái manga lập dị. Ví dụ: Lone Wolf and Cub, A Drifting Life,...
17. Gender Bender: Là một thể loại trong đó giới tính của nhân vật bị lẫn lộn: nam hoá thành nữ, nữ hóa thành nam... Ví dụ: 1/2 Ranma,...
18. Harem: Thể loại truyện tình cảm, lãng mạn mà trong đó, nhiều nhân vật nữ thích một nam nhân vật chính. Ví dụ: Date a Live, Pureblood Boyfriend, Lotte no Omocha!,...
19. Harry Stu: Là thể loại manga có nhân vật nam được miêu tả như thiên thần, luôn làm được mọi việc, có thể đó là ước muốn của tác giả và tác giả hoà mình hoặc cải trang thành nhân vật. Ví dụ: Black Butler,...

20. Hentai: Truyện có những cảnh "làm tình",.v.v.,thôi không cần nói cũng biết... Có 2 nhánh phụ:
+Redikomi: Hentai thiên hướng cho phụ nữ đứng tuổi
+Seijin: Hentai thiên hướng cho nam giới đứng tuổi
Ngoài ra, "Lemon" cũng là 1 thể loại gần hentai. Truyện thiên về miêu tả mối quan hệ thể xác , được khai thác rất kỹ .
21. Historical: Thể loại có liên quan đến thời xa xưa. Ví dụ: Vinland Saga, Ookami-heika no hanayome,...
22. Horror: rùng rợn, nghe cái tên là bạn đã hiểu thể loại này có nội dung thế nào. Nó làm cho bạn kinh hãi, khiếp sợ, ghê tởm, run rẩy, có thể gây sock - một thể loại không dành cho người yếu tim. Ví dụ: Death Note, Tokyo Ghoul,...
23. Incest: Truyện loạn luân , chỉ mối quan hệ thể xác giữa các thành viên trong gia đình.
24. Josei: Còn gọi là Redisu. Là một thể loại của manga được sáng tác chủ yếu bởi phụ nữ cho những độc giả nữ từ 18 đến 30. Josei manga có thể miêu tả những lãng mạn thực tế , nhưng trái ngược với hầu hết các kiểu lãng mạn lí tưởng của Shoujo manga với cốt truyện rõ ràng, chín chắn. Ví dụ: Chihayafuru, Bokura no Kiseki, Natsume Yuujinchou,...
25. Kodomo: Thể loại Manga dành cho trẻ em,nhất là các bé trai. Ví dụ: Doraemon, Kiteretsu Daihyakka,...
26. Mafia: Truyện nói về xã hội đen. Ví dụ: Shichifuku Mafia,...
27. Martial Arts: Thể loại võ thuật chiến đấu,từ các trận đánh nhau, tự vệ đến các môn võ thuật như akido, karate, judo hay taekwondo, kendo, các cách né tránh. Ví dụ: Yaiba, The Gamer, Beelzebub,...
28. Mary Sue: Như Harry Stu nhưng là nhân vật nữ. Ví dụ: Medaka Box,...

29. Mature: Thể loại dành cho lứa tuổi 17+ bao gồm các pha bạo lực, máu me, chém giết, tình dục ở mức độ vừa.
30. Mecha: còn được biết đến dưới cái tên meka hay mechs, là thể loại nói tới những cỗ máy biết đi. Ví dụ: Guilty Crown, Gundam,...
31. Mystery: cũng gọi là "Suirin". Thể loại thường xuất hiện những điều bí ấn không thể lí giải được và sau đó là những nỗ lực của nhân vật chính nhằm tìm ra câu trả lời thỏa đáng. Ví dụ: Owari no seraph, Iris Zero, Detective Conan,...
32. Omake: Một số hoạ sĩ manga xuất bản thêm những phần phụ, thỉnh thoảng không ăn nhập gì với cốt truyện truớc, người ta gọi đó là omake (phần thêm). Ví dụ: Doraemon thêm, Đội quân Doraemon,...
33. One shot: Những truyện ngắn, thường là 1 chapter. Ví dụ: Naruto: Road to Ninja,...
34. Psychological: Thể loại liên quan đến những vấn đề về tâm lý của nhân vật ( tâm thần bất ổn, điên cuồng ...). Ví dụ: Black Jack, Oukoku Game, Imawa no Kuni no Alice,...
35. Romance: Thường là những câu chuyện về tình yêu. Ở đây chúng ta sẽ lấy ví dụ như tình yêu giữa một người con trai và con gái, bên cạnh đó đặc điểm thể loại này là kích thích trí tưởng tượng của bạn về tình yêu. Ví dụ: Nữ hoàng Ai Cập,...
36. School Life: Trong thể loại này, ngữ cảnh diễn biến câu chuyện chủ yếu ở trường học. Ví dụ: Love live!, Ao haru Ride, Hikaru no go,...
37. Sci-fi: Bao gồm những chuyện khoa học viễn tưởng, đa phần chúng xoay quanh nhiều hiện tượng mà liên quan tới khoa học, công nghệ, tuy vậy thường thì những câu chuyện đó không gắn bó chặt chẽ với các thành tựu khoa học hiện thời, mà là do con người tưởng tượng ra. Ví dụ: Sword Art Online, Psyren,...
38. Seinen: Là một thể loại của manga thường nhằm vào những đối tượng nam 18 đến 30 tuổi, nhưng người xem có thể lớn tuổi hơn, với một vài bộ truyện nhắm đến các doanh nhân nam quá

40. Thể loại này có nhiều phong cách riêng biệt, thường được phân vào những phong cách nghệ thuật rộng hơn và phong phú hơn về chủ đề, có các loại từ mới mẻ tiên tiến đến khiêu dâm. Ví dụ: Nana to Kaoru,...
39. Shota: Truyện miêu tả mối quan hệ thể xác , trong đó có một hoặc cả hai đều là trẻ con, chưa đủ tuổi trưởng thành.
40. Shoujo: Đối tượng hướng tới của thể loại này là phái nữ. Nội dung của những bộ manga này thường liên quan đến tình cảm lãng mạn, chú trọng đầu tư cho nhân vật (tính cách,...). Ví dụ: Love So Life, Nanoka No Kare, Akatsuki No Aria, Kimi ni Todoke...
41. Shoujo-ai: Thể loại quan hệ hoặc liên quan tới đồng tính nữ, thể hiện trong các mối quan hệ trên mức bình thường giữa các nhân vật nữ trong các manga.
42. Shounen: Đối tượng hướng tới của thể loại này là phái nam. Nội dung của những bộ manga này thường liên quan đến đánh nhau hoặc bạo lực (ở mức bình thường, không thái quá). Ví dụ: Naruto series,...
43. Shounen-ai: Là một thể loại của anime hoặc manga có nội dung về tình yêu giữa những chàng trai trẻ, mang tính chất lãng mạn nhưng ít đề cập đến quan hệ tình dục.
44. Slice of Life: Thể loại nói về cuộc sống đời thường. Ví dụ: Yotsuba&!, Kyou no Kira-kun,...
45. Smut: Những truyện có nội dung hơi nhạy cảm, đặc biệt là liên quan đến tình dục
46. Sports: Đúng như tên gọi, những môn thể thao như bóng đá, bóng chày, bóng chuyền, đua xe, cầu lông,... là một phần của thể loại này. Ví dụ: Kuroko Baket, Tsubasa,...
47. Supernatural: Thể hiện những sức mạnh đáng kinh ngạc và không thể giải thích được, chúng thường đi kèm với những sự kiện trái ngược hoặc thách thức với những định luật vật lý. Ví dụ: Tsubasa Chronicle, Hiệp sĩ phép màu,...

48. Tragedy: Thể loại chứa đựng những sự kiện mà dẫn đến kết cục là những mất mát hay sự rủi ro to lớn. Ví dụ: The Breaker: new waves,...
49. Vampire: Thể loại về quỷ,đặc biệt là quỷ hút máu. Ví dụ: Vampire Knight,...
50. Yaoi: Truyện tranh đồng tính nam có nói về quan hệ thể xác, chia 2 cấp Soft Yaoi và Hard Yaoi.
51. Yuri: Truyện tranh đồng tính nữ có nói về quan hệ thể xác, cũng có 2 cấp Soft Yuri và Hard Yuri.

Thứ Bảy, 16 tháng 7, 2016

Trên Windows: Hướng dẫn cài Apache, PHP, MySQL để học PHP.

Bước 1: Tải.
    (nên dùng bản MySQL 5.6 vì bản 5.7 dễ gặp lỗi stop service).
+ Tải PHPMyAdmin: https://www.phpmyadmin.net/downloads/
Bước 2: Cài đặt.
+ Apache:
+ PHP
+ MySQL
+ PHPMyAdmin
  1. Bạn vào trang www.phpMyAdmin.net và tải xuống gói “english.zip” dưới mục phpMyAdmin 2.9.2 section về máy tính của bạn.
  2. Tạo một thư mục mới là “phpmyadmin” trong thư mục “htdocs” của bạn. Giải nén tập tin nén vào thư mục “phpmyadmin”.  Thư  mục “phpmyadmin” trông như  sau:
  3. Tạo một tập tin mới trong thư mục “phpmyadmin” tên là “config.inc.php”. Đặt đoạn mã này vào trong tập tin vừa tạo và nhớ thay đổi “YOUR_PASSWORD_HERE” (cả hai nơi trong đoạn mã dưới) bằng mật khẩu của tài khoản quản trị MySQL:
    <?php
    /* $Id: config.sample.inc.php 9675 2006-11-03 09:06:06Z nijel $ */
    // vim: expandtab sw=4 ts=4 sts=4:
    /**
    * phpMyAdmin sample configuration, you can use it as base for
    * manual configuration. For easier setup you can use scripts/setup.php
    *
    * All directives are explained in Documentation.html and on phpMyAdmin
    * wiki <http://wiki.cihar.com&gt;.
    */
    /*
    * This is needed for cookie based authentication to encrypt password in
    * cookie
    */
    $cfg[‘blowfish_secret’] = ”; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
    /*
    * Servers configuration
    */
    $i = 0;
    /*
    * First server
    */
    $i++;
    $cfg[‘Servers’][$i][‘user’] = ‘root’;
    $cfg[‘Servers’][$i][‘password’] = ‘YOUR_PASSWORD_HERE’; // Your MySQL Password
    /* Authentication type */
    $cfg[‘Servers’][$i][‘auth_type’] = ‘config’;
    /* Server parameters */
    $cfg[‘Servers’][$i][‘host’] = ‘localhost’;
    $cfg[‘Servers’][$i][‘connect_type’] = ‘tcp’;
    $cfg[‘Servers’][$i][‘compress’] = false;
    /* Select mysqli if your server has it */
    $cfg[‘Servers’][$i][‘extension’] = ‘mysql’;
    /* User for advanced features */
    $cfg[‘Servers’][$i][‘controluser’] = ‘root’;
    $cfg[‘Servers’][$i][‘controlpass’] = ‘YOUR_PASSWORD_HERE’; // Your MySQL Password
    /* Advanced phpMyAdmin features */
    $cfg[‘Servers’][$i][‘pmadb’] = ‘phpmyadmin’;
    $cfg[‘Servers’][$i][‘bookmarktable’] = ‘pma_bookmark’;
    $cfg[‘Servers’][$i][‘relation’] = ‘pma_relation’;
    $cfg[‘Servers’][$i][‘table_info’] = ‘pma_table_info’;
    $cfg[‘Servers’][$i][‘table_coords’] = ‘pma_table_coords’;
    $cfg[‘Servers’][$i][‘pdf_pages’] = ‘pma_pdf_pages’;
    $cfg[‘Servers’][$i][‘column_info’] = ‘pma_column_info’;
    $cfg[‘Servers’][$i][‘history’] = ‘pma_history’;
    /*
    * End of servers configuration
    */
    /*
    * Directories for saving/loading files from server
    */
    $cfg[‘UploadDir’] = ”;
    $cfg[‘SaveDir’] = ”;
    ?>
  4. phpMyAdmin giờ đã được cài đặt thành công! Để sử dụng nó,mở trình duyệt và gõ “http://localhost/phpmyadmin”. Địa chỉ này sẽ đưa bạn tới trang phpMyAdmin. Nếu bạn có bất kỳ câu hỏi gì, bạn có thể lên trang  phpMyAdmin để hỏi hoặc xem tài liệu “Documentation.html” trong thư mục /phpMyAdmin/ của bạn.

Thứ Năm, 14 tháng 7, 2016

Sửa lỗi Clover bị nhảy tab

Bài dịch:
Tôi đã tìm thấy một thiết lập trong Explorer có thể là nguyên nhân của hầu hết các vấn đề Clover. Để khắc phục điều này:
Trong cửa sổ Explorer vào View -> Options;
Trong mở cửa sổ Folder Options vào View tab, di chuyển xuống "Launch folder windows in a separate process" và chắc chắn rằng nó không bị đánh dấu tick.
Cách này có thể sửa được lỗi.

**********
Bài viết nguyên gốc từ diễn đàn:
I've found a setting in Explorer which may be the cause of most of Clover issues. To fix this:
In Explorer window go to View -> Options;
In opened Folder Options window go to View tab, scroll down to "Launch folder windows in a separate process" and make sure it's UNCHECKED.
This may fix the thing ;)

COMPOSER TRONG PHP














Đưa đường dẫn đến thư mục project, tạo file .JSON để cài.
Tập hợp các thư viện quản lý bởi Composer:
https://packagist.org
Trang hướng dẫn:
https://www.dev-metal.com/composer-tutorial/
Trang Github chính thức:
https://github.com/composer/composer
Trang chủ: https://getcomposer.org/

==

Sử Dụng Composer

Để quản lý các gói thư viện dùng trong ứng cụng, chúng ta cần tạo ra một tập tin và đăt tên cho nó làcomposer.json. Nội dung của tập tin này được định dạng theo kiểu JSON (Javascript Object Notation) và chứa các thư viện cũng như phiên bản mà chúng ta cần sử dụng. Ví dụ:
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
Với ví dụ trên chúng ta thông báo với composer rằng thư viện monolog/monolog phiên bản 1.0.* sẽ được sử dụng trong ứng dụng. Và để tải thư viện này về bạn cần chạy câu lệnh:
$ composer install
Khi chạy câu lệnh trên composer sẽ tự động chọn các phiên bản cần phải tải về cho ứng dụng của bạn và đặt các thư viện này vào bên trong thư mục vendor (composer sẽ taọ ra thư mục này nếu nó chưa có).

Autoload

Cuối cùng để sử dụng class của một thư viện nào đó, trong tập tin PHP bạn cần chạy câu lệnh sau:
require __DIR__ . '/vendor/autoload.php';
Sau đó bạn có thể bắt đầu sử dụng các class của thư viện:
$log = new Monolog\Logger('name');
Như vậy tới chúng ta đã hoàn thành xong việc tìm hiểu về cách cài đặt và sử dụng composer.

Thứ Tư, 27 tháng 4, 2016

Phép cộng sử dụng biến Session trong PHP

Sau đây là toàn bộ Code: (Hoặc bạn có thể tải file php tại ĐÂY)

<?php
# PHÉP CỘNG #
session_start();
$k=0;
if(isset($_POST['tinh'])){ //nhấn nút "tính"
if(!isset($_SESSION['giatri'])){ //nếu biến session chưa tồn tại
if(empty($_POST['txta'])) // và nếu ô text rỗng
$_SESSION['giatri']=0; //khởi gán session, khi ô text rỗng
else
$_SESSION['giatri']=$_POST['txta']; //khởi gán session khi ô text có giá trị
}
else{
$_SESSION['giatri']+=$_POST['txta']; //thực hiện phép cộng.
$_POST['txta']="";
}
}
//cho trường hợp load lại trang
//phải kiểm tra lại session do nó chỉ đc tạo khi nhấn nút tính.
if(isset($_SESSION['giatri']))
$k=$_SESSION['giatri'];
# HỦY SESSION #
if(isset($_POST['huy'])){
if(session_destroy())
$k=0;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Phép cộng với Session</title>
<style>
h1{color: #871F1F}
form{
border: 1px solid blue;
padding: 10px;
max-width: 250px;
}
input{
margin: 5px;
}
p{
font-size: 150%;
font-weight: bold;
color: #3B27CE;
}
</style>
</head>
<body>
<h1>Phép cộng sử dụng biến Session</h1>
<form method="POST" action="">
<label>Nhập giá trị: </label>
<input type="text"name="txta">
<input type="submit" name="tinh" value="Tính">
<br>
<input type="submit" name="huy" value="Hủy session">
</form>
<?php
echo "<p>Kết quả: $k</p>";
?>
</body>
</html>

Thứ Ba, 26 tháng 4, 2016

Cách lấy link trực tiếp từ Google Drive

Bước 1: Tạo một Folder dạng chia sẻ.
Bước 2: Click đôi vào thư mục này, trên thanh địa chỉ trình duyệt ta lấy dãy ký tự phía sau: folders/.
Ta gọi dãy ký tự này là mã chia sẻ (mã này là cố định dành cho thư mục này).
Bước 3: Upload file nào đó vào thư mục này, ta sẽ copy tên file (bao gồm cả phần đuôi mở rộng của nó). Lưu ý: tên file không nên có ký tự khoảng trắng.
Khi đó link trực tiếp sẽ có dạng:
http://googledrive.com/host/mã chia sẻ/tên file.
Ví dụ:
http://googledrive.com/host/0B48Pbqnr7x0_ZjlNb2NGdFJHdDg/Pagination_tutorial_final.pdf

Chủ Nhật, 17 tháng 4, 2016

Thuật toán tính khoảng cách giữa 2 ngày trong C++ (Viết trên Visual Studio 2013)

//Xay dung lop Date
#include<iostream>
using namespace std;
#include<stdio.h>
#include<math.h>
#include<conio.h>
 
/* Rata Die day one is 0001-01-01 (Lấy mốc là ngày 1 tháng 1 năm 1)*/
int rdn(int yint mint d) { 
 if (m < 3)
  y--, m += 12;
 return 365 * y + y / 4 - y / 100 + y / 400 + (153 * m - 457) / 5 + d - 306;
}
 
void main(){
 int A = rdn(2016, 4, 17);
 int B = rdn(1988, 11, 26);
 int days = A - B;
 cout << "\n Ngay A= "<<A<<"\n Ngay B= "<<B<<"\n ==> Khoang cach giua hai ngay la: " << days;
 _getch();
}

Thứ Ba, 23 tháng 2, 2016

Android

http://thanhnien.vn/cong-nghe/9-ung-dung-khong-nen-cai-dat-tren-android-530164.html
https://tinhte.vn/forums/android-phan-mem.216/

Thứ Bảy, 16 tháng 1, 2016

Ví dụ đơn giản về kế thừa và đa hình trong C# [C# console, Visual Studio 2013]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace CSharpCoBan
{
    public class Program
    {

        static void Main(string[] args)
        {
            /*
            #region KHỞI ĐỘNG
            Console.Title = "Header"; // đặt tiêu đề cho Màn hình console
            Console.OutputEncoding = UnicodeEncoding.Unicode; // Output trên màn hình có thể hiển thị Unicode
            Console.WriteLine("Fist");

            //Thread.Sleep(5000); // sẽ đóng màn hình sau 5000 mili giây = 5 giây.

            float f = 5.6f; // khai báo kiểu float phải có f ở sau cùng.
            double x = 5.5;
            #endregion

            #region Kiểu enum
            //Console.Write(DayOfWeek.Monday);
            const int cc = 4;
            //cc = 10;

            #endregion
             * */

            Console.InputEncoding = UnicodeEncoding.Unicode;
            Console.OutputEncoding = UnicodeEncoding.Unicode;

            CollegeStudent cs = new CollegeStudent();
            cs.EnterInformation();
            cs.DisplayInformation();

            UniversityStudent us = new UniversityStudent();
            us.EnterInformation();
            us.DisplayInformation();


            //thu kiem tra ve ham tao voi tinh ke thua

            //Student sv01 = new CollegeStudent();
            //Student sv03 = new UniversityStudent();
            //CollegeStudent x = new CollegeStudent();
            //UniversityStudent y = new UniversityStudent();
            //y._ToString();


            Console.Read(); // dừng màn hình
        }

    }

    #region Ke thua da hinh
    /*
        Ví dụ về kế thừa và đa hình trong C#
        - Xây dựng lớp SV
          + thuộc tính: họ tên, năm sinh
          + phương thức: Khởi tạo, nhập thông tin
        - Xây dựng lớp SVCD kế thừa lớp SV
          Bổ sung:
          + thuộc tính: điểm năm 1, điểm năm 2, điểm năm 3
          + phương thức: tính điểm tổng kết, in thông tin
        - Xây dựng lớp SVDH kế thừa lớp SVCD
          Bổ sung:
          + thuộc tính: điểm năm 4

        Yêu cầu:
        - Khởi tạo mỗi lớp 1 đối tượng, thực hiện nhập thông tin, in thông tin.

        */

    public abstract class Student
    {
        protected string fullName;
        protected int yearOfBirth;

        /// <summary>
        /// Ham khoi dung doi tuong
        /// </summary>`
        /// <param name="fullName"></param>
        /// <param name="yearOfBirth"></param>

        public Student() { }
        public Student(string fullName, int yearOfBirth)
        {
            this.fullName = fullName;
            this.yearOfBirth = yearOfBirth;
        }
        /// <summary>
        /// Ham nhap thong tin Sinh vien
        /// </summary>
        public virtual void EnterInformation()
        {
         
            Console.Write("Input FullName: ");
            this.fullName = Console.ReadLine();
            Console.Write("Input Year of birth: ");
            this.yearOfBirth = int.Parse(Console.ReadLine());
        }
        public abstract void _ToString();
        public abstract double SummaryPoint();
        public abstract void DisplayInformation();
    }


    public class CollegeStudent : Student
    {
        private double pointOfYear01;
        private double pointOfYear02;
        private double pointOfYear03;

        public double PointOfYear01
        {
            get { return pointOfYear01; }
            set { pointOfYear01 = value; }
        }

        public double PointOfYear02
        {
            get { return pointOfYear02; }
            set { pointOfYear02 = value; }
        }

        public double PointOfYear03
        {
            get { return pointOfYear03; }
            set { pointOfYear03 = value; }
        }

        public CollegeStudent() { }

        /// <summary>
        /// Ham tao sinh vien cao dang
        /// </summary>
        /// <param name="fullName"></param>
        /// <param name="yearOfBirth"></param>
        /// <param name="pointOfYear01"></param>
        /// <param name="pointOfYear02"></param>
        /// <param name="pointOfYear03"></param>
        public CollegeStudent(string fullName, int yearOfBirth, double pointOfYear01, double pointOfYear02, double pointOfYear03)
            : base(fullName, yearOfBirth)
        {
            this.pointOfYear01 = pointOfYear01;
            this.pointOfYear02 = pointOfYear02;
            this.pointOfYear03 = pointOfYear03;
        }

        public override void EnterInformation()
        {
            base.EnterInformation();
            Console.Write("Input point of year 01: ");
            this.pointOfYear01 = double.Parse(Console.ReadLine());
            Console.Write("Input point of year 02: ");
            this.pointOfYear02 = double.Parse(Console.ReadLine());
            Console.Write("Input point of year 03: ");
            this.pointOfYear03 = double.Parse(Console.ReadLine());
        }

        /// <summary>
        /// Tinh diem tong ket
        /// </summary>
        /// <returns></returns>
        public override double SummaryPoint()
        {
            return (pointOfYear01 + pointOfYear02 + pointOfYear03) / 3;
        }

        /// <summary>
        /// Ham xuat thong tin sinh vien cao dang
        /// </summary>
        public override void DisplayInformation()
        {
            Console.WriteLine(" College Student: {0}, YearOfBirth: {1}, Point: {2}", this.fullName, this.yearOfBirth, this.SummaryPoint());
        }

        /// <summary>
        /// Ham hien thi loai sinh vien
        /// </summary>
        public override void _ToString()
        {
            Console.WriteLine("This is College Student");
        }
    }

    public class UniversityStudent : CollegeStudent
    {
        private double pointOfYear04;

        public double PointOfYear04
        {
            get { return pointOfYear04; }
            set { pointOfYear04 = value; }
        }

        public UniversityStudent() { }

        public UniversityStudent(string fullName, int yearOfBirth, double pointOfYear01, double pointOfYear02, double pointOfYear03, double pointOfYear04)
            : base(fullName, yearOfBirth, pointOfYear01, pointOfYear02, pointOfYear03)
        {
            this.pointOfYear04 = pointOfYear04;
        }

        public override void EnterInformation()
        {
            base.EnterInformation();
            Console.Write("Input point of year 04: ");
            this.pointOfYear04 = double.Parse(Console.ReadLine());

        }

        public override double SummaryPoint()
        {
            return (this.PointOfYear01 + this.PointOfYear02 + this.PointOfYear03 + this.PointOfYear04) / 4;
        }

        public override void DisplayInformation()
        {
            Console.WriteLine(" University Student: {0}, YearOfBirth: {1}, Point: {2}", this.fullName, this.yearOfBirth, this.SummaryPoint());
        }

        public override void _ToString()
        {
            Console.WriteLine("This is University Student");
        }
    }
    #endregion
}