找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2622|回复: 0
打印 上一主题 下一主题
收起左侧

C++写的学生管理系统,请大佬点评一下

[复制链接]
跳转到指定楼层
楼主
ID:373270 发表于 2018-7-17 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iostream>
using namespace std;
const int N=50;
struct student                            //定义结构体
{
        int no;                               //学号
        char xm[10];                          //姓名
        double chinese;                       //语文
        double math;                          //数学
        double english;                       //外语
        double sum;                           //总分
        double average;                       //平均分
};
student stu[N];
void input(student *p,int n);             //输入学生信息
void cal(student *p,int i);               //计算总分和个人平均分
void aver(student *p,int n);              //计算各科平均分和平均总分
void sort(student *p,int n);              //按成绩排序
void sortno(student *p,int n);            //按学号排序
void search(student *p,int n);            //查找学生
int  find(student *p,int c,int n);        //查找学号
void max(student *p,int n);               //查找最好和最差学生
void output(student *p,int n);            //输出学生信息
int  insert(student *p,int n);            //添加学生信息
int  del(student *p,int n);               //删除学生信息
void showmenu();                          //显示菜单
int  main()
{
        int n;
        cout<<"输入学生人数 :";               //输入学生总数
        cin>>n;
        input(stu,n);
        while(n>0)                            //当n大于0时循环
        {
                showmenu();                     
                int a;                            //通过给a赋值调用函数
                cout<<"请输入选项 :";
                cin>>a;
                if(a<1||a>8)                      //输入指令为1~8
                {
                        cout<<"输入错误!!!\n";        //输入错误
                        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函数需要返回n值
                {
                        n=del(stu,n);
                        cout<<endl;
                        for(int i=0;i<33;i++)
                        cout<<"*";
                        cout<<endl;
                }
                else if(a==8)                     //结束语句
                {
                        for(int i=0;i<33;i++)
                                cout<<"*";
                        cout<<"\n谢谢使用"<<endl;
                        break;
                }
                else
                {
                        switch(a)                     //switch选择语句
                        {
                                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)                                          //输入函数
{
        cout<<"Enter students information:"<<endl;                         //输出表头
        cout<<"学号\t姓名\t语文\t数学\t外语\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;          //输入学生信息
                cal(stu,i);                                                                      //cal函数计算总分和平均分
        }
        cout<<"学号\t姓名\t语文\t数学\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<<"\n";
        cout<<endl;
        for(i=0;i<33;i++)
                cout<<"*";                                                                  
        cout<<endl;
}
void cal(student *p,int i)                                             //计算每个学生总分和平均分
{
        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)                                            //计算各科平均分和总平均分
{
        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;                                                    //将语文成绩都加起来除以总人数
        avermath/=n;
        averenglish/=n;
        aversum=averchinese+avermath+averenglish;
        cout<<"average of the scores\n";
        cout<<"语文\t数学\t外语\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++)                                             //冒泡法平均成绩降序排序
                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<<"学号\t姓名\t语文\t数学\t外语\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)                                          //冒泡法学号升序排序恢复按成绩排序后的学生信息顺序
{
        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;                                                          //输入要查找的学号
        cout<<"请输入学号 :";
        cin>>code;
        int f=find(stu,code,n);                                            //查找函数返回值
        if(f==-1)
                cout<<"Can not find the student!";
        else
        {
                cout<<"学号\t姓名\t语文\t数学\t外语\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;                                                  //查找函数返回值角标
                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]为最好和最差学生
        {
                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<<"学号\t姓名\t语文\t数学\t外语\t总分\t平均分\n";
        cout<<"成绩最好的学生 :\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<<"成绩最差的学生 :\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)                                          //输出学生成绩
{
        cout<<"学号\t姓名\t语文\t数学\t外语\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是要添加的学生,q为其指针
        q=&newstu;
        cout<<"输入新学生的信息 :\n";
        cout<<"学号\t姓名\t语文\t数学\t外语\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)                                       //该学号已存在,输出该学号的学生信息
                        {
                                cout<<"该学生已存在 "<<endl;
                                cout<<"学号\t姓名\t语文\t数学\t外语\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<<"学号\t姓名\t语文\t数学\t外语\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<<"学号\t姓名\t语文\t数学\t外语\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<<"学号\t姓名\t语文\t数学\t外语\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;                                                          //学生人数改变,返回人数
}
int del(student *p,int n)
{
        int newno;                                                         //输入要删除的学生人数
        cout<<"输入要删除的学生学号 :";
        cin>>newno;
        if(newno>=p->no&&newno<=(p+n-1)->no)                               //查找该学生
        {
                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<<"无法找到该学生 :\n";
        return n;
}
void showmenu()                                                        //输出菜单
{
        cout<<"请输入1~8内的数字选项 :\n";
        cout<<"1.计算各科的平均成绩和总平均分\n";
        cout<<"2.按学生的平均成绩降序排序\n";
        cout<<"3.查询指定学号的学生信息\n";
        cout<<"4.找出考得最好和考得最差的学生\n";
        cout<<"5.输出学生的信息\n";
        cout<<"6.添加学生信息\n";
        cout<<"7.删除学生信息\n";
        cout<<"8.结束\n";
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表