面向对象课程设计
职工信息管理系统软件
院(系)别 信息科学与电气工程工程
班 级 计算122
学 号 120811229
姓 名 耿亚楠
指导教师
时 间 2013-10-7—2010-10-21
课程设计任务书
一、设计内容及要求
(1)根据职工信息表,建立只含有姓名和年龄的职工信息简表。(可选功能)
(2)使用继承的方法构造3个类,(即雇员类——虚基类,教师类和工人类——派生类)使用相应的对象放置10个职工信息。
(3)编写同名display()成员函数,用来输出数组的内容。
(4)按不同类别输出职工信息,比如按系输出教师信息。(可选功能)
二、设计原始资料
(1)《C++面向对象程序设计》李涛 高等教育出版社
三、设计完成后提交的文件
课程设计报告(3000—5000字),纸质打印稿及电子版
(1)需求分析(功能模块层次图)
(2)系统设计(包括详细设计和界面设计)
(3)代码设计(主要功能函数)
(4)测试记录(测试各项功能的正确性、容错性)
(5)课程设计总结
四、进度记录
10月7号完成选题,完成对职工信息管理系统的功能分析和版面设计
10月8号开始学习MFC,完成页面设计
10月9号按照已有程序改编
10月10号改编大致完成,未添加缺失的功能模块,调试不通
10月11号仍旧调试不通,与同学交流获取新的设计思路
10月12号周六
10月13号周日
10月14号尝试通过MFC控件操控SQL数据库,未使用代码
10月15号继续研究DataGrid控件
10月16号控件功能不全,回头尝试MFC不连数据库的半成品,成功
10月17号
10月18号
10月19号
五、主要参考资料
1.李涛 《C++面向对象程序设计》 高等教育出版社
2. 夏冰冰 《数据库原理及应用——SQL Server 2000》 国防工业出版社
成 绩 评 定 表
摘要
课程设计是我们在学习和掌握所学知识的基础上结合实际应用而进行的一次综合分析设计能力的训练。为了提高我们的实践能力、创造力和解决实际问题的能力,进一步认识到实践对于学习的重要性,学校安排我们进行了为期两周的面向对象课程设计。
职工信息管理系统程序的功能是,根据职工信息表,建立只含有姓名和年龄的职工信息简表;可以通过不同的方式对建立的信息表中的职工信息进行添加、删除、修改等,并显示信息;可以实现按不同类别输出职工信息等功能。
通过这次课程设计,使我们更加熟悉的掌握了Visual C++语言的运用。帮助我们熟悉了更多Visual C++语言的功能,提高了我们的动手能力,学到了许多解决实际问题的宝贵经验.同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣。我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼搏,敢于创新。
目 录
1课程设计概述 5
1.1 开发环境概述 5
2职工信息管理系统软件总体设计 5
2.1 职工信息管理系统软件总体设计思想 5
2.2 总体设计流程图 6
2.3 需求分析..........................................................6
3职工信息管理系统程序源代码...............................6
4程序测试................................................23
4.1 主菜单界面.......................................................23
4.2 添加职工信息界面.................................................24
4.3 完成添加职工信息界面.............................................24
4.4 排序职工信息界面................................................25
4.5 查询职工信息界面.................................................25
4.6 删除职工信息界面.................................................27
5设计体会及今后的改进意见................................28
6参考文献................................................29
1 课程设计概述
1.1开发环境概述
Visual C++是微软公司的重要产品之一, 是一种功能强大行之有效的可视化编程工具。它提供了MFC类库,使用户可以方便的开发自己想实现的功能。Visual C++6.0的主要特点:
(1)自动化和宏功能。
(2)可以灵活地定制工具栏和菜单。
(3)可以直接运行和调试程序,还可以使用宏语言来自动操作调试器。
(4)支持Internet连接。
(5)一个新的便捷的项目系统可以允许一个工作区内包含多个不同的项目类型。
(6)在工作区内可以包含多个并列的工程文件。
(7)可以在对话框中使用WizardBar将程序同可视化元素联系起来。
(8)Find in File命令支持两个独立的输出窗格,可以保存上一次搜索的结果。
这些新特性可以更好地利用Visual C++开发工具进行Windows应用程序开发。
2职工信息管理系统软件总体设计
2.1职工信息管理系统软件总体设计思想
职工信息系统的功能为实现输入数据的存储与读取,同时可添加,删除,查询,排序工人信息。
职工信息系统的功能模块有:
(1)提供菜单界面,方便用户对程序功能进行选择。
(2)接受用户输入的一组数据,例如姓名,年龄,工号,性别,工种等
(3)除了添加数据之外,还可以进行删除、查询、添加、排序等操作。
程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。
2.2总体设计流程
2.3 需求分析
职工信息系统是一个工作单位必不可缺少的管理工具,它的管理数据对于公司的决策者和管理者都是至关重要的,所以职工信息管理系统可以成为为用户提供充足的信息和快捷的查明迅手段,传统的人工方式管理信息,这种方式有很多缺点:效率低、保密性差。时间一长,将产生大量的文件和数据。这样,对于信息的查找、更新和维护都带来了不少的困难。当今社会,传统的方式已经不能满足公司的需求。
随着计算机技术的不断提高,计算机作为知识经济时代的产物,它已经进入人类社会的各个行业和领域,并发挥着越来越重要的作用。使用计算机对职工信息进行管理具有:检索迅速、查找方便、可靠性高、储存量大、保密性高、寿命长、成本低等特点。这些优点能够极大的提高职工管理的效率,这也是公司的科学化、正规化管理和与世界接轨的重要条件。
计算机职工信息管理系统能提供以下功能
① 添加职工信息并保存
② 查询职工信息
③ 浏览所有职工信息
④ 删除职工信息
⑤将所有职工信息按照工号排序
3 职工信息管理系统程序源代码
// 职工信息系统升级版Dlg.cpp : implementation file
//#include "stdafx.h"
#include "职工信息系统升级版.h"
#include "职工信息系统升级版Dlg.h"
#include<fstream.h>
#include<malloc.h>
#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILE
static char THIS_FILE[] = __FILE__;#endif
/
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_Sex = -1;
m_age = _T("");
m_id = _T("");
m_name = _T("");
m_Show = _T("");
m_Kind = -1;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX, IDC_EDIT_NAME, m_NAME);
DDX_Control(pDX, IDC_EDIT_ID, m_ID);
DDX_Control(pDX, IDC_EDIT_AGE, m_AGE);
DDX_Control(pDX, IDC_LIST, m_ListControl);
DDX_Radio(pDX, IDC_RADIO_M, m_Sex);
DDX_Text(pDX, IDC_EDIT_AGE, m_age);
DDX_Text(pDX, IDC_EDIT_ID, m_id);
DDX_Text(pDX, IDC_EDIT_NAME, m_name);
DDX_Radio(pDX, IDC_RADIO_GY, m_Kind);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_ADD, OnAdd)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnDelete)
ON_BN_CLICKED(IDC_BUTTON_SEARCH, OnSearch)
ON_BN_CLICKED(IDC_RADIO_M, OnRadioM)
ON_BN_CLICKED(IDC_BUTTON_SORT, OnSort)
ON_BN_CLICKED(IDC_RADIO_GY, OnRadioGy)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/
// CMyDlg message handlers
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_ListControl.InsertColumn(0,"工号",LVCFMT_LEFT,100);
m_ListControl.InsertColumn(1,"姓名",LVCFMT_LEFT,80);
m_ListControl.InsertColumn(2,"性别",LVCFMT_LEFT,40);
m_ListControl.InsertColumn(3,"年龄",LVCFMT_LEFT,40);
m_ListControl.InsertColumn(4,"工种",LVCFMT_LEFT,80);
return TRUE; // return TRUE unless you set the focus to a control
}
void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMyDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMyDlg::OnAdd()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_ID.GetWindowText(m_id);
m_ListControl.InsertItem(0,m_id);
m_NAME.GetWindowText(m_name);
m_ListControl.SetItemText(0,1,m_name);
m_AGE.GetWindowText(m_age);
m_ListControl.SetItemText(0,3,m_age);
UpdateData(TRUE);
if(m_Sex==0)
m_ListControl.SetItemText(0,2,"男");
else if(m_Sex==1)
m_ListControl.SetItemText(0,2,"女");
UpdateData(TRUE);
if(m_Kind==0)
m_ListControl.SetItemText(0,4,"雇员类");
else if(m_Kind==1)
m_ListControl.SetItemText(0,4,"教师类");
else if(m_Kind==2)
m_ListControl.SetItemText(0,4,"工人类");
UpdateData(TRUE);
m_id="";
m_name="";
m_Sex=-1;
m_age="";
m_Kind=-1;
UpdateData(FALSE);
}
void CMyDlg::OnDelete()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int i=0,num=0,idx;
while(m_ListControl.GetItemText(i,0)!="")
{
i++;
num++;
}
m_ID.GetWindowText(m_id);
for(i=0;i<num;i++)
{
if(m_id==m_ListControl.GetItemText(i,0))
{
m_ListControl.DeleteItem(i);
break;
}
}
UpdateData(TRUE);
m_id="";
UpdateData(FALSE);
idx=m_ListControl.GetSelectionMark();
m_ListControl.DeleteItem(idx);
UpdateData(TRUE);
}
void CMyDlg::OnSearch()
{
// TODO: Add your control notification handler code here
int i=0,num=0,k=0;
CString str;
while(m_ListControl.GetItemText(i,0)!="")
{
i++;
num++;
}
for(i=0;i<num;i++)
{
m_ID.GetWindowText(m_id);
if(m_ListControl.GetItemText(i,0)==m_id)
{
m_ListControl.SetItemState(i,LVIS_SELECTED, LVIS_SELECTED);
str="工号:"+m_ListControl.GetItemText(i,0)+"\n"+"姓名:"+m_ListControl.GetItemText(i,1)+"\n"+"性别:"+m_ListControl.GetItemText(i,2)+"\n"+"年龄:"+m_ListControl.GetItemText(i,3)+"\n"+"工种:"+m_ListControl.GetItemText(i,4);
MessageBox(str);
break;
}
else k++;
}
if(k==num)
MessageBox("该职工不存在!");
UpdateData(TRUE);
m_id="";
UpdateData(FALSE);
}
void CMyDlg::OnRadioM()
{
// TODO: Add your control notification handler code here
}
void CMyDlg::OnSort()
{
// TODO: Add your control notification handler code here
CString StrText1,StrText2;
int num,i,flag,j;
int id1,id2;
num=0;
i=0;
while(m_ListControl.GetItemText(i,0)!="")
{
num++;
i++;
}
struct Item ListItem[100];
for(i=0;i<num;i++)
{
ListItem[i].StrID=m_ListControl.GetItemText(i,0);
ListItem[i].StrName=m_ListControl.GetItemText(i,1);
ListItem[i].StrSex=m_ListControl.GetItemText(i,2);
ListItem[i].StrAge=m_ListControl.GetItemText(i,3);
ListItem[i].StrKind=m_ListControl.GetItemText(i,4);
}
for(i=num-1;i>=0;i--)
{
UpdateData(TRUE);
m_ListControl.DeleteItem(i);
UpdateData(FALSE);
}
for(i=0;i<num-1;i++)
{
flag=1;
for(j=0;j<num-i-1;j++)
{
StrText1=ListItem[j].StrID;
id1=_tcstoul(StrText1,NULL,10);
StrText2=ListItem[j+1].StrID;
id2=_tcstoul(StrText2,NULL,10);
if(id1<id2)
{
struct Item TempItem;
TempItem.StrID=ListItem[j].StrID;
TempItem.StrName=ListItem[j].StrName;
TempItem.StrSex=ListItem[j].StrSex;
TempItem.StrAge=ListItem[j].StrAge;
TempItem.StrKind=ListItem[j].StrKind;
ListItem[j].StrID=ListItem[j+1].StrID;
ListItem[j].StrName=ListItem[j+1].StrName;
ListItem[j].StrSex=ListItem[j+1].StrSex;
ListItem[j].StrAge=ListItem[j+1].StrAge;
ListItem[j].StrKind=ListItem[j+1].StrKind;
ListItem[j+1].StrID=TempItem.StrID;
ListItem[j+1].StrName=TempItem.StrName;
ListItem[j+1].StrSex=TempItem.StrSex;
ListItem[j+1].StrAge=TempItem.StrAge;
ListItem[j+1].StrKind=TempItem.StrKind;
flag=0;
}
}
if(flag==1)
Break;
}
for(i=0;i<num;i++)
{
m_ListControl.InsertItem(0,ListItem[i].StrID);
m_ListControl.SetItemText(0,1,ListItem[i].StrName);
m_ListControl.SetItemText(0,2,ListItem[i].StrSex);
m_ListControl.SetItemText(0,3,ListItem[i].StrAge);
m_ListControl.SetItemText(0,4,ListItem[i].StrKind);
}
}
void CMyDlg::OnRadioGy()
{
// TODO: Add your control notification handler code here
}
4程序测试
4.1主菜单界面
这是该程序主界面,如图所示,该程序有添加,删除,查询,排序等功能。可以输入职工的工号,姓名,年龄,性别以及工种等信息。将各种需求分成多个小模块,通过调用实现各种功能,增强了程序的可建设性。该界面通过控件和代码共同连接VC,但并没有连接数据库,该界面输入的所有信息和操作保存在当地文件夹里,并不能保存到数据库中。所以,只能供当次操作使用,不能重复使用。
4.2添加职工信息
如上图所示,该程序为用户提供菜单界面,用户可以对程序的各种功能进行选择,方便用户使用。添加职工信息。该功能实现字符串各类字符的累加统计。完成职工信息的添加,将添加的职工信息贮存在本地文件中,等关闭系统后,职工信息将不再存在。添加的职工信息将显示在左侧界面上。如图所示。
4.3 完成添加职工信息
如图所示,则完成了职工信息的添加。可以进行其他的操作。
4.4 排序职工信息
上图为排序,该职工信息系统根据职工的工号进行排序,如图所示,职工的工号已经按照从小到大的顺序排列。该操作只需将需要排序的数据输入后,点击一下排序按键即可。
4.5查询职工信息
显示,该职工不存在,这是因为,图上工号选框为空。所以现实如图所示信息。
如图所示,在工号选框内输入你想查询的职工工号,单击查询按键,界面上将显示如图所示信息框。输出你想查询的职工信息。简单方便。
4.6删除职工信息
如图所示,这幅图与上图相比,大家可以看到工号为23的职工信息已将不再界面显示框内了,这是职工信息系统的删除操作,操作很简单,在显示框中点击你想删除的职工的工号,再单击删除按键,该职工信息将不再存在。
5 设计体会及今后的改进意见
为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校特安排我们进行为期二周的Visual C++课程设计实习,并安排了指导老师帮助辅导,让我们在规范化、严谨化、实用化上面有了很大进展。
在此次职工信息管理系统程序开发过程中,有很多东西值得我们思考并总结。
开发过程大体可分为以下几个步骤:
(1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大体需要的几个模块和其中用到的Visual C++语言基本操作符、语句等。
(2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。
(3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现.并想好实现的关键代码。
(4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进.如何实现各函数功能,达到预期效果也将是一项繁复的工作。
(5)代码的调试:在Visual C++6.0环境下输入代码并进行调试和正确运行。在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。
(6)最后修饰:程序可以正确运行之后,再不影响程序功能的情况下,运用各种辅助性符号,使界面更加美观漂亮,操作更人性化.增强程序的新意与可行性。
通过此次任务式的程序设计,不仅巩固了我们在课堂所学的知识。更重要的是学会了合作与交流。一个较大型的软件必须是有一个团队来完成的,这种分工与合作的精神对我们将来的工作是很有帮助的。
感觉课堂上的知识应用到实际中还是很欠缺的,因此大学里的学习课外自主学习是很重要的。获取资料以完成任务的任务型学习是很有必要的。
感觉自己在面向对象的方面还很欠缺,特别是虚函数。可能跟老师讲的进度有关,还有就是C++身较难学。我相信自己努力了就会有回报的。凡是认真去学,都可以做好的,需要自己戒骄戒躁。真正静下心来。在IT的世界里,需要不断学习,不断进取。
参考文献
[1] 马安鹏.Visual C++程序设计导学。北京:清华大学出版社,2002
[2] 电子书籍. Visual C++技术内幕(第四版).网址:http://www.5xsoft.com
[3] Beck Zaratian.Microsoft Visual Visual C++ 6.0程序员指南.希望图书创作室译.北京:北京希望电脑公司出品,1998
[4]Richard C.Leinecker,Tom Archer. Visual C++ 6 宝典.张艳,张谦译.北京:电子工业出版社,1999
[5] 李强,贾云霞. Visual C++项目开发实践.北京:中国铁道出版社,2004
[6] 郑莉,董渊,张瑞丰.C++语言程序设计.2003.
[7] H.M.Deitel,P.J.Deitel. Small C++ How to Program.2006.
课程设计
最新推荐文章于 2019-05-20 20:34:51 发布