實驗要求:輸入30個學生的學號、姓名和5門課程的成績,計算總分並按照總分排出名次,最後按照學號順序列印成績單, 並把成績單輸出為excel檔案。
txt資料:
2015020981 甲 90 89 99 88 79
2015020986 戌 97 87 97 60 79
2015020970 鵬 97 88 77 80 79
2015020983 丙 92 89 70 88 79
2015020984 丁 93 84 96 36 77
2015020982 乙 61 88 99 84 70
2015020985 戊 94 81 94 82 75
2015020989 三 93 89 99 88 50
2015020994 八 91 88 49 84 70
2015020987 一 99 89 99 88 60
2015020988 二 91 58 69 84 70
2015020969 將 94 51 94 82 75
2015020960 孫 91 88 99 84 99
2015020990 四 93 84 96 86 77
2015020995 九 92 50 99 88 79
2015020992 六 97 87 97 80 79
2015020993 七 90 69 99 88 79
2015020997 張 74 81 54 82 75
2015020996 十 63 84 96 86 77
2015020965 鄭 90 88 99 88 79
2015020998 王 97 87 100 80 79
2015020999 李 40 89 99 88 79
2015020963 劉 94 89 94 82 75
2015020961 趙 92 89 99 88 79
2015020962 嶽 93 84 96 86 100
2015020966 林 51 88 99 84 70
2015020964 宋 97 87 47 80 79
2015020968 宗 93 84 96 86 57
2015020967 任 92 89 99 70 79
2015020991 五 94 81 44 82 75
原始碼:
#include<iostream>
#include<cstdio>
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;
struct Student
{
int id;
string name;
int score[5];
int total;
int rank;
public:
friend ostream & operator<<(ostream & out, const Student &stu);
friend istream & operator>>(istream & in, Student &stu);
};
ostream & operator <<(ostream & out, const Student &stu)
{
out << stu.id<<"\t"<<stu.name << "\t" << stu.score[0]<<"\t"<< stu.score[1]
<<"\t" << stu.score[2]<<"\t"<< stu.score[3]<<"\t" << stu.score[4] <<"\t"
<<stu.total<<"\t"<<stu.rank<<endl ;
return out;
}
istream & operator >>(istream & in, Student &stu)
{
in>>stu.id>>stu.name >> stu.score[0]>> stu.score[1]>> stu.score[2]
>> stu.score[3] >>stu.score[4];
return in;
}
int main()
{
string filename1;
int num = 0;
Student stu[100];
int ReadTextFile(string fname, Student stu[]);//從檔案中讀取TXT資料
void PrintScreen(Student stu[], int n);//列印資料在螢幕中
void Total(Student stu[],int n);//計算總分
void Rank(Student stu[], int n);//計算排名
void Sort(Student stu[], int n);//按學號排序
void WExcel(Student stu[], int n);//在Excel中輸出
filename1 = "c:\\score.txt";
num=ReadTextFile(filename1, stu);
Total(stu,num);
Rank(stu, num);
Sort(stu, num);
WExcel(stu, num);
PrintScreen(stu, num);
}
//從檔案中讀取TXT資料
int ReadTextFile(string fname, Student stu[])
{
int i = 0;
ifstream fin(fname);
if (!fin)
{
cout << "source text file error\n";
return 0;
}
fin >> stu[i];
while (!fin.eof())
{
i++;
fin >> stu[i];
}
fin.close();
return i;
}
//列印資料在螢幕中
void PrintScreen(Student stu[], int n)
{
for (int i = 0; i <n; i++)
cout << stu[i];
}
void Total(Student stu[],int n)
{
for (int i=0; i < n; i++)
{
stu[i].total= stu[i].score[0] + stu[i].score[1] + stu[i].score[2]
+ stu[i].score[3] + stu[i].score[4];
}
}
//計算總分
void Rank(Student stu[], int n)
{
int temp,i,j;
for ( i = 0; i < n; i++)
{
temp = 0;
{for (j = 0; j < n; j++)
if (stu[i].total<=stu[j].total)
temp++;
stu[i].rank = temp;
}
}
}
//按學號排序
void Sort(Student stu[],int n)
{
int i, j;
Student temp;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if (stu[i].id>stu[j].id)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
//在Excel中輸出
void WExcel(Student stu[], int n)
{
ofstream oFile;
oFile.open("1.csv", ios::out | ios::trunc);
oFile << "學號"<<"," << "姓名" << "," << "成績1" << "," << "成績2"
<< ","<<"成績3"<<"," << "成績4"<<" ,"<< "成績5"<<","
<<"總分"<<","<<"排名"<<endl;
for (int i = 0; i < n; i++)
{
oFile << stu[i].id << "," << stu[i].name << "," << stu[i].score[0]
<< "," << stu[i].score[1]<< "," << stu[i].score[2] << ","
<< stu[i].score[3] << "," << stu[i].score[4]<<","<<stu[i].total
<<","<<stu[i].rank<<endl;
}
oFile.close();
}