自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++ 成员方法及区别 / 指向类成员的指针 /

OOP思想下成员方法及区别class CDate {public: CDate(int y, int m, int d) { _year = y; _mouth = m; _day = d; } void show() { cout << _year << endl; cout << _mouth << endl; cout << _day << endl; }private: int _yea

2021-02-01 12:14:57 183

原创 C++ const如何用?

翻阅了不少资料,对于const 的用法一直是一个困惑,不过最后也是搞懂了,两个字概括,const是”只读“;首先清楚一下const 的使用规则:1.const修饰的变量不能作为左值,并且初始化之后只可读,不可写;2.在c语言中const修饰的变量可以不初始化,所以他不配成为只读量也就是常量,叫做常变量;C和C++中对于const关键字是有一定的区别的,区别在两种语言在编译时对const 的处理是不一样的,在C中,const关键字是当作一个变量来编译生成指令的,而在C++中呢,所有的const常量

2020-12-31 00:43:42 156

原创 C++ inline函数及其与普通函数区别

定义inline函数,在编译过程中,省去函数的调用开销,在函数的调用点直接展开函数代码处理。规则inline关键字是一定要和函数体定义放在一起得,和声明结合是没有作用的。所以又说inline关键字是一个用于实现的关键字而不是一个用于声明的关键字。对于类方法,定义在类体内部的方法自动成为内联函数。文字说明太过冗余我们举例说明:Sum(int a,int b){ }int main(){ Sum(a,b); return 0;}当程序从main开始之后,到了Sum()时,实

2020-12-22 22:51:41 394

原创 从头看起学会Linux-3

如何搭建一个可使用的简易http服务器1.搭建TCP服务器;2.等待连接,接受数据;3.针对客户端的业务请求进行功能处理后组织想要http数据信息发送给客户端;我们之前提到过http还有一个加密版-https,这两者之间有何差异,加密又体现在那些地方?单从两位大佬的名字看,一个比一个多一个s,差异就在这个s上,s是指SSL/TLS协议...

2020-12-21 23:00:15 116

原创 看懂C++如何实现函数堆栈调用

提问1.main()函数调用一个自定义函数之后(函数的定义再main()外),如何再次回到main()的位置;提问2.既然知道返回main()函数,那如何知道返回到main()函数的哪一行操作呢?我们先写一段代码,方便研究:int sum(int a,int b){ int temp=a+b; return temp;}int main(){ int x = 10; int y = 20; int result = sum(x,y); cout<<result.

2020-12-19 18:13:58 419 2

原创 从头看起学会Linux-2

在学习之前呢推荐大家一个软件,可以进行网络通信抓包,方便学习,链接奉上;链接:https://pan.baidu.com/s/13XSTzHja7rsL_J-nbajMAA 提取码:by9bHTTP协议格式1.首行 描述本次请求或者响应的关键信息,又因为服务端和操作端分为响应首行和请求首行;2.头部 针对本次请求或相应的细节信息;3.空行 间隔头部与正文4.正文 正文内容请求首行分析首行内容有三大信息,请求方法、URL、协议版本;其中请求方法多样,如下URL指唯一资源定位,也就是请

2020-12-17 22:44:32 78

原创 从头看起学会Linux-1

网络分层协议参考《图解TCP/IP》,如下图是一份OSI模型图:OSI参考模型及各层作用言归正传应用层:负责应用程序间数据沟通。主要有两大类协议方式,一是自定制协议,二是知名协议;自定制协议顾名思义就是可以程序员自己操作自己定义的协议方式;而知名协议就如http协议;不管使用那种协议方式,我们都知道数据在网络中的传输是0和1,也就是二进制,协议呢,是对数据进行传输或可持久化存储数据的一种方式,这里我们引入(序列化/反序列化),能更好的帮我们进行数据管理;序列化:将数据对象按指定协议进行组织

2020-12-17 21:52:28 185

原创 进程虚拟地址空间划分

大体概括当一个程序跑起来时,我们的操作系统会主动的分配此程序的虚拟地址空间,每个进程的虚拟地址空间会被划分成为多个区间,当然,地址空间的划分因为其依赖于操作系统而实现的,所以划分方式会随着内核的不同而不同,可以肯定的是其分为两大部分,内核空间和用户空间。提问:为什么会有这么个东西?至于为什么需要划分虚拟地址空间我们提一嘴,是因为操作系统对进程地址空间的管理以及物理地址的隐蔽,我们所运行的程序代码是无法直接访问物理内存的。早期的内存管理机制呢是在运行一个程序的时候将程序全部一股脑儿的加载到内存,这样的操

2020-12-15 23:17:20 299 2

原创 数据库整理2

MYSQL插件式存储引擎的数据库存储引擎: 存储方式 [磁盘]1.MyISAM 不支持外键,不支持事务 支持全文索引,底层用B+树; 支持表锁;2.InnoDB 支持外键,支持事务; 不支持全文索引,底层用B+树; 支持行锁;3.MEMORY 数据存在内存上,读写效率高,适合存储临时表数据;/*不考虑数据安全*/[从几个表中拼接出来的临时表]; 支持索引,底层哈希索引; varchar == char; 不支持text、BOLB类型字段; [文本] [图片

2020-11-02 12:53:54 115

原创 数据库整理

DDL,Data Definition Language,数据库定义语言用于定义和管理数据库所有对象的语言,包括:CREATE,ALERT,DROP,TRUNCATEDML,Data Manipulation Language,数据库操作语言SQL中处理数据等操作,包括:SELECT,INSERT,UPDATE,DELETE,CALL,EXPLAIN PLAN,LOCKDCL,Data Control Language,数据库控制语言用来授予或回收访问数据库和某种特权并控制数据库操纵事务发生的时

2020-10-28 22:34:41 182

原创 位运算呐~

C++中位运算指按二进制的形式运算,用以解决系统软件中的二进制待处理问题。并且在c语言中位操作运算符只能操作整形操作数,即带符号或者无符号的char、short、int、long类型!1.按位与 & 按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若,A=true,B=tr

2020-10-13 10:48:40 77

原创 排序

排序这块主要学习排序思想,排序算法思想,基础代码实现,稳定性,时间空间复杂度等;排序分为外部排序(排序数据量巨大,一次不能容纳完全的排序记录,在排序过程中需要访问外存)和内部排序(排序数据记录在内存中进行排序)1.插入排序—直接插入排序(Straight Insertion Sort)基本思想:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。要点:设立哨兵,作为临时存储.

2020-10-08 15:01:31 103

原创 STL--笔记详细

标题1.容器容器(container) 用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在 STL 中都被实现为容器。程序员使用容器时,即将容器类模板实例化为容器类时,会指明容器中存放的元素是什么类型的。容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入容器中时,实际插入的是对象或变量的一个复制品。STL 中的许多算法(即函数模板),如排序、查找等算法,在执行过程中会对容器中的元素进行比较。这些算法在比较元素是否相等时通常用运算符进行,比较大小通常用<运算符进行

2020-09-26 16:18:30 212 2

原创 auto

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。1.识别变量类型2.用于迭代(已知范围的for循环)auto特性:1.auto不能作为函数参数2.auto不能直接声明数组3. 为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法4. au

2020-09-24 15:23:03 238

原创 文本文件操作

头文件:#include <fstream>输出(写操作):ofstream输入(读操作):ifstream同时读写:fstream通过一个流对象(文件在程序中被打开由流对象(所谓的上述几个类的对象)来操作)操作一个文件我们需要用到流对象的成员函数。这写所有的标识符可以用过 | 自由组合产生不一样的效果!三种类对文件进行打开操作时都分别有各自的默认打开方式,如果没有提前声明打开方式将会是默认打开方式;文本文件操作的类是从ostream、istream、iostrea.

2020-09-20 22:36:56 141

原创 详解C++多态的实现及底层原理 - 笔记

C++中引入了多态的思想,说白了就是拥有多种形态,可以分为静态动态(重载,编译阶段确认函数地址)和动态动态(继承重写基类的虚函数实现的多态,在运行时从虚函数表中寻找调用函数的地址); 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。 3:多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数的多态性。 4:多态用虚函数来.

2020-09-18 11:09:37 2251 2

原创 C++ - 写时拷贝 截图

2020-09-17 18:53:59 113 1

原创 红黑树 一看就会

red-black tree是自平衡 (非绝对平衡) 的二叉查找树!先尝试recolor,(置色红黑)再尝试rotation;(旋转)插入新节点,标红,如果为根节点,则标黑;如果不是根节点,且其parent是红,uncle是红:{1.将parent和uncle同时标黑;2.将grand parent标红;3.新节点标红;(让新节点的颜色与其grand parent颜色一致)}插入新节点,标红,如果为根节点,则标黑;如果不是根节点,且其parent是红,uncle是黑:{1.左左

2020-09-16 16:55:12 192

原创 C++三大特性笔记

C++ 三大特性 封装,继承,多态封装定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对象的使用者和设计者分开,以提高软件的可维护性和可修改性特性:1. 结合性,即是将属性和方法结合 2. 信息隐蔽性,利用接口机制隐蔽内部实现细节,只留下接口给外界调用 3. 实现代码重用继承定义:继承就是新类从已有类那里得到已有的特性。 类的派生指的是从已有类产生新类的过程。原有的类成为基类或

2020-09-16 12:54:35 550

原创 Linux-虚拟地址空间分布-笔记

Linux系统下,内核进程和用户进程所占的虚拟内存比例为1:3;windows系统下,内核进程和用户进程所占的虚拟内存比例为2:2(也可以修改为1:3);虚拟地址通过页表映射到物理地址,页表由操作系统维护并被处理器引用。(Linux系统通过对栈、堆、内存映射段的起始地址加上随机偏移量来打乱布局,避免恶意程序通过计算访问栈、库函数等地址);用户进程部分分段存储内容按照地址递减:内核空间: 内核总是驻留在内存中,其是操作系统的一部分。内核空间所占区域为内核所保留,不允许应用程序读写该区域或直接调用内核

2020-09-14 21:20:14 169

原创 new 和 malloc 区别 笔记

【转】new和malloc的区别申请的内存所在位置  new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。那么自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这取

2020-09-14 20:44:40 755

原创 tcp/udp 区别?使用场景?

tcp与udp都是传输层协议,两者在特性上是对立的,但是有好便有坏,udp牺牲了可靠的连接换来了传播速度的提升,而tcp却将字节流安全可靠的连接传递。tcp协议的可靠性来自于其客户端与服务端的稳固连接,其独有的应答确认、超时重传、滑动窗口(流量控制)、数据检验、重复数据丢失等等;udp协议的高效率因为其是一个简单的面向数据报的传输层协议,其只负责将应用层传给IP层的数据报发送出去,并且不能保证发出去的数据都能被接收端接收到。细节(应答确认、超时重发、滑动窗口):应答确认: ACK机制,在TCP连接成

2020-09-13 21:19:42 104

原创 史上最全程序员技术增长宝典,不看后悔!(C\C++\Linux\Mysql\Java)

??????并没有!!!

2020-09-09 19:45:17 82

原创 Linux - tcp网络编程总结

回顾TCP网络编程;工具:gcc + ubuntu;ser端:1.创建一个socket连接;2.对sockaddr_in结构体初始化,保存建立的socket地址信息;3.bind(),将本地ip地址绑定到端口号;4.listen(),创建一个等待队列,将在其中存放未处理的cil端请求;5.accept(),等待并处理客户端的连接请求;6.建立连接后,使用send()或者recv()函数进行发送或者接收;cil端:1.创建一个socket连接;2.调用connect()请求连接服务器,并

2020-09-09 19:43:03 150

原创 ubuntu开机蓝屏重启问题最优解

对于ubuntu这番莫名其妙的蓝屏重启问题,如下,实在让人汗颜,所幸问题得到了解决!解决办法一:安装驱动精灵,将自己电脑的驱动重新更新安装一遍;不行?解决办法二:打开虚拟机,点击设置,将内存升到4-8G之间,重启;不行?解决办法三:找到你的虚拟机安装文件地址,将文件整体挪移到别的保存软件或文件较少硬盘,然后在VM上重新在新位置打开虚拟机;不行?只好杀手锏了~解决办法四:重启电脑;联网;打开虚拟机;按ctrl+alt+F4输入用户名输入密码输入 sudo apt-get

2020-09-08 23:31:51 8325 9

原创 多线程下子进程继承父进程锁时应如何处理?atfork()函数的作用

思考一下这样的一个问题:如果一个多线程程序的某个线程调用了fork()函数,那么新创建的子进程是否将自动创建和父进程相同数量的线程呢?答案是否定的,正确解释是子进程只拥有一个执行线程,他是调用fork()的那个线程的完整复制。并且子进程将自动继承父进程中的互斥锁(条件变量与之类似)的状态。可以说,父进程中被加锁的互斥锁在子进程中也是被锁住的。但同时又引出了新的问题,作为fork()过来的子进程,他从父进程中继承过来的互斥锁的状态是lock还是unlock?这样的话对子进程如果对该锁进行lock操作就会

2020-09-08 12:05:00 399

原创 线程同步 (Linux)

Linux下有多种方式来处理线程同步,常见的有如下几种机制:(1)信号量(2)互斥锁(3)条件变量(4)读写锁1、信号量类比进程一样,线程也是可以通过信号量来实现通信的,但相对于进程而言是轻量级的。#include <semaphore.h>初始化:int sem_init(sem_t* sem, int pshared, unsigned int value);参数:sem - 指定要初始化的信号量;pshared - 信号量 sem 的共享选项,linux只支持0,表示

2020-09-06 23:40:17 112

原创 string库-strtok();

strtok()是c库函数,功能是分解字符串;声明: char* strtok(char *str,const char *delim);参数解释: str 被分解的字符串 delim 分隔符(被分割后替换成\0)返回值: 返回被分解的首个子串,及首个分隔符前的字符串;如果没有可检索的剩余字符,则返回空指针。示例:(linux)char buff[] = "a b c d e 1 2 3 6 f g";char *str = strtok(buff,"

2020-09-06 15:17:52 286

原创 线程库 pthread_

记:pthread_createpthread_exitpthread_joinpthread_mutex_initpthread_mutex_lock阻塞调用pthread_mutex_trylock 非阻塞调用pthread_mutex_unlockpthread_mutex_destroypthread_mutexattr_settypepthread_mutexattr_gettypepthread_cond_initpthread_cond_waitpthread_con

2020-09-06 10:37:54 228

原创 进程、线程学习 (并发并行) (案例研究)

并发:同一时间段内发成2个及2个以上的活动;相比较与其概念相近的并行,并行就是两个活动同时进行。多线程并发在当个进程中运行多个线程也可以并发。线程就像轻量级的进程,每个线程相互独立运行,但它们共享地址空间,所有线程访问到的大部分数据如指针、对象引用或其他数据可以在线程之间进行传递,它们都可以访问全局变量。进程之间通常共享内存,但这种共享通常难以建立且难以管理,缺少线程间数据的保护。因此,在多线程编程中,我们必须确保每个线程锁访问到的数据是一致的。看下题:是否熟悉POSIX多线程编程技术?

2020-09-05 16:04:04 481

原创 贝叶斯 先验概率后验概率

转载自https://www.cnblogs.com/ohshit/p/5629581.html(1)条件概率公式 设A,B是两个事件,且P(B)>0,则在事件B发生的条件下,事件A发生的条件概率(conditional probability)为: P(A|B)=P(AB)/P(B)(2)乘法公式 1.由条件概率公式得: P(AB)=P(A|B)P(B)=P(B|A)P(A)

2020-09-02 10:22:02 180

原创 Linux-- 僵死进程 孤儿进程

僵死进程(僵尸进程):即子进程在父进程结束之前结束;孤儿进程:即父进程先于子进程之前结束;僵死进程的危害:生成僵死进程后,僵死进程不会删除PCB,仍会占据Pid,如此继续会造成进程表数据占满,造成fork()无法使用;僵死进程的内核栈无法被释放掉,为啥会留着它的内核栈,因为在栈的最低端,有着thread_info结构,它包含着 struct_task 结构,这里面包含着一些退出信息。...

2020-08-30 23:46:07 60

原创 linux中fork()函数 举例讲解!

一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事。但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。来看看实例:int main(){ int i = 0; for(; i < 2; i++) { fork(); pr

2020-08-30 14:21:32 399

原创 fPIC 浅解

-fPIC与-fpic都是在编译时加入的选项,用于生成位置无关的代码**(Position-Independent-Code)。这两个选项都是可以使代码在加载到内存时使用相对地址,所有对固定地址的访问都通过全局偏移表(GOT)来实现。-fPIC和-fpic最大的区别在于是否对GOT的大小有限制。-fPIC对GOT表大小无限制,所以如果在不确定的情况下,使用-fPIC是更好的选择。**-fPIE与-fpie是等价的。这个选项与-fPIC/-fpic大致相同,不同点在于:-fPIC用于生成动态库,-fPIE

2020-08-29 13:14:16 810

原创 Linux--关于库

什么是库库是一种可执行代码的二进制形式,通常把一些常用的函数制作成各种函数库,然后被系统载入内存中运行两种库 - 载入的时间不同静态库:在链接阶段被加载到目标文件中程序运行时不需要静态库编译后的可执行程序体积较大命名:libXXX.a动态库:编译的时候不会被链接进来,在程序执行的时候被载入程序运行时需要动态库编译后的可执行程序体积不变命名:libXXX.so静态库的制作使用GNU下的ar 工具制作(1) 写好功能文件和头文件 - hello.c 和 hello.h(2) 将hello.

2020-08-29 10:16:03 102

原创 数据结构与算法 哈希表

例题:一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0,请你找出所有满足条件且不重复的三元组。给定数组 nums = {-1,0,1,2,-1,-4};满足三元组集合{{-1,0,1},{-1,-1,2}};思路:两层for循环就可以确定 a 和b 的数值了,可以使用哈希法来确定 0-(a+b) 是否在 数组里出现过,其实这个思路是正确的,但是我们有一个非常棘手的问题,就是题目中说的不可以包含重复的三元组。把符合条件的三元组放进vector中,然后在去

2020-08-26 23:26:36 103

原创 有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true#include <iost

2020-08-25 15:32:40 78

原创 双指针法 -- 删除排序数组中的重复项

[力扣] 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。例如:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。不需要考虑数组中超出新长度后面的元素。#include <iostream>#include <vector&gt

2020-08-25 14:38:09 116

原创 静态库 动态库

静态库之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。静态库特点总结:l 静态库对函数库的链接是放在编译时期完成的。l 程序在运行时与函数库再无瓜葛,移植方便。l 浪费空间和资源,因为所有相关的目标文

2020-08-25 10:44:25 96

原创 SFML 和 Visual Studio

介绍如果将SFML与Visual Studio IDE(Visual C ++编译器)一起使用,则本教程是您应该阅读的第一篇。它将说明如何配置SFML项目。安装SFML首先,您必须从下载页面下载SFML SDK 。您必须下载与您的Visual C ++版本匹配的软件包。实际上,例如,使用VC ++ 10(Visual Studio 2010)编译的库与VC ++ 12(Visual Studio 2013)不兼容。如果没有针对您的Visual C ++版本编译的SFML软件包,则必须 自己构建SFM

2020-08-25 10:07:02 948

职工信息管理系统.docx

用C++语言对实现职工信息管理系统的代码语言。 该职工信息管理系统针对员工信息数据的处理设计了以下功能: 1. 添加教职工信息 添加员工信息,提供员工信息的添加,在该模块中设计了安全检查机制,即确认是否添加员工的信息,若对员工信息的添加不满意,则可以选择重新输入。还设置有返回主菜单的选项以方便用户。 2. 修改教职工信息 修改员工信息设置了员工人数检查,果员工人数NUM的值为0,则返回主菜单。如果员工人数NUM不为0,则进入删除员工信息的界面。修改员工信息板块功能强大,界面友好,用循环控制修改某员工属性,这样使得操作极为方便。 3. 删除教职工信息 删除员工信息中设计了对员工人数的检查,如果员工人数NUM的值为0,则返回到主菜单。如果员工人数NUM不为0,则进入删除员工信息的界面。界面包括员工信息列表,和删除选项,方便用户的操作。 4. 员工教职工查找 通过find()函数进行查找。该函数比较简单,通过循环一次比较Per[n].num是否与你输入的num是否相等,如果相等,则输入到屏幕上,如果未找到任何匹配的员工,则显示“未找该员工”。 5. 保存教职工信息 保存员工的信息,即为将当前所有的员工的信息存入到workerlist.txt中。这里我们采用的是C++的ofstream的写入文件的对象进行控制。 6. 教职工信息的排序 对员工信息进行排序,包括按员工编号排序(从小到大),按员工工资进行排序(从高到低)。其中也设置了员工人数检查机制,即:如果员工的人数为0,则直接返回主菜单。 7. 教职工信息的显示 对职工信息进行显示,包括职工的工号,姓名,年龄,学历,工资地址,电话等信息。方便对员工了解。

2019-07-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除