第八章 異常處理以及輸入輸出流

#include<iostream>
using namespace std;
class ExceptionBase
{
public:
    ExceptionBase(){}
    ~ExceptionBase(){}
    virtual void showReason()
    {
        cout<<"Base Exception!\n";
    }
};
class PushOnFull:public ExceptionBase
{
public:
    virtual void showReason()
    {
        cout<<"Error! Full!\n";
    }
};
class PopOnEmpty:public ExceptionBase
{
public:
    virtual void showReason()
    {
        cout<<"Error! Empty\n";
    }
};
template<typename T>
class Stack
{
private:
    T *pData;
    int stackSize;
    int top=-1;
public:
    Stack(int s=100);
    ~Stack();
    void push(const T &data);
    T pop();
    bool isEmpty();
    bool isFull();
};
template<typename T>
Stack<T>::Stack(int s)
{
    stackSize=s;
    pData=new T[s];
}
template<typename T>
Stack<T>::~Stack()
{
    delete [] pData;
}
template<typename T>
void Stack<T>::push(const T &data)
{
    if(isFull())
    {
        cout<<"Stack is full\n";
        throw PushOnFull();
    }
    ++top;
    pData[top]=data;
}
template<typename T>
T Stack<T>::pop()
{
    if(isEmpty())
    {
        cout<<"Stack is empty!\n";
        throw PopOnEmpty();
    }
    T t=pData[top];
    --top;
    return t; 
}
template<typename T>
bool Stack<T>::isEmpty()
{
    return top==-1;
}
template<typename T>
bool Stack<T>::isFull()
{
    return top==stackSize-1;
}
int main()
{
    int array[10]={1,3,2,4};
    Stack<int>s(4);
    cout<<endl;
    try
    {
        for(int i=0;i<3;++i)
        {
            s.push(array[i]);
        }
        while(!s.isEmpty())
        {
            cout<<s.pop()<<' ';
        }
        for(int i=0;i<10;++i)
        {
            s.push(array[i]);
        }
    }
    catch(ExceptionBase &e)
    {
        e.showReason();
    }
    return 0;
}

2 3 1 Stack is full
Error! Full!
[Finished in 0.4s]
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<functional>
#include<fstream>
using namespace std;
class Student
{
private:
    string name;
    string specialty;
    long long id;
    double creditPoint;
public:
    Student(string n,string s,long long i,double c):name(n),specialty(s),id(i),creditPoint(c){}
    void setCreditPoint(double c)
    {
        creditPoint=c;
    }
    double getCreditPoint()const
    {
        return creditPoint ;
    }
    string getName()const
    {
        return name;
    }
    long long getId()const
    {
        return id;
    }
    string getSpecialty()const
    {
        return specialty;
    }
    friend ostream& operator<<(ostream& out,const Student& s)
    {
        cout<<"Name:"<<s.name<<endl;
        cout<<"  Id:"<<s.id<<endl;
        cout<<"  Specialty:"<<s.specialty<<endl;
        cout<<"  CreditPoint:"<<s.creditPoint<<endl;
    }
};
class StudentManage
{
public:
    enum SortType{BY_NAME,BY_ID,BY_SPECIALTY,BY_CRDITPOINT};
    StudentManage()=default;
    void addStudent();
    void removeStudent();
    void setSortType(SortType st);
    void findStudent();
    int size()const{return students.size();}
    void loadData(string filename);
    void saveData(string filename);
    friend ostream& operator<<(ostream& out,const StudentManage& sm);
private:
    vector<Student> students;
    SortType sortType=BY_ID;
};
void StudentManage::addStudent()
{
    string n,s;
    long long i;
    double c;
    cout<<"please enter\nname:";
    cin>>n;
    cout<<"specialty:";
    cin>>s;
    cout<<"id:";
    cin>>i;
    cout<<"credit:";
    cin>>c;
    students.push_back(Student(n,s,i,c));
    SortType st=BY_ID;
    setSortType(st);
}
void StudentManage::removeStudent()
{
    long long i;
    cout<<"please enter id:";
    cin>>i;
    for(auto it=students.begin();it!=students.end();++it)
    {
        if((*it).getId()==i)
        {
            students.erase(it);
            return;
        }
    }
}
void StudentManage::setSortType(SortType st)
{
    function<bool(const Student&,const Student&)> f;
    switch(st)
    {
    case BY_ID:
        f=[](const Student &s1,const Student &s2){return s1.getId()<s2.getId();};
        break;
    case BY_NAME:
        f=[](const Student &s1,const Student &s2){return s1.getName()<s2.getName();};
        break;
    case BY_SPECIALTY:
        f=[](const Student &s1,const Student &s2){return s1.getSpecialty()<s2.getSpecialty();};
        break;
    case BY_CRDITPOINT:
        f=[](const Student &s1,const Student &s2){return s1.getCreditPoint()<s2.getCreditPoint();};
        break;
    default:
        break;
    }
    sort(students.begin(),students.end(),f);
}
void StudentManage::findStudent()
{
    long long i;
    cout<<"please enter id:";
    cin>>i;
    for(auto stu:students)
    {
        if(stu.getId()==i)
        {
            cout<<stu;
            return;
        }
    }
}
void StudentManage::loadData(string filename)
{
    ifstream fin;
    fin.open(filename);
    string n;
    string s;
    long long i;
    double c;
    while(fin>>n>>s>>i>>c)
    {
        students.push_back(Student(n,s,i,c));
    }
    fin.close();
}
void StudentManage::saveData(string filename)
{
    ofstream fout;
    fout.open(filename,ios_base::out);
    for(auto stu:students)
    {
        fout<<stu.getName()<<' '<<stu.getSpecialty()<<' '<<stu.getId()<<' '<<stu.getCreditPoint()<<endl;
    }
    fout.close();
}
ostream& operator<<(ostream &out,const StudentManage &sm)
{
    cout<<"Cc"<<endl;
}
int main(){
    StudentManage sm;
    sm.loadData("students.txt" ); //從文件中加載數(shù)據(jù)
    if(sm.size()==0){
    sm.addStudent();
    sm.addStudent();
    sm.addStudent();
    sm.addStudent();
    }
    cout<<"sort type(0-name,1-id,2-specialty,3-creditpoint):";
    int choice;
    cin>>choice;
    sm.setSortType (static_cast<StudentManage::SortType>(choice));
    cout<<sm;
    sm.findStudent ();
    sm.removeStudent ();
    cout<<sm;
    sm.saveData("students.txt" ); //將數(shù)據(jù)保存到文件中
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市苦丁,隨后出現(xiàn)的幾起案子唠亚,更是在濱河造成了極大的恐慌钞啸,老刑警劉巖运杭,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讲冠,死亡現(xiàn)場(chǎng)離奇詭異券膀,居然都是意外死亡辟躏,警方通過查閱死者的電腦和手機(jī)谷扣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捎琐,“玉大人会涎,你說我怎么就攤上這事∪鸫眨” “怎么了末秃?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)籽御。 經(jīng)常有香客問我练慕,道長(zhǎng),這世上最難降的妖魔是什么技掏? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任铃将,我火速辦了婚禮,結(jié)果婚禮上哑梳,老公的妹妹穿的比我還像新娘劲阎。我一直安慰自己,他們只是感情好鸠真,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布哪工。 她就那樣靜靜地躺著,像睡著了一般弧哎。 火紅的嫁衣襯著肌膚如雪雁比。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天撤嫩,我揣著相機(jī)與錄音偎捎,去河邊找鬼。 笑死序攘,一個(gè)胖子當(dāng)著我的面吹牛茴她,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播程奠,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼丈牢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瞄沙?” 一聲冷哼從身側(cè)響起己沛,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慌核,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后申尼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垮卓,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年师幕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粟按。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡霹粥,死狀恐怖灭将,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情后控,我是刑警寧澤庙曙,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站忆蚀,受9級(jí)特大地震影響矾利,放射性物質(zhì)發(fā)生泄漏姑裂。R本人自食惡果不足惜馋袜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舶斧。 院中可真熱鬧欣鳖,春花似錦、人聲如沸茴厉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)矾缓。三九已至怀酷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗜闻,已是汗流浹背蜕依。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琉雳,地道東北人样眠。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像翠肘,于是被迫代替她去往敵國(guó)和親檐束。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 8-6. 計(jì)算Fibonacii數(shù)列束倍,a1=1,a2=1...an=an-1+an-2 即前兩個(gè)數(shù)是1,從3個(gè)數(shù)開...
    passwd_閱讀 2,352評(píng)論 0 1
  • 端午放假被丧。 下課后盟戏,我就立刻跑到了車站,等了很久的車晚碾,車終于來(lái)了抓半,但是呢,回家的人實(shí)在太多了格嘁,在同一個(gè)候車處站著滿...
    凈競(jìng)閱讀 205評(píng)論 0 0
  • 繼《只需傾聽》高效溝通的11個(gè)秘訣(上)后笛求,分享另外5個(gè)秘訣。 07從交易到交心 這個(gè)秘訣的作用就是把對(duì)方的狀態(tài)從...
    程云舒閱讀 608評(píng)論 0 5
  • 開始有理財(cái)意識(shí),是關(guān)注了三公子的微信公眾號(hào)懂诗》渌裕看到了她寫的《工作前五年,決定你一生的財(cái)富》殃恒,還有她推薦的《小狗錢錢》...
    依然有約閱讀 212評(píng)論 1 1