课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接

【程序阅读】阅读并执行以下的程序,找出当中出现构造函数、友元函数、运算符重载、静态数成员语法现象出现的位置。细致体会其使用方法,在以后的设计中可以灵活应用有关方法和技巧

#include <iostream>
#include <string.h>
using namespace std;
#define MAX 100 class CDate // 定义日期类
{
private:
unsigned short int year; // 年
unsigned short int month; // 月
unsigned short int day; // 日
public:
CDate(int y=0,int m=0,int d=0);
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::CDate(int y,int m,int d):year(y),month(m),day(d) {}
// 设置日期
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(1)
{
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;
}
// 推断日期d1<d2
bool CDate::operator < (CDate d)
{
if (year<d.year) return true;
if (year>d.year) return false;
if (month<d.month) return true;
if (month>d.month) return false;
if (day<d.day) return true;
return false;
} // 检查是否为闰年
bool LeapYear(int year)
{
if (year%4==0 && year%100 || year%400==0)
return true;
return false;
} // 检查日期合法性
bool CheckValid(CDate d)
{
int n;
if (d.month<1 || d.month>12) return false;
if (d.day<1) return false;
n=31;
switch(d.month)
{
case 2:
if (LeapYear(d.year))
n=29;
else
n=28;
break;
case 4:
case 6:
case 9:
case 11:
n=30;
break;
}
if (d.day>n) return false;
return true;
} class CStudent
{
private:
char *name; // 姓名
bool sex; // 性别
CDate date; // 出生日期,类对象作数据成员
public:
static int num; // 学生人数
CStudent();
void InputData();
friend void Sort(); // 排序
friend void FindName(); // 按姓名查询
friend void Statistic(); // 按性别统计
friend void Display(); // 显示所有信息
} stu[MAX];
int CStudent::num=0;
CStudent::CStudent() {}
// 输入信息
void CStudent::InputData()
{
int p;
char s[41];
cout<<"请输入学生信息(NO."<<num<<"):\n";
cout<<"姓名:";
cin>>s;
name=new char[strlen(s)+1];
strcpy(name,s);
cout<<"性别(1-男。0-女):";
cin>>p;
if (p) sex=true;
else sex=false;
cin>>date;
cout<<endl;
}
// 排序
void Sort()
{
int i,j,p,num;
char *tn;
bool ts;
CDate td;
num=CStudent::num;
for(i=1; i<num; i++)
{
p=i;
for(j=i+1; j<=num; j++)
if (stu[j].date<stu[p].date) p=j;//找到当前未排序元素中年龄最小的对象的下标
if (p==i) continue;
//以下交换stu[i]和stu[p]
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[41];
int i,num;
cout<<"请输入姓名:";
cin>>name;
num=CStudent::num;
for(i=1; i<=num; i++)
if (strcmp(stu[i].name,name)==0) break;
if (i>num)
{
cout<<"查无此人!"<<endl<<endl;
return;
}
//假设查到了,显示学生信息
cout<<"姓名:"<<stu[i].name<<endl;
cout<<"性别:";
if (stu[i].sex)
cout<<"男"<<endl;
else
cout<<"女"<<endl;
cout<<"生日:"<<stu[i].date<<endl;
cout<<endl;
}
// 按性别统计
void Statistic()
{
int i,num,s1,s0;
num=CStudent::num;
s1=0;
s0=0;
for(i=1; i<=num; i++)
if (stu[i].sex==1)
s1++;
else
s0++;
cout<<"男生人数:"<<s1<<endl;
cout<<"女生人数:"<<s0<<endl;
cout<<endl;
} // 显示所有信息
void Display()
{
int i,num;
num=CStudent::num;
for(i=1; i<=num; i++)
{
cout<<stu[i].name<<"\t";
if (stu[i].sex)
cout<<"男";
else
cout<<"女";
cout<<"\t"<<stu[i].date<<endl;
}
cout<<endl;
} int main()
{
char *menu[]= { "","输入信息","排序","按姓名查询","按性别统计","显示所有信息","退出" };
int i,p;
bool end;
end=false;
while(!end)
{
for(i=1; i<7; i++)
cout<<i<<" "<<menu[i]<<endl;
cin>>p;
switch(p)
{
case 1: // 输入信息
CStudent::num++;
stu[CStudent::num].InputData();
break;
case 2: // 排序
Sort();
break;
case 3: // 按姓名查询
FindName();
break;
case 4: // 按性别统计人数
Statistic();
break;
case 5: // 显示所有信息
Display();
break;
case 6: // 退出
end=true;
break;
}
}
return 0;
}

【扩展提示】你是否可以在如上设计基础上,添加文件保存数据,使其趋向于真正有用的系统?

==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类文件夹(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====

程序阅读:简单C++学生信息管理系统的更多相关文章

  1. 【python免费代码】设计一个简单的学生信息管理系统

    文章目录 前言 一.理解 二.部分截图展示 三.代码 四.总结 前言 设计一个简单的学生信息管理系统,实现以下功能(bug) : 录入学生信息,信息以文件方式存储 以学生学号或者学生姓名为条件查询该学 ...

  2. PHP实现简单的学生信息管理系统(web版)

    (∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...

  3. C++ 简单的学生信息管理系统

    // // main.cpp // 2013-7-17作业1 // // Created by 丁小未 on 13-7-17. // Copyright (c) 2013年 dingxiaowei. ...

  4. Py学生信息管理系统 案例(优化版)

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  5. Python学生信息管理系统的开发

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  6. Python基础案例练习:制作学生信息管理系统

    一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...

  7. 基于数组或链表的学生信息管理系统(小学期C语言程序实训)

    1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...

  8. 关于搬运CSDN上学生信息管理系统的阅读与二次开发

    关于本篇博客内容,我大概分成了三个部分进行讲述:对于源代码的解读.二次重开发后程序的介绍和自己在做完对他人代码的解读和重开发后自己的一些感想. 一.  源代码的解读 在本部分的解读中主要分为三部分:该 ...

  9. [项目分享]JSP+Servlet+JDBC实现的学生信息管理系统

    本文存在视频版本,请知悉 项目简介 项目来源于:https://gitee.com/liu_xu111/JavaWeb01 这次分享一个学生管理系统,我感觉这是程序员在大学时期的毕设和课程设计选择最多 ...

随机推荐

  1. Android 混淆打包不混淆第三方jar包

    项目由于要公布,所以要混淆打包. 混淆打包流程: 1.在proguard-project.txt文件里加入不须要混淆的类和第三方的jar包   这个是保持自己包中不须要混淆的类,假设有些类调用了jni ...

  2. Android中的Layout_weight终极研究

    以前在做UI布局时,也经常用Layout_weight属性,有时会遇到莫名其妙的布局问题,但总没研究懂.一直想做深入分析,但总是没耐心.遇到问题就找替代方法解决,但终非长久之计.这次下决心给它弄透! ...

  3. npoi IWorkbook HSSFWorkbook XSSFWorkbook 拥有 IEnumerator GetEnumerator(); 方法 可以遍历workbook 每个元素为每个sheet页

  4. SortedDictionary<TKey,TValue>正序与反序排序及Dicttionary相关

    SortedDictionary<TKey,TValue>能对字典排序 using System; using System.Collections.Generic; using Syst ...

  5. WCF实现RESTFul Web Service

    共同学习了前面一些概念,终于开始正题了哈.RESTful的Web Service调用直观,返回的内容容易解析.这里先会描述一个简单的场景--Web Service提供一个方法来搜索个人信息,传入人名, ...

  6. [svc]salt安装lamp

    在批量安装软件前,先找台测试机yum装一遍,看是否报错等,是否依赖包全等 . 本次我们在dev环境下搞. 先看一下已搞成功的目录结构 定义dev环境的第二个好处 搞清楚逻辑结构和调用关系很重要,不然之 ...

  7. ruby gem tips(转)

    淘宝源: https://ruby.taobao.org 升级ruby gem gem update --system 查看gem版本 gem -v 查看gem版本,gems安装目录,remote s ...

  8. 李洪强iOS开发之Block和协议

    李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任 ...

  9. 容易造成JavaScript内存泄露几个方面

    高效的JavaScript Web应用必须流畅,快速.与用户交互的任何应用程序,都需要考虑如何确保内存有效使用,因为如果消耗过多,页面就会崩溃,迫使用户重新加载.而你只能躲在角落哭泣. 自动垃圾收集是 ...

  10. cf 450c Jzzhu and Chocolate

    Jzzhu and Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard ...