?? thesystemofworkerssalary.txt
字號:
//***************************************************************************************************************************
//------------>職工成績管理系統
//程序清單:
#include <iomanip>
#include <iostream>
#include <fstream>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#define NULL 0
int const N=20;
#define LEN sizeof(struct student)
using namespace std;
void Menu();
void Pass();
int n=0; //定義一個全局變量統計職工人數
//——--------->定義一個職工信息的結構體
struct student
{
char name[N]; //用來存放姓名
char sex[N]; //用來存放性別
long id; //用來存放編號
float paid[3]; //用來存放工資
int total; //用來存放總工資
struct student *next;
};
//-------------->職工類
class Information
{
public:
Information() ; //構造函數.
~Information() ; //析構函數.
student *creat(); //建立鏈表
void output(student *head); //顯示職工信息
int count(student *head); //定義函數count()統計職工總數
student *insert(student*head); //指針函數*insert()用來添加職工信息.
student *cancel(student *head,long id); //指針函數*cancel()用來刪除職工信息.
student *find(student *head,long id); //指針函數*find()用來查找職工信息.
student *modify(student *head,long id); //指針函數*modife()用來修改職工的信息.
void paixu(student *head); //定義paixu()函數將職工的總額從大到小排列并輸出
void average(student *head); //定義職工工資平均值的函數
void save(student *head); //保存文件信息
student *Read(); //讀取文件信息
private:
student *p1,*p2,*p3,*head,st;
};
Information::Information()
{cout<<" ******************************************************************************\n";
cout<<" ------------------------<<歡迎您使用職工工資管理系統>>------------------------\n";
cout<<" ******************************************************************************\n\n";
}
void zuozhe()
{
cout<<"按<Enter>鍵進入登陸界面!!";
}
Information::~Information()
{ cout<<" ******************************************************************************\n";
cout<<" ------------------------<<謝謝您使用職工工資管理系統>>------------------------\n";
cout<<" ******************************************************************************\n";
}
//------------>建立鏈表信息
student *Information::creat(void)
{//定義一個指向struct student的結構體指針函數*creat()用來錄入職工信息.
char ch[N];n=0; //用來存放職工姓名
p1=p2=(student *)malloc(LEN);//調用malloc()函數用來開辟一個新的存儲單元
cout<<" -------------<<請建立職工信息表,在姓名處鍵以 # 結束輸入!>>--------------"<<endl;
cout<<" 姓名:";
cin>>ch;
head=NULL; //給指針head賦初值
while (strcmp(ch,"#")!=0)
{ //調用字符比較函數strcmp()用來判斷是否繼續輸入
p1=(student *)malloc(LEN); //調用malloc()函數用來開辟一個新的存儲單元
strcpy(p1->name,ch); //將循環結構前面輸入的姓名復制到結構體名為p1的數組name中
cout<<" 性別:";
cin>>p1->sex;
cout<<" 編號:";
cin>>p1->id;
while((p1->id)<0||(p1->id)>100000) //判斷輸入的編號是否有效(100000個)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<1000000): ";
cin>>p1->id;
}
cout<<" 基本工資:";
cin>>p1->paid[0];
while((p1->paid[0])<0||(p1->paid[0])>100000) //判斷輸入的分數是否有效(>=0 <=100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[0];
}
cout<<" 加班工資:";
cin>>p1->paid[1];
while((p1->paid[1])<0||(p1->paid[1])>100000) //判斷輸入的分數是否有效(>=0 <=100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[1];
}
cout<<" 其他獎金:";
cin>>p1->paid[2];
while((p1->paid[2])<0||(p1->paid[2])>100000) //判斷輸入的分數是否有效(>=0 <=100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[2];
}
p1->total=p1->paid[0]+p1->paid[1]+p1->paid[2]; //計算總額
if(n==0)head=p1; //如果是輸入第一組職工信息就將指針p1賦給指針head
else p2->next=p1; //否則將p1賦給p2所指結構體的next指針
p2=p1; //將指針p1賦給指針p2
n++; //將職工人數n的值加1
cout<<"\n 姓名:";
cin>>ch; //將輸入的姓名存放到字符數組ch中
}
p2->next=NULL; //將p2所指結構體的next指針重新賦空值
return (head);//將輸入的第一組職工信息返回
}
//--------------->定義output()函數將職工的信息從頭指針所指內容開始輸出
void Information::output(student *head)
{
system("cls");
if(head==NULL) cout<<" 這是一個空表,請先輸入職工信息!\n";
else{
cout<<"-------------------------------------------------------------------------------\n";
cout<<" *職工工資信息表*\n";
cout<<"-------------------------------------------------------------------------------\n";
cout<<"|編 號| |姓 名| |性別| |基本工資| |加班工資| |其他獎金| |總額|\n";
cout<<"-------------------------------------------------------------------------------\n";
p1=head; //將頭指針賦給p
do
{
cout<<setw(6)<<p1->id
<<setw(10)<<p1->name
<<setw(10)<<p1->sex
<<setw(10)<<p1->paid[0]
<<setw(10)<<p1->paid[1]
<<setw(12)<<p1->paid[2]
<<setw(12)<<p1->total<<endl;
cout<<"-------------------------------------------------------------------------------\n";
p1=p1->next; //將下一組職工信息的next指針賦給p
}while(p1!=NULL); //若指針p非空則繼續,目的是把所有的職工信息都傳給指針p然后輸出.
}
}
//------------>統計職工人數的函數
int Information::count(struct student *head) //定義函數count()統計職工總數
{
if(head==NULL)return(0); //若指針head為空返回值為0
else return(1+count(head->next)); //函數的遞歸調用
}
//----------->添加職工的成績的函數
student *Information::insert( student *head)
//插入新結點定義一個指向struct student的結構體指針函數*insert()用來添加職工信息.
{
system("cls");
cout<<"\t----------------<<請輸入新增職工成績信息>>----------------\n"<<endl;
p1=(student *)malloc(LEN); //使p1指向插入的新結點
cout<<" 編號:";
cin>>p1->id;
while((p1->id)<0||(p1->id)>100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->id; //將輸入的編號存放到p1所指結構體的數組id中
}
cout<<" 姓名:";
cin>>p1->name; //將輸入的姓名存放到結構體名為p1的數組name中
cout<<" 性別:";
cin>>p1->sex;
cout<<" 基本工資:";
cin>>p1->paid[0];
while((p1->paid[0])<0||(p1->paid[0])>100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[0]; //將輸入的基本工資存放到p1所指結構體的數組paid中
}
cout<<" 加班工資:";
cin>>p1->paid[1];
while((p1->paid[1])<0||(p1->paid[1])>100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[1]; //將輸入的加班工資存放到p1所指結構體的數組paid中
}
cout<<" 其他獎金:";
cin>>p1->paid[2];
while((p1->paid[2])<0||(p1->paid[2])>100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[2]; //將輸入的其他獎金存放到p1所指結構體的數組paid中
}
p1->total=p1->paid[0]+p1->paid[1]+p1->paid[2];//計算總分
p2=head; //將頭指針賦給p2
if(head==NULL) //若沒調用次函數以前的頭指針head為空
{
head=p1;p1->next=NULL;
} //則將p1賦給頭指針head并將p1所指結構體成員指針next賦空值
else
{
while((p1->id>p2->id)&&(p2->next!=NULL))
{
p3=p2; //p3指向原p2指向的結點
p2=p2->next;
} //p2后移一個結點
if(p1->id<=p2->id)
{
if(head==p2)
{
p1->next=head;
head=p1;
} //插入到第一個結點之前
else
{
p3->next=p1;
p1->next=p2;
} //插入到p3所指結點之后
}
else
{
p2->next=p1;
p1->next=NULL;
} //插入到尾結點之后
}
n++; //將職工人數加1
cout<<"\t----------------<<你輸入的職工信息已經成功插入>>----------------"<<endl;
return (head);
}
//------------>刪除職工信息
student *Information::cancel(student *head,long id) //定義一個指向struct student的結構體指針函數*delete()用來刪除考生信息.
{
system("cls");
if(head==NULL) //若調用次函數以前的頭指針head為空
{
return(head);
}
else
{
p1=head; //否則將頭指針賦給p1
while(id!=p1->id&&p1->next!=NULL) //尋找要刪除的結點當p1所指的職工編號不是輸入的職工編號并且p1所指的next指針不為空
{
p2=p1;
p1=p1->next;
} //p2指向原p1指向的結點p1后移一個結點
if(id==p1->id) //如果輸入的職工編號是p1所指的職工編號//結點找到后刪除
{
if(p1==head) head=p1->next; //如果head指針和p1指針相等則將下一個結點賦給指針head
else
p2->next=p1->next; //否則將p1所指結點賦給p2所指結點將要刪除的職工信息跳過去
cout<<" 刪除編號為"<<id<<"的職工\n";
n--; //將職工人數減1
}
return(head); //將頭指針返回
}
}
/**************************修改職工數據**************************/
student *Information::modify(student *head,long id)
{
system("cls");
cout<<"\t----------------<<請輸入須修改的職工工資信息>>----------------\n"<<endl;
p1=(student *)malloc(LEN); //使p1指向輸入的結點
p1=head; //否則將頭指針賦給p1
while(id!=p1->id&&p1->next!=NULL)
//尋找結點當p1所指的職工編號不是輸入的職工編號并且p1所指的next指針不為空
{
p1=p1->next; //p2指向原p1指向的結點p1后移一個結點
}
if(id==p1->id) //如果要查找的職工編號是p1所指的職工編號
{
cout<<"你需要修改的職工信息如下:\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<"|編 號| |姓 名| |性別| |基本工資| |加班工資| |其他獎金| |總額|\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<setw(6)<<p1->id
<<setw(10)<<p1->name
<<setw(10)<<p1->sex
<<setw(10)<<p1->paid[0]
<<setw(10)<<p1->paid[1]
<<setw(12)<<p1->paid[2]
<<setw(12)<<p1->total<<endl;
cout<<"------------------------------------------------------------------------------\n";
cout<<" 編號:";
cin>>p1->id;
while((p1->id)<0||(p1->id)>100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->id; //將輸入的編號存放到p1所指結構體的數組id中
}
cout<<" 姓名:";
cin>>p1->name; //將輸入的姓名存放到結構體名為p1的數組name中
cout<<" 性別:";
cin>>p1->sex;
cout<<" 基本工資:";
cin>>p1->paid[0];
while((p1->paid[0])<0||(p1->paid[0])>100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[0]; //將輸入的基本工資存放到p1所指結構體的數組paid中
}
cout<<" 加班工資:";
cin>>p1->paid[1];
while((p1->paid[1])<0||(p1->paid[1])>100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[1]; //將輸入的加班工資存放到p1所指結構體的數組paid中
}
cout<<" 其他獎金:";
cin>>p1->paid[2];
while((p1->paid[2])<0||(p1->paid[2])>100000)
{
cout<<" 對不起您的輸入錯誤!請重新輸入(>0<100000): ";
cin>>p1->paid[2]; //將輸入的其他獎金存放到p1所指結構體的數組paid中
}
p1->total=p1->paid[0]+p1->paid[1]+p1->paid[2]; //計算總分
}
else
cout<<" 需要修改的信息中沒有編號為"<<id<<"的職工.\n\n"; //沒有想要修改的結點信息
getchar();
return(head);
}
//------------>查找職工信息
student *Information::find(student *head,long id)
//定義一個指向struct student的結構體指針函數*find()用來查找職工信息.
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -