C语言课设职工工资管理系统.docx
《C语言课设职工工资管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课设职工工资管理系统.docx(50页珍藏版)》请在冰豆网上搜索。
![C语言课设职工工资管理系统.docx](https://file1.bdocx.com/fileroot1/2023-1/4/778957de-5274-4100-8099-3a9a8de38d0b/778957de-5274-4100-8099-3a9a8de38d0b1.gif)
C语言课设职工工资管理系统
一引言
C语言是CombinedLanguage(组合语言)的中英混合简称。
是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
设计一个程序的过程就是解决一个实际问题的过程,从解决实际问题的角度,我们可以这样来看:
首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;在次我们必须捋清思路,逐一的解决问题的各个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数、结构体和文件等,然后确定处理过程。
本课题中主要应用了C语言中的数组、结构体、文件等关键技术。
在C语言中,数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型;结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构,在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型,结构体只能描述一个对象的状态,不能描述一个对象的行为。
文件是一种组织外部存储介质上的数据的数据类型。
它具有两个特征:
一是对一个数据集合可以用一个名字命名;二是保存在外部存储介质上,可以长期保存。
通过此次课设可以锻炼学生理论联系实际能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解,并达到如下目的:
1.熟悉C语言程序的编辑、编译链接和运行的过程。
2.熟练运用if语句和switch语句以及嵌套应用。
3.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。
4.掌握文件的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。
5.掌握结构体类型变量、数组的定义和使用。
6.掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串。
二系统总体设计
2.1程序功能
(1)添加职工信息
(2)查看职工信息(3)查找职工信息(4)删除职工信息(5)统计职工信息(6)修改职工信息(7)保存数据(8)作者信息(0)退出
2.2程序功能图
职工工资管理系统
作者信息
保存数据
修改职工信息
查看职工信息
查找职工信息
删除职工信息
退出
统计职工信息
添加职工信息
图1程序功能图
2.3主函数流程图
图2程序流程图
主函数源代码:
voidmain()
{
intchoose=0;
while(true)
{
show();
printf("\t\t====>请选择:
");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case0:
exit(0);//退出
break;
case1:
add();
back();//添加职工信息
break;
case2:
see();
back();//查看职工信息
break;
case3:
search();
back();//查找职工信息
break;
case4:
del();
back();//删除职工信息
break;
case5:
statistics();
back();//统计职工工资
break;
case6:
modify();
back();//修改职工信息
break;
case7:
reserve();
back();//保存数据
break;
case8:
author();
back();//作者信息
break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
三程序详细设计
3.1添加职工信息函数的实现
添加记录前如图3所示。
图3添加记录前效果图
输入一条记录信息:
选择1,回车。
输入记录如图4所示。
图4输入记录效果图
添加后如图5所示。
图5添加记录后效果图
添加函数代码流程图,如图6所示。
图6添加函数流程图
添加源代码:
//添加职工信息
voidadd()
{
intnumberTemp=0;
inti=0;
structworkertemp;
printf("请输入要添加职工个数:
");
scanf("%d",&numberTemp);
for(i=0;i{
printf("输入第%d个职工信息\n",i+1);
printf("姓名:
");
scanf("%s",temp.name);
printf("工号:
");
scanf("%s",temp.ID);
printf("基本工资:
");
scanf("%d",&temp.salary1);
printf("职务工资:
");
scanf("%d",&temp.salary2);
printf("津贴:
");
scanf("%d",&temp.salary3);
wo[Number++]=temp;//写入到数组
bc(&temp);//写入到文件
}
printf("添加成功\n");
}
3.2查看职工信息函数的实现
查看记录前如图7所示。
图7查看记录前效果图
输入一条记录信息:
如图8所示:
图8输入记录效果图
查看记录后如图9所示。
图9查看记录后效果图
查看函数代码流程图,如图10所示。
图10查看函数流程图
查看源代码:
//查看职工信息
voidsee()
{
inti=0;
printf("以下是全部职工\n");
printf("\t姓名\t工号\t基本工资\t职务工资\t津贴\n");
while(i{
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
i++;
}
}
3.3查找职工信息函数的实现
查找记录前如图11所示。
图11查找记录前效果图
输入一条记录信息:
选择3,回车
如图12所示。
图12输入记录效果图
查找记录后如图13所示。
图13查找记录后效果图
查找函数代码流程图,如图14所示。
图14查找函数流程图
查找源代码:
//查找职工信息
voidsearch()
{
intn=0;
printf("1按姓名查找\n");
printf("2按工号查找\n");
scanf("%d",&n);
switch(n)
{
case1:
xmcz();
break;
case2:
ghcz();
break;
default:
printf("输入错误!
\n");
break;
}
}
voidxmcz()//按姓名查找
{
charname[30];
inti=0;
printf("请输入要查找职工姓名:
");
scanf("%s",name);
system("cls");
printf("\t姓名\t工号\t基本工资\t职务工资\t津贴\n");
for(i=0;i{
if(strcmp(name,wo[i].name)==0)
{
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
}
}
}
voidghcz()//按工号查找
{
charid[10];
inti=0;
printf("请输入要查找职工工号:
");
scanf("%s",id);
system("cls");
printf("\t姓名\t工号\t基本工资\t职务工资\t津贴\n");
for(i=0;i{
if(strcmp(id,wo[i].ID)==0)
{
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
}
}
}
3.4删除职工信息函数的实现
删除记录前如图15所示。
图15删除记录前效果图
输入一条记录信息:
选择4,回车后,如图16所示:
图16输入记录效果图
删除记录后如图17所示。
图17删除记录后效果图
删除函数代码流程图,如图18所示。
图18删除函数流程图
删除源代码:
//删除职工信息
voiddel()
{
intn=0;
printf("1按姓名删除\n");
printf("2按工号删除\n");
scanf("%d",&n);
switch(n)
{
case1:
xmsc();
break;
case2:
ghsc();
break;
}
}
voidxmsc()//按姓名删除
{
FILE*fp=NULL;
charname[30];
inti=0;
intj=0;
printf("请输入要删除的职工姓名:
");
scanf("%s",name);
for(i=0;i{
if(strcmp(name,wo[i].name)==0)
{
for(j=i;j{
wo[j]=wo[j+1];
}
Number--;
}
}
//将剩余数据写入文件擦除以前的数据
fp=fopen("C:
//worker.dat","wb");
for(i=0;i{
fwrite(&wo[i],sizeof(structworker),1,fp);
}
fclose(fp);
printf("删除成功;\n");
}
voidghsc()//按工号删除
{
FILE*fp=NULL;
charid[60];
inti=0;
intj=0;
printf("请输入要删除的职工工号:
");
scanf("%s",id);
for(i=0;i{
if(strcmp(id,wo[i].ID)==0)
{
for(j=i;j{
wo[j]=wo[j+1];
}
Number--;
}
}
//将剩余数据写入文件擦除以前的数据
fp=fopen("C:
//worker.dat","wb");
for(i=0;i{
fwrite(&wo[i],sizeof(structworker),1,fp);
}
fclose(fp);
printf("删除成功;\n");
}
3.5统计职工工资函数的实现
统计记录前如图19所示。
图19统计记录前效果图
输入一条记录信息:
如图20所示:
图20输入记录效果图
统计记录后如图21所示。
图21统计后前效果图
统计函数代码流程图,如图22所示。
图22统计函数流程图
统计源代码:
//统计职工工资
voidstatistics()
{
inti=0;
doubles=0.0;
doublesum[100];
for(i=0;i{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3;
printf("%s的总工资为:
%f\n",wo[i].name,sum[i]);
}
for(i=0;i{
s+=sum[i];
}
printf("平均工资为:
%f\n",s/Number);
}
3.6修改函数的实现
修改记录前如图23所示。
图23修改记录前效果图
输入一条记录信息:
如图24所示:
图24输入记录效果图
修改记录后如图25所示。
图25修改记录后效果图
修改函数代码流程图,如图26所示。
图26修改函数流程图
修改源代码:
//修改职工信息
voidmodify()
{
intmode=0;
printf("请选择修改查找方式\n");
printf("1按姓名查找修改\n");
printf("2按工号查找修改\n");
scanf("%d",&mode);
switch(mode)
{
case1:
xmxg();
break;
case2:
ghxg();
break;
default:
printf("输入错误!
\n");
break;
}
}
voidxmxg()//按姓名修改
{
FILE*fp=NULL;
charname[30];
inti=0;
printf("请输入要修改的职工姓名:
");
scanf("%s",name);
for(i=0;i{
if(strcmp(name,wo[i].name));
else
break;
}
printf("\t姓名\t工号\t基本工资\t职务工资\t津贴\n");
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
printf("请重新输入该职工信息");
printf("姓名:
");
scanf("%s",wo[i].name);
printf("工号:
");
scanf("%s",wo[i].ID);
printf("基本工资:
");
scanf("%d",&wo[i].salary1);
printf("职务工资:
");
scanf("%d",&wo[i].salary2);
printf("津贴:
");
scanf("%d",&wo[i].salary3);
//信息修改后重新更新文件里面的数据以保持数据一致性
fp=fopen("C:
//worker.dat","wb");
for(i=0;i{
fwrite(&wo[i],sizeof(structworker),1,fp);
}
fclose(fp);
}
voidghxg()//按工号修改
{
FILE*fp=NULL;
charid[30];
inti=0;
printf("请输入要修改的职工工号:
");
scanf("%s",id);
for(i=0;i{
if(strcmp(id,wo[i].ID));
else
break;
}
printf("\t姓名\t工号\t基本工资\t职务工资\t津贴\n");
printf("\t%s\t%s\t%d\t\t%d\t\t%d\n",wo[i].name,wo[i].ID,wo[i].salary1,wo[i].salary2,wo[i].salary3);
printf("请重新输入该职工信息");
printf("姓名:
");
printf("姓名:
");
scanf("%s",wo[i].name);
printf("工号:
");
scanf("%s",wo[i].ID);
printf("基本工资:
");
scanf("%d",&wo[i].salary1);
printf("职务工资:
");
scanf("%d",&wo[i].salary2);
printf("津贴:
");
scanf("%d",&wo[i].salary3);
//信息修改后重新更新文件里面的数据以保持数据一致性
fp=fopen("C:
//worker.dat","wb");
for(i=0;i{
fwrite(&wo[i],sizeof(structworker),1,fp);
}
fclose(fp);
printf("\t=======>修改成功\n");
}
3.7保存数据函数的实现
保存记录前如图27所示。
图27保存记录前效果图
输入一条记录信息:
图28输入记录效果图
保存记录后如图29所示。
图29保存记录后效果图
保存源代码:
//保存数据
voidreserve()
{
printf("\t=====程序在运行时已自动保存.....\n");
}
voidback()
{
printf("\t===>按Enter键返回主菜单\n");
}
3.8作者信息函数的实现
作者记录前如图30所示。
图30作者记录前效果图
输入一条记录信息:
如图31所示:
图31输入记录效果图
作者记录后如图32所示。
图32作者记录后效果图
作者源代码:
//作者信息
voidauthor()
{
printf("\t***☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆***\n\n");
printf("\t^^^^^^^^^^^^^^^某学校^^^^^^^^^^^^^^^\n\n");
printf("\t^^^^^^^^^^^^^^^通信工程^^^^^^^^^^^^^^^\n\n");
printf("\t^^^^^^^^^^^^^^***制作^^^^^^^^^^^^^^\n\n");
printf("\t***★★★★★★★★★★★★★★★★***\n\n");
}
3.9退出程序
操作前如图33所示。
图33作者记录前效果图
输入一条记录信息:
如图34所示:
图34输入记录效果图
回车后:
如图35所示
按任意键即可退出。
图35输入记录后效果图
四总结
通过这几天的努力,职工工资管理系统的设计已基本完成。
在本次课程设计中,我充分领略了C语言功能的强大,包括函数、数组、指针、结构体、文件等。
职工工资管理系统是一个很实用并且使用广泛的操作系统。
此系统可以减少很多工作量,做到设计合理,便于使用,易于操作;界面友好,容错性高,可在很短的时间内,查找出所需的职工工资资料,提高工作效率。
该系统具有添加、显示、查询、修改、删除等基本功能,以方便对工资的各项管理操作。
每一条记录包括一个职工的工号、姓名、工资等信息,系统的各个功能模块都用函数的形式来实现,可以将职工信息保存在文件中,并从文件中读取出来。
总的来说,通过这次程序设计,使我加深了对C语言的认识,进一步熟悉了对C语言功能的灵活运用,而且加深了我对程序的理解和编写能力,通过文献资料和网络资料的帮助,使我对C语言程序设计这一基础学科又一次加深了认识,也意识到了其具有的强大功能和发展前景。
这会对以后的学习有所帮助。
参考文献
[1]谭浩强,张基温.C语言程序设计教程[M].第3版.高等教育出版社,2006
[2]杨涛.C程序设计语言.北京:
机械工业出版社,2004
[3]全国计算机等级考试二级教程:
C语言程序设计(2009年版).高等教育出版社
附录
#include
#include
#include
structworker
{
charname[30];
charID[10];
intsalary1,salary2,salary3;
};
intdq(structworkerwo[]);
voidshow();
voidbc(structworkerwo[]);
voidadd();
voidsee();
voidsearch();
voidghcz();
voidxmcz();
voiddel();
voidxmsc();
voidghsc();
voidstatistics();
voidmodify();
voidghxg();
voidxmxg();
voidreserve();
voidback();
voidauthor();
structworkerwo[100];//保存所有的职工信息
intNumber=0;//记录总的职工人数
voidmain()
{
intchoose=0;
while(true)
{
show();
printf("\t\t====>请选择:
");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case0:
exit(0);//退出
break;
case1:
add();
back();//添加职工信息
break;
case2:
see();
back();//查看职工信息
break;
case3:
search();
back();//查找职工信息
break;
case4:
del();
back();//删除职工信息
break;
case5:
statistics();
back();//统计职工工资
break;
case6:
modify();
back();//修改职工信息
break;
case7:
reserve();
back();//保存数据
break;
case8:
author();
back();//作者信息
break;
default:
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
intdq(structworkerwo[])
{
FILE*fp=NULL;
inti=0;
fp=fopen("C:
//worker.dat","rb");
while(fread(&wo[i],sizeof(structworker),1,fp))
i++;
fclose(fp);
returni;
}
voidshow()
{
printf("\n");
printf("\t****************职工工资管理系统****************\n\n");
printf("\t*☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆*\n\n");
printf("\t^^^^^^^^^^^^^^^[1]添加职工信息^^^^^^^^^^^^^^^^^\n");
printf