资源描述
南京工程学院 课程设计说明书(论文) 题 目 人员管理信息系统 课 程 名 称 面向对象程序设计 B 院(系、部、中心) 通信工程学院 专 业 多媒体通信 班 级 媒体通信 111 学 生 姓 名 崔 学 号 208110502 设 计 地 点 信息楼 C322 指 导 教 师 郭 丽 红 设计起止时间: 2013 年 5 月 27 日至 2013 年 5 月 31 日 成绩 目 录 1系统设计的目的和意义 .8 2系统总框架图 .8 3软件功能描述 .8 4软件代码的设计 .8 41 数据结构描述与定义 9 42 模块设计 9 5软件使用说明 .9 6测试结果与分析 .9 7比较有特色的函数 .9 8存在的不足与对策 .9 9课程设计总结 .9 附录:源程序清单 .9 (正文,宋体,小四,1.5 倍行距,每个段落开头空两格) (字数要求:5000 字左右,页数 10 页左右。 ) 课程设计题目 1系统设计的目的和意义 随着现代高科技的迅速发展,计算机技术也有了突飞猛进的快速发 展,因此为各个行业的普及应用奠定了基础。由于学校教师学生的数目众 多,传统的手工作业已经不再适合学校统计人员信息的需要。传统的手工 作业要处理巨额的数据,由于人员不停地改动,例如教工的调职、离职、 新教师的加入,学生的入学、毕业等,人事部门要不停的更新数据,进行 抄写。由于数据庞大,难免会出现错误,这对于员工管理非常不利。而利 用计算机技术可以方便的、准确的、动态的对企业内部员工进行管理,减 轻了人事部门的任务,节约人力资源,降低了企业的成本。 基于计算机技术的优越性,几乎所有的企业都使用计算机技术来实现 对员工基本信息的管理。本系统将利用计算机技术模拟实现对企业员工的 基本信息管理,主要实现对人员基本信息的管理,包括教师的姓名、年龄、 籍贯、职称、学历、工作日期,学生的姓名、学号、年龄、籍贯、入学日 期。如果有新人员加入该学校,可在添加新人员模块进行添加新人员操作。 如果有人员辞职或退休,学生毕业或退学,也可以进行删除操作,同时可 以通过列表查看所有人员的资料,也可以单独查询某个人员的信息,若是 发现某个人员的信息有误,也可以对进行修改操作。 2系统总框架图 3软件功能描述 (或设计目标或需求分析)对问题的描述应避开具体的算法和涉及的数据 结构,描述系统实现功能及达到的目标。 首先增加一个对话窗口,插入自己设计好的图片,做一个人员信息管理 系统的界面,然后级联一个窗口,做登录界面。 实现用户名/密码的登录。登录界面:通过输入正确的用户名和密码,进 入到人员管理系统的选择界面窗口。 通过选择四个 Button 按钮,分别级联到教师信息窗口,学生信息窗口, 全体教师信息窗口,全体学生信息窗口。 查询:通过 Button 按钮,编写查询代码。可以通过输入关键字对人员信息 进行查询。 添加:通过 Button 按钮,编写添加代码。可以输入相应的人员信息加入到 数据库中。 删除:通过 Button 按钮,编写删除代码。可以删除掉需要删除的人员信息。 欢迎窗口 登录窗口 选择窗口 学生信息教师信息 全体教师信息 全体学生信息 增 加 查 询 删 除 修 改 查 询 增 加 修 改 删 除 全体 教师 信息 窗 口 全体 学生 信息 窗口 修改:通过 Button 按钮,编写修改代码。可以对查询到的人员信息进行信 息修改。 退出:控件自带的 Button 按钮,可以退出界面。 全体教师信息,和全体学生信息:窗口是通过 Listctrl(列表控件)实现 的,在新建的类中添加一个 oninitdialog()函数,然后在函数中写 初始化代码,以及数据库中信息映射到列表中的代码,实现全体人 员信息的查询,便于管理员管理。 4软件代码的设计 说明算法(程序)中用到的所有各种数据结构的描述与定义,核心模块设 计,每个模块的算法描述及流程图(用 WORD,或画图板,或 Visio 画图软件) 建议用 Visio。流程图要规范(有开始,结束,一个入口,一个出口) 。 41 数据结构描述与定义 所用的到的主要数据结构的描述,标准 C+语言定义数据结构 void CCQWDlg:OnOK() /在类 CCQWDlg 中定义用户登录函数 void studentinfo:OnSadd() /在类 studentinfo 中定义增加函数 void studentinfo:OnSearch()/在类 studentinfo 中定义查询函数 void studentinfo:OnSchange()/在类 studentinfo 中定义修改函数 void studentinfo:OnSdelete()/在类 studentinfo 中定义删除函数 void teacherinfo:OnSearch2()/在类 teacherinfo 中定义查询函数 void teacherinfo:OnAdd2() /在类 teacherinfo 中定义增加函数 void teacherinfo:OnDelete2()/在类 teacherinfo 中定义删除函数 void teacherinfo:OnChange2()/在类 teacherinfo 中定义修改函数 BOOL allstu:OnInitDialog() /在类 allstu 中定义 InitDialog 函数 BOOL alltea:OnInitDialog() /在类 alltea 中定义 InitDialog 函数 42 模块设计 系统共分几个模块,每个模块的算法描述及流程图(核心模块) 。 1、登录界面流程图 输入用户名和密码 用户名与密码符合 登录成功 密码错误 结 束 开 始 2、查询模块流程图 开 始 输入关键字 查到关键字 打开数据源 显示记录 No data! 结 束 3、增加模块流程图 4、修改模块流程图 开 始 输入记录 打开数据源 将记录录入数据库 Success 结 束 开 始 5、删除模块流程图 6、列表控件(listctrl 控件)流程图 打开数据源 输入关键字 查到关键字 No data 修改记录 Success 结 束 开 始 打开数据源 输入关键字 查到关键字 删除记录 No data! 结 束 开 始 5软件使用说明 使用本软件之前必须先到数据源里映射下数据库,使它们连接起来。登录时 先 进入登录界面的程序查询一下登陆的用户名和密码。 6测试结果与分析 按系统功能描述(设计目标)测试软件运行是否正确,测试数据的选择要 代表性,列出所有测试用的输入数据和相应的输出数据以及测试结果。 原始数据库: 增加列表控件 增加 oninitdialog()函数 初始化函数 打开数据 源 存在记录 将记录显示到列表控件 指针指向第一条记录 指针指向下一条记录 结 束 程序运行结果: 登录界面: 按登录键进入选择界面: 以教师信息查询为例,输入关键字赵一,点击查询: 点击确定键,结果如下图: 在选择界面点击全体教师信息或全体学生信息如下: 7比较有特色的函数 void CCQWDlg:OnOK() / TODO: Add extra validation here this-UpdateData(true); if(this-m_name=“cuiqianwen“ dlg.DoModal(); else MessageBox(“登录有误“); CCQWDlg dlg; dlg.DoModal(); BOOL allstu:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here m_list.InsertColumn(0,“姓名 “,LVCFMT_LEFT,100); m_list.InsertColumn(1,“年龄 “,LVCFMT_LEFT,100); m_list.InsertColumn(2,“学号 “,LVCFMT_LEFT,100); m_list.InsertColumn(3,“籍贯 “,LVCFMT_LEFT,100); m_list.InsertColumn(4,“入学日期 “,LVCFMT_LEFT,100); / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE student s( CString str=“select * from student“; s.Open(student:dynaset,_T(str); while(!s.IsEOF() int nIndex = m_list.GetItemCount(); nIndex = m_list.InsertItem(nIndex, (char*)(LPCTSTR)str); m_list.SetItemText(nIndex,0,s.m_name); m_list.SetItemText(nIndex,1,s.m_age); m_list.SetItemText(nIndex,2,s.m_number); m_list.SetItemText(nIndex,3,s.m_birth_place); m_list.SetItemText(nIndex,4,s.m_entrance_time); s.MoveNext(); s.Close(); return TRUE; 8存在的不足与对策 系统相对来讲还是较简洁的,若是要进行修改操作的话,需先进行查找,然 后在每一个记录上修改,这样实行起来比较麻烦,可以设置一个弹出窗口,在 弹出的窗口上修改记录。另外,查找时仅仅可以使用主键进行查找,例如学生 仅仅可以通过学号进行查找某个学生信息,教师仅仅可以通过姓名查找某个教 师信息,我们可以通过多写几个语句,可以通过其他的方式查找。 9课程设计总结 总结可以包括 : 课程设计 过程的收获、遇到问题、遇到问题解决问题过程 的思考、程序调试能力的思考、对 C+这门课程的思考、在课程设计过程中对 C+课程的认识等内容 本次课程设计,使我加深了对 C+面向对象程序设计的理解。通过本次课 程设计,我学到了很多知识,C+面向对象是通过类来实现的。由于我们对 vcMFC 编程不熟悉,只通过上课看老师演示一遍是不够的,所以刚开始感觉无 从下手,一片茫然,所以就先看了一些教程,再看了一些关于 MFC 的操作,然 后自己尝试做一些重要的模块,比如窗口的级联,然后熟悉了 MFC。 在做课程设计的时候,我遇到 LE 一些问题。有些问题,和同学一讨论就 可以解决,比如星期一的时候,我们就尝试做窗口的级联,怎么在主窗口之前 插入一个对话框,做了好多遍都不成功,运行时都是直接跳出主窗口,然后上 网查了一下资料,在 MAINFARM.CPP 中插入对话框类的对象,解决了问题。我们 在网上也搜寻解决问题的方法,许多问题都可以解决,比如列表框,即 Listctrl 控件的使用,也得到了解决。在这次课程设计中,我学到了很多知识, 不仅仅是关于 VC+的知识,还学到了遇到困难不能光着急,要积极寻求解决问 题的方法。要懂得和同学交流,然后去共同解决问题。也可以去网上搜寻解决 该方案。毕竟一个人的能力有限,不可能一个人解决所有的问题。课程设计其 实很能锻炼学生解决问题的能力,可以提高我们对 C+的整体认识。 在这次课程设计中我锻炼了我的实际编程能力,以前我只是学习简单的语 法知识,学习对面向对象的理解,其实只有在试验中,才能体会到它的模块性, 它的封装性。这次课程设计的经历为以后的学习和工作积累了很多经验,受益 匪浅。 这次课程设计是我独立完成的,刚开始总是出现错误,找不到解决的 方法,然后就重新做,这让我明白,编程需谨慎,程序中不允许出现任何小的 错误,此外在帮助别人解决问题时,也拓展了我自己解决程序中错误的能力, 怎么从提示错误的语句中发现错误的根源,并改正过来是很重要的。这次课程 设计能够做成功还是有成就感的,非常感谢老师给我们这次课程设计的机会。 附录:源程序清单 编码规范,符合软件工程的要求(变量名,函数名见名知义,注释规范占总程 序行数的 2/5) 。 CQW.CPP #include “stdafx.h“ /CQW 为工程文件名 #include “CQW.h“ #include “CQWDlg.h“ #include “select.h“ /select 为选择对话框的类名 #include “enter.h“ /enter 为欢迎窗口的类名 #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif BOOL CCQWApp:InitInstance() AfxEnableControlContainer(); enter d; /为了使在登录窗口之前跳出欢迎界面 d.DoModal(); #ifdef _AFXDLL Enable3dControls(); / Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); / Call this when linking to MFC statically #endif CCQWDlg dlg; m_pMainWnd = int nResponse = dlg.DoModal(); if (nResponse = IDOK) else if (nResponse = IDCANCEL) return FALSE; CQWDlg.CPP #include “stdafx.h“ #include “CQW.h“ #include “CQWDlg.h“ #include “select.h“ #include “student.h“ #include “afxdb.h“ #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; CDatabase cc; #endif void CCQWDlg:OnOK() /用户名、密码登录 / TODO: Add extra validation here this-UpdateData(true); if(this-m_name=“cuiqianwen“ dlg.DoModal(); else MessageBox(“登录有误“); CCQWDlg dlg; dlg.DoModal(); 以学生为例; #include “stdafx.h“ #include “CQW.h“ #include “studentinfo.h“ #include “student.h“ #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif int flag; CDatabase db; void studentinfo:OnSadd() /增加学生 / TODO: Add your control notification handler code here student s( CString str=“select * from student“; s.Open(student:dynaset,_T(str); UpdateData(true); s.AddNew(); s.m_number=m_sno; s.m_age=m_sage; s.m_name=m_sname; s.m_birth_place=m_sbp; s.m_entrance_time=m_sin; s.Update(); s.Close(); AfxMessageBox(“success“); void studentinfo:OnSearch() /查找学生信息 / TODO: Add your control notification handler code here student s( UpdateData(true); CString str=“select * from student“; s.Open(student:dynaset,_T(str); while(!s.IsEOF() if(m_sno=s.m_number) m_sname=s.m_name; m_sage=s.m_age; m_sbp=s.m_birth_place; m_sin=s.m_entrance_time; flag=1; break; else s.MoveNext(); if(flag=1) AfxMessageBox(“success“); else AfxMessageBox(“no data“); UpdateData(false); s.Close(); void studentinfo:OnSchange() /修改学生信息 / TODO: Add your control notification handler code here student s( CString str=“select * from student“; s.Open(student:dynaset,_T(str); UpdateData(true); while(!s.IsEOF() if(m_sno=s.m_number) flag=1; break; else s.MoveNext(); if(flag=1) s.Edit(); s.m_number=m_sno; s.m_age=m_sage; s.m_name=m_sname; s.m_birth_place=m_sbp; s.m_entrance_time=m_sin; s.Update(); AfxMessageBox(“success“); else AfxMessageBox(“no data“); s.Close(); void studentinfo:OnSdelete() /删除学生信息 / TODO: Add your control notification handler code here student s( CString str=“select * from student“; s.Open(student:dynaset,_T(str); UpdateData(true); while(!s.IsEOF() if(m_sno=s.m_number) flag=1; break; else s.MoveNext(); if(flag=1) s.Delete(); AfxMessageBox(“success“); else AfxMessageBox(“no data“); s.Close(); BOOL allstu:OnInitDialog() /用列表控件显示全体学生信息 CDialog:OnInitDialog(); / TODO: Add extra initialization here m_list.InsertColumn(0,“姓名 “,LVCFMT_LEFT,100); m_list.InsertColumn(1,“年龄 “,LVCFMT_LEFT,100); m_list.InsertColumn(2,“学号 “,LVCFMT_LEFT,100); m_list.InsertColumn(3,“籍贯 “,LVCFMT_LEFT,100); m_list.InsertColumn(4,“入学日期 “,LVCFMT_LEFT,100); / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE student s( CString str=“select * from student“; s.Open(student:dynaset,_T(str); while(!s.IsEOF() int nIndex = m_list.GetItemCount(); nIndex = m_list.InsertItem(nIndex, (char*)(LPCTSTR)str); m_list.SetItemText(nIndex,0,s.m_name); m_list.SetItemText(nIndex,1,s.m_age); m_list.SetItemText(nIndex,2,s.m_number); m_list.SetItemText(nIndex,3,s.m_birth_place); m_list.SetItemText(nIndex,4,s.m_entrance_time); s.MoveNext(); s.Close(); return TRUE; void allstu:OnOK() / TODO: Add extra validation here CDialog:OnOK();
展开阅读全文