在网上看到的一个C++的小项目,自己码一下,然后记录下理解以及我这种菜鸟的问题。

我将我知道的尽可能详细的写下来,如有错误请联系我哈,QQ:920209178。

原文地址:https://blog.csdn.net/qq_33832591/article/details/78076816

环境:win10,Microsoft Visual Studio 2017

 /*----------------------------------------------------------------------------------------
---------原文地址:https://blog.csdn.net/qq_33832591/article/details/78076816-------------
------------------------------------------------------------------------------------------
*/
#include <iostream>
#include <string.h>
using namespace std;
#define MAX 100 //宏定义 //学生的出生日期类
class CDate
{
public:
CDate(int y = , int m = , int d = );
//重载<运算符
bool operator < (CDate d);
//重载非成员函数和成员函数两者的参数会有变化,详情请百度
//重载流运算符
friend istream & operator >> (istream &in, CDate &d);
friend ostream & operator << (ostream &out, CDate &d); friend bool CheckValid(CDate d);
friend bool LeapYear(int year); void setDate(int y, int m, int d);
~CDate(); private:
unsigned short int year, month, day;
}; CDate::CDate(int y, int m, int d) :year(y), month(m), day(d)
{
//构造函数后面加':'---->初始化参数列表
//设置日期
} CDate::~CDate()
{
//~函数名----->析构函数
}
void CDate::setDate(int y, int m, int d)
{
year = y;
month = m;
day = d;
} //--------定义成员函数,就是那个流运算符的重载函数
istream &operator >> (istream &in, CDate &d)
{
char ch1, ch2;
cout << "请输入日期(格式:YYYY-MM-DD):";
while ()
{
cin >> d.year >> ch1 >> d.month >> ch2 >> d.day;
if (ch1 == '-' && ch2 == '-')
if (CheckValid(d)) break;
cerr << "时间格式不正确\n";
}
return cin;
} ostream &operator << (ostream &out, CDate &d)
{
out << d.year << "年" << d.month << "月" << d.day << "日";
return out;
} //用处:日期判断 ------ < 运算符重载函数定义
bool CDate::operator < (CDate d)
{
if (year < d.year) return true;
if (month < d.month) return true;
if (day < d.day) return true;
if (year > d.year) return false;
if (month > d.month) return false;
return false;
} //检查是否为闰年
bool LeapYear(int year)
{
//能被4整除而不能被100整除.
//能被400整除.
//就是闰年
if (year % == && year % || year % == )
return true;
else
return false;
} //检查用户输入的日期的合法性
bool CheckValid(CDate d)
{
int n;
if (d.month < || d.month>) return false;
if (d.day < ) return false;
n = ;
switch (d.month)
{
case :
if (LeapYear(d.year))//判断是否为闰年
n = ;
else
n = ;
break;
case :
case :
case :
case :
n = ;
break;
}
if (d.day > n) return false;//遇到return,函数结束(?)
return true;
} //--------------------------------------------------
//-----------------定义学生信息类-------------------
class CStudent
{
public:
static int num;//学生人数
CStudent(); void InputData();
friend void Sort();//排序
friend void FindName();//按姓名查询
friend void Statistic();//按性别统计
friend void display();//显示全部信息 ~CStudent(); private:
char* name;//姓名
bool sex;//性别
CDate date;//出生日期,CDate类对象为数据成员
}stu[MAX];//对象数组 int CStudent::num = ;//这里定义了学生信息类的num变量的值,代表学生编号(数量?) CStudent::CStudent()
{
} CStudent::~CStudent()
{
} //输入学生信息功能函数
void CStudent::InputData()
{
int p;
char s[];
cout << "请输入学生信息(NO." << num << "):\n";
cout << "姓名:";
cin >> s;
name = new char[strlen(s) + ];
strcpy(name, s);//strcpy函数:复制字符串,遇到'\0'为止
cout << "性别(输入1-男,输入2-女):";
cin >> p;
if (p) sex = true;//sex的值为1或0,一般除了0以外的都代表true
else sex = false;
cin >> date;
cout << endl;
} //友元函数,根据出生日期data从小到大排序
void Sort()
{
int i, j, p, num;
char* tn;
bool ts;
CDate td;
num = CStudent::num;//前面定义了num变量值为0,所以当学生数量为1或者0的时候不会调用下面for循环的语句
for (i = ; i < num; i++)
{
p = i;
for (j = i + ; j <= num; j++)
if (stu[i].date < stu[p].date) p = j;
if (p == i) continue;
//排序,姓名
tn = stu[i].name;
stu[i].name = stu[p].name;
stu[p].name = tn;
//排序,性别
ts = stu[i].sex;
stu[i].sex = stu[p].sex;
stu[p].sex = ts;
//排序,出生日期
td = stu[i].date;
stu[i].date = stu[p].date;
stu[p].date = td;
}
}
//根据学生姓名查询学生信息函数
void FindName()
{
char name[];
int i, num;
cout << "请输入姓名:";
cin >> name;
num = CStudent::num;
for (i = ; i <= num; i++)
if (strcmp(stu[i].name, name) == ) break;
//strcmp函数:比较两个参数,相同返回0,参数1>参数2,返回正数;参数1<参数2,返回负数
if (i < num)
{
cout << "查无此人" << endl << endl;
return;
} cout << "姓名:" << stu[i].name << endl;
cout << "性别:";
if (stu[i].sex)
cout << "男" << endl;
else
cout << "女" << endl;
cout << endl;
} //统计各性别人数
void Statistic()
{
//int i, num, s1, s0;
//我的显示错误:使用未初始化的变量:s1,s0
//给这两个值初始化
int i, num, s1=, s0=;
num = CStudent::num;
for (i = ; i <= num; i++)
{
if (stu[i].sex == ) s1++;
else s0++;
}
cout << "-----男生人数:" << s1 << "\n----女生人数:" << s0 << endl << endl;
} void display()
{
int i, num;
num = CStudent::num;
for (i = ; i <= num; i++)
{
cout << stu[i].name << "\t";
if (stu[i].sex == ) cout << "男";
else cout << "女";
cout << "\t" << stu[i].date << endl;
}
} //-----------------------------------------------
//--------------------主函数---------------------
int main()
{
//char* menu[] = { "","输入信息","排序","按姓名查询",
// "按性别统计", "显示全部信息", "推出"};
//这个按照原作者代码我的显示错误(VS2017),我加了个const约束
const char* menu[] = { "","输入信息","排序","按姓名查询",
"按性别统计","显示全部信息","退出" };
int i, p;
bool end;
end = false;
while (!end)
{
for (i = ; i < ; i++)
cout << i << " " << menu[i] << endl;
cin >> p;
switch (p)
{
case :
CStudent::num++;
stu[CStudent::num].InputData();
break;
case :
Sort();
break;
case :
FindName();
break;
case :
Statistic();
break;
case :
display();
break;
case :
end = true;
break;
}
}
return ;
}

-------------------------------------------------------------------------

再进行本地调试的时候有个错误:C4996 ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

在网上找到了解决方案:

项目 –> 项目属性 –> c/c++ –> 预处理器定义

添加:  _CRT_SECURE_NO_WARNINGS

成功

--------------------------------------------------------------------------

如果我的理解有错误请一定要联系我,谢谢了!

C++实现简单学生管理系统的更多相关文章

  1. Java写一个简单学生管理系统

    其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...

  2. jdbc简单学生管理系统

    这个是java连接mysql数据库的一个简单学生系统,通过jdbc连接数据库. 工具类 JDBCuntils. package Student; import java.io.IOException; ...

  3. 简单学生管理系统HTML前端页面

    效果图: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  4. javaee三层架构案例--简单学生管理系统

    背景 学了jdbc.jsp等需要串起来,不然会忘记 项目环境 win10 jdk11 mysql8.0.13 jar包 c3p0-0.9.5.2 commons-dbutils-1.7 jstl mc ...

  5. C++ 实现简单命令行学生管理系统

    C++ 实现简单命令行学生管理系统 预览: 编译环境是macOS.system("clear") 在windows下请换成 system("cls") #inc ...

  6. php实现简单的学生管理系统

    php实现学生管理系统 一.效果 二.代码框架 functions文件夹里面是封装的mysqli的数据库操作函数和一个跳转的函数 student文件夹里面就是学生管理系统的主界面 applicatio ...

  7. java简单学生成绩管理系统

    题目要求: 一. 数据结构要求:(5 分) 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishi ...

  8. Java实现功能简单的学生管理系统(附带源代码)

    这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...

  9. <每日一题>题目7:简单的学生管理系统V1.0

    ''' # 学生管理系统v1.0 # 添加学生的信息 # 删除学生的信息 # 修改学生的信息 # 查看学生的信息 #遍历学生的信息 #退出系统 ''' import json #1 显示操作功能 de ...

随机推荐

  1. cocoapod终端配置

  2. java后台常用json解析工具问题小结

    若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...

  3. input 特殊字符限制

    ng-pattern="/^[A-Za-z0-9_,\.\u4e00-\u9fa5\s]+$/"

  4. node.js学习6---第三方依赖(模块或者说是包)的导入 npm 以及 cnpm命令的使用

    npm命令用于导入node.js的第三方包,相当于java中使用maven来导入第三方依赖: 1.npm init -y 命令:在命令窗口中执行后,会出现如下的json文件: 右边记录了安装的第三方包 ...

  5. 如何使用ESP8266、ESP8285做一个WiFi中继(WiFi信号放大器)

    准备工作 准备一个深圳四博智联科技有限公司的ESP-F 模组.或者四博智联科技的NODEMCU 当我们拿到ESP-F模块后,可以按照以下接线进行测试: 即 VCC.EN 接 3.3v.GPIO15 G ...

  6. php websocket

    php websocket项目开发,推荐使用:Workerman 本片内容使用Workerman实现了简单的及时聊天功能,具体代码如下: <?php // phpinfo(); header(' ...

  7. python基础(字典)

    #实现同样的功能,代码越少越好#非空即真,非0即真#not 取反 a = []b = ' 'c = ()d = 0e = Noneif a: print('真的')else: print('假的') ...

  8. python复习购物车程序

    个人学习总结: 无他,唯手熟尔!多敲多练才是王道 python 第三课 元组的灵活运用&字符串的诸多操作 Program01 '''时间 2018年2月12日12:15:28目的 购物车程序 ...

  9. 只有自身跟上时代,offer就会如期而至

    [官宣]只有自身跟上时代,offer就会如期而至 最近对求职者来说,似乎颇不太平,各种裁员扑面而来,许多企业(易车.滴滴等)相继官宣裁员信息,包括阿里缩减校招,百度减少社招等,都让人不禁打嗦.但我们华 ...

  10. 详细集成Redis (一)

    1.添加依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</a ...