定义电子日历类-C++/class

牛客网编程题
class的引用
描述
KiKi学习了面向对象技术,学会了通过封装属性(变量)和行为(函数)定义类,现在他要设计一个电子日历类TDate。
它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,要求:
(1)带有默认形参值的构造函数,默认值为0, 0, 0;
(2)输出日期函数,用“日/月/年”格式输出日期;
(3)设置日期函数,从键盘输入年、月、日。
输入描述:
一行,三个整数,用空格分隔,分别表示年、月、日。
输出描述:
一行,用“日/月/年”格式输出日期。
示例1
输入:
2019 12 30
输出:
30/12/2019

代码实现:

#include<iostream>

using namespace std;

class TDate
{
    private:
        int Month,Day,Year;
    public:
        TDate()
        {
            Year=0;
            Month=0;
            Day=0;
        }
        void Dateout()
        {
            cout<<Day<<"/"<<Month<<"/"<<Year<<endl;
        }
        void setDate()
        {
            cin>>Year>>Month>>Day;
        }
};
int main()
{
    TDate d1;
    d1.setDate();
    d1.Dateout();
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
补充完整函数void Disp() 和void Key_Process()的代码。 //----------------------------------------------------------------- // 名称: 用8255接口扩展来实现可调电子日历 //----------------------------------------------------------------- // 说明: 8255的A、B端口分别连接8位数码管的段码和位码,C端口接按键 // //----------------------------------------------------------------- #include <reg51.h> #include <absacc.h> #define uchar unsigned char #define uint unsigned int //A,B,C端口及命令端口地址定义 #define PA XBYTE[0x0000] #define PB XBYTE[0x0001] #define PC XBYTE[0x0002] #define COM XBYTE[0x0003] //上述定义也可写成: //#define PA *(XBYTE + 0x0000) //#define PB *(XBYTE + 0x0001) //#define PC *(XBYTE + 0x0002) //#define COM *(XBYTE + 0x0003) //0-9的共阳数码管段码表,最后的0xBF表示"-" code uchar SEG_CODE[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF }; //数码管位选 code uchar INDEX_CODE[] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //初始日期20-06-25 uchar Disp_Buf[] = {2,0,10,0,6,10,2,5}; //----------------------------------------------------------------- // 延时函数 //----------------------------------------------------------------- void delay_ms(uint x) { uchar t; while(x--) for(t = 0; t < 120; t++); } //显示函数 void Disp() { } //----------------------------------------------------------------- // 8255 C端口按键处理 //----------------------------------------------------------------- void Key_Process() { } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { COM=0x89; while(1) { Key_Process(); } }
最新发布
05-30
好的,以下是完整的函数`void Disp()`和`void Key_Process()`的代码: ```c //显示函数 void Disp() { static uchar index = 0; //静态变量,用于记录当前位选 static uchar cnt = 0; //静态变量,用于实现闪烁效果 uchar seg_data; //段码数据 //闪烁处理 cnt++; if (cnt == 10) //每10次循环闪烁一次 { cnt = 0; if (Disp_Buf[6] & 0x80) //最高位为1时闪烁 seg_data = 0x00; //灭 else seg_data = SEG_CODE[Disp_Buf[index]]; //显示当前位的数据 } else { seg_data = SEG_CODE[Disp_Buf[index]]; //显示当前位的数据 } //输出段码和位选 PA = seg_data; PB = INDEX_CODE[index]; //切换到下一个位选 index++; if (index > 7) index = 0; } // 8255 C端口按键处理 void Key_Process() { static uchar key_state = 0; //静态变量,用于记录按键状态 uchar key_data = PC; //读取C端口按键数据 //按键消抖处理 if (key_data != 0xff) { delay_ms(10); if (key_data == PC) { //确定按键状态 if (key_state == 0 && (key_data & 0x01) == 0) { //按键1按下,切换到年份设置模式 key_state = 1; Disp_Buf[0] = 2; Disp_Buf[1] = 0; Disp_Buf[2] = 10; Disp_Buf[3] = 0; Disp_Buf[4] = 0; Disp_Buf[5] = 0; Disp_Buf[6] = 0x80; //最高位为1表示设置模式 } else if (key_state == 1 && (key_data & 0x01) == 0) { //按键1再次按下,保存年份并退出设置模式 key_state = 0; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } else if (key_state == 0 && (key_data & 0x02) == 0) { //按键2按下,切换到月份设置模式 key_state = 2; Disp_Buf[0] = 0; Disp_Buf[1] = 0; Disp_Buf[2] = 10; Disp_Buf[3] = 0; Disp_Buf[4] = 0; Disp_Buf[5] = 0; Disp_Buf[6] = 0x80; //最高位为1表示设置模式 } else if (key_state == 2 && (key_data & 0x02) == 0) { //按键2再次按下,保存月份并退出设置模式 key_state = 0; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } else if (key_state == 0 && (key_data & 0x04) == 0) { //按键3按下,切换到日期设置模式 key_state = 3; Disp_Buf[0] = 0; Disp_Buf[1] = 0; Disp_Buf[2] = 0; Disp_Buf[3] = 6; Disp_Buf[4] = 0; Disp_Buf[5] = 0; Disp_Buf[6] = 0x80; //最高位为1表示设置模式 } else if (key_state == 3 && (key_data & 0x04) == 0) { //按键3再次按下,保存日期并退出设置模式 key_state = 0; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } else if (key_state == 0 && (key_data & 0x08) == 0) { //按键4按下,清零日期 key_state = 4; Disp_Buf[0] = 0; Disp_Buf[1] = 0; Disp_Buf[2] = 0; Disp_Buf[3] = 0; Disp_Buf[4] = 0; Disp_Buf[5] = 0; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } else if (key_state == 4 && (key_data & 0x08) == 0) { //按键4再次按下,恢复初始日期 key_state = 0; Disp_Buf[0] = 2; Disp_Buf[1] = 0; Disp_Buf[2] = 10; Disp_Buf[3] = 0; Disp_Buf[4] = 6; Disp_Buf[5] = 10; Disp_Buf[6] = 0; //最高位为0表示正常显示模式 } } } else { key_state = 0; //按键松开后,清除按键状态 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&twelve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值