PfqvvjC实习报告.docx
《PfqvvjC实习报告.docx》由会员分享,可在线阅读,更多相关《PfqvvjC实习报告.docx(21页珍藏版)》请在冰豆网上搜索。
PfqvvjC实习报告
|
||生活|
一个人总要走陌生的路,看陌生的风景,听陌生的歌,然后在某个不经意的瞬间,你会发现,原本费尽心机想要忘记的事情真的就这么忘记了..
|-----郭敬明
面向对象程序设计
报告
课题:
面向对象程序设计
专业:
通信工程
班级:
姓名:
学号:
指导老师:
设计时间:
2010/2011
(2)学期第03-04周
目录
1.实践课题……………………………………………………………3
2.实践要求……………………………………………………………3
3.设计目的……………………………………………………………3
4.实践内容……………………………………………………………4
4.1必做课题:
大学人员类的设计的功能描述以及模块结构…………………………………………………………………………4
4.1.1功能模块描述及主要类描述…………………………………………………4
4.1.2程序代码………………………………………………………………………7
4.1.3使用说明和调试结果…………………………………………………………16
4.1.4必做题小结……………………………………………………………………18
4.2选作课题:
基于RFID设备的隧道工作人员考勤系统………………………………………………………………………18
4.2.1选做题任务分析………………………………………………………………18
4.2.2液晶屏功能实现……………………………………………………………20
4.2.3选做题小结…………………………………………………………………20
5.心得体会……………………………………………………………21
6.参考文献……………………………………………………………21
一.实践课题:
面向对象程序设计
二.实践要求:
2.1.必做课题大学人员类的设计(3月7-8日)
基类,person类,相关的属性自己定义
派生类,student类,teacher类,相关的属性自己定义
Student类和teacher类的属性不相同,利用多态性编辑show函数,可以输出
同类正确的信息。
编辑界面,功能有
(1)输入人员
(2)删除人员(3)保存人员(4)查询人员
2.2选作课题(二者必选一,六人一大组,三人一小组,每个同学必须作不同的功能模块,要求选出组长,分配任务,)(3月9-18日)
2.2.1.基于RFID设备的隧道工作人员考勤系统
(1)
与必做课题结合,将每个卡与人员姓名,工种绑定,进入即可显示人员的相关信息。
两台RFID读卡器,从1-2表示进入隧道,从2-1表示退出隧道,据此,统计当前隧道里面的人员总数与姓名。
2.2.2基于RFID设备的隧道工作人员考勤系统
(2)
(1)自学MFC,设计基于MFC设计隧道工作人员考勤系统,具有增、删、改、查询的功能
(2)结合小组1同学做的实时考勤系统,设计基于MFC的隧道工作人员考勤系统
三.实践目的:
通过本次课程设计,使我们在掌握C++程序设计的基本思想、基本概念和基本方法上,能运用所学的知识对一般问题进行分析和程序设计,把C++程序设计语言作为基本工具使用,为今后在专业课程的学习中,使用计算机解决实际问题打好基础。
同时,将理论知识与实践相结合,更加深入的应用C++的知识,也了解和学习MFC的界面开发和界面设计。
让我们学会创新,能够自主学习新的知识,提高我们的自学能力,也考验我们做事的耐心。
四.实践内容:
4.1必做课题:
大学人员类的设计的功能描述以及模块结构
4.1.1功能模块描述及主要类描述
模块一:
输入人员函数
voidinter()//输入函数
{
loop:
intintput;
cout<<"请您选择所要注册的类型"<<'\n'<<"按“1”为普通人员"<<'\n'
<<"按“2”为学生"<<'\n'<<"按“3”为教师"<<'\n'<cin>>intput;
switch(intput)
{
case1:
intputperson(intputtime);intputtime++;break;
case2:
intstudent(intputtime);intputtime++;break;
case3:
intteacher(intputtime);intputtime++;break;
default:
cout<<"抱歉,您输入错误,请重新输入"<}
}
输入添加指定的人员;
模块二:
查找人员函数
voidfinder()
{
point1:
intrun,fin;
charc;
fin=0;
cout<<"请您输入要操作的名字"<<'\n'<stringm;
cin>>m;
for(run=0;run{
if(m==(find[run]->name))
{cout<<"恭喜您查找成功!
"<<'\n'<find[run]->show();fin=1;break;
location=run;
}
}
if(fin==0)
{cout<<"抱歉,没有找到该信息"<<'\n'<fin=0;
cout<<"您想继续查询吗?
(y/n)"<cin>>c;
if(c=='Y'||c=='y')
gotopoint1;
}
查找指定的基本信息;
模块三:
保存人员信息函数
voidsaver()//学生信息保存
{
system("cls");
ofstreamfile;
file.open("D:
\\信息保存.txt",ios:
:
out);
cout<<"\n\n\n\n\n\n\t\t\t正在保存,请稍等…"<system("cls");
cout<<"\n\n\n\n\t\t数据保存保存成功!
\n\n"<for(inti=0;i{find[i]->show();
}
file.close();
system("pause");
}
保存指定的信息;
模块四:
删除人员函数
voiddeletemember()
{
chara;
location=0;
finder();
cout<<"是否删除该数据(Y/N)"<cin>>a;
if(a=='Y'||a=='y')
{for(;location{find[location]=find[location+1];}
cout<<"删除成功"<intputtime--;
}
}
删除指定的基本信息。
模块五:
显示函数show(),定义为虚函数实现函数的多态,使在不同类中能够根据变量的多少选择合适的show()函数。
virtualvoidshow();
voidperson:
:
show()
{
cout<<"姓名:
"<"<if(registered==1)
voidstudent:
:
show()
{person:
:
show();
cout<<"学号:
"<}
voidteacher:
:
show()
{
person:
:
show();
cout<<"教师职称:
"<}
本大学人员类的设计采用了面向对象的程序设计方法。
所有的方法均以类为基础。
所涉及到的类包括:
classPerson普通人员类;该类是一个基类,设置了属于私有成员的年龄,以及公有成员gender和name,可以给学生和老师类继承。
且分别定义了ID()、get_name()、get_age()和get_gender()函数。
Classstudent学生类;该类多态继承了普通人员类,加入了成员变量num及成员函数get_num()。
Classteacher教师类;该类同样多态继承了普通人员类。
该类定义了与学生类一样的函数,有着同样的功能。
加入了成员变量position及成员函数get_position()。
4.1.2程序代码
#include
#include
#include
usingnamespacestd;
intintputtime=0;//输入的次数
intregistered=0;//区别注册与查找
intlocation=0;//确定当前位置
classperson
{
private:
intage;
public:
stringgender;//1为男0为女
stringname;
virtualintID();
voidget_name();
voidget_age();
voidget_gender();
virtualvoidshow();
};
intperson:
:
ID()
{return0;}
voidperson:
:
get_name()
{stringn;
cout<<"请您输入姓名"<cin>>n;
name=n;
}
voidperson:
:
get_age()
{inta;
cout<<"请您输入年龄"<cin>>a;
age=a;
}
voidperson:
:
get_gender()
{stringg;
cout<<"请您输入性别'男'或者'女'"<cin>>g;
gender=g;
}
voidperson:
:
show()
{
cout<<"姓名:
"<"<if(registered==1)
{cout<<"恭喜您成功完成注册!
"<}
classstudent:
virtualpublicperson//学生继承
{
public:
intID();
stringnum;
voidget_num();
voidshow();
};
intstudent:
:
ID()
{return1;}
voidstudent:
:
get_num()
{
stringn;
cout<<"请您输入学号"<cin>>n;
num=n;
}
voidstudent:
:
show()
{person:
:
show();
cout<<"学号:
"<}
classteacher:
virtualpublicperson
{
public:
intID();
stringposition;
voidget_position();
voidshow();
};
intteacher:
:
ID()
{return2;}
voidteacher:
:
get_position()
{stringp;
cout<<"请您输入职称"<cin>>p;
position=p;
}
voidteacher:
:
show()
{
person:
:
show();
cout<<"教师职称:
"<}
//注意此处下面变量要为全局变量
personp[200];//学校普通人员变量
students[200];//学生变量
teachert[200];//老师变量
person*find[600];//查找用的指针
voidintputperson(intx)
{
p[x].get_name();
p[x].get_age();
p[x].get_gender();
p[x].ID();
p[x].show();
find[x]=&p[x];
registered=0;//注册时候显示用的
}
voidintstudent(intx)
{
s[x].get_name();
s[x].get_age();
s[x].get_gender();
s[x].get_num();
s[x].ID();
s[x].show();
find[x]=&s[x];
registered=0;
}
voidintteacher(intx)
{
t[x].get_name();
t[x].get_age();
t[x].get_gender();
t[x].get_position();
t[x].ID();
t[x].show();
find[x]=&t[x];
registered=0;
}
voidinter()//输入函数
{
loop:
intintput;
cout<<"请您选择所要注册的类型"<<'\n'<<"按“1”为普通人员"<<'\n'
<<"按“2”为学生"<<'\n'<<"按“3”为教师"<<'\n'<cin>>intput;
switch(intput)
{
case1:
intputperson(intputtime);intputtime++;break;
case2:
intstudent(intputtime);intputtime++;break;
case3:
intteacher(intputtime);intputtime++;break;
default:
cout<<"抱歉,您输入错误,请重新输入"<}
}
voidfinder()
{
point1:
intrun,fin;
charc;
fin=0;
cout<<"请您输入要操作的名字"<<'\n'<stringm;
cin>>m;
for(run=0;run{
if(m==(find[run]->name))
{cout<<"恭喜您查找成功!
"<<'\n'<find[run]->show();fin=1;break;
location=run;
}
}
if(fin==0)
{cout<<"抱歉,没有找到该信息"<<'\n'<fin=0;
cout<<"您想继续查询吗?
(y/n)"<cin>>c;
if(c=='Y'||c=='y')
gotopoint1;
}
voidsaver()//学生信息保存
{
system("cls");
ofstreamfile;
file.open("D:
\\信息保存.txt",ios:
:
out);
cout<<"\n\n\n\n\n\n\t\t\t正在保存,请稍等…"<system("cls");
cout<<"\n\n\n\n\t\t数据保存保存成功!
\n\n"<for(inti=0;i{find[i]->show();
}
file.close();
system("pause");
}
voiddeletemember()
{
chara;
location=0;
finder();
cout<<"是否删除该数据(Y/N)"<cin>>a;
if(a=='Y'||a=='y')
{for(;location{find[location]=find[location+1];}
cout<<"删除成功"<intputtime--;
}
}
voidmain()
{point:
inta;
charb;
cout<<"福建工程学院通信0801信息管理系统"<cout<<"********************************************"<cout<<"按1输入人员"<cout<<"按2查询人员"<cout<<"按3保存成员"<cout<<"按4删除成员"<cout<<"**********************************************"<cout<<"请选择您需要的操作"<cin>>a;
switch(a)
{
case1:
inter();break;
case2:
finder();break;
case3:
saver();break;
case4:
deletemember();break;
default:
gotopoint;
}
cout<<"是否继续操作(Y/N)"<cin>>b;
if(b=='Y'||b=='y')
gotopoint;
else
{cout<<"感谢您的使用!
^_^"<}
4.1.3使用说明和调试结果
(1)使用说明
这是一个关于学生和教师信息管理系统,具有输入、查询、保存、删除的功能,建立了一个含有人员的姓名、性别、年龄、学号、职位等成员的类的变量。
可以选择三类人员进行信息的输入,查询、保存和删除操作。
调试过程中,可按照有关提示进行相关操作:
输入人员信息按“1”键;
查询人员信息按“2”键;
保存人员信息按“3”键;
删除人员信息按“4”键;
同时根据提示进行相关的操作。
(2)调试结果
代码中运用了switch语句调用各子函数,数字1、2、3、4等4个数字代表不同的指令。
程序运行后调试程序代码后出现的总体界面:
按1输入信息后出现如下界面,进行人员信息输入对象的选择:
选择3教师类信息输入如图示,有如下功能:
信息查询功能
信息保存功能
信息保存在:
D:
\\信息保存.txt"
但是此程序中存在一个问题不能符合要求的是:
在运行界面关掉后,再次打开运行界面时,不能够查询到前一个界面的信息。
4.1.4必做题小结
对大学人员类的设计,在系统分析和设计的部分花了比较多的时间。
模块设计部分因为涉及功能的实现,要从抽象的设计转化成实际的代码,因此对于某项功能的实现方法都思考得比较详尽。
由于自己的知识和能力有限,只能在借鉴前人和阅读很多与本系统有相关内容的书籍做参考的基础上,完成此次的系统编写。
由于班里有些同学对编程方面很感兴趣和精通,所以我也经常请教他们,做互相交流。
同时,在交流的过程中能够互相提出更好的建议。
4.2选作课题:
基于RFID设备的隧道工作人员考勤系统
我们组选择的课题是选作课题
(2)即:
(1)自学MFC,设计基于MFC设计隧道工作人员考勤系统,具有增、删、改、查询的功能
(2)结合小组1同学做的实时考勤系统,设计基于MFC的隧道工作人员考勤系统
4.2.1选做题任务分析
由于必做题做的是学生管理系统,同样有输入、删除、查询的功能,与其去编写一个新的程序,倒不如顺着之前对管理系统的理解和程序的掌握继续选择做人员管理系统的输入、查询等操作设计。
选作题要运用到的是MFC设计界面中的对话框编程。
一开始我们对MFC相当的陌生,经过查看相关书籍和请教同学,稍微了解了一些操作。
选作课题我们组六个人分为三小组,每个人完成每一小部分,分别有以下三部分:
①界面;这部分要求完成的是考勤系统的操作界面,包括进入系统,输入所有人员信息的界面,能够查询、删除、修改人员的界面,同时能够自动保存实时处理的数据,以及进行相关功能程序的编写。
其中绑定姓名与ID号则是与第二部分所做的内容的一个连接点。
ID号即为卡号;
②RFID接口;完成当读到卡的ID号时能够显示人员姓名等相关的基本信息,这部分要编写显示信息属性的相关程序,且能够将显示的信息保存在固定的文件中;
③液晶屏显示,将进入隧道人员的姓名及相关信息在LED显示屏上显示出相关信息来。
归纳起来对各小组的要求为:
界面小组的功能要求:
!
,密码登陆,
2,录入人员(每个人员有唯一的ID号,如学号),删除,查询人员的信息
3,将人员与RFID卡绑定
4,所有人员可以保存
5,可以查询人员的考勤记录
这部分我们基本上完成了知识在人员与RFID卡的绑定上与第二部分衔接不上。
RFID小组的功能要求:
1能够获取读卡器发回的ID号
2将ID号与界面小组保存的人员信息比较,找到配对的人名
3将该名人员进行考勤信息保存(人名,ID号,时间)
这部分在第二点与界面相连接找到配对绑定的人员上没有完成,对于绑定的人员和ID卡号的实现部分是在第二部分的程序中单独完成的。
液晶小组的功能要求(vc调用delphi的dll):
1能正确使液晶显示需要显示的信息
2能够将RFID当前读到的人员名单在液晶上进行显示
能够显示所需要的信息,但是正确的信息显示完之后会显示出一连串的未知乱码。
4.2.2液晶屏功能实现
我做的是液晶屏显示这一部分的内容,这部分完成的内容相对于前两部分来讲甚是简单,只需要完成老师给的delphi的dll程序代码的理解,然后将文件流与第二部分RFID结合即可。
LED屏幕的参数设置程序略。
当接入LED显示屏后,将端口参数改成设备管理器的硬件设备端口值,然后运行LedshowTW2011二次开发库(10.12.09)的delphi库程序,此前先将delphi中的dll文件拷贝到VisualC++的工程下(驱动液晶显示器的程序工程下),此步骤即是完成VisualC++对delphi的动态链接库的调用。
然后再在delphi的应用程序页面单击“添加屏幕”、“添加节目”、“添加图文区域”、打开要显示信息的目录,我们的程序中信息存储在:
C:
\\SUIDAO17\\kaoqin.txt文件中,将此文件添加到当前图文区域即可。
LED过缓冲时间后即可显示kaoqin文件中的信息。
由于此部分操作简单,也不需要编写程序,于是实习期间基本上是帮忙做前两部分的同学完成前两部分的内容,其中对界面的编写更为熟悉。
其中较为熟练的掌握事件的实现和界面跳转功能的实现等,其中界面跳转功能的实现如下:
首先在主要界面的类函数前添加要转界面的类的头文件,在按钮函数中加入代码如删shanchudlg;dlg.DoModal();这个代码,就可以实现跳转到删除的界面了。
由于我们是初学MFC,所以只能在程序编写上较多的参考老师及其他已完成同学的程序及做法,只能做到对考勤系统有有个比