基于c++语言的职工工资管理系统

发布时间:



广

课程设计说明书

学生姓名刘汉学号05141344专业班级信息管理与信息系统三班指导教师侯昉职称教师
2008103
设计题目职工工资管理系统






一、前言..............................................................................................................1二、课题要求、课题分析..................................................................................1(一)课题要求............................................................................................1(二)课题分析............................................................................................1三、方案设定......................................................................................................2四、程序功能描述与模块结构..........................................................................2(一)程序功能描述....................................................................................2(二)功能模块............................................................................................2(三)程序流程图........................................................................................3四、用户使用说明..............................................................................................6五、测试结果......................................................................................................7六﹑程序经验教训总结...................................................................................12七﹑附录...........................................................................................................13



一、前言

C++语言是具有面向对象特性的C语言的继承者,即是由C语言演变而来,全面兼容C语言。C语言的优点,如语言简洁灵活,运算符和数据结构丰富,具有结构化控制语句,程序执行效率高,同时具有高级语言与汇编语言的优点,这些在C++语言中同样能够体现出来。但是C++语言最有意义的方面是支持面向对象的程序设计,在数据类型、算法的控制结构、函数等方面都有很好的体现。面向对象编程中,对象是程序设计的基本单位,但对象的静态属性往往需要用某种类型的数据来表示,对象的动态属性要由成员函数来实现,面向函数的实现归根到底还是算法的设计。

二、课题要求、课题分析

(一)课题要求
C++课程设计》通过综合运用在《C++程序设计》和《数据结构》中所学的程序结构、流程控制语句、数组、函数、指针、结构体、数据结构等知识,以简易“管理信息系统”程序设计为载体,以C++语言为工具,使我们更深地涉足计算机专业设计领域,并使所学知识和技能得到进一步巩固、深化和扩展,以达到能用C++编写初等程度软件的目的,为继续学习后续课程及今后走上相关工作岗位打下良好的基础。
经过调查分析,决定设计职工工资管理系统。

(二)课题分析
职工工资管理系统可定位于企业会计系统的一个子系统,该系统主要完成的工作为:录入各职工自身及工资情况、对已经存在的数据的修改、删除、可查询、统计系统中的数据等。为此因此职工工资管理系统的功能:读取文件信息、数据输入、显示、排序、查找、增加、删除、修改、保存等。

134


三、方案设定

根据系统功能要求,采用结构体、数组、指针等数据类型并结合链表数据结构来完成设计。在程序中定义了structepployee的职工信息结构体、classInformation职工类、epployee*Information::creat(void的职工链表信息及voidInformation::output(输出等函数,编写各相关的子函数的调用等。


四、程序功能描述与模块结构

(一)程序功能描述
通过主菜单Menu(函数将读取文件信息、输入、显示、统计、增加、删除、修改、查找、排序等函数结合一起,在用户通过相关操作选择其中一个功能时,调用该功能函数,完成数据处理。在主函数中调用主菜单Menu(函数,完成操作。用一个中间函数将主函数与各功能函数连接在一起,不仅使程序语言简洁、明了、易懂,而且在功能实现上也更加晚上。

(二)功能模块
1.主函数intmain(void设置背景颜色和字体颜色、调用设计者的相关信息函数、调用Menu函数,实现系统的主要功能处理;
2.主菜单Menu(函数:确定如何选择所需功能,调用读取文件信息、数据输入、显示、排序、查找、增加、删除、修改、保存等函数,完成职工工资管理系统的数据处理;
3.读取文件的信息Read(函数:从文件中读取职工工资的信息表并显示出来;4.数据输入函数creat(:建立链表,完成职工信息录入;5.数据显示函数output(:将职工信息数据显示出来;6.数据统计函数count(:统计职工人数;
234


7.数据增加函数insert(:添加职工信息;8.数据删除函数cancel(:删除职工信息数据;9.数据修改函数modify(:修改职工工资等信息数据;10.数据查找函数find(:查找某一职工工资等信息情况;
11.数据排序函数sort(:将存储在文件中的职工信息按一定要求排序;12.数据保存函数save(:对系统中的数据进行相关的操作后将其保存起来;13.作者信息函数editor(:显示设计者的相关信息;14.登陆函数Pass(:设定使用权限。

(三)程序流程图
程序流程图主是对各功能模块的具体描述,以一种图表的方式简洁明了的将各模块的呈现出来,通过这些流程图可清楚的看出整个程序的运行过程,体会程序的流畅性。
334


1.主函数流程图

1-1主函数的流程图

开始
system“colord”
调用系统函数
editor(
调用作息信息函数
pass(
调用登陆函数
menu(
调用主菜单函数
结束

434


2.各子功能函数流程图
开始
定义变量
输出系统相关信息
输入choice
N
choice<0||choice>9
switch(choice
Y
输出函数

结束


1-2Menu函数流程图
534



1-3删除函数的N-S流程图

四、用户使用说明

这是一个关于职工工资管理系统,具有输入、输出、统计、删除、查询、修改数据等功能,建立了一个含有姓名、性别、编号、工资、总工资等成员的结构体数据类型的变量structepployee
1.用户使用时,根据提示操作,进入登陆页面。输入登陆名administrator,登陆密码administrator,进入操作系统。如果登陆信息输错三次,自动退出系统。2.按显示的数字选择操作,先输入职工数据,然后进行其他操作。所以输入1开始录入相关数据。用户录入完数据后,在姓名处键以“#”,结束操作。
634


3.提取文件信息,输入数字“0,回车确定操作,将系统以前操作过的保存的文件提取出来,并显示。
4.显示职工信息,输入数字“2,将需显示的职工信息的编号输入,回车确定操作,系统提取相关数据并显示。
5.将输入的数据进行统计排序,输入数字“3,回车确定操作,系统显示工资统计表、及各项工资的平均值。
6.查找职工工资,输入4回车确定操作,系统显示“请输入要查找的编号”输入想要查找的职工的编号,系统提取保存的数据,并显示出来。
7.增加职工工资,输入“5”回车确定操作,系统显示输入的页面,将需增加的职工信息输入,输入完后回车确定,系统显示成功插入,并显示职工工资信息表。8.删除职工工资,输入6回车确定操作,系统显示“请输入要删除的编号”输入要删除的职工编号,系统将保存的数据删除,并显示剩余的职工工资信息表。9.修改职工信息,输入“7,回车确定操作,输入要修改的编号,系统显示该职工的信息,将改后的信息输入系统。10.信息。11.
退出系统,输入“9,回车确定操作,系统显示退出的页面,输入任意一
个键,退出系统。
(温馨提示:因时间的限制等原因,本程序内存设置还不够很完善,所以对于整个系统的使用应按照系统设置的顺序,一项项完成下来,方可不出现漏洞。如果没按照顺序操作,可能会在使用的过程出现一些小差错。
将所有操作过的信息保存,输入“8,回车确定操作,系统显示成功保存
五、测试结果

1.开始运行程序,进入系统页面,显示制作者的信息。
734




2-1显示制作者信息的页面

2.任意键继续操作,进入登陆页面。

2-2登陆系统的页面
输错管理员名字或者密码进入到的页面如下


2-3登陆系统出错的页面

3.成功进入操作系统,按照使用说明进行操作,进入的是总系统的提示页面。
834




2-4系统操作的页面



2-5输入数据的页面



934


2-6显示数据的页面



2-7文件提取信息的页面


2-8排序统计的页面



2-9查找职工信息的页面



2-10查找不到职工信息的页面
1034




2-11增加职工信息的页面


2-12增加职工信息后并显示职工工资信息表的页面


2-13删除职工信息并显示剩余职工信息的页面


2-14修改职工信息的页面
1134




2-15成功修改职工信息的页面


2-16修改没有编号职工信息的页面


2-17保存所有数据的页面



2-18退出系统的页面

六﹑程序经验教训总结
通过这个程序设计,我不仅提高了动手操作能力,对C++语言有了更深的认识,能够更好地运用C++语言进行编程设计,同时在思维、看待问题的全面性等方面也有了很大的提高。不过由于时间、经验不够、对语言的掌握程度不深等问题,在这个系统设计还存在一些问题,比如内存设计还不够完善,整个系统的流畅性等,希望可以
1234


在今后的设计上能够解决这些问题,做的更好。


七﹑附录

//职工成绩管理系统#include#include#include#include#include#include#defineNULL0intconstN=20;
#defineLENsizeof(structepployeeusingnamespacestd;
intn=0;//定义一个全局变量统计职工人数
//定义一个职工信息的结构体structepployee{
charname[N];//用来存放姓名charsex[N];//用来存放性别longid;//用来存放编号floatpaid[3];//用来存放工资inttotal;//用来存放总工资structepployee*next;};
//职工类classInformation
1334


{public:
Information(;//构造函数.~Information(;//析构函数.epployee*creat(;//建立链表
voidoutput(epployee*head;//显示职工信息
intcount(epployee*head;//定义函数count(统计职工总数epployee*insert(epployee*head;//指针函数*insert(用来添加职工信息.epployee*cancel(epployee*head,longid;//指针函数*cancel(用来删除职工信息.
epployee*find(epployee*head,longid;//指针函数*find(用来查找职工信.
epployee*modify(epployee*head,longid;//指针函数*modife(用来修改职工的信息.
voidsort(epployee*head;//定义paixu(函数将职工的总额从大到小排列并输出
voidaverage(epployee*head;//定义职工工资平均值的函数voidsave(epployee*head;//保存文件信息epployee*Read(;//读取文件信息private:
epployee*p1,*p2,*p3,*head,st;};
Information::Information({cout<<"
******************************************************************************\n";
cout<<"cout<<"
******************************************************************************\n\n";
}
1434
------------------------<<使
>>------------------------\n";


//作者的信息和提示voideditor({
cout<<"\n\t\t\t本程序制作者:\n\n\t\t\tIdon'tknow\n\n\t\t\tQQ:895026504";cout<<"\n\n\t\t\tMadeByVC6.0++\n\n\t\t\t2008930\n\n\t\t\t>进入登陆界面!!";
cout<<"\n\n\t\t\t如果需要对原来的信息进行操作,则先选择0读取文件信息\n"<
}
Information::~Information({*****\n";
cout<<"cout<<"
******************************************************************************\n";
}
//建立链表信息
epployee*Information::creat(void
{//定义一个指向structepployee的结构体指针函数*creat(用来录入职工信息.charch[N];n=0;//用来存放职工姓名
p1=p2=(epployee*malloc(LEN;//调用malloc(函数用来开辟一个新的存储单元cout<<"-------------<<,#!>>--------------"<
cout<<"姓名:";cin>>ch;
head=NULL;//给指针head赋初值
while(strcmp(ch,"#"!=0//调用字符比较函数strcmp(用来判断是否继续输
------------------------<<使
>>------------------------\n";
cout<<"
*************************************************************************
1534


{
p1=(epployee*malloc(LEN;//调用malloc(函数用来开辟一个新的存储单元
strcpy(p1->name,ch;//将循环结构前面输入的姓名复制到结构体名为p1的数组name
cout<<"性别:";cin>>p1->sex;cout<<"编号:";cin>>p1->id;
while((p1->id<0||(p1->id>100000//判断输入的编号是否有效(100000{
cout<<"对不起,您的输入错误!请重新输入(>0<1000000:";cin>>p1->id;}
cout<<"基本工资:";cin>>p1->paid[0];
while((p1->paid[0]<0||(p1->paid[0]>100000//判断输入的分数是否有效(>=0<=100000
{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";cin>>p1->paid[0];}
cout<<"加班工资:";cin>>p1->paid[1];
while((p1->paid[1]<0||(p1->paid[1]>100000//判断输入的分数是否有效(>=0<=100000
{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";cin>>p1->paid[1];}
cout<<"其他奖金:";cin>>p1->paid[2];
while((p1->paid[2]<0||(p1->paid[2]>100000//判断输入的分数是否有效(>=0<=100000
1634


{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";cin>>p1->paid[2];}
p1->total=p1->paid[0]+p1->paid[1]+p1->paid[2];//计算总额
if(n==0head=p1;//如果是输入第一组职工信息就将指针p1赋给指针headelsep2->next=p1;//否则将p1赋给p2所指结构体的next指针p2=p1;//将指针p1赋给指针p2n++;//将职工人数n的值加1cout<<"\n姓名:";
cin>>ch;//将输入的姓名存放到字符数组ch}
p2->next=NULL;//p2所指结构体的next指针重新赋空值return(head;//将输入的第一组职工信息返回}
//定义output(函数将职工的信息从头指针所指内容开始输出voidInformation::output(epployee*head{
//system("cls";
if(head==NULLcout<<"这是一个空表,请先输入职工信息!\n";else{
cout<<"-------------------------------------------------------------------------------\n";cout<<"*职工工资信息表*\n";
cout<<"-------------------------------------------------------------------------------\n";
cout<<"|||||性别||基本工资||加班工资||其他奖金||总额|\n";
cout<<"-------------------------------------------------------------------------------\n";p1=head;//将头指针赋给pdo{
cout<id<name<sex
1734


<paid[0]<paid[1]<paid[2]<total<
cout<<"-------------------------------------------------------------------------------\n";p1=p1->next;//将下一组职工信息的next指针赋给p
}while(p1!=NULL;//若指针p非空则继续,目的是把所有的职工信息都传给指针p然后输出.
}}
//统计职工人数的函数
intInformation::count(structepployee*head//定义函数count(统计职工总数{
if(head==NULLreturn(0;//若指针head为空返回值为0elsereturn(1+count(head->next;//函数的递归调用}
//添加职工的成绩的函数
epployee*Information::insert(epployee*head
//插入新结点定义一个指向structepployee的结构体指针函数*insert(用来添加职工信息.
{
//system("cls";
cout<<"\t----------------<<请输入新增职工成绩信息>>----------------\n"<p1=(epployee*malloc(LEN;//使p1指向插入的新结点cout<<"编号:";cin>>p1->id;
while((p1->id<0||(p1->id>100000{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";
cin>>p1->id;//将输入的编号存放到p1所指结构体的数组id}
cout<<"姓名:";
1834


cin>>p1->name;//将输入的姓名存放到结构体名为p1的数组namecout<<"性别:";cin>>p1->sex;cout<<"基本工资:";cin>>p1->paid[0];
while((p1->paid[0]<0||(p1->paid[0]>100000{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";
cin>>p1->paid[0];//将输入的基本工资存放到p1所指结构体的数组paid}
cout<<"加班工资:";cin>>p1->paid[1];
while((p1->paid[1]<0||(p1->paid[1]>100000{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";
cin>>p1->paid[1];//将输入的加班工资存放到p1所指结构体的数组paid}
cout<<"其他奖金:";cin>>p1->paid[2];
while((p1->paid[2]<0||(p1->paid[2]>100000{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";
cin>>p1->paid[2];//将输入的其他奖金存放到p1所指结构体的数组paid}
p1->total=p1->paid[0]+p1->paid[1]+p1->paid[2];//计算总分p2=head;//将头指针赋给p2
if(head==NULL//若没调用次函数以前的头指针head为空{
head=p1;p1->next=NULL;
}//则将p1赋给头指针head并将p1所指结构体成员指针next赋空值else{
while((p1->id>p2->id&&(p2->next!=NULL{
1934


p3=p2;//p3指向原p2指向的结点p2=p2->next;
}//p2后移一个结点if(p1->id<=p2->id{
if(head==p2{
p1->next=head;head=p1;
}//插入到第一个结点之前else{
p3->next=p1;p1->next=p2;
}//插入到p3所指结点之后}else{
p2->next=p1;p1->next=NULL;}//插入到尾结点之后}
n++;//将职工人数加1
cout<<"\t----------------<<你输入的职工信息已经成功插入>>----------------"<return(head;}
//删除职工信息
epployee*Information::cancel(epployee*head,longid//定义一个指向structepployee的结构体指针函数*delete(用来删除考生信息.
{
system("cls";
if(head==NULL//若调用次函数以前的头指针head为空{
2034


return(head;}else{
p1=head;//否则将头指针赋给p1
while(id!=p1->id&&p1->next!=NULL//寻找要删除的结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空
{p2=p1;p1=p1->next;
}//p2指向原p1指向的结点p1后移一个结点
if(id==p1->id//如果输入的职工编号是p1所指的职工编号//结点找到后删
{
if(p1==headhead=p1->next;//如果head指针和p1指针相等则将下一个结点赋给指针head
else
p2->next=p1->next;//否则将p1所指结点赋给p2所指结点将要删除的职工信息跳过去
cout<<"删除编号为"<的职工\n";n--;//将职工人数减1}
return(head;//将头指针返回}}
/**************************修改职工数据**************************/epployee*Information::modify(epployee*head,longid{
//system("cls";
cout<<"\t----------------<<请输入须修改的职工工资信息>>----------------\n"<p1=(epployee*malloc(LEN;//使p1指向输入的结点p1=head;//否则将头指针赋给p1while(id!=p1->id&&p1->next!=NULL
2134


//寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空
{
p1=p1->next;//p2指向原p1指向的结点p1后移一个结点}
if(id==p1->id//如果要查找的职工编号是p1所指的职工编号{
cout<<"你需要修改的职工信息如下:\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<"|||||性别||基本工资||加班工资||其他奖金||总额|\n";
cout<<"------------------------------------------------------------------------------\n";cout<id<name<sex<paid[0]<paid[1]<paid[2]<total<
cout<<"------------------------------------------------------------------------------\n";cout<<"编号:";cin>>p1->id;
while((p1->id<0||(p1->id>100000{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";
cin>>p1->id;//将输入的编号存放到p1所指结构体的数组id}
cout<<"姓名:";
cin>>p1->name;//将输入的姓名存放到结构体名为p1的数组namecout<<"性别:";cin>>p1->sex;cout<<"基本工资:";cin>>p1->paid[0];
while((p1->paid[0]<0||(p1->paid[0]>100000
2234


{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";
cin>>p1->paid[0];//将输入的基本工资存放到p1所指结构体的数组paid}
cout<<"加班工资:";cin>>p1->paid[1];
while((p1->paid[1]<0||(p1->paid[1]>100000{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";
cin>>p1->paid[1];//将输入的加班工资存放到p1所指结构体的数组paid}
cout<<"其他奖金:";cin>>p1->paid[2];
while((p1->paid[2]<0||(p1->paid[2]>100000{
cout<<"对不起,您的输入错误!请重新输入(>0<100000:";
cin>>p1->paid[2];//将输入的其他奖金存放到p1所指结构体的数组paid}
p1->total=p1->paid[0]+p1->paid[1]+p1->paid[2];//计算总分}else
cout<<"需要修改的信息中没有编号为"<的职工.\n\n";//没有想要修改的结点信息
getchar(;return(head;}
//查找职工信息
epployee*Information::find(epployee*head,longid
//定义一个指向structepployee的结构体指针函数*find(用来查找职工信息.{
//system("cls";
if(head==NULL//若调用次函数以前的头指针head为空{
2334


cout<<"这是一个空表,请先输入职工信息!\n";return(head;}else{
p1=head;//否则将头指针赋给p1while(id!=p1->id&&p1->next!=NULL
//寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空
{
p1=p1->next;//p2指向原p1指向的结点p1后移一个结点}
if(id==p1->id//如果要查找的职工编号是p1所指的职工编号{
cout<<"------------------------------------------------------------------------------\n";
cout<<"|||||性别||基本工资||加班工资||其他奖金||总额|\n";
cout<<"------------------------------------------------------------------------------\n";cout<id<name<sex<paid[0]<paid[1]<paid[2]<total<
cout<<"------------------------------------------------------------------------------\n";}else
cout<<"信息中没有编号为"<的职工.\n";//结点没找到return(head;}}
//定义sort(函数将职工的工资总额从大到小排列并输出
2434


voidInformation::sort(epployee*head{
//system("cls";inti,k,m=0,j;
epployee*p[N];//定义一个指向structepployee的结构体指针数组pif(head!=NULL//如果头指针是空则继续{m=count(head;
cout<<"------------------------------------------------------------------------------\n";cout<<"*职工工资统计表*\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<"|编号||姓名||性别||基本工资||加班工资||其他奖金||名次|\n";
cout<<"------------------------------------------------------------------------------\n";p1=head;for(k=0;k{p[k]=p1;p1=p1->next;}
for(k=0;k选择排序法for(j=k+1;jif(p[k]->totaltotal{p2=p[k];p[k]=p[j];p[j]=p2;
}//从大到小排列的指针for(i=0;i{
cout<id<name<sex<paid[0]<paid[1]
2534
|总额|

<paid[2]<total<
cout<<"------------------------------------------------------------------------------\n";}}}
//求各工资的平均值的函数
voidInformation::average(epployee*head{
intk,m;
floatarg1=0,arg2=0,arg3=0;
if(head==NULL//如果头指针是空则继续{}else{
m=count(head;p1=head;for(k=0;k{}
arg1/=m;arg2/=m;arg3/=m;cout<<"*各项工资的平均值*\n";
cout<<"------------------------------------------------------------------------------\n";cout<<"\t\t基本工资的平均值:"<加班工资
arg1+=p1->paid[0];arg2+=p1->paid[1];arg3+=p1->paid[2];p1=p1->next;
cout<<"这是一个空表,请先输入职工信息!\n";
的平均值:"<
2634


}

<<"\n"<<"\t\t奖金的平均值:"<
cout<<"------------------------------------------------------------------------------\n";}
//保存函数.
voidInformation::save(epployee*head{
//system("cls";
ofstreamout("data",ios::out;out<while(head!=NULL{out<name<<"\t"<id<<"\t"<<"\t"<sex<<"\t"<paid[0]<<"\t"<paid[1]<<"\t"<paid[2]<<"\t"<total<head=head->next;}}
//读取文件的信息
epployee*Information::Read({
//system("cls";inti=0;
p1=p2=(epployee*malloc(LEN;head=NULL;
ifstreamin("data",ios::out;in>>i;
if(i==0{cout<<"data文件中的数据为空,请先输入数据!"<else{
2734


cout<<"\n原文件已保存的信息如下:\n";
cout<<"………………………………………………………………………………………………"<
cout<<"|||||性别||基本工资||加班工资||其他奖金||总额|\n";

cout<<"………………………………………………………………………………………………"<
for(;i>0;i--{
p1=(epployee*malloc(LEN;
in>>st.name>>st.id>>st.sex
>>st.paid[0]>>st.paid[1]>>st.paid[2]>>st.total;strcpy(p1->name,st.name;p1->id=st.id;strcpy(p1->sex,st.sex;p1->paid[0]=st.paid[0];p1->paid[1]=st.paid[1];p1->paid[2]=st.paid[2];p1->total=st.total;
if(n==0head=p1;//如果是输入第一组职工信息就将指针p1赋给指针head
elsep2->next=p1;//否则将p1赋给p2所指结构体的next指针p2=p1;//将指针p1赋给指针p2n++;//n的值加1//显示读入数据
cout<<""<name<<"\t"<id<<"\t"<sex<<"\t"<paid[0]<<"\t"<paid[1]<<"\t"<paid[2]<<"\t"<total<
2834



cout<<"………………………………………………………………………………………………"<
}
cout<<"数据已经成功读取完毕!\n\n"<p2->next=NULL;return(head;}}//菜单voidMenu({
Informationperson;
epployee*head=NULL;intchoice;longi;do{
cout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※"<
ndl;

cout<<"\t
"<
2934
cout<<"\t
cout<<"\t~v~____~v~cout<<"\tcout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※"<
"<"<"<


cout<<"\t"<
ndl;

cout<<"\t~v~0.~v~
cout<<"\tcout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※"<
"<
"<
cout<<"\t"<

cout<<"\t"<
cout<<"\t"<
cout<<"\t"<
cout<<"\t"<
cout<<"\t"<
cout<<"\t"<
cout<<"\t"<
cout<<"\t"<

cout<<"\t"<
cout<<"\t"<
cout<<"\t"<
cout<<"\t"<
~v~1.~v~2.~v~3.~v~4.~v~5.~v~6.3034
~v~
~v~~v~~v~~v~
~v~

cout<<"\t~v~7.~v~"<
cout<<"\t"<

cout<<"\t~v~8.~v~
"<
cout<<"\t"<

cout<<"\t~v~9.退~v~
"<
cout<<"\t"<
endl;
cout<<"请输入您的选择(0--9:";cin>>choice;
while(choice<0||choice>9{
cout<<"对不起,您的输入错误!请输入您的选择(0--9:";cin>>choice;}
switch(choice{
case0:
head=person.Read(;break;case1:
head=person.creat(;break;case2:
person.output(head;break;case3:
person.sort(head;person.average(head;
cout<<"加工作的职工人数为:"<
3134
cout<<"\t※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<


\n\n";
break;case4:
cout<<"请输入要查找的编号:";cin>>i;
while(i<0||i>100000{
cout<<"对不起,您的输入错误!请重新输入:";cin>>i;}
person.find(head,i;break;case5:
head=person.insert(head;person.output(head;break;case6:
cout<<"请输入要删除的编号:";cin>>i;
while(i<0||i>100000{
cout<<"对不起,您的输入错误!请重新输入:";cin>>i;}
head=person.cancel(head,i;person.output(head;break;case7:
cout<<"请输入要修改的编号:";cin>>i;
while(i<0||i>100000{
cout<<"对不起,您的输入错误!请重新输入:";cin>>i;
3234


}
person.modify(head,i;break;case8:
cout<<"信息已经成功保存!"<person.save(head;break;case9:
system("cls";break;default:
cout<<"对不起,您的输入错误!请重新输入:\n";break;}}
while(choice!=9;}
//管理员登陆voidPass({
charUserName[15];charPassward[15];inti=1;
cout<<"****************************************************************************\n";
cout<<"\n\t为保护职工成绩信息,只有管理员才可以进行管理!\n";
cout<<"\n\t管理员名和登陆密码都只有3次机会,如果超过将自动退出系!\n\n";

cout<<"****************************************************************************\n";
cout<<"\n请输入管理员名:";
3334


cin>>UserName;
while(strcmp(UserName,"administrator"!=0{if(i>=3
exit(0;//超过3次则登陆失败,退出系统i++;
cout<<"\n管理员名无效!请重新输入:";cin>>UserName;}
cout<<"\n请输入密码:";cin>>Passward;
while(strcmp(Passward,"administrator"!=0{if(i>=3
exit(0;//超过3次则登陆失败,退出系统i++;
cout<<"\n密码输入错误!请重新输入:"<cin>>Passward;}
cout<<"\n\t\t欢迎管理员的到来!!!!!\n"<}//主函数.intmain(void{}
3434
system("colord";//设置背景色和字体颜色editor(;
system("PAUSE";//系统暂停system("cls";//系统清屏Pass(;
system("PAUSE";system("cls";Menu(;return0;

基于c++语言的职工工资管理系统

相关推荐