|
|
#include <iostream>
|
|
|
#include <cstring>
|
|
|
#include <iomanip>
|
|
|
#include <cstdlib>
|
|
|
#include <fstream>
|
|
|
#include <string>
|
|
|
#include <cctype>
|
|
|
using namespace std;
|
|
|
const int SIZE=20;
|
|
|
struct student
|
|
|
{
|
|
|
char classnum[SIZE]; //班级
|
|
|
char id[SIZE]; //学号
|
|
|
char name[SIZE]; //姓名
|
|
|
int *score;
|
|
|
};
|
|
|
void input(student p[], string c_name[],int s_num,int c_num); //输入学生的成绩信息,包括学号、姓名、性别等基本信息和各科成绩
|
|
|
void show(student p[], string c_name[],int s_num,int c_num); // 显示全部学生各科成绩信息;
|
|
|
void statistic(student p[], string c_name[],int s_num,int c_num);//对各科分班进行成绩统计分析,计算总分、平均分、最高分、最低分、及格率等;
|
|
|
void section(student p[], string c_name[],int s_num,int c_num); //统计各个科目各分数段人数及班级信息;
|
|
|
void search(student p[], string c_name[],int s_num,int c_num); //按学号或姓名查找并显示某个学生的各科成绩;
|
|
|
void sort(student p[], string c_name[],int s_num,int c_num); //按课程成绩或总分由高到低排序显示;
|
|
|
void update(student p[], string c_name[],int s_num,int c_num); //更新某个学生的基本信息或课程成绩;
|
|
|
void quicksort(int s[],int l,int r); //快速排序
|
|
|
void fileout(student p[], string c_name[],int s_num,int c_num,int semester);//文件形式输出
|
|
|
int main()
|
|
|
{
|
|
|
cout<<setw(25)<<" "<<"欢迎使用本系统!"<<endl;
|
|
|
cout<<"********************************************************************************"<<endl<<endl;
|
|
|
cout<<"****************************《学生成绩管理系统》********************************"<<endl<<endl;
|
|
|
cout<<"********************************************************************************"<<endl;
|
|
|
int n=0;
|
|
|
int student_num;//学生数
|
|
|
int semester;//学期
|
|
|
int cour_num;//课程数
|
|
|
cout<<"是否从文档中读取基础信息?(Y/N):";
|
|
|
char first_sel;
|
|
|
cin>>first_sel;
|
|
|
cin.get();
|
|
|
while(tolower(first_sel)!='y'&&tolower(first_sel)!='n')
|
|
|
{
|
|
|
cout<<"输入有误,请重新输入(Y/N):";
|
|
|
cin>>first_sel;
|
|
|
cin.get();
|
|
|
}
|
|
|
if(tolower(first_sel)=='y')
|
|
|
{
|
|
|
ifstream fin;
|
|
|
n=1;
|
|
|
cout<<"**************** 说明: ****************"<<endl;
|
|
|
cout<<"**************** 如上次保存的文档名为student.txt ****************"<<endl;
|
|
|
cout<<"**************** 则读取的文档名为basic_student.txt。 ****************"<<endl;
|
|
|
cout<<"请输入基本信息文档名:";
|
|
|
char _fname[SIZE];
|
|
|
cin.getline(_fname,SIZE);
|
|
|
fin.open(_fname);
|
|
|
while(!fin.is_open())
|
|
|
{
|
|
|
cout<<"不能打开此文档名的文档,请重新输入:";
|
|
|
cin.getline(_fname,SIZE);
|
|
|
fin.open(_fname);
|
|
|
}
|
|
|
fin>>student_num;
|
|
|
fin.get();
|
|
|
fin>>semester;
|
|
|
fin.get();
|
|
|
fin>>cour_num;
|
|
|
fin.get();
|
|
|
fin.close();
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
cout<<setfill('=')<<setw(32);
|
|
|
cout<<"请输入学生人数:";
|
|
|
cin>>student_num;
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入学生个数: ";
|
|
|
cin>>student_num;
|
|
|
cin.get();
|
|
|
}
|
|
|
cout<<"================";
|
|
|
cout<<"请输入学期(以数字形式):";
|
|
|
cin>>semester;
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入学期: ";
|
|
|
cin>>student_num;
|
|
|
cin.get();
|
|
|
}
|
|
|
cout<<setfill('=')<<setw(25);
|
|
|
cout<<"请输入第 "<<semester<<" 学期的课程数目: ";
|
|
|
cin>>cour_num;
|
|
|
cin.get();
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入第 "<<semester<<" 学期的课程数目: ";
|
|
|
cin>>cour_num;
|
|
|
cin.get();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
student *p=new student[student_num];
|
|
|
string *cour_name=new string[cour_num];
|
|
|
if(tolower(first_sel)=='y')
|
|
|
{
|
|
|
ifstream fin;
|
|
|
cout<<"**************** 说明: ******************"<<endl;
|
|
|
cout<<"**************** 如上次保存的文档名为student.txt ******************"<<endl;
|
|
|
cout<<"**************** 则读取的文档名为course_student.txt。 ******************"<<endl;
|
|
|
cout<<"请输入课程信息文档名:";
|
|
|
char _fname[SIZE];
|
|
|
cin.getline(_fname,SIZE);
|
|
|
fin.open(_fname);
|
|
|
while(!fin.is_open())
|
|
|
{
|
|
|
cout<<"不能打开此文档名的文档,请重新输入:";
|
|
|
cin.getline(_fname,SIZE);
|
|
|
fin.open(_fname);
|
|
|
}
|
|
|
for(int i=0;i<cour_num;i++)
|
|
|
{
|
|
|
getline(fin,cour_name[i]);
|
|
|
}
|
|
|
fin.close();
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
int i;
|
|
|
for(i=0;i<cour_num;i++)
|
|
|
{
|
|
|
cout<<setfill('=')<<setw(25);
|
|
|
cout<<"请输入第 "<<i+1<<" 个课程名:";
|
|
|
cin>>cour_name[i];
|
|
|
cin.get();
|
|
|
}
|
|
|
}
|
|
|
int i;
|
|
|
int **all_score=new int*[student_num];
|
|
|
for(i=0;i<student_num;i++)
|
|
|
all_score[i]=new int[cour_num];
|
|
|
|
|
|
for(i=0;i<student_num;i++)
|
|
|
p[i].score=&all_score[i][0];
|
|
|
if(tolower(first_sel)=='y')
|
|
|
{
|
|
|
ifstream fin;
|
|
|
cout<<"****************** 说明: ******************"<<endl;
|
|
|
cout<<"****************** 如上次保存的文档名为student.txt ******************"<<endl;
|
|
|
cout<<"****************** 则读取的文档名为student_student.txt。 ******************"<<endl;
|
|
|
cout<<"请输入学生信息文档名:";
|
|
|
char _fname[SIZE];
|
|
|
cin.getline(_fname,SIZE);
|
|
|
fin.open(_fname);
|
|
|
while(!fin.is_open())
|
|
|
{
|
|
|
cout<<"不能打开此文档名的文档,请重新输入:";
|
|
|
cin.getline(_fname,SIZE);
|
|
|
fin.open(_fname);
|
|
|
}
|
|
|
int i;
|
|
|
for(i=0;i<student_num;i++)
|
|
|
{
|
|
|
fin.get(p[i].classnum,SIZE);
|
|
|
fin.get();
|
|
|
fin.get(p[i].id,SIZE);
|
|
|
fin.get();
|
|
|
fin.getline(p[i].name,SIZE);
|
|
|
for(int j=0;j<cour_num;j++)
|
|
|
{
|
|
|
fin>>*(p[i].score+j);
|
|
|
fin.get();
|
|
|
}
|
|
|
}
|
|
|
fin.close();
|
|
|
}
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
char select='a';
|
|
|
while(select!='q')
|
|
|
{
|
|
|
cout<<"********************************************************************************"<<endl;
|
|
|
cout<<"请输入选择:"<<endl;
|
|
|
cout<<"【1】输入基本信息 "<<"【2】显示成绩信息 "<<"【3】成绩统计分析"<<endl;
|
|
|
cout<<"【4】统计各科各分数段人数 "<<"【5】查找某个学生的各科成绩 " <<"【6】由高到低显示成绩"<<endl;
|
|
|
cout<<"【7】更新学生成绩 "<<"【8】保存学生与成绩信息 "<<"【9】结束"<<endl<<endl;
|
|
|
cout<<"********************************************************************************"<<endl;
|
|
|
cout<<"输入:";
|
|
|
cin.get(select);
|
|
|
cin.get();
|
|
|
while(n==0&&select!='1')
|
|
|
{
|
|
|
cout<<"输入有误,请先输入基本信息!"<<endl;
|
|
|
select='1';
|
|
|
}
|
|
|
if(select=='1')
|
|
|
input(p,cour_name,student_num,cour_num);
|
|
|
else if(select=='2')
|
|
|
show(p,cour_name,student_num,cour_num);
|
|
|
else if(select=='3')
|
|
|
statistic(p,cour_name,student_num,cour_num);
|
|
|
else if(select=='4')
|
|
|
section(p,cour_name,student_num,cour_num);
|
|
|
else if(select=='5')
|
|
|
search(p,cour_name,student_num,cour_num);
|
|
|
else if(select=='6')
|
|
|
sort(p,cour_name,student_num,cour_num);
|
|
|
else if(select=='7')
|
|
|
update(p,cour_name,student_num,cour_num);
|
|
|
else if(select=='8')
|
|
|
fileout(p,cour_name,student_num,cour_num,semester);
|
|
|
else if(select=='9')
|
|
|
;
|
|
|
else
|
|
|
cout<<"输入有误,请重新输入: "<<endl;
|
|
|
n++;
|
|
|
}
|
|
|
cout<<"********************************************************************************"<<endl;
|
|
|
cout<<"欢迎使用,再见!"<<endl;
|
|
|
delete p;
|
|
|
delete cour_name;
|
|
|
for(i=0;i<student_num;i++)
|
|
|
delete[] all_score[i];
|
|
|
delete all_score;
|
|
|
return 0;
|
|
|
}
|
|
|
void input(student p[], string c_name[],int s_num,int c_num)
|
|
|
{
|
|
|
for(int i=0;i<s_num;i++)
|
|
|
{
|
|
|
if(i>0)
|
|
|
{
|
|
|
cout<<"《****************************************************************************》";
|
|
|
cout<<"《****************************************************************************》";
|
|
|
cout<<"《********************************请继续输入**********************************》";
|
|
|
cout<<"《****************************************************************************》";
|
|
|
cout<<"《****************************************************************************》";
|
|
|
cout<<endl;
|
|
|
}
|
|
|
cout<<setfill('=')<<setw(25);
|
|
|
cout<<"请输入第 "<<i+1<<"个学生的班级(例如:自动化1122):";
|
|
|
cin.get(p[i].classnum,SIZE);
|
|
|
cin.get();
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.get(p[i].classnum,SIZE);
|
|
|
cin.get();
|
|
|
}
|
|
|
cout<<setfill('=')<<setw(24);
|
|
|
cout<<"请输入"<<i+1<<"个学生的学号:";
|
|
|
cin.get(p[i].id,SIZE);
|
|
|
cin.get();
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.get(p[i].id,SIZE);
|
|
|
cin.get();
|
|
|
}
|
|
|
for(int k=0;k<s_num;k++)
|
|
|
{
|
|
|
if(k==i)
|
|
|
k++;
|
|
|
if(strcmp(p[k].id,p[i].id)==0)
|
|
|
{
|
|
|
cout<<setfill('=')<<setw(25);
|
|
|
cout<<"与已有学生的学号重复,请重新输入:";
|
|
|
cin.get(p[i].id,SIZE);
|
|
|
cin.get();
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.get(p[i].id,SIZE);
|
|
|
cin.get();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
cout<<setfill('=')<<setw(32);
|
|
|
cout<<"请输入其姓名:";
|
|
|
cin.getline(p[i].name,SIZE);
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.getline(p[i].name,SIZE);
|
|
|
}
|
|
|
for(int j=0;j<c_num;j++)
|
|
|
{
|
|
|
cout<<setfill('=')<<setw(24);
|
|
|
cout<<"请输入"<<c_name[j]<<"的成绩:";
|
|
|
cin>>*(p[i].score+j);
|
|
|
cin.get();
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin>>*(p[i].score+j);
|
|
|
cin.get();
|
|
|
}
|
|
|
while(*(p[i].score+j)>100||*(p[i].score+j)<0)
|
|
|
{
|
|
|
cout<<setfill('=')<<setw(25);
|
|
|
cout<<"输入有误,请输入0到100之内的数:";
|
|
|
cin>>*(p[i].score+j);
|
|
|
cin.get();
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin>>*(p[i].score+j);
|
|
|
cin.get();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
}
|
|
|
void show(student p[], string c_name[],int s_num,int c_num)
|
|
|
{
|
|
|
cout<<"********************************************************************************";
|
|
|
cout<<"科目:\t\t";
|
|
|
for(int j=0;j<c_num;j++)
|
|
|
cout<<"\t"<<c_name[j];
|
|
|
cout<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
for(int i=0;i<s_num;i++)
|
|
|
{
|
|
|
cout<<p[i].classnum<<"班:"<<p[i].name<<":";
|
|
|
if(isalpha(p[i].name[0]))
|
|
|
cout<<"\t\t";
|
|
|
else
|
|
|
cout<<"\t";
|
|
|
for(int j=0;j<c_num;j++)
|
|
|
cout<<*(p[i].score+j)<<"\t";
|
|
|
cout<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
void statistic(student p[], string c_name[],int s_num,int c_num)
|
|
|
{
|
|
|
int sum,ave,max,min,pass,trigger,cl_num;
|
|
|
double pass_rate;
|
|
|
for(int i=0;i<c_num;i++)
|
|
|
{
|
|
|
cout<<"【"<<c_name[i]<<"科目】"<<endl;
|
|
|
for(int k=0;k<s_num;k++)
|
|
|
{
|
|
|
sum=0;
|
|
|
trigger=0;
|
|
|
ave=0;
|
|
|
cl_num=0;
|
|
|
pass_rate=0;
|
|
|
pass=0;
|
|
|
max=*(p[k].score+i);
|
|
|
min=*(p[k].score+i);
|
|
|
int j;
|
|
|
for(j=0;j<k;j++)
|
|
|
if(strcmp(p[k].classnum,p[j].classnum)==0)
|
|
|
trigger=1;
|
|
|
if(trigger==1)
|
|
|
continue;
|
|
|
for(j=k;j<s_num;j++)
|
|
|
{
|
|
|
if(strcmp(p[k].classnum,p[j].classnum)==0)
|
|
|
{
|
|
|
sum+=*(p[j].score+i);
|
|
|
cl_num++;
|
|
|
if((*p[j].score+i)>max)
|
|
|
max=*(p[j].score+i);
|
|
|
if((*p[j].score+i)<min)
|
|
|
min=*(p[j].score+i);
|
|
|
if(*(p[j].score+i)>=60)
|
|
|
pass++;
|
|
|
}
|
|
|
}
|
|
|
cout<<"《"<<p[k].classnum<<"班》"<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
cout<<"总分为:"<<sum<<" ";
|
|
|
ave=sum/cl_num;
|
|
|
cout<<"平均分为:"<<ave<<" ";
|
|
|
cout<<"最高分为:"<<max<<" ";
|
|
|
cout<<"最低分为:"<<min<<" ";
|
|
|
pass_rate=(1.0*pass)/cl_num;
|
|
|
cout<<"及格率为:"<<pass_rate*100<<"%"<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
}
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
void section(student p[], string c_name[],int s_num,int c_num)
|
|
|
{
|
|
|
int s_nopass,s_60,s_70,s_80,s_90,trigger;
|
|
|
for(int i=0;i<c_num;i++)
|
|
|
{
|
|
|
cout<<"【"<<c_name[i]<<"】";
|
|
|
for(int k=0;k<s_num;k++)
|
|
|
{
|
|
|
trigger=0;
|
|
|
s_nopass=0;
|
|
|
s_60=0;
|
|
|
s_70=0;
|
|
|
s_80=0;
|
|
|
s_90=0;
|
|
|
for(int j=0;j<k;j++)
|
|
|
if(strcmp(p[k].classnum,p[j].classnum)==0)
|
|
|
trigger=1;
|
|
|
if(trigger==1)
|
|
|
continue;
|
|
|
for(int j=k;j<s_num;j++)
|
|
|
{
|
|
|
if(strcmp(p[k].classnum,p[j].classnum)==0)
|
|
|
{
|
|
|
if(*(p[j].score+i)>=90)
|
|
|
s_90++;
|
|
|
else if(*(p[j].score+i)>=80)
|
|
|
s_80++;
|
|
|
else if(*(p[j].score+i)>=70)
|
|
|
s_70++;
|
|
|
else if(*(p[j].score+i)>=60)
|
|
|
s_60++;
|
|
|
else if(*(p[j].score+i)<60)
|
|
|
s_nopass++;
|
|
|
}
|
|
|
}
|
|
|
cout<<endl;
|
|
|
cout<<"《"<<p[k].classnum<<"班》"<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
cout<<"不及格:"<<s_nopass<<" 人 ";
|
|
|
cout<<"60至70分:"<<s_60<<" 人 ";
|
|
|
cout<<"70至80分:"<<s_70<<" 人 ";
|
|
|
cout<<"80至90分:"<<s_80<<" 人 ";
|
|
|
cout<<"90至100分:"<<s_90<<" 人 "<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
}
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
void search(student p[], string c_name[],int s_num,int c_num)
|
|
|
{
|
|
|
char name_or_id[SIZE];
|
|
|
cout<<"请输入学号或名字:";
|
|
|
cin.get(name_or_id,SIZE);
|
|
|
cin.get();
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.get(name_or_id,SIZE);
|
|
|
cin.get();
|
|
|
}
|
|
|
cout<<"********************************************************************************";
|
|
|
int n=0;
|
|
|
for(int i=0;i<s_num;i++)
|
|
|
{
|
|
|
if(strcmp(p[i].name,name_or_id)==0||strcmp(p[i].id,name_or_id)==0)
|
|
|
{
|
|
|
n++;
|
|
|
cout<<"学号"<<p[i].id<<"的"<<p[i].name<<"同学的成绩如下:"<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
for(int j=0;j<c_num;j++)
|
|
|
cout<<c_name[j]<<"科目:"<<*(p[i].score+j)<<"分"<<" ";
|
|
|
cout<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
}
|
|
|
if(n==0)
|
|
|
cout<<"没有这名同学的信息。"<<endl;
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
void sort(student p[], string c_name[],int s_num,int c_num)
|
|
|
{
|
|
|
int *score_s=new int[s_num];
|
|
|
for(int i=0;i<c_num;i++)
|
|
|
{
|
|
|
for(int j=0;j<s_num;j++)
|
|
|
score_s[j]=*(p[j].score+i);
|
|
|
quicksort(score_s,0,s_num-1);
|
|
|
cout<<"【"<<c_name[i]<<"】由高到低的分数排序如下:"<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
for(int j=0;j<s_num;j++)
|
|
|
cout<<score_s[j]<<"分 ";
|
|
|
cout<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
delete[] score_s;
|
|
|
}
|
|
|
void update(student p[], string c_name[],int s_num,int c_num)
|
|
|
{
|
|
|
char name_or_id[SIZE];
|
|
|
cout<<"请输入学号或名字:";
|
|
|
cin.get(name_or_id,SIZE);
|
|
|
cin.get();
|
|
|
char ch;
|
|
|
int n=0;
|
|
|
for(int i=0;i<s_num;i++)
|
|
|
{
|
|
|
if(strcmp(p[i].name,name_or_id)==0||strcmp(p[i].id,name_or_id)==0)
|
|
|
{
|
|
|
n++;
|
|
|
cout<<"请选择要执行的操作:"<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
cout<<"(a)更新学生的基本信息 (b)更新学生的成绩"<<endl;
|
|
|
cout<<"(q)结束"<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
cout<<"输入:";
|
|
|
cin.get(ch);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
if(ch!='q')
|
|
|
{
|
|
|
if(ch=='a')
|
|
|
{
|
|
|
cout<<"请输入其班级(例如:自动化1122):";
|
|
|
cin.get(p[i].classnum,SIZE);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.get(p[i].classnum,SIZE);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
cout<<"请输入其学号:";
|
|
|
cin.get(p[i].id,SIZE);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.get(p[i].id,SIZE);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
for(int k=0;k<s_num;k++)
|
|
|
{
|
|
|
if(k==i)
|
|
|
k++;
|
|
|
if(strcmp(p[k].id,p[i].id)==0)
|
|
|
{
|
|
|
cout<<"与已有学生的学号重复,请重新输入:"<<endl;
|
|
|
cin.get(p[i].id,SIZE);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.get(p[i].id,SIZE);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
cout<<"请输入其姓名:";
|
|
|
cin.getline(p[i].name,SIZE);
|
|
|
cout<<"********************************************************************************";
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin.getline(p[i].name,SIZE);
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
}
|
|
|
else if(ch=='b')
|
|
|
{
|
|
|
for(int j=0;j<c_num;j++)
|
|
|
{
|
|
|
cout<<"请输入"<<c_name[j]<<"的成绩:";
|
|
|
cin>>*(p[i].score+j);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin>>*(p[i].score+j);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
while(*(p[i].score+j)>100||*(p[i].score+j)<0)
|
|
|
{
|
|
|
cout<<"输入有误,请输入0到100之内的数:";
|
|
|
cin>>*(p[i].score+j);
|
|
|
cin.get();
|
|
|
while(!cin.good())
|
|
|
{
|
|
|
cin.clear();
|
|
|
cin.sync();
|
|
|
cout<<"输入有误!请重新输入: ";
|
|
|
cin>>*(p[i].score+j);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
cout<<"输入有误,请重新输入:";
|
|
|
cin.get(ch);
|
|
|
cin.get();
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if(n==0)
|
|
|
{
|
|
|
cout<<"没有这名同学。"<<endl;
|
|
|
cout<<"********************************************************************************";
|
|
|
}
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
void fileout(student p[], string c_name[],int s_num,int c_num,int semester)
|
|
|
{
|
|
|
ofstream fout;
|
|
|
char fname[SIZE];
|
|
|
char _fname1[SIZE]="basic_";
|
|
|
char _fname2[SIZE]="course_";
|
|
|
char _fname3[SIZE]="student_";
|
|
|
cout<<"请输入要保存的文件名(需要加上后缀.txt):";
|
|
|
cin.getline(fname,SIZE);
|
|
|
strcat(_fname1,fname);
|
|
|
strcat(_fname2,fname);
|
|
|
strcat(_fname3,fname);
|
|
|
fout.open(fname);
|
|
|
for(int i=0;i<s_num;i++)
|
|
|
{
|
|
|
fout<<"********************************************************************************"<<endl;
|
|
|
fout<<"【个人信息】";
|
|
|
fout<<"姓名:"<<p[i].name<<" "<<"班级:"<<p[i].classnum<<"班 "<<"学号:"<<p[i].id<<endl;
|
|
|
fout<<"********************************************************************************"<<endl;
|
|
|
fout<<"【成绩】";
|
|
|
for(int j=0;j<c_num;j++)
|
|
|
fout<<c_name[j]<<":"<<*(p[i].score+j)<<" ";
|
|
|
fout<<endl;
|
|
|
fout<<"********************************************************************************"<<endl;
|
|
|
fout<<endl;
|
|
|
}
|
|
|
fout.close();
|
|
|
fout.open(_fname1);
|
|
|
fout<<s_num<<endl;
|
|
|
fout<<semester<<endl;
|
|
|
fout<<c_num<<endl;
|
|
|
fout.close();
|
|
|
fout.open(_fname2);
|
|
|
for(int i=0;i<c_num;i++)
|
|
|
{
|
|
|
fout<<c_name[i]<<endl;
|
|
|
}
|
|
|
fout.close();
|
|
|
fout.open(_fname3);
|
|
|
for(int i=0;i<s_num;i++)
|
|
|
{
|
|
|
fout<<p[i].classnum<<endl;
|
|
|
fout<<p[i].id<<endl;
|
|
|
fout<<p[i].name<<endl;
|
|
|
for(int j=0;j<c_num;j++)
|
|
|
{
|
|
|
fout<<*(p[i].score+j)<<endl;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
cout<<"已输出到"<<fname<<"中。"<<endl;
|
|
|
system("pause");
|
|
|
system("cls");
|
|
|
}
|
|
|
void quicksort(int s[],int l,int r)
|
|
|
{
|
|
|
if(l<r)
|
|
|
{
|
|
|
int i=l,j=r,x=s[l];
|
|
|
while(i<j)
|
|
|
{
|
|
|
while(i<j&&s[j]<=x)
|
|
|
j--;
|
|
|
if(i<j)
|
|
|
s[i++]=s[j];
|
|
|
while(i<j&&s[i]>=x)
|
|
|
i++;
|
|
|
if(i<j)
|
|
|
s[j--]=s[i];
|
|
|
}
|
|
|
s[i]=x;
|
|
|
quicksort(s,l,i-1);
|
|
|
quicksort(s,i+1,r);
|
|
|
}
|
|
|
}
|
|
|
|