C语言程序设计报告职工工资管理系统.docx
《C语言程序设计报告职工工资管理系统.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告职工工资管理系统.docx(29页珍藏版)》请在冰点文库上搜索。
C语言程序设计报告职工工资管理系统
C语言程序设计报告
课程名称:
C语言程序设计
院系:
管理与经济学院
专业班级:
工业工程2012142班
学号:
201214217
学生姓名:
李海蛟
指导教师:
杨雪青
完成时间:
2013-06-20
报告成绩:
1设计题目2
2、设计要求(包括设计内容描述)2
3、设计作用与目的3
4、所用软件3
5、系统设计4
5.1系统结构4
5.2程序程序图4
5.3产生源程序6
6、实验调试结果(附运行效果图)36
7、设计中的问题及解决方法39
8、设计心得40
9、参考文献41
职工工资管理系统的设计与实现
1.设计题目
题目:
工资管理系统
工资管理系统是企业不可缺少的一部分,它利用计算机对员工工资进行统一管理,实现工资管理系统的
系统化、规范化和自动化,为企业提高工作效率。
本程序旨在训练读者的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和结构数组的各种基本操作。
本程序中涉及结构体、数组、文件等方面的知识。
2.设计要求
1、启动软件时,进行密码校验。
若出错三次,则自动退出系统。
2、实现简易的提示菜单界面,刚运行时应显示版本信息。
用所学的知识尽量实现良好的、美观的“人机界面”,便于软件的操作使用。
3、要求把所有录入的数据以文件的形式,保存在硬盘上。
4、系统包含以下基本功能:
登陆功能、显示主菜单功能、职工信息输入信息输出、职工信息查询、职
工信息修改、工资排序、工资统计、导出数据、导入数据、退出等。
5、职工信息输入信息输出要求一个职工的基本信息(编号、姓名、基本工资)的录入,以文件形式保存——输入。
6、职工工资表浏览工资功能一一输出。
7、计算职工的工资(输入基本工资、扣款、奖金后,马上算出应发工资、税金、实发工资、总工资)
8、查询、排序功能一一算法。
1)按编号查询、排序。
2)按姓名查询。
3)按工资排序。
4)基本信息的删除与修改(可选项)
3.设计作用与目的
1、通过这次专题实习,巩固和加深对所学相关知识点的理解。
2、进一步熟悉基本流程控制结构实现分支的if…else语句、switch语句和实现循环
的for、while…、do…while语句、break、continue等。
3、基本数据类型、数组、结构体、自定义类、函数的应用。
4、加强对模块化程序设计和面向对象程序设计的理解。
5、掌握C语言程序设计的基本思想,了解简单的系统分析和
6了解数据库系统的理论
7、掌握数据库设计的基本方法,熟悉数据库设计的步骤;
8、学习基本数据库编程方法。
9、进一步巩固、加深学生所学专业课程《C语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
10全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终
目的。
11利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立
开发应用系统,进行数据处理的综合能力。
12对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
13掌握面向对象的程序设计方法。
14进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)、修改程序和程序的测试。
4.运行环境及工具软件
WindowsXP;
VisualC++6.0(完整绿色版);
5.系统设计
5.1程序逻辑图
图1:
系统结构框图
5.2程序流程图
结束
查询职工工资
#include//时间相关
/**********************^下面是对用到的全局常量声明*************************/
#defineNAME10//职工职工姓名长度
#definePASSWORD"123"//系统登陆密码intshuru=0;//全局变量标记当前录入职工个数FILE*fp;//声明一个文件指针
/**************************结士构体定^义************************************/
structperson{//职工工资的结构体charname[NAME];//职工职工姓名
intnum;//职工编号
floatpaid;//职工基本工资
floatdiscount;//扣款
floatextra;//奖金
floatfare;//税金
floatgotpaid;//应发工资floatrealpaid;//实发工资floatsum;//总工资
}*pp;//声明一个结构指针
/**********************^下面是对用到的函数声明*****************************/
voidPassword。
;//密码验证函数
voidSave(structpersonper[]);//保存信息函数
voidInputper(structpersonper[]);//录入信息函数voidDelper(structpersonper[]);//删除信息函数voidModifyper(structpersonper[]);//修改信息函数voidFindper(structpersonper[]);//查找信息函数voidInsertper(structpersonper[]);//插入信息函数voidSortper(structpersonper[]);//排序函数voidListper(structpersonper[]);//显示职工信息voidfare(structpersonper[],intn);//计算税金函数voidMenu();
^程^序^主体**************************************
voidHelp();
//**************************
voidmain()//程序入口
{
system("color027");//设置当前窗口的背景色和前景色
Password();//调用密码验函数Help();//调用系统信息函数Menu();//调用菜单函数}
voidInputper(structpersonper[])//录入职工工资函数原形
{
pp=per;//指针指向结构system("cls");//清屏inti;
printf(”请问你要输入几个职工的信息:
”);
scanf("%d",&shuru);
if((fp=fopen("inputdata","wb+"))==NULL)//当前目录下是否存在INPUTDATA文件
{//"wb+":
读写打开或建立一个二进制文件,允许读和写
printf("Cannotopenfilestrikeanykeyexit!
");
getch();
exit
(1);
}
fprintf(fp,"职工编号职工姓名基本工资扣款奖金应发工资税金实发工作总工资\n");
for(i=0;i{
printf(”输入职工编号:
”);//输入职工编号
fflush(stdin);
scanf("%d",&per[i].num);
printf(”输入职工姓名:
");//输入职工姓名
fflush(stdin);
gets(per[i].name);
printf(”输入职工的工资信息\n");
printf(”\n");
printf("\n基本工资:
”);//基本工资
fflush(stdin);
scanf("%f",&per[i].paid);
printf("\n扣款:
");//扣款
fflush(stdin);
scanf("%f",&per[i].discount);
printf("\n奖金:
");//奖金
fflush(stdin);
scanf("%f",&per[i].extra);
printf("\n税金:
");//税金
printf(”\n");
per[i].sum=per[i].paid-per[i].discount+per[i].extra;per[i].realpaid=per[i].paid-per[i].discount;
fprintf(fp,"%6d%8s%5.1f\t%5.1f\t%3.1f\t%5.1f\t%4.1f\t\n",per[i].num,per[i].name,per[i].paid,per[i].discount,per[i].extra,per[i].realpaid,per[i].sum);
}
}
voidModifyper(structpersonper[])
{
pp=per;
intid,i=0;//id为接收用户输入的职工编号
if((fp=fopen("modifydata.sys","wb+"))==NULL)
{
printf("Cannotopenfilestrikeanykeyexit!
");
getch();
exit
(1);
}
fprintf(fp,"职工编号职工姓名基本工资扣款奖金应发工资税金实发工资总工资\n");
printf("\n请输入你要修改的职工的编号:
”);
scanf("%d",&id);
Sleep(500);
printf("\n\t查找相关数据.");
for(i=0;i<=15;i++)
{
Sleep(250);
printf(".");
}
for(i=0;i{
if(per[i].num==id)//如果找到了就执行下面语句,找不到直接回主界面
{
printf("\n输入新职工编号:
”);//输入职工编号
fflush(stdin);
scanf("%d",&per[i].num);
printf("\n输入新职工姓名:
");//输入职工姓名
fflush(stdin);
gets(per[i].name);
printf(”输入职工的工资信息\n");
printf(”\n");
printf("\n基本工资:
”);
scanf("%f",&per[i].paid);
fflush(stdin);
printf("\n扣款:
");
scanf("%f",&per[i].discount);
fflush(stdin);
printf("\n奖金:
");
scanf("%f",&per[i].extra);
printf(”\n");
per[i].sum=per[i].paid-per[i].discount+per[i].extra;per[i].realpaid=per[i].paid-per[i].discount;
fprintf(fp,"%6d%8s%5.1f\t%5.1f\t%3.1f\t%5.1f\t%4.1f\t\n",per[i].num,per[i].name,per[i].paid,per[i].discount,per[i].extra,per[i].realpaid,per[i].sum);
}
}
}
voidFindper(structpersonper[])//查询职工工资信息
{
inti=O,j=O,id;//循环变量和用于接收职工编号
printf(”请输入你要查询的职工编号:
”);
scanf("%d",&id);
for(i=0;i{
if(per[i].num==id)//如果找到你查询的数据就执行下面语句
{//如果找不到。
直接回程序主界%
per[i].sum=per[i].paid-per[i].discount+per[i].extra;
per[i].realpaid=per[i].paid-per[i].discount;
printf("\n职工编号职工姓名基本工资扣款奖金应发工资税金实发工资总工资\n");
printf("\n%6d%8s%5.1f\t%5.1f\t%3.1f\t%5.1f\t%5.1f\t%5.1f\t%4.1f\t
\n\n”,per[i].num,per[i].name,per[i].paid,per[i].discount,per[i].extra,per[i].gotpaid,per[i].fare,per[i].realpaid,per[i].su
m);
system("pause");
}
}
}
voidInsertper(structpersonper[])//插入职工工资信息
{
intflag=1;
pp=per;
inti,id;
if((fp=fopen("insertdata.sys","wb+"))==NULL)
{
printf("Cannotopenfilestrikeanykeyexit!
");
getch();
exit
(1);
}
fprintf(fp,"职工编号职工姓名基本工资扣款奖金应发工资税金实发工资总工资\n");
printf(”输入你插入的职工编号:
");
scanf("%d",&id);
for(i=0;i{
if(per[i].num==id)//判断职工编号信息否存在?
{
printf(”职工编号信息已经存在!
\n");
flag=0;
getch();
break;
}
}
if(flag!
=O)
{
shuru++;//插入一个,原来的总数增加1
printf(”请确认输入要插入职工编号:
”);
scanf("%d",&per[shuru-1].num);//如果不存在..那么就把插入的信息放到结构数组最后
printf(”输入职工姓名:
");
fflush(stdin);
gets(per[shuru-1].name);
printf(”输入职工的工资信息\n");
printf(”\n");
printf("\n基本工资:
”);
fflush(stdin);
scanf("%f",&per[shuru-1].paid);
printf("\n扣款:
");
fflush(stdin);
scanf("%f",&per[shuru-1].discount);
printf("\n奖金:
");//奖金
fflush(stdin);
printf("\n税金:
");//税金
fflush(stdin);
printf(”\n");
per[i].sum=per[i].paid-per[i].discount+per[i].extra;
per[i].realpaid=per[i].paid-per[i].discount;
fprintf(fp,"%6d%8s%5.1f\t%5.1f\t%3.1f\t%5.1f\t%4.1f\t\n",per[shuru-1].num,per[shuru-1].name,per[shuru-1].
paid,per[shuru-1].discount,per[shuru-1].extra,per[i].realpaid,per[shuru-1].sum);
Sleep(500);
printf("插入数据成功!
\n");
getch();
}
}
voidListper(structpersonper[])//浏览所有职工工
{
inti=0;
for(i=0;i{per[i].gotpaid=per[i].paid-per[i].discount;
if(per[i].gotpaid<2000)
per[i].fare=0;
elseif(per[i].gotpaid>=2000&&per[i].gotpaid<4999)
per[i].fare=per[i].gotpaid*0.05;
elseif(per[i].gotpaid>=5000&&per[i].gotpaid<10000)
per[i].fare=per[i].gotpaid*0.1;
elseif(per[i].gotpaid>=10000&&per[i].gotpaid<99999)
per[i].fare=per[i].gotpaid*0.25;
elseif(per[i].gotpaid>=100000)
per[i].fare=per[i].gotpaid*0.3;
per[i].sum=per[i].paid-per[i].discount+per[i].extra;
per[i].realpaid=per[i].paid-per[i].discount;
}
printf("\n职工编号职工姓名基本工资扣款奖金应发工资税金实发工资总工资\n");
for(i=0;i{
printf("\n%6d%8s%5.1f\t%5.1f\t%3.1f\t%5.1f\t%5.1f\t%4.1f\t%5.1f\t",per[i].num,per[i].name,per[i].paid,per
[i].discount,per[i].extra,per[i].gotpaid,per[i].fare,per[i].realpaid,per[i].sum);
}
getch();
}
voidDelper(structpersonper[])//删除职工信息函数
{
pp=per;
structpersontemp;
intdelnum;
charask;
inti,j;
if((fp=fopen("Deldata.sys","wb+"))==NULL)
{
printf("Cannotopenfilestrikeanykeyexit!
");
getch();
exit
(1);
}
fprintf(fp,"职工编号职工姓名基本工资扣款奖金应发工资税金实发工资总工资\n");
system("cls");
printf("\n\n\t请输入你要删除的职工的职工编号:
");
fflush(stdin);
scanf("%d",&delnum);
printf("\n\t是否确认删除职工%d的信息(y/n)",delnum);
fflush(stdin);
ask=getchar();
if(ask!
='n')
{
for(i=0;i{
if(per[i].num==delnum)
break;
}
if(i>shuru)
printf("\n\t没有你要删除的职工!
\n");
else
{
for(j=i;j{
temp=per[j];
per[j]=per[j+1];
per[j+1]=temp;
}
shuru--;//删掉一个职工信息后职工总数相应-1
system("cls");
printf("\n\n删除成功!
\n”);
}
per[i].sum=per[i].paid-per[i].discount+per[i].extra;
per[i].realpaid=per[i].paid-per[i].discount;
fprintf(fp,"%6d%8s\t%5.1f\t%5.1f\t%5.1f\t%5.1f
\t%4.1f\n",per[i].num,per[i].name,per[i].paid,per[i].discount,per[i].extra,per[i].realpaid,per[i].sum);
getch();
}
}
voidSortper(structpersonper[])//排序函数
{
inti,j,chose;//i,j为循环变量chose为接收用户输入的排序方式
structpersontemp;
printf(”排序前的数据为\n");
printf("\n职工编号职工姓名基本工资扣款奖金、应发工资税金实发工资总工资\n");
for(i=0;i{
printf("\n%6d%8s%5.1f\t%5.1f\t%3.1f\t%5.1f\t%4.1f\t\n",per[i].num,per[i].name,per[i].paid,per[i].discount,per[i].extra,per[i].realpaid,per[i].sum);
}
printf("\n1.按职工编号排序\t2.按总工资(高宀低)排序\n");
printf("\n请您正确选择:
");
fflush(stdin);
scanf("%d",&chose);
if(chose==1)
{
for(i=0;i{
for(j=i+1;j{
if(per[i].num>per[j].num)
{
temp=per[i];
per[i]=per[j];
per[j]=temp;
}
}
}
printf("\n职工编号职工姓名基本工资扣款奖金应发工资税金实发工资总工资\n");
for(i=0;i{
printf("\n%6d%8s%5.1f\t%5.1f\t%3.1f\t%5.1f\t%4.1f\t\n",per[i].num,per[i].name,per[i].paid,per[i].discount,per[i].extra,per[i].realpaid,per[i].sum);
}
system("pause");
}
elseif(chose==2)
{
for(i=0;i{
for(j=i+1;j{
if(per[i].sum{
temp=per[i];
per[i]=per[j];
per[j]=temp;
}
}
}
printf("\n职工编号职工姓名基本工资扣款奖金应发工资税金实发工资总工资\n");
for(i