C语言职工信息管理系统设计精选Word文档格式.docx
《C语言职工信息管理系统设计精选Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言职工信息管理系统设计精选Word文档格式.docx(47页珍藏版)》请在冰豆网上搜索。
男
102
罗斯
103
张满
104
林磊
105
胡水
106
王源
107
李君
108
张清
109
万羽
3.数据结构
本程序定义了结构体emplyee,用于存放职工的基本信息和工资信息。
typedefstructemployee/*标记为employee*/
{
charnum[10];
charname[15];
charsex;
char
char
intgz;
}ZGGZ
其各字段的值的含义如下。
num[10]:
保存职工编号
name[15]:
保存职工姓名
sex:
保存职工性别
:
保存职工部门
保存职工职称
gz:
保存职工工资
二程序设计
1建立职工信息结构体
(1)函数原型功能和形参说明
1)printheader()
函数原型:
voidprintheader()
printheader()函数用于在以表格形式显示记录时,打印输出表头信息。
2)printdata()
函数原型:
voidprintdata(ZGGZpp)
printdata()函数用于以表格显示的方式,打印输出单个数组元素pp中的记录信息。
3)Disp()
voidDisp(ZGGZtp[],intn)
Disp()函数用于显示tp数组中存储的n条记录,内容为emplyee结构中定义的内容。
4)numberinput()
floatnumberinput(char*notice)
numberinput()函数用于输入数值型数据,notice用于保存printf()中输出的提示信息。
该函数返回用户输入的浮点类型数据值。
5)Stringinput()
voidStringinput(char*t,intlens,char*notice)
Stringinput()函数用于输入字符串,并进行字符串长度验证(长度<
lens),t用于保存输入的字符串,因为是以指针形式传递的,所以t相当于该函数的返回值。
notice用于保存printf()中输出的信息。
6)Locate()
intLocate(ZGGZtp[],intn,charfindmess[],charnameornum[])
Locate()函数用于定位数组中符合要求的元素,并返回该数组元素的下标值。
参数findmess[]保存要查找的具体内容,nameornum[]保存按什么字段在数组tp中查找。
7)Add()
intAdd(ZGGZtp[],intn)
Add()函数用于在数组tp中增加工资记录元素,并返回数组中的当前记录数。
8)Qur()
voidQur(ZGGZtp[],intn)
Qur()函数用于在数组tp中按职工编号或姓名查找满足条件的记录,并显示出来。
9)Del()
intDel(ZGGZtp[],intn)
Del()函数用于先在数组tp中找到满足条件的记录,然后删除该记录。
10)Modify()
voidModify(ZGGZtp[],intn)
Modify()函数用于在数组tp中修改记录元素。
11)Insert()
intInsert(ZGGZtp[],intn)
Insert()函数用于在数组tp中插入记录,并返回数组中的当前记录数。
12)Tongji()
voidTongji(ZGGZtp[],intn)
Tongji()函数用于在数组tp中完成记录的统计工作,统计该公司职工工资的整体分布情况。
13)Sort()
voidSort(ZGGZtp[],intn)
Sort()函数用于在数组tp中完成利用冒泡排序算法实现数组的按实发工资字段的降序排序。
14)save()
voidSave(ZGGZtp[],intn)
Save()函数用于将保存职工工资的数组tp中的n个元素写入磁盘的数据文件中。
15)主函数main()
Main()是整个工资管理系统控制部分
(2)程序清单
#inclu#include<
stdio.h>
#include<
stdlib.h>
string.h>
structemployee
charsex[5];
chardepartment[30];
charfunction[32];
intwage;
};
intreademployeest[]);
voidmenu();
voidwriteemployeest[]);
voidadd();
voidselect();
//查看职工所有信息
voidnamequery();
//按姓名查询
voidnumdel();
//按工号删除
voidtongji();
//统计
voidsort();
//排序
voidnummodify();
//按工号修改职工信息
voidsave();
//保存信息
voidfh();
//返回主菜单
structemployeest[300];
//这个数组用来保存所有的职工信息和文件里面的一致
intNumber=0;
//记录总的职工人数也就是数组/文件里面的职工人数
voidmain()
intchoose=0;
FILE*fp=NULL;
charyesorno;
if((fp=fopen("
student1.txt"
"
rb+"
))==NULL)
{
printf("
\n=========>
提示:
文件不存在,是否要创建一个?
(y/n)\n"
);
scanf("
%c"
&
yesorno);
if(yesorno=='
y'
||yesorno=='
Y'
)
{
//这里仅为了建立文件
fp=fopen("
wb+"
fclose(fp);
//关闭fp所指的文件,释放文件缓冲区
}
else
exit(0);
Number=read);
//要是文件已经有数据将数据初始化到数组中
system("
cls"
while(true)
menu();
printf("
\t\t====>
请选择:
"
scanf("
%d"
choose);
system("
switch(choose)
case0:
exit(0);
//退出
break;
case1:
add();
fh();
//增加职工信息
case2:
select();
//查看职工信息
case3:
namequery();
//查找
case4:
numdel();
//删除
case5:
tongji();
//统计
case6:
sort();
//排序
case7:
nummodify();
//修改后返回
case8:
save();
//保存
default:
}
fflush(stdin);
getchar();
voidsave()
\t=====程序在运行时已自动保存.....\n"
voidfh()
\t===>
按Enter键返回主菜单\n"
voidnummodify()//修改职工信息
FILE*fp=NULL;
charxh[60];
inti=0;
intchangeIndex=0;
//changeIndex改变标记
intindex=0;
请输入要修改的职工编号:
%s"
xh);
for(i=0;
i<
Number;
i++)
if(strcmp(xh,st[i].num)==0)//比较输入工号和数组中已有工号
changeIndex=i;
//保存要修改的人的下标
\t工号\t姓名\t性别\t部门\t职能\t工资\n"
\t%s\t%s\t%s\t%s\t%s\t%d\n\n"
st[changeIndex].num,st[changeIndex].name,st[changeIndex].sex,st[changeIndex].department,st[changeIndex].function,st[changeIndex].wage);
请重新输入该职工信息"
工号:
st[changeIndex].num);
st[changeIndex].name);
性别:
st[changeIndex].sex);
部门:
st[changeIndex].department);
职能:
st[changeIndex].function);
工资:
st[changeIndex].wage);
//信息修改后重新更新文件里面的数据以保持数据一致性
fp=fopen("
fwrite(&
st[i],sizeof(structstudent),1,fp);
//把ptr所指向n*size个字节输入到fp所指向的文件中
\t=======>
修改成功\n"
voidsort()//排序
structstudentt;
intwantNUmber=0;
intj=0;
intk=0;
for(i=0;
Number1;
k=i;
for(j=i+1;
j<
j++)
if(st[j].wage>
st[k].wage)
k=j;
if(k!
=i)
t=st[i];
st[i]=st[k];
st[k]=t;
你想输出前几名的成绩:
wantNUmber);
if(wantNUmber>
Number)
wantNUmber=Number;
wantNUmber;
st[i].num,st[i].name,st[i].sex,st[i].department,st[i].function,st[i].wage);
}
voidtongji()//统计
inti,m,k,max,min;
doublesum=0.0;
sum+=st[i].wage;
总工资为:
%f\n"
sum);
平均工资为:
sum/Number);
i=0;
m=0;
max=0;
max=st[m].wage;
for(i=1;
if(st[i].wage>
max)
m=i;
最高工资为:
%d\n"
max);
st[m].num,st[m].name,st[m].sex,st[m].department,st[m].function,st[m].wage);
k=0;
min=0;
min=st[0].wage;
if(st[i].wage<
min)
min=st[k].wage;
最底工资分:
min);
st[k].num,st[k].name,st[k].sex,st[k].department,st[k].function,st[k].wage);
voidnumdel()//按工号删除
请输入要删除的职工工号:
if(strcmp(xh,st[i].num)==0)//如果查找到就删除
for(j=i;
st[j]=st[j+1];
//将剩余数据写入文件重新一写的方式打开文件把以前的数据擦除了
student1.dat"
wb"
删除成功;
\n"
voidnamequery()//按姓名查找
charname[20];
请输入要查找职工姓名:
name);
if(strcmp(name,st[i].name)==0)
voidselect()//查看职工
以下是全部职工信息\n"
voidadd()//增加职工
intnumberTemp=0;
structstudenttemp;
//临时保存信息
请输入要增加职工个数:
numberTemp);
numberTemp;
输入%d个职工信息\n"
i+1);
temp.num);
temp.name);
temp.sex);
temp.department);
temp.function);
temp.wage);
st[Number++]=temp;
//将刚添加的写入到数组
write);
//将刚添加的写入到文件
添加成功\n"
voidwritestudent*st)
fwrite(st,sizeof(structstudent),1,fp);
intreadstudentst[])
rb"
while(fread(&
st[i],sizeof(structstudent),1,fp))
i++;
returni;
voidmenu()
\t***********************************************************************\n"
\t**\n"
\t*职工信息管理系统结构体数组实现*\n"
\t*[1]增加职工信息[2]查看职工信息*\n"
\t*[3]查找职工信息[4]删除职工信息*\n"
\t*[5]平均工资,最高工资,最底工资[6]工资排列*\n"
\t*[7]修改职工信息[8]保存数据*\n"
\t*[0]退出系统*\n"
(3)运行结果
}}}
(3
主界面
增加职工信息
查看职工信息
查找职工信息
删除职工信息
平均工资
修改职工信息
保存数据
2)建立职工信息单链表
#include"
stdio.h"
stdlib.h"
string.h"
intsaveflag=0;
/*是否需要存盘的标志变量*/
structemployee
{
/*职工姓名*/
/*职工工号*/
charxb[4];
/*职工性别*/
charbm[10];
/*部门*/
charzc[10];
/*工号职称*/
floatgz;
/*工资*/
intmingci;
/*名次*/
typedefstructnode
structemployeedata;
structnode*next;
}Node,*Link;
//Linkl(注意是:
字母l不是数字1)
voidadd(Linkl);
voiddisp(Linkl);
voiddel(Linkl);
//删除功能
Node*Locate(Linkl,charfindmess[],charnameornum[]);
voidQur(Linkl);
//查询功能
voidTongji(Linkl);
voidSort(Linkl);
voidModify(Linkl);
//修改功能
voidSave(Linkl);
//保存功能
voidprinte(Node*p);
//本函数用于打印链表中某个节点的数据内容*/
//以下4个函数用于输出中文标题
voidprintstart();
voidWrong();
voidNofind();
voidprintc();
{printf("
\t*****************************************************************\n"
\t*职工信息管理系统单链表实现*\n"
\t*[1]增加职工信息[2]删除职工信息*\n"
\t*[3]查询职工信息[4]修改