示例#1
0
void PrintCalendarYear(int year)
{
    for (int month = 1; month <= Months ; ++month)
    {
        // print the name of the month followed by the year
        PrintMonthName(month);
        printf(" %d\n", year);
        // print the days of the week
        printf(" Su Mo Tu We Th Fr Sa\n");
        // determine number of day in a given month
        int monthDays = MonthDays(month, year);
        // determine which day of the week is the 1st of the month
        Days weekday = FirstDayOfMonth(month, year);
        // set the cursor under the day of the week for which the month starts
        IndentFirstLine((int) weekday);
        // print the entire month
        for (int day = 1; day <= monthDays; ++day)
        {
            printf(" %2d",day);
            if (weekday == Saturday) // go to a new line after saturday
            {
                printf("\n");
            }
            weekday = (weekday + 1) % 7; // keep track of the day of the week
        }

        if (weekday != Sunday)
        {
            printf("\n");
        }

        _getch();
        printf("\n");
    }
}
示例#2
0
void PrintCalendarMonth(int month, int year)
{
    int weekday, nDays, day;

    printf("    %s %d\n", MonthName(month), year);
    printf(" Su Mo Tu We Th Fr Sa\n");
    nDays = MonthDays(month, year);
    weekday = FirstDayOfMonth(month, year);
    IndentFirstLine(weekday);
    for (day = 1; day <= nDays; day++) {
        printf(" %2d", day);
        if (weekday == Saturday) printf("\n");
        weekday = (weekday + 1) % 7;
    }
    if (weekday != Sunday) printf("\n");
}
示例#3
0
void ComplexStatsWin::refresh()
{
	Time f; // from
	Time t; // to
	
	switch ( (En_stats_interval)((int)interval.GetData()) )
	{
		case siDay:
			{
				Date d = day_date.GetData();
				f = ToTime(d);
				t = Time(d.year, d.month, d.day, 23, 59, 59);
				break;
			}
		case siMonth:
			{
				Date from = FirstDayOfMonth(month_date.GetData());
				Date to = LastDayOfMonth(month_date.GetData());
				f = Time(from.year, from.month, from.day, 0, 0, 0);
				t = Time(to.year, to.month, to.day, 23, 59, 59);
				break;
			}
		case siDateRange:
			{
				Date from = date_from.GetData();
				Date to = date_to.GetData();
				f = Time(from.year, from.month, from.day, 0, 0, 0);
				t = Time(to.year, to.month, to.day, 23, 59, 59);
			}
	};
	
	//record count
	SQL & Select(SqlCountRows()).From(RECORD).Where(REC_DATE >= f && REC_DATE <= t);
	if (SQL.Fetch())
		record_count.SetText(~AsString(SQL[0]));
	
	//income
	SQL & Select(SqlSum(ITEM_PRICE))
		.From(RECORD_ITEM)
		.InnerJoin(RECORD).On(RECORD_ID.Of(RECORD_ITEM) == ID.Of(RECORD))
		.Where(REC_DATE.Of(RECORD) >= f && REC_DATE.Of(RECORD) <= t)
	;
	if (SQL.Fetch())
	{
		String s = ConvertMoney().Format(SQL[0]);
		income.SetText(~s);
	}
	
	//income from invoices only
	SQL & Select(SqlSum(ITEM_PRICE))
		.From(RECORD_ITEM)
		.InnerJoin(RECORD).On(RECORD_ID.Of(RECORD_ITEM) == ID.Of(RECORD))
		.Where(REC_DATE.Of(RECORD) >= f && REC_DATE.Of(RECORD) <= t && NotNull(INVOICE_ID.Of(RECORD)))
	;
	if (SQL.Fetch())
	{
		String s = ConvertMoney().Format(SQL[0]);
		income_inv.SetText(~s);
	}
	
	//income without invoices
	SQL & Select(SqlSum(ITEM_PRICE))
		.From(RECORD_ITEM)
		.InnerJoin(RECORD).On(RECORD_ID.Of(RECORD_ITEM) == ID.Of(RECORD))
		.Where(REC_DATE.Of(RECORD) >= f && REC_DATE.Of(RECORD) <= t && IsNull(INVOICE_ID.Of(RECORD)))
	;
	if (SQL.Fetch())
	{
		String s = ConvertMoney().Format(SQL[0]);
		income_noinv.SetText(~s);
	}
	
	//products
	products.Clear();
	SQL & Select(NAME.Of(LOV_PRODUCT), Count(LOV_PRODUCT))
		.From(RECORD_ITEM)
		.InnerJoin(LOV_PRODUCT).On(PROD_ID.Of(RECORD_ITEM) == ID.Of(LOV_PRODUCT))
		.InnerJoin(RECORD).On(RECORD_ID.Of(RECORD_ITEM) == ID.Of(RECORD))
		.Where(REC_DATE.Of(RECORD) >= f && REC_DATE.Of(RECORD) <= t)
		.GroupBy(NAME.Of(LOV_PRODUCT))
		.OrderBy(Descending(Count(LOV_PRODUCT)))
	;
	while(SQL.Fetch())
		products.Add(SQL);
	
	//clients
	unsigned c = 0;
	clients.Clear();
	SQL & Select(NAME.Of(LOV_TITLE), FIRST_NAME.Of(CLIENT), LAST_NAME.Of(CLIENT))
		.From(RECORD)
		.InnerJoin(PATIENT).On(PATIENT_ID.Of(RECORD) == ID.Of(PATIENT))
		.InnerJoin(CLIENT).On(CLIENT_ID.Of(PATIENT) == ID.Of(CLIENT))
		.LeftJoin(LOV_TITLE).On(TITLE_ID.Of(CLIENT) == ID.Of(LOV_TITLE))
		.Where(REC_DATE.Of(RECORD) >= f && REC_DATE.Of(RECORD) <= t)
		.OrderBy(REC_DATE.Of(RECORD))
	;
	while(SQL.Fetch() && ++c)
		clients.Add(SQL);
	client_count.SetText(AsString(c));
}