刚刚开始学C++的面向对象,寒假接近尾声,所以决定做一个小小的程序来画上一个句号,可惜这个句号十分简陋。
// 基本功能: // 可以输入几名学生姓名 学号 语数英三门课程分数 //能根据学生姓名,输出其各科成绩 #include <iostream> #include <iomanip> #include <string> using namespace std; int welcome(); //welcome函数用来打印最开始的欢迎词及指导词 class student { public: string name; int num; int mark[3]; char judge; //judge用于存放y/n student * next; void input(int & k); //输入学生的信息 }; void output(int & t,student *stu); //输出学生信息 int main() { const int N=1000; student stu[N]; int population=0; //population用于存放学生个数 student *p=&stu[0]; if(welcome()==1) //如果用户输入1,则开始输入数据 { for(int i=0;i<N;i++) { stu[i].next=&stu[i+1]; stu[i].input(population); if(stu[i].judge=='n') break; p=p->next; } output(population,stu); } return 0; } int welcome() { int n; cout<<" 欢迎来到学生信息系统"<<endl; //前面有三十个空格 cout<<"********************************************************************************"<<endl; cout<<" 请先输入学生的姓名及其信息,默认为1位学生。按1开始输入学生信息"<<endl; cin>>n; return n; } void student::input(int & k) { while(cout<<"是否要输入学生信息(y/n)"&&cin>>judge&&judge=='y') { cout<<"姓名"<<endl; cin>>name; cout<<"学号"<<endl; cin>>num; cout<<"语文"<<endl; cin>>mark[0]; cout<<"数学"<<endl; cin>>mark[1]; cout<<"英语"<<endl; cin>>mark[2]; k++; } } void output(int & t,student *stu) { string search_name; cout<<"请输入要查找的学生姓名: "; cin>>search_name; for(int i=0;i<t;i++) { if(search_name==stu[i].name) { cout<<"语文: "<<stu[i].mark[0]<<" "; cout<<"数学: "<<stu[i].mark[1]<<" "; cout<<"英语 "<<stu[i].mark[2]<<" "<<endl; } else cout<<"查无此人"<<endl; } }
改了三次,就改成如今这幅四不像的模样。来过总结吧:
1. 改到最后不得不把类中的所有数据成员全部public,原因是output函数不在类里面。反过来说,如果把output放到类中,由于我定义的是对象数组 stu[N],那么就会发生调用N次output函数,虽然肯定有办法使它只调用一次,但我已经改成这样了,就迁就一下,下次一定会改进的。
2.链表啊链表,在结构体那章中,链表的插入,删除等操作及动态链表的创建我都有点晕晕的,所以直接跳过了。当时想今后碰到实际问题再回过头来学习效果会更好,毕竟不会纸上谈兵了。看来现在是时候了。
3.今后这个学生系统我还会继续深化的,直至它完美为止。