スキップしてメイン コンテンツに移動

生まれた日から今日まで、何日生きているのかを求める2

生まれた日から今日まで、何日生きているのかを求める2

概要

前回作ったコードが意外と面白かったので C# に移植してアプリにした。
ダウンロードはこちらから → Download ( 5KB )
プロジェクト一式のダウンロードはこちらから → Download ( 187KB )
当初公開したバージョンにはバグがありました。すみません。本バージョンでは修正済みです。そのため下記のアプリ画面で出力されている 254 という値は間違いです。
アプリ画面
アプリ画面

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CalcLivedDays
{
 public partial class Form1 : Form
 {
  public Form1()
  {
   InitializeComponent();
  }


  // うるう年判定, 第一引数 判定する年、うるう年ならば 1 を返す
  private int IsUruu(int y)
  {
   if (y % 400 == 0) {
    return (1);
   }
   else if (y % 100 == 0) {
    return (0);
   }
   else if (y % 4 == 0) {
    return (1);
   }

   return (0);
  }


  private void button1_Click(object sender, EventArgs e)
  {
   // 計算します。
   int b_y = 0, b_m = 0, b_d = 0;
   try {
    b_y = int.Parse(textBox1.Text);
    b_m = int.Parse(textBox2.Text);
    b_d = int.Parse(textBox3.Text);

    if (b_y < 0 || b_m <= 0 || b_d < 0) {
     throw new Exception("あそばないのっ!");
    }
   }
   catch (Exception exc) {
    MessageBox.Show("そうやって不正なデータを入力して遊ぶの良くない。\r\n" + exc.ToString(), "ERROR");
    return;
   }


   // 今日の日付を取得
   DateTime dt = DateTime.Now;
   int n_y = dt.Year, n_m = dt.Month, n_d = dt.Day;


   int countDay = 0;
   int[] last_day = new int[] { 31,28,31,30,31,30,31,31,30,31,30,31 };
   // for の条件判定は 0 から開始で 1 から開始ではないので引く
   b_m -= 1;
   n_m -= 1;


   // 手順
   // 1.まず今日までの日数をすべて足す。この際うるう年であるならば、366 を足す
   // 1.2 そして、誕生した年の生まれる前までの日数をすべて引く
   // 1.3 その後、現在のまだ経過していない日数を引く。
   for (int i = b_y; i <= n_y; i++) {
    countDay += 365 + IsUruu(i);
   }
   // 1.2
   for (int i = 0; i < b_m; i++) {
    // うるう年の 2 月 29日を処理する。
    if (IsUruu(b_y) == 1 && i == 1) {
     countDay -= 29;
    }
    else {
     countDay -= last_day[i];
    }
   }
   countDay -= b_d;

   // 1.3
   for (int i = 12 - 1; i >= n_m; i--) {
    if (IsUruu(n_y) == 1 && i == 1) {
     countDay -= 29;
    }
    else {
     countDay -= last_day[i];
    }
   }
   countDay += n_d;
   MessageBox.Show("あなたは今日まで " + countDay + " 日生きています。", "Answer");
  }
 }
}

感想

さくさくアプリにできる C# 便利だね


このブログの人気の投稿

記述試験の書き方(仮)

記述試験の書き方(仮) 1,まえがき   法学部の試験では記述式の試験が出てくる。   その試験では、あるテーマについて自由に論ぜよとされている。 しかし、論ぜよと言われても、どのように論じればいいのか、すなわち、記述の仕方について教わったことがない(よくよく考えると、法的文章力を習得させる事だけが目的の授業はないと思われる)。   本稿では、私自身が法学畜になり、見聞きし、実際に活用している論述方法についてまとめている、はずである。その要点は、①条文、判例、学説を使う。②単なる事実と法的事実を区別する。③文章内に一貫性を持たせる。である。 法律と、プログラミング

本サイトの今後について

告知 本サイトは今後更新されることは、おそらくありません。 過去記事等はこのまま放置するつもりです。内容の陳腐化並びにその正確性等については保証はできません。自己責任で活用いただければと思います。 This site won't update in future. And Thank's everyone. new site -> sysrigar

node.js で SQLite3 を使用するコードを書くときの予備録

node.js で SQLite3 を使用するコードを書くとき、予備録 まず、非同期処理。 C言語や Perl のように上から下に処理が続くと決して思ってはいけない。 SQLite3 の each は SQL 文実行完了時に呼び出す関数を指定できる SQLite をインストールします、 npm install sqlite3 [test.js] var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(function() { db.run("CREATE TABLE lorem (info TEXT)"); var stmt = db.prepare("INSERT INTO lorem VALUES (?)"); for (var i = 0; i < 10; i++) { stmt.run("Ipsum " + i); } stmt.finalize(); var listInfo = new Array(); db.each("SELECT rowid AS id, info FROM lorem", function(err, row) { var tmp = new Object(); tmp.id = row.id; tmp.info = row.info; console.log("[ROW]\t" + row.id + ": " + row.info); listInfo.push(tmp); }, function() { // Each 完了時に呼び出される for (var i = 0; i < listInfo.length; i++) { console.log("[BUF]\t" + listInfo[i].id + ": " + listInfo[i].info); } console.lo