通讯录管理系统1. 系统需求通讯录是一个可以记录亲人、好友信息的工具。
本教程主要利用C++来实现一个通讯录管理系统
系统中需要实现的功能如下:
添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
显示联系人:显示通讯录中所有联系人信息
删除联系人:按照姓名进行删除指定联系人
查找联系人:按照姓名查看指定联系人信息
修改联系人:按照姓名重新修改指定联系人
清空联系人:清空通讯录中所有信息
退出通讯录:退出当前使用的通讯录
2. 创建项目创建项目步骤如下:
创建新项目
添加文件
3. 菜单功能功能描述: 用户选择功能的界面
步骤:
封装函数显示该界面 如 void showMenu()
在main函数中调用封装好的函数
代码:
1234567891011121314151617// 菜单界面void showMenu() { cout << "*************************" << endl; cout << "**** ...
C++核心编程本阶段主要针对C++==面向对象==编程技术做详细讲解,探讨C++中的核心和精髓。
1. 内存分区模型C++程序在执行时,将内存大方向划分为4个区域
代码区:存放函数体的二进制代码,由操作系统进行管理的
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
内存四区意义:
不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程
1. 程序运行前 在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域
代码区:
存放 CPU 执行的机器指令
代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令
全局区:
全局变量和静态变量存放在此.
全局区还包含了常量区, 字符串常量和其他常量也存放在此.
==该区域的数据在程序结束后由操作系统释放= ...
职工管理系统1. 管理系统需求职工管理系统可以用来管理公司内所有员工的信息
本教程主要利用C++来实现一个基于多态的职工管理系统
公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责
普通员工职责:完成经理交给的任务
经理职责:完成老板交给的任务,并下发任务给员工
老板职责:管理公司所有事务
管理系统中需要实现的功能如下:
退出管理程序:退出当前管理系统
增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号
显示职工信息:显示公司内部所有职工的信息
删除离职职工:按照编号删除指定的职工
修改职工信息:按照编号修改职工个人信息
查找职工信息:按照职工的编号或者职工的姓名进行查找相关的人员信息
按照编号排序:按照职工编号,进行排序,排序规则由用户指定
清空所有文档:清空文件中记录的所有职工信息 (清空前需要再次确认,防止误删)
2. 创建项目创建项目步骤如下:
创建新项目
添加文件
3. 创建管理类 管理类负责的内容如下:
与用户的沟通菜单界面
对职工增删改查的操作
与文件的读写交互
...
C++提高编程
本阶段主要针对C++==泛型编程==和==STL==技术做详细讲解,探讨C++更深层的使用
1. 模板1. 模板的概念模板就是建立通用的模具,大大提高复用性
例如:
一寸照片模板:
模板的特点:
模板不可以直接使用,它只是一个框架
模板的通用并不是万能的
2. 函数模板
C++另一种编程思想称为 ==泛型编程== ,主要利用的技术就是模板
C++提供两种模板机制:函数模板和类模板
1. 函数模板语法函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
语法:
12template<typename T>函数声明或定义
template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用class代替
T — 通用的数据类型,名称可以替换,通常为大写字母
示例:
12345678910111213141516 ...
概论1. 设计模式概述1. 软件设计模式的产生背景“设计模式”最初并不是出现在软件设计中,而是被用于建筑领域的设计中。
1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。
1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》一书,在此书中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的“四人组”(Gang of Four,GoF)著称。
2. 软件设计模式的概念软件设计模式(Software Des ...
创建型模式创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是**“将对象的创建与使用分离”**。
这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。
创建型模式分为:
[单例模式](#1. 单例设计模式✨)
[工厂模式](#2. 工厂模式✨)
[原型模式](#3. 原型模式✨)
[建造者模式](#4. 建造者模式✨)
1. 单例设计模式✨单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
1. 单例模式的结构单例模式的主要有以下角色:
单例类。只能创建一个实例的类
访问类。使用单例类
2. 单例模式的实现
单例设计模式分类两种:
饿汉式:类加载就会导致该单实例对象被创建
懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建
1. 饿汉式1. 静态变量方式1234567891011 ...
结构型模式结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。
由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。
结构型模式分为以下 7 种:
[代理模式](#1. 代理模式✨)
[适配器模式](#2. 适配器模式✨)
[装饰者模式](#3. 装饰者模式✨)
[桥接模式](#4. 桥接模式✨)
[外观模式](#5. 外观模式✨)
[组合模式](#6. 组合模式✨)
[享元模式](#7. 享元模式✨)
1. 代理模式✨1. 概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。
2. 结构代理(Proxy)模式分为三种角色:
抽象主题(Sub ...
行为型模式行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。
行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。
行为型模式分为:
[模板方法模式](#1. 模板方法模式✨)
[策略模式](#2. 策略模式✨)
[命令模式](#3. 命令模式✨)
[职责链模式](#4. 责任链模式✨)
[状态模式](#5. 状态模式✨)
[观察者模式](#6. 观察者模式✨)
[中介者模式](#7. 中介者模式✨)
[迭代器模式](#8. 迭代器模式✨)
[访问者模式](#9. 访问者模式✨)
[备忘录模式](#10. 备忘录模式✨)
[解释器模式](#11. 解释器模式✨)
以上 11 种行为型模式,除了模板方法模式和解释器模式是类行为型模式,其他的全部属于对象行为型模式。
1. 模板方法模式✨1. 概述在面向对象程序设计过程中,程 ...
自定义Spring框架1. spring使用回顾自定义spring框架前,先回顾一下spring框架的使用,从而分析spring的核心,并对核心功能进行模拟。
数据访问层。定义UserDao接口及其子实现类
12345678910public interface UserDao { public void add();}public class UserDaoImpl implements UserDao { public void add() { System.out.println("userDaoImpl ...."); }}
业务逻辑层。定义UserService接口及其子实现类
1234567891011121314151617public interface UserService { public void add();}public class UserServiceImpl implements UserService ...
共享模型之不可变
不可变类的使用
不可变类设计
无状态类设计
1. 日期转换的问题1. 问题提出下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的
12345678910SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");for (int i = 0; i < 10; i++) { new Thread(() -> { try { log.debug("{}", sdf.parse("1951-04-21")); } catch (Exception e) { log.error("{}", e); } }).start();}
有很大几率出现 java.lang.NumberFormatE ...

