📄 scoredatabase.cpp
字号:
#include <fstream.h>
#include <string.h>
#include <iomanip.h>
#include "ScoreDatabase.h"
ScoreDatabase::ScoreDatabase() //构造函数,将score.txt读到score[]中
{
Score s;
top=-1;
fstream file("score.txt",ios::in);
while(1)
{
file.read((char *)&s,sizeof(s));
if (!file) break;
top++;
score[top]=s;
}
file.close();
}
void ScoreDatabase::clear() //删除所有学生信息
{
top=-1;
}
int ScoreDatabase::addScore(char *n,char *na,int c,int e,int d,int m,int v) //添加学生成绩时先查找学生是否存在
{
Score *p=query(n);
if(p==NULL)
{
top++;
score[top].addScore(n,na,c,e,d,m,v);
return 1;
}
else
{
cout<<"该学号已存在!请另取学号"<<endl;
return 0;
}
}
Score *ScoreDatabase::query(char *n) //按学号查找
{
for(int i=0;i<=top;i++)
if(strcmp(n,score[i].Stud::getno())==0 && score[i].gettam()==0)
return &score[i];
return NULL;
}
Score *ScoreDatabase::rquery(char *na) //按姓名查找
{
for(int i=0;i<=top;i++)
if(strcmp(na,score[i].Stud::getname())==0 && score[i].gettam()==0)
return &score[i];
return NULL;
}
void ScoreDatabase::disp() //输出所有学生成绩信息
{
cout<<endl;
cout<<setw(15)<<"****学号"<<setw(10)<<"姓名"<<setw(10)<<"C语言"<<setw(10)<<"英语"<<setw(10)<<"数据库"<<setw(10)<<"多媒体"<<setw(5)<<"VC"<<setw(10)<<"总分";
for (int i=0;i<=top;i++)
{
if(score[i].gettam()==0)
score[i].disp();
}
}
void ScoreDatabase::paixu() //按总分排序
{
Score s;
for(int i=0;i<=top-1;i++)
for(int j=0;j<=top-i-1;j++)
if(score[j].getTotalScore()<score[j+1].getTotalScore())
{
s=score[j+1];
score[j+1]=score[j];
score[j]=s;
}
cout<<"\n 排序成功!"<<endl;
}
void ScoreDatabase::Scoredata() //学生成绩库维护
{
int choice=1;
int choice1=1;
int choice2=1;
char c;
char rno[10];
char rname[20];
int rCScore;
int rEnglishScore;
int rDatabaseScore;
int rMediaScore;
int rVcScore;
Score *r;
while(choice!=0) //选择需要的操作
{
cout<<"\n学生成绩管理系统 1:新增 2:更改 3:删除 4:查找 5:显示 6:全删 7:排序 0:退出 =>";
cin>>choice;
switch (choice)
{
case 1:
cout<<" 输入学生学号:";
cin>>rno;
cout<<" 输入学生姓名:";
cin>>rname;
cout<<" 输入C语言成绩:";
cin>>rCScore;
cout<<" 输入英语成绩:";
cin>>rEnglishScore;
cout<<"输入数据库成绩:";
cin>>rDatabaseScore;
cout<<"输入多媒体成绩:";
cin>>rMediaScore;
cout<<" 输入VC成绩:";
cin>>rVcScore;
addScore(rno,rname,rCScore,rEnglishScore,rDatabaseScore,rMediaScore,rVcScore);
break;
case 2:
cout << " 输入学生学号:";
cin >> rno;
r=query(rno);
if (r==NULL)
{
cout << " 该学生不存在" << endl;
break;
}
while(choice1!=0) //选择要更改的内容
{
cout<<"想更改的内容:1:C语言成绩 2:英语成绩 3:数据库成绩 4:多媒体成绩 5:VC成绩 0:退出 =>";
cin>>choice1;
switch(choice1)
{
case 1:
cout << " 输入新的C语言成绩:";
cin >> rCScore;
r->changeCScore(rCScore);
break;
case 2:
cout << " 输入新的英语成绩:";
cin >> rEnglishScore;
r->changeEnglishScore(rEnglishScore);
break;
case 3:
cout << " 输入新的数据库成绩:";
cin >> rDatabaseScore;
r->changeDatabaseScore(rDatabaseScore);
break;
case 4:
cout << " 输入新的多媒体成绩:";
cin >> rMediaScore;
r->changeMediaScore(rMediaScore);
break;
case 5:
cout << " 输入新的VC成绩:";
cin >> rVcScore;
r->changeVcScore(rVcScore);
break;
}
}
break;
case 3:
cout << " 输入学生学号:";
cin >>rno;
r=query(rno);
if (r==NULL)
{
cout << " 该学生不存在" << endl;
break;
}
cout<<"是否真的删除? y/n ";
cin>>c;
if(c=='y')
{
r->delScore();
cout<<"\n"<<setw(10)<<"删除成功!"<<endl;
break;
}
else
break;
case 4:
cout<<"1:按学号查找 2:按姓名查找 =>";
cin>>choice2;
switch (choice2)
{
case 1:
cout << "\n 输入学生学号:";
cin >> rno;
r=query(rno);
break;
case 2:
cout<< "\n 输入学生姓名:";
cin >> rname;
r=rquery(rname);
break;
}
if (r==NULL)
{
cout << " 该学生不存在" << endl;
break;
}
r->disp();
break;
case 5:
disp();
break;
case 6:
cout<<"是否真的全部删除? y/n ";
cin>>c;
if(c=='y')
{
clear();
cout<<"\n"<<setw(10)<<"删除成功!"<<endl;
break;
}
else
break;
case 7:
paixu();
break;
}
}
}
ScoreDatabase::~ScoreDatabase() //析构函数,将score[]写入score.txt文件中
{
fstream file("score.txt",ios::out);
for(int i=0;i<=top;i++)
if(score[i].gettam()==0)
file.write((char *)&score[i],sizeof(score[i]));
file.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -