C++课设《个人通讯录管理系统》

  • 通讯录管理系统
    • 1.课题简介
    • 2.课题的总体结构
    • 3.核心功能模块与类设计
    • 3.程序(系统)详细设计
      • 一.菜单类:class Face 为父类,class FACE 为子类。
      • 二.Person类:class person;
    • 功能代码图
      • 具体代码如下
    • 系统具体代码如下
    • 5.分析与讨论

通讯录管理系统

Hello大家好,本次呢,来给大家开来一个c++课设(通讯录管理系统),此次内容呢是在学习了c++语言之后,借助参考资料及课设要求来写的。
课题名称:《个人通讯录管理软件》
来源:通过这次设计,要求在逻辑特性和结构的设计及其实现等方面中加深对课程基本内容的理解。在程序结构与功能上,充分运用面向对象的思想和方法,包括信息封装、继承、多态以及文件的操作。

1.课题简介

建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。
功能要求
(1) 通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ等。
(2) 输入功能:可以一次完成若干条信息的输入。
(3) 显示功能:完成全部通讯录信息的显示(一屏最多显示10条,超过十条应能够自动分屏显示)
(4) 查找功能:可以按姓名等多种方式查找通讯信息
(5) 增加、删除、修改功能:完成通讯录信息的多种更新
(6)信息保存到文件及从文件调入(在输入时就可实现时时保存)

2.课题的总体结构

描述程序文件的总体结构,最好给出程序(系统)的功能结构图或类层次关系图。

3.核心功能模块与类设计

表一:person类

数据名称 类型定义
姓名 String name
关系 Int relationship
年龄 int age
固定电话(传真) long fixed
移动电话 long mobile
家庭住址 string address
函数名称 … 函数类型 功能
Xiugai …void 修改联系人
Chazhao …void 查找联系人
Xianshi… void 显示所有联系人
Tianjia … void 添加联系人
tuichu …void 退出系统
shanchu… void 删除联系人
jiance… void 检测
Jiance_1 … void 检测
Xieru… void 文件写入
Xieru_1 …void 文件写入
duqu …void 文件读取

表二:菜单类Face(父类)FACE(子类)

|函数名称 | 函数类型 |功能
Face_1| virtual void |主菜单
Face_2| virtual void |修改菜单
Face_3| virtual void |查找菜单

3.程序(系统)详细设计

一.菜单类:class Face 为父类,class FACE 为子类。

父类中定义纯虚函数;
子类继承父类,父类指针指向子类对象,实现多态

class Face//父类
{public:Face(){}~Face(){}virtual void Face_1() = 0;virtual void Face_2() = 0;virtual void Face_3() = 0;
};
class FACE :public Face//继承(子类 )
{public:FACE(){}~FACE(){}void Face_1();void Face_2();void Face_3();
};

二.Person类:class person;

该类为核心,包含一系列功能的函数的声明及实现。

class Person   //创建一个类(主类)
{public:string name;int relationship;int age;long fixed;long mobile;string address;Person* next;
public:Person(){}void xiugai();//修改 void chazhao();//查找 void xianshi();//显示 void tianjia();//添加 void tuichu();//退出 void shanchu();//删除 void jiance();//检测void jiance_1();//检测-2 void xieru(); //写入 void xieru_1();//写入-2 void duqu(); //读取 ~Person(){}
};

功能代码图

本程序实现了添加、显示、删除、修改、清空、查找功能。

具体代码如下

添加:

void tianjia()//添加及查重
{int n;int y;class Person* p1;class Person* p2;if (m==0){p1 = new Person;p2 = new Person;head = p1;p1->next = p2;m++;}else{p1 = head;while (p1->next != NULL){p1 = p1->next;cout << "2" << endl;}p2 = new Person;p1->next = p2;}cout << "您想添加几位联系人?" << endl;cin >> n;for (int i = 1; i <= n; i++){p1 = new Person;cout << "请输入第" << i << "位联系人姓名:";cin >> p2->name;cout << "请输入第" << i << "位联系人类型:";cout << "1  代表 同学;  2  代表 老师;  3  表示 亲人" << endl;cin >> p2->relationship;cout << "请输入第" << i << "位联系人年龄:";cin >> p2->age;cout << "请输入第" << i << "位联系人固定电话号:";cin >> p2->fixed;cout << "请输入第" << i << "位联系人移动电话号:";cin >> p2->mobile;cout << "请输入第" << i << "位联系人地址:";cin >> p2->address;int c = jiance(p2->mobile);if (c == 1){c = 0;cout << "此联系人已存在请重新添加联系人!" << endl;i--;continue;}if (i == n){cout << "添加联系人完成!" << endl;break;}cout << "是否提前结束输入?" << endl;cout << "'0'代表结束" << endl;cin >> y;if (y == 0){cout << "成功提前结束输入!" << endl;break;}p2->next = p1;p2 = p1;}
}

显示

void xianshi()
{int h = 1;int n = 1;class Person* p1;p1 = new Person;p1 = head->next;do{cout << "第" << n << "名联系人的姓名为:" << p1->name << endl;if (p1->relationship == 1)cout << "第" << n << "名联系人是:同学" << endl;else if (p1->relationship == 2)cout << "第" << n << "名联系人是:老师" << endl;else if (p1->relationship == 3)cout << "第" << n << "名联系人是:亲人" << endl;cout << "第" << n << "名联系人的年龄为:" << p1->age << endl;cout << "第" << n << "名联系人的固定电话号为:" << p1->fixed << endl;cout << "第" << n << "名联系人的移动电话号为:" << p1->mobile << endl;cout << "第" << n << "名联系人的家庭住址为:" << p1->address << endl << endl;p1 = p1->next;if (n % 10 == 0){cout << "\t\t\t第" << h << "页" << endl;system("pause");system("cls");h++;}} while (p1 != NULL);
}

删除

void shanchu()
{long number;class Person* p1;class Person* p2;p1 = new Person;p2 = new Person;p1 = head;cout << "请输入您想删除联系人的移动电话号码:";cin >> number;int n = jiance_1(number);if (n == 1){do{p2 = p1;p1 = p1->next;if (p1->mobile == number){p2->next = p1->next;cout << "删除完毕!" << endl;break;}} while (p1->next != NULL);}elsecout << "通讯录中没有相关的联系人信息!" << endl;
}

修改

void xiugai()//修改
{Face* W = new FACE;        // int m;string str;//      定义 class Person* p;p = head->next;while (1){int n = 0;cout << "请输入您想修改联系人的姓名:" << endl;cin >> str;while (p != NULL){if (p->name == str){while (1){W->Face_2();cin >> m;if (m == 1){cout << "请输入修改地正确的年龄:";cin >> p->age;}if (m == 2){cout << "请输入修改地正确的固定电话号(传真):";cin >> p->fixed;}if (m == 3){cout << "请输入修改地正确的移动电话号:";cin >> p->mobile;}if (m == 4){cout << "请输入修改地正确的家庭住址:";p->address;}if (m == 5){cout << "请输入修改地正确的联系人关系:";p->relationship;}if (m == 0)break;}n++;}p = p->next;}if (n == 0){cout << "查无此人" << endl;}cout << "是否结束联系人信息修改?" << endl << "0表示结束修改联系人信息";cin >> m;if (m == 0)break;}}

清空

void qingkong()
{head = NULL;m = 0;xieru_1();cout << "成功清空通讯录" << endl;
}

查找

void chazhao()
{long Num;class Person* p1;p1 = new Person;p1 = head->next;cout << "请输入您想查询联系人的联系方式:" << endl;cin >> Num;while (p1 != NULL){if (Num == p1->mobile){cout << "该联系人的姓名为:" << p1->name << endl;if (p1->relationship == 1)cout << "该联系人是:同学" << endl;else if (p1->relationship == 2)cout << "该联系人是:老师" << endl;else if (p1->relationship == 3)cout << "该名联系人是:亲人" << endl;cout << "该联系人的年龄为:" << p1->age << endl;cout << "该联系人的电话号为:" << p1->mobile << endl;cout << "该联系人的家庭住址为:" << p1->address << endl;break;}p1 = p1->next;}}

系统具体代码如下

#include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
int l=0;
int A;
int m = 0;
char x[100];
class Person* head = NULL;
class Face//父类
{public:Face(){}~Face(){}virtual void Face_1() = 0;virtual void Face_2() = 0;virtual void Face_3() = 0;
};
class FACE :public Face//继承(子类 )
{public:FACE(){}~FACE(){}void Face_1();void Face_2();void Face_3();
};
class Person   //创建一个类(主类)
{public:string name;int relationship;int age;long fixed;long mobile;string address;Person* next;
public:Person(){}void xiugai();//修改 void chazhao();//查找 void xianshi();//显示 void tianjia();//添加 void tuichu();//退出 void shanchu();//删除 void jiance();//检测void jiance_1();//检测-2 void xieru(); //写入 void xieru_1();//写入-2 void duqu(); //读取 ~Person(){}
};
void FACE::Face_1()
{system("cls");system("color 55");system("date/T");//日期 system("TIME/T");//时间 cout << "\t\t\t\t**************************************************" << endl;cout << "\t\t\t\t*****                个人通讯录软件          *****" << endl;cout << "\t\t\t\t*****========================================*****" << endl;cout << "\t\t\t\t*****                 1.添加联系人           *****" << endl;cout << "\t\t\t\t*****                                        *****" << endl;cout << "\t\t\t\t*****                 2.显示联系人           *****" << endl;cout << "\t\t\t\t*****                                        *****" << endl;cout << "\t\t\t\t*****                 3.删除联系人           *****" << endl;cout << "\t\t\t\t*****                                        *****" << endl;cout << "\t\t\t\t*****                 4.修改联系人           *****" << endl;cout << "\t\t\t\t*****                                        *****" << endl;cout << "\t\t\t\t*****                 5.清空联系人           *****" << endl;cout << "\t\t\t\t*****                                        *****" << endl;cout << "\t\t\t\t*****                 6.查找联系人           *****" << endl;cout << "\t\t\t\t*****                                        *****" << endl;cout << "\t\t\t\t*****                 7.退出通讯录           *****" << endl;cout << "\t\t\t\t**************************************************" << endl;
}
void FACE::Face_2()
{system("cls");system("date/T");//日期 system("TIME/T");//时间 cout << "\t\t\t\t***********************************" << endl;cout << "\t\t\t\t****       1.修改年龄          ****" << endl;cout << "\t\t\t\t****                           ****" << endl;cout << "\t\t\t\t****       2.修改固话(传真)  ****" << endl;cout << "\t\t\t\t****                           ****" << endl;cout << "\t\t\t\t****       3.修改移动电话      ****" << endl;cout << "\t\t\t\t****                           ****" << endl;cout << "\t\t\t\t****       4.修改家庭住址      ****" << endl;cout << "\t\t\t\t****                           ****" << endl;cout << "\t\t\t\t****       5.修改联系人关系    ****" << endl;cout << "\t\t\t\t****                           ****" << endl;cout << "\t\t\t\t****       0.退出修改          ****" << endl;cout << "\t\t\t\t***********************************" << endl;
}
void FACE::Face_3()
{//system("color ");system("cls");system("date/T");//日期 system("TIME/T");//时间 cout << "\t\t\t\t***********************************" << endl;cout << "\t\t\t\t****        1.按姓名查找       ****" << endl;cout << "\t\t\t\t****                           ****" << endl;cout << "\t\t\t\t****        2.按手机号查找     ****" << endl;cout << "\t\t\t\t***********************************" << endl;
}
void xiugai()//修改
{Face* W = new FACE;        // int m;string str;//      定义 class Person* p;p = head->next;while (1){int n = 0;cout << "请输入您想修改联系人的姓名:" << endl;cin >> str;while (p != NULL){if (p->name == str){while (1){W->Face_2();cin >> m;if (m == 1){cout << "请输入修改地正确的年龄:";cin >> p->age;}if (m == 2){cout << "请输入修改地正确的固定电话号(传真):";cin >> p->fixed;}if (m == 3){cout << "请输入修改地正确的移动电话号:";cin >> p->mobile;}if (m == 4){cout << "请输入修改地正确的家庭住址:";p->address;}if (m == 5){cout << "请输入修改地正确的联系人关系:";p->relationship;}if (m == 0)break;}n++;}p = p->next;}if (n == 0){cout << "查无此人" << endl;}cout << "是否结束联系人信息修改?" << endl << "0表示结束修改联系人信息";cin >> m;if (m == 0)break;}}void duqu()
{Person* p = head->next, * p2 = NULL, * p3 = NULL;//*p3指针是用于解决eof()函数所引起的末尾重复问题ifstream out("D:/txlglxt.txt", ios::binary);if (!out) {cout << "文件打开失败!" << endl;return;}while (!out.eof()) {p2 = new Person;if (out.peek() == EOF)break;out >> p2->name >> p2->relationship >> p2->age >> p2->fixed >> p2->mobile >> p2->address;p->next = p2;p3 = p;p = p->next;}p3->next = NULL;out.close();
}
void xieru_1()
{Person* p = head;ofstream in("D:/txlglxt.txt", ios::binary);if (!in) {cout << "文件无法创建" << endl;return;}while (p != NULL) {in << p->name << "\t" << p->relationship << "\t" << p->age << "\t" << p->fixed << "\t" << p->mobile << "\t" << p->address << "\n";p = p->next;}in.close();
}
void xieru()
{Person* p = head->next;ofstream in("D:/txlglxt.txt", ios::binary);if (!in) {cout << "文件无法创建" << endl;return;}while (p != NULL) {in << p->name << "\t" << p->relationship << "\t" << p->age << "\t" << p->fixed << "\t" << p->mobile << "\t" << p->address << "\n";p = p->next;}in.close();system("cls");cout << "***********************************" << endl;cout << "***         通讯录保存成功!    ***" << endl;cout << "***********************************" << endl;
}
int jiance_1(int Num)
{class Person* p1;p1 = new Person;p1 = head;do{if (p1->mobile == Num){l = 1;break;}else{l = 0;}p1 = p1->next;} while (p1 != NULL);return l;
}
int jiance(int Num)
{class Person* p1;p1 = new Person;p1 = head;while (p1->next != NULL){if (p1->mobile== Num){l = 1;break;}else{l = 0;}p1 = p1->next;}return l;
}
void qingkong()
{head = NULL;m = 0;xieru_1();cout << "成功清空通讯录" << endl;
}
void shanchu()
{long number;class Person* p1;class Person* p2;p1 = new Person;p2 = new Person;p1 = head;cout << "请输入您想删除联系人的移动电话号码:";cin >> number;int n = jiance_1(number);if (n == 1){do{p2 = p1;p1 = p1->next;if (p1->mobile == number){p2->next = p1->next;cout << "删除完毕!" << endl;break;}} while (p1->next != NULL);}elsecout << "通讯录中没有相关的联系人信息!" << endl;
}void chazhao()
{long Num;class Person* p1;p1 = new Person;p1 = head->next;cout << "请输入您想查询联系人的联系方式:" << endl;cin >> Num;while (p1 != NULL){if (Num == p1->mobile){cout << "该联系人的姓名为:" << p1->name << endl;if (p1->relationship == 1)cout << "该联系人是:同学" << endl;else if (p1->relationship == 2)cout << "该联系人是:老师" << endl;else if (p1->relationship == 3)cout << "该名联系人是:亲人" << endl;cout << "该联系人的年龄为:" << p1->age << endl;cout << "该联系人的电话号为:" << p1->mobile << endl;cout << "该联系人的家庭住址为:" << p1->address << endl;break;}p1 = p1->next;}}
void xianshi()
{int h = 1;int n = 1;class Person* p1;p1 = new Person;p1 = head->next;do{cout << "第" << n << "名联系人的姓名为:" << p1->name << endl;if (p1->relationship == 1)cout << "第" << n << "名联系人是:同学" << endl;else if (p1->relationship == 2)cout << "第" << n << "名联系人是:老师" << endl;else if (p1->relationship == 3)cout << "第" << n << "名联系人是:亲人" << endl;cout << "第" << n << "名联系人的年龄为:" << p1->age << endl;cout << "第" << n << "名联系人的固定电话号为:" << p1->fixed << endl;cout << "第" << n << "名联系人的移动电话号为:" << p1->mobile << endl;cout << "第" << n << "名联系人的家庭住址为:" << p1->address << endl << endl;p1 = p1->next;if (n % 10 == 0){cout << "\t\t\t第" << h << "页" << endl;system("pause");system("cls");h++;}} while (p1 != NULL);
}
void tianjia()//添加及查重
{int n;int y;class Person* p1;class Person* p2;if (m==0){p1 = new Person;p2 = new Person;head = p1;p1->next = p2;m++;}else{p1 = head;while (p1->next != NULL){p1 = p1->next;cout << "2" << endl;}p2 = new Person;p1->next = p2;}cout << "您想添加几位联系人?" << endl;cin >> n;for (int i = 1; i <= n; i++){p1 = new Person;cout << "请输入第" << i << "位联系人姓名:";cin >> p2->name;cout << "请输入第" << i << "位联系人类型:";cout << "1  代表 同学;  2  代表 老师;  3  表示 亲人" << endl;cin >> p2->relationship;cout << "请输入第" << i << "位联系人年龄:";cin >> p2->age;cout << "请输入第" << i << "位联系人固定电话号:";cin >> p2->fixed;cout << "请输入第" << i << "位联系人移动电话号:";cin >> p2->mobile;cout << "请输入第" << i << "位联系人地址:";cin >> p2->address;int c = jiance(p2->mobile);if (c == 1){c = 0;cout << "此联系人已存在请重新添加联系人!" << endl;i--;continue;}if (i == n){cout << "添加联系人完成!" << endl;break;}cout << "是否提前结束输入?" << endl;cout << "'0'代表结束" << endl;cin >> y;if (y == 0){cout << "成功提前结束输入!" << endl;break;}p2->next = p1;p2 = p1;}
}
void tuichu()
{cout << "感谢您的使用,成功退出通讯录!" << endl;exit(0);
}
void caidan()
{Face* W = new FACE;while (1){W->Face_1();cout << "请选择您想进行的操作:" << endl;cin >> x;if (m == 0 && x[0] - 48 != 1){cout << "链表为空!请您先进行联系人信息导入!" << endl;system("pause");continue;}switch (x[0] - 48){case 1:        //创建通讯录tianjia();xieru();system("pause");break;case 2:        //显示通讯录xianshi();system("pause");break;case 3:        //删除联系人shanchu();system("pause");break;case 4:        //修改已存在联系人个人信息xiugai();system("pause");break;case 5:      //清空通讯录qingkong();system("pause");break;case 6:       //查找联系人个人信息chazhao();system("pause");break;case 7:        //退出通讯录tuichu();system("pause");break;default:system("cocor 40");cout << "请正确输入操作选项!" << endl;system("pause");}}
}
int main()
{system("color 3");cout << "通讯录加在中......." << endl;cout << "请稍等......" << endl;system("pause");system("cls");cout << "加载成功!" << endl;system("pause");caidan();return 0;
}

5.分析与讨论

根据程序(系统)的运行结果,说明程序解决了哪些问题?还有哪些问题没有[很好地]解决或者处理得不够完善?
本程序在制作中解决了大范围修改、只能单个添加等问题,实现了一次多个添加,精确修改等
本程序在文件方面以及查找方面还存在一些问题。
介绍本课程设计实施过程中所取得的经验教训,展望下一步的工作。
在编写代码之前要有大致的框架,分布实现功能,要熟练掌握C++语言的应用。希望在日后的学习中继续努力深一步的学习,争取以后写的程序功能多一点,bug少一点,头发一点儿也不掉。

拜拜!!!

C++课设《个人通讯录管理系统》相关推荐

  1. C语言课设物资管理系统,C语言课设之物资管理系统.doc

    C语言课设之物资管理系统 C语言课程设计 目 录 1.需求分析: 2.系统总框图: 3.每个模块的设计分析: 4.列出所有定义的函数及说明: 5.举例说明1.2个比较有特点的算法: 6.数据分析.完备 ...

  2. 日程信息管理系统设计与实现C 语言论文,C课设个人日程管理系统.docx

    C课设个人日程管理系统 可视化程序设计 大作业 班 级: 学 号: 姓 名: 指导教师: 计算机与通信工程学院 2018.01 1. 任务描述 课题:日程管理系统 由于题目没有提及要实现的具体的功能, ...

  3. 课设影院信息管理系统

        课设影院信息管理系统 一.影院具体信息介绍: 1.人员分类: 负责人,管理者,售票者,顾客 2.人员涉及的功能: 负责人:注册管理者和售票者账号信息 管理者:管理影片信息,增删修改 售票者:查 ...

  4. 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc

    学生信息管理系统C语言课设 目录 一.需求分析2 二.概要设计2 三.详细设计4 四.调试分析9 五.用户手册9 六.测试数据9 七.附录10 一.需求分析学生学籍管理系统用数据文件存放学生的学籍,可 ...

  5. C++课设-学生信息管理系统

    前言:上学期的一个简单的C++课设项目(代码在后面,附github项目链接) 一.问题描述: 建立学生信息数据,包括学号.姓名.性别.三科成绩.出生时间.年龄(必须计算得到). 使用继承的方法构造至少 ...

  6. 数据库原理与实践课设(宾馆管理系统),java+jdbc+sqlserver2017

    第一次用java写这么多东西,发现开发方面确实比C++高很多,哈哈哈当然要记录下来 ~ ps:课设中涉及的所有数据都是存在数据库中的~~~ 1.首先当然是连接数据库啦,我这了采用的编程语言是java, ...

  7. C语言课设——酒店预订管理系统

    课设要求: 客房信息管理. 客人预订及入住信息管理. 各种查询和统计功能. 本系统要有通用性.界面美观.操作方便.要考虑系统安全. 可增加其他有用的功能. 头文件function.h #pragma ...

  8. 大一学生课设c——服装管理系统

    前言 前一段时间有个同学找到我,帮他完成了一个课程设计,由于他不是学计算机的么,懂得都懂,谁大一像码明这么苦逼啊!天天捣鼓这些,所以他给了我一定的报酬,我也就帮他完成了,过去1个多月了,也不会出现雷同 ...

  9. C语言课设:影片管理系统

    在接触并学习C语言之后,往往需要做一个简单的课设系统完成对C语言的学习.当然,这可能是我们接触代码以来写过的最长的代码,不排除对新手有一定难度.由于之前笔者划水了一段时间,导致一些知识遗忘了,所以只得 ...

  10. C语言课设手机电话簿管理系统(大作业)

    一.任务概述(文章仅供参考) 用c设计出模拟手机通讯录管理系统,实现对手机中的通讯录进行管理 二.设计功能 查看功能:选择此功能时,列出下列三类选择.A办公类,B个人类,C商务类,当选中某类时,显示出 ...

最新文章

  1. AI一分钟 | Yann LeCun怒批机器人Sophia:招摇撞骗;李嘉诚:我比较保守,只投了1亿港币到比特币终端市场
  2. 笔记-信息系统开发基础-CMMI过程域分类-连续式的模型
  3. Android简单实现将手机图片上传到服务器中
  4. Vue CLI 3 脚手架搭建
  5. Python通过amqp消息队列协议中的Qpid实现数据通信
  6. C++实例讲解Binder通信
  7. [振动力学]期中复习
  8. 判定两个tensor维度相同_Pytorch之Tensor大详解
  9. sqlserver实验心得体会_sql查询操作实验总结.docx
  10. 服务器怎么ghost备份系统,GHOST备份系统的方法 GHOST备份系统教程
  11. (哈工大)计算机网络体系结构——OSI、TCP/IP、5层模型
  12. 【CCNA题库】Ti CCNA640-802V30版题库
  13. (快速下载)百度 apollo 开源代码
  14. Word文档,英文字母间隔非常大,解决方法
  15. 南大软院21天学霸养成计划—第6天
  16. plot函数二维绘图
  17. Linux虚拟机克隆后网络冲突解决办法
  18. 数组的entries()方法
  19. 三菱PLC编程与案例精讲之ST语言
  20. 小故事让你秒懂“资产证券化”

热门文章

  1. 光的双缝干涉强度和干涉条纹
  2. Java并发编程之饥渴与公平
  3. mendeley在word上使用
  4. 计算机中的英语六级作文万能模板,大学英语六级作文万能模板大全最全面总结精选.pdf...
  5. 读取xml到DataSet中去
  6. Linux环境安装Jenkins
  7. 有界面版本的linux,一款美呆了的国产linux系统,UI界面媲美Windows
  8. 【R语言】实现VAR、SVAR
  9. 更新|Cheetah: 精简快速的安全两方DNN推理
  10. OpenJudge百炼-2967-特殊日历计算-C语言-日期处理