《学生籍贯信息记录簿》程序设计基础课程设计报告专业:电子信息工程班级:2班姓名:***学号:**********指导老师:***二00八年7月3日目录1 程序设计的目的………………………………………………………………2 课程设计题目描述和要求……………………………………………………3 课程设计原程序………………………………………………………………4 调试与测试……………………………………………………………………5 流程图…………………………………………………………………………6 课程设计总结…………………………………………………………………7 参考书目………………………………………………………………………1.课程设计的目的编制一个学生籍贯信息记录簿,每个学生信息包括:学号,姓名,籍贯。
2 课程设计题目描述和要求编制一个学生籍贯信息记录簿,每个学生信息包括:学号、姓名、籍贯。
具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的籍贯信息;(3)按学号或姓名查询其籍贯;(4)按籍贯查询并输出该籍贯的所有学生;(5)能添加、删除和修改学生的籍贯信息;(6)显示输出四川籍和非四川籍学生的信息并可分别存盘3 课程设计原程序#include <iostream>#include <string>using namespace std;class Student //建立student类{public:Student(){} //无参数的构造函数Student(int n,string nam,string home) //构造函数初始化{num=n;name=nam;hometown=home;}void input() //录入信息的函数{cout<<"请输入学号"<<endl;cin>>num;cout<<"请输入姓名"<<endl;cin>>name;cout<<"请输入籍贯"<<endl;cin>>hometown;}void display() //输出函数{cout<<"学号:"<<num<<" "<<"姓名:"<<name<<" "<<"籍贯:"<<hometown<<endl;}string get_name(){return name;} //得到的学生姓名string get_num(){return num;} //得到学号string get_hometown(){return hometown;} //得到籍贯void set_num(string n){num=n;}void set_name(string nam){name=nam;}void set_hometown(string h){hometown=h;}protected: //保护成员string num;string name;string hometown;};void add(Student stu[30],int &sum) //添加函数参数是学生数组,sum是录入的学生数{stu[sum++].input(); //依次输入信息}void delet(Student stu[30],int &sum) //删除函数{cout<<"你要删除学生的姓名:";string name;cin>>name;for(int i=0;i<sum;i++) //通过for循环找到要删除的学生姓名if(stu[i].get_name()==name){if(i<sum-1){for(int j=i;j<sum;j++) //用后面的植覆盖前面的植stu[j]=stu[j+1];}break;}if(i>=sum) //若超过学生总数则报错cout<<"无此人!"<<endl;else sum--;}void change(Student stu[30],int &sum) //修改函数{string chose,name,home,num;cout<<"\n1修改学号2修改姓名3修改籍贯"<<endl;cin>>chose;if(chose=="1"){int i;cout<<"请输入你要修改的学生的原学号:"; //修改学号cin>>num;for(i=0;i<sum;i++) //通过for循环找到要修改的学号if(stu[i].get_num()==num){cout<<"新学号:";cin>>num;stu[i].set_num(num);cout<<"修改后的数据:"<<endl;stu[i].display();break;}if(i>=sum) cout<<"无此学生"<<endl;}else if(chose=="2"){int i;cout<<"请输入你要修改的学生的原姓名:"; //修改姓名cin>>name;for(i=0;i<sum;i++)if(stu[i].get_name()==name) //通过for循环找到要修改的姓名{cout<<"新姓名:";cin>>name;stu[i].set_name(name); //修改数据cout<<"修改后的数据:"<<endl;stu[i].display();break;}if(i>=sum)cout<<"无此学生"<<endl;}else if(chose=="3"){cout<<"请输入你要修改的学生的原籍贯:"; //修改籍贯cin>>home;}}void find(Student stu[30],int &sum){string name;cout<<"请输入你要查找的学生的姓名:"; //修改姓名cin>>name;for(int j=0;j<sum;j++){if(stu[j].get_name()==name){stu[j].display();break;}elsecout<<"无此人!\n";}void main(){Student stu[30];int sum=0; //sum是记录学生数目的变量char n='1';cout<<"学生籍贯信息记录簿"<<endl;while(n!='0'){cout<<"\n1查看所有学生的籍贯信息\n2添加信息\n3修改信息\n4删除信息\n5查询信息\n0退出\n"<<endl;cin>>n;switch(n) //用switch进行选择{case '1':if(sum==0) cout<<"没有学生信息,请先添加信息。
"<<endl;else{for(int i=0;i<sum;i++)stu[i].display();}break;case'2':add(stu,sum);break;case'3':change(stu,sum);break;case'4':delet(stu,sum);break;case'5':find(stu,sum);break;default:cout<<"选择错误"<<endl;break;}cout<<endl;}}4 调试与测试在我编程序的过程中,考虑不周全,比如在查找函数中,没考虑到如果输入的姓名,学号,籍贯与实际不符的情况,等等一些细节,经过指点,我进不步把程序完善,考虑周全。
遇到的问题:开始在change函数中,通过for循环找到所需要修改的学生信息后,不知道怎样修改,直接用赋值语句,出现错误,通过问同学,请教到一个简洁的方法例:stu[i].set_num(num),这样就可以完成修改命令。
编译后无错误。
5.流程图6.课程设计总结在此次课程设计的过程中,运用了类,数组等的C++知识,在数据处理中用到了构造函数,保护数据成员以及条件循环的知识,在此次实验中看到了一些程序的编写需要很多方面的知识的交错运用,而且知识运用比较分散,这也让我看到了C++的灵活之处,自己在对知识的灵活运用上还存在很大的缺陷,还必须在以后的大量实验中加强还有就是在循环方面的动系比较薄弱,课程设计虽然只是C++的一形式,但是形式比较新颖,在以后应该加强这种新形式的练习。
在实验中看到自己对于很多知识的理解不够透彻和熟练,只是知道而不会应用或者用得不好,在书籍和同学的帮助下完成这次实验,写程序的严谨性也有待加强。
7.参考书目:[1].谭浩强《C++程序设计》,北京,清华大学出版社,2006年。
[2].钱能,《C++程序设计实验指导》,北京,清华大学出版社,2003年3月。
[3].孙一平王庆宝,《C++程序设计学习辅导》,北京,清华大学出版社,2006年。