C语言 职工工资管理系统设计报告.docx
《C语言 职工工资管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《C语言 职工工资管理系统设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
C语言职工工资管理系统设计报告
《C语言程序设计》
课程设计报告
分值
设计题目:
职工工资管理系统
专业:
班级:
学号:
XX:
信息工程学院
1前言
工资管理系统是企业不可缺少的一部分,它利用计算机对员工工资进行统一管理,实现工资管理系统的系统化、规化和自动化,为企业提高工作效率。
本程序旨在训练读者的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和结构数组的各种基本操作。
本程序中涉及结构体、数组、文件等方面的知识。
2需求分析
2.1课程设计目的
学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。
通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。
2.2课程设计任务
职工工资管理系统
功能设计要求
(1)输入记录:
将每一个职工的XX、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。
该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。
(2)显示记录:
根据用户提供的记录或者根据职工XX显示一个或几个职工的各项工资和平均工资。
(3)修改记录:
可以对数据文件的任意记录的数据进行修改并在修改前后对记录容进行显示。
(4)查找记录:
可以对数据文件的任意记录的数据进行查找并在查找前后对记录容进行显示。
(5)删除记录:
可删除数据文件中的任一记录。
(6)统计:
(A)计算各项工资平均工资及总工资,(B)统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元)以的工资职工人数及占总职工人数的百分比。
(C)按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。
(7)保存数据文件功能。
例如:
职工工资信息表
ID号XX基本工资职务工资津贴医疗保险-公积金-总工资
01望12867941981091352034
02明1185628135941141740
03王小民8954389864731294
04效章13508682101161502162
05彭山7453988461681098
各项平均工资1092.2625.214588.8108
(要求:
1.源文件采用多文件的工程结构2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的容需要自学)
2.3设计环境
(1)WINDOWS2000/2003/XP/7/Vista系统
(2)VisualC++
2.4开发语言
C语言
3分析和设计
从主菜单中选择相对应的数字,使程序进入不同的程序模块,用switch实现其功能,程序共分为六个模块,分别为:
主函数、Input()函数(输入函数)、Display(T)显示函数(计算职工工资信息并输入文件)、Delete(T)删除函数(从文件中读入信息并将其删除),Chick(T)查询模块,Change(T);修改模块,sum(T);统计模块
3.1系统模块图
图3.1系统模块图
4具体代码实现
#include"stdio.h"
#include
#include
#include//头文件
staticintn=0;//定义静态全局变量,存储已经读入记录的条数。
typedefstruct
{
charid[15];/*ID号*/
charname[10];/*XX*/
doublebase;/*基本工资*/
doubleposition;/*职务工资*/
doubleallowance;/*津贴*/
doubleinsurance;/*医疗保险*/
doublefund;//公积金
doublewage;//总工资
}Student;
StudentT[100];
intMenu_Select()
{
intc;
do{
system("cls");//清屏
printf("\t\t******************职工工资管理系统*********************\n");
printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t\t#1.添加记录#\n");
printf("\t\t##\n");
printf("\t\t#2.显示记录#\n");
printf("\t\t##\n");
printf("\t\t#3.删除记录#\n");
printf("\t\t##\n");
printf("\t\t#4.查询记录#\n");
printf("\t\t##\n");
printf("\t\t#5.修改记录#\n");
printf("\t\t##\n");
printf("\t\t#6.统计记录#\n");
printf("\t\t##\n");
printf("\t\t#0.退出程序#\n");
printf("\t\t#############################################\n");
printf("\t\t\t请您选择(0-6)选择请输入:
");
scanf("%d",&c);
}while(c<0&&c>=7);
return(c);
}
intInput(Studentstu[])
{
inti=0;
charsign;
while(sign!
='n'&&sign!
='N')
{
printf("\tID:
");
scanf("\t%s",stu[n+i].id);
printf("\tXX:
");
scanf("\t%s",stu[n+i].name);
printf("\t基本工资:
");
scanf("\t%lf",&stu[n+i].base);
printf("\t职务工资:
");
scanf("\t%lf",&stu[n+i].position);
printf("\t津贴:
");
scanf("\t%lf",&stu[n+i].allowance);
printf("\t医疗保险:
");
scanf("\t%lf",&stu[n+i].insurance);
printf("\t公积金:
");
scanf("\t%lf",&stu[n+i].fund);
stu[n+i].wage=stu[n+i].base+stu[n+i].position+stu[n+i].allowance+stu[n+i].insurance+stu[n+i].fund;;
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
voidDisplay(Studentstu[])
{
inti;
doublem1=0,m2=0,m3=0,m4=0,m5=0;
printf("\n\n~~~~~~~~~~~~~按照XX进行排序!
\n\n");
printf("------------------------------------------------------------------------------\n");//显示的格式
printf("IDXX基本工资职务工资津贴医疗保险公积金总工资\n");
printf("------------------------------------------------------------------------------\n");
for(i=0;iprintf("%-6s%-8s%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lf\n",stu[i].id,stu[i].name,stu[i].base,stu[i].position,stu[i].allowance,stu[i].insurance,stu[i].fund,stu[i].wage);
//-14d%-表示左对齐14表示十四个字节的位置不足用空格补齐
for(i=0;i{
m1+=stu[i].base;
m2+=stu[i].position;
m3+=stu[i].allowance;
m4+=stu[i].insurance;
m5+=stu[i].fund;
}
if(n!
=0)
{
printf("----------------------------------------------------------------------\n");
printf("各项平均工资:
%-11.2lf%-11.2lf%-11.2lf%-11.2lf%-11.2lf\n\n",m1/n,m2/n,m3/n,m4/n,m5/n);
}
system("pause");//系统函数停止。
}
intDelete(Studentstu[])
{
inti=0,j,x;
charm[10];
printf("\t1.全部删除\n");
printf("\t2.根据ID号删除\n");
printf("\t请选择:
");
scanf("%d",&x);
if(x==1)
{
for(j=0;j{
stu[j]=stu[n+1];
}
n=0;
printf("~~~~~已抹掉数据文件中的所有数据!
\n");
system("pause");
}
elseif(x==2)
{
printf("\t请输入想删除记录中的ID号:
");
scanf("%s",m);
while(strcmp(stu[i].id,m)!
=0&&ii++;
if(i==n)
{
printf("\t职工工资管理系统中没有此人!
\n");
}
else
{
for(j=i;j{
stu[j]=stu[j+1];
}
printf("\t\t\t已经成功删除!
\n");
n=n-1;
}
}
return(n);
}
voidChick(Studentstu[])
{
intm;
printf("\t\n请选择查询方式:
\n");//printf输出查询格式
printf("\t**************************************\n");//格式:
printf("\t**1--XX查询**\n");
printf("\t**2--ID查询**\n");
printf("\t**************************************\n");
printf("请选择:
");
scanf("%d",&m);
while(m!
=1&&m!
=2)
{
printf("输入错误,请重新选择:
");
scanf("%d",&m);
}
if(m==1)//此处对名字进行特殊处理
{
chars[20];
inti=0;
intf=0;
printf("\t请输入想查询的XX:
");
scanf("\t%s",s);
while(strcmp(stu[i].name,s)!
=0&&i{//名字如果有重复的也照常输出
i++;
}
if(i==n)
{
printf("\t职工工资管理系统中没有此人!
\n");
return;
}
else
{
printf("\tID:
%s\n",stu[i].id);
printf("\tXX:
%s\n",stu[i].name);
printf("\t基本工资:
%.2lf\n",stu[i].base);
printf("\t职务工资:
%.2lf\n",stu[i].position);
printf("\t津贴:
%.2lf\n",stu[i].allowance);
printf("\t医疗保险:
%.2lf\n",stu[i].insurance);
printf("\t公积金:
%.2lf\n",stu[i].fund);
printf("\t总工资:
%.2lf\n",stu[i].wage);
}
}
if(m==2)//用ID作为索引查询
{
chars[20];
inti=0;
printf("\t请输入想查询的ID:
");
scanf("\t%s",s);
while(strcmp(stu[i].id,s)!
=0&&ii++;
if(i==n)
{
printf("\t职工工资管理系统中没有此人!
\n");
return;
}
printf("\tID:
%s\n",stu[i].id);
printf("\tXX:
%s\n",stu[i].name);
printf("\t基本工资:
%.2lf\n",stu[i].base);
printf("\t职务工资:
%.2lf\n",stu[i].position);
printf("\t津贴:
%.2lf\n",stu[i].allowance);
printf("\t医疗保险:
%.2lf\n",stu[i].insurance);
printf("\t公积金:
%.2lf\n",stu[i].fund);
printf("\t总工资:
%.2lf\n",stu[i].wage);
}
}
voidChange(Studentstu[])
{
intm;
printf("\t\n请选择修改方式:
\n");//printf输出查询格式
printf("\t**************************************\n");//格式:
printf("\t**1--ID**\n");
printf("\t**2--XX**\n");
printf("\t**************************************\n");
printf("请选择:
");
scanf("%d",&m);
while(m!
=1&&m!
=2)
{
printf("输入错误,请重新选择:
");
scanf("%d",&m);
}
if(m==1)
{
inti=0;
charm[10];
printf("\t请输入想修改的记录中人的ID:
");
scanf("%s",m);
while(strcmp(stu[i].id,m)!
=0&&ii++;
if(i==n)
{
printf("\t职工工资管理系统中没有此人!
\n");
return;
}
printf("\tID:
");
scanf("\t%s",stu[i].id);
printf("\tXX:
");
scanf("\t%s",stu[i].name);
printf("\t基本工资:
");
scanf("\t%lf",&stu[i].base);
printf("\t职务工资:
");
scanf("\t%lf",&stu[i].position);
printf("\t津贴:
");
scanf("\t%lf",&stu[i].allowance);
printf("\t医疗保险:
");
scanf("\t%lf",&stu[i].insurance);
printf("\t公积金:
");
scanf("\t%lf",&stu[i].fund);
stu[i].wage=stu[i].base+stu[i].position+stu[i].allowance+stu[i].insurance+stu[i].fund;
printf("\t修改成功!
");
}
elseif(m==2)
{
inti=0;
charm[10];
printf("\t请输入想修改的记录中人的XX:
");
scanf("%s",m);
while(strcmp(stu[i].name,m)!
=0&&ii++;
if(i==n)
{
printf("\t职工工资管理系统中没有此人!
\n");
return;
}
printf("\tID:
");
scanf("\t%s",stu[i].id);
printf("\tXX:
");
scanf("\t%s",stu[i].name);
printf("\t基本工资:
");
scanf("\t%lf",&stu[i].base);
printf("\t职务工资:
");
scanf("\t%lf",&stu[i].position);
printf("\t津贴:
");
scanf("\t%lf",&stu[i].allowance);
printf("\t医疗保险:
");
scanf("\t%lf",&stu[i].insurance);
printf("\t公积金:
");
scanf("\t%lf",&stu[i].fund);
stu[i].wage=stu[i].base+stu[i].position+stu[i].allowance+stu[i].insurance+stu[i].fund;
printf("\t修改成功!
");
}
}
voidWritetoText(Studentstu[])
{
inti=0;
FILE*fp;/*定义文件指针*/
printf("\t保存到文件\n");/*输入文件名*/
if((fp=fopen("output","w"))==NULL)
{
printf("\t无法打开文件\n");
system("pause");
return;
}
while(i{
fprintf(fp,"%s%s%lf%lf%lf%lf%lf%lf\n",stu[i].id,stu[i].name,stu[i].base,stu[i].position,stu[i].allowance,stu[i].insurance,stu[i].fund,stu[i].wage);
i++;
}
fclose(fp);/*关闭文件*/
printf("保存成功!
\n");
}
voidRead(Studentstu[])
{
FILE*fp;
inti;
charfilename[20];
strcpy(filename,"output");
if((fp=fopen(filename,"r"))==NULL)
{
printf("找不到%s文件!
\n",filename);
system("pause");
return;
}
n=0;
for(i=0;i<100&&!
feof(fp);i++)//这里的100是前面已经说明了最多可以存100条记录
{
fscanf(fp,"%s%s%lf%lf%lf%lf%lf%lf\n",stu[i].id,&stu[i].name,&stu[i].base,&stu[i].position,&stu[i].allowance,&stu[i].insurance,&stu[i].fund,&stu[i].wage);
n++;
}
fclose(fp);
//qsort(stu,n,sizeof(Student),p);//调用qsort排序
printf("读取成功,文件%s中的所有信息已经读入!
\n",filename);
}
intsum(Studentstu[])
{
inti;
doubles=0,m=0,n1,s1;
for(i=0;i{
m=0;
m=stu[i].base+stu[i].position+stu[i].allowance;
if(m>2000)
{
s++;
}
}
printf("在职工工资前三项之和于2000的占总职工的百分比:
%.2lf\n",s/n);
return(n);
system("pause");
}
voidMenu()
{
while
(1)//让这里程序循环,否则就退出程序了。
{
switch(Menu_Select())
{
case1:
printf("\n\t添加记录到职工工资管理系统\n");/*添加记录*/
n=Input(T);
WritetoText(T);
system("pause");
break;
case2:
printf("\n\t\t\t职工工资管理系统记录表\n");
Read(T);
Display(T);/*显示记录*/
system("pause");
break;
case3:
printf("\n\t从职工工资管理系统中删除记录\n");
n=Delete(T);
WritetoText(T);/*删除记录*/
printf("\t");
system("pause");/*按任