駐車料金の計算
C言語ケーススタディ

Study C Ver2販売開始のお知らせ

 C言語の勉強や教育用に最適です。
 2004/8/23よりStudy C Ver2の販売を開始しました。
 Study C Ver2の新しい機能については
 こちらをご参照ください。

今回は授業の課題らしき次の問題を解いてみることにします。
駐車料金を出すシステム
	駐車開始時刻を入力し
	終了時刻を入力すると
	料金が表示されるプログラムを作成
問題には開始時刻とありますが日をまたいでしまうと計算できなくなってしまうので、日付から入力することにします。

入力した日時は日時文字列からカレンダー時刻への変換のケーススタディで作成したget_caltime関数を使用してカレンダー時刻に変換します。 開始/終了日時の双方ともカレンダー時刻に変換しその差から経過秒数を計算します。 経過秒数を課金単位(30分としました)で割り課金単位を1秒でも越えていれば課金単位数を増やします(この辺の処理は0秒ちょうどを課金するかどうかで異なると思います)。 課金単位数に料金(300円としました)を掛ければ料金が算出されます。


#include <stdio.h>
#include <time.h>

#define UNIT	(30*60)
#define FEE	300

time_t  get_caltime(char *tstr);

main()
{
	time_t  cal_stime, cal_etime;
	char    buff[100];
	int	fee, unit;

	printf("駐車開始時間 YYYYMMDDHHMMSS : ");
	scanf("%s", buff);
	cal_stime = get_caltime(buff);
	if(cal_stime == -1){
		printf("変換失敗\n");
		return;
	}
	printf("駐車終了時間 YYYYMMDDHHMMSS : ");
	scanf("%s", buff);
	cal_etime = get_caltime(buff);
	if(cal_etime == -1){
		printf("変換失敗\n");
		return;
	}

	if(cal_etime <= cal_stime){
		printf("入力した日時が不適切です.\n");
		return;
	}
	printf("経過秒数 : %d\n", cal_etime - cal_stime);        
	unit = (cal_etime - cal_stime) / UNIT;
	if((cal_etime - cal_stime) % UNIT != 0)
		unit++;
	fee = unit * FEE;
	printf("料金 : %d円\n", fee);
}


time_t  get_caltime(char *tstr)
{
	char    buf[20];
	time_t  cal_time;
	struct tm
		work_tm;

	if(strlen(tstr) != 14)
		return(-1);
	strncpy(buf, tstr, 4);
	buf[4] = '\0';
	work_tm.tm_year = atoi(buf) - 1900;
	strncpy(buf, tstr+4, 2);
	buf[2] = '\0';
	work_tm.tm_mon = atoi(buf) - 1;
	strncpy(buf, tstr+4+2, 2);
	work_tm.tm_mday = atoi(buf);
	strncpy(buf, tstr+4+2+2, 2);
	work_tm.tm_hour = atoi(buf);
	strncpy(buf, tstr+4+2+2+2, 2);
	work_tm.tm_min = atoi(buf);
	strncpy(buf, tstr+4+2+2+2+2, 2);
	work_tm.tm_sec = atoi(buf);
	work_tm.tm_isdst = -1;
	if((cal_time = mktime(&work_tm)) == -1){
		return(-1);
	}
	return(cal_time);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...

C言語でゲームプログラマーを目指す方へ
 ■C言語ゲームプログラミング講座
 C言語でのゲームプログラミングを解説する講座
 始めました。

お問い合わせ先 C言語のトップページに戻る Copyright(C) 2003 潟Iーキッド