程序阅读 简单C 学生信息管理系统

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

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


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

#include <iostream>#include <string.h>using namespace std;#define MAX 100class 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<d2bool 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菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====



           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hgdfguj/article/details/83722841