《面向对象程序设计》课程设计报告-人员信息管理系统.doc

上传人:爱问知识人 文档编号:3259874 上传时间:2019-08-06 格式:DOC 页数:19 大小:334.53KB
返回 下载 相关 举报
《面向对象程序设计》课程设计报告-人员信息管理系统.doc_第1页
第1页 / 共19页
《面向对象程序设计》课程设计报告-人员信息管理系统.doc_第2页
第2页 / 共19页
《面向对象程序设计》课程设计报告-人员信息管理系统.doc_第3页
第3页 / 共19页
《面向对象程序设计》课程设计报告-人员信息管理系统.doc_第4页
第4页 / 共19页
《面向对象程序设计》课程设计报告-人员信息管理系统.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《《面向对象程序设计》课程设计报告-人员信息管理系统.doc》由会员分享,可在线阅读,更多相关《《面向对象程序设计》课程设计报告-人员信息管理系统.doc(19页珍藏版)》请在三一文库上搜索。

1、目 录一、课程设计的目的和要求21、课程设计目的22、课程设计要求2二、实验环境2三、系统需求分析与设计21、系统总框架图22、软件功能描述3四、系统功能的实现31、系统设计的具体步骤32、数据结构描述与定义43、各模块设计54、特色函数分析6五、系统测试与分析71、调试步骤72、调试中出现的问题及其解决方法73、软件试用(测试)84、软件存在的不足与完善对策11六、结论与心得11七、参考文献12一、课程设计的目的和要求1、课程设计目的:1)通过课程设计能使学生掌握学习理论知识时没有注意到的细节, 加深对面向对象程序设计课程的理解,以便更好地掌握基本概念、基本原理及基本实现方法。2)以C+程序

2、设计语言为基础,通过VC+程序的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧。3)同时,可通过实践教学环节增强学生动手解决实际问题的能力,为以后汲取实践经验,具有更强的工程应用能力。2、课程设计要求:1)采用面向对象设计思想, 设计数据结构,能够管理2类人员信息(教师信息学生信息);2)完成输入/输出设计,通过ACCESS文件的表结构存储教师信息和学生信息。3)能实现增、 删、 查、改等基本功能,并能够运用所学的知识进行创新实现个性化的设计。二、实验环境1)硬件平台:PC机一台;2) 软件平台: Windows 2000操作系统,Visual C+6.0程序设

3、计软件;三、系统分析与设计1、系统总框架图2、软件功能描述软件根据使用者权限的不同提供不同限制的功能:1)其中已注册的普通用户可直接通过登录框登录进入功能实现框进行查询及查看原文件、修改密码等操作,但不能更改人员信息原文件内容;2)未注册的用户可通过新用户注册框进行注册,成功后便可以普通用户的身份使用该软件;3)管理员则可以管理员权限身份登录进行查询、修改、增加记录、删除记录、查看原文件等操作,可以通过软件提供的功能直接更改原文件中人员信息;四、系统功能的实现1、系统设计的具体步骤1)运行Access软件创建相关数据库文件(student.mdb文件),其中包含四张表:student信息表、t

4、eacher信息表、login普通用户密码信息存储表、loginAdm管理员密码信息存储表;2)在操作系统下打开ODBC数据源管理器(可在控制面板中找到),选择用户DSN选项卡,添加新数据源(连接的数据库文件为student.mdb),取名为“info”;3)运行VC+6.0软件,新建MFC AppWizardexe工程;4)根据系统功能需求分析创建相应的对话框,添加各控件,并编辑相关代码,打开数据源,将数据源中的各表映射为VC中对应的类(注意:基类为CrecordSet类):student表映射为s类,teacher表映射为t类,login表映射为login类,loginAdm表映射为log

5、inAdmin类;5)编译,调试,运行软件;2、数据结构描述与定义 19 / 19登录对话框类class CZDlg : public CDialogpublic:CZDlg(CWnd* pParent = NULL);enum IDD = IDD_Z_DIALOG ;CComboBoxm_type;CStringm_11;CStringm_12;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV supportprotected:HICON m_hIcon;virtual BOOL OnInitDialog(

6、);afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void Onok();afx_msg void OnButton2();afx_msg void OnRegister();afx_msg void OnModifySecret();DECLARE_MESSAGE_MAP();功能实现框类:class z2 : public CDialogpublic:z2(CWnd* pParent = NULL); /

7、Dialog Data/AFX_DATA(z2)enum IDD = IDD_DIALOG1 ;CListCtrlm_list;CButtonm_sk;CStringm_e1;CStringm_e2;longm_e3;CStringm_e4;CStringm_te2;longm_te3;CStringm_te4;CStringm_te5;CStringm_te7;CStringm_e5;/AFX_DATApublic:int sORt; CRect rectL; CRect rectS;/ Overridesprotected:virtual void DoDataExchange(CData

8、Exchange* pDX); virtual BOOL OnInitDialog();protected:/ Generated message map functions/AFX_MSG(z2)virtual void OnCancel();virtual void OnOK();afx_msg void Onselect();afx_msg void OnModify();afx_msg void Onadd();afx_msg void Ondelete();afx_msg void Onshow();afx_msg void OnRadio1();afx_msg void OnRad

9、io2();afx_msg void OnButton5();afx_msg void Onhide();/AFX_MSGDECLARE_MESSAGE_MAP();teacher表映射到vc的t类:class t : public CRecordsetpublic:t(CDatabase* pDatabase = NULL);DECLARE_DYNAMIC(t)longm_column1;CStringm_column2;longm_column3;CStringm_column4;CStringm_column5;CStringm_column6;CStringm_column7;over

10、ridespublic:virtual CString GetDefaultConnect(); virtual CString GetDefaultSQL(); virtual void DoFieldExchange(CFieldExchange* pFX); ;Student表映射到vc的s类:class s : public CRecordsetpublic:s(CDatabase* pDatabase = NULL);DECLARE_DYNAMIC(s)/ Field/Param Data/AFX_FIELD(s, CRecordset)CStringm_column1;CStrin

11、gm_column2;longm_column3;CStringm_column4;CStringm_column5;/AFX_FIELD/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(s)public:virtual CString GetDefaultConnect(); / Default connection stringvirtual CString GetDefaultSQL(); / Default SQL for Recordsetvirtual void DoFieldExch

12、ange(CFieldExchange* pFX); ;3、各模块设计1)登录模块:a、登录功能实现思想流程图:b、修改密码模块和新用户注册模块操作流程雷同:输入相关信息(用户名、密码、新密码等)如有空提示用户重新输入,否则通过密码表核对信息是否正确错误则重新输入相关信息,否则执行对应操作2)主要功能实现模块a、查询按钮功能的实现流程图:b、另外修改、增加、删除记录等功能的实现也类似于查询,只需分别在实现查询一步后,调用Crecordset类的相关成员函数即可实现;c、折叠对话框中列表框部分功能的实现在特色函数解析中有详细介绍d、单选按钮选择查询对象功能的实现思想也较为简单:在其父框类中设置一

13、“全局”变量“sORt”(生命周期为此父框类执行期间),当sORt=0时,显示学生信息框,保持教师信息隐去的状态,并将sORt变量值传递到查询、修改、增加、删除等功能函数中,以便确定操作对象是student表;当sORt=1时,类似,仅是将操作对象改为了teacher表,并显示教师信息框,保持学生信息隐去的状态;当sORt为其他值时,返回一操作提示框,不能进行任何有效操作。4、特色函数解析感觉各功能按钮函数实现思想都很简单没什么特色,自认为隐藏列表框相关代码有点新意,当然了解相关函数实现起来也不难,以下是功能实现框的初始化函数中一段代码:CRect line;/*rectS,rectL在该框头

14、文件的类声明中定义为CRect对象,以便该框其他函数能使用*/GetWindowRect(&rectL);/默认为获取当前对话框右下角顶点坐标GetDlgItem(IDC_ob)-GetWindowRect(&line);/获取对话框中画的分隔线(图像控件画的/线一样的矩形,其右侧部分即为列表框)右下角顶点坐标rectS.left=rectL.left;rectS.top=rectL.top;rectS.bottom=rectL.bottom;rectS.right=line.right;/*根据line、rectL确定rectS的右下角坐标,两对顶角即可确定一矩形,至此已可确定rectL(原

15、始窗口)和rectS(“切掉”列表框后的窗口)两矩形*/SetWindowPos(NULL,0,0,rectS.Width(),rectS.Height(),SWP_NOMOVE|SWP_NOZORDER);/*初始对话框时显示为“切掉”列表框后的小窗口,这样较符合使用需求,之后使用时根据“显示源文件”按钮的触发显示相应的对话框*/五、系统测试与分析1、调试步骤1)保存代码,编译,连接;2)若报错,则根据错误提示找到错误的具体位置,进行相关修改;(可直接F4键)3)若错误不能轻易找出,就设置断点,进行跟踪调试,找到根本原因所在;4)直至成功编译、连接之后,运行软件进行功能测试;2、调试中出现的

16、问题及其解决方法1)开始进入功能实现框时,学生信息框和教师信息框都没隐掉,用户可在任意框中输入信息,而不先去选择查询对象,软件不能准确判断应去查询哪张表,可能出现不理想的结果;解决方法:在功能实现框的初始化函数中,通过GetDlgItem()和EnableWindow()函数将学生信息框和教师信息框隐掉,这样用户必须先选对象才能其他操作,按预期的步骤执行,避免更多细节造成的漏洞;2)“修改”按钮消息响应函数开始设计时必须在查询成功后,才能修改正确的目的记录,否则可能张冠李戴,修改了其他的记录,而且添加删除记录时会出错解决方法:开始设计思想是查到目标记录后,指针就只向了需要的记录,后面的操作代码

17、便可在此基础上直接完成相应操作即可;改进时便将修改、添加、删除函数起始端加入查询代码,完后比较是否为需要更改的记录,是的话继续后面操作,这样便可准确实现相应功能了;3)设计权限问题时想使不同权限者享有不同操作权限,原本通过调用两不同窗口便可实现,但那样显得资源冗余,便设想在同一框中实现想要的功能,但若要使在第一个对话框中的选择操作在第二个框体现出,就要在两个框口间设有个传递响应消息的变量,即全局变量,但尝试了很多定义方法,都报“不可处理的外部变量”“此变量未定义”之类错误解决方法:其实很简单,回归课本,使用extern即可,在第一窗口函数中定义此变量,在第二窗口函数中通过extern引用该变量

18、即可,教训千万要打好理论基础;4)设计隐藏列表窗口框时,不能按理想中的那样显示出需要的窗口解决方法:通过MSDN查询到Crect类的定义及相关成员函数使用方法,弄清了GetWindowRect()具体作用,便在几次猜想后的尝试中成功解决。3、软件试用(测试)1)运行软件首先进入用户登录框:2)选择登录方式,否则会出现如下提示框:输入用户名和密码,二者不得有空,否则提示不得为空;若用户名和密码不正确,提示出错,重输;3)验证通过,进入功能实现框: 管理员登录时功能按钮均可用 普通用户登录修改、增加、删除按钮不可用(呈灰色)4)选择单选按钮-学生信息(教师信息),输入学号“208050535”(姓

19、名),查询得相关信息,同时点击显示文件按钮,得如下对话框中信息:5)同时可在登录框选择“修改密码”按钮,进行修改密码操作:(如图1) 图1 图26)对于使用该软件新用户,可在登录框选择新用户注册,成功后便可以普通用户身份正常使用软件:(如图2)若注册的用户名已存在,则返回如下提示框:7)完成需要的操作后,点击“退出”按钮后即可关闭软件;4、软件存在的不足与完善对策1)在打开功能对话框时,两个年龄编辑框中初始显示有“0”,最好为空;对策:在此对话框初始化函数中,先将该编辑框关联的长整型变量转为字符串型,再赋予空值显示出;2)两个日期编辑框关联的变量没有规定为日期类型,而是简单的字符串型,因此当输

20、入任何非日期格式的字符串时,都会被接收存入数据库源文件中,不符合使用需求;策略:可在数据库源文件中将这两个属性改为日期类型,映射为类中变量也为时间类型即可,但如何将初始值设为空仍有待解决;3)只能按一种方式查询学生:学号(教师:姓名)应加设更多种查询方式,扩大其查询功能;对策:例如student表,可分别增加以“姓名”“年龄”等为关键字的查询方式,实现与已完成的查询思想雷同,如以姓名为关键字分别与数据库表中数据项比较,匹配到则将该元组各属性值依次传递给对应编辑框关联的变量进行显示,否则到表末仍未找到匹配项,则查无此记录;4)每次点击单选按钮都会生成新的表头,而不清除先前存在的表头,以至列表控件

21、中表头越积越多,尽管不怎么影响显示效果,但是一不小的缺陷,有待解决完善;六、结论与心得一周课设下来,尽管熬了近两夜,稍有疲惫,但感觉很充实,收获颇丰。头两天没什么头绪,只是在看相关方面资料,大致弄清了程序编译原理,对各个文件作用及其工程组织结构有了一定了解,为后面几天的实践编程打下了基础。之后便根据需要实现的功能进行设计,其间也碰到许多或大或小的问题,在查阅资料后基本都能自己解决,实在应对不了的,在老师指导下也都顺利解决。最后便是较为耗费精力的软件完善过程,此时一切都要从一个客户角度去使用软件,以便发现不足,更好的去完善,尽一切可能使设计趋于人性化,感觉自己在这里对细节的处理还是不错的。整个设

22、计过程:首先使我熟悉了软件设计的一般流程,初步掌握了使用ODBC数据源的数据库管理程序的基本实现方法,对VC的应用熟练度也大大提升;同时设计的过程,本身就是对理论知识的回顾和对新知识的学习,大大强化了我们的理论基础;最后完善调试的过程,不但提升了我们调试程序的能力,更是培养了一种细心、严谨、不断追求完美的态度。我想这些都将会更好的服务于以后的工作,同时也为以后学习明确了方向,促使我们更全面更有效的学习。最后我认为我们现在学的课本知识还比较浅,应多开设这样的课程设计,促使大家更深入的去学习,不断通过实践来强化,当然我想老师的正确引导是很重要的,可以提供一些好的资源,组织同学进行团体性的软件系统设

23、计等(毕竟对资源需求并不苛刻),以便更好的锻炼和提高学生的学习应用能力。七、参考文献 戴博、周杨、李仪等编著.Visual C+程序员成长攻略.中国水利水电出版社 林瑞仲 吴越 编著.Visual C+。NET类库应用实例.电子工业出版社 美David Simon 周瑜萍等编著.Visual C+6.0编程宝典.电子工业出版社附录:源程序代码清单(主要程序清单)1)登录对话对话框:/“登录”按钮的单击消息处理函数代码void CZDlg:Onok() switch(m_type.GetCurSel() /若用户选择管理员权限登录,执行以下代码case 0:loginAdmin temp1;in

24、t flag=0;UpdateData(true);if(strlen(m_11)=0)AfxMessageBox(用户名不能为空!);else if(strlen(m_12)=0)AfxMessageBox(密码不能为空!);elsetemp1.Open();/打开数据库temp1.MoveFirst();doif(strcmp(temp1.m_column1,m_11)!=0)temp1.MoveNext();else if(strcmp(temp1.m_column2,m_12)!=0)AfxMessageBox(用户名和密码不正确!);flag=1;break;elseflag=1;z

25、2 a;isAdm=0;a.DoModal();break;while(!temp1.IsEOF();if(flag=0)AfxMessageBox(此用户非管理员权限!);break; /若用户选择普通用户权限登录,执行以下代码case 1:login temp1;int flag=0;UpdateData(true);if(strlen(m_11)=0)AfxMessageBox(用户名不能为空!);else if(strlen(m_12)=0)AfxMessageBox(密码不能为空!);elsetemp1.Open();/打开数据库temp1.MoveFirst();doif(strc

26、mp(temp1.m_column1,m_11)!=0)temp1.MoveNext();else if(strcmp(temp1.m_column2,m_12)!=0)AfxMessageBox(用户名和密码不正确!);flag=1;break;elseflag=1;z2 a;isAdm=1;a.DoModal();break;while(!temp1.IsEOF();if(flag=0)AfxMessageBox(用户名和密码不正确!);break;/若用户没选择登录方式,执行以下代码default :AfxMessageBox(请先选择登录方式!);2)修改密码对话框/“确定”按钮的单击

27、消息处理函数代码void mima:OnOK() CString str=select * from login;int flag=0;if(!temp.Open(login:dynaset,_T(str)AfxMessageBox(open error);temp.MoveFirst();doif(strcmp(temp.m_column1,m_name)!=0) temp.MoveNext();else if(strcmp(temp.m_column2,m_e1)!=0)AfxMessageBox(用户名和密码不正确!);flag=1;break;else flag=1;if(strlen

28、(m_e2)=0|strlen(m_e3)=0|strlen(m_e1)=0|strlen(m_name)=0)AfxMessageBox(请填写完和确认新的密码!);break; if(strcmp(m_e2,m_e3)!=0)AfxMessageBox(新密码与确认密码不一致,请重新确认!);break;elsetemp.Edit();temp.m_column1=m_name;temp.m_column2=m_e3;temp.Update();temp.Close();AfxMessageBox(修改成功,确定返回登录界面!);break;while(!temp.IsEOF();if(f

29、lag=0)AfxMessageBox(用户名和密码不正确!);3)(新用户)注册框/“注册”按钮的单击消息处理函数代码void registe:OnRegiste() login temp;int flag=0;CString str=select * from login;if(!temp.Open(login:dynaset,_T(str)AfxMessageBox(open error);UpdateData(true);do if(strcmp(temp.m_column1,m_name)!=0)temp.MoveNext();else flag=1;break;while(!tem

30、p.IsEOF();if (flag=1)AfxMessageBox(此用户名已存在,请重新注册!);Elseif(strlen(m_e2)=0|strlen(m_e3)=0|strlen(m_name)=0)AfxMessageBox(请填写完空,每项必填!);else if(strcmp(m_e2,m_e3)!=0)AfxMessageBox(新密码与确认密码不一致,请重新确认!);elsetemp.MoveLast();temp.AddNew();temp.m_column1=m_name;temp.m_column2=m_e3;temp.Update();temp.Close();Af

31、xMessageBox(注册成功,恭喜!);AfxMessageBox(点击确定即将返回登录窗口!);CDialog:OnCancel();4)功能实现框/“学生信息”单选按钮的单击消息处理函数代码void z2:OnRadio1() CString sHeadText=学号,姓名,年龄,籍贯,入学日期;int nWindth10=100,60,50,50,100;for(int i=0;iEnableWindow(false);GetDlgItem(IDC_EDIT6)-EnableWindow(false);GetDlgItem(IDC_EDIT7)-EnableWindow(false)

32、;GetDlgItem(IDC_EDIT8)-EnableWindow(false);GetDlgItem(IDC_EDIT9)-EnableWindow(false);GetDlgItem(IDC_EDIT10)-EnableWindow(false);GetDlgItem(IDC_sk)-EnableWindow(true);GetDlgItem(IDC_EDIT1)-EnableWindow(true); GetDlgItem(IDC_EDIT2)-EnableWindow(true);GetDlgItem(IDC_EDIT3)-EnableWindow(true);GetDlgItem

33、(IDC_EDIT4)-EnableWindow(true);GetDlgItem(IDC_EDIT5)-EnableWindow(true); sORt=1;/“教师信息”单选按钮的单击消息处理函数代码void z2:OnRadio2() CString sHeadText=姓名,年龄,职称,学历,籍贯,工作日期;int nWindth10=60,60,50,50,50,100;for(int i=0;iEnableWindow(true);GetDlgItem(IDC_EDIT6)-EnableWindow(true); GetDlgItem(IDC_EDIT7)-EnableWindow

34、(true);GetDlgItem(IDC_EDIT8)-EnableWindow(true);GetDlgItem(IDC_EDIT9)-EnableWindow(true);GetDlgItem(IDC_EDIT10)-EnableWindow(true);GetDlgItem(IDC_sk)-EnableWindow(false); GetDlgItem(IDC_EDIT1)-EnableWindow(false); GetDlgItem(IDC_EDIT2)-EnableWindow(false);GetDlgItem(IDC_EDIT3)-EnableWindow(false);Ge

35、tDlgItem(IDC_EDIT4)-EnableWindow(false);GetDlgItem(IDC_EDIT5)-EnableWindow(false); sORt=0;/“查询”按钮的单击消息处理函数代码void z2:Onselect() if(sORt=1)s temp1;int flag1=0;UpdateData(true);temp1.Open();/打开数据库 if(strlen(m_e1)=0)AfxMessageBox(学号不能为空!);elsetemp1.MoveFirst();doif(strcmp(temp1.m_column1,m_e1)!=0)temp1.

36、MoveNext();elsem_e1=temp1.m_column1;m_e2=temp1.m_column2;m_e3=temp1.m_column3;m_e4=temp1.m_column4;m_e5=temp1.m_column5;AfxMessageBox(查询成功!);UpdateData(false);temp1.Close();flag1=1;break;while(!temp1.IsEOF();if(flag1=0)AfxMessageBox(查无此记录!);else if(sORt=0)t temp2;int flag2=0;UpdateData(true);temp2.O

37、pen();/打开数据库if(strlen(m_te2)=0)AfxMessageBox(姓名不能为空!);elsetemp2.MoveFirst();doif(strcmp(temp2.m_column2,m_te2)!=0)temp2.MoveNext();elsem_te2=temp2.m_column2;m_te3=temp2.m_column3;m_te4=temp2.m_column4;m_te5=temp2.m_column5;m_te7=temp2.m_column7;AfxMessageBox(查询成功!);UpdateData(false);temp2.Close();fl

38、ag2=1;break;while(!temp2.IsEOF();if(flag2=0)AfxMessageBox(查无此记录!);elseAfxMessageBox(请先选择查询对象!);/“修改”按钮的单击消息处理函数代码void z2:OnModify() if(sORt=1)s temp1;CString str1=select * from student;int flag1=0;if(!temp1.Open(s:dynaset,_T(str1)AfxMessageBox(open error);UpdateData(true);if(strlen(m_e1)=0)AfxMessag

39、eBox(学号不能为空!);elsetemp1.MoveFirst();do if(strcmp(temp1.m_column1,m_e1)!=0)temp1.MoveNext();else temp1.Edit();temp1.m_column1=m_e1;temp1.m_column2=m_e2;temp1.m_column3=m_e3;temp1.m_column4=m_e4;temp1.m_column5=m_e5;temp1.Update();temp1.Close();AfxMessageBox(修改成功!);flag1=1;break;while(!temp1.IsEOF();i

40、f (flag1=0)AfxMessageBox(查无此记录,操作失败!);else if(sORt=0)t temp2;CString str2=select * from teacher;int flag2=0;if(!temp2.Open(t:dynaset,_T(str2)AfxMessageBox(open error);UpdateData(true);if(strlen(m_te2)=0)AfxMessageBox(姓名不能为空!);elsetemp2.MoveFirst();do if(strcmp(temp2.m_column2,m_te2)!=0)temp2.MoveNex

41、t();else temp2.Edit();temp2.m_column2=m_te2;temp2.m_column3=m_te3;temp2.m_column4=m_te4;temp2.m_column5=m_te5;temp2.m_column7=m_te7;temp2.Update();temp2.Close();AfxMessageBox(修改成功!);flag2=1;break;while(!temp2.IsEOF();if (flag2=0)AfxMessageBox(查无此记录,操作失败!);else AfxMessageBox(请先选择查询对象!);/“添加”按钮的单击消息处理函数代码void z2:Onadd() if(sORt=1)s temp1;CString str1=select * from student; temp1.Open(s:dynaset,_T(str1);UpdateDat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1