📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, DBTables, ExtCtrls, ComCtrls, TeEngine,
Series, TeeProcs, Chart, DbChart, StdCtrls, Menus;
type
//定义一个记录类型,用于表示各薪酬段的区间及名字
TSalary=record
Min,Max:single; //薪酬段按薪酬划分,现定义其上下限
count:integer; //该区间段的雇员数目
Title:string; //该区间段的名称
end;
//定义一个记录类型,用于表示各工作资历段的区间及名字
TZili=record
Min,Max:TDatetime; //工作资历段按签约时间划分,现定义其上下限
count:integer; //该区间段的雇员数目
Title:string; //该区间段的名称
end;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
DBChart1: TDBChart;
Series1: TBarSeries;
RadioGroup1: TRadioGroup;
Series2: TLineSeries;
Series3: TPieSeries;
PopupMenu1: TPopupMenu;
N3D1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
Timer1: TTimer;
RadioGroup2: TRadioGroup;
DBChart2: TDBChart;
Series4: TBarSeries;
Series5: TLineSeries;
Series6: TPieSeries;
procedure FormShow(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
procedure N3D1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure RadioGroup2Click(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
private
//显示折线图
procedure ShowLine(index:integer);
//显示直方图
procedure ShowBar(index:integer);
//显示饼图
procedure ShowPie(index:integer);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//定义了5个薪酬段
ASalary:array[0..4] of TSalary;
//定义了3个工作资历段
AZili:array[0..2] of TZili;
implementation
uses Unit2;
{$R *.dfm}
//窗口显示
procedure TForm1.FormShow(Sender: TObject);
begin
//打开数据库的表
DM.table1.Open;
//初始化5个薪酬段
ASalary[0].Min:=0;
ASalary[0].Max:=10000;
ASalary[0].count:=0;
ASalary[0].Title:='低收入';
ASalary[1].Min:=10000;
ASalary[1].Max:=20000;
ASalary[1].count:=0;
ASalary[1].Title:='中低收入';
ASalary[2].Min:=20000;
ASalary[2].Max:=30000;
ASalary[2].count:=0;
ASalary[2].Title:='中收入';
ASalary[3].Min:=30000;
ASalary[3].Max:=40000;
ASalary[3].count:=0;
ASalary[3].Title:='中高收入';
ASalary[4].Min:=40000;
ASalary[4].Max:=100000;
ASalary[4].count:=0;
ASalary[4].Title:='高收入';
//初始化3个资历段
AZili[0].Min:=strtodatetime('1992-1-1');
AZili[0].Max:=date;
AZili[0].count:=0;
Azili[0].Title:='资历较浅';
AZili[1].Min:=strtodatetime('1990-1-1');
AZili[1].Max:=strtodatetime('1992-1-1');
AZili[1].count:=0;
Azili[1].Title:='资历一般';
AZili[2].Min:=strtodatetime('1980-1-1');
AZili[2].Max:=strtodatetime('1990-1-1');
AZili[2].count:=0;
Azili[2].Title:='资历较深';
end;
//选择薪酬分布图的图表样式
procedure TForm1.RadioGroup1Click(Sender: TObject);
var
i:integer;
begin
//先将各个区间段的数目清零
for i:=0 to 4 do
begin
ASalary[i].count:=0;
end;
//判断选择的是哪种样式
case RadioGroup1.ItemIndex of
0:
begin
//选择直方图
ShowBar(1);
end;
1:
begin
//选择折线图
ShowLine(1);
end;
2:
begin
//选择饼图
ShowPie(1);
end;
end;
end;
//选择工作资历分布图的图表样式
procedure TForm1.RadioGroup2Click(Sender: TObject);
var
i:integer;
begin
//先将各个区间段的数目清零
for i:=0 to 2 do
begin
AZili[i].count:=0;
end;
//判断选择的是哪种样式
case RadioGroup2.ItemIndex of
0:
begin
//选择直方图
ShowBar(2);
end;
1:
begin
//选择折线图
ShowLine(2);
end;
2:
begin
//选择饼图
ShowPie(2);
end;
end;
end;
//显示直方图
procedure TForm1.ShowBar(index: integer);
var
salary:single;
hiredate:Tdatetime;
i:integer;
begin
//判断当前操作的是哪个图
case index of
1:
//当前为薪酬分布图
begin
DM.table1.First;
while not DM.table1.Eof do
begin
//取得当前雇员的薪酬数
salary:=DM.table1.fieldbyname('salary').AsFloat;
//统计各薪酬段的数目
for i:=0 to 4 do
begin
if (Salary>=ASalary[i].Min) and (Salary<ASalary[i].Max) then
ASalary[i].count:=ASalary[i].count+1;
end;
DM.table1.Next;
end;
//显示直方图
DBChart1.Series[0].Clear;
DBChart1.Series[1].Clear;
DBChart1.Series[2].Clear;
for i:=1 to 5 do
begin
//为直方图添加五个数据点
DBChart1.Series[0].AddXY(i,ASalary[i-1].count,ASalary[i-1].Title,);
end;
DBChart1.Series[0].Active:=True;
DBChart1.Series[1].Active:=False;
DBChart1.Series[2].Active:=False;
end;
2:
//当前为工作资历分布图
begin
DM.table1.First;
while not DM.table1.Eof do
begin
//取得当前雇员的签约日期
hiredate:=DM.table1.fieldbyname('hiredate').AsDateTime;
//统计各资历段的数目
for i:=0 to 2 do
begin
if (hiredate>=AZili[i].Min) and (hiredate<AZili[i].Max) then
AZili[i].count:=AZili[i].count+1;
end;
DM.table1.Next;
end;
//显示直方图
DBChart2.Series[0].Clear;
DBChart2.Series[1].Clear;
DBChart2.Series[2].Clear;
for i:=1 to 3 do
begin
//为直方图添加三个数据点
DBChart2.Series[0].AddXY(i,AZili[i-1].count,AZili[i-1].Title,);
end;
DBChart2.Series[0].Active:=True;
DBChart2.Series[1].Active:=False;
DBChart2.Series[2].Active:=False;
end;
end;
end;
//显示折线图
procedure TForm1.ShowLine(index: integer);
var
salary:single;
hiredate:Tdatetime;
i:integer;
begin
case index of
1:
begin
DM.table1.First;
while not DM.table1.Eof do
begin
salary:=DM.table1.fieldbyname('salary').AsFloat;
for i:=0 to 4 do
begin
if (Salary>=ASalary[i].Min) and (Salary<ASalary[i].Max) then
ASalary[i].count:=ASalary[i].count+1;
end;
DM.table1.Next;
end;
DBChart1.Series[0].Clear;
DBChart1.Series[1].Clear;
DBChart1.Series[2].Clear;
for i:=1 to 5 do
begin
DBChart1.Series[1].AddXY(i,ASalary[i-1].count,ASalary[i-1].Title,);
end;
DBChart1.Series[1].Active:=True;
DBChart1.Series[0].Active:=False;
DBChart1.Series[2].Active:=False;
end;
2:
begin
DM.table1.First;
while not DM.table1.Eof do
begin
hiredate:=DM.table1.fieldbyname('hiredate').AsDateTime;
for i:=0 to 2 do
begin
if (hiredate>=AZili[i].Min) and (hiredate<AZili[i].Max) then
AZili[i].count:=AZili[i].count+1;
end;
DM.table1.Next;
end;
DBChart2.Series[0].Clear;
DBChart2.Series[1].Clear;
DBChart2.Series[2].Clear;
for i:=1 to 3 do
begin
DBChart2.Series[1].AddXY(i,AZili[i-1].count,AZili[i-1].Title,);
end;
DBChart2.Series[1].Active:=True;
DBChart2.Series[0].Active:=False;
DBChart2.Series[2].Active:=False;
end;
end;
end;
//显示饼图
procedure TForm1.ShowPie(index: integer);
var
salary:single;
hiredate:Tdatetime;
i:integer;
begin
case index of
1:
begin
DM.table1.First;
while not DM.table1.Eof do
begin
salary:=DM.table1.fieldbyname('salary').AsFloat;
for i:=0 to 4 do
begin
if (Salary>=ASalary[i].Min) and (Salary<ASalary[i].Max) then
ASalary[i].count:=ASalary[i].count+1;
end;
DM.table1.Next;
end;
DBChart1.Series[0].Clear;
DBChart1.Series[1].Clear;
DBChart1.Series[2].Clear;
for i:=1 to 5 do
begin
DBChart1.Series[2].AddXY(i,ASalary[i-1].count,ASalary[i-1].Title,);
end;
DBChart1.Series[2].Active:=True;
DBChart1.Series[0].Active:=False;
DBChart1.Series[1].Active:=False;
end;
2:
begin
DM.table1.First;
while not DM.table1.Eof do
begin
hiredate:=DM.table1.fieldbyname('hiredate').AsDateTime;
for i:=0 to 2 do
begin
if (hiredate>=AZili[i].Min) and (hiredate<AZili[i].Max) then
AZili[i].count:=AZili[i].count+1;
end;
DM.table1.Next;
end;
DBChart2.Series[0].Clear;
DBChart2.Series[1].Clear;
DBChart2.Series[2].Clear;
for i:=1 to 3 do
begin
DBChart2.Series[2].AddXY(i,AZili[i-1].count,AZili[i-1].Title,);
end;
DBChart2.Series[2].Active:=True;
DBChart2.Series[0].Active:=False;
DBChart2.Series[1].Active:=False;
end;
end;
end;
procedure TForm1.PageControl1Change(Sender: TObject);
var
i:integer;
begin
//判断当前操作的是哪个页面
case PageControl1.ActivePageIndex of
0:
;
1:
begin
//如果是薪酬分布图页面,则先将薪酬段数目清零
for i:=0 to 2 do
begin
ASalary[i].count:=0;
end;
//默认显示直方图
RadioGroup1.ItemIndex:=0;
ShowBar(1);
end;
2:
begin
//如果是工作资历分布图页面,则先将工作资历段数目清零
for i:=0 to 2 do
begin
AZili[i].count:=0;
end;
//默认显示直方图
RadioGroup2.ItemIndex:=0;
ShowBar(2);
end;
end;
end;
//3D
procedure TForm1.N3D1Click(Sender: TObject);
begin
case PageControl1.ActivePageIndex of
1:
//立体显示薪酬分布图表
DBChart1.View3D:=not DBChart1.View3D;
2:
//立体显示工作资历分布图表
DBChart2.View3D:=not DBChart2.View3D;
end;
end;
//旋转
procedure TForm1.N1Click(Sender: TObject);
begin
//若当前为饼图,则启动定时器,使图表转动
if (DBChart1.Series[2].Active) or (DBChart2.Series[2].Active) then
Timer1.Enabled:=not Timer1.Enabled;
end;
//响应定时器事件
procedure TForm1.Timer1Timer(Sender: TObject);
begin
case PageControl1.ActivePageIndex of
1:
//转动薪酬分布饼图
(DBChart1.Series[2] as TPieSeries).Rotate(10);
2:
//转动工作资历分布饼图
(DBChart2.Series[2] as TPieSeries).Rotate(10)
end;
end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
//若当前图表不是饼图,则"旋转"功能子菜单不能用
case PageControl1.ActivePageIndex of
1:
begin
if DBChart1.Series[2].Active then
N1.Enabled:=True
else
N1.Enabled:=False;
end;
2:
begin
if DBChart2.Series[2].Active then
N1.Enabled:=True
else
N1.Enabled:=False;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -