標(biāo)題: C++寫(xiě)的學(xué)生管理系統(tǒng),請(qǐng)大佬點(diǎn)評(píng)一下 [打印本頁(yè)]

作者: @不死鳥(niǎo)    時(shí)間: 2018-7-17 15:26
標(biāo)題: C++寫(xiě)的學(xué)生管理系統(tǒng),請(qǐng)大佬點(diǎn)評(píng)一下
#include <iostream>
using namespace std;
const int N=50;
struct student                            //定義結(jié)構(gòu)體
{
        int no;                               //學(xué)號(hào)
        char xm[10];                          //姓名
        double chinese;                       //語(yǔ)文
        double math;                          //數(shù)學(xué)
        double english;                       //外語(yǔ)
        double sum;                           //總分
        double average;                       //平均分
};
student stu[N];
void input(student *p,int n);             //輸入學(xué)生信息
void cal(student *p,int i);               //計(jì)算總分和個(gè)人平均分
void aver(student *p,int n);              //計(jì)算各科平均分和平均總分
void sort(student *p,int n);              //按成績(jī)排序
void sortno(student *p,int n);            //按學(xué)號(hào)排序
void search(student *p,int n);            //查找學(xué)生
int  find(student *p,int c,int n);        //查找學(xué)號(hào)
void max(student *p,int n);               //查找最好和最差學(xué)生
void output(student *p,int n);            //輸出學(xué)生信息
int  insert(student *p,int n);            //添加學(xué)生信息
int  del(student *p,int n);               //刪除學(xué)生信息
void showmenu();                          //顯示菜單
int  main()
{
        int n;
        cout<<"輸入學(xué)生人數(shù) :";               //輸入學(xué)生總數(shù)
        cin>>n;
        input(stu,n);
        while(n>0)                            //當(dāng)n大于0時(shí)循環(huán)
        {
                showmenu();                     
                int a;                            //通過(guò)給a賦值調(diào)用函數(shù)
                cout<<"請(qǐng)輸入選項(xiàng) :";
                cin>>a;
                if(a<1||a>8)                      //輸入指令為1~8
                {
                        cout<<"輸入錯(cuò)誤!!!\n";        //輸入錯(cuò)誤
                        for(int i=0;i<33;i++)         //分隔符
                                cout<<"*";
                        cout<<endl;
                }
                else if(a==6)                     //insert需要返回n值
                {
                        n=insert(stu,n);
                        cout<<endl;
                        for(int i=0;i<33;i++)
                        cout<<"*";
                        cout<<endl;
                }
                else if(a==7)                     //del函數(shù)需要返回n值
                {
                        n=del(stu,n);
                        cout<<endl;
                        for(int i=0;i<33;i++)
                        cout<<"*";
                        cout<<endl;
                }
                else if(a==8)                     //結(jié)束語(yǔ)句
                {
                        for(int i=0;i<33;i++)
                                cout<<"*";
                        cout<<"\n謝謝使用"<<endl;
                        break;
                }
                else
                {
                        switch(a)                     //switch選擇語(yǔ)句
                        {
                                case 1:aver(stu,n);break;
                                case 2:sort(stu,n);break;
                                case 3:search(stu,n);break;
                                case 4:max(stu,n);break;
                                case 5:output(stu,n);
                        }
                        cout<<endl;
                        for(int i=0;i<33;i++)
                                cout<<"*";
                        cout<<endl;
                }
        }
        return 0;
}
void input( student *p,int n)                                          //輸入函數(shù)
{
        cout<<"Enter students information:"<<endl;                         //輸出表頭
        cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
        for(int i=0;i<n;i++)
        {
                cin>>stu[i].no>>stu[i].xm>>stu[i].chinese>>stu[i].math>>stu[i].english;          //輸入學(xué)生信息
                cal(stu,i);                                                                      //cal函數(shù)計(jì)算總分和平均分
        }
        cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
        for(i=0;i<n;i++)
                cout<<stu[i].no<<"\t"<<stu[i].xm<<"\t"<<stu[i].chinese<<"\t"<<stu[i].math<<"\t"<<stu[i].english<<"\t"<<stu[i].sum<<"\t"<<stu[i].average<<"\n";
        cout<<endl;
        for(i=0;i<33;i++)
                cout<<"*";                                                                  
        cout<<endl;
}
void cal(student *p,int i)                                             //計(jì)算每個(gè)學(xué)生總分和平均分
{
        stu[i].sum=(p+i)->chinese+(p+i)->math+(p+i)->english;
        (p+i)->average=(p+i)->sum/3;
}
void aver(student *p,int n)                                            //計(jì)算各科平均分和總平均分
{
        double averchinese=0,avermath=0,averenglish=0,aversum=0;
        for(int i=0;i<n;i++)
        {
                averchinese+=(p+i)->chinese;
                avermath+=(p+i)->math;
                averenglish+=(p+i)->english;
        }
        averchinese/=n;                                                    //將語(yǔ)文成績(jī)都加起來(lái)除以總?cè)藬?shù)
        avermath/=n;
        averenglish/=n;
        aversum=averchinese+avermath+averenglish;
        cout<<"average of the scores\n";
        cout<<"語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\n";
        cout<<averchinese<<"\t"<<avermath<<"\t"<<averenglish<<"\t"<<aversum<<endl;
}
void sort(student *p,int n)
{
        student t;
        for(int i=0;i<n-1;i++)                                             //冒泡法平均成績(jī)降序排序
                for(int j=0;j<n-i-1;j++)
                        if((p+j)->average<(p+j+1)->average)
                        {
                                t=stu[j];
                                stu[j]=stu[j+1];
                                stu[j+1]=t;
                        }
                         cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\t名次\n";
                         for(i=0;i<n;i++)
                                 cout<<stu[i].no<<"\t"<<stu[i].xm<<"\t"<<stu[i].chinese<<"\t"<<stu[i].math<<"\t"<<stu[i].english<<"\t"<<stu[i].sum<<"\t"<<stu[i].average<<"\t"<<i+1<<"\n";
                         sortno(stu,n);
}
void sortno(student *p,int n)                                          //冒泡法學(xué)號(hào)升序排序恢復(fù)按成績(jī)排序后的學(xué)生信息順序
{
        student t;
        for(int i=0;i<n-1;i++)
                for(int j=0;j<n-i-1;j++)
                        if((p+j)->no>(p+j+1)->no)
                        {
                                t=stu[j];
                                stu[j]=stu[j+1];
                                stu[j+1]=t;
                        }

}
void search(student *p,int n)
{
        int code;                                                          //輸入要查找的學(xué)號(hào)
        cout<<"請(qǐng)輸入學(xué)號(hào) :";
        cin>>code;
        int f=find(stu,code,n);                                            //查找函數(shù)返回值
        if(f==-1)
                cout<<"Can not find the student!";
        else
        {
                cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
                cout<<stu[f].no<<"\t"<<stu[f].xm<<"\t"<<stu[f].chinese<<"\t"<<stu[f].math<<"\t"<<stu[f].english<<"\t"<<stu[f].sum<<"\t"<<stu[f].average<<"\n";
        }
}
int find(student *p,int c,int n)
{
        for(int i=0;i<n;i++)
                if((p+i)->no==c)
                        return i;                                                  //查找函數(shù)返回值角標(biāo)
                return -1;                                                     //查找不到則返回-1
}
void max(student *p,int n)
{
        int a=0,b=0;                                                      
        for(int i=1;i<n;i++)                                               //stu[a]、stu[b]為最好和最差學(xué)生
        {
                if(stu[i].chinese+stu[i].math+stu[i].english>stu[a].chinese+stu[a].math+stu[a].english)
                        a=i;
                if(stu[i].chinese+stu[i].math+stu[i].english<stu[b].chinese+stu[b].math+stu[b].english)
                        b=i;
        }
        cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
        cout<<"成績(jī)最好的學(xué)生 :\n";
        cout<<stu[a].no<<"\t"<<stu[a].xm<<"\t"<<stu[a].chinese<<"\t"<<stu[a].math<<"\t"<<stu[a].english<<"\t"<<stu[a].sum<<"\t"<<stu[a].average<<"\n";
        cout<<"成績(jī)最差的學(xué)生 :\n";
        cout<<stu[b].no<<"\t"<<stu[b].xm<<"\t"<<stu[b].chinese<<"\t"<<stu[b].math<<"\t"<<stu[b].english<<"\t"<<stu[b].sum<<"\t"<<stu[b].average<<"\n";
}
void output(student *p,int n)                                          //輸出學(xué)生成績(jī)
{
        cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
        for(int i=0;i<n;i++)
                cout<<stu[i].no<<"\t"<<stu[i].xm<<"\t"<<stu[i].chinese<<"\t"<<stu[i].math<<"\t"<<stu[i].english<<"\t"<<stu[i].sum<<"\t"<<stu[i].average<<"\n";
}
int insert(student *p,int n)
{
        student newstu,*q;                                                 //newstu是要添加的學(xué)生,q為其指針
        q=&newstu;
        cout<<"輸入新學(xué)生的信息 :\n";
        cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
        cin>>newstu.no>>newstu.xm>>newstu.chinese>>newstu.math>>newstu.english;
        newstu.sum=newstu.chinese+newstu.math+newstu.english;
        newstu.average=newstu.sum/3;
        for(int i=0;i<n;i++)                                               //找到要插入的位置                                    
        {
                if(q->no>=p->no&&q->no<=(p+n-1)->no)                        
                {
                        if((p+i)->no==q->no)                                       //該學(xué)號(hào)已存在,輸出該學(xué)號(hào)的學(xué)生信息
                        {
                                cout<<"該學(xué)生已存在 "<<endl;
                                cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
                                cout<<stu[i].no<<"\t"<<stu[i].xm<<"\t"<<stu[i].chinese<<"\t"<<stu[i].math<<"\t"<<stu[i].english<<"\t"<<stu[i].sum<<"\t"<<stu[i].average<<"\n";
                                break;
                        }
       
                        if((p+i)->no<q->no&&q->no<(p+i+1)->no)                     //錄入成功
                        {
                                for(int j=n;j>i+1;j--)
                                        stu[j]=stu[j-1];
                                stu[i+1]=newstu;
                                cout<<"錄入成功!"<<endl;
                                n++;
                                cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
                                cout<<newstu.no<<"\t"<<newstu.xm<<"\t"<<newstu.chinese<<"\t"<<newstu.math<<"\t"<<newstu.english<<"\t"<<newstu.sum<<"\t"<<newstu.average<<"\n";
                                break;
                        }
                }
                else                                                           //錄入成功
                {
                        if(q->no<p->no)
                        {
                                for(int j=n;j>0;j--)
                                        stu[j]=stu[j-1];
                                stu[0]=newstu;
                                cout<<"錄入成功!"<<endl;
                                n++;
                                cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
                                cout<<newstu.no<<"\t"<<newstu.xm<<"\t"<<newstu.chinese<<"\t"<<newstu.math<<"\t"<<newstu.english<<"\t"<<newstu.sum<<"\t"<<newstu.average<<"\n";
                                break;
                        }
                        else
                        {
                                stu[n]=newstu;
                                cout<<"錄入成功!"<<endl;
                                n++;
                                cout<<"學(xué)號(hào)\t姓名\t語(yǔ)文\t數(shù)學(xué)\t外語(yǔ)\t總分\t平均分\n";
                                cout<<newstu.no<<"\t"<<newstu.xm<<"\t"<<newstu.chinese<<"\t"<<newstu.math<<"\t"<<newstu.english<<"\t"<<newstu.sum<<"\t"<<newstu.average<<"\n";
                                break;
                        }
                }
        }
        return n;                                                          //學(xué)生人數(shù)改變,返回人數(shù)
}
int del(student *p,int n)
{
        int newno;                                                         //輸入要?jiǎng)h除的學(xué)生人數(shù)
        cout<<"輸入要?jiǎng)h除的學(xué)生學(xué)號(hào) :";
        cin>>newno;
        if(newno>=p->no&&newno<=(p+n-1)->no)                               //查找該學(xué)生
        {
                for(int i=0;i<n;i++)
                        if((p+i)->no==newno)
                        {
                                for(;i<n-1;i++)
                                stu[i]=stu[i+1];
                                n--;
                                cout<<"刪除成功 !\n";
                        }
        }
        else
                cout<<"無(wú)法找到該學(xué)生 :\n";
        return n;
}
void showmenu()                                                        //輸出菜單
{
        cout<<"請(qǐng)輸入1~8內(nèi)的數(shù)字選項(xiàng) :\n";
        cout<<"1.計(jì)算各科的平均成績(jī)和總平均分\n";
        cout<<"2.按學(xué)生的平均成績(jī)降序排序\n";
        cout<<"3.查詢指定學(xué)號(hào)的學(xué)生信息\n";
        cout<<"4.找出考得最好和考得最差的學(xué)生\n";
        cout<<"5.輸出學(xué)生的信息\n";
        cout<<"6.添加學(xué)生信息\n";
        cout<<"7.刪除學(xué)生信息\n";
        cout<<"8.結(jié)束\n";
}






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1