用c++实现学生成绩管理系统,以操作txt文件为主,可通过0-7进行操作,功能已经较为齐全
‘0’退出保存
‘1’显示学生信息
‘2’可以添加信息
‘3’查询信息(可通过学号,姓名,多科成绩五种方式查找)
‘4’删除信息(可通过学号,姓名,多科成绩五种方式查找删除)
‘5’成绩排序
‘6’单科成绩分析(可进行单科成绩排序,共三种排序方式)
‘7’退出并清空
*******此代码是博主初学时所写,C++知识并不完备
*******仅供参考
************代码如下
#include “iostream”
#include “string”
#include “iomanip”
#include “fstream”
using namespace std;
int n;
struct student
{
string ID;
string name;
double score1;
double score2;
double score3;
};
student stu[100];//
void showBiaotou();
void showMenu();
void showChoice();
void initStuMessage();//学生数据初始化
void ninit();//扫描文件行数,得到n
void cunMessage();// 0 保存退出
void showStuMessage();//1 学生信息总览表1
void addStuMessage();// 2 添加2
void findMessage();// 3 查询3
void clcStuMessage();// 4 清除数据,学号查询清除4
void xunMessage();// 5 成绩排序
void danMessag(); // 6 单科成绩分析
void qingMessage();// 7 清空所有信息并退出系统7
int main()
{
ninit();
initStuMessage();
showMenu();
showChoice();
return 0;
}
void ninit()
{
char file[100];
ifstream infile(“stu1.txt”);
if(!infile.is_open())//打开失败
{
cout<<“文件无法打开”<<endl;
cout<<“建立一个名为“stu1”的文件夹”<<endl;
cout<<“重新打开文件夹”<<endl;
infile.close();
ofstream outfile;
outfile.open("stu1.txt", ios_base::app);
outfile.close();
ifstream infile("stu1.txt");
}
if(infile.is_open())//成功打开
{
while(!infile.eof())
{
infile.getline(file, sizeof(file));//此处默认的终止标识符为‘\n’
n++;
}
n=n-2;
infile.close();
}
////////////////////////////////////////////
}
void initStuMessage()
{
ifstream infile(“stu1.txt”);
for(int j=0;j<=n;j++)
{
infile >> setw(20)>> stu[j].ID;
infile >> setw(20)>> stu[j].name;
infile >> setw(10)>> stu[j].score1;
infile >> setw(10)>> stu[j].score2;
infile >> setw(10)>> stu[j].score3;
}
infile.close();
// cout<<n;
}
void showBiaotou()
{
cout << setw(20) << “学号”;
cout << setw(20) << “姓名”;
cout << setw(10) << “专业成绩”;
cout << setw(10) << “平时成绩”;
cout << setw(10) << “综合成绩”;
cout << endl;
}
void showMenu()
{
cout << “\n=============================================\n”;
cout << " 欢迎使用学生成绩查询系统\n";
cout << " 1.显示所有学生成绩\n";
cout << " 2.添加信息\n";
cout << " 3.查询信息\n";
cout << " 4.删除信息\n";
cout << " 5.成绩排序\n";
cout << " 6.单科成绩分析\n";
cout << " 7.清空所有信息并退出系统\n";
cout << " 0.保存并且退出系统\n";
cout << “\n=============================================\n”;
cout << " 请输入数字(0-7):\n";
}
void showChoice()
{
char choice;
cin >> choice;
while (choice <=‘7’)
{
switch(choice)
{
case ‘0’:
cunMessage();
break;
case ‘1’:
showStuMessage();
break;
case ‘2’:
addStuMessage();
break;
case ‘3’:
findMessage();
break;
case ‘4’:
clcStuMessage();
break;
case ‘5’:
xunMessage();
break;
case ‘6’:
danMessag();
break;
case ‘7’:
qingMessage();
break;
default:
cout << “输入非法,返回到主菜单” << endl;
}
if(choice==‘7’) break;
if(choice==‘0’) break;
showMenu();
cin >> choice;
}
}
void cunMessage()
{
ofstream outfile;
outfile.open(“stu1.txt”, ios_base::out);
for(int j=0;j<=n;j++)
{
outfile << setw(20) << stu[j].ID;
outfile << setw(20) << stu[j].name;
outfile << setw(10) << stu[j].score1;
outfile << setw(10) << stu[j].score1;
outfile << setw(10) << stu[j].score1;
outfile << endl;
}
outfile.close();
cout << "你选择了退出系统,并且保存修改数据" << endl;
cout << "系统即将关闭\n";
}
void showStuMessage()//1
{
showBiaotou();
for(int i = 0; i <=n; i++)
{
cout << setw(20) << stu[i].ID;
cout << setw(20) << stu[i].name;
cout << setw(10) << stu[i].score1;
cout << setw(10) << stu[i].score2;
cout << setw(10) << stu[i].score3;
cout << endl;
}
}
void addStuMessage()//2
{
cin.get();
student newstu;
cout << “请添加学生的信息(学号,姓名,成绩)” << endl;
cout << “学号:”;
getline(cin,newstu.ID);
cout << endl;
cout << “姓名:”;
getline(cin,newstu.name);
cout << endl;
while(1)
{
cout << “专业成绩: “;
cin >> newstu.score1;
while(cin.fail())
{
cout<<“输入非法字符,请重新输入成绩:\n”;
cin.clear();
while(cin.get()!=’\n’)
continue;
cin >> newstu.score1;
}
if(newstu.score1>=0&&newstu.score1<=100)
{
cout << endl;
break;
}
else
{
cout<<” 成绩只能在0-100,重新输入成绩:\n”;
}
cin.clear();
cin.ignore();
}
while(1)
{
cout << “平时成绩: “;
cin >> newstu.score2;
while(cin.fail())
{
cout<<“输入非法字符,请重新输入成绩:\n”;
cin.clear();
while(cin.get()!=’\n’)
continue;
cin >> newstu.score2;
}
if(newstu.score2>=0&&newstu.score2<=100)
{
cout << endl;
break;
}
else
{
cout<<” 成绩只能在0-100,重新输入成绩:\n”;
}
cin.clear();
cin.ignore();
}
newstu.score3=newstu.score20.8+newstu.score10.2;
cout << "输出新增学生的信息:" << endl;
showBiaotou();
cout << setw(20) << newstu.ID;
cout << setw(20) << newstu.name;
cout << setw(10) << newstu.score1;
cout << setw(10) << newstu.score2;
cout << setw(10) << newstu.score3;
cout << endl;
stu[n+1].ID=newstu.ID;
stu[n+1].name=newstu.name;
stu[n+1].score1=newstu.score1;
stu[n+1].score2=newstu.score2;
stu[n+1].score3=newstu.score3;
n++;
}//2
void findMessage()//3
{
int cha,i;
int pan=0;
cin.get();
student fstu;
cout<<“查询方式”<<endl;
cout<<“学号查询‘1’”<<endl;
cout<<“姓名查询‘2’”<<endl;
cout<<“专业成绩查询‘3’”<<endl;
cout<<“平时成绩查询‘4’”<<endl;
cout<<“综合成绩查询‘5’”<<endl;
cin>>cha;
if(cha==1)
{
cout << "学号 ";
cin>>fstu.ID;
for(i=0;i<=n;i++)
{
if (fstu.ID==stu[i].ID)
{
fstu.name=stu[i].name;
fstu.score1=stu[i].score1;
fstu.score2=stu[i].score2;
fstu.score3=stu[i].score3;
if(pan==0)
{ cout << "输出查询学生的信息:" << endl;
showBiaotou(); }
cout << setw(20) << fstu.ID;
cout << setw(20) << fstu.name;
cout << setw(10) << fstu.score1;
cout << setw(10) << fstu.score2;
cout << setw(10) << fstu.score3;
cout << endl;
pan=1;
}
}//for
if(pan==0) cout << "没有该学生的信息:" << endl;
} //cha==1
if(cha==2)
{
cout << "姓名 ";
cin>>fstu.name;
for(i=0;i<=n;i++)
{
if (fstu.name==stu[i].name)
{
fstu.ID=stu[i].ID;
fstu.score1=stu[i].score1;
fstu.score2=stu[i].score2;
fstu.score3=stu[i].score3;
if(pan==0)
{ cout << "输出查询学生的信息:" << endl;
showBiaotou(); }
cout << setw(20) << fstu.ID;
cout << setw(20) << fstu.name;
cout << setw(10) << fstu.score1;
cout << setw(10) << fstu.score2;
cout << setw(10) << fstu.score3;
cout << endl;
pan=1;
}
}//for
if(pan==0) cout << "没有该学生的信息:" << endl;
} //cha==2
if(cha==3)
{
cout << "专业成绩 ";
cin >> fstu.score1;
for(i=0;i<=n;i++)
{
if (fstu.score1==stu[i].score1)
{
fstu.name=stu[i].name;
fstu.ID=stu[i].ID;
fstu.score2=stu[i].score2;
fstu.score3=stu[i].score3;
if(pan==0)
{ cout << "输出查询学生的信息:" << endl;
showBiaotou(); }
cout << setw(20) << fstu.ID;
cout << setw(20) << fstu.name;
cout << setw(10) << fstu.score1;
cout << setw(10) << fstu.score2;
cout << setw(10) << fstu.score3;
cout << endl;
pan=1;
}
}//for
if(pan==0) cout << "没有该学生的信息:" << endl;
} //cha==3
if(cha==4)
{
cout << "平时成绩 ";
cin >> fstu.score2;
for(i=0;i<=n;i++)
{
if (fstu.score2==stu[i].score2)
{
fstu.name=stu[i].name;
fstu.ID=stu[i].ID;
fstu.score1=stu[i].score1;
fstu.score3=stu[i].score3;
if(pan==0)
{ cout << "输出查询学生的信息:" << endl;
showBiaotou(); }
cout << setw(20) << fstu.ID;
cout << setw(20) << fstu.name;
cout << setw(10) << fstu.score1;
cout << setw(10) << fstu.score2;
cout << setw(10) << fstu.score3;
cout << endl;
pan=1;
}
}//for
if(pan==0) cout << "没有该学生的信息:" << endl;
} //cha==4
if(cha==5)
{
cout << "综合成绩 ";
cin >> fstu.score3;
for(i=0;i<=n;i++)
{
if (fstu.score3==stu[i].score3)
{
fstu.name=stu[i].name;
fstu.ID=stu[i].ID;
fstu.score1=stu[i].score1;
fstu.score2=stu[i].score2;
if(pan==0)
{ cout << "输出查询学生的信息:" << endl;
showBiaotou(); }
cout << setw(20) << fstu.ID;
cout << setw(20) << fstu.name;
cout << setw(10) << fstu.score1;
cout << setw(10) << fstu.score2;
cout << setw(10) << fstu.score3;
cout << endl;
pan=1;
}
}//for
if(pan==0) cout << "没有该学生的信息:" << endl;
} //cha==5
}//3
void clcStuMessage()//4
{
int i,j;
// string clc_id;
int shu=0;
int shan;
student cstu;
cout<<"删除方式"<<endl;
cout<<"学号‘1’"<<endl;
cout<<"姓名‘2’"<<endl;
cout<<"专业成绩‘3’"<<endl;
cout<<"平时成绩‘4’"<<endl;
cout<<"综合成绩‘5’"<<endl;
cin>>shan;
if(shan==1)
{
cout<<"请输入要删除的对象的学号:";
getline(cin,cstu.ID);
cin >> cstu.ID;
for(i=0;i<=n;i++)
{
if(stu[i].ID==cstu.ID)
{
for(j=i;j<n;j++)
{
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
}
n--;shu++;i--;
}
}//for
}//shan==1
if(shan==2)
{
cout<<"请输入要删除的对象的姓名:";
getline(cin,cstu.name);
cin >> cstu.name;
for(i=0;i<=n;i++)
{
if(stu[i].name==cstu.name)
{
for(j=i;j<n;j++)
{
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
}
n--;shu++;i--;
}
}//for
}//shan==2
if(shan==3)
{
cout<<"请输入要删除的对象的成绩:";
cin >> cstu.score1;
for(i=0;i<=n;i++)
{
if(stu[i].score1==cstu.score1)
{
for(j=i;j<n;j++)
{
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
}
n--; i--;shu++;
}
}//for
}//shan==3
if(shan==4)
{
cout<<"请输入要删除的对象的成绩:";
cin >> cstu.score2;
for(i=0;i<=n;i++)
{
if(stu[i].score2==cstu.score2)
{
for(j=i;j<n;j++)
{
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
}
n--; i--;shu++;
}
}//for
}//shan==4
if(shan==5)
{
cout<<"请输入要删除的对象的成绩:";
cin >> cstu.score3;
for(i=0;i<=n;i++)
{
if(stu[i].score3==cstu.score3)
{
for(j=i;j<n;j++)
{
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
}
n--; i--;shu++;
}
}//for
}//shan==5
cout<<"删除学生数量:"<< shu <<endl;
shu=0;
}
void xunMessage()//5
{
int i,j;
student xstu;
for(i=0;i<n;i++)//321
for(j=0;j<n;j++)
{
if(stu[j].score1<stu[j+1].score1)
{
xstu.ID=stu[j].ID;
xstu.name=stu[j].name;
xstu.score1=stu[j].score1;
xstu.score2=stu[j].score2;
xstu.score3=stu[j].score3;
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
stu[j+1].ID=xstu.ID;
stu[j+1].name=xstu.name;
stu[j+1].score1=xstu.score1;
stu[j+1].score2=xstu.score2;
stu[j+1].score3=xstu.score3;
}
}
showStuMessage();
}
void danMessag() // 6 单科成绩分析
{
int i,j,xu;
student xstu;
int pan=1;
cout<<"排序方式"<<endl;
cout<<"专业成绩‘1’"<<endl;
cout<<"平时成绩‘2’"<<endl;
cout<<"综合成绩‘3’"<<endl;
cin>>xu;
while(pan)
{
if(xu==1||xu==2||xu==3)pan=0;
}
if(xu==1)
{
for(i=0;i<n;i++)//321
for(j=0;j<n;j++)
{
if(stu[j].score1<stu[j+1].score1)
{
xstu.ID=stu[j].ID;
xstu.name=stu[j].name;
xstu.score1=stu[j].score1;
xstu.score2=stu[j].score2;
xstu.score3=stu[j].score3;
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
stu[j+1].ID=xstu.ID;
stu[j+1].name=xstu.name;
stu[j+1].score1=xstu.score1;
stu[j+1].score2=xstu.score2;
stu[j+1].score3=xstu.score3;
}
}
}//xu==1
if(xu==2)
{
for(i=0;i<n;i++)//321
for(j=0;j<n;j++)
{
if(stu[j].score2<stu[j+1].score2)
{
xstu.ID=stu[j].ID;
xstu.name=stu[j].name;
xstu.score1=stu[j].score1;
xstu.score2=stu[j].score2;
xstu.score3=stu[j].score3;
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
stu[j+1].ID=xstu.ID;
stu[j+1].name=xstu.name;
stu[j+1].score1=xstu.score1;
stu[j+1].score2=xstu.score2;
stu[j+1].score3=xstu.score3;
}
}
}//xu==2
if(xu==3)
{
for(i=0;i<n;i++)//321
for(j=0;j<n;j++)
{
if(stu[j].score3<stu[j+1].score3)
{
xstu.ID=stu[j].ID;
xstu.name=stu[j].name;
xstu.score1=stu[j].score1;
xstu.score2=stu[j].score2;
xstu.score3=stu[j].score3;
stu[j].ID=stu[j+1].ID;
stu[j].name=stu[j+1].name;
stu[j].score1=stu[j+1].score1;
stu[j].score2=stu[j+1].score2;
stu[j].score3=stu[j+1].score3;
stu[j+1].ID=xstu.ID;
stu[j+1].name=xstu.name;
stu[j+1].score1=xstu.score1;
stu[j+1].score2=xstu.score2;
stu[j+1].score3=xstu.score3;
}
}
}//xu==3
showStuMessage();
}
void qingMessage()// 7 清空所有信息并退出系统7
{
ofstream outfile;
outfile.open(“stu1.txt”, ios_base::out);
outfile.close();
cout << “你选择了退出系统,并且清除数据” << endl;
cout << “系统即将关闭\n”;
}