c++程序设计

#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <ctime>
#include <cassert>
#include <conio.h>
using namespace std;
class rebook
{
public:
    rebook();//默认构造函数
    void new_book();//新建备忘录
    void alter_book();//修改备忘录
    void delet_book();//删除备忘录
    void scan_book();//浏览记事本
private:
    string signs;//标题
    string data;//日期
    string where;//地点
    string things;//事件
    string what;//事件描述
};

//日期类
class whatdata
{
public:
    whatdata();//默认构造函数
    int IsLeapYear(int Year); 
    long YearDays(int Year);  
    long TotalDays(int Year, int Month, int Day);
    int GetLunar(int Y1, int M1, int D1, int &Y2, int &M2, int &D2); 
    char inter_face();//首页
    void search_data();//日历查询
    void book_manage();//备忘录管理
    void select_day();//万年历之日历查询
    void select_month();//万年历之月历查询
private:
    rebook abook;
    string week;
    string month;
    string day;
    string year;
};
#define   BEGINYEAR   1900   
#define   YEARCOUNT   150   

struct   LUNARINDEX   //农历大小月数据索引结构,数据时间自1900年至2050年   
{  
    long     Days;       //   天数,表示该农历年1月1日距公历元年元月1日的天数   
short   Mon13;     //   该数据的0至12位分别标明农历1至13月的大小,含闰月   
short   Leap;       //   该年的农历闰月值,15表示无闰月。   
}LunarIndex[]={   
    {693626,   0X16D2,     8},   {694010,   0X0752,   15},   {694364,   0X0EA5,   15}, //1900
    {694719,   0X164A,     5},   {695102,   0X064B,   15},   {695456,   0X0A9B,   15},   
    {695811,   0X1556,     4},   {696195,   0X056A,   15},   {696549,   0X0B59,   15},   
    {696904,   0X1752,     2},   {697288,   0X0752,   15},   {697642,   0X1B25,    6},   
    {698026,   0X0B25,   15},   {698380,   0X0A4B,   15},   {698734,   0X14AB,     5}, //  1914
    {699118,   0X02AD,   15},   {699472,   0X056B,   15},   {699827,   0X0B69,     2},   
    {700211,   0X0DA9,   15},   {700566,   0X1D92,     7},   {700950,   0X0E92,   15},   
    {701304,   0X0D25,   15},   {701658,   0X1A4D,     5},   {702042,   0X0A56,   15},   
    {702396,   0X02B6,   15},   {702750,   0X15B5,     4},   {703135,   0X06D4,   15},   
    {703489,   0X0EA9,   15},   {703844,   0X1E92,     2},   {704228,   0X0E92,   15},   //1929 
    {704582,   0X0D26,     6},   {704965,   0X052B,   15},   {705319,   0X0A57,   15},  
    {705674,   0X12B6,     5},   {706058,   0X0B5A,   15},   {706413,   0X06D4,   15},   
    {706767,   0X0EC9,     3},   {707151,   0X0749,   15},   {707505,   0X1693,    7},   
    {707889,   0X0A93,   15},   {708243,   0X052B,   15},   {708597,   0X0A5B,     6},   
    {708981,   0X0AAD,   15},   {709336,   0X056A,   15},   {709690,   0X1B55,     4},  //1944 
    {710075,   0X0BA4,   15},   {710429,   0X0B49,   15},   {710783,   0X1A93,     2},   
    {711167,   0X0A95,   15},   {711521,   0X152D,     7},   {711905,   0X0536,   15},   
    {712259,   0X0AAD,   15},   {712614,   0X15AA,     5},   {712998,   0X05B2,   15},   
    {713352,   0X0DA5,   15},   {713707,   0X1D4A,     3},   {714091,   0X0D4A,   15},   
    {714445,   0X0A95,     8},   {714828,   0X0A97,   15},   {715183,   0X0556,   15},  //1959 
    {715537,   0X0AB5,     6},   {715921,   0X0AD5,   15},   {716276,   0X06D2,   15},   
    {716630,   0X0EA5,     4},   {717014,   0X0EA5,   15},   {717369,   0X064A,   15},   
    {717722,   0X0C97,     3},   {718106,   0X0A9B,   15},   {718461,   0X155A,     7},   
    {718845,   0X056A,   15},   {719199,   0X0B69,   15},   {719554,   0X1752,     5},   
    {719938,   0X0B52,   15},   {720292,   0X0B25,   15},   {720646,   0X164B,     4},  //1974 
    {721030,   0X0A4B,   15},   {721384,   0X14AB,     8},   {721768,   0X02AD,   15},   
    {722122,   0X056D,   15},   {722477,   0X0B69,     6},   {722861,   0X0DA9,   15},   
    {723216,   0X0D92,   15},   {723570,   0X1D25,     4},   {723954,   0X0D25,   15},   
    {724308,   0X1A4D,   10},   {724692,   0X0A56,   15},   {725046,   0X02B6,   15},   
    {725400,   0X05B5,     6},   {725784,   0X06D5,   15},   {726139,   0X0EA9,   15},  //1989 
    {726494,   0X1E92,     5},   {726878,   0X0E92,   15},   {727232,   0X0D26,   15},   
    {727586,   0X0A56,     3},   {727969,   0X0A57,   15},   {728324,   0X14D6,     8},   
    {728708,   0X035A,   15},   {729062,   0X06D5,   15},   {729417,   0X16C9,     5},   
    {729801,   0X0749,   15},   {730155,   0X0693,   15},   {730509,   0X152B,     4},   
    {730893,   0X052B,   15},   {731247,   0X0A5B,   15},   {731602,   0X155A,     2},  //2004
    {731986,   0X056A,   15},   {732340,   0X1B55,     7},   {732725,   0X0BA4,   15},   //2007
    {733079,   0X0B49,   15},   {733433,   0X1A93,     5},   {733817,   0X0A95,   15},   
    {734171,   0X052D,   15},   {734525,   0X0AAD,     4},   {734909,   0X0AB5,   15},   
    {735264,   0X15AA,     9},   {735648,   0X05D2,   15},   {736002,   0X0DA5,   15},   
    {736357,   0X1D4A,     6},   {736741,   0X0D4A,   15},   {737095,   0X0C95,   15}, //2019  
    {737449,   0X152E,     4},   {737833,   0X0556,   15},   {738187,   0X0AB5,   15},   
    {738542,   0X15B2,     2},   {738926,   0X06D2,   15},   {739280,   0X0EA5,     6},   
    {739664,   0X0725,   15},   {740018,   0X064B,   15},   {740372,   0X0C97,     5},   
    {740756,   0X0CAB,   15},   {741111,   0X055A,   15},   {741465,   0X0AD6,     3},   
    {741849,   0X0B69,   15},   {742204,   0X1752,   11},   {742588,   0X0B52,   15},   //2034
    {742942,   0X0B25,   15},   {743296,   0X1A4B,     6},   {743680,   0X0A4B,   15},   
    {744034,   0X04AB,   15},   {744388,   0X055B,     5},   {744772,   0X05AD,   15},   
    {745127,   0X0B6A,   15},   {745482,   0X1B52,     2},   {745866,   0X0D92,   15},   
    {746220,   0X1D25,     7},   {746604,   0X0D25,   15},   {746958,   0X0A55,   15},   
    {747312,   0X14AD,     5},   {747696,   0X04B6,   15},   {748050,   0X05B5,   15},  //2049
    {748405,   0X1DAA,     3}};   //2050
    
    
int month1[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
string week1[7]={"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
string month2[12]={"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"};
string weeks[7] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
string months[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
"Oct", "Nov", "Dec"};


//默认构造函数
rebook::rebook()               // 

{
    where = "xxx";//地点
    things = "xxx";//事件
    what = "xxx";//事件描述
    signs = "xxx";//标题
    data = "xxx";//日期
}

//新建备忘录
void rebook::new_book()
{
    system("cls");
    cout <<endl <<"记事(以'#'表示结束)" <<endl;
    time_t timer;
    time(&timer);
    
    cout <<endl <<"时间 : "<<asctime(localtime(&timer)) <<endl;
    cout <<"标题 : ";
    cin >>signs;
    
    ofstream tempFile("record\\temp.txt");
    time(&timer);
    tempFile <<"时间 : "<<asctime(localtime(&timer)) <<endl
        <<"标题 : " <<signs <<endl <<endl
        <<"内容 : "; 
    
    cout <<endl <<"内容 : " << endl;
    tempFile << endl << endl ;
    string str;
    while (1)
    { 
        cin >>str;
        if (str[str.length()-1] == '#')
        {
            str[str.length()-1] = ' ';
            tempFile <<str <<endl <<endl;
            break;
        }
        tempFile <<str <<endl <<endl;
    }
    tempFile.close();
    ofstream reFile1("record\\title.txt", ios::app);
    reFile1 <<signs <<endl <<asctime(localtime(&timer)) <<endl;
    reFile1.close();
    string fname = "record\\"+signs+".txt";
    ofstream reFile(fname.c_str()); 
    ifstream tempFile1("record\\temp.txt");
    assert(tempFile1);
    reFile <<tempFile1.rdbuf();
    tempFile1.close();
    reFile.close();
    cout <<endl <<endl <<"记录已经保存!!!" <<endl <<endl;
    system("pause");   
}


//修改备忘录
void rebook::alter_book()
{
    while (1)
    {
        system("cls");
        cout <<endl <<"请选择你想修改的标题 : " <<endl <<endl;
        int i = 1;
        ifstream reFile("record\\title.txt");
        if (!reFile)
        {
            ofstream reFile1("record\\title.txt");
            reFile1.close();
            ifstream reFile("record\\title.txt");
        }
        while (reFile >>signs)
        {
            reFile.get();
            getline(reFile, data);
            cout <<i <<".\t" <<setiosflags(ios::left) <<setw(30) <<signs <<" "
                <<data <<endl <<endl;
            i++;
        }
        reFile.close();
        cout <<endl <<i <<".\t返回" <<endl <<endl;
        cout <<"选择 : ";
        int select;
        cin >>select;
        if (select == i)
            return;
        
        ifstream reFile2("record\\title.txt");
        assert(reFile2);
        i = 1;
        while (reFile2 >>signs)
        {
            reFile2.get();
            getline(reFile2, data);
            if (i == select)
            {
                string fname = "record\\"+signs+".txt";
                system("cls");
                ifstream reFile3(fname.c_str());
                assert(reFile3);
                cout <<endl <<"你想修改的内容如下 : " <<endl <<endl;
                cout <<reFile3.rdbuf();
                reFile3.close();
                ofstream tempFile("record\\temp.txt");
                cout <<endl <<endl <<"请在下面输入新的内容 (以'#'结束): " <<endl <<endl;
                tempFile <<"标题 : " <<signs <<endl <<endl;
                tempFile <<"内容 : ";
                cout <<"内容 : ";
                string str;
                while (1)
                {
                    cin >>str;
                    if (str[str.length()-1] == '#')
                    {
                        str[str.length()-1] = ' ';
                        tempFile <<str <<endl;
                        break;
                    }
                    tempFile <<str <<endl;
                }
                tempFile.close();
                ifstream tempFile1("record\\temp.txt");
                assert(tempFile1);
                ofstream reFile4(fname.c_str());
                reFile4 <<tempFile1.rdbuf();
                tempFile1.close();
                reFile4.close();
                cout <<endl <<endl <<"内容更新完成!!!!" <<endl <<endl;
                system("pause");
                break;
            }
            i++;
        }
        reFile2.close();
    }
}


//删除备忘录
void rebook::delet_book()
{
    while (1)
    {
        system("cls");
        cout <<endl <<"请选择一个你想删除的标题 : " <<endl <<endl;
        ifstream reFile("record\\title.txt");
        if (!reFile)
        {
            ofstream reFile1("record\\title.txt");
            reFile1.close();
            ifstream reFile("record\\title.txt");
        }
        int i = 1;
        while (reFile >>signs)
        {
            reFile.get();
            getline(reFile, data);
            cout <<i <<".\t" <<setiosflags(ios::left) <<setw(30) <<signs <<" "
                <<data <<endl <<endl;
            i++;
        }
        reFile.close();
        cout <<endl <<i <<".\t返回" <<endl <<endl;
        int select;
        cout <<"选择 : ";
        cin >>select;
        if (select == i)
            return;
        ifstream reFile2("record\\title.txt");
        assert(reFile2);
        ofstream tempFile("record\\temp.txt");
        i = 1;
        while (reFile2 >>signs)
        {
            reFile2.get();
            getline(reFile2, data);
            if (i != select)
                tempFile <<signs <<endl <<data <<endl <<endl;
            else
            {
                system("cls");
                cout <<endl <<endl <<"你想删除的备忘录内容如下 : " <<endl <<endl;
                string fname = "record\\"+signs+".txt";
                ifstream reFile3(fname.c_str());
                assert(reFile3);
                cout <<reFile3.rdbuf();
                reFile3.close();
            }
            getline(reFile2, data);
            i++;
        }
        reFile2.close();
        tempFile.close();
        ifstream tempFile1("record\\temp.txt");
        assert(tempFile1);
        ofstream reFile4("record\\title.txt");
        reFile4 <<tempFile1.rdbuf();
        tempFile1.close();
        reFile4.close();
        cout <<endl <<endl <<"该条备忘录已经删除!!!" <<endl <<endl;
        system("pause");
    }
};


//浏览记事本
void rebook::scan_book()
{
    while (1)
    {
        system("cls");     // 

        cout <<endl <<"记事本查询" <<endl <<endl;
        ifstream reFile("record\\title.txt");
        if (!reFile)
        {
            ofstream reFile1("record\\title.txt");
            reFile1.close();
            ifstream reFile("record\\title.txt");
        }
        int i = 1;
        cout <<"序号\t" <<setiosflags(ios::left) <<setw(30) <<"标题 " <<"\t日期" <<endl <<endl;
        while (reFile >>signs)
        {
            reFile.get();
            getline(reFile, data);
            cout <<i <<".\t" <<setiosflags(ios::left) <<setw(30) <<signs <<" "
                <<data <<endl <<endl;
            i++;
        };
        reFile.close();
        cout <<i <<".\t返回";
        int select;
        cout <<endl <<endl <<"选择 : ";
        cin >>select;
        if (select == i)
            return;
        i = 1;
        ifstream reFile2("record\\title.txt");
        assert(reFile2);
        while (reFile2 >>signs)
        {
            reFile2.get();
            getline(reFile2, data);
            if (i == select)
            {
                system("cls");
                string fname = "record\\"+signs+".txt";
                ifstream reFile3(fname.c_str());
                assert(reFile3);
                cout <<reFile3.rdbuf();
                reFile3.close();
                cout <<endl <<endl;
                system("pause");
                break;
            }
            getline(reFile, data);
            i++;
        }
        reFile2.close();
    }
}

//默认构造函数
whatdata::whatdata():abook()
{
    week = "xxx";
    month = "xxx";
    day = "xxx";
    year = "xxx";
}


//首页
char whatdata::inter_face()
{
    system("cls");
    char choose;

    cout << endl;
    cout<<"\t                日 历 记 事 本                        " <<endl
        <<"\t                                                      " <<endl
        <<"\t                                                      " <<endl
        <<"\t                1.  记事本                            " <<endl
        <<"\t                                                      " <<endl
        <<"\t                2.  浏览记事本                        " <<endl
        <<"\t                                                      " <<endl
        <<"\t                3.  管理记事本                        " <<endl
        <<"\t                                                      " <<endl
        <<"\t                4.  日历查询                          " <<endl
        <<"\t                                                      " <<endl
        <<"\t                5.  关闭记事本                        " <<endl
        <<"\t                                                      " <<endl
        <<"\t                                                      " <<endl <<endl <<"\t\t";
    
    choose = getch();
    
    return choose;
}


//日历查询
void whatdata::search_data()
{
    while (1)
    {
        system("cls");
        cout << endl << "\t\t万年历查询" << endl << endl ;
        cout << "\t●\t1.  日历查询 " << endl << endl
            << "\t●\t2.  月历查询" << endl << endl
            << "\t●\t3.  返回" << endl << endl;
        
        char select = getch();
        switch (select)
        {
        case '1':
            select_day();//万年历之日历查询
            break;
        case '2':
            select_month();//万年历之月历查询
            break;
        case '4':
            return;
        default:
            break;
        }
    }
}

//备忘录管理
void whatdata::book_manage()
{
    char choose;
    
    while (1)
    {
        system("cls");
        cout <<endl <<"\t管理你的备忘录!!!!!" <<endl <<endl;
        cout <<endl <<"\t●\t\t 1.  修改备忘录" <<endl
            <<endl <<"\t●\t\t 2.  删除备忘录" <<endl
            <<endl <<"\t●\t\t 3.  返回首页" <<endl <<endl <<"\t\t\t";
        
        choose = getch();
        switch (choose)
        {
        case '1':
            abook.alter_book();//修改备忘录
            break;
        case '2':
            abook.delet_book();//删除备忘录
            break;
        case '3':
            return;
            break;
        default:
            break;
        }
    }    
}


//日历查询
void whatdata::select_day()
{
    system("cls");
    cout << endl << "\t万年历之日历查询" << endl << endl;
    cout << "\t请输入年月日 (例如 : 2007 8 15) : ";
    cin >> year >> month >>day;
    
    int days = 0;
    for (int i = 1; i < atoi(year.c_str()); i++)
    {
        if ((i%4 == 0 && i%100 != 0) || (i%400 == 0))
            days += 366;
        else
            days += 365;
        days = days%7;
    }
    
    if ((i%4 == 0 && i%100 != 0) || (i%400 == 0))
        month1[1] = 29;
    
    for (i = 0; i < atoi(month.c_str()) - 1; i++)
        days += month1[i];
    days += atoi(day.c_str());
    days = days%7;
    month1[1] = 28;
    
    cout <<endl << endl <<"阳历 : "; 
    cout << year << "  年  " << month << "  月  "
        << day << "  日  \t" << week1[days - 1] << endl << endl ;
    cout << "阴历 : ";
    int Y2, M2, D2;
    GetLunar(atoi(year.c_str()), atoi(month.c_str()), atoi(day.c_str()), Y2, M2, D2);
    cout << Y2 << "  年  " << M2 << "   月  " << D2 << "  日   "  << endl << endl;
    system ("pause");
}


//月历查询
void whatdata::select_month()
{
    system("cls");
    cout << endl << "\t万年历之月历查询" << endl << endl;
    cout << "\t请输入某年某月 (例如 : 2007 8) : " ;
    cin >> year >> month;
    cout << endl << endl <<year << "  年  " << month << "  月";
    
    if ((atoi(year.c_str())%4 == 0 && atoi(year.c_str())%100 != 0) || (atoi(year.c_str())%400 == 0))
    {
        month1[1] = 29;
        cout << "\t\t\t\t\t\t     闰年" << endl ;
    }
    else 
        cout << "\t\t\t\t\t\t     平年" << endl ;
    cout << "==========================================================" <<endl <<endl;
    cout << "星期日   星期一    星期二    星期三    星期四    星期五    星期六" <<endl <<endl;
    
    int days = 0;
    for (int i = 1; i < atoi(year.c_str()); i++)
    {
        if ((i%4 == 0 && i%100 != 0) || (i%400 == 0))
            days += 366;
        else
            days += 365;
        days = days%7;
    }
    
    for (i = 0; i < atoi(month.c_str()) - 1; i++)
        days += month1[i];
    
    days = (days + 1)%7;
    for (int j = 0; j < days; j++)
        cout << setw(10) << " ";
    cout << setw(3) << 1;
    
    for (j = 2; j <= month1[atoi(month.c_str()) - 1]; j++)
    {
        days++;
        if (days%7 == 0)
            cout << endl << endl << setw(3) << j;
        else
            cout << setw(10) << j ;
    }
    cout <<endl << endl <<"========================================================" <<endl <<endl;
    month1[1] = 28;
    fflush(stdin);
    system("pause");
}
//

//   判断输入的公历年份是否为闰年,是闰年则函数返回1,否则返回0   
int whatdata::IsLeapYear(int Year)   
{ 
    if ((Year%4==0 && Year%100!=0) || Year%400==0)
        return 1;
    else 
        return 0;   
}   


//   计算输入公历年份的1月1日为从公元1年1月1日以来的第几天,返回天数   
long whatdata::YearDays(int Year)   
{ 
    Year--; 
    return(Year*365+Year/4-Year/100+Year/400+1);
}  

 

//   计算输入的公历日期为从公元1年1月1日以来的第几天,返回总天数   
long whatdata::TotalDays(int Year, int Month, int Day)   
{  
    const   int   MonthDays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};   
    long   Days=0L; 
    int   i;  
    
    if(Month<=0)
        Month=1;   
    if(Month>12)
    {   
        Month--;   
        Year+=Month/12; 
        Month%=12; 
        Month++; 
    }   
    for(i=1;i<Month;i++)
        Days+=MonthDays[i];   
    if(IsLeapYear(Year)&&Month>2)
        Days+=1;   
    Days+=YearDays(Year);
    return   Days+Day-1;   
}   

//---------------------------------------------------------------------------   
//   输入公历年月日,返回农历年月日,函数返回1表示成功,0表示失败   
//   如果M2返回负值,则说明是农历的闰月,月份值为其绝对值.
int whatdata::GetLunar(int Y1, int M1,  int D1, int &Y2, int &M2, int &D2)   
{
    short   MBit[13]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096};   
    long   TDays;  
    int   Sum,Lest,i,Offset;  
    
    Offset=Y1-BEGINYEAR;
    if(Offset<0||Offset>YEARCOUNT)
        return   0;   
    TDays=TotalDays(Y1,M1,D1);
    Y2=Y1;   
    if(LunarIndex[Offset].Days>TDays)   
    {
        if(Offset==0)
            return   0; 
        Offset--;  
        Y2--;   
    }   
    Lest=(int)(TDays-LunarIndex[Offset].Days);   
    for(Sum=i=0;i<13;i++)   
    { 
        if((LunarIndex[Offset].Mon13&MBit[i])!=0)   
        {  
            Sum+=30;  
            if(Sum>Lest)
            {
                Sum-=30; 
                break;
            }   
        }   
        else  
        { 
            Sum+=29; 
            if(Sum>Lest)
            {  
                Sum-=29; 
                break;  
            }  
        }   
    }   
    if(i==13)
        return   0;
    i++;   
    if(i>LunarIndex[Offset].Leap)   
    {  
        i--;  
        if(i==LunarIndex[Offset].Leap)i=-i; 
    }   
    M2=i;  
    D2=Lest-Sum+1; 
    return   1;   
}
int main()
{
    whatdata object;
    rebook abook;
    char select;

    while (select = object.inter_face())
    {
        switch (select)
        {
        case '1':
            abook.new_book();//新建记事本
            break;
        case '2':
            abook.scan_book();//浏览
            break;
        case '3':
            object.book_manage();//备忘录管理
            break;
        case '4':
            object.search_data();//日历查询
            break;
        case '5':
            cout << endl << "\t谢谢使用!!!!" << endl << endl << "\t";
            exit(0);
            break;
        default:
            break;
        }
    }
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值