1. 程式人生 > >程式閱讀 簡單C 學生資訊管理系統

程式閱讀 簡單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

這裡寫圖片描述