這次帶來的是學生管理系統的實例

話不多說,直接上源碼吧!

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int num; //總學生人數
class student {
friend class studentMessage;
private:
string ID;
string name;
double score[5]; //1-4代表math、English、OPP和總成績 ,0號單元空出
student * next;
public:
student();
string getName(){return name;}
string getID(){return ID;}
double getMath(){return score[1];}
double getEnglesh(){return score[2];}
double getOPP(){return score[3];}
double gettotol(){return score[4];}
student* getNext(){return next;}
static void analyse(int ,student * ); //分析成績
void display(); //列印成績
void swap(); //交換對象和對象->next的信息
};
student::student()
{
cout<<"請輸入學生學號 : ";cin>>ID;
cout<<"請輸入學生姓名 : ";cin>>name;
cout<<"請輸入學生的數學、英語和OPP成績 : "<<endl;
int a,b,c;
cin>>a;
while(a<0||a>100)
{
cout<<"輸入成績有誤,請重新輸入: "<<endl;
cin>>a;
}
cin>>b;
while(b<0||b>100)
{
cout<<"輸入成績有誤,請重新輸入: "<<endl;
cin>>b;
}
cin>>c;
while(c<0||c>100)
{
cout<<"輸入成績有誤,請重新輸入: "<<endl;
cin>>c;
}
score[1]=a;
score[2]=b;
score[3]=c;
score[4]=a+b+c;
next=NULL;
}
void student::analyse(int a,student * first)
{
int you=0,liang=0,zhong=0,jige=0,bujige=0;
student * t=first;
double average=0; //平均分
while(t)
{
int b = int(t->score[a]/10);
switch(b)
{
case 10:
case 9:you++;break;
case 8:liang++;break;
case 7:zhong++;break;
case 6:jige++;break;
default:bujige++;
}
average+=t->score[a];
t=t->next;
}
average=average/num;
cout<<" 考生總人數 : "<<num<<" 平均分 : "<<average<<endl;
cout<<"
優 良 中 及格 不及格 "<<endl;
cout<<" "<<you<<" "<<liang<<" "<<zhong<<" "<<jige<<" "<<bujige<<endl;
}
void student::display()
{
cout<<" "<<setw(3)<<ID<<" "<<setw(3)<<name<<" ";
for (int i=1;i<=4;i++)
{
cout<<setw(3)<<score[i]<<" ";
}
cout<<endl;
}
void student::swap()
{
int j;
string na,id;
double sco[5];
na=name;name=next->name;next->name=na;
id=ID;ID=next->ID;next->ID=id;
for(j=1;j<=4;j++)
{
sco[j]=score[j];
score[j]=next->score[j];
next->score[j]=sco[j];
}
}
class studentMessage{
private:
student * first;
student * last;
public:
studentMessage();
student* getFirst(){return first;}
student* getLast(){return last;}
int getNum(){return num;}
void add(); //向表中增加學生成績記錄
void search(); //在表中查找學生成績記錄
void del(); //在表中刪除學生成績記錄
void showOne(); //分析一門課的成績
void showAll(); //輸出所有同學所有科目的成績
void sort(); //按一門課成績或總成績排序
void clear(); //清空所有信息並退出系統
};
studentMessage::studentMessage()
{
first=NULL;
last=NULL;
num=0;
}
void studentMessage::add()
{
student * t =new student;
student *p = first;
while(p){
if(p->ID==t->ID)
{
cout<<"
學號輸入錯誤或該學生成績已經存在!(如需修改,請先刪除再重新錄入)"<<endl;
return;
}
p=p->next;
}
num++;
if(first==NULL)
{
first=last=t;

}
else
{
last->next=t;
last=last->next;
}
}
void studentMessage::search()
{
string a;
cout<<"
請輸入要查找的學生的學號:";cin>>a;
student *t = first;
while(t){
if(t->ID==a)
break;
t=t->next;
}
if(!t)
{
cout<<"
未找到要查找學生!"<<endl;
return;
}
cout<<"
查找成功!"<<endl;
cout << " 學號 姓名 數學 英語 OPP 總成績" << endl;
t->display();
}
void studentMessage::del()
{
string a;
cout<<"
請輸入要刪除的學生的學號: ";cin>>a;
student *t = first;
student *p=NULL;
while(t){
if(t->ID==a)
break;
p=t;
t=t->next;
}
if(!t)
{
cout<<"
未找到要刪除學生!"<<endl;
return;
}
if(!p)
{
first=first->next;
cout<<"
成功刪除學生"<<a<<endl;
delete t;
}
else
{
p->next=t->next;
cout<<"成功刪除學生"<<a<<endl;
delete t;
}

num--;
}
void studentMessage::showOne()
{
int a;
while(1)
{
cout<<"
想要分析哪一門成績?請輸入相應序號(1:math 2:English 3:OPP): ";cin>>a;
if(a!=1&&a!=2&&a!=3)
cout<<"
輸入序號有誤,請重新輸入!"<<endl;
else
break;
}
cout<<"
成績分析如下:
"<<endl;
student::analyse(a,first);
}
void studentMessage::showAll()
{
cout << "---------------------成績列表----------------------"<< endl;
cout << " 學號 姓名 數學 英語 OPP 總成績" << endl;
student *t = first;
while(t){
t->display();
t=t->next;
}
}
void studentMessage::sort()
{
int a,n=0; //n--排名
cout<<"想要按照什麼成績排序?請輸入相應序號(1.數學 2.英語 3.OPP 4.總成績): ";
while(1)
{
cin>>a;
if (a!=1&&a!=2&&a!=3&&a!=4)
cout<<"
輸入序號有誤,請重新輸入 : ";
else
break;
}
student *t=first;
student *p=t;
while(p->next)
{
t=first;
while(t->next)
{
if(t->next->score[a]>=t->score[a])
{
t->swap();
}
t=t->next;
}
p=p->next;
}
t = first;
cout<<"
成績表如下: "<<endl;
cout<<"學號 姓名 成績 排名"<<endl;
while(t){
n++;
cout<<" "<<t->getID()<<" "<<t->getName()<<" ";
switch(a)
{
case 1 :cout<<t->getMath()<<" "<<n<<endl;break;
case 2 :cout<<t->getEnglesh()<<" "<<n<<endl;break;
case 3 :cout<<t->getOPP()<<" "<<n<<endl;break;
case 4 :cout<<t->gettotol()<<" "<<n<<endl;break;
}
t=t->next;
}
}
void studentMessage::clear()
{
int x;
cout<<"確認要清空所有信息?請輸入1或2 (1:確認 2:取消) : ";cin>>x;
if (x==2)
{
cout<<"
取消清空
"<<endl;
return;
}
student *t = first;
student *p;
while(t){
p=t;
t=t->next;
delete p;
}
cout<<"
清空成功!
";
cout<<"退出成功!
";
}
void showMenu()
{
cout << "
";
cout << "===============================
";
cout << " 學生成績管理系統

";
cout << " 1.顯示所有學生成績
";
cout << " 2.添加信息
";
cout << " 3.查詢信息
";
cout << " 4.刪除信息
";
cout << " 5.成績排序
";
cout << " 6.單科成績分析
";
cout << " 7.清空所有信息並退出系統
";
cout << " 0.退出系統
";
cout << "===============================
";
cout << "
";
}
int main()
{
int h;
studentMessage stuM=studentMessage();
while(1)
{
showMenu();
cout << "請輸入操作對應的序號 : ";
cin >>h;
cout<<endl;
switch(h)
{
case 1: stuM.showAll(); break;
case 2: stuM.add(); break;
case 3: stuM.search(); break;
case 4: stuM.del(); break;
case 5: stuM.sort(); break;
case 6: stuM.showOne(); break;
case 7: stuM.clear(); return 0;
case 0: cout<<"
退出成功!";return 0;
default:cout<<"
輸入序號有誤!請輸入正確的序號。"<<endl;
}
}
}

C/C++

加C/C++學習交.流羣獲取C語言、C++、Windows高級編程,MFC框架編程、QT框架編程,大型企業實戰項目。Linux應用程序開發,Linux內核研究等多個知識點高級進階乾貨的直播免費學習許可權 都是大牛帶飛 讓你少走很多的彎路的

最後,如果大家如果在自學遇到困難,想找一個C++的學習環境,可以加入我們的C++學習圈,點擊我加入吧,會節約很多時間,減少很多在學習中遇到的難題。

註:加..羣要求

1、零基礎,目前遇到困難不知從何下手可以加。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3、基礎非常紮實,但對目前主流技術欠缺,需要突破技術瓶頸的可以加。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

5.企業一線C/C++高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!

推薦閱讀:

相關文章