*********软件课程设计实践实验报告专业班级:学生姓名:学号:实验项目名称:实验项目性质:实验所属课程:实验室(中心):指导教师:实验完成时间:目录一选题及说明 2二系统编写环境 22.1 软件环境 2 2.2 硬件环境 2三主要功能说明 2 3.1 信息输入 2 3.2 信息查询 2 3.3 信息删除 2 3.4 信息修改 2 3.5 信息浏览 2四功能设计及实现 3 4.1数据结构 3 4.2界面设置 3 4.2.1 主界面 3 4.2.2 信息输入界面 4 4.2.3 信息查询界面 4 4.2.4 信息删除界面 4 4.2.5 信息修改界面 5 4.2.6 信息浏览界面 5 4.3 功能实现 6 4.3.1 信息输入功能 64.3.2 信息查询功能 6 4.3.3 信息删除功能 6 4.3.4 信息修改功能 6 4.3.5 信息浏览功能 6 4.3.6 退出系统 6五程序源代码 6 六结束语 20 七参考文献 20一、选题及说明题目:人口户籍信息管理系统人口户籍信息管理系统是一个简易的管理个人和家庭信息的系统,主要对个人和家庭的基本信息进行管理,个人基本信息包括姓名、性别、出生日期、民族、政治面貌、宗教信仰、身份证编码、联系方式、住址和门牌号,家庭的基本信息包括住址、人口数和门牌号。
管理系统主要有信息输入、信息查询、信息删除、信息修改和信息浏览五大功能。
二、系统编写环境1.软件环境:Windows 7(64位) Visual C++6.02.硬件环境:CPU I5 5200U RAM 8G 1600MHz 硬盘 500G 5400转三、主要功能说明1.信息输入:由函数InPut()实现,InPut()函数调用两个子函数,分别实现对个人和家庭基本信息的输入,输入后将输入的内容保存到容器中。
2.信息查询:由函数Inquir()实现,Inquiry()函数调用两个子函数,分别实现隔热信息和家庭信息的查询,其中个人信息查询有三种方式,即姓名查询、身份证查询和门牌号查询,门牌号查询可能会有多个查询结果。
3.信息删除:由函数Delete()实现,Delete()函数调用两个子函数,分别实现对个人和家庭的信息删除。
4.信息修改:由函数Change()实现,Change()函数调用两个子函数,分别实现对个人和家庭的信息进行修改,对个人信息进行修改时还可以选择对某一项信息进行修改。
5.信息浏览:由Look()函数实现,实现机制和信息查询函数基本相同,分为三中浏览方式,即姓名浏览、身份证编码浏览和门牌号浏览。
综合所有功能,整个程序的简单流程图如下:四、功能设计及实现(一)、数据结构:Person类中主要包含姓名(Name)、性别(Sex)、出生日期(Birth)、民族(Folk)、政治面貌(Pol_sta)、宗教信仰(Belief)、身份证编码(ID)、联系方式(Tel)、住址(Add)和门牌号(Num),Family类中主要包含住址(Address)、门牌号(Number)和人口数(Pop)。
(二)、界面设置:1.主界面:主界面显示该系统的五大主要功能和操作提示,如下图:2.信息输入界面:信息输入界面主要提示用户输入基本信息,如下图:3.信息查询界面:信息查询界面主要提示用户根据自己的需要输入相关信息进行查询,如下图:4.信息删除界面:信息删除界面主要是由用户输入要删除信息的身份证编码进行信息删除,如下图:用户选择要修改的项目,用户选择进行修改,如下图:按姓名、按身份证号和按门牌号三种方式,如下图:(三)、功能实现:1.信息输入功能:由函数InPut()调用两个类中的Set()实现,具体的信息输入则用到标准输入流cin和字符串输入函数cin.get()、getline()实现,执行完输入函数后,用 Per_vec.push_back()/Fam_vec.push_back()把输入的数据内容存到容器中。
2.信息查询功能:由函数Inquiry()实现,信息查询功能有三种查询方式,即按照姓名查询、按照身份证编码查询和按照门牌号查询。
三种查询方式的实现机制都是利用字符串比较函数((*P)GetName()).compare(na)==0、-((*P)GetID()).compare(id)==0、((*P)GetNum()).compare(num)==0,输入的所需查询的姓名或身份证编码或门牌号与容器中存储的数据进行比较,当两字符串相同时,输出查询的结果。
3.信息删除功能:由函数Delete()实现,实现机制首先使用信息查询函数找到要删除人员的信息,再使用erase()函数删除信息,使用erase()函数时,把需要删除的内容的起止地址直接写到括号中。
4.信息修改功能:由函数Change()调用两个类中的Change()实现,该功能首先要选择需要修改的对象,然后在对该对象的信息进行修改,修改过后又将信息保存到容器中。
5.信息浏览功能:由函数Look()实现,该功能的主要机制和信息查询功能差不,也提供三种浏览方式。
6.退出系统:整个系统的是一个do···while循环首先进入系统页面,然后输入选择,当输入不为“0”时,系统执行数字相对应的功能,当输入为“0”时,循环终止,整个系统退出。
五、程序源代码#include<iostream>#include<string>#include<vector>using namespace std;#define SIZE 80class Person{string Name; //姓名string Sex; //性别string Birth; //出生日期string Folk; //民族string Pol_sta; //政治面貌string Belief; //宗教信仰string ID; //身份证编码string Tel; //联系方式string Add; //住址string Num; //门牌号int i;public:Person(); //无参构造函数Person( string na, string sex, string birth, string folk, string pol_sta, string belief, string id, string tel, string add,string num); //带参构造函数Person(const Person &per); //拷贝构造函数~Person(); //析构函数string GetName(); //提取姓名string GetSex(); //提取性别string GetBirth(); //提取出生日期string GetFolk(); //提取民族string GetPol_sta(); //提取政治面貌string GetBelief(); //提取宗教信仰string GetID(); //提取身份证编码string GetTel(); //提取联系方式string GetAdd(); //提取地址string GetNum(); //提取门牌号void Display() const; //显示学生信息void Set(); //输入学生信息void Change(); //修改个人信息};class Family{private:string Address; //住址int Number; //门牌号int Pop; //人口数目public:Family();Family(string address, int number, int pop);~Family();void Set(); //信息输入void Display(); //信息输出void Change(); //信息修改int GetNumber(); //门牌号返回函数};Person::Person(){i=0;} //构造函数Person::Person( string na, string sex, string birth, string folk, string pol_sta, string belief, string id, string tel, string add,string num){Name=na;Sex=sex;Birth=birth;Folk=folk;Pol_sta=pol_sta;Belief=belief;ID=id;Tel=tel;Add=add;Num=num;}Person::Person(const Person &per) //拷贝构造函数{Name=;Sex=per.Sex;Birth=per.Birth;Folk=per.Folk;Pol_sta=per.Pol_sta;Belief=per.Belief;ID=per.ID;Tel=per.Tel;Add=per.Add;Num=per.Num;}Person::~Person() //析构函数{}string Person:: GetName() //提取姓名{return Name;}string Person::GetSex() //提取性别{ return Sex;}string Person::GetBirth() //提取出生日期{ return Birth;}string Person::GetFolk() //提取民族{return Folk;}string Person::GetPol_sta() //提取政治面貌{return Pol_sta;}string Person::GetBelief() //提取宗教信仰{return Belief;}string Person::GetID() //提取身份证编码{return ID;}string Person::GetTel() //提取联系方式{return Tel;}string Person::GetAdd() //提取住址{return Add;}string Person::GetNum() //提取门牌号{return Num;}void Person::Display() const //输出数据信息{cout<<"1.姓名:"<<Name<<" 2.性别:"<<Sex<<endl;cout<<"\n3.出生日期:"<<Birth<<" 4.民族:"<<Folk<<endl;cout<<"\n5.政治面貌:"<<Pol_sta<<" 6.宗教信仰:"<<Belief<<endl;cout<<"\n7.身份证编码:"<<ID<<" 8.住址:"<<Add<<endl;cout<<"\n9.联系方式:"<<Tel<<" 10.门牌号:"<<Num<<endl;}void Person::Set() //输入数据{cin.get();cout<<"请输入姓名:";getline(cin,Name);cin.get();cout<<"请输入性别:";getline(cin,Sex);cin.get();cout<<"请输入出生日期:";getline(cin,Birth);cin.get();cout<<"请输入民族:";getline(cin,Folk);cin.get();cout<<"请输入政治面貌:";getline(cin,Pol_sta);cin.get();cout<<"请输入宗教信仰:";getline(cin,Belief);cin.get();cout<<"请输入身份证编码:";getline(cin,ID);cin.get();cout<<"请输入住址:";getline(cin,Add);cin.get();cout<<"请输入联系方式:";getline(cin,Tel);cin.get();cout<<"请输入门牌号:";getline(cin,Num);}void Person::Change(){int i;Display();cout<<"\n请选择需要修改的项目:";cin>>i;switch(i){case 1:{cin.get();cout<<"请重新输入姓名:";getline(cin,Name);};break;case 2:{cin.get();cout<<"请重新输入性别:";getline(cin,Sex);};break;case 3:{cin.get();cout<<"请重新输入出生日期:";getline(cin,Birth);};break;case 4:{cin.get();cout<<"请重新输入民族:";getline(cin,Folk);};break;case 5:{cin.get();cout<<"请重新输入政治面貌:";getline(cin,Pol_sta);};break;case 6:{cin.get();cout<<"请重新输入宗教信仰:";getline(cin,Belief);};break;case 7:{cin.get();cout<<"请重新输入身份证编码:";getline(cin,ID);};break;case 8:{cin.get();cout<<"请重新输入住址:";getline(cin,Add);};break;case 9:{cin.get();cout<<"请重新输入联系方式:";getline(cin,Tel);};break;case 10:{cin.get();cout<<"请重新输入门牌号:";getline(cin,Num);};break;default:Change();}}Family::Family() //构造函数{Number=0;Pop=0;}Family::~Family(){}Family::Family(string address, int number, int pop) //带参构造函数{Address=address;Number=number;Pop=pop;}void Family::Set() //信息输入{cin.get();cout<<"请输入家庭地址:";getline(cin,Address);cout<<"请输入门牌号:";cin>>Number;}void Family::Display(){cout<<"家庭住址:"<<Address;cout<<"门牌号:"<<Number;cout<<"家庭人口数:"<<Pop;}void Family::Change(){int i;cout<<"1.家庭住址 2.门牌号"<<endl;cout<<"请选择要修改的内容:";cin>>i;switch(i){case 1:{cin.get();cout<<"请重新输入家庭地址:";getline(cin,Address);};break;case 2:{cout<<"请重新输入门牌号:";cin>>Number;};break;default:Change();}}int Family::GetNumber(){return Number;}vector<Person> Per_vec;vector<Family> Fam_vec;Person P;Family F;void menu(); //主菜单void Input(); //信息输入void Inquiry(); //信息查询void Change(); //信息修改void Delete(); //信息删除void Look(); //信息浏览void OutputPer(vector<Person>& Per_vec );void InputPer(vector<Person>& Per_vec );void InputFam(vector<Family>& Fam_vec);void menu(){cout<<" *欢迎使用人口户籍信息管理系统*"<<endl;cout<<"************************************************************************ ********"<<endl;cout<<"\n 0.退出管理系统"<<endl;cout<<"\n 1.信息录入"<<endl;cout<<"\n 2.信息查询"<<endl;cout<<"\n 3.信息删除"<<endl;cout<<"\n 4.信息修改"<<endl;cout<<"\n 5.信息浏览"<<endl;cout<<"************************************************************************ ********"<<endl;cout<<"\n 请选择以上操作(0~5) "<<endl;}void OutputPer( vector<Person>& Per_vec) //输出对象数组元素个人{int count=0;vector<Person>::const_iterator p;for(p=Per_vec.begin();p!=Per_vec.end();p++){(*p).Display();count++;}cout<<"学生总人数="<<count<<endl;}void InputPer( vector<Person>& Per_vec ) //输入对象数组元素个人{char ch;Person x;do{x.Set();Per_vec.push_back(x);cout<<"继续输入吗?(Y or N )"<<endl;cin.get();cin.get(ch);}while(ch=='Y');}void InputFam( vector<Family>& Fam_vec) //输入对象组元素家庭{char ch;Family y;do{y.Set();Fam_vec.push_back(y);cout<<"继续输入吗?(Y or N)"<<endl;cin.get();cin.get(ch);}while(ch=='Y');}void Input() //信息输入函数{int i;cout<<"\n1.个人 2.家庭"<<endl;cout<<"\n请选择要操作的对象:";cin>>i;switch(i){case 1:InputPer(Per_vec);break;case 2:InputFam(Fam_vec);break;}}void Inquiry() //信息查询函数{int i;string na;string id;string num;cout<<"1.姓名查询 2.身份证查询 3.门牌号查询"<<endl;cout<<"\n请选择查询方式:";cin>>i;switch(i){case 1:cout<<"请输入姓名:"<<endl;cin.get();getline(cin,na);cin.get();vector<Person>::iterator p;for(p=Per_vec.begin();p!=Per_vec.end();p++){if( ((*p).GetName()).compare(na) == 0 ){(*p).Display();break;}};break;case 2:cout<<"请输入身份证号:"<<endl;cin.get();getline(cin,id);cin.get();for(p=Per_vec.begin();p!=Per_vec.end();p++){if( ((*p).GetID()).compare(id) == 0 ){(*p).Display();break;}};break;case 3:cout<<"请输入门牌号:"<<endl;cin.get();getline(cin,num);cin.get();for(p=Per_vec.begin();p!=Per_vec.end();p++){if( ((*p).GetNum()).compare(num) == 0 ){(*p).Display();}};break;}}void Change() //信息修改函数{int i;cout<<"1.个人 2.家庭"<<endl;cout<<"\n请选择要操作的对象:";cin>>i;switch(i){case 1:P.Change();break;case 2:F.Change();break;}}void Delete() //信息删除函数{int i;string id;int number;cout<<"1.个人 2.家庭"<<endl;cout<<"请选择要修改的对象:";cin>>i;switch(i){case 1:cout<<"请输入要删除人员的身份证编码:"<<endl;cin.get();getline(cin,id);cin.get();vector<Person>::iterator p;i=sizeof(p);for(p=Per_vec.begin();p!=Per_vec.end();p++){if( ((*p).GetID()).compare(id) == 0 ){Per_vec.erase(p,Per_vec.end()+i);break;}};break;case 2:cout<<"请输入要删除家庭的门牌号:"<<endl;cin>>number;vector<Family>::iterator F;i=sizeof(F);for(F=Fam_vec.begin();F!=Fam_vec.end();F++){if( ((*F).GetNumber())==number){Fam_vec.erase(F,Fam_vec.end()+i);break;}}}}void Look() //信息浏览函数{int i;string na;string id;string num;cout<<"1.按姓名 2.按身份证 3.按门牌号"<<endl;cout<<"请选择浏览方式:";cin>>i;switch(i){case 1:cout<<"请输入姓名:"<<endl;cin.get();getline(cin,na);cin.get();vector<Person>::iterator p;for(p=Per_vec.begin();p!=Per_vec.end();p++){if( ((*p).GetName()).compare(na) == 0 ){(*p).Display();break;}};break;case 2:cout<<"请输入身份证号:"<<endl;cin.get();getline(cin,id);cin.get();for(p=Per_vec.begin();p!=Per_vec.end();p++){if( ((*p).GetID()).compare(id) == 0 ){(*p).Display();break;}};break;case 3:cout<<"请输入门牌号:"<<endl;cin.get();getline(cin,num);cin.get();for(p=Per_vec.begin();p!=Per_vec.end();p++){if( ((*p).GetNum()).compare(num) == 0 ){(*p).Display();}};break;}}main() //主函数{vector <Person> Per_vec;int choice;string na;do{menu();cout<<"请选择要进行的操作:";cin>>choice;if( choice>=0 && choice <= 5 )switch(choice){case 1:Input();break;case 2:Inquiry();break; //信息查询函数case 3:Delete();break; //信息删除函数case 4:Change();break; //信息修改函数case 5:Look();break; //信息浏览函数default:break;}}while(choice);return 0;}六、结束语该系统结构清晰、思路明确简单、功能基本完善、操作简单,可以实现对个人和家庭的基本信息随时进行管理。