公司人员信息管理系统课程设计论文_第1页
公司人员信息管理系统课程设计论文_第2页
公司人员信息管理系统课程设计论文_第3页
公司人员信息管理系统课程设计论文_第4页
公司人员信息管理系统课程设计论文_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vc+ 课程设计报告 公司人事管理系统 学生姓名: 学 号: 年级专业:2007 级信息与计算科学 班 级: 指导老师: 学 院:数学与计算科学学院 目 录 1 前言.3 2 需求分析.4 3 概要设计.4 3.1 系统功能模块设计.4 3.2 流程图 .5 3.3 程序运行平台 .6 4 详细设计 .6 4.1 公司人员信息类的设计.6 4.2 数据的存储 .9 4.3 模块详细分析 .9 4.4 整体界面的实现 .10 4.5 系统登录的实现 .12 4.6 添加.查询.删除和修改记录的实现 .18 4.7(特色)用户注册的实现 .27 5 测试分析.32 6 心得体会.32 参考文献.3

2、3 致 谢.33 公司人员信息管理系统 摘摘 要要 本次课程设计任务是通过编写一个公司人员信息管理系统,学习用 visual c+ 6.0 开发简单的管理系统。采用 visual c+ 6.0 软件为主要开 发工具。 本系统主要完成对公司员工情况和公司信息的管理,包括人员信息的 添加、修改、删除等。系统还可以完成对各类信息的浏览、查询、添加、 删除、修改、等功能。 由于我们还没有学习数据库,所以在有关大量人员信息存储时,次系 统显得心有余而力不足。 系统的核心是引用 i/o 流和文本处理来存储和修改公司人员的信息联 系,每一个动作都可能影响到其它的功能,还有数据的改变,当完成对数 据的操作时系

3、统会自动地完成数据库的修改。 关键字:vc+6.0;公司人员信息管理系统;模块化设计;i/o 流; 1 前言 使用计算机管理人员信息,不但可以大量节省时间、人力、财力、物力,而 且能更全面有效地掌握公司的基本情况,及时获取最新而又准确的资料和信息。 此课程设计就是这样一个管理公司人员信息的系统,其功能与实现方面有比较 好的的针对性和实用性。软件是在 visual c+平台上开发的,采用 i/o 流文本 存储数据和信息,作为虚拟的数据库。利用 i/o 流文本操作语言,能比较方便 地实现对人员信息的操作与管理。 系统登陆功能是系统的核心之一,在系统中有用户注册,用户注销,用户 退出,其目的都是为了

4、方便用户使用。系统有完整的用户对比功能,检查是否 用户名已被注册。 2 需求分析 visual c+6.0 的 mfc 提供了大量的类库函数强大支持。开发一个人员信 息管理系统,可以实现人员信息的管理。并提供新信息输入,现有公司人员信 息查询功能,对记录的删除修改等工作。 公司人员管理系统是典型的信息管理系统(mis),其开发主要包括后台数据 信息的建立和保存以及前端应用程序的开发两个方面。对于前者要求建立起数 据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完 备,易使用等特点。 3 概要设计 公司人员管理系统的概要设计分成两部分,首先是简要介绍系统功能模块 设计,其次是简

5、要介绍流程图。 3.13.1 系统功能模块设计系统功能模块设计 系统功能划分为九个模块,其流程图如图 3-1。各模块功能简要介绍如下: 图 3-1 系统功能模块流程图 1、用户注册: 添加一个系统账户,当输入的用户名未被注册且密码两次输入相同则注册 成功。 2、系统注销: 可以注销当前用户,登陆另一个账户。 3、系统退出: 退出公司人员管理信息系统。 4、信息输入: 输入公司职员的基本信息。 5、信息输出: 输出公司所有职员的信息。 6、信息查询: 查询制定人员的信息。 7、信息修改: 修改指定人员的信息。 8、信息删除: 删除指定人员的信息。 9、信息清空: 清空所有人员的信息。 3.23.

6、2 流程图流程图 系统操作流程图如图 3-2。 图 3-2 功能流程图 3.33.3 程序运行平台程序运行平台 开发工具: visual c+ 运行环境:windows 9x、windows nt/2000、windows xp 4 详细设计 公司人员管理系统的详细设计分成七部分,分别是公司人员信息类的设计、 数据的存储、模块详细分析、整体界面的实现、系统登录的实现、添加.查询.删 除和修改记录的实现以及(特色)用户注册的实现。下面分别加以介绍,其中 某些部分会将具体代码列出。 .公司人员信息类的设计公司人员信息类的设计 公司人员管理系统主要的人员信息主要分为技术员、销售员、经理

7、以及销 售经理等四类人员,为此设计了五个人员信息类分别是 employee(作为基类) 、 technician、salesman、manager 以及 salesmanager,后四个类都公有地继承 了 employee。下面是上述类的设计,即各类的声明,放在了 employee.h 文件 中,而其中所有成员函数的设计见附件。 /employee.h class employee protected: char name20;/姓名 int individualempno; /个人编号 int grade; /级别 float accumpay;/月薪总额 static int employ

8、eeno;/本公司职员编号目前最大值 public: employee();/构造函数 employee();/析构函数 virtual void pay()=0;/计算月薪函数(纯虚函数) virtual void promote(int increment=0); /升级函数(虚函数) void setname(char *); /设置姓名函数 char * getname(); /提取姓名函数 int getindividualempno(); /提取编号函数 int getgrade(); /提取级别函数 float getaccumpay(); /提取月薪函数 ; class tec

9、hnician:public employee/兼职技术人员类 private: float hourlyrate; /每小时酬金 int workhours;/当月工作时数 public: technician(); /构造函数 void setworkhours(int wh); /设置工作时数函数 void pay();/计算月薪函数 void promote(int);/升级函数 ; class salesman:virtual public employee/兼职推销员类 protected: float commrate;/按销售额提取酬金的百分比 float sales;/当月销

10、售额 public: salesman();/构造函数 void setsales(float sl); /设置销售额函数 void pay();/计算月薪函数 void promote(int);/升级函数 ; class manager:virtual public employee /经理类 protected: float monthlypay; /固定月薪数 public: manager(); /构造函数 void pay();/计算月薪函数 void promote(int);/升级函数 ; class salesmanager:public manager,public sal

11、esman /销售经理类 public: salesmanager();/构造函数 void pay();/计算月薪函数 void promote(int);/升级函数 ; .数据的存储数据的存储 根据上面所介绍的本系统的各个模块及其需要实现的功能,由于还没有学习 数据库,所以我们只能应用 i/o 流文本操作来存储信息: 1密码表 用于保存用户账户的基本信息,系统通过该表对账户的用户名和密码的基本 信息进行查询,并比较用户名和密码是否正确。 2公司人员信息表 用于保存公司职员的基本信息。 4.34.3模块详细分析模块详细分析 1. 系统登录注册和注销 系统开始运行就出现系统登录对

12、话框,密码正确后才能进入主界面(默认 用户名:金钊,密码为 123),用户还可以注销,注册和退出功能。 自己认为有特色的是注册功能,由于没有数据库做后台,只好多次重复 i/o 流操作,调用文本框。用来完成用户名的查找、对比,和用户的添加。 2. 显示模块 显示模块将输出所有职员的主要资料 。 3. 修改模块 首先由用户输入要修改的职员的姓名,然后系统用修改函数查找,显示 该名职员的资料,然后系统提示用户输入需要修改的项目和新的资料。 4. 查找模块 首先由用户输入要查找的职员姓名,然后系统用查找函数查找,然后系 统就调用输出函数,输出所查找的职员资料。 5. 删除模块 首先由用户输入要删除的单

13、个职员姓名,然后调用删除函数,删除该名职 员的资料。 6. 清空模块 系统将会把所有职员的资料全部删除,将链表清空。 4.44.4 整体界面的实现整体界面的实现 系统使用 vc+6.0 的 mfc 提供的主对话框作为整体界面,添加了一个下拉 菜单,菜单中列出了六个功能按钮,见图 4-1 所示。 图 4-1 系统主界面 程序的具体实现部分放整个工程(mfc)的 cmy0701_33app 类中的成员函数 initinstance()中。具体代码清单如下所示: bool cmy0701_33app:initinstance() clogindlg login; if(login.domodal()

14、=idok) /如果登录成功 mb_info(欢迎进入公司人员信息管理系统!); /cmy0701_33app ed; /ed.onappabout; afxenablecontrolcontainer(); / standard initialization / if you are not using these features and wish to reduce the size / of your final executable, you should remove from the following / the specific initialization routines

15、 you do not need. #ifdef _afxdll enable3dcontrols();/ call this when using mfc in a shared dll #else enable3dcontrolsstatic();/ call this when linking to mfc statically #endif / change the registry key under which our settings are stored. / todo: you should modify this string to be something appropr

16、iate / such as the name of your company or organization. setregistrykey(_t(local appwizard-generated applications); loadstdprofilesettings(); / load standard ini file options (including mru) / register the applications document templates. document templates / serve as the connection between document

17、s, frame windows and views. csingledoctemplate* pdoctemplate; pdoctemplate = new csingledoctemplate( idr_mainframe, runtime_class(cmy0701_33doc), runtime_class(cmainframe), / main sdi frame window runtime_class(cmy0701_33view); adddoctemplate(pdoctemplate); / parse command line for standard shell co

18、mmands, dde, file open ccommandlineinfo cmdinfo; parsecommandline(cmdinfo); / dispatch commands specified on the command line if (!processshellcommand(cmdinfo) return false; / the one and only window has been initialized, so show and update it. m_pmainwnd-showwindow(sw_show); m_pmainwnd-updatewindow

19、(); return true; else return false; 4.54.5 系统登录的实现系统登录的实现 系统登录是设计了一个对话框,对应的对话框类名为 clogindlg。具体设 计见图 4-2 以及相应的代码,代码清单放在了 clogindlg 的成员函数 onok()内。 图 4-2 系统登录的实现 void clogindlg:onok() / todo: add extra validation here cstring username,password; /定义两个字符串变量 m_strusername.getwindowtext(username); /讲文本框中的值

20、赋给 username; m_strpassword.getwindowtext(password); /讲文本框中的值赋给 password; /获得账号信息,从 xinxi.txt 中获取,确定账号个数 ifstream fin; fin.open(xinxi.txt); if(fin.fail() mb_info(打开数据文件错误!文件已被损坏!); exit(1); string xinxigeshu,geshu; char lline100; fin.getline(lline,100); xinxigeshu=lline; int xx=xinxigeshu.find(共有,0);

21、 int yy=xinxigeshu.find(个账号,0); geshu=xinxigeshu.substr(xx+4,yy-1); int znum=atoi(geshu.c_str(); fin.close(); /比较账号和密码,来确定是否 登录成功 fin.open(code.txt); if(fin.fail() mb_error(没有注册的用户!); exit(1); char line10101; string strname,strpassword; strname=username.getbuffer(0); strpassword=password.getbuffer(0

22、); string str1,str2,stry; bool flag=false,flagname=false,flagpassword=false; for(int i=0;iznum;i+) fin.getline(linei,100); /从文件读入人员信息 stry=linei; int loc1,loc2; loc1=stry.find(用户名:,0); loc2=stry.find(密码:,0); str1=stry.substr(loc1+7,loc2-8); str2=stry.substr(loc2+5); if(!pare(strname) flagname=true;

23、if(!pare(strpassword) flagpassword=true; if(flagname=true if(flag=true) mb_info(登陆成功!); fileinfo info; info.setfileinfo(1); cdialog:onok(); else if(flagname=false) mb_warning(用户名不存在,请重新输入!); m_strpassword.setwindowtext(); m_strusername.setwindowtext(); else mb_warning(密码错误,请重新输入!); m_strpassword.set

24、windowtext(); /m_strusername.setwindowtext(); fin.close(); void clogindlg:oncancel() / todo: add extra cleanup here mb_query(真的要退出系统吗?); cdialog:oncancel(); exit(1); bool clogindlg:onerasebkgnd(cdc* pdc) /设置对话框背景 / todo: add your message handler code here and/or call default crect rect; cpaintdc dc(

25、this); getclientrect( cdc dcmem; dcmem.createcompatibledc( cbitmap bmpbkg; bmpbkg.loadbitmap(idb_bitmap_denglu);/载入位图,idb_dlgbitmap 是在 resourceview 里边导入的位图 id bitmap bmp; bmpbkg.getbitmap( cbitmap* poldbmp = dcmem.selectobject( dc.stretchblt(0,0,rect.width(),rect.height(), return true; 4.64.6 添加添加.

26、.查询查询. .删除和修改记录的实现删除和修改记录的实现 这部分设计了四个对话框,见图 4-3,对应的对话框类名分别为 cemployeeinfodlg 、cquerydlg、cshanchudlg 以及 cxiugaidlg1。具体设计见 图 4-2 以及相应的代码,对应代码清单分别放在了 cmy0701_33view 的成员函数: oninputdata()、onchaxundata()、onshanchudata()以及 onxiugaidata()内。 图 4-3 添加.删除和修改的实现 void cmy0701_33view:oninputdata()/公司人员信 息输入 acces

27、s=finfo.getfileinfo(); if(access=false) mb_info(请您先登录); clogindlg ed; if(ed.domodal()=idok) goto loop1; else / todo: add your command handler code here loop1: manager m1; technician t1; salesmanager sm1; salesman s1; vector vchar; vchar.push_back( vchar.push_back( vchar.push_back( vchar.push_back( c

28、employeeinfodlg ed; if(ed.domodal()=idok) vector vread; vread.push_back(ed.m_manager); vread.push_back(ed.m_technician); vread.push_back(ed.m_salesmanager); vread.push_back(ed.m_tuixy); int i; for(i=0;isetname(char*) (lpctstr)vreadi); /设置姓名 vchari-promote(i);/升级 t1.setworkhours(ed.m_hour); /设置工作时间 s

29、m1.setsales(ed.m_zsales);/设置本月的销售总额 s1.setsales(ed.m_sales);/设置本月销售额 ofstream ofile(employee.txt,ios:out); /创建一个输出文件流 对象 for(i=0;ipay(); /计算月薪 ofilegetname(), 编号:getindividualempno() , 级别:getgrade()级, 本月工资 getaccumpay() oninitialupdate(); system(cls); ifstream infile(employee.txt,ios:in);/创建一个输入文件流对

30、 象 try if (!infile) throw fileexception(); catch ( fileexception fe ) / exception handler mb_error(fe.what(); / fe.what() n; exit(0); cquerydlg ed; /声明查询对话框对象 if(ed.domodal()=idok)/调用查询对话框 char line10101; bool flag=false; for(int i=0;ioninitialupdate(); ifstream infile(employee.txt,ios:in); try if (

31、!infile) throw fileexception(); catch ( fileexception fe ) mb_error(fe.what(); exit(0); char line4101; int j4; bool flag=false; for(int i=0;i4;i+) infile.getline(linei,100); cstring c_str1,name_str; c_str1.format(%s,linei); name_str=c_str1.left(c_str1.find(,); if(!name_str.compare(ed.m_strxiuname1)

32、flag=true; ji=i; if(flag=false) mb_error(并无此人!); else cxiugaidlg ed; if(ed.domodal()=idok) infile.close(); ofstream ofile(employee.txt,ios:out); for(i=0;i4;i+) if(i!=j0 else ofileed.m_strxiuname.getbuffer(12), 编 号:ed.m_strxiuno , 级别:ed.m_strxiuji级, 本 月工资ed.m_strxiugong oninitialupdate(); ifstream in

33、file(employee.txt,ios:in);/创建一个输入文件流对 象 try if (!infile) throw fileexception(); catch ( fileexception fe ) / exception handler mb_info(fe.what(); / fe.what() n; exit(0); cshanchudlg ed; /声明删除对话框对象 if(ed.domodal()=idok)/调用删除对话框 char line4101; int a4; bool flag=false; for(int i=0;i4;i+) infile.getline

34、(linei,100); /从文件读入人员信息 cstring c_str,name_str; c_str.format(%s,linei); /转换为字符串 name_str=c_str.left(c_str.find(,);/提取姓名 if(!name_str.compare(ed.m_strshancname)/与查询名比较 ai=i; flag=true; infile.close(); if(flag=false) mb_error(并无此人!); return; ofstream ofile(employee.txt,ios:out); for(int j=0;j4;j+) if(

35、j!=a1 ofile.close(); mb_info(此人信息已删除!); 4.74.7(特色)用户注册的实现(特色)用户注册的实现 此部分对用户注册设计了一个对话框,见图 4-4,对应的对话框类 名为 czhuce,具体代码清单 cmy0701_33view 的成员函数 onzhuceinfo()中。 图 4-4 年级成绩的实现 /特色函数,注册用户 void cmy0701_33view:onzhuceinfo() / todo: add your command handler code here system(cls); loop9: czhuce ed; bool boolzhu

36、ce=false; /用来判断注册名是 否已被注册 ifstream fin; ofstream fout; if(ed.domodal()=idok) /提取账号信息 fin.open(xinxi.txt); if(fin.fail() mb_info(打开数据文件错误!文件已被损坏!); exit(1); string xinxigeshu,geshu; char linez100; fin.getline(linez,100); xinxigeshu=linez; int xx=xinxigeshu.find(共有,0); int yy=xinxigeshu.find(个账号,0); g

37、eshu=xinxigeshu.substr(xx+4,yy-1); int znum=atoi(geshu.c_str(); fin.close(); /注册用户 string newname,mima1,mima2; newname=ed.m_newname.getbuffer(0); /提取输入的字符, 转换为 string 类型好存取; mima1=ed.m_mima1.getbuffer(0); /提取输入的字符, 转换为 string 类型好存取; mima2=ed.m_mima2.getbuffer(0); ed.m_mima2.releasebuffer(); /释放缓冲 ed

38、.m_mima1.releasebuffer(); ed.m_newname.releasebuffer(); /用来判断该用户名 是否已被注册 fin.open(code.txt); if(fin.fail() mb_error(数据文件被破坏!); exit(1); char line110101; for(int i=0;iznum;i+) string stry,str1; fin.getline(line1i,100); /从文件读入人员信息 stry=line1i; int loc1,loc2; loc1=stry.find(用户名:,0); loc2=stry.find(密码:,

39、0); str1=stry.substr(loc1+7,loc2-8); if(!pare(newname) boolzhuce=true; fin.close(); if(boolzhuce=true) mb_warning(该用户名已被注册!请注册不同的账号!); goto loop9; else /判断两次密码是否输 入一致 if(!pare(mima2) fout.open(code.txt,ios:app);/从文件末尾添加数据; if(fout.fail() mb_info(创建数据文件错误!); exit(1); foutendl; fout用户名:newname,密码:mima

40、1; mb_info(注册成功!); znum+; /用户数目加 1;这里很关键, 是这个程序的核心,影响大局 fout.close(); /更新账号信息 fout.open(xinxi.txt,ios:trunc); if(fout.fail() mb_info(打开数据文件错误!文件已被损坏!); exit(1); fout共有znum个账号.endl; fout学校:湖南科技大学endl; fout学院:数学与计算科学学院endl; fout作者:07 级信息与计算科学一班 金钊endl; fout指导老师:李建湘endl; fout.close(); else mb_error(两次密

41、码输入不一致!); goto loop9; 5 测试分析 经过测试,该系统能够较好地完成需求分析中的任务,如数据的添加、修 改、删除、查询,其中,修改可通过先进行查询后再修改,还有特色模块用户 注册功能,能判断用户名是否被注册。但仍然存在很多问题,如对数据的输入 方面没有太多的限制,这可能导致用户输入的异常发生。对系统查询设置也不 灵活,系统的可扩展性不强。功能的实现也不太完善。代码的处理也不是很精 简,有待进一步改善。 并且没有大型的支持大容量数据的后台,只有利用文本 i/o 处理来实现所 以数据的保密性和安全性不高,希望以后学习数据库后开发出强大的后台实现 公司人员信息的管理。 6 心得体

42、会 经过几个星期的设计和开发,系统基本开发完毕。在本次课程设计中困难 遇到不少,比如文本文件的操作,i/o 流,string,cstring 类,容器类相关的 成员函数,全局参数的传递等。都是在百度上查找到的,并且请教了上届的学 长学姐,解决了大部分问题。由于设计时间较短,所以该系统还有许多不尽如 人意的地方,比如用户界面不够美观,功能不够完善等多方面问题。在这次系 统开发的过程中,我深深体会到了做一个系统,首先进行需求分析的重要性, 了解了一个系统的制作,从功能分析到功能模块分析、与其他系统的关系,再 到后台数据存储设计及各功能模块的创建都需要从整体上考虑设计。这些都有 待以后进一步改进。通

43、过实践对于我以后的学习是一笔不小的财富!特别是自 己编的函数用户注册模块。希望在以后数据库系统设计中能开发出更强大的系 统。 参考文献 1.杨永国. visual c+ 6.0 实用教程. 清华大学出版社,2004 2.唐俊明. visual c+ 6.0 编程实例与技巧. 高等教育出版,2002 致 谢 一个学期的 vc+课程学习,让我对 vc 有了一定程度上的认识。了解了 vc 的发展历史,熟悉了 vc 语言的基础知识,明白了 vc 的基本语法规则,可以运 用 vc 来完成简单程序的编写和调试,实现预定的功能。 这次除在李老师的巨大帮助之外,师兄和师姐以及班上同学也给予了很大的 帮助,我们在一起探讨,共同解决遇到的问题,这让我在开发中少走了许多弯 路。在此我由衷地感谢! 附录:附录: employee 各类的成员

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论