公司人事管理系统
来源:互联网 发布:多益网络上市失败 编辑:程序博客网 时间:2024/06/10 11:24
1. 要求利用C++语言面向对象的编程思想来完成系统的设计;
2. 突出C++语言的类和对象的特征,以多个类实现对每一个子功能的封装;
3. 进行简单界面设计,能够实现友好的交互;
4. 具有清晰的程序流程图和类的详细定义;
5. 熟练掌握C++语言对文件的各种操作。
创新要求:
在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同
课程设计具体实现步骤分析及源代码:
目录:
一、选题的目的意义
二、使用技术
三、可行性的研究
四、需求分析
五、总体设计
六、详细分析(代码及调试)
1、把信息录入
2、查找公司人员你(按照姓名)
3、(老板)修改公司的人员-提职/降职
4、添加公司新成员
5、消去公司辞职人员
6、把员工信息从变量中取出
7、把员工的信息写进文件
8、把员工信息在屏幕上显示
9、退出公司人事管理系统
一、选题的目的意义
本题材适用于公司的人事部管理层次人员的使用,在工作时可以使用本系统轻松便捷地运行,顺利运行和维护系统,轻轻松松有条理的管理公司所有人员的详细信息
二、使用技术
利用c++面向对象的思想来完成此次课程设计的设计理念,突出了c++语言实现了类和对象的特征,以类来封装隐藏数据信息,使用c++同样实现了界面的简单设计,分别给老板和普通用户设计不同界面
三、可行性的研究
1、经济可行:本系统在开发时,使用的是免费工具Vistual C++6.0 ,它操作简单,可操作性强,并且此系统便于广大的公司人事部管理所用,由此可见它在经济上是可行的
2、技术可行性:只需掌握了C/C++的基础知识,要完成本系统并不是一件很难的事,可以随意按照自己的意愿随意设计更先进的理念,甚至可以设计美观的用户界面,由此可见,它在技术上也是简单可行的
四、需求分析
(1)在采集信息时,给每个公司人员设置一个编号,每添加一个员工信息系统自动给每个员工编一个编号,使用InputData()函数是实现
(2)功能公司的老板有权提升某个员工的职位,也可以给某个员工降职,使用Modify()函数实现
(3)系统要实现给每个员工的,根据不同的级别,给每个员工发放不同层次的薪水,使用DataSwage()函数实现
(4)在系统中实现,显示、查找、增加、删除、修改和保存不同类型的员工信息,分别使用ShowData()函数、FindName()函数、AddStaff()函数、DeleteData()函数、Modify()函数、WriteFile()函数
五、总体设计
此处省略...
六、详细分析(代码及调试)
1、主要界面显示:
在此处,如果你是超级管理员(老板),你可以进入老板管理界面
现在你可以使用不同的功能,对员工进行管理。。。
若是进入普通用户界面:
2、各部分函数
(1)采集信息的InputData()函数
(2)查询(按照姓名)---FindName()
(3)修改---Modify()函数
下面是修改员工信息部分运行截图:
(4)添加----AddStaff()函数
(5)删除---DeleteData()函数
(6)显示----ShowData()函数
(7)写入文件---WriteFile()函数
3、代码调试(主要错误):
(1)在InputData()函数中,在开辟动态空间时,使用new 申请
(2)在FindName()函数中,要使用goto函数控制函数的循环,还有在循环查找时,使用的while循环应该有不同的条件我开始使用的是while(p1->G_Number!=number && p1->G_Number!=NULL),但实际上这句并不是出错了,只是使用方法在下文与此句不符合,此错误在Modify()函数、DeleteData()函数、AddStaff()函数中都有体现
(3)在文件部分,使用不同的打开方式,会有不同的结果,在此处是使用循环,要多次写入,如果使用默认方式就会覆盖上次写入的文件信息,所以要以追加形式写入文件,这样就不会发生覆盖的情况了
4、总结体会:
通过此次的课程设计,我更熟知了,本学期学习的内容,我更深刻认识到了需求分析在整个过程的重要性,没有做好需求分析就会遗漏或者容易出现错误,问题发现的越晚,所付出的代价就越大。同时,在开发此系统时,可能会遇到难以预料的问题,这时就需要上网查找相关的知识点,重新温习、查缺补漏,也可以从书上重温经典理论应用于实践操作部分,还可以问同学,也许他们不会给你什么特别帮助,但是你可以从中得到启示,这样也会提升个人实际操作的能力,通过不断地努力,不断反思,你就会得到很不一般地体验,得到提升,去寻找更多地解决方案。
在开发系统完成后,已经能够实现功能描述,也实现了创新,开发了使用密码进入系统的超级管理员,一般的普通用户,可以直接输入No进入普通用户界面,也可以通过三次输入密码错误,直接进入普通用户界面,但是由于个人能力有限,系统做的不是完善,请老师原谅,我一定课下在做改进,争取达到完美的阶段。
5、程序源码:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
//姓名、编号、级别、当月薪水
//定义全局变量(Count计算建立节点数、No动态生成员工编号、
// No_Number记录当前节点创建的员工编号)
int Count=0;
static int No=13156200,No_Number;
//********************************************************************
//********************************************************************
//定义一个类Person(作为基类)
class Person
{
public:
Person()
{
}
//friend class PersonList;//友元类 此处使用类中友元函数也可以实现,但会泄露数据
//protected:
public:
string P_Name; //员工姓名
int P_No; //员工编号
int n; //选择员工薪水选项值
string P_Lever; //员工级别
double P_Sage; //员工薪水
Person *next; //指向连接员工信息的下一个指针
};
//********************************************************************
//********************************************************************
//定义一个类PersonList,继承Person
class PersonList:public Person
{
public:
int DataSwage(int m); //计算不同级别的员工薪水
void OutChoice(); //输出选择员工薪水列表
void LookInputData(); //调用创建验工信息的函数InputData()
string FindName(); //按照员工姓名查员工详细信息
void Modify(); //修改员工信息(如:老板员工提升/降职)
void AddStaff(); //添加员工信息(新增员工信息)
void DeleteData(); //删除员工信息
void ShowData(); //展示员工信息(在屏幕上显示)
int ReadFile(); //把员工信息读取出来放到指定变量里
int WriteFile(); //把员工信息写进文件并保存
private:
Person InputData(); //内嵌员工的创建信息
Person *head,*p1,*p2,*p; //创建员工信息所需的指针变量
};
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//计算员工的不同级别的薪水
int PersonList::DataSwage(int m)
{
switch(m) //switch语句选择不同类型员工工资
{
case 1:
{
cout<<"\n\n\t技术经理 的工资。。。\n\n";
p1->P_Sage=5000;
return p1->P_Sage;
};break;
case 2:
{
int DAIMA; //定义编写的代码多少行?
cout<<"\n\n\t技术人员 的工资。。。\n\n";
cout<<"请输入该技术人员写了多少行代码: ";
cin>>DAIMA;
p1->P_Sage=1000*DAIMA;
return p1->P_Sage;
};break;
case 3:
{
int Sales,Object_Money;//销售额(Sales)、项目额(Object_Money)
cout<<"\n\n\t业务人员 的工资。。。\n\n";
cout<<"请输入当月业务员销售额:";
cin>>Sales;
cout<<"请输入业务员承接项目额:";
cin>>Object_Money;
p1->P_Sage=0.15*Sales+0.1*Object_Money;
return p1->P_Sage;
};break;
case 4:
{
cout<<"\n\n\t业务经理 的工资。。。\n\n";
p1->P_Sage=2000+DataSwage(3);
return p1->P_Sage;
};break;
case 5:
{
cout<<"\n\n\t财务人员 的工资。。。\n\n";
p1->P_Sage=2000;
return p1->P_Sage;
};break;
case 6:
{
cout<<"\n\n\t文秘 的工资。。。\n\n";
p1->P_Sage=1500;
return p1->P_Sage;
};break;
}
return 0;
}
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//选择员工不同级别薪水列表展示
void PersonList::OutChoice()
{
cout<<"\n\n\t1、技术经理 的月薪\n\n";
cout<<"\t2、技术人员 的月薪\n\n";
cout<<"\t3、业务人员 的月薪\n\n";
cout<<"\t4、业务经理 的月薪\n\n";
cout<<"\t5、财务人员 的月薪\n\n";
cout<<"\t6、文秘 的月薪\n\n";
}
void PersonList::LookInputData()//调用创建员工信息的类外(Person_List)实现
{
InputData();
}
//卐卐卐卐卐卐卐卐卐卐卐卐※※※※※※※※※※※※※★★★★★★★★
//卐卐卐卐卐卐卐卐卐卐卐卐※※※※※※※※※※※※※★★★★★★★★
//创建员工信息列表(采集员工信息)
Person PersonList::InputData()
{
system("cls");
p1=p2=new Person; //开辟员工信息内存大小
cout<<"\n\t请输入第 "<<1<<" 个人员的信息...\n\n";
cout<<"员工姓名: ";
cin>>p1->P_Name;
cout<<"员工级别: ";
cin>>p1->P_Lever;
cout<<"请输入不同的数字选择薪水:\n";
OutChoice(); //调用展示列表
cout<<"请输入 n 的值:";
cin>>p1->n; //选择薪水
DataSwage(p1->n); //调用薪水计算函数DataSwage()
system("cls");
cout<<"\n\t\t\t你是否要重复此项操作?\n";
cout<<"\n若不继续,请把货物各项信息设为 0 \n\n";
system("pause"); //系统函数
head=NULL; //确保节点从 0 开始创建
p1->P_No=No; //员工编号的动态生成
while(p1->n!=0) //根据员工的编号确定是否继续进行采集信息
{
Count++; //记录节点个数
if(Count==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=new Person; //再次开辟空间采集信息
cout<<"\n\t请输入第 "<<Count+1<<" 个人员的信息...\n\n";
cout<<"员工姓名: ";
cin>>p1->P_Name;
cout<<"员工级别: ";
cin>>p1->P_Lever;
cout<<"请输入不同的数字选择薪水:\n";
OutChoice();
cout<<"请输入 n 的值:";
cin>>p1->n;
DataSwage(p1->n);
WriteFile();
system("pause");
No_Number=No;
No++;
p1->P_No=No;
system("cls");
if(p1->n!=0)
{
cout<<"\n\t\t\t你是否要重复此项操作?\n";
cout<<"\n若不继续,请把货物各项信息设为 0 \n";
}
if(p1->n==0)
{
cout<<"\n\t你已经完成信息采集输入操作!\n\n";
}
system("pause");
}
p1->next=NULL;
return *head;
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//查询员工信息
string PersonList::FindName()
{
char ch;
string Name;
system("cls"); //系统清屏函数
do
{
loop: //goto函数的实现
int I=0;
cout<<"\n\t请输入你要查找的姓名:";
cin>>Name;
//loop:
p1=head;
//while(p1->G_Number!=number && p1->G_Number!=NULL)第一次犯的错误
while(p1!=NULL)
{
if(p1->P_Name==Name) //比较名字是否相同
{
cout<<endl;
cout<<"\t员工姓名: "<<p1->P_Name<<endl<<endl;
cout<<"\t员工编号: "<<p1->P_No<<endl<<endl;
cout<<"\t员工级别: "<<p1->P_Lever<<endl<<endl;
cout<<"\t员工月薪: "<<p1->P_Sage<<endl<<endl;
cout<<"\n\n你好!系统已完成你发送的命令操作...\n\n";
system("pause"); //系统函数
return p1->P_Name; //返回名字,提供下个函数使用
break; //跳出while循环
}
I++;
p1=p1->next;
if(I==Count) //判断是否能找到员工的信息
{
system("cls");
cout<<"\n\n抱歉,系统没有你要查找的员工信息...\n\n";
//cout<<"\n\t\t你还有一次机会...\n\n";
//cout<<"\n\t请输入你要查找的姓名:";
//cin>>Name;
goto loop; //循环控制条件
//return Name;
}
}
cout<<"\n\t你已经成功执行该操作...\n\n";
cout<<"你是否继续执行该操作?是(输入Y/y),否(输入N/n):";
cin>>ch;
} while (ch!='N' && ch!='n');
return p1->P_Name;
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//修改员工信息函数
void PersonList::Modify()
{
char ch;
system("cls");
do
{
FindName(); //调用查询函数并返回一个再次可以使用的值
system("pause");
cout<<"\n\t\t请输入你要修改的内容...\n";
cout<<"员工姓名: ";
cin>>p1->P_Name;
cout<<"员工级别: ";
cin>>p1->P_Lever;
cout<<"请输入不同的数字选择薪水:\n";
OutChoice();
cout<<"请输入 n 的值:";
cin>>p1->n;
p1->P_Sage=DataSwage(p1->n);
cout<<endl;
system("pause");
cout<<"\n\t你已经成功执行该操作...\n\n";
cout<<"你是否继续执行该操作?是(输入Y/y),否(输入N/n):";
cin>>ch;
} while (ch!='N' && ch!='n');
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//添加员工信息的函数
void PersonList::AddStaff()
{
char ch;
int NUM; //定义了一个查询员工编号的数据
system("cls");
loop: //同上
do
{
cout<<"\n\t\t请你输入编号在 13156200---"<<No_Number<<" 之间的编号。。。\n\n";
cout<<"\n\t请输入你要查找的编号:";
cin>>NUM;
if(NUM < 13156200)
{
cout<<"\n\t你输入的选择不符合要求...\n\n";
goto loop;
}
while(1)
{
if(NUM > 0 && NUM <= No_Number)//判断输入的NUM是否在已存在信息范围里
{
p=new Person; //重新给要添加的信息开辟空间
cout<<"\n\t请输入你要添加的职员详细信息...\n\n";
cout<<"员工姓名: ";
cin>>p->P_Name;
cout<<"员工级别: ";
cin>>p->P_Lever;
cout<<"请输入不同的数字选择薪水:\n";
OutChoice();
cout<<"请输入 n 的值:";
cin>>p->n;
p->P_Sage=DataSwage(p->n);
p->P_No=No++;
WriteFile();
if(p1==NULL)
cout<<"\n\t\t找不到员工信息列表\n\n";
p1=head;
while(p1!=NULL)
{
if(p1->P_No==NUM)
{
p->next=p1->next;
p1->next=p;
Count++;
cout<<"\n\t恭喜你,你已成功添加信息成功!\n\n";
break;
}
p1=p1->next;
}
break;
}
else
{
cout<<"\n\t\t你刚才输入错误...\n\n";
// cin>>NUM;
goto loop;
}
}
cout<<"你是否继续执行该操作?是(输入Y/y),否(输入N/n):";
cin>>ch;
} while (ch!='N' && ch!='n');
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//执行删除辞职员工信息函数-------按照员工编号来查找
void PersonList::DeleteData()
{
char ch;
int NUM;
system("cls");
loop:
do
{
cout<<"\n\t\t请你输入编号在 0---"<<No_Number<<" 之间的编号。。。\n\n";
cout<<"\n\t请输入你要查找的编号:";
cin>>NUM;
if(NUM < 13156200 || NUM > No_Number)
{
system("cls");
cout<<"\n\t你输入的选择不符合要求...\n\n";
goto loop;
}
p1=head;
while(p1->P_No != NUM && p1->next !=NULL) //循环找是否能找到信息
{
p2=p1;
p1=p1->next;
}
if(p1->P_No==NUM)//删除编号为p1->P_No的员工信息
{
if(head=p1)
head=head->next;
else
p2->next=p1->next;
Count--;
cout<<"\n\t你已经成功执行了操作...\n\n";
}
cout<<"你是否继续执行该操作?是(输入Y/y),否(输入N/n):";
cin>>ch;
} while (ch!='N' && ch!='n');
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//编写文件写入函数
int PersonList::WriteFile()
{
system("cls");
Person person;
ofstream out;
out.open("Test.dat",ios::app);//文件以追加形式出现
if(out.fail()) //判断文件是否打开成功!
{
cerr<<"\n\tTest.dat Open Failed!\n\n";//不成功输出此句
return 1;
}
p=head;
for(int i=0;i<Count;i++)//循环写进文件
{
//p=new Person;
out<<p->P_Lever<<endl;
out<<p->P_Name<<endl;
out<<p->P_No<<endl;
out<<p->P_Sage<<endl;
//out<<p<<endl;
p=p->next;
// cout<<"123----------\n\n";
}
cout<<"\n\t你好!恭喜你已经完成执行操作...\n\n";
out.close();
system("pause");
return 0;
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//把信息读出来
int PersonList::ReadFile()
{
system("cls");
ifstream in("Test.dat",ios::app);//文件以追加的形式出现
if(in.fail())
{
cerr<<"\n\tTest.dat Open Failed!\n\n";
system("pause");
return 1;
}
p=head;
for(int i=0;i<Count;i++)//循环读出来并存到变量中
{
p=new Person;
in>>p->P_Lever;
in>>p->P_Name;
in>>p->P_No;
in>>p->P_Sage;
//in>>p;
p=p->next;
cout<<"456------\n\n";
}
in.close();
system("pause");
return 0;
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
//在屏幕上显示采集的信息
void PersonList::ShowData()
{
system("cls");
cout<<"\n\t经上述操作后有 "<<Count<<" 个结点被创建...\n\n";
p1=head;
for(int i=0;i<Count;i++)//循环执行
{
cout<<"\n\t这是第 " <<i+1<<" 个人员的信息...\n\n";
cout<<"员工姓名: "<<p1->P_Name<<endl<<endl;
cout<<"员工编号: "<<p1->P_No<<endl<<endl;
cout<<"员工级别: "<<p1->P_Lever<<endl<<endl;
cout<<"员工月薪: "<<p1->P_Sage<<endl<<endl;
p1=p1->next;
}
system("pause");
}
//¤¤¤¤¤¤¤¤¤¤★★★★★★★★★★★★★★¤¤¤¤¤¤¤¤¤¤¤
//选择菜单1,超级管理员使用(老板)
int EnterFace()
{
system("cls");
int c;
cout<<"\t★★★★★★★★¤¤¤¤¤¤¤¤¤¤¤¤★★★★★★★★★★\n\n";
cout<<"\t 欢迎使用公司人事管理系统 \n";
cout<<"\t …………………………………………………… \n\n";
cout<<"\t◎→ 1---:把信息录入 ←◎"<<endl<<endl;
cout<<"\t◎→ 2---:查找公司人员(按照姓名) ←◎"<<endl<<endl;
cout<<"\t◎→ 3---:(老板)修改公司的人员-提职/降职 ←◎"<<endl<<endl;
cout<<"\t◎→ 4---:添加公司新成员 ←◎"<<endl<<endl;
cout<<"\t◎→ 5---:消去公司辞职人员 ←◎"<<endl<<endl;
cout<<"\t◎→ 6---:把员工信息从变量中取出 ←◎"<<endl<<endl;
cout<<"\t◎→ 7---:把员工的信息写进文件 ←◎"<<endl<<endl;
cout<<"\t◎→ 8---:把员工信息在屏幕上显示 ←◎ \n\n";
cout<<"\t◎→ 9---:退出公司人事管理系统 ←◎\n\n";
cout<<"\t█▉▊▋▌▍‥‥‥请输入你要操作的选项:(1---9):";
cin>>c;
while(c<0 || c>9)
{
cout<<"\n\t\t\t对不起你的操作有误,请再次输入:";
cin>>c;
}
return c;
}
//选择菜单2,适用于普通用户
int EnterFace2()
{
system("cls");
int c;
cout<<"\t◤◤◤◤◤◣◣◣ ¤¤¤¤¤¤¤¤¤¤¤¤ ◢◢◢◥◥◥◥◥\n\n";
cout<<"\t 欢迎使用公司人事管理系统 \n";
cout<<"\t …………………………………………………… \n\n";
cout<<"\t⊙◇ 1---:把信息录入 ⊙◇"<<endl<<endl;
cout<<"\t⊙◇ 2---:查找公司人员(按照姓名) ⊙◇"<<endl<<endl;
cout<<"\t⊙◇ 3---:添加公司新成员 ⊙◇"<<endl<<endl;
cout<<"\t⊙◇ 4---:把员工信息从变量中取出 ⊙◇"<<endl<<endl;
cout<<"\t⊙◇ 5---:把员工的信息写进文件 ⊙◇"<<endl<<endl;
cout<<"\t⊙◇ 6---:把员工信息在屏幕上显示 ⊙◇ \n\n";
cout<<"\t⊙◇ 7---:退出公司人事管理系统 ⊙◇\n\n";
cout<<"\t★★★☆☆☆‥‥‥请输入你要操作的选项:(1---7):";
cin>>c;
while(c<0 || c>7)
{
cout<<"\n\t\t\t对不起你的操作有误,请再次输入:";
cin>>c;
}
return c;
}
//¤¤¤¤¤¤¤¤¤¤★★★★★★★★★★★★★★¤¤¤¤¤¤¤¤¤¤¤
//控制 超级用户 选择调用函数的选择函数
void Case()
{
PersonList t;
for(;;)
switch(EnterFace())
{
case 1:t.LookInputData();break;
case 2:t.FindName();break;
case 3:t.Modify();break;
case 4:t.AddStaff();break;
case 5:t.DeleteData();break;
case 6:t.ReadFile();break;
case 7:t.WriteFile();break;
case 8:t.ShowData();break;
case 9:exit(0);break;
}
}
//控制 普通用户 选择调用函数的选择函数
void Case2()
{
PersonList t;
for(;;)
switch(EnterFace2())
{
case 1:t.LookInputData();break;
case 2:t.FindName();break;
case 3:t.AddStaff();break;
case 4:t.ReadFile();break;
case 5:t.WriteFile();break;
case 6:t.ShowData();break;
case 7:exit(0);break;
}
}
//◎◎◎◎◎◎◎◇◇◇◇◇◎◎◎◎◇◇◇◇◇◇◎◎◎◎◎◇◇◇◇◎◎◎◎
//在主函数中测试以上操作
int main()
{
string KeyWords="GLY",Key,ch; //设置用户密码
int N=0;
//以下是对输入密码的验证与控制
cout<<"\n\t\t你是老板吗?若是请你输入管理员密码\n\n";
cout<<"\n\n\t\t如果不是老板,请输入No\n";
do
{
cout<<"\n\t你是第 "<<N+1<<" 次输入密码:";
cin>>Key;
if(Key=="No")
{
cout<<"\n\n\t你将会进入普通用户模式...\n\n";
system("pause");
Case2();
}
if(Key==KeyWords)
{
cout<<"\n\n\t哇哦!你真的是老板,欢迎进入公司人事管理系统...\n\n";
system("pause");
Case();
//break;
}
N++;
if(N==3)
{
cout<<"\n\n对不起,你已经输入三次错误密码,你不能进入管理员系统...\n\n";
cout<<"\t你将会进入普通用户模式...\n\n";
system("pause");
Case2();
}
cout<<"\n\t你是否尝试再次进入公司人事管理系统?\n\n";
cout<<"若是,请输入 Yes/yes ,否则输入 No/no :";
cin>>ch;
} while (ch!="no" && ch!="No");
return 0;
}
- 公司人事管理系统
- 公司人事管理系统
- 人事管理系统
- 人事管理系统
- 人事管理系统
- 人事管理系统
- 人事管理系统课程设计
- 蓝山人事管理系统
- 企业人事管理系统
- 人事管理系统呀
- 企业人事管理系统
- 人事管理系统 简述
- 企业人事管理系统
- Strust2人事管理系统
- 小型学校人事管理系统
- 出售、定制人事管理系统
- 人事管理系统(数据库课程设计)
- Mini人事管理系统课程设计报告
- CI的日志功能
- oracle CBO 的可传递性
- Torrent文件结构解析
- sun.misc.BASE64Encoder找不到jar包的解决方法
- u-boot编译出现的错误
- 公司人事管理系统
- 机器学习需要的数学基础
- USSD
- Swfit初学
- 获取linux 硬盘的信息,如型号,大小,SN号 等等
- 【JavaSE】网络编程 基础知识
- 多线程概述和常见问题
- 生成扫描文件列表命令
- 创建子进程释放父进程FD