c++课程设计论文.docx
《c++课程设计论文.docx》由会员分享,可在线阅读,更多相关《c++课程设计论文.docx(54页珍藏版)》请在冰豆网上搜索。
c++课程设计论文
VC++课程设计报告
公司人事管理系统
学生姓名:
学号:
0412452752
年级专业:
2007级信息与计算科学
班级:
信息一班
指导老师:
学院:
数学与计算科学学院
湖南·湘潭
提交日期:
2008年12月
公司人员信息管理系统
金钊
(湖南科技大学中国湘潭0707020133)
摘要
本次课程设计任务是通过编写一个公司人员信息管理系统,学习用VisualC++6.0开发简单的管理系统。
采用VisualC++6.0软件为主要开发工具。
本系统主要完成对公司员工情况和公司信息的管理,包括人员信息的添加、修改、删除等。
系统还可以完成对各类信息的浏览、查询、添加、删除、修改、等功能。
由于我们还没有学习数据库,所以在有关大量人员信息存储时,次系统显得心有余而力不足。
系统的核心是引用I/O流和文本处理来存储和修改公司人员的信息联系,每一个动作都可能影响到其它的功能,还有数据的改变,当完成对数据的操作时系统会自动地完成数据库的修改。
关键字:
VC++6.0;公司人员信息管理系统;模块化设计;i/O流;
1前言
使用计算机管理人员信息,不但可以大量节省时间、人力、财力、物力,而且能更全面有效地掌握公司的基本情况,及时获取最新而又准确的资料和信息。
此课程设计就是这样一个管理公司人员信息的系统,其功能与实现方面有比较好的的针对性和实用性。
软件是在Visualc++平台上开发的,采用i/o流文本存储数据和信息,作为虚拟的数据库。
利用i/o流文本操作语言,能比较方便地实现对人员信息的操作与管理。
系统登陆功能是系统的核心之一,在系统中有用户注册,用户注销,用户退出,其目的都是为了方便用户使用。
系统有完整的用户对比功能,检查是否用户名已被注册。
2需求分析
VisualC++6.0的MFC提供了大量的类库函数强大支持。
开发一个人员信息管理系统,可以实现人员信息的管理。
并提供新信息输入,现有公司人员信息查询功能,对记录的删除修改等工作。
公司人员管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据信息的建立和保存以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易使用等特点。
3概要设计
3.1系统功能模块设计
图3-1系统功能模块流程图
1、用户注册:
添加一个系统账户,当输入的用户名未被注册且密码两次输入相同则注册成功。
2、系统注销:
可以注销当前用户,登陆另一个账户。
3、系统退出:
退出公司人员管理信息系统。
4、信息输入:
输入公司职员的基本信息。
5、信息输出:
输出公司所有职员的信息。
6、信息查询:
查询制定人员的信息。
7、信息修改:
修改指定人员的信息。
8、信息删除:
删除指定人员的信息。
9、信息清空:
清空所以人员的信息。
3.2流程图
图3-2功能流程图
3.3程序运行平台
开发工具:
VisualC++
运行环境:
Windows9x、WindowsNT/2000、WindowsXP
4详细设计
4.1.数据的存储
根据上面所介绍的本系统的各个模块及其需要实现的功能,由于还没有学习数据库,所以我们只能应用i/o流文本操作来存储信息:
1.密码表
用于保存用户账户的基本信息,系统通过该表对账户的用户名和密码的基本信息进行查询,并比较用户名和密码是否正确。
2.公司人员信息表
用于保存公司职员的基本信息。
4.2.模块分析
1.系统登录注册和注销
系统开始运行就出现系统登录对话框,密码正确后才能进入主界面(默认用户名:
金钊,密码为123),用户还可以注销,注册和退出功能。
自己认为有特色的是注册功能,由于没有数据库做后台,只好多次重复i/o流操作,调用文本框。
用来完成用户名的查找、对比,和用户的添加。
2.显示模块
显示模块将输出所有职员的主要资料。
3.修改模块
首先由用户输入要修改的职员的姓名,然后系统用修改函数查找,显示该名职员的资料,然后系统提示用户输入需要修改的项目和新的资料。
4.查找模块
首先由用户输入要查找的职员姓名,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的职员资料。
5.删除模块
首先由用户输入要删除的单个职员姓名,然后调用删除函数,删除该名职员的资料。
6.清空模块
系统将会把所有职员的资料全部删除,将链表清空。
4.3整体界面的实现
图4-1系统主界面
程序的具体实现部分如程序清单如下所示:
BOOLCMy0701_33App:
:
InitInstance()
{
CLoginDlglogin;
if(login.DoModal()==IDOK)//如果登录成功
{
MB_INFO("欢迎进入公司人员信息管理系统!
");
//CMy0701_33Apped;
//ed.OnAppAbout;
AfxEnableControlContainer();
//Standardinitialization
//Ifyouarenotusingthesefeaturesandwishtoreducethesize
//ofyourfinalexecutable,youshouldremovefromthefollowing
//thespecificinitializationroutinesyoudonotneed.
#ifdef_AFXDLL
Enable3dControls();//CallthiswhenusingMFCinasharedDLL
#else
Enable3dControlsStatic();//CallthiswhenlinkingtoMFCstatically
#endif
//Changetheregistrykeyunderwhichoursettingsarestored.
//TODO:
Youshouldmodifythisstringtobesomethingappropriate
//suchasthenameofyourcompanyororganization.
SetRegistryKey(_T("LocalAppWizard-GeneratedApplications"));
LoadStdProfileSettings();//LoadstandardINIfileoptions(includingMRU)
//Registertheapplication'sdocumenttemplates.Documenttemplates
//serveastheconnectionbetweendocuments,framewindowsandviews.
CSingleDocTemplate*pDocTemplate;
pDocTemplate=newCSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMy0701_33Doc),
RUNTIME_CLASS(CMainFrame),//mainSDIframewindow
RUNTIME_CLASS(CMy0701_33View));
AddDocTemplate(pDocTemplate);
//Parsecommandlineforstandardshellcommands,DDE,fileopen
CCommandLineInfocmdInfo;
ParseCommandLine(cmdInfo);
//Dispatchcommandsspecifiedonthecommandline
if(!
ProcessShellCommand(cmdInfo))
returnFALSE;
//Theoneandonlywindowhasbeeninitialized,soshowandupdateit.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
returnTRUE;
}
else{returnfalse;}
}
4.4系统登录的实现
图4-2系统登录的实现
voidCLoginDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
CStringusername,password;//定义两个字符串变量
m_strUserName.GetWindowText(username);//讲文本框中的值赋给username;
m_strPassword.GetWindowText(password);//讲文本框中的值赋给password;
////////////////////////////////////////获得账号信息,从xinxi.txt中获取,确定账号个数
ifstreamfin;
fin.open("xinxi.txt");
if(fin.fail())
{
MB_INFO("打开数据文件错误!
文件已被损坏!
");
exit
(1);
}
stringxinxigeshu,geshu;
charlline[100];
fin.getline(lline,100);
xinxigeshu=lline;
intxx=xinxigeshu.find("共有",0);
intyy=xinxigeshu.find("个账号",0);
geshu=xinxigeshu.substr(xx+4,yy-1);
intznum=atoi(geshu.c_str());
fin.close();
///////////////////////////////////////比较账号和密码,来确定是否登录成功
fin.open("code.txt");
if(fin.fail())
{
MB_ERROR("没有注册的用户!
");
exit
(1);
}
charline[10][101];
stringstrname,strpassword;
strname=username.GetBuffer(0);
strpassword=password.GetBuffer(0);
stringstr1,str2,stry;
BOOLflag=false,flagname=false,flagpassword=false;
for(inti=0;i{
fin.getline(line[i],100);//从文件读入人员信息
stry=line[i];
intloc1,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;
if(!
pare(strpassword))
flagpassword=true;
if(flagname==true&&flagpassword==true)
flag=true;
}
if(flag==true)
{
MB_INFO("登陆成功!
");
fileinfoinfo;
info.setfileinfo
(1);
CDialog:
:
OnOK();
}
else
{
if(flagname=false)
{
MB_WARNING("用户名不存在,请重新输入!
");
m_strPassword.SetWindowText("");
m_strUserName.SetWindowText("");
}
else
{
MB_WARNING("密码错误,请重新输入!
");
m_strPassword.SetWindowText("");
//m_strUserName.SetWindowText("");
}
}
fin.close();
}
voidCLoginDlg:
:
OnCancel()
{
//TODO:
Addextracleanuphere
MB_QUERY("真的要退出系统吗?
");
CDialog:
:
OnCancel();
exit
(1);
}
BOOLCLoginDlg:
:
OnEraseBkgnd(CDC*pDC)//设置对话框背景
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CRectrect;
CPaintDCdc(this);
GetClientRect(&rect);
CDCdcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmapbmpBKG;
bmpBKG.LoadBitmap(IDB_BITMAP_DENGLU);//载入位图,IDB_DLGBITMAP是在ResourceView里边导入的位图ID
BITMAPbmp;
bmpBKG.GetBitmap(&bmp);
CBitmap*pOldBMP=dcMem.SelectObject(&bmpBKG);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
returnTRUE;
}
4.5添加.查询.删除和修改记录的实现
图4-2添加.删除和修改的实现
voidCMy0701_33View:
:
OnInputData()////////////////////////公司人员信息输入
{
access=finfo.getfileinfo();
if(access==false)
{
MB_INFO("请您先登录");
CLoginDlged;
if(ed.DoModal()==IDOK)
gotoloop1;
}
else{
//TODO:
Addyourcommandhandlercodehere
loop1:
managerm1;
techniciant1;
salesmanagersm1;
salesmans1;
vectorvchar;
vchar.push_back(&m1);
vchar.push_back(&t1);
vchar.push_back(&sm1);
vchar.push_back(&s1);
CEmployeeInfoDlged;
if(ed.DoModal()==IDOK)
{
vectorvread;
vread.push_back(ed.m_manager);
vread.push_back(ed.m_technician);
vread.push_back(ed.m_salesmanager);
vread.push_back(ed.m_tuixy);
inti;
for(i=0;i<4;i++)
{
vchar[i]->SetName((char*)(LPCTSTR)vread[i]);//设置姓名
vchar[i]->promote(i);//升级
}
t1.SetworkHours(ed.m_hour);//设置工作时间
sm1.Setsales(ed.m_zsales);//设置本月的销售总额
s1.Setsales(ed.m_sales);//设置本月销售额
ofstreamofile("employee.txt",ios:
:
out);//创建一个输出文件流对象
for(i=0;i<4;i++)
{
vchar[i]->pay();//计算月薪
ofile<GetName()<<",编号:
"<GetindividualEmpNo()
<<",级别:
"<Getgrade()<<"级,本月工资"<GetaccumPay()
<}
ofile.close();
MB_INFO("信息已经储存!
");
}
else{MB_INFO("信息没存储并已退出!
");
}
}
}
//////////////////////////////////////////////定义判断类FileException
classFileException
{
public:
FileException()
:
message("Fileisnotcreated!
"){}
constchar*what()const{returnmessage;}
private:
constchar*message;
};
//////////////////////////////////////////////信息查询,查询指定人员的信息
voidCMy0701_33View:
:
OnChaxunData()
{
access=finfo.getfileinfo();
if(access==false)
{
MB_INFO("请您先登录");
CLoginDlged;
if(ed.DoModal()==IDOK)
gotoloop3;
}
else
{
//TODO:
Addyourcommandhandlercodehere
loop3:
this->OnInitialUpdate();system("cls");
ifstreaminfile("employee.txt",ios:
:
in);//创建一个输入文件流对象
try{
if(!
infile)
throwFileException();
}
catch(FileExceptionfe){//exceptionhandler
MB_ERROR(fe.what());//"<exit(0);
}
CQueryDlged;//声明查询对话框对象
if(ed.DoModal()==IDOK)//调用查询对话框
{
charline[10][101];
BOOLflag=FALSE;
for(inti=0;i<4;i++)
{
CClientDCdc(this);
infile.getline(line[i],100);//从文件读入人员信息
CStringc_str,name_str;
c_str.Format("%s",line[i]);//转换为字符串
name_str=c_str.Left(c_str.Find(','));//提取姓名
if(!
name_str.Compare(ed.m_strQuery))//与查询名比较
{
flag=TRUE;
name_str+="已经查询到,要显示该人员信息吗?
";
if(MB_QUERY(name_str)==IDYES)
{
dc.TextOut(120,100+30*i,c_str);
};
}
}
if(flag==FALSE)MB_ERROR("对不起!
没有这个人");
}
infile.close();
}
}
///////////////////////////////////////////////////修改已存在的人员的信息
voidCMy0701_33View:
:
OnXiugaiData()
{
access=finfo.getfileinfo();
if(access==false)
{
MB_INFO("请您先登录");
CLoginDlged;
if(ed.DoModal()==IDOK)
gotoloop4;
}
else
{
//TODO:
Addyourcommandhandlercodehere
loop4:
CxiugaiDlg1ed;
if(ed.DoModal()==IDOK)
{
this->OnInitialUpdate();
ifstreaminfile("employee.txt",ios:
:
in);
try
{
if(!
infile)
throwFileException();
}
catch(FileExceptionfe)
{
MB_ERROR(fe.what());
exit(0);
}
{
charline[4][101];
intj[4];
BOOLflag=FALSE;
for(inti=0;i<4;i++)
{
infile.getline(line[i],100);
CStringc_str1,name_str;
c_str1.Format("%s",line[i]);
name_str=c_str1.Left(c_str1.Find(','));
if(!
name_str.Compare(ed.m_strxiuname1))
{
flag=TRUE;
j[i]=i;
}
}
if(flag==FALSE)MB_ERROR("并无此人!
");
else