標(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