c++编程问题
用c++建立班级的学生成绩库,要求就有一下功能:1按学号查询成绩2增加学生及成绩3删除学生及成绩...
用c++建立班级的学生成绩库,要求就有一下功能:
1 按学号查询成绩
2 增加学生及成绩
3 删除学生及成绩 展开
1 按学号查询成绩
2 增加学生及成绩
3 删除学生及成绩 展开
3个回答
展开全部
*为了简便我就不拘泥C++的代码先声明后定义的风格*/
/*但具体实现完全是使用面向对象的C++编程思想,编译运行下就知道了 */
#include <iostream>
#include <string>
#include <list>
using namespace std;
void clearcin() //清空输入缓冲区
{ cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
/**学生类,包含了学生的构造(输入),单个学生的显示,以及学生排序的方法**/
class student
{ int num;
string name;
float numb[3];
float ave;
public:
student()
{ int j;
float sum=0;
cout<<"\n\t请输入学员的信息\n";
cout<<"\n请输入学号: "; cin>>num;
cout<<"\n请输入姓名: "; cin>>name;
clearcin();
for( j=0; j<3; j++ )
{ cout<<"\n科目 "<<j+1<<" 分数: ";
cin>>numb[j];
sum+=numb[j];
} ave=sum/3;
}
void display()
{ cout<<"学号 "<<num<<endl;
cout<<"姓名 "<<name<<endl;
for(int j=0; j<3; j++ ){
cout<<"该学生第"<<j+1<<" 科成绩:"<<numb[j]<<endl;
}
cout<<"/n三科平均成绩:"<<ave<<endl;
}
int getnum(){return num; }
/*下面俩函数提供给list排序用(按成绩排序*/
bool operator > (student B){ if( ave>B.ave ) return true; return false; }
bool operator < (student B){ if( ave<B.ave ) return true; return false; }
};
/***教室类,包含了学生列表、插入删除学生、安学号排列学生、等操作***/
/*整个程序的执行几乎都在教室的构造函数中完成*/
class classroom
{ list<student> classr;
public:
classroom() //教室的构造函数
{ int choose;
int flag=1;
bool foo=true;
while(foo)
{ system("cls");
cout<<endl<<"1 - 输入 2 - 插入 3 - 删除 4 - 显示 5 - 排序 0 - 退出"<<endl;
cin>>choose;
switch(choose)
{ case 1:
while(flag==1)
{ insert(); char c;
cout<<"是否继续输入:(y/n)"; cin>>c;
if( c=='n' || c =='N'){ flag=0; break; } //这条语句照原版的方法,我自己不喜欢
continue;
}
break;
case 2:
insert();
break;
case 3:
cout<<"\n请输入要删除的学生的学号: "<<endl;
int n; cin>>n;
del(n);
break;
case 4:
display();
cout<<"------------------------------"<<endl;
system("pause");
break;
case 5:
classr.sort();
break;
case 0:
cout<<"谢谢使用"; //原版语句写错了,没结束整体while循环,仅结束当前switch
foo=false; //没退出程序,为了正常退出,引入了foo给while
break;
}
}
}
void insert() //插入
{ classr.insert( classr.begin(),student());
clearcin();
}
void display()
{ list<student>::iterator it; int cnt=1;
for(it=classr.begin(); it!=classr.end(); ++it) //用list中的迭代器来遍历
{ cout<<"\n学生 "<<cnt++<<"信息\n";
it->display();
}
}
bool del(int num)
{ list<student>::iterator it;
for(it=classr.begin(); it!=classr.end(); ++it)
{ if ( it->getnum()==num ){ classr.erase(it); return true; } }
}
};
////////////////////////////////// main() /////////////////////////////////
int main ()
{ classroom A;
return 0;
}
////这里,没有写出查询功能,你自己试一试查询成绩这个函数,很简单类似删除成绩的方法,只是把erase(it)替换成为display...哈哈,自己看看吧!
/*但具体实现完全是使用面向对象的C++编程思想,编译运行下就知道了 */
#include <iostream>
#include <string>
#include <list>
using namespace std;
void clearcin() //清空输入缓冲区
{ cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
/**学生类,包含了学生的构造(输入),单个学生的显示,以及学生排序的方法**/
class student
{ int num;
string name;
float numb[3];
float ave;
public:
student()
{ int j;
float sum=0;
cout<<"\n\t请输入学员的信息\n";
cout<<"\n请输入学号: "; cin>>num;
cout<<"\n请输入姓名: "; cin>>name;
clearcin();
for( j=0; j<3; j++ )
{ cout<<"\n科目 "<<j+1<<" 分数: ";
cin>>numb[j];
sum+=numb[j];
} ave=sum/3;
}
void display()
{ cout<<"学号 "<<num<<endl;
cout<<"姓名 "<<name<<endl;
for(int j=0; j<3; j++ ){
cout<<"该学生第"<<j+1<<" 科成绩:"<<numb[j]<<endl;
}
cout<<"/n三科平均成绩:"<<ave<<endl;
}
int getnum(){return num; }
/*下面俩函数提供给list排序用(按成绩排序*/
bool operator > (student B){ if( ave>B.ave ) return true; return false; }
bool operator < (student B){ if( ave<B.ave ) return true; return false; }
};
/***教室类,包含了学生列表、插入删除学生、安学号排列学生、等操作***/
/*整个程序的执行几乎都在教室的构造函数中完成*/
class classroom
{ list<student> classr;
public:
classroom() //教室的构造函数
{ int choose;
int flag=1;
bool foo=true;
while(foo)
{ system("cls");
cout<<endl<<"1 - 输入 2 - 插入 3 - 删除 4 - 显示 5 - 排序 0 - 退出"<<endl;
cin>>choose;
switch(choose)
{ case 1:
while(flag==1)
{ insert(); char c;
cout<<"是否继续输入:(y/n)"; cin>>c;
if( c=='n' || c =='N'){ flag=0; break; } //这条语句照原版的方法,我自己不喜欢
continue;
}
break;
case 2:
insert();
break;
case 3:
cout<<"\n请输入要删除的学生的学号: "<<endl;
int n; cin>>n;
del(n);
break;
case 4:
display();
cout<<"------------------------------"<<endl;
system("pause");
break;
case 5:
classr.sort();
break;
case 0:
cout<<"谢谢使用"; //原版语句写错了,没结束整体while循环,仅结束当前switch
foo=false; //没退出程序,为了正常退出,引入了foo给while
break;
}
}
}
void insert() //插入
{ classr.insert( classr.begin(),student());
clearcin();
}
void display()
{ list<student>::iterator it; int cnt=1;
for(it=classr.begin(); it!=classr.end(); ++it) //用list中的迭代器来遍历
{ cout<<"\n学生 "<<cnt++<<"信息\n";
it->display();
}
}
bool del(int num)
{ list<student>::iterator it;
for(it=classr.begin(); it!=classr.end(); ++it)
{ if ( it->getnum()==num ){ classr.erase(it); return true; } }
}
};
////////////////////////////////// main() /////////////////////////////////
int main ()
{ classroom A;
return 0;
}
////这里,没有写出查询功能,你自己试一试查询成绩这个函数,很简单类似删除成绩的方法,只是把erase(it)替换成为display...哈哈,自己看看吧!
展开全部
参考一下:
#include<iostream>
#include<iomanip>
#include<vector>
#include<fstream>
using namespace std;
struct student{
int number;
char name[12];
double score1,score2,score3,total,average;
};
void sort(student *stud,int n){
struct student temp;
for(int i=0;i<n-1;i++){
int index=i;
for(int j=i+1;j<n;j++)
if(stud[index].average<stud[j].average)
index=j;
temp=stud[index];
stud[index]=stud[i];
stud[i]=temp;
}
}
void find1(student *stud,int n){
char *na=new char[12];
int num,i;
cout<<"请输入所需查找人的姓名和学号:\n";
cin>>na>>num;
for(i=0;i<n;i++){
if(strcmp(stud[i].name,na)==0&&stud[i].number==num)
cout<<stud[i].number<<'\t'<<stud[i].name<<'\t'<<stud[i].score1
<<'\t'<<stud[i].score2<<'\t'<<stud[i].score2<<'\t'<<stud[i].score3<<endl;
}
}
void print(student *stud,int n){
double average1=0,average2=0,average3=0;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"语文"<<'\t'<<"数学"
<<'\t'<<"英语"<<'\t'<<"平均分"<<endl;
for(int i=0;i<n;i++){
cout<<setprecision(4)<<stud[i].number<<'\t'<<stud[i].name<<'\t'<<stud[i].score1<<'\t'
<<stud[i].score2<<'\t'<<stud[i].score3<<'\t'<<stud[i].average<<endl;
average1+=stud[i].score1;
average2+=stud[i].score2;
average3+=stud[i].score3;
}
cout<<setprecision(4)<<"各科目的平均分:"<<'\t'<<average1/n<<'\t'<<average2/n<<'\t'<<average3/n<<endl;
cout<<endl;
}
int delete1(student *stud,int n){
int i,j;
char *na=new char[12];
cout<<"请输入你要删除的姓名:\n";
cin>>na;
for(i=0;i<n;i++){
if(strcmp(stud[i].name,na)==0){
for(j=i;j<n;j++){
stud[j]=stud[j+1];
}
cout<<"已删除!\n";
delete na;
return n-1;
}
}
cout<<"没有此人!\n\n";
delete na;
return n;
}
int insert(student *stud,int n){
int number;
n=n;
char name[12];
double score1,score2,score3,total,average;
char *na=new char[12];
cout<<"请输入学号、姓名、语文成绩、数学成绩和英语成绩:\n";
cin>>stud[n].number>>na>>stud[n].score1>>stud[n].score2>>stud[n].score3;
strcpy(stud[n].name,na);
stud[n].average=(stud[n].score1+stud[n].score2+stud[n].score3)/3;
stud[n].total=(stud[n].score1+stud[n].score2+stud[n].score3);
cout<<"插入完毕!\n";
return n+1;
}
void main(){
int n=0;
student stud[10];
sort(stud,n);
int choice;
do{
cout<<"请输入所想要操作的序号!\n\n";
cout<<"________\n";
cout<<"1.删除;\n2.插入;\n3.全显;\n0.退出.\n";
cout<<"________\n";
cin>>choice;
switch(choice){
case 1:
n=delete1(stud,n);
sort(stud,n);
break;
case 2:
n=insert(stud,n);
cout<<n<<endl;
sort(stud,n);
break;
case 3:
print(stud,n);
break;
case 0:
exit(0);
default:
cout<<"输入错误!";
}
}while(1);
}
#include<iostream>
#include<iomanip>
#include<vector>
#include<fstream>
using namespace std;
struct student{
int number;
char name[12];
double score1,score2,score3,total,average;
};
void sort(student *stud,int n){
struct student temp;
for(int i=0;i<n-1;i++){
int index=i;
for(int j=i+1;j<n;j++)
if(stud[index].average<stud[j].average)
index=j;
temp=stud[index];
stud[index]=stud[i];
stud[i]=temp;
}
}
void find1(student *stud,int n){
char *na=new char[12];
int num,i;
cout<<"请输入所需查找人的姓名和学号:\n";
cin>>na>>num;
for(i=0;i<n;i++){
if(strcmp(stud[i].name,na)==0&&stud[i].number==num)
cout<<stud[i].number<<'\t'<<stud[i].name<<'\t'<<stud[i].score1
<<'\t'<<stud[i].score2<<'\t'<<stud[i].score2<<'\t'<<stud[i].score3<<endl;
}
}
void print(student *stud,int n){
double average1=0,average2=0,average3=0;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"语文"<<'\t'<<"数学"
<<'\t'<<"英语"<<'\t'<<"平均分"<<endl;
for(int i=0;i<n;i++){
cout<<setprecision(4)<<stud[i].number<<'\t'<<stud[i].name<<'\t'<<stud[i].score1<<'\t'
<<stud[i].score2<<'\t'<<stud[i].score3<<'\t'<<stud[i].average<<endl;
average1+=stud[i].score1;
average2+=stud[i].score2;
average3+=stud[i].score3;
}
cout<<setprecision(4)<<"各科目的平均分:"<<'\t'<<average1/n<<'\t'<<average2/n<<'\t'<<average3/n<<endl;
cout<<endl;
}
int delete1(student *stud,int n){
int i,j;
char *na=new char[12];
cout<<"请输入你要删除的姓名:\n";
cin>>na;
for(i=0;i<n;i++){
if(strcmp(stud[i].name,na)==0){
for(j=i;j<n;j++){
stud[j]=stud[j+1];
}
cout<<"已删除!\n";
delete na;
return n-1;
}
}
cout<<"没有此人!\n\n";
delete na;
return n;
}
int insert(student *stud,int n){
int number;
n=n;
char name[12];
double score1,score2,score3,total,average;
char *na=new char[12];
cout<<"请输入学号、姓名、语文成绩、数学成绩和英语成绩:\n";
cin>>stud[n].number>>na>>stud[n].score1>>stud[n].score2>>stud[n].score3;
strcpy(stud[n].name,na);
stud[n].average=(stud[n].score1+stud[n].score2+stud[n].score3)/3;
stud[n].total=(stud[n].score1+stud[n].score2+stud[n].score3);
cout<<"插入完毕!\n";
return n+1;
}
void main(){
int n=0;
student stud[10];
sort(stud,n);
int choice;
do{
cout<<"请输入所想要操作的序号!\n\n";
cout<<"________\n";
cout<<"1.删除;\n2.插入;\n3.全显;\n0.退出.\n";
cout<<"________\n";
cin>>choice;
switch(choice){
case 1:
n=delete1(stud,n);
sort(stud,n);
break;
case 2:
n=insert(stud,n);
cout<<n<<endl;
sort(stud,n);
break;
case 3:
print(stud,n);
break;
case 0:
exit(0);
default:
cout<<"输入错误!";
}
}while(1);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样设计个类就是了
class student{
private:
int stu_num;
int score;
public:
int search(int stu_num);
int add(int stu_num,int score);
int del(int stu_num);
}
class student{
private:
int stu_num;
int score;
public:
int search(int stu_num);
int add(int stu_num,int score);
int del(int stu_num);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询