C++实现简单学生管理系统
在网上看到的一个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++实现简单学生管理系统的更多相关文章
- Java写一个简单学生管理系统
其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...
- jdbc简单学生管理系统
这个是java连接mysql数据库的一个简单学生系统,通过jdbc连接数据库. 工具类 JDBCuntils. package Student; import java.io.IOException; ...
- 简单学生管理系统HTML前端页面
效果图: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- javaee三层架构案例--简单学生管理系统
背景 学了jdbc.jsp等需要串起来,不然会忘记 项目环境 win10 jdk11 mysql8.0.13 jar包 c3p0-0.9.5.2 commons-dbutils-1.7 jstl mc ...
- C++ 实现简单命令行学生管理系统
C++ 实现简单命令行学生管理系统 预览: 编译环境是macOS.system("clear") 在windows下请换成 system("cls") #inc ...
- php实现简单的学生管理系统
php实现学生管理系统 一.效果 二.代码框架 functions文件夹里面是封装的mysqli的数据库操作函数和一个跳转的函数 student文件夹里面就是学生管理系统的主界面 applicatio ...
- java简单学生成绩管理系统
题目要求: 一. 数据结构要求:(5 分) 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishi ...
- Java实现功能简单的学生管理系统(附带源代码)
这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...
- <每日一题>题目7:简单的学生管理系统V1.0
''' # 学生管理系统v1.0 # 添加学生的信息 # 删除学生的信息 # 修改学生的信息 # 查看学生的信息 #遍历学生的信息 #退出系统 ''' import json #1 显示操作功能 de ...
随机推荐
- 基于MAVEN使用IDEA创建dubbo入门项目图文教程
花了很长时间没有找到一个很详细的图文教程来学习dubbo入门框架,故记录下来. 一: 项目工程目录 简单介绍项目目录结构: 二: 创建父工程 具体操作步骤: 1,打开IDEA,按下面步骤来 File- ...
- js中!和!!的区别及用法
js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,1.!可将变量转换成boolean类型,null.undefined和空字符串取反都为false,其 ...
- idea提交项目到码云上
参考 https://www.cnblogs.com/BaleW/p/9293184.html
- 使用Spark进行搜狗日志分析实例——map join的使用
map join相对reduce join来说,可以减少在shuff阶段的网络传输,从而提高效率,所以大表与小表关联时,尽量将小表数据先用广播变量导入内存,后面各个executor都可以直接使用 pa ...
- [SCOI2003]字符串折叠
一道蛮好玩的区间DP...其实只要做好check...然后统计答案就好了...QAQ... 呆码: #include<iostream> #include<cstdio> #i ...
- phpstrom常用快捷键
mark一下 格式化(应设置QQ快捷键) 自动代码提示 Ctrl+Alt+L Ctrl+J 页面查找 页面查找并替换 Ctrl+F Ctrl+R 全局查找 全局查找并替换 ...
- leetcode 415 两个字符串相加
string addstring(string s1,string s2) { string ans=""; ; ,j=s2.length()-;i>=||j>=;i- ...
- vuex数据持久化插件--指定持久化特定的值
指定需要持久化的state,配置如下 import createPersistedState from "vuex-persistedstate" conststore = new ...
- head语法
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾.1.命令格式:head ...
- openstack之neutron配额调整
1. 前言 neutron在安装配置完成之后,openstack为了实现对所有tenant对网络资源的使用,针对neutron设置有专门的配额,以防止租户使用过多的资源,而对其他的tena ...