gradeInfo.txt文件存储着学生信息。
#include
using std::cin;
using std::cout;
using std::cerr;
using std::endl;
using std::ios;
#include
using std::ofstream;
using std::ifstream;
using std::fstream;
#include
using std::string;
#include
using std::setw;
int enterChoice();
void searchGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void changeGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void deleteGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int& row);
void addGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int& row);
int getRow(ifstream& inp);
void getID(ifstream& inp,string names[],string ID[],int Chinese[],int Math[],int Eng[]);
void countGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void saveResult(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void showGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void averGrade(int Chinese[],int Math[],int Eng[],int row);
int main()
{
ifstream infile("gradeInfo.txt");
if(!infile){
cerr<<"文件打开错误,gradeInfo.txt不存在."<
int row=getRow(infile);
infile.close();//确定目前的学生数为row
ifstream infile2("gradeInfo.txt");
//最多提供60个学生的成绩管理.根据目前合理的课程班人数确定.可根据需要进行更改.
string names[60]; //学生姓名
string ID[60]; //学生学号
int Chinese[60]; //语文成绩
int Math[60]; //数学成绩
int Eng[60]; //英语成绩
getID(infile2,names,ID,Chinese,Math,Eng);//从文件中读入学生资料.
infile2.close();
int part; //其值代表了用户所选模块.
//系统的主菜单.用户选择将要进行的操作.
while(part!=4){
cout<<"\n **欢迎进入学生信息管理系统**"<
if (part==1){
int choice; //用户在信息维护模块所选择的执行功能.
while((choice=enterChoice())!=4){
switch(choice){
case 1:
addGrade(names,ID,Chinese,Math,Eng,row);
break;
case 2:
deleteGrade(names,ID,Chinese,Math,Eng,row);
break;
case 3:
changeGrade(names,ID,Chinese,Math,Eng,row);
break;
default:
cerr<<"您的选择不正确"<
}
}
}
if (part==2){
cout<<"请选择:"<
cin>>allOrPart;
if (allOrPart==1)
searchGrade(names,ID,Chinese,Math,Eng,row);
if (allOrPart==2)
showGrade(names,ID,Chinese,Math,Eng,row);
}
if (part==3){
cout<<"请选择:"<
cin>>averOrPart;
if (averOrPart==2)
averGrade(Chinese,Math,Eng,row);
if (averOrPart==1)
countGrade(names,ID,Chinese,Math,Eng,row);
}
}
return 0;
}
//此函数用于获取当前系统中存储获的学生信息条数.
int getRow(ifstream& inp)
{
int row=0;
string a,name,ID;
int mark;
inp>>a>>a>>a>>a>>a; //跳过第一行的目录结构.
while(inp){
inp>>name>>ID>>mark>>mark>>mark;
row++;
}
return row-1;
}
//此函数用于从文本文档中读取数据到内存以备用户在终端进行操作.
void getID(ifstream& inp,string names[],string ID[],int Chinese[],int Math[],int Eng[])
{
string a;
inp>>a>>a>>a>>a>>a; //跳过第一行的目录结构.
int i=0;
while(inp){
inp>>names[i]>>ID[i]>>Chinese[i]>>Math[i]>>Eng[i];
i++;
}
}
//此函数实现学生成绩信息维护模块的子菜单.
int enterChoice()
{
cout<<"\n 请输入您要进行的操作"<
cin>>choice;
return choice;
}
//此函数为用户提供学生成绩的查询功能,使用学生姓名或学号均可.
void searchGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row)
{
string searchGoal;
cout<<"\n请输入学生学号或姓名"<
bool found;
for (int j=0;j
cout<<"查询结果"<
break;
}
}
if (found!=true)
cout<<"所查找的学生成绩不存在"<
//此函数可删除系统中存储的学生信息记录.
void deleteGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int& row)
{
cout<<"\n请输入要删除信息的学生姓名或学号"<
cin>>delName;
bool found;
for (int j=0;j
found=true;
names[j]="\0";
ID[j]="\0";
Chinese[j]=-1;
Math[j]=-1;
Eng[j]=-1;
saveResult(names,ID,Chinese,Math,Eng,row);
cout<<"该生信息已成功删除"<
}
if (found!=true)
cout<<"要删除的学生信息不存在"<
//此函数可向文本文件中写入新的学生信息.
void addGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int& row)
{
string newID;
cout<<"\n请先输入学生学号:"<
cin>>newID;
bool exist;
for (int j=0;j
cout<<"该学生信息已存在"<
break;}
if (exist!=true){
cout<<"\n请再输入学生姓名和三科成绩,中间以空格键分开"<
cin>>names[row]>>Chinese[row]>>Math[row]>>Eng[row];
row++;
saveResult(names,ID,Chinese,Math,Eng,row);
cout<<"学生信息增加成功"<
}
//此函数可更改学生的各项信息.
void changeGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row)
{
string changeGoal;
cout<<"\n请输入要更改信息的学生姓名或学号:";
cin>>changeGoal;
bool found;
int changeNum;//用户的修改内容选项
for (int j=0;j
found=true;
cout<<"该学生原始信息为:"<
cout<<"请输入修改后的内容:";
switch(changeNum){
case 1:
cin>>names[j];
break;
case 2:
cin>>ID[j];
break;
case 3:
cin>>Chinese[j];
break;
case 4:
cin>>Math[j];
break;
case 5:
cin>>Eng[j];
break;
}
saveResult(names,ID,Chinese,Math,Eng,row);
cout<<"\n修改成功!"<
}
if (found!=true)
cout<<"要修改的学生信息不存在"<
//此函数可统计某一科目再某个分数段上的学生分布,包括学生的姓名,学号,成绩,以及在这个分数段上的学生人数.
void countGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row)
{
string subject;
int low,high;
int countResult=0;
cout<<"\n请输入要查询的课程名和分数段,中间用空格分开,如:英语 60 70"<
cout<
countResult++;
cout<
if (subject=="数学"&&Math[i]>=low&&Math[i]<=high){
countResult++;
cout<
if (subject=="英语"&&Eng[i]>=low&&Eng[i]<=high){
countResult++;
cout<
}
cout<<"\n共"<
//此函数可将内存中的学生信息数据变动保存到文本文件中.
void saveResult(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row)
{
ofstream outfile("GradeInfo.txt");
outfile<<" 姓名 学号 语文 数学 英语"<
outfile<
}
//显示目前系统中记录的所有的学生信息.
void showGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row)
{
for (int n=0;n
cout<
}
//计算单科平均分数
void averGrade(int Chinese[],int Math[],int Eng[],int row)
{
cout<<"请选择所要计算平均分数的科目:"<
cin>>subject;
int sum=0;
for (int n=0;n
{
if (subject==1)
sum+=Chinese[n];
if (subject==2)
sum+=Math[n];
if (subject==3)
sum+=Eng[n];
}
else row=row-1;
}
double averGrade;
averGrade=static_cast
cout<<"该科目的平均成绩为:"<
data structure???
hmm....it seems complicated.....
hehe