个人认为应该加&吧,建议你试一下
粘一个同学的程序代码,你看看里面应该有XD
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstdio>
using namespace std;
struct Student{
string id;
string name;
string sex;
string adress;
string telephone;
double chinese;
double math;
double english;
double average;
double classmate;
double teacher;
double morality;
double all;
double all_order;
};
vector<Student*>students;
inline void de(){
while(cin.get()!='\n')continue;
}
int find1(string id){
for(int i=0;i<students.size();i++){
if(students[i]->id==id)
return i;
}
return -1;
};
int find2(string name){
for(int i=0;i<students.size();i++){
if(students[i]->name==name)
return i;
}
return -1;
}
void print(Student* st){
cout<<"id:"<<st->id<<endl;
cout<<"name:"<<st->name<<endl;
cout<<"sex:"<<st->sex<<endl;
cout<<"adress:"<<st->adress<<endl;
cout<<"telephone:"<<st->telephone<<endl;
cout<<"chinese score:"<<st->chinese<<endl;
cout<<"math score:"<<st->math<<endl;
cout<<"english score:"<<st->english<<endl;
cout<<"score from clssmate:"<<st->classmate<<endl;
cout<<"score form teacher:"<<st->teacher<<endl;
cout<<"morality score:"<<st->morality<<endl;
cout<<"comprehensive score:"<<st->all<<endl;
cout<<"comprehensive rank:"<<st->all_order<<endl;
}
bool cmp1(Student *a,Student *b){
return a->all>b->all;
}
void judge(double& a){
double x;
while(cin>>x){
if(x>=0&&x<=100){
a=x;
break;
}
else
printf("please enter a score between 0 and 100!\n");
}
}
void a(){
char order;
while(1){
printf("------------------------------------------------------\n");
printf("input 'y' to insert student's information\n");
printf("input 'q' to quit to menu\n");
printf("------------------------------------------------------\n");
cin>>order;
de();
if(order=='q')break;
else if(order!='y'){
printf("------------------------------------------------------\n");
printf("please input a right order!\n");
printf("------------------------------------------------------\n");
continue;
}
printf("------------------------------------------------------\n");
printf("please input students information in order\n");
printf("------------------------------------------------------\n");
Student *st=new Student;
printf("id:\n");
cin>>st->id;
printf("name:\n");
cin>>st->name;
printf("sex:\n");
cin>>st->sex;
printf("adress:\n");
cin>>st->adress;
printf("telephone:\n");
cin>>st->telephone;
printf("chinese score:\n");
judge(st->chinese);
printf("math score:\n");
judge(st->math);
printf("english score:\n");
judge(st->english);
printf("score from clssmate:\n");
judge(st->classmate);
printf("score form teacher:\n");
judge(st->teacher);
printf("morality score:\n");
judge(st->morality);
st->average=(st->chinese+st->math+st->english)/3;
st->all=st->average*0.6+st->classmate*0.1+st->teacher*0.2+st->morality*0.1;
students.push_back(st);
}
sort(students.begin(),students.end(),cmp1);
for(int i=0;i<students.size();i++){
students[i]->all_order=i+1;
}
}
void b(){
char order;
while(1){
printf("------------------------------------------------------\n");
printf("input 'y' to change or delete student's information\n");
printf("input 'q' to quit to menu\n");
printf("------------------------------------------------------\n");
cin>>order;
de();
if(order=='q')
break;
else if(order!='y'){
printf("------------------------------------------------------\n");
printf("please input a right order!\n");
printf("------------------------------------------------------\n");
continue;
}
while(1){
printf("------------------------------------------------------\n");
printf("input '1' to search student by id\n");
printf("input '2' to search student by name\n");
printf("------------------------------------------------------\n");
cin>>order;
de();
int i;
Student *st;
if(order=='1'){
printf("------------------------------------------------------\n");
printf("input the student's id:\n");
printf("------------------------------------------------------\n");
string s;
cin>>s;
de();
i=find1(s);
}
else if(order=='2'){
printf("------------------------------------------------------\n");
printf("input the student's name:\n");
printf("------------------------------------------------------\n");
string s;
cin>>s;
de();
i=find2(s);
}
else{
printf("------------------------------------------------------\n");
printf("please input the right order!\n");
printf("------------------------------------------------------\n");
continue;
}
if(i==-1){
printf("------------------------------------------------------\n");
printf("no such student's information!\n");
printf("------------------------------------------------------\n");
}
else{
st=students[i];
while(1){
printf("------------------------------------------------------\n");
printf("how do you want to do with the student's information?\n");
printf("input 'c' to change it's information\n");
printf("input 'd' to delete it's information\n");
printf("------------------------------------------------------\n");
cin>>order;
de();
if(order=='c'){
while(1){
printf("------------------------------------------------------\n");
printf("whitch information do you want to change?\n");
printf("please input the order\n");
printf("a for id,b for name,c for sex,d for adress\n");
printf("e for telephone,f for chinese score,g for math scroe\n");
printf("h for english score,i for score from classmate\n");
printf("j for score from teacher,k for morality score\n");
printf("------------------------------------------------------\n");
cin>>order;
de();
if(order>='a'&&order<='k'){
printf("please input the new information\n");
switch(order){
case 'a':cin>>st->chinese;break;
case 'b':cin>>st->name;break;
case 'c':cin>>st->sex;break;
case 'd':cin>>st->adress;break;
case 'e':cin>>st->telephone;break;
case 'f':judge(st->chinese);break;
case 'g':judge(st->math);break;
case 'h':judge(st->english);break;
case 'i':judge(st->classmate);break;
case 'j':judge(st->teacher);break;
case 'k':judge(st->morality);break;
}
st->all=st->average*0.6+st->classmate*0.1+st->teacher*0.2+st->morality*0.1;;
}
else{
printf("------------------------------------------------------\n");
printf("please input the right order!\n");
printf("------------------------------------------------------\n");
continue;
}
break;
}
}
else if(order=='d'){
students.erase(students.begin()+i);
delete st;
}
else{
printf("------------------------------------------------------\n");
printf("please input the right order!\n");
printf("------------------------------------------------------\n");
continue;
}
break;
}
}
break;
}
}
sort(students.begin(),students.end(),cmp1);
for(int i=0;i<students.size();i++){
students[i]->all_order=i+1;
}
}
void c(){
if(students.size()==0){
printf("------------------------------------------------------\n");
printf("there's no student's information at all!\n");
printf("------------------------------------------------------\n");
return ;
}
for(Student* st:students){
printf("------------------------------------------------------\n");
print(st);
printf("------------------------------------------------------\n");
}
}
void d(){
char order;
while(1){
printf("------------------------------------------------------\n");
printf("input 'y' to search student's information\n");
printf("input 'q' to quit to menu\n");
printf("------------------------------------------------------\n");
cin>>order;
de();
if(order=='q')
break;
else if(order!='y'){
printf("------------------------------------------------------\n");
printf("please input a right order!\n");
printf("------------------------------------------------------\n");
continue;
}
else{
while(1){
printf("------------------------------------------------------\n");
printf("input '1' to search student's information by id\n");
printf("input '2' to search student's information by name\n");
printf("input 'q' to return upper layer\n");
printf("------------------------------------------------------\n");
cin>>order;
de();
if(order=='q')break;
else if(order=='1'){
printf("------------------------------------------------------\n");
printf("input the student's id:\n");
printf("------------------------------------------------------\n");
string s;
cin>>s;
de();
int i=find1(s);
if(i==-1){
printf("------------------------------------------------------\n");
printf("no such student's information!\n");
printf("------------------------------------------------------\n");
}
else{
printf("------------------------------------------------------\n");
print(students[i]);
printf("------------------------------------------------------\n");
}
}
else if(order=='2'){
printf("------------------------------------------------------\n");
printf("input the student's name:\n");
printf("------------------------------------------------------\n");
string s;
cin>>s;
de();
int i=find2(s);
if(i==-1){
printf("------------------------------------------------------\n");
printf("no such student's information!\n");
printf("------------------------------------------------------\n");
}
else{
printf("------------------------------------------------------\n");
print(students[i]);
printf("------------------------------------------------------\n");
}
}
else{
printf("------------------------------------------------------\n");
printf("please input the right order!\n");
printf("------------------------------------------------------\n");
}
}
}
}
}
void q(){
Student *tmp;
for(long i=(long)students.size()-1;i>=0;i--){
tmp=students[i];
students.erase(students.begin()+i);
delete tmp;
}
}
int main(){
char order;
do{
printf("*****************************************\n");
printf("* *\n");
printf("* menu *\n");
printf("* 请输入指令 *\n");
printf("* a:插入学生信息 *\n");
printf("* b:修改学生信息 *\n");
printf("* c:浏览学生信息 *\n");
printf("* d:查询学生信息 *\n");
printf("* q:退出程序 *\n");
printf("* *\n");
printf("*****************************************\n");
cin>>order;
de();
switch(order){
case 'a':a();break;
case 'b':b();break;
case 'c':c();break;
case 'd':d();break;
case 'q':
q();
printf("------------------------------------------------------\n");
printf("thank you for using my system!\n");
printf("------------------------------------------------------\n");
break;
}
}while(order!='q');
}