*/#include "stdafx.h"
创新互联公司是一家专业提供潮南企业网站建设,专注与成都网站设计、成都做网站、HTML5建站、小程序制作等业务。10年已为潮南众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
#include "iostream"
#include "string"
#include "list"
#include "cassert"
using namespace std;/*
编号、姓名、部门、应付工资、保险、税金、实付工资。
其中实付工资由公式计算得到:实付工资=应付工资 - 保险- 税金
*/
struct employee{
string m_num;//编号
string m_name;//姓名
string m_dep;//部门
double m_salary;//应付工资
double m_insurance;//保险
double m_tax;//税金
};/*
(1)录入:输入职工数据,其中“实付工资”通过计算得到;
(2)删除:删除指定的职工信息(输入姓名,若找到则删除该信息)
(3) 修改:允许对已经录入的数据重新进行编辑、修改;
(4) 显示:显示全体职工数据;
(5)查询:
a. 输入职工姓名,显示该职工的全部数据;
b. 输入某部门值,显示该部门职工的数据、工资总额、平均工资。
(6) 退出程序。
*/listemployee emps;int _tmain(int argc, _TCHAR* argv[])
{
void print(const employee e);
void input();
void del();
void mod();
void show_all();
void show_name();
void show_dep();cout"简易职工薪水管理程序 by 做他\n";// delete this line
cout"版权没有 请随意复制或修改任何代码\n";//delete this linecout"请选择操作:1.录入 2.删除 3.修改 4.查询 5.显示所有员工 6.退出 :";
int choose=0;
cinchoose;
assert(!cin.fail());
while (choose!=6)
{
if (choose==1) input();
if (choose==2) del();
if (choose==3) mod();
if (choose==4)
{
int choice=0;
cout"请选择操作 1.按姓名查询 2.按部门查询 3.退出:";
cinchoice;
if (choice==1) show_name();
if (choice==2) show_dep();
if (choice==3)
{
cout"请选择操作:1.录入 2.删除 3.修改 4.查询 5.显示所有员工 6.退出 :";
cinchoose;
assert(!cin.fail());
continue;
}
}
if (choose==5) show_all();
cout"请选择操作:1.录入 2.删除 3.修改 4.查询 5.显示所有员工 6.退出 :";
cinchoose;
assert(!cin.fail());
}
return 0;
}void print(const employee e)
{
cout"编号:"e.m_numendl;
cout"姓名:"e.m_nameendl;
cout"部门:"e.m_dependl;
cout"保险:"e.m_insuranceendl;
cout"税金:"e.m_taxendl;
cout"应付工资:"e.m_salaryendl;
cout"实付工资:"e.m_salary-e.m_insurance-e.m_taxendl;
}void input()
{
string num,name,dep;
double salary,ins,tax;
cout"请输入员工编号:";
cinnum;
cout"请输入员工姓名:";
cinname;
cout"请输入员工部门:";
cindep;
cout"请输入员工保险:";
cinins;
assert(!cin.fail());
cout"请输入员工税金:";
cintax;
assert(!cin.fail());
cout"请输入员工应付工资:";
cinsalary;
assert(!cin.fail());
employee temp;
temp.m_dep=dep;
temp.m_insurance=ins;
temp.m_name=name;
temp.m_num=num;
temp.m_salary=salary;
temp.m_tax=tax;
emps.push_back(temp);
cout"员工录入操作完毕.\n";
}void del()
{
if (emps.size()==0)
{
cout"没有员工记录.\n";
return;
}
string name;
bool isfind=false;
cout"请输入要删除的员工姓名:";
cinname;
listemployee::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter-m_name==name)
{
isfind=true;
emps.erase(iter);
cout"姓名为\""name"\"的员工记录已删除.\n";
return;
}
}
if (!isfind)
{
cout"没有找到姓名为\""name"\"的员工.\n";
return;
}
}void mod()
{
if (emps.size()==0)
{
cout"员工记录为空.\n";
return;
}
bool isfind=false;
string name;
cout"请输入要修改的员工姓名:";
cinname;
listemployee::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter-m_name==name)
{
isfind=true;
cout"姓名为\""name"\"的员工记录已找到.\n";
break;
}
}
if (isfind)
{
string num,name,dep;
double tax,ins,salary;
print(*iter);
coutendl;
cout"请输入新的员工编号:";
cinnum;
cout"请输入新的员工姓名:";
cinname;
cout"请输入新的员工部门:";
cindep;
cout"请输入新的员工保险:";
cinins;
assert(!cin.fail());
cout"请输入新的员工税金:";
cintax;
assert(!cin.fail());
cout"请输入新的员工工资:";
cinsalary;
assert(!cin.fail());
iter-m_dep=dep;
iter-m_insurance=ins;
iter-m_name=name;
iter-m_num=num;
iter-m_salary=salary;
iter-m_tax=tax;
cout"1 员工记录被成功修改.\n";
}
else
{
cout"没有找到姓名为\""name"\"的员工记录.\n";
}
}void show_all()
{
if (emps.size()==0)
{
cout"员工记录为空.\n";
return;
}
cout"显示全体员工数据:\n";
cout"--------------------\n";
listemployee::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
coutendl;
print(*iter);
coutendl;
}
cout"--------------------\n";
}void show_name()
{
if (emps.size()==0)
{
cout"员工记录为空.\n";
return;
}
bool isfind=false;
string name;
cout"请输入要查询的员工姓名:";
cinname;
listemployee::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
if (iter-m_name==name)
{
isfind=true;
cout"姓名为\""name"\"的员工记录已找到.\n";
print(*iter);
break;
}
}
if (!isfind)
{
cout"没有找到姓名为\""name"\"的员工.\n";
return;
}
}void show_dep()
{
if (emps.size()==0)
{
cout"员工记录为空.\n";
return;
}
double isfind=0.00;
double total_salary=0.00;
string dep;
cout"请输入要查询的部门名称:";
cindep;
cout"部门["dep"]的员工信息:\n";
cout"--------------------\n\n";
listemployee::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
if (iter-m_dep==dep)
{
isfind++;
total_salary+=iter-m_salary;
print(*iter);
coutendl;
continue;
}
}
cout"--------------------\n";
if (isfind==0)
{
cout"没有找到名称为["dep"]的部门.\n";
}
else
{
cout"部门["dep"]工资统计:\n";
cout"工资总额:"total_salaryendl;
cout"平均工资:"total_salary/isfindendl;
}
}
附1、:使用说明
输入1注册信息:注册职工信息时提示注册员工的个数,且系统会自动给出职工编号,然后输入职工姓名、性别、年龄、学历、工资、地址、联系电话。
输入2浏览信息:操作后可以浏览该公司所有职工的信息。
输入3查询信息:可以根据不同的信息查询公司职工的信息。如按照职工的编号、职工的学历、职工的联系电话。知道职工的其中一个信息就可以查到他的其他信息。实现了掌握少量的信息就可以找到相关的信息。
输入4删除信息:介入这一界面时,先显示全部职工的信息,再输入需要删除职工的名字。操作后可显示删除后的全部职工的信息。
输入5添加信息:进入这一界面后,先显示原来的职工的信息,再提示添加信息的人数,然后输入新的职工的信息。操作完后可自动显示添加完后的全部职工的信息。
输入6修改信息:介入界面后,显示全部职工的信息,再提示输入需要修改的职工的姓名,输入后显示该职工原来的信息且提示是否修改:输入1时修改,输入0时不修改。需要修改时,提示需要修改的选项的序号,然后进行修改。修改后系统自动显示修改后的职工的信息。
附件:职工信息管理系统代码
file.c
此文件主要包含涉及文件读写功能的函数。
/************************************************************/
/* File: file.c */
/************************************************************/
#include stdio.h
#include windows.h
#include time.h
#include string.h
#define N 100 /*宏定义*/
struct employee
{ int num; /*职工编号*/
char name[10]; /*职工姓名*/
char sex[4]; /*职工性别*/
char bir[16]; /*职工出生年月*/
char xueli[30]; /*职工学历*/
int wage; /*职工工资*/
char addr[30]; /*职工地址*/
char tel[20]; *职工电话*/
}em[100]; /*定义一个结构体*/
void menu() /*菜单函数*/
{
printf(" ☆☆☆信息管理与信息系统☆☆☆\n");
printf("\n");
printf(" B0902 李颖\n");
printf("\n");
printf(" ******************职工信息管理****************\n");
printf(" 1.录入职工信息");
printf(" 2.浏览职工信息\n");
printf(" 3.查询职工信息");
printf(" 4.删除职工信息\n");
printf(" 5.添加职工信息");
printf(" 6.修改职工信息\n");
printf(" 7.退出管理系统\n");
printf(" **********************************************\n");
printf("\n");
printf("\n");
}
void main()
{
menu(); /*调用菜单函数*/
int n,flag;
char a;
do
{ printf("请选择你需要操作的步骤(1--7):\n");
scanf("%d",n);
if(n=1n=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{ switch(n)
{
case 1:printf(" ◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break;
case 2:printf(" ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;
case 3:printf(" ◆◆◆查询职工信息◆◆◆\n");printf("\n");search();break;
case 4:printf(" ◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break;
case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break;
case 6:printf(" ◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break;
case 7:exit(0);break;
default :break;
}
getchar();
printf("\n");
printf("是否继续进行(y or n):\n");
scanf("%c",a);
if(a=='y')
{
flag=1;
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
printf("请再次选择你需要操作的步骤(1--6):\n");
scanf("%d",n);
printf("\n");
}
else
exit(0);
}
}
void input() /*录入函数*/
{
int i,m;
printf("请输入需要创建信息的职工人数(1--100):\n");
scanf("%d",m);
for (i=0;im;i++)
{
printf("职工号: ");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别: ");
scanf("%s",em[i].sex);
printf("请输入出生年月: ");
scanf("%s",em[i].bir);
printf("请输入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%s",em[i].tel);
printf("\n");
}
printf("\n创建完毕!\n");
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=0;im;i++) /*将内存中职工的信息输出到磁盘文件中去*/
if (fwrite(em[i],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[i],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=0;im;i++) /*m为输入部分的职工人数*/
printf("\n %6d\t%s\t%4s\t%s\t%s\t%d\t%s\t%s\n",em[i].num,em[i].name,em[i].sex,em[i].bir,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
void del() /*删除函数*/
{ int m=load();
int i,j,n,t,flag;
char name[20];
printf("\n 原来的职工信息:\n");
display(); /* 调用浏览函数*/
printf("\n");
printf("请输入要删除的职工的姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flagim;i++)
{
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%s\t%s\t%s\t%d\t%s\t%s\n",em[i].num,em[i].name,em[i].sex,em[i].bir,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("\n确实要删除此人信息请按1,不删除请按0\n");
scanf("%d",n);
if(n==1) /*如果删除,则其他的信息都往上移一行*/
{
for(j=i;jm-1;j++)
{
strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
strcpy(em[j].sex,em[j+1].sex);
strcpy(em[j].bir,em[j+1].bir);
strcpy(em[j].xueli,em[j+1].xueli);
em[j].wage=em[j+1].wage;
strcpy(em[j].addr,em[j+1].addr);
strcpy(em[j].tel,em[j+1].tel);
}
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;
}
}
void add() /*添加函数*/
{
FILE*fp;
int n;
int count=0;
int i;
int m=load();
printf("\n 原来的职工信息:\n");
display(); /* 调用浏览函数*/
printf("\n");
fp=fopen("emploee_list","a");
printf("请输入想增加的职工数:\n");
scanf("%d",n);
for (i=m;i(m+n);i++)
{
printf("\n 请输入新增加职工的信息:\n");
printf("请输入职工号: ");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d ",em[i].num);
printf("\n");
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别: ");
scanf("%s",em[i].sex);
printf("请输入出生年月: ");
scanf("%s",em[i].bir);
printf("请输入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%s",em[i].tel);
printf("\n");
count=count+1;
printf("已增加的人数:\n");
printf("%d\n",count);
}
printf("\n添加完毕!\n");
m=m+count;
printf("\n浏览增加后的所有职工信息:\n");
printf("\n");
save(m);
display();
fclose(fp);
}
void search() /*查询函数*/
{
int t,flag;
do
{
printf("\n按职工号查询请按1 ; 按学历查询请按2 ; 按电话号码查询请按3,进入主函数按4\n");
scanf("%d",t);
if(t=1t=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch(t)
{
case 1:printf("按职工号查询\n");search_num();break;
case 2:printf("按学历查询\n");search_xueli();break;
case 3:printf("按电话号码查询\n");search_tel();break;
case 4:main();break;
default:break;
}
}
}
void search_num()
{
int num;
int i,t;
int m=load();
printf("请输入要查找的职工号(20001111---20009999):\n");
scanf("%d",num);
for(i=0;im;i++)
if(num==em[i].num)
{
printf("\n已找到此人,其记录为:\n");
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t工资\t住址\t电话 \n");
printf("\n%d\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n",em[i].num,em[i].name,em[i].sex,em[i].bir,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
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_xueli()
{
char xueli[30];
int i,t;
int m=load();
printf("请输入要查找的学历:\n");
scanf("%s",xueli);
for(i=0;im;i++)
if(strcmp(em[i].xueli,xueli)==0)
{
printf("\n已找到,其记录为:\n");
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t工资\t住址\t电话 \n");
printf("\n%d\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n",em[i].num,em[i].name,em[i].sex,em[i].bir,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
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_tel()
{
char tel[20];
int i, t;
int m=load();
printf("请输入要查找的电话号码:\n");
scanf("%ld",tel);
for(i=0;im;i++)
if(strcmp(em[i].tel,tel)==0)
{
printf("\n已找到此人,其记录为:\n");
printf("\n职工号\t姓名\t性别\t出生年月\t学历\t工资\t住址\t电话 \n");
printf("\n%d\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n",em[i].num,em[i].name,em[i].sex,em[i].bir,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
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 modify() /*修改函数*/
{
int num;
char name[10];
char sex[4];
char bir[20];
char xueli[30];
int wage;
char addr[30];
char tel[20];
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=0;flagim;i++)
{
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%s\t%s\t%s\t%d\t%s\t%s\n",em[i].num,em[i].name,em[i].sex,em[i].bir,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
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(c8||c1)
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("性别改为: ");
scanf("%s",sex);
strcpy(em[i-1].sex,sex);
break;
case 4:printf("出生年月改为: ");
scanf("%s",bir);
strcpy(em[i-1].bir,bir);
break;
case 5:printf("学历改为: ");
scanf("%s",xueli);
strcpy(em[i-1].xueli,xueli);
break;
case 6:printf("工资改为: ");
scanf("%d",wage);
break;
case 7:printf("住址改为: ");
scanf("%s",addr);
strcpy(em[i-1].addr,addr);
break;
case 8:printf("电话改为: ");
scanf("%s",tel);
strcpy(em[i-1].tel,tel);
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;
}
}
//写这个程序花了我2.5小时写代码
//再花了1个小时测试,全部正确了
//所以一定要给我加分哦,要求100分以上,哈哈
//不然下次就没信心帮你写了
//职工管理系统
//职工号,姓名,性别,年龄,学历,工资,住址,电话等
/*
1、录入职工信息,若录入的职工号重复给予提示;
2、浏览职工信息;
3、职工号和职工姓名查询职工信息;
4、按职工号删除职工信息。
*/
#include stdio.h
#include stdlib.h
#include string.h
//下面定义职工信息结构
struct WORKER{
int id; //职工号
char name[20]; //姓名
char sex[3]; //性别
int age; //年龄
char edu[50]; //学历
int wages; //工资
char adr[255]; //住址
char phone[13]; //电话
};
typedef struct WORKER *PWORKER;
struct LINK{
WORKER w;
LINK *next;
};
typedef struct LINK *PLINK;
//创建职工信息链表
PLINK create()
{
PLINK p=(PLINK)malloc(sizeof(struct LINK));
if(NULL!=p)
{
p-next=NULL;
return p;
}
printf("内存不足!\n");
return NULL;
}
//显示程序界面文字
void message()
{
system("cls");
printf("欢迎进入职工管理系统\n");
printf(" --帮助 请输入:0\n");
printf(" --录入职工信息 请输入:1\n");
printf(" --浏览职工信息 请输入:2\n");
printf(" --按职工号查询 请输入:3\n");
printf(" --按姓名 查询 请输入:4\n");
printf(" --删除职工信息 请输入:5\n");
printf("\n --清屏 请输入:6\n");
printf(" --退出 请输入:-1\n");
}
//录入职工信息
int add(PLINK p)
{
PLINK q=(PLINK)malloc(sizeof(struct LINK));
if(NULL==q)
{
printf("录入失败提示:内存不足!\n");
return -1;
}
printf("请输入职工号(数字):");
scanf("%d",q-w.id);
PLINK h=p-next;
while(h)
{
if(h-w.id==q-w.id)
{
free(q);
printf("录入失败提示:此职工号已经存在!\n");
return -1;
}
h=h-next;
}
printf("请输入职工姓名(文字):");
scanf("%s",q-w.name);
printf("请输入职工性别(文字):");
scanf("%s",q-w.sex);
printf("请输入职工年龄(数字):");
scanf("%d",q-w.age);
printf("请输入职工学历(文字):");
scanf("%s",q-w.edu);
printf("请输入职工工资(数字):");
scanf("%d",q-w.wages);
printf("请输入职工住址(文字):");
scanf("%s",q-w.adr);
printf("请输入职工电话(文字):");
scanf("%s",q-w.phone);
q-next=p-next;
p-next=q;
printf("录入成功!\n");
return -1;
}
//浏览职工信息
void show(PLINK p)
{
message();
printf("浏览职工信息\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
while(NULL!=p-next)
{
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",
p-next-w.id,p-next-w.name,p-next-w.sex,p-next-w.adr,
p-next-w.edu,p-next-w.wages,p-next-w.adr,p-next-w.phone);
p=p-next;
}
printf("显示完毕!\n");
}
//按职工号查询
PLINK findid(PLINK p,int id)
{
message();
printf("按职工号查询\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
while(NULL!=p-next)
{
if(p-next-w.id==id)
{
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",
p-next-w.id,p-next-w.name,p-next-w.sex,p-next-w.adr,
p-next-w.edu,p-next-w.wages,p-next-w.adr,p-next-w.phone);
return p;
}
p=p-next;
}
printf("查询结束!\n");
return NULL;
}
//按姓名 查询
PLINK findname(PLINK p,char *name)
{
message();
printf("按姓名 查询\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
while(NULL!=p-next)
{
if(0==strcmp(p-next-w.name,name))
{
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",
p-next-w.id,p-next-w.name,p-next-w.sex,p-next-w.adr,
p-next-w.edu,p-next-w.wages,p-next-w.adr,p-next-w.phone);
return p;
}
p=p-next;
}
printf("查询结束!\n");
return NULL;
}
//按职工号删除职工信息
int del(PLINK p,int id)
{
message();
printf("按职工号删除职工信息\n");
while(NULL!=p-next)
{
if(p-next-w.id==id)
{
PLINK q=p-next;
p-next=p-next-next;
free(q);
printf("删除成功!\n");
return 1;
}
p=p-next;
}
printf("没有你输入的职工号!\n");
return -1;
}
//程序结束时释放内存
void release(PLINK p)
{
PLINK q;
while(NULL!=p-next)
{
q=p;
p=p-next;
free(q);
}
free(p);
}
int main()
{
int cmd=0;//命令号
int id;
char name[20];
PLINK pworker;
if(!(pworker=create()))
{
exit(0);//如果创建职工信息链表表头失败则结束程序
}
while(cmd!=-1)
{
switch(cmd)
{
case 0:
message();
break;
case 1:
add(pworker);
break;
case 2:
show(pworker);
break;
case 3:
printf("请输入要查询的职工号:");
scanf("%d",id);
findid(pworker,id);
break;
case 4:
printf("请输入要查询的职姓名:");
scanf("%s",name);
findname(pworker,name);
break;
case 5:
printf("请输入要删除的职工号:");
scanf("%d",id);
del(pworker,id);
break;
case 6:
default:
message();
}
printf("请输入操作命令数字:\n");
scanf("%d",cmd);//接收命令
}
printf("谢谢使用!\n");
release(pworker);
return 0;
}
//程序有详细说明了
//希望你以后好好学。
本文介绍一些Go语言的基础语法。
先来看一个简单的go语言代码:
go语言的注释方法:
代码执行结果:
下面来进一步介绍go的基础语法。
go语言中格式化输出可以使用 fmt 和 log 这两个标准库,
常用方法:
示例代码:
执行结果:
更多格式化方法可以访问中的fmt包。
log包实现了简单的日志服务,也提供了一些格式化输出的方法。
执行结果:
下面来介绍一下go的数据类型
下表列出了go语言的数据类型:
int、float、bool、string、数组和struct属于值类型,这些类型的变量直接指向存在内存中的值;slice、map、chan、pointer等是引用类型,存储的是一个地址,这个地址存储最终的值。
常量是在程序编译时就确定下来的值,程序运行时无法改变。
执行结果:
执行结果:
Go 语言的运算符主要包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符以及指针相关运算符。
算术运算符:
关系运算符:
逻辑运算符:
位运算符:
赋值运算符:
指针相关运算符:
下面介绍一下go语言中的if语句和switch语句。另外还有一种控制语句叫select语句,通常与通道联用,这里不做介绍。
if语法格式如下:
if ... else :
else if:
示例代码:
语法格式:
另外,添加 fallthrough 会强制执行后面的 case 语句,不管下一条case语句是否为true。
示例代码:
执行结果:
下面介绍几种循环语句:
执行结果:
执行结果:
也可以通过标记退出循环:
--THE END--
希望对你有帮助。
/**************************************************
内容及要求:
1注册新职工,添加新职工的详细信息,
如:职工号,姓名,出生年份,性别,职称,部门,工资等;
2按姓名,部门等条件进行查询;
3修改和删除职工信息;
4按工资高低进行排序;
5把各项纪录存储在文本文件中。
----ky kuaidh00, 2008/01/05.-------------------
评说:有删除和增加的操作,最好选取链表来做。
**************************************************/
#include string
#include iostream
#include fstream
#include iomanip
#include memory.h
#include stdio.h
#include conio.h
#include stdlib.h
using namespace std;
struct Employee
{//声明职工的结构作为链表节点。
//-----数据域-----
string m_Code;
string m_Name;
unsigned short int m_Year;
string m_Sex;
string m_Post;
string m_Department;
unsigned int m_Wage;
//链表节点的指针域---
struct Employee* Next;
};
//-----个人习惯:取别名-------
typedef struct Employee Node;
typedef Node* Link;
//-------函数声明-------------
Link Create(Link Head);
void Release(Link Head);
Link Add(Link Head);
bool Search(Link Head);
Link Search_Unique(Link Head);
void Display_List(Link Head);
void Display_Node(Link pNode);
Link Modify(Link Head);
Link Del(Link Head);
void Save_ByFile(Link Head,fstream ofile);
Link Sort(Link Head);
//-------函数实现--------------------------
Link Create(Link Head)
{//创建一个带头节点的空链表。
Head=(Link)new Node;
if(!Head)
{
cout"分配内存失败!"endl;
return NULL;
}
Head-m_Code="";
Head-m_Name="";
Head-m_Year=0;
Head-m_Sex="";
Head-m_Post="";
Head-m_Department="";
Head-m_Wage=0;
Head-Next=NULL;
return Head;
}
void Release(Link Head)
{//释放链表。
Link ptr;//声明一个操作用的指针。
while(Head!=NULL)
{
ptr=Head;
Head=Head-Next;
delete ptr;//释放节点资源。
}
}
Link Add(Link Head)
{//前插法添加数据。
Link pNew;// 声明一个新节点。
char again;
string code,name,sex,post,department;
unsigned short int year;
unsigned int wage;
do
{
pNew=(Link)new Node;
//数据域。
cout"请输入职工代码:";
cincode;
coutendl"请输入职工姓名:";
cinname;
coutendl"请输入职工出生年份:";
cinyear;
while(cin.fail())
{
cout"请输入正确的年份格式。"endl;
cin.clear();
fflush(stdin);
cinyear;
}
coutendl"请输入职工性别:";
cinsex;
coutendl"请输入职工职称:";
cinpost;
coutendl"请输入职工部门:";
cindepartment;
coutendl"请输入职工工资:";
cinwage;
while(cin.fail())
{
cout"请输入正确的工资数据。"endl;
cin.clear();
fflush(stdin);
cinwage;
}
coutendl;
pNew-m_Code=code;
pNew-m_Name=name;
pNew-m_Year=year;
pNew-m_Sex=sex;
pNew-m_Post=post;
pNew-m_Department=department;
pNew-m_Wage=wage;
//指针域。
pNew-Next=Head-Next;
Head-Next=pNew;
cout"数据添加成功!是否继续添加?(Y/N)"endl;
cinagain;
}while(again=='Y'||again=='y');
return Head;
}
bool Search(Link Head)
{//查询同时满足“姓名”和“部门”的职工信息。
Link ptr;
string department;
string name;
ptr=Head-Next;
cout"请输入部门:";
cindepartment;
coutendl"请输入姓名:";
cinname;
coutendl"----------------查询结果------------------"endl;
while(ptr)
{
if((ptr-m_Name==name)(ptr-m_Department==department))
{
Display_Node(ptr);//打印满足条件的节点。
return true;
}
ptr=ptr-Next;//查询下一节点。
}
cout"无此职工的信息。"endl;
return false;
}
Link Search_Unique_Front(Link Head)
{//查询满足“职工代码“的职工信息(职工代码必需唯一)。
Link ptr;
string code;
ptr=Head;
cout"请输入职工代码:";
cincode;
coutendl"----------------查询结果------------------"endl;
while(ptr-Next)
{
if(ptr-Next-m_Code==code)
//Display_Node(ptr);//打印满足条件的节点。
return ptr;//注意,是返回的查询到的节点的直接前趋节点。
ptr-Next=ptr-Next-Next;//查询下一节点。
}
return ptr;
}
void Display_List(Link Head)
{
Link ptr;
ptr=Head-Next;
cout"==================所有职工信息=================="endl;
while(ptr)
{
Display_Node(ptr);
ptr=ptr-Next;
}
}
void Display_Node(Link pNode)
{//在标准输出设备上输出。
coutsetw(10)leftpNode-m_Code
setw(10)leftpNode-m_Name
setw(10)leftpNode-m_Year
setw(10)leftpNode-m_Sex
setw(10)leftpNode-m_Post
setw(10)leftpNode-m_Department
setw(10)leftpNode-m_Wageendl;//setw(10)表示占10个字符位置。
}
Link Modify(Link Head)
{// 修改单一个节点。
Link ptr;
ptr=Search_Unique_Front(Head);
string code,name,sex,post,department;
unsigned short int year;
unsigned int wage;
if(ptr-Next)
{
cout"-------你现在可以修改此职工的信息了-------"endl;
//数据域。
cout"请输入职工代码:";
cincode;
coutendl"请输入职工姓名:";
cinname;
coutendl"请输入职工出生年份:";
cinyear;
while(cin.fail())
{
cout"请输入正确的年份格式。"endl;
cin.clear();
fflush(stdin);
cinyear;
}
coutendl"请输入职工性别:";
cinsex;
coutendl"请输入职工职称:";
cinpost;
coutendl"请输入职工部门:";
cindepartment;
coutendl"请输入职工工资:";
cinwage;
while(cin.fail())
{
cout"请输入正确的工资数据。"endl;
cin.clear();
fflush(stdin);
cinwage;
}
coutendl;
ptr-Next-m_Code=code;//因ptr是前趋节点,所以要用ptr-Next;
ptr-Next-m_Name=name;
ptr-Next-m_Year=year;
ptr-Next-m_Sex=sex;
ptr-Next-m_Post=post;
ptr-Next-m_Department=department;
ptr-Next-m_Wage=wage;
}
cout"没找到此职工的记录,无法修改。"endl;
return Head;
}
Link Del(Link Head)
{
Link ptr;
Link ptr_front;
ptr_front=Search_Unique_Front(Head);
ptr=ptr_front-Next;
if(ptr)
{
ptr_front-Next=ptr-Next;
delete ptr;//删除此节点。
}
cout"没找到此职工的记录,无法删除。"endl;
return Head;
}
void Save_ByFile(Link Head,fstream ofile)
{
Link pNode;
pNode=Head-Next;
ofile.clear();//清除文件结束状态。
while(pNode)
{
ofilesetw(10)leftpNode-m_Code
setw(10)leftpNode-m_Name
setw(10)leftpNode-m_Year
setw(10)leftpNode-m_Sex
setw(10)leftpNode-m_Post
setw(10)leftpNode-m_Department
setw(10)leftpNode-m_Wageendl;//setw(10)表示占10个字符位置。
pNode=pNode-Next;
}
cout"数据文件保存成功!"endl;
}
Link Sort(Link Head)
{//我创建的是带头节点的链表。用直接插入法。
if((Head-Next==NULL)||(Head-Next-Next==NULL))//此步条件判断非常有价值。
{
cout"数据节点数少于2个,不用排序!"endl;
return Head;
}
//-----------第二步;
Link ptr;
Link ptr_F;
Link ptr_N;
ptr=Head-Next-Next;
ptr_F=Head;
Head-Next-Next=NULL;//到此,分成了两个链表。
//第三步。
while(ptr)
{
ptr_N=ptr-Next;
ptr_F=Head;//ptr_F的归位。
while(ptr_F-Next)
{
if(ptr-m_Wageptr_F-Next-m_Wage)
{
ptr-Next=ptr_F-Next;
ptr_F-Next=ptr;
break;
}//if
else
{
ptr_F=ptr_F-Next;
}
}//while(ptr_F-Next)
if(ptr_F-Next==NULL)
{
ptr-Next=ptr_F-Next;
ptr_F-Next=ptr;//表示插到有序链表的最后面了。
}
ptr=ptr_N;//归位,准备下一次排序。
}//while(ptr)
cout"从高到低,排序成功!"endl;
return Head;
}
int main()
{
Link Head=0;
Head=Create(Head);
fstream iofile;
iofile.open("d:\\iofile.txt",ios_base::in|ios_base::out|ios_base::app);//文件以三种方式打开。
if(!iofile)
{
cout"打开文件失败!"endl;
return -1;
}
int menu;
while(1)
{
cout"*****************************************************"endl;
cout"*====================菜单选顶=======================*"endl;
cout"*===================================================*"endl;
cout"* 1.注册职工 2.修改信息 3.删除信息 4.信息查询 *"endl;
cout"* 5.保存文件 6.工资排行 7.信息显示 0.退出系统 *"endl;
cout"*****************************************************"endl;
coutendl"请选择相应操作菜单项:";
cinmenu;
while(cin.fail())
{
cout"请选择正确的菜单选项。"endl;
cin.clear();
fflush(stdin);
cinmenu;
}
switch(menu)
{
case 0:
cout"成功退出系统!"endl;
return 0;
case 1:
Head=Add(Head);
break;
case 2:
Head=Modify(Head);
break;
case 3:
Head=Del(Head);
break;
case 4:
Search(Head);
break;
case 5:
Save_ByFile(Head,iofile);
break;
case 6:
Sort(Head);
break;
case 7:
Display_List(Head);
break;
default:
cout"请选择正确的菜单项进行操作。多谢合作!"endl;
}
}
Release(Head);
iofile.close();
return 0;
}
#include iostream
#include string
#define MaxHEAP 100
using namespace std;
class Elem{
private:
int objectID;
int priority;
string proName;
public:
Elem(int objectID=0,int priority=0){
setID(objectID);
setPri(priority);
setProN(proName);
}
int getID(){
return objectID;
}
int getPri(){
return priority;
}
string getProN(){
return proName;
}
void setID(int id){
objectID=id;
}
void setPri(int pri){
priority=pri;
}
void setProN(string s)
{
proName=s;
}
};
class Heap
{
private:
Elem items[MaxHEAP];
int size;
public :
Heap(){
Elem items[MaxHEAP];
setSize(0);}
void setSize(int sz)
{size=sz;}
int heapIsEmpty(){
return size==0;
}
void heapInsert(Elem newItem)
{if(sizeMaxHEAP)
{
items[size]=newItem;
int place=size;
int parent=(place-1)/2;
while((parent=0)(items[parent].getPri()items[place].getPri()))
{
Elem temp=items[parent];
items[parent]=items[place];
items[place]=temp;
place=parent;
parent=(place-1/2);
}
++size;
}
heapRebuild(0);
}
Elem heapDelete(int ID)
{
Elem rootItem;
if(!heapIsEmpty())
{
for(int i=0;isize;i++)
if(items[i].getID()==ID)
{rootItem=items[i];
swap(items[i],items[0]);
}
items[0]=items[--size];
heapRebuild(0);
}
else cout"\n错误:目录为空"endl;
return rootItem;
}
void heapInit(){
setSize(0);
cout"空的项目"endl;}
void heapView(){
if(size==0){
cout"空的项目!"endl;
}
else{
cout"共有项目数: "sizeendl;
for(int ct=0;ctsize;ct++){
cout"ID: "items[ct].getID()" 优先级: "items[ct].getPri()
" 工资数目: " items[ct].getProN()endl;
}
}
}
void search(int ID)
{ int N=0;
for(int i=0;isize;i++)
if(items[i].getID()==ID)
{N++;
cout"ID: "items[i].getID()" 优先级: "items[i].getPri()
" 名称: " items[i].getProN()endl; }
if(!N) cout"未找到匹配的ID"endl;
}
void heapRebuild(int root)
{
int child=2*root+1;
if(childsize)
{
int rightChild=child+1;
if((rightChildsize)(items[rightChild].getPri()=items[child].getPri()))
{child=rightChild;
}
if(items[root].getPri()=items[child].getPri())
{
Elem temp=items[root];
items[root]=items[child];
items[child]=temp;
heapRebuild(child);
}
}
}
};
class priQueue
{private:
Heap h;
public:
priQueue(){
Heap();
}
int priIsEmpty(){
return h.heapIsEmpty();
}
void priInit(){
h.heapInit();
}
void priInsert(Elem newItem){
h.heapInsert(newItem);
}
Elem priDelete(int ID){
return h.heapDelete(ID);
}
void priView(){h.heapView();
}
void search(int ID)
{
h.search(ID);
}
};
void showMenu(){
cout"------------------------------------------------"endl;
cout"-----------------*工资管理系统*-----------------"endl;
cout"------------------------------------------------"endl;
cout" 1.重置"endl;
cout" 2.输入"endl;
cout" 3.删除"endl;
cout" 4.查询"endl;
cout" 5.打印"endl;
cout" 0.退出"endl;
cout"------------------------------------------------"endl;
}
void showTip(){
cout"---------------------------------^_^--操作完成!"endl;
cout"------------------------------------选择0-5继续"endl;
}
int main(){
string i="-1";
int ID,PRI;
string proName;
Elem in;
priQueue PQ;
PQ.priInit();
system("cls");
showMenu();
cout"选择菜单中的数字以便处理数据!"endl;
cini;
system("cls");
while(i!="0")
{ if(i=="1")
{ system("cls");
showMenu();
cout"你选择了1,项目将全部清空:"endl;
PQ.priInit();
showTip();
}
else if(i=="2")
{system("cls");
showMenu();
cout"你选择了2,输入ID,优先级,工资"endl;
cout"输入 ID(数字):"endl;
cinID;
cout"输入优先级(数字):"endl;
cinPRI;
cout"输入工资数目(数字):"endl;
cinproName;
in.setID(ID);
in.setPri(PRI);
in.setProN(proName);
PQ.priInsert(in);
showTip();
}
else if(i=="3")
{system("cls");
showMenu();
cout"你选择了3,请选择你要删除的ID号"endl;
cinID;
PQ.priDelete(ID);
showTip();
}
else if(i=="4")
{system("cls");
showMenu();
cout"你选择了4,输入要查找的项目ID号"endl;
cinID;
PQ.search(ID);
showTip();
}
else if(i=="5")
{system("cls");
showMenu();
cout"你选择了5,整个系统工资情况显示如下:"endl;
PQ.priView();
showTip();
}
else {
system("cls");
showMenu();
cout"无效输入!"endl;
}
cini;
system("cls");
}
return 0;
}