人口户籍管理系统C++docx.docx
《人口户籍管理系统C++docx.docx》由会员分享,可在线阅读,更多相关《人口户籍管理系统C++docx.docx(29页珍藏版)》请在冰豆网上搜索。
人口户籍管理系统C++docx
.
*********
软件课程设计实践实验报告
专业班级:
学生姓名:
学号:
实验项目名称:
实验项目性质:
实验所属课程:
实验室(中心):
指导教师:
实验完成时间:
教师评阅意见:
签名:
年月日
实验成绩:
.
.
一选题及说明
2
二系统编写环境
2
2.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
信息输入功能
6
4.3.2
信息查询功能
6
4.3.3
信息删除功能
6
4.3.4
信息修改功能
6
4.3.5
信息浏览功能
6
4.3.6退出系统
6
五程序源代码
6
六结束语
20
七参考文献
20
.
.
一、选题及说明
题目:
人口户籍信息管理系统
人口户籍信息管理系统是一个简易的管理个人和家庭信息的系统,主要对个人和家庭的基本信息进行管理,个人基本信息包括姓名、性别、出生日期、民族、政治面貌、宗教信仰、身份证编码、联系方式、住址和门牌号,家庭的基本信息包括住址、人口数和门牌号。
管理系统主要有信息输入、信息查询、信息删除、信息修改和信息浏览五大功能。
二、系统编写环境
1.
软件环境:
Windows7(64位)VisualC++6.0
2.
硬件环境:
CPUI55200URAM8G1600MHz
硬盘500G5400转
三、主要功能说明
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.信息删除界面:
信息删除界面主要是由用户输入要删除信息的身份证编码进行信息删除,如下图:
.
.
5.信息修改界面:
信息修改界面主要由个人或家庭的基本信息组成,提示用户选择要修改的项目,用户选择进行修改,如下图:
6.信息浏览界面:
信息浏览界面主要提示用户选择要进行浏览的方式,有按姓名、按身份证号和按门牌号三种方式,如下图:
.
.
(三)、功能实现:
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
#include
#include
.
.
usingnamespacestd;
#defineSIZE80
classPerson
{
stringName;//姓名
stringSex;//性别
stringBirth;//出生日期
stringFolk;//民族
stringPol_sta;//政治面貌
stringBelief;//宗教信仰
stringID;//身份证编码
stringTel;//联系方式
stringAdd;//住址
stringNum;//门牌号
inti;
public:
Person();//无参构造函数
Person(stringna,stringsex,stringbirth,stringfolk,stringpol_sta,string
belief,stringid,stringtel,stringadd,stringnum);//带参构造函数
Person(constPerson&per);//拷贝构造函数
~Person();//析构函数
stringGetName();//提取姓名
stringGetSex();//提取性别
stringGetBirth();//提取出生日期
stringGetFolk();//提取民族
stringGetPol_sta();//提取政治面貌
stringGetBelief();//提取宗教信仰
stringGetID();//提取身份证编码
stringGetTel();//提取联系方式
stringGetAdd();//提取地址
stringGetNum();//提取门牌号
voidDisplay()const;//显示学生信息
voidSet();//输入学生信息
voidChange();//修改个人信息
};
classFamily
{
private:
stringAddress;//住址
intNumber;//门牌号
intPop;//人口数目
public:
Family();
.
.
Family(stringaddress,intnumber,intpop);
~Family();
voidSet();//信息输入
voidDisplay();//信息输出
voidChange();//信息修改
intGetNumber();//门牌号返回函数
};
Person:
:
Person()
{i=0;}//构造函数Person:
:
Person(stringna,stringsex,stringbirth,stringfolk,stringpol_sta,stringbelief,stringid,stringtel,stringadd,stringnum){
Name=na;
Sex=sex;
Birth=birth;
Folk=folk;
Pol_sta=pol_sta;
Belief=belief;
ID=id;
Tel=tel;
Add=add;
Num=num;
}
Person:
:
Person(constPerson&per)//拷贝构造函数
{
Name=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()//析构函数
{}
stringPerson:
:
GetName()//提取姓名
{returnName;}
stringPerson:
:
GetSex()//提取性别
.
.
{returnSex;}
stringPerson:
:
GetBirth()
//
提取出生日期
{returnBirth;}
stringPerson:
:
GetFolk()
//
提取民族
{returnFolk;}
stringPerson:
:
GetPol_sta()
//
提取政治面貌
{returnPol_sta;}
stringPerson:
:
GetBelief()
//
提取宗教信仰
{returnBelief;}
stringPerson:
:
GetID()
//
提取身份证编码
{returnID;}
stringPerson:
:
GetTel()
//
提取联系方式
{returnTel;}
stringPerson:
:
GetAdd()
//
提取住址
{returnAdd;}
stringPerson:
:
GetNum()
//
提取门牌号
{returnNum;}
voidPerson:
:
Display()const
//
输出数据信息
{
cout<<"1.姓名:
"<性别:
"<cout<<"\n3.
出生日期:
"<4.
民族:
"<cout<<"\n5.
政治面貌:
"<6.
宗教信仰:
"<cout<<"\n7.
身份证编码:
"<8.
住址:
"<cout<<"\n9.
联系方式:
"<10.
门牌号:
"<}
voidPerson:
:
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);
}
voidPerson:
:
Change()
{
inti;
Display();
cout<<"\n请选择需要修改的项目:
";
cin>>i;
switch(i)
{
case1:
{
cin.get();
cout<<"请重新输入姓名:
";
getline(cin,Name);
};break;
case2:
{
cin.get();
cout<<"请重新输入性别:
";
.
.
getline(cin,Sex);
};break;
case3:
{
cin.get();
cout<<"请重新输入出生日期:
";
getline(cin,Birth);
};break;
case4:
{
cin.get();
cout<<"请重新输入民族:
";
getline(cin,Folk);
};break;
case5:
{
cin.get();
cout<<"请重新输入政治面貌:
";
getline(cin,Pol_sta);
};break;
case6:
{
cin.get();
cout<<"请重新输入宗教信仰:
";
getline(cin,Belief);
};break;
case7:
{
cin.get();
cout<<"请重新输入身份证编码:
";
getline(cin,ID);
};break;
case8:
{
cin.get();
cout<<"请重新输入住址:
";
getline(cin,Add);
.
.
};break;
case9:
{
cin.get();
cout<<"请重新输入联系方式:
";
getline(cin,Tel);
};break;
case10:
{
cin.get();
cout<<"请重新输入门牌号:
";
getline(cin,Num);
};break;
default:
Change();
}
}
Family:
:
Family()//构造函数
{
Number=0;
Pop=0;
}
Family:
:
~Family()
{}
Family:
:
Family(stringaddress,intnumber,intpop)//带参构造函数
{
Address=address;
Number=number;
Pop=pop;
}
voidFamily:
:
Set()//信息输入
{
cin.get();
cout<<"请输入家庭地址:
";
getline(cin,Address);
cout<<"请输入门牌号:
";
.
.
cin>>Number;
}
voidFamily:
:
Display()
{
cout<<"家庭住址:
"<
cout<<"门牌号:
"<cout<<"家庭人口数:
"<}
voidFamily:
:
Change()
{
inti;
cout<<"1.家庭住址
2.
门牌号"<cout<<"请选择要修改的内容:
";
cin>>i;
switch(i)
{
case1:
{
cin.get();
cout<<"请重新输入家庭地址:
";
getline(cin,Address);
};break;
case2:
{
cout<<"请重新输入门牌号:
";
cin>>Number;
};break;
default:
Change();
}
}
intFamily:
:
GetNumber()
{
returnNumber;
}
vectorPer_vec;
vectorFam_vec;
.
.
PersonP;
FamilyF;
voidmenu();
//
主菜单
voidInput();
//
信息输入
voidInquiry();
//
信息查询
voidChange();
//
信息修改
voidDelete();
//
信息删除
voidLook();
//
信息浏览
voidOutputPer(vector&Per_vec);
voidInputPer(vector&Per_vec);
voidInputFam(vector&Fam_vec);
voidmenu()
{
cout<<"
*
欢迎使用人口户籍信息管理系统*"<cout<<"************************************************************************
********"<cout<<"\n
0.
退出管理系统"<cout<<"\n
1.
信息录入"<cout<<"\n
2.
信息查询"<cout<<"\n
3.
信息删除"<cout<<"\n
4.
信息修改"<cout<<"\n
5.
信息浏览"<
cout<<"********************************************************************************"<cout<<"\n请选择以上操作(0~5)"<}
voidOutputPer(vector&Per_vec)//输出对象数组元素个人
{
intcount=0;
vector:
:
const_iteratorp;
for(p=Per_vec.begin();p!
=Per_vec.end();p++)
{
(*p).Display();
count++;
}
cout<<"学生总人数="<}
voidInputPer(vector&Per_vec)//输入对象数组元素个人
.
.
{
charch;
Personx;
do
{
x.Set();
Per_vec.push_back(x);
cout<<"继续输入吗?
(YorN)"<cin.get();
cin.get(ch);
}while(ch=='Y');
}
voidInputFam(vector&Fam_vec)//输入对象组元素家庭
{
charch;
Familyy;
do
{
y.Set();
Fam_vec.push_back(y);
cout<<"继续输入吗?
(YorN)"<cin.get();
cin.get(ch);
}while(ch=='Y');
}
voidInput()//信息输入函数
{
inti;
cout<<"\n1.个人2.家庭"<cout<<"\n请选择要操作的对象:
";
cin>>i;
switch(i)
{
case1:
InputPer(Per_vec);break;
case2:
InputFam(Fam_vec);break;
}
}
voidInquiry()//信息查询函数
{
inti;
stringna;
.
.
stringid;
stringnum;
cout<<"1.姓名查询2.身份证查询3.门牌号查询"<cout<<"\n请选择查询方式:
";
cin>>i;
switch(i)
{
case1:
cout<<"请输入姓名:
"<cin.get();
getline(cin,na);
cin.get();
vector:
:
iteratorp;
for(p=Per_vec.begin();p!
=Per_vec.end();p++)
{
if(((*p).GetName()).compare(na)==0)
{
(*p).Display();
break;
}
};break;