#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
using namespace std
#define OK 1
#define ERROR 0
typedef struct LNode{
char num[20]
char name[20]
double basic
double reward
double total
struct LNode *next
}LNode,*LinkListint initlist(LinkList &L)
{ L=(LinkList)malloc(sizeof(LNode))
L->next=NULL
return OK
} int DisplayInfo(LinkList L)
{
LinkList p=L->next
if(!p)
{
cout<<"当前无记录!"<<endl
return ERROR
}
cout<<"编号"<<setw(12)<<"姓名"<<setw(12)<<"基本工资"<<setw(9)<<"奖金"<<setw(12)<<"工资总额"<<endlwhile(p!=NULL)
{
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl
p=p->next
}
cout<<'\n'<<'\n'
return OK
} int InputInfo(LinkList &L)
{
LinkList pp=(LinkList)malloc(sizeof(LNode))
cout<<"请输入职工工资信息:(格式如:2001001 james 1980 600 )"<<endl
cin>>p->num
cin>>p->name
cin>>p->basic
cin>>p->reward
p->total=p->basic+p->reward
p->next=L->next
L->next=preturn OK
}int DeleteByCode(LinkList &L,char key[])
{
LinkList p=L,q
while(p->next!=NULL)
{
if(strcmp(p->next->num,key)==0)
{
q=p->next
p->next=q->next
free(q)
return OK
}
p=p->next
}
return ERROR} int Search(LinkList L,int tag)
{
LinkList p=L->next
if(tag==1)
{
char num[20]
cout<<"请输入要查找职工编号号:"<<endl
cin>>num
while(p)
{
if(strcmp(p->num,num)==0)
{
cout<<"编号"<<setw(12)<<"姓名"<<setw(12)<<"基本工资"<<setw(9)<<"奖金"<<setw(12)<<"工资总额"<<endl
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl
cout<<'\n'
return OK
}
p=p->next
}
}
else if(tag==2)
{
char name[20]
cout<<"请输入要查找的姓名:"<<endl
cin>>name
while(p)
{
if(strcmp(p->name,name)==0)
{
cout<<"编号"<<setw(12)<<"姓名"<<setw(12)<<"基本工资"<<setw(9)<<"奖金"<<setw(12)<<"工资总额"<<endl
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl
cout<<'\n'
return OK
}
p=p->next
}
}
else
cout<<"输入错误!"<<endl
return ERROR}
int Sort(LinkList &L)
{
LinkList p
LinkList q,min,w=L
for(p=L->nextp->nextp=p->next)
{
min=p
for(q=p->nextqq=q->next)if(min->total>q->total)
min=q if(min!=p)
{strcpy(w->num,p->num)
strcpy(w->name,p->name)
w->basic=p->basic
w->reward=p->reward
w->total=p->total
strcpy(p->num,min->num)
strcpy(p->name,min->name)
p->basic=min->basic
p->reward=min->reward
p->total=min->total
strcpy(min->num,w->num)
strcpy(min->name,w->name)
min->basic=w->basic
min->reward=w->reward
min->total=w->total }
}
return OK
}
int change(LinkList &L)
{
LinkList p=L->next
char q[20]
cout<<"请输入要修改的职工编号号:"<<endl
cin>>q
while(p)
{
if(strcmp(p->num,q)==0)
{
cout<<"编号"<<setw(12)<<"姓名"<<setw(12)<<"基本工资"<<setw(9)<<"奖金"<<setw(12)<<"工资总额"<<endl
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl
cout<<"请重新输入该职工的工资信息:"<<endl
cin>>p->basic
cin>>p->reward
cout<<'\n'
return OK
}
p=p->next
}
}
int Menu(LinkList &S)
{
int sign=1
while(sign)
{
int i
cout<<"请选择要进行的 *** 作:1:插入 2:删除 3:输出 4:查找 5:排序 6:修改 0:退出"<<endl
cin>>i
if(i==1)
{ if(InputInfo(S))
cout<<" *** 作成功!"<<endl
cout<<'\n'
}
else if(i==2)
{
char num[20]
cout<<"请输入要删除的职工编号:"<<endl
cin>>num if(DeleteByCode(S,num))
cout<<" *** 作成功!"<<endl else
{
cout<<"此编号不存在!"<<endl
cout<<'\n'
}
}
else if(i==3)
DisplayInfo(S)
else if(i==4)
{
int tag
cout<<"1:按编号查找 2:按姓名查找 "<<endl
cin>>tag
if(!Search(S,tag))
cout<<"未找到!"<<endl
cout<<'\n' }
else if(i==5)
{
if(Sort(S))
cout<<" *** 作成功!"<<endl
cout<<'\n'
}
else if(i==6)
{
if(change(S))
cout<<"修改成功!"<<endl
} else if(i==0)
sign=0
else
cout<<"输入有误,请重新输入!"<<endl
cout<<'\n'
}
return OK
}
int main()
{
LinkList S
initlist(S)
Menu(S)
return OK} 已经调试无bug 有问题的话联系我。
#include <stdio.h>#include <windows.h>
#include <time.h>
#include <string.h>
#define N 100
struct employee
{
int num
char name[10]
char zhicheng
int jiben
int jiangjin
int baoxian
int zafei
int shiji
}em[100] /*定义一个结构体*/
void menu()
void input()
void save(int)
void display()
void del()
void search()
void search_zhicheng()
void search_name()
void modify() /*定义各函数*/
void menu() /*菜单函数*/
{
printf("\n")
printf(" 网计091 第7小组\n")
printf("\n")
printf("******************职工信息管理****************\n")
printf(" 1.录入职工信息")
printf(" 2.浏览职工信息\n")
printf(" 3.查询职工信息")
printf(" 4.删除职工信息\n")
printf(" 5.修改职工信息\n")
printf(" 6.退出\n")
printf("********************谢谢使用******************\n")
printf("\n")
printf("\n")
}
void main()
{
int n,flag
char a
while(1)
{
do
{
menu()/*调用菜单函数*/
printf("请选择你需要 *** 作的步骤(1--6):\n")
scanf("%d",&n)
if(n>=1&&n<=6)
{
flag=1
break
}
else
{
flag=0
printf("您输入有误,请重新选择!")
}
}while(flag==0)
switch(n)
{
case 1:printf(" 输入职工信息\n")printf("\n")input()break
case 2:printf(" 浏览职工信息\n")printf("\n")system("cls")display()break
case 3:printf(" 按职工号查询职工信息\n")printf("\n")system("cls")search()break
case 4:printf(" 删除职工信息\n")printf("\n")system("cls")del()break
case 5:printf(" 修改职工信息\n")printf("\n")system("cls")modify()break
case 6:goto la
default :break
}
}
la:
system("cls")
printf("\n\n\n\n\n谢谢使用!\n")
}
void input() /*录入函数*/
{
int i,m
printf("请输入需要创建信息的职工人数(1--100):\n")
scanf("%d",&m)
for (i=0i<mi++)
{
printf("请输入职工号: ")
scanf("%d",&em[i].num) //这里的代码错,要用数组下标
printf("\n")
printf("请输入姓名: ")
scanf("%s",em[i].name)//这里的代码错,要用数组下标
getchar()
printf("请输入职称: ")
scanf("%c",&em[i].zhicheng)//这里的代码错,要用数组下标
printf("请输入基本工资: ")
scanf("%d",&em[i].jiben)//这里的代码错,要用数组下标
printf("请输入奖金: ")
scanf("%d",&em[i].jiangjin)//这里的代码错,要用数组下标
printf("请输入保险: ")
scanf("%d",&em[i].baoxian)//这里的代码错,要用数组下标
printf("请输入杂费: ")
scanf("%d",&em[i].zafei)//这里的代码错,要用数组下标
em[i].shiji=em[i].jiben + em[i].jiangjin - em[i].baoxian - em[i].zafei//这里的代码错,要用数组下标
printf("\n")
}
printf("\n创建完毕!\n")system("cls")
save(m)
}
void save(int m) /*保存文件函数*/
{
int i
FILE*fp
if ((fp=fopen("employee_list","wb"))==NULL) /*创建文件并判断是否能打开*/
{
printf ("cannot open file\n")
exit(0)
}
for (i=0i<mi++) /*将内存中职工的信息输出到磁盘文件中去*/
if (fwrite(&em,sizeof(struct employee),1,fp)!=1)
printf("file write error\n")
fclose(fp)
}
int load() /*导入函数*/
{
FILE*fp
int i=0
if((fp=fopen("employee_list","rb"))==NULL)
{
printf ("cannot open file\n")
exit(0)
}
else
{
do
{
fread(&em,sizeof(struct employee),1,fp)
i++
}
while(feof(fp)==0)
}
fclose(fp)
return(i-1)
}
void display() /*浏览函数*/
{
int i
int m=load()
printf("\n职工号\t姓名\t职称\t基本工资\t奖金\t保险\t杂费\t实际工资 \n")
for(i=0i<mi++) /*m为输入部分的职工人数*/
printf("\n %d\t %s\t %c\t %d\t %d\t %d\t %d\t%d\n",em[i].num,em[i].name,em[i].zhicheng,em[i].jiben,em[i].jiangjin,em[i].baoxian,em[i].zafei,em[i].shiji)//这里的代码错,要用数组下标
printf("按任意键继续\n")
getchar()getchar()system("cls")
}
void del() /*删除函数*/
{
int m=load()
int i,j,n,t,flag
char name1[10]
printf("\n 原来的职工信息:\n")
display() /* 调用浏览函数*/
printf("\n")
printf("请输入要删除的职工的姓名:\n")
scanf("%s",name1)
for(flag=1,i=0flag&&i<mi++)
{
if(strcmp(em[i].name,name1)==0)
{
printf("\n已找到此人,原始记录为:\n")
printf("\n职工号\t姓名\t职称\t基本工资\t奖金\t保险\t杂费\t实际工资 \n")
printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\t%d\n",em[i].num,em[i].name,em[i].zhicheng,em[i].jiben,em[i].jiangjin,em[i].baoxian,em[i].zafei,em[i].shiji)
printf("\n确实要删除此人信息请按1,不删除请按0\n")
scanf("%d",&n)
if(n==1) /*如果删除,则其他的信息都往上移一行*/
{
for(j=ij<m-1j++)
{
em[j]=em[j+1]
}
flag=0
}
}
}
if(!flag)
m=m-1
else
printf("\n对不起,查无此人!\n")
printf("\n 浏览删除后的所有职工信息:\n")
save(m)/*调用保存函数*/
display() /*调用浏览函数*/
printf("\n继续删除请按1,不再删除请按0\n")
scanf("%d",&t)
switch(t)
{
case 1:del()break
case 0:break
default :break
}system("cls")
}
void search()/*查询函数*/
{
int t,flag
do
{
printf("\n按姓名查询请按1 按职称查询请按2 进入主函数按3\n")
scanf("%d",&t)
if(t>=1&&t<=3)
{
flag=1
break
}
else
{
flag=0
printf("您输入有误,请重新选择!")
}
}while(flag==0)system("cls")
while(flag==1)
{
switch(t)
{
case 1:printf("按姓名查询\n")search_name()break
case 2:printf("按职称查询\n")search_zhicheng()break
case 3:main()break
default:break
}
system("cls")
}
}
void search_name()
{
char name1[10]
int i,t
int m=load()
printf("请输入要查找的姓名:\n")
scanf("%s",name1)
for(i=0i<mi++)
if(strcmp(name1,em[i].name)==0)
{
printf("\n已找到此人,其记录为:\n")
printf("\n职工号\t姓名\t职称\t基本工资\t奖金\t保险\t杂费\t实际工资 \n")
printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\t%d\n",em[i].num,em[i].name,em[i].zhicheng,em[i].jiben,em[i].jiangjin,em[i].baoxian,em[i].zafei,em[i].shiji)
break
}
if(i==m)
printf("\n对不起,查无此人\n")
printf("\n")
printf("返回查询函数请按1,继续查询职工号请按2\n")
scanf("%d",&t)
switch(t)
{
case 1:search()break
case 2: break
default:break
}
}
void search_zhicheng()
{
char zhicheng
int i,t=0
int m=load()
system("cls")
printf("请输入要查找的职称:\n")
scanf("%c",&zhicheng) //这里要用地址
for(i=0i<mi++)
if(em[i].zhicheng==zhicheng)
{
printf("\n已找到,其记录为:\n")
printf("\n职工号\t姓名\t职称\t基本工资\t奖金\t保险\t杂费\t实际工资 \n")
printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\t%d\n",em[i].num,em[i].name,em[i].zhicheng,em[i].jiben,em[i].jiangjin,em[i].baoxian,em[i].zafei,em[i].shiji)
}
if(i==m)
printf("\n对不起,查无此人\n")
printf("\n")
printf("返回查询函数请按1,继续查询学历请按2\n")
scanf("%d",&t)
switch(t)
{
case 1:system("cls")search()break
case 2:break
default :break
}
}
void modify() /*修改函数*/
{
int num
char name[10]
char zhicheng
int jiben
int jiangjin
int baoxian
int zafei
int shiji
int b,c,i,n,t,flag
int m=load()/*导入文件内的信息*/
printf("\n 原来的职工信息:\n")
display() /* 调用浏览函数*/
printf("\n")
printf("请输入要修改的职工的姓名:\n")
scanf("%s",name)
for(flag=1,i=0flag&&i<mi++)
{
if(strcmp(em[i].name,name)==0)
{
printf("\n已找到此人,原始记录为:\n")
printf("\n职工号\t姓名\t职称\t基本\t奖金\t保险\t杂费\t实际工资 \n")
printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\t%d\n",em[i].num,em[i].name,em[i].zhicheng,em[i].jiben,em[i].jiangjin,em[i].baoxian,em[i].zafei,em[i].shiji)
printf("\n确实要修改此人信息请按1 不修改请按0\n")
scanf("%d",&n)
if(n==1)
{
printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.职称 4.基本工资 5.奖金 6.保险 7.杂费 8.实际工资\n")
printf("请输入你想修改的那一项序号:\n")
scanf("%d",&c)
if(c>8||c<1)
printf("\n选择错误,请重新选择!\n")
}
flag=0
}
}
if(flag==1)
printf("\n对不起,查无此人!\n")
do
{
switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的
信息赋值给第i-1个人*/
{
case 1:printf("职工号改为: ")
scanf("%d",&num)
em[i-1].num=num
break
case 2:printf("姓名改为: ")
scanf("%s",name)
strcpy(em[i-1].name,name)
break
case 3:printf("职称改为: ")
getchar()
scanf("%c",&zhicheng)
em[i-1].zhicheng=zhicheng
break
case 4:printf("基本工资改为: ")
scanf("%d",&jiben)
em[i-1].jiben=jiben
break
case 5:printf("奖金改为: ")
scanf("%d",&jiangjin)//这里要用地址
em[i-1].jiangjin=jiangjin
break
case 6:printf("保险改为: ")
scanf("%d",&baoxian)//这里要用地址
break
case 7:printf("杂费改为: ")
scanf("%d",&zafei)//这里要用地址
em[i-1].zafei=zafei
break
case 8:printf("实际工资改为: ")
scanf("%d",&shiji)
em[i-1].shiji=shiji
break
}
printf("\n")
printf("\n是否确定所修改的信息?\n 是 请按1 不,重新修改 请按2: \n")
scanf("%d",&b)
}
while(b==2)
printf("\n浏览修改后的所有职工信息:\n")
printf("\n")
save(m)
display()
printf("\n继续修改请按1,不再修改请按0\n")
scanf("%d",&t)
switch(t)
{
case 1:modify()break
case 0:break
default :break
}system("cls")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)