#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>
//#include<conio.h>
//#include<stdlib.h>
#include<ctype.h>
#include<cstring>
using namespace std;
class people{
protected:
char name[20];
char sex[5];
int number;
public:
people()
{
strcpy(name," ");
strcpy(sex," ");
number=0;
}
virtual void num()=0;
};
class student:public people
{
private:
int score[3];
int total;
int average;
public:
static int n;
student();
/*void add();
void output();
void find();
void modify();
void deleted();
void sort();
void save();
void load();*/
virtual void num() {}
student & operator=(const student &T);
friend istream &operator>>(istream& scin, student& s1);
friend ostream &operator<<(ostream& scout, student& s2);
~student() {}
friend class teacher;
};
int student::n=0;
class teacher:public people{
private:
string tutor;
public:
teacher():people()
{
cout<<"**********請輸入操作老師的姓名:***********"<<endl;
cin>>tutor;
getchar();
}
virtual void num()
{
cout<<"電話號碼:"<<endl;
cin>>number;
getchar();
}
void add();
void output();
void find();
void modify();
void deleted();
void sort();
void save();
void load();
~teacher() {}
};
student stu[100];
//int n=0;
student::student():people()
{
//strcpy(name," ");
//strcpy(sex," ");
for(int i;i<3;i++)
score[i]=0;
total=0;
average=0;
}
void teacher::add()
{
char flag='Y';
while(toupper(flag)=='Y')
{
cin>>stu[student::n];
student::n++;
cout<<"要繼續添加嗎?(y/n)"<<endl;
cin>>flag;
if(toupper(flag)!='Y')
{
if(toupper(flag)=='N')
break;
else
{
cout<<"錯誤,請重新輸入:"<<endl;
cin>>flag;
}
}
}
}
void teacher::output()
{
if(student::n!=0)
cout<<"-------------------------------"<<endl;
cout<<"number\t"<<"name\t"<<"sex\t"<<"math\t"<<"c++\t"<<"English\t"<<"total\t"<<"average"<<endl;
cout<<"----------------------------------"<<endl;
for(int t=0;t<student::n;t++)
{
cout<<stu[t];
}
}
void teacher::find()
{
int f3=0;
char n1[20];
student temp;
cout<<"請輸入你要查找人的姓名:"<<endl;
cin>>n1;
for(int j=0;j<student::n;j++)
{
if(strcmp(stu[j].name,n1)==0)
{
temp=stu[j];
f3=1;
}
}
if(f3==0)
cout<<"對不起沒有你要查找的學生的成績。"<<endl;
else{
cout<<"------------------------------"<<endl;
cout<<"number\t"<<"name\t"<<"sex\t"<<"math\t"<<"c++\t"<<"English\t"<<"total\t"<<"average"<<endl;
cout<<"-------------------------------"<<endl;
cout<<" "<<temp.number<<"\t"<<temp.name<<"\t"<<temp.sex<<"\t";
for(int i=0;i<3;i++)
{
cout<<temp.score[i];
cout<<"\t";
}
}
}
void teacher::modify()
{
int f4=0;
int t;
char n2[50];
cout<<"輸入你要修改的人的姓名:"<<endl;
cin>>n2;
for(int j=0;j<student::n;j++)
{
if(strcmp(stu[j].name,n2)==0)
{
t=j;
f4=1;
}
}
if(f4==0)
cout<<"對不起,沒有你要修改的學生成績。"<<endl;
else
{
cout<<"請輸入學號:"<<endl;
cin>>stu[t].number;
cout<<"姓名:"<<endl;
cin>>stu[t].name;
cout<<"性別:"<<endl;
cin>>stu[t].sex;
cout<<"高等數學成績:"<<endl;
cin>>stu[t].score[0];
cout<<"c++成績:"<<endl;
cin>>stu[t].score[1];
cout<<"英語成績:"<<endl;
cin>>stu[t].score[2];
stu[t].total=0;
for(int i=0;i<3;i++)
stu[t].total+=stu[t].score[i];
stu[t].average=stu[t].total/3;
cout<<"修改成功!"<<endl;
}
}
void teacher::deleted()
{
char n3[20];
bool f5=0;
char c;
do{
cout<<"請輸入您要洗掉的學生的姓名:"<<endl;
cin>>n3;
for(int i=0;i<student::n;i++)
{
if(strcmp(n3,stu[i].name)==0)
{
f5=1;
student::n--;
do{
stu[i]=stu[i+1];
i++;
}while(i<=student::n);
}
}
if(f5==0)
cout<<"您要洗掉的物件本來就不存在!"<<endl;
cout<<"要繼續洗掉嗎?(y/n)"<<endl;
cin>>c;
if(toupper(c)!='Y'||toupper(c)!='N')
{
cout<<"輸入指令錯誤!請重新輸入Y或N:"<<endl;
cin>>c;
}
}while(toupper(c)=='Y');
}
void teacher::sort()
{
int i,j,k;
student s3;
for(i=0;i<student::n-1;i++)
{
k=i;
for(j=i+1;j<student::n;j++)
{
if(stu[j].average>stu[i].average)
k=j;
if(k!=i)
{
s3=stu[i];
stu[i]=stu[k];
stu[k]=s3;
}
}
}
cout<<"\n\n排序成功!\n\n"<<endl;
cout<<"排序結果如下:"<<endl;
for(int p=0;p<student::n;p++)
cout<<stu[p]<<"\t";
}
void teacher::save()
{
char filename1[20];
cout<<"請輸入檔案名:"<<endl;
cin>>filename1;
ofstream fout(filename1,ios::app);
if(!fout)
cerr<<"檔案不能打開!"<<endl;
else
{
for(int i=0;i<student::n;i++)
fout<<" "<<stu[i].name<<" "<<stu[i].sex<<" "<<stu[i].number<<" "<<stu[i].score[0]<<" "<<stu[i].score[1]<<" "<<stu[i].score[2]<<" "<<stu[i].total<<" "<<stu[i].average<<endl;
// for(int j=0;j<3;j++)
{
// cout<<stu[i].score[j];
// cout<<" ";
// }
// cout<<stu[i].total<<" "<<stu[i].average<<endl;
cout<<"保存成功!"<<endl;
fout.close();
}
}
}
void teacher::load()
{
char filename2[20];
cout<<"請輸入你要讀取的檔案名:"<<endl;
cin>>filename2;
ifstream fin(filename2,ios::in);
if(!fin)
cerr<<"檔案打不開!"<<endl;
else
{
for(int i=0;;i++,student::n=i-1)
{
if(fin.eof())
break;
fin>>stu[i].name>>stu[i].sex>>stu[i].number;
for(int m;m<3;m++)
fin>>stu[i].score[m];
fin>>stu[i].total>>stu[i].average;
}
cout<<"檔案讀取成功!"<<endl;
}
fin.close();
}
student & student::operator=(const student &T)
{
strcpy(name,T.name);
strcpy(sex,T.sex);
number=T.number;
for(int i=0;i<3;i++)
score[i]=T.score[i];
total=T.total;
average=T.average;
return (*this);
}
ostream & operator<<(ostream &scout,student & s2)
{
scout<<left<<"\t"<<s2.number<<setw(10)<<s2.name<<setw(8)<<s2.sex<<setw(8)<<s2.score[0]<<setw(8)<<s2.score[1]<<setw(8)<<s2.score[2]<<setw(8)<<s2.total<<setw(8)<<s2.average<<endl;
return scout;
}
istream &operator >>(istream &scin,student &s1){
cout<<"學號:";
scin>>s1.number;
cout<<"姓名:"<<endl;
scin>>s1.name;
cout<<"性別:"<<endl;
scin>>s1.sex;
cout<<"高等數學成績:"<<endl;
scin>>s1.score[0];
cout<<"c++成績"<<endl;
scin>>s1.score[1];
cout<<"英語成績:"<<endl;
scin>>s1.score[2];
s1.total=0;
for(int i=0;i<3;i++)
s1.total+=s1.score[i];
s1.average=s1.total/3;
return scin;
}
void menu()
{
cout<<"\n\n\n********************學生成績管理系統主選單*******************"<<endl;
cout<<"\n\n\n1.添加學生資訊"<<endl;
cout<<"2.輸出學生資訊"<<endl;
cout<<"3.查找學生資訊"<<endl;
cout<<"4.修改學生資訊"<<endl;
cout<<"5.洗掉學生資訊"<<endl;
cout<<"6.學生資訊排序"<<endl;
cout<<"7.保存資料"<<endl;
cout<<"8.讀出資料"<<endl;
cout<<"9.退出系統"<<endl;
cout<<"\n\n請選擇(1~9)并按Enter鍵確認:";
}
int main()
{
int choose;
teacher s;
people *p=&s;
p->num();
do
{
menu();
cin>>choose;
switch(choose)
{
case 1:s.add();
break;
case 2:s.output();
break;
case 3:s.find();
break;
case 4:s.modify();
break;
case 5:s.deleted();
break;
case 6:s.sort();
break;
case 7:s.save();
break;
case 8:s.load();break;
default:break;
}
}while(choose>=1&&choose<=9);
return 0;
}
有沒有哪位大佬幫忙看一下這個代碼的第62行為什么只能輸入10個數字呀?
弄了一上午沒有找出原因來啊!!!
謝謝大佬們!!!!!!
uj5u.com熱心網友回復:
C語言中int的取值范圍為:-2147483648 ~ 2147483647你定義的int 型別
uj5u.com熱心網友回復:
謝謝大佬,那如何去修改啊
,能夠輸出11個數字的(如果不用陣列的話)
uj5u.com熱心網友回復:
為什么不能用陣列? 一般用陣列的, 用字串保存,定義:char str[12]; 用get(str);就可以輸入了uj5u.com熱心網友回復:
如果用陣列的話,那學生類的學號輸出形式需要變動了,套用兩個回圈,程式顯得麻煩了比如小面這一行:
for(int i=0;i<student::n;i++)
fout<<" "<<stu[i].name<<" "<<stu[i].sex<<" "<<stu[i].number<<" "<<stu[i].score[0]<<" "<<stu[i].score[1]<<" "<<stu[i].score[2]<<" "<<stu[i].total<<" "<<stu[i].average<<endl;
uj5u.com熱心網友回復:
大佬,我試一哈uj5u.com熱心網友回復:
大佬,可以了,編譯通過,謝謝你啦,幫我解決了一個大問題。謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41208.html
標籤:C++ 語言
下一篇:關于C++解決商人模型 (深搜)
