




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告课题名称c+面向对象程序设计课题名称犀利公司人事管理系统班级 姓名 学号 指导助教 2013年9月15日一、设计内容与设计要求1.课程设计目的面向对象程序设计课程设计是集中实践性环节之一,是学习完面向对象程序设计课程后进行的一次全面的综合练习。要求学生达到熟练掌握c+语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。2.课题题目1)犀利公司人事管理系统2)学生成绩管理系统 3文档设计要求1)设计课题题目:每个同学都完成2道课题。后面有范题,仅供同学们参考,不列入本次课程设计的课题。2)对于第1题,按照范题的格式,根据本学期的作业要求,重新整理“犀利公司人事管理系统”的软件需求,对软件架构进行整体设计。设计文档要求需要满足第4点要求。(3)对于第2题,自行虚构软件需求,并按照第4点要求,编写设计文档。同时,第2题软件系统中设计的类的数目不少于4个,每个类中要有各自的属性(多于3个)和方法(多于3个);需要定义一个抽象类,采用继承方式派生这些类。并设计一个多重继承的派生类。在程序设计中,引入多函数的多态性、运算符重载等机制。4. 程序设计的基本要求: (1)要求利用面向对象的方法以及c+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)根据课题完成以下主要工作:完成系统需求分析:包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。完成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。完成系统详细设计:数据文件;类层次图;界面设计与各功能模块实现。系统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。使用说明书及编程体会:说明如何使用你编写的程序,详细列出每一步的操作步骤。关键源程序(带注释)(4)自己设计测试数据,将将测试数据存在文件中,通过文件来进行数据读写来测试。(5)按规定格式完成课程设计报告,并在网络学堂上按时提交。(6)不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。5.创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 二、进度安排小学期第 1 周小学期第 2 周注:1、一定要保留自己那个课题的完整任务书在课程设计报告里面。 2、“评分表”放在“附录:源程序清单”的后面。犀利公司人事管理系统目录一、 系统需求分析二、 总体设计三、 详细设计四、 系统调试五、 使用说明书六、 编程体会附录一:源程序清单附录二:评分表一、 系统需求分析犀利公司人事系统记录了公司员工的相关信息,它包括以下基本信息:员工的姓名、工号、工种、等级和月工资,对于特定工种的员工还有特定信息,例如:技术工人的工作时间、销售员的月销售额以及销售经理的下属销售员、总销售额。同时,考虑到用户友好性,通过mfc实现了图形化界面,设计的犀利公司人事系统实现了以下功能:1) 添加员工信息:选择待添加的员工的工种,自动生成该员工的工号(并以只读的形式出现在屏幕上告知用户),从键盘输入相应员工的信息。其中,经理(manager)需要输入姓名、等级,工号格式为20131xxx;工人(technician)需要输入姓名、等级、工作时间,工号格式为20132xxx;销售员(salesman)需要输入姓名、等级、销售额和所属的销售经理的序号(1,2,),工号格式为20133xxx;销售经理(salesmanager)需要输入姓名、等级。注明:由于员工工资与员工的工种及等级挂钩,因此不需要输入,当查询时经过计算给出,工资的计算公式如下:经理:固定12000 每升一级+10%技术工:260*小时 每升一级+40/小时销售员:5%销售额 每升一级+5销售经理:8000+4%总销量 每升一级(4%)+52) 修改员工信息。选择待修改的员工的工种,进而选择待修改的员工的工号(页面会给出下拉菜单以避免用户输入无效的工号),选择后自动填充原有的信息,用户只需选中原有的信息进行修改即可系统显示菜单 开始用户选择功能系统执行具体功能用户选择退出ny退出系统3) 查询员工信息。选择待修改的员工的工种,进而选择待修改的员工的工号(页面会给出下拉菜单以避免用户输入无效的工号),页面中即可显示该员工的相应信息。如果输入的员工号没有对应员工,则显示“查无此人”。每次查询前自动清屏。系统流程图:二、 总体设计 系统功能分析人事管理系统包括三个主要功能,即:添加信息、修改信息、查询信息。员工的基本信息包括姓名、工号、工种、等级和月工资,对于特定工种的员工还有特定信息,例如:技术工人的工作时间、销售员的月销售额以及销售经理的下属销售员、总销售额。 添加信息首先由用户选择待添加的员工的工种,从而弹出对应的对话框,由用户输入相应员工信息。 修改信息首先由用户选择待添加的员工的工种,从而弹出对应的对话框,当用户选择好工号后,自动填充原有信息,用户在此基础上修改确定即可。 查询信息由用户输入需要查询的员工的工号,如果文件中存在则显示相应的信息,如果文件中不存在则告知用户信息不存在。 系统功能模块划分与设计图1 犀利公司人事系统功能模块图三、 详细设计 类层次图2 犀利公司人事系统中四个类的类层次结构 功能模块的实现图3 主菜单功能函数及截图 员工信息添加功能模块图4 添加功能示意图及截图 员工信息修改功能模块图5 修改功能示意图及截图 员工信息添加功能模块图6 查询功能示意图及截图 类的uml图四、 系统调试由于主要的功能在春季学期的学习中已经得以初步实现,所以我在这次设计中把主要精力放在了实现可视化上。第一次用mfc可视化编程,当然遇到了不少问题。 unicode与ansimfc中所有对话框的字符均默认为unicode编码,需要用tchar类型,而之前从未接触过,就直接用了char类型,结果报错连连。通过查阅网上的技术博文,了解到其中区别,并学习了用int multibytetowidechar(uint codepage, dword dwflags, lpcstr lpmultibytestr, int cchmultibyte, lpwstr lpwidecharstr, int cchwidechar);原型函数编写相关的tcharchar转换函数。 内存泄露问题字符类型转换后存在一个问题,即字符类型转换函数的返回类型是动态分配的字符数组,返回到上一级函数中不能释放,容易造成内存泄露问题。怎样实现函数内new、函数外delete,之前并未考虑过。我的方案是将函数返回值赋给一个变量,做了相应处理后再将变量删除,避免了内存泄露问题。五、 使用说明书 测试文件测试文件有data_manager.dat, data_technician.dat, data_salesman.dat, data_salesmanager.dat四个二进制文件,分别存放四个工种(经理、技术工人、销售员、销售经理)的信息。data_manager.dat内容:【条目数+条目1+条目2】每条条目的信息包括工号(4字节)+姓名(64字节)+等级(4字节)data_technician.dat内容:【条目数+条目1+条目2】每条条目的信息包括工号(4字节)+姓名(64字节)+等级(4字节)+工作时间(4字节)data_salesman.dat内容:【条目数+条目1+条目2】每条条目的信息包括工号(4字节)+姓名(64字节)+等级(4字节)+所属经理序号(4字节)+销售额(4字节)data_salesmanager.dat内容:【条目数+条目1+条目2】每条条目的信息包括工号(4字节)+姓名(64字节)+等级(4字节) 测试、操作步骤 主界面 数据添加页面选择相应工种(以technician为例)点击“确定”即可添加。 数据修改界面操作与数据添加页面类似(以salesman为例)点击“确定修改”即可修改。 数据查询界面六、 编程体会此次编程是我第一次接触比较大的工程,而且是第一次用mfc,因此有一些比较深刻的体会。首先是关于编程基本能力。mfc是比较方便上手的,只需在工具箱中拖拽需要的对话框,双击对话框敲入相应代码即可,但是在调试阶段经常会遇到平常编程没有遇到的问题,问题往往出在内存泄露及其相关的方面,有的甚至利用搜索引擎也不能解决。但是经过调试发现,常常是不仔细造成指针越界等普通问题在mfc多窗口返回的时候发生了严重错误。由此可见,万丈高楼平地起,平时养成良好的编程习惯,对今后熟练掌握其他工具是非常重要的。其次, mfc中很多东西是全新的,手头并没有现成的教材,因此我不仅从图书馆中借出教材,而且充分利用csdn、stack overflow等国内外网站上的信息,解决了编程过程中发现的问题,提升了解决问题的能力,我想这对今后的学习也会有很大的帮助。当然这次编程还有一些不足。比如功能比较单一,只是实现了最基本的功能,如果要实际应用还会遇到更加复杂的问题,比如员工改变工作岗位(这里就暂且认为各就其位)。程序的鲁棒性等也有待考察,比如销售员对应的销售经理序号可能指向一个不存在的销售经理等等。由此也反映出,软件工程的需求是随着客户的要求而不断改变的,软件的功能需要根据这些要求得到可持续性的增强和改进。附录一、源程序清单 头文件/ stdafx.h : 标准系统包含文件的包含文件,/ 或是经常使用但不常更改的/ 特定于项目的包含文件#pragma once#ifndef _secure_atl#define _secure_atl 1#endif#ifndef vc_extralean#define vc_extralean / 从windows 头中排除极少使用的资料#endif#include targetver.h#define _atl_cstring_explicit_constructors / 某些cstring 构造函数将是显式的/ 关闭mfc 对某些常见但经常可放心忽略的警告消息的隐藏#define _afx_all_warnings#include / mfc 核心组件和标准组件#include / mfc 扩展#include / mfc 自动化类#ifndef _afx_no_ole_support#include / mfc 对internet explorer 4 公共控件的支持#endif#ifndef _afx_no_afxcmn_support#include / mfc 对windows 公共控件的支持#endif / _afx_no_afxcmn_support#ifdef _unicode#if defined _m_ix86#pragma comment(linker,/manifestdependency:type=win32 name=microsoft.windows.common-controls version= processorarchitecture=x86 publickeytoken=6595b64144ccf1df language=*)#elif defined _m_ia64#pragma comment(linker,/manifestdependency:type=win32 name=microsoft.windows.common-controls version= processorarchitecture=ia64 publickeytoken=6595b64144ccf1df language=*)#elif defined _m_x64#pragma comment(linker,/manifestdependency:type=win32 name=microsoft.windows.common-controls version= processorarchitecture=amd64 publickeytoken=6595b64144ccf1df language=*)#else#pragma comment(linker,/manifestdependency:type=win32 name=microsoft.windows.common-controls version= processorarchitecture=* publickeytoken=6595b64144ccf1df language=*)#endif#endif/ xili.h : project_name 应用程序的主头文件/#pragma once#ifndef _afxwin_h_#error 在包含此文件之前包含“stdafx.h”以生成pch 文件#endif#include resource.h/ 主符号/ cxiliapp:/ 有关此类的实现,请参阅xili.cpp/class cxiliapp : public cwinapppublic:cxiliapp();/ 重写public:virtual bool initinstance();/ 实现declare_message_map();extern cxiliapp theapp;/ xilidlg.h : 头文件/#pragma once/ cxilidlg 对话框class cxilidlg : public cdialog/ 构造public:cxilidlg(cwnd* pparent = null);/ 标准构造函数/ 对话框数据enum idd = idd_xili_dialog ;protected:virtual void dodataexchange(cdataexchange* pdx);/ ddx/ddv 支持/ 实现protected:hicon m_hicon;/ 生成的消息映射函数virtual bool oninitdialog();afx_msg void onsyscommand(uint nid, lparam lparam);afx_msg void onpaint();afx_msg hcursor onquerydragicon();declare_message_map()public:afx_msg void onbnclickedbutton4();afx_msg void onbnclickedbutton3();afx_msg void onbnclickedbutton2();afx_msg void onbnclickedbutton1();/employee.h#pragma once#include using namespace std;class employeepublic:employee();employee(int no,char*n,unsigned int p,unsigned g);virtual employee();virtual void display_information(clistbox&);/虚函数display_information,将员工的信息打印在屏幕上virtual void save_information(fstream &);/虚函数save_information,将员工的信息保存在文件中virtual void get_information(fstream &);/虚函数get_information,将文件中保存的员工信息写进来friend istream &operator(istream&,employee&);friend ostream &operator(istream&,manager&);friend ostream &operator(istream&,technician&);friend ostream &operator(istream&,salesman&);friend ostream &operator(istream&,salesmanager&);friend ostream &operator(ostream&,salesmanager&);friend int multibyte2widechar(uint,dword,lpcstr,int,lpwstr,int);friend char* inttostring(int);protected:salesman *pt_salesman;int total_sales;class welcomepublic:welcome();welcome();/globalvar.h 全局变量的声明#pragma once#include #include employee.hextern int manager_n,technician_n,salesman_n,salesmanager_n;extern manager* obj_man;extern technician* obj_tech;extern salesman* obj_sal;extern salesmanager* obj_salman;extern char* wide2bytes(tchar* );extern tchar*bytes2wide(char *);extern int multibyte2widechar(uint,dword,lpcstr,int,lpwstr,int);extern int sal_num;extern double stringtodouble(char *);extern char* inttostring(int);/button1dlg.h #pragma once#include afxwin.h/cbutton1dlg 对话框class cbutton1dlg : public cdialogdeclare_dynamic(cbutton1dlg)public:cbutton1dlg(cwnd* pparent = null); / 标准构造函数virtual cbutton1dlg();/ 对话框数据enum idd = idd_dialog3 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:ccombobox m_cb;virtual bool oninitdialog();afx_msg void oncbnselchangecombo1();/button2dlg.h #pragma once#include afxwin.h/ cbutton2dlg 对话框class cbutton2dlg : public cdialogdeclare_dynamic(cbutton2dlg)public:cbutton2dlg(cwnd* pparent = null); / 标准构造函数virtual cbutton2dlg();/ 对话框数据enum idd = idd_dialog2 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:virtual bool oninitdialog();afx_msg void oncbnselchangecombo1();ccombobox m_cb;/button3dlg.h #pragma once#include afxwin.h/ cbutton3dlg 对话框class cbutton3dlg : public cdialogdeclare_dynamic(cbutton3dlg)public:cbutton3dlg(cwnd* pparent = null); / 标准构造函数virtual cbutton3dlg();/ 对话框数据enum idd = idd_dialog1 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:afx_msg void onenchangeedit1();afx_msg void onbnclickedok();cedit m_edit1;clistbox m_list;/input1dlg.h#pragma once#include afxwin.h/ cinput1dlg 对话框class cinput1dlg : public cdialogdeclare_dynamic(cinput1dlg)public:cinput1dlg(cwnd* pparent = null); / 标准构造函数virtual cinput1dlg();/ 对话框数据enum idd = idd_input_1 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:afx_msg void onbnclickedok();cedit mc_no;cedit mc_name;cedit mc_grade;virtual bool oninitdialog();/input2dlg.h#pragma once#include afxwin.h/ cinput2dlg 对话框class cinput2dlg : public cdialogdeclare_dynamic(cinput2dlg)public:cinput2dlg(cwnd* pparent = null); / 标准构造函数virtual cinput2dlg();/ 对话框数据enum idd = idd_input_2 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:afx_msg void onbnclickedok();cedit mc_no;cedit mc_name;cedit mc_grade;cedit mc_time;virtual bool oninitdialog();/input3dlg.h#pragma once#include afxwin.h/ cinput3dlg 对话框class cinput3dlg : public cdialogdeclare_dynamic(cinput3dlg)public:cinput3dlg(cwnd* pparent = null); / 标准构造函数virtual cinput3dlg();/ 对话框数据enum idd = idd_input_3 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:afx_msg void onbnclickedok();cedit mc_no;cedit mc_name;cedit mc_grade;cedit mc_sales;cedit mc_man;virtual bool oninitdialog();/input4dlg.h#pragma once#include afxwin.h/ cinput4dlg 对话框class cinput4dlg : public cdialogdeclare_dynamic(cinput4dlg)public:cinput4dlg(cwnd* pparent = null); / 标准构造函数virtual cinput4dlg();/ 对话框数据enum idd = idd_input_4 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:cedit mc_no;cedit mc_name;cedit mc_grade;afx_msg void onbnclickedok();virtual bool oninitdialog();/input21dlg.h#pragma once#include afxwin.h/ cinput21dlg 对话框class cinput21dlg : public cdialogdeclare_dynamic(cinput21dlg)public:cinput21dlg(cwnd* pparent = null); / 标准构造函数virtual cinput21dlg();/ 对话框数据enum idd = idd_input_21 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:virtual bool oninitdialog();ccombobox m_no;afx_msg void oncbnselchangecombo1();cedit m_name;cedit m_grade;afx_msg void onbnclickedok();/intput22dlg.h#pragma once#include afxwin.h/ cinput22dlg 对话框class cinput22dlg : public cdialogdeclare_dynamic(cinput22dlg)public:cinput22dlg(cwnd* pparent = null); / 标准构造函数virtual cinput22dlg();/ 对话框数据enum idd = idd_input_22 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:virtual bool oninitdialog();ccombobox m_no;cedit m_name;cedit m_grade;cedit m_time;afx_msg void oncbnselchangecombo1();afx_msg void onbnclickedok();/input23dlg.h#pragma once#include afxwin.h/ cinput23dlg 对话框class cinput23dlg : public cdialogdeclare_dynamic(cinput23dlg)public:cinput23dlg(cwnd* pparent = null); / 标准构造函数virtual cinput23dlg();/ 对话框数据enum idd = idd_input_23 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:ccombobox m_no;virtual bool oninitdialog();cedit m_name;cedit m_grade;cedit m_sales;cedit m_man;afx_msg void oncbnselchangecombo1();afx_msg void onbnclickedok();/input24dlg.h#pragma once#include afxwin.h/ cinput24dlg 对话框class cinput24dlg : public cdialogdeclare_dynamic(cinput24dlg)public:cinput24dlg(cwnd* pparent = null); / 标准构造函数virtual cinput24dlg();/ 对话框数据enum idd = idd_input_24 ;protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv 支持declare_message_map()public:ccombobox m_no;virtual bool oninitdialog();cedit m_name;cedit m_grade;afx_msg void oncbnselchangecombo1();afx_msg void onbnclickedok(); 源文件/ xili.cpp : 定义应用程序的类行为。/#include stdafx.h#include xili.h#include xilidlg.h#ifdef _debug#define new debug_new#endif/ cxiliappbegin_message_map(cxiliapp, cwinapp)on_command(id_help, &cwinapp:onhelp)end_message_map()/ cxiliapp 构造cxiliapp:cxiliapp()/ todo: 在此处添加构造代码,/ 将所有重要的初始化放置在initinstance 中/ 唯一的一个cxiliapp 对象cxiliapp theapp;/ cxiliapp 初始化bool cxiliapp:initinstance()/ 如果一个运行在windows xp 上的应用程序清单指定要/ 使用comctl32.dll 版本6 或更高版本来启用可视化方式,/则需要initcommoncontrolsex()。否则,将无法创建窗口。initcommoncontrolsex initctrls;initctrls.dwsize = sizeof(initctrls);/ 将它设置为包括所有要在应用程序中使用的/ 公共控件类。initctrls.dwicc = icc_win95_classes;initcommoncontrolsex(&initctrls);cwinapp:initinstance();afxenablecontrolcontainer();/ 标准初始化/ 如果未使用这些功能并希望减小/ 最终可执行文件的大小,则应移除下列/ 不需要的特定初始化例程/ 更改用于存储设置的注册表项/ todo: 应适当修改该字符串,/ 例如修改为公司或组织名setregistrykey(_t(应用程序向导生成的本地应用程序);cxilidlg dlg;m_pmainwnd = &dlg;int_ptr nresponse = dlg.domodal();if (nresponse = idok
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中级审计师广泛试题与答案
- 审计报告撰写中的逻辑与思维架构试题及答案
- 常见职业病的护理知识试题及答案
- 入团考试2025年社会参与度试题及答案
- 2025年中级会计考试解答技巧试题与答案
- 上海市奉贤区致远高级中学2021-2022学年高二下学期期中在线教学评估地理试题 含解析
- 四川省绵阳市三台中学校2023-2024学年高一上学期期末适应性考生物 含解析
- 2023届浙江省嘉兴市高三下学期二模物理 含解析
- 2025初级护师心理健康试题及答案
- 22025初级护师常考试题及答案详解
- 2021年中原工学院辅导员招聘笔试试题及答案解析
- 作业许可检查表
- 朝阳区编制外岗位应聘人员报名表
- 城市雕塑艺术工程工程量计价清单定额2022年版
- 人教版一年级起点小学二年级英语下册全套教案
- 绩溪事业单位招聘考试《行测》历年真题汇总及答案解析精选V
- 湘美版美术三年级下册 《渔家乐-蟳埔情》课件(共20张PPT)
- 农产品集中交易市场等级技术规范-编制说明
- 第四课:印巴战争
- 武汉绿地中心项目技术管理策划书(48页)
- 小学一年级人民币学具图片最新整理直接打印
评论
0/150
提交评论