职工工资管理链表版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
include<stdio.h>
include<stdlib.h>
include<string.h>
include<conio.h>
char file29;//定义全局变量存放文件名
struct node
{
char zgname30;//职工的姓名
char zhiwei30;//职工职位
float gz;//职工工资
float shuijin;//职工税金
float jiangjin;//职工奖金
char danwei30;//职工单位
char time12;//记录所发工资的时间
float yinfa;//记录职工的应发工资
float shifa;//记录职工的实发工资
struct node next;
};
/实现函数的录入/
struct node chuangjianzgstruct node head//定义一个函数录入职工的基本信息
{
FILE fp;//定义文件指针
struct node p;q;//定义结点变量
q=head;
p=struct node mallocsizeof struct node;//开辟一个节点空间
p->next=NULL;
printf"请按以下的顺序输入中间以空格隔开;输入f按回车结束\n";
printf"姓名\t职位\t工资\t税金\t奖金\t单位\t时间\n";
whilescanf"%s";&p->zgname;strcmpp->zgname;"f"//循环输入;往结点中存入输入信息
{
scanf"%s%f%f%f%s%s";&p->zhiwei;&p->gz;&p->shuijin;&p->jiangjin;&p->dan wei;&p->time;
p->yinfa=p->gz+p->jiangjin;p->shifa=p->gz+p->jiangjin-p->shuijin;//p-> yinfa记录职工的应发工资;p->shifa记录职工的实发工资
q->next=p;p->next=NULL;//把新结点连接在头结点的尾节点上
q=p;
p=struct node mallocsizeof struct node;
}
/以下操作为了保存以上操作信息/
iffp=fopenfile;"wb"==NULL//以只写的方式打开文件
{
printf"\n文件打开失败\n";
exit0;
}
p=head->next;//让p指向头结点的下一节点
whilep=NULL
{
fwritep;sizeofstruct node ;1;fp;//把p结点中的信息读入文件p=p->next;
}
fclosefp;
printf"此项操作结束请选择下一项操作\n";
return head;
}
/实现职工基本信息的增加/
struct node zenjiazgstruct node head//定义函数增加职工基本信息{
FILE fp;//定义文件指针
char c;//定义一个字符变量为了读掉回车字符
struct node p;q;//定义结点变量
c=getchar;//读掉一个回车字符
q=head->next;//让q结点指向头结点的下一节点
whileq->next=NULL//寻找头结点的尾节点
q=q->next;
p=struct node mallocsizeof struct node;//开辟节点空间
p->next=NULL;//开辟新的空间
printf"请按以下的顺序输入中间以空格隔开;输入f按回车结束\n"; printf"姓名\t职位\t工资\t税金\t奖金\t单位\t时间\n";
whilescanf"%s";&p->zgname;strcmpp->zgname;"f"//往节点中输入信息
{
scanf"%s%f%f%f%s%s";&p->zhiwei;&p->gz;&p->shuijin;&p->jiangjin;&p->dan wei;&p->time;
p->yinfa=p->gz+p->jiangjin;p->shifa=p->gz+p->jiangjin-p->shuijin;//p-> yinfa记录职工的应发工资;p->shifa记录职工的实发工资
q->next=p;p->next=NULL;
q=p;
p=struct node mallocsizeof struct node;
}/以下操作为了保存以上操作信息/
iffp=fopenfile;"wb"==NULL//以只读的方式打开文件
{
printf"\n文件打开失败\n";
exit0;
}
p=head->next;//让p指向头结点的下一节点
whilep=NULL
{
fwritep;sizeofstruct node ;1;fp;//把链表中的信息读入文件p=p->next;//让p指向它的下一节点
}
fclosefp;//关闭文件
freep;//释放p的空间
printf"此项操作结束请选择下一项操作\n";//用于给用户提示信息
return head;
}
/按姓名删除职工信息/
struct node shanchuzgstruct node head
{
FILE fp;//定义文件指针
char name130;x;c;//定义字符串与字符变量
struct node q;p;//定义结点变量
int bj1=1;bj2=1;bj3=1;/i用来记录文件中数据的总个数;bj1标记文件中是否存在需要的记录;bj2标记是否删除此记录/
printf"请输入你要删除的职工的姓名\n";
scanf"%s";name1;//从用户的输入得到文件中的期刊名
x=getchar;//读掉一个回车字符
q=head->next;
p=head;//开辟一个数据空间
whileq=NULL
{
ifstrcmpq->zgname;name1==0//比较结点信息的职工名与输入职工名是否相等
{
bj1=0;//标记是否找到与输入职工名相等信息
printf"%s\t%s\t%.2f\t%.2f\t%.2f\t%s\t%s\n";q->zgname;q->zhiwei;q->g z;q->shuijin;q->jiangjin;q->danwei;q->time;
printf"你确定删除此记录 y/n \n";
c=getchar;
ifc=='y'//如果得到y则删除此记录
{
bj2=0;//为了标记是否删除职工信息
p->next=q->next;
printf"删除成功\n";//如果删除;做出提示
freeq;//释放空间
q=p->next;
}
else { p=p->next;q=q->next;}//让p和q都指向它的下一节点
}
else { p=p->next;q=q->next;}
ifbj1//判断是否找到相同职工名
{
printf"你没有找到你要删除的信息请您检查一下你的输入..是否要在进行此项删除操作 y/n \n";
c=getchar;
ifc=='y'||c=='Y'
{head=shanchuzg head;//函数递归调用自身
bj3=0;//标记是否进行函数递归调用
}
}
/以下操作为了保存以上操作信息/
iffp=fopenfile;"wb"==NULL//以只写的方式打开文件
{
printf"\n文件打开失败\n";
exit0;
}
p=head->next;//让p指向头结点的下一节点
whilep=NULL
{
fwritep;sizeofstruct node ;1;fp;//把p结点中的信息读入文件p=p->next;
fclosefp;//关闭文件
ifbj3
printf"操作完成请选择下一项操作\n";
return head;//返回头文件
}
/修改职工信息/
void xuigaizg struct node head
{
FILE fp;//定义文件指针
int bj=1;bj2=1;bj3=1;//定义三个变量用来做标记符
char name130;c;//定义字符串和一个字符变量
struct node q;//定义节点变量
q=head->next;//让q结点指向头结点的下一节点
printf"请输入要修改职工的姓名\n";
scanf"%s";name1;//获得修改职工的姓名
c=getchar;//读掉一个回车字符
whileq=NULL
{
ifstrcmpq->zgname;name1==0//判断结点存放职工名与输入职工名是否相等
{
bj=0;//标记是否找到与输入职工名相等信息
printf"%s\t%s\t%.2f\t%.2f\t%.2f\t%s\t%s\n";q->zgname;q->zhiwei;q->g z;q->shuijin;q->jiangjin;q->danwei;q->time;
printf"你确定修改此记录 y/n \n";
c=getchar;
ifc=='y'//如果得到y则修改此记录
{
bj2=0;//标记是否修改职工信息
printf"请输入你的修改\n";
printf"请按以下的顺序输入中间以空格隔开\n";//输出提示信息
printf"姓名\t职位\t工资\t税金\t奖金\t单位\t时间\n";
/获得用户输入信息并存入结点/
scanf"%s%s%f%f%f%s%s";&q->zgname;&q->zhiwei;&q->gz;&q->shuijin;&q->jia ngjin;&q->danwei;&q->time;
printf"修改成功\n";//提示用户修改成功
q=q->next;
}
else q=q->next;//让q指向它的下一节点
}
else q=q->next;
}
ifbj&&bj2//判断是否存在要修改的职工信息与对找到职工信息是否做修改
{
iffp=fopenfile;"wb"==NULL//以只读的方式打开文件
{
printf"\n文件打开失败\n";
exit0;
}
q=head->next;//让q指向头结点的下一节点
whileq=NULL
{
fwriteq;sizeofstruct node ;1;fp;//把节点q中的信息重新写入文件q=q->next;
}
fclosefp;//关闭文件
}
ifbj//判断是否找到相关职工名
{
printf"你没有找到你要修改的信息请您检查一下你的输入..是否要在进行此项修改操作 y/n \n";
c=getchar;
ifc=='y'||c=='Y'
{xuigaizg head;//函数自身递归调用
bj3=0;//标记是否进行函数自身递归调用
}
}
else
ifbj3
printf"操作完成请选择下一项操作\n";
}
/ 按姓名查找职工信息 /
void xmcz struct node head//样本
{
char name120;c;//定义字符串和一个字符变量
struct node q;//定义节点变量
int dj=1;//dj标记文件中是否有所需要的记录
q=head->next;//让q结点指向头结点的下一节点
printf"请输入要查找的职工姓名\n";
scanf"%s";name1;//从用户的输入得到文献
c=getchar;//读掉一个回车字符
whileq=NULL
{
ifstrcmpq->zgname;name1==0//判断结点存放职工名与输入职工名是否相等
{
printf"%s\t%s\t%.2f\t%.2f\t%.2f\t%s\t%s\n";q->zgname;q->zhiwei;q->g
z;q->shuijin;q->jiangjin;q->danwei;q->time;
dj=0;//标记是否找到与输入职工名相等信息
}
q=q->next;//让q指向它的下一节点
}
ifdj//判断是否找到相关职工名
{
printf"没有找到您查找的信息;请您核实一下您的输入..是否要在进行此项修改操作 y/n\n";
c=getchar;
ifc=='y'||c=='Y'
xmcz head;//函数递归调用自身
}
else
printf"操作完成请选择下一项操作\n";//输出提示信息
}
/ 按时间查找职工信息 /
void sjczstruct node head
{
char time112;c;//定义字符串和一个字符变量
struct node q;//定义节点变量
int dj=1;//dj标记文件中是否有所需要的记录
printf"请输入要查找日期;如 2011/01/01 \n";
scanf"%s";time1;//从用户的输入得到文献
c=getchar;//读掉一个回车字符
q=head->next;//让q结点指向头结点的下一节点
whileq=NULL
{
ifstrcmpq->time;time1==0//判断结点存放时间信息与输入信息是否相等{
/输出与用户输入时间相同的职工信息/
printf"%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%s\t%s\n";q->zgname;q->zh iwei;q->gz;q->shuijin;q->jiangjin;q->yinfa;q->shifa;q->danwei;q->time;
dj=0;
}
q=q->next;//让q指向它的下一节点
}
ifdj//判断是否存在与用户输入时间相等的结点信息
{
printf"没有找到您查找的信息;请您核实一下你的输入..是否要在进行此项修改操作 y/n \n";
c=getchar;
ifc=='y'||c=='Y'
sjcz head;//函数自身递归调用
}
else
printf"操作完成请选择下一项操作\n";//输出提示信息
}
/ 显示文件中的所有记录 /
void xswjstruct node head
{
struct node q;//定义节点变量
int dj=1;//定义一个整形变量
q=head->next;//让q结点指向头结点的下一节点
whileq=NULL
{
/输出结点信息/
printf"%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%s\t%s\n";q->zgname;q->zh iwei;q->gz;q->shuijin;q->jiangjin;q->yinfa;q->shifa;q->danwei;q->time; dj=0;//用来标记头结点是否存放信息
q=q->next;//让q结点指向头结点的下一节点
}
ifdj
printf"此文件为空;请核实你输入的文件名\n";
printf"操作完成请选择下一项操作\n";
}
int main
{
int i;//定义整形变量
char c;//定义字符变量
struct node head;p;q;//定义结点变量
FILE fp;//定义文件指针变量
head=struct node mallocsizeof struct node;//申请一个节点的内存空间head->next=NULL;//让它的下一节点指向空结点
p=head;//让p指向头结点
printf"如果你是第一次使用这程序;请你输入1..否则输入2.\n";//输出用户界面提示信息
scanf"%d";&i;//获得用户输入
c=getchar;//读掉回车字符
ifi==1
{
printf"请输入你的文件名\n";
getsfile;//获得用户输入文件名
}
ifi==2
{
printf"请输入你的文件名\n";
getsfile;//获得用户输入文件名
q=struct node mallocsizeof struct node;//申请一个节点的内存空间
q->next=NULL;
iffp=fopenfile;"rb"==NULL//以只读的方式打开文件
{
printf"\n文件打开失败\n";
exit0;
}
whilefreadq;sizeofstruct node;1;fp==1//读出文件信息存入节点q
{
/ 建立一个存放文件中信息的链表/
p->next=q;
q->next=NULL;
p=q;
q=struct node mallocsizeof struct node;
}
fclosefp;//关闭文件
}
/输出提示用户界面/
printf"\n //----------------------------------------------// \n"; printf"\n //欢迎进入工资管理系统// \n";
printf"\n //----------------------------------------------// \n"; printf" 1. 职工信息的录入 \n";
printf"\n 2. 职工信息的增加 \n";
printf"\n 3. 职工信息的删除 \n";
printf"\n 4. 职工信息的修改 \n";
printf"\n 5. 按姓名查找职工信息 \n";
printf"\n 6. 按时间查找职工信息 \n";
printf"\n 7. 显示文件中的所有记录 \n";
printf"\n 0. 推出此程序 \n";
printf"\n 请输入你需要的操作 \n";
printf"\n //----------------------------------------------// \n"; whilescanf"%d";&i;i
{
switchi
{
case 0:break;
case 1:head=chuangjianzghead;break; /实现函数的录入/ case 2:head=zenjiazg head;break; /实现职工基本信息的增加/
case 3:head=shanchuzg head;break;/修改职工信息/
case 4:xuigaizg head;break;/获得用户输入信息并存入结点/
case 5:xmcz head;break; / 按姓名查找职工信息 /
case 6:sjcz head;break; / 按时间查找职工信息 /
case 7:xswj head;break;/ 显示文件中的所有记录 / default :printf"你的输入错误;请重新输入你的选择\n"; }
}
iffp=fopenfile;"wb"==NULL
{
printf"\n文件打开失败\n";
exit0;
}
p=head->next;
whilep=NULL
{
fwritep;sizeofstruct node ;1;fp;
p=p->next;
}
fclosefp;
freehead;
freeq;
return 0;
}。