?? 學生信息管理系統.cpp
字號:
#include "學生信息管理系統.h"
#include <fstream.h>
#include <string.h>
#include <iomanip.h>
ifstream input_file;
ofstream output_file;
char fdepA[30]; //記錄第二專業名
char fdepB[30];
char fdepC[30];
long num1[20]; //修改資料時要用到的判斷數據合法性數據
int temp=0;
void Base::set() //設置學生基本資料
{
input_file>>num>>name>>sex>>age>>mdep>>addr;
}
void Base::show() //顯示并輸出學生基本資料到文件
{
cout<<setw(10)<<num<<setw(10)<<name<<setw(3)<<sex<<setw(5)<<age<<setw(10)<<addr<<endl;
output_file<<setw(10)<<num<<setw(10)<<name<<setw(3)<<sex<<setw(5)<<age<<setw(10)<<addr<<endl;
}
long Base::get_num() //獲取學號
{
return num;
}
int Base::modifyB(long num1) //修改學生基本資料
{
if(num==num1){
temp++;
cout<<"請輸入該學生的名字,性別,年齡,地址:\n";
cin>>name>>sex>>age>>addr;}
if(temp==0) return 1;
else return 0;
}
FirstA::FirstA() //構造函數,實現成績初始化為0
{
for(int i=0;i<6;i++)
Mscore[i]=0;
for(i=0;i<5;i++)
Fscore[i]=0;
}
void FirstA::set() //屏蔽基本資料設置函數
{
}
int FirstA::modifyB(long) //屏蔽基本資料修改函數
{
return 0;
}
void FirstA::set_ms() //用文件流讀取設置主修成績
{
long num1;
int Mscore1[6];
input_file>>num1;
if(num1==num){
strcpy(fdepA,mdep);
for(int i=0;i<6;i++){
input_file>>Mscore[i];}
}
else for(int i=0;i<6;i++){
input_file>>Mscore1[i];}
}
void FirstA::set_fs() //用文件流讀取設置第二專業成績
{
long num1;
int Fscore1[5];
char fdepA1[30];
input_file>>num1;
input_file>>fdepA1;
if(num1==num){
for(int i=0;i<5;i++){
input_file>>Fscore[i];}
}
else for(int i=0;i<5;i++){
input_file>>Fscore1[i];}
}
void FirstA::show_ms() //顯示并用文件流輸出主修成績
{
for(int i=0;i<6;i++){
cout<<setw(5)<<Mscore[i];
output_file<<setw(5)<<Mscore[i];}
cout<<endl;
output_file<<endl;
}
void FirstA::show_fs() //顯示并用文件流輸出第二專業成績
{
for(int i=0;i<5;i++){
cout<<setw(5)<<Fscore[i];
output_file<<setw(5)<<Fscore[i];}
cout<<endl;
output_file<<endl;
}
void FirstA::show_good() //顯示并用文件流輸出成績優秀學生
{
int m=0,n=0;
for(int i=0;i<6;i++){
if(Mscore[i]>=85) m++;}
for(i=0;i<6;i++){
if(Mscore[i]>=70) n++;}
if(m>=3&&n==6){
show();
cout<<setw(10)<<mdep;
output_file<<setw(10)<<mdep;
show_ms();}
}
int FirstA::Mpass() //判斷是否主修系需要補考函數算法
{
int m=0;
for(int i=0;i<6;i++){
if(Mscore[i]<60) m++;}
if(m==0) return 1;
else return 0;
}
void FirstA::show_Mfail() //顯示并用文件流輸出主修系需要補考學生
{
if(!Mpass()){
if(Mscore[0]!=0){
show();
cout<<setw(10)<<mdep;
output_file<<setw(10)<<mdep;
show_ms();}
}
}
int FirstA::Fpass() //判斷是否第二專業需要補考
{
int m=0;
for(int i=0;i<5;i++){
if(Fscore[i]<60) m++;}
if(m==0) return 1; else return 0;
}
void FirstA::show_Ffail() //顯示并用文件流輸出第二專業需要補考學生
{
if(!Fpass()){
if(Fscore[0]!=0){
show();
cout<<setw(10)<<fdepA;
output_file<<setw(10)<<fdepA;
show_fs();}
}
}
void FirstA::modify_M(long& num1,long num) //修改主修成績
{
if(num==num1&&num1==get_num()){
temp++;
cout<<"請輸入該學生的成績(6門):\n";
for(int i=0;i<6;i++){
cin>>Mscore[i];}
}
}
void FirstA::modify_F(long& num1,long num) //修改第二專業成績
{
if(num==num1&&num1==get_num()){
temp++;
cout<<"請輸入該學生的成績(5門):\n";
for(int i=0;i<5;i++){
cin>>Fscore[i];}
}
}
FirstB::FirstB() //類FirstB函數功能與FirstA相同
{
for(int i=0;i<7;i++)
Mscore[i]=0;
for(i=0;i<4;i++)
Fscore[i]=0;
}
void FirstB::set()
{
}
int FirstB::modifyB(long)
{
return 0;
}
void FirstB::set_ms()
{
long num1;
int Mscore1[7];
input_file>>num1;
if(num1==num){
strcpy(fdepB,mdep);
for(int i=0;i<7;i++){
input_file>>Mscore[i];}
}
else for(int i=0;i<7;i++){
input_file>>Mscore1[i];}
}
void FirstB::set_fs()
{
long num1;
int Fscore1[4];
char fdepB1[30];
input_file>>num1;
input_file>>fdepB1;
if(num1==num){
for(int i=0;i<4;i++){
input_file>>Fscore[i];}
}
else for(int i=0;i<4;i++){
input_file>>Fscore1[i];}
}
void FirstB::show_ms()
{
for(int i=0;i<7;i++){
cout<<setw(5)<<Mscore[i];
output_file<<setw(5)<<Mscore[i];}
cout<<endl;
output_file<<endl;
}
void FirstB::show_fs()
{
for(int i=0;i<4;i++){
cout<<setw(5)<<Fscore[i];
output_file<<setw(5)<<Fscore[i];}
cout<<endl;
output_file<<endl;
}
void FirstB::show_good()
{
int m=0,n=0;
for(int i=0;i<7;i++){
if(Mscore[i]>=85) m++;}
for(i=0;i<7;i++){
if(Mscore[i]>=70) n++;}
if(m>=3&&n==7){
show();
cout<<setw(10)<<mdep;
output_file<<setw(10)<<mdep;
show_ms();}
}
int FirstB::Mpass()
{
int m=0;
for(int i=0;i<7;i++){
if(Mscore[i]<60) m++;}
if(m==0) return 1;
else return 0;
}
void FirstB::show_Mfail()
{
if(!Mpass()){
if(Mscore[0]!=0){
show();
cout<<setw(10)<<mdep;
output_file<<setw(10)<<mdep;
show_ms();}
}
}
int FirstB::Fpass()
{
int m=0;
for(int i=0;i<4;i++){
if(Fscore[i]<60) m++;}
if(m==0) return 1; else return 0;
}
void FirstB::show_Ffail()
{
if(!Fpass()){
if(Fscore[0]!=0){
show();
cout<<setw(10)<<fdepB;
output_file<<setw(10)<<fdepB;
show_fs();}
}
}
void FirstB::modify_M(long& num1,long num)
{
if(num==num1&&num1==get_num()){
temp++;
cout<<"請輸入該學生的成績(7門):\n";
for(int i=0;i<7;i++){
cin>>Mscore[i];}
}
}
void FirstB::modify_F(long& num1,long num)
{
if(num==num1&&num1==get_num()){
temp++;
cout<<"請輸入該學生的成績(4門):\n";
for(int i=0;i<4;i++){
cin>>Fscore[i];}
}
}
FirstC::FirstC() //類FirstC函數功能與FirstA相同
{
for(int i=0;i<5;i++)
Mscore[i]=0;
for(i=0;i<3;i++)
Fscore[i]=0;
}
void FirstC::set()
{
}
int FirstC::modifyB(long)
{
return 0;
}
void FirstC::set_ms()
{
long num1;
int Mscore1[5];
input_file>>num1;
if(num1==num){
strcpy(fdepC,mdep);
for(int i=0;i<5;i++){
input_file>>Mscore[i];}
}
else for(int i=0;i<5;i++){
input_file>>Mscore1[i];}
}
void FirstC::set_fs()
{
long num1;
int Fscore1[3];
char fdepC1[30];
input_file>>num1;
input_file>>fdepC1;
if(num1==num){
for(int i=0;i<3;i++){
input_file>>Fscore[i];}
}
else for(int i=0;i<3;i++){
input_file>>Fscore1[i];}
}
void FirstC::show_ms()
{
for(int i=0;i<5;i++){
cout<<setw(5)<<Mscore[i];
output_file<<setw(5)<<Mscore[i];}
cout<<endl;
output_file<<endl;
}
void FirstC::show_fs()
{
for(int i=0;i<3;i++){
cout<<setw(5)<<Fscore[i];
output_file<<setw(5)<<Fscore[i];}
cout<<endl;
output_file<<endl;
}
void FirstC::show_good()
{
int m=0,n=0;
for(int i=0;i<5;i++){
if(Mscore[i]>=85) m++;}
for(i=0;i<5;i++){
if(Mscore[i]>=70) n++;}
if(m>=3&&n==5){
show();
cout<<setw(10)<<mdep;
output_file<<setw(10)<<mdep;
show_ms();}
}
int FirstC::Mpass()
{
int m=0;
for(int i=0;i<5;i++){
if(Mscore[i]<60) m++;}
if(m==0) return 1;
else return 0;
}
void FirstC::show_Mfail()
{
if(!Mpass()){
if(Mscore[0]!=0){
show();
cout<<setw(10)<<mdep;
output_file<<setw(10)<<mdep;
show_ms();}
}
}
int FirstC::Fpass()
{
int m=0;
for(int i=0;i<3;i++){
if(Fscore[i]<60) m++;}
if(m==0) return 1; else return 0;
}
void FirstC::show_Ffail()
{
if(!Fpass()){
if(Fscore[0]!=0){
show();
cout<<setw(10)<<fdepC;
output_file<<setw(10)<<fdepC;
show_fs();}
}
}
void FirstC::modify_M(long& num1,long num)
{
if(num==num1&&num1==get_num()){
temp++;
cout<<"請輸入該學生的成績(5門):\n";
for(int i=0;i<5;i++){
cin>>Mscore[i];}
}
}
void FirstC::modify_F(long& num1,long num)
{
if(num==num1&&num1==get_num()){
temp++;
cout<<"請輸入該學生的成績(3門):\n";
for(int i=0;i<3;i++){
cin>>Fscore[i];}
}
}
void Manag::set_ms() //屏蔽設置主修成績函數
{
}
void Manag::set_fs() //屏蔽設置第二專業成績函數
{
}
int Manag::modify_M(long&,long) //屏蔽修改主修成績函數
{
return 0;
}
int Manag::modify_F(long&,long) //屏蔽修改第二專業成績函數
{
return 0;
}
void Manag::show_AB() //顯示并用文件流輸出獲得主修學位A跟第二學位B雙學位學生
{
if(FirstA::Mpass()&&FirstB::Fpass())
{
show();
cout<<setw(10)<<mdep;
output_file<<setw(10)<<mdep;
FirstA::show_ms();
cout<<setw(10)<<fdepB;
output_file<<setw(10)<<fdepB;
FirstB::show_fs();
}
}
void Manag::show_AC() //顯示并用文件流輸出獲得主修學位A跟第二學位C雙學位學生
{
if(FirstA::Mpass()&&FirstC::Fpass())
{
show();
cout<<setw(10)<<mdep;
output_file<<setw(10)<<mdep;
FirstA::show_ms();
cout<<setw(10)<<fdepC;
output_file<<setw(10)<<fdepC;
FirstC::show_fs();
}
}
void Manag::show_BA() //顯示并用文件流輸出獲得主修學位B跟第二學位A雙學位學生
{
if(FirstB::Mpass()&&FirstA::Fpass())
{