简单的职工管理系统.docx
- 文档编号:12284495
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:15
- 大小:16.87KB
简单的职工管理系统.docx
《简单的职工管理系统.docx》由会员分享,可在线阅读,更多相关《简单的职工管理系统.docx(15页珍藏版)》请在冰豆网上搜索。
简单的职工管理系统
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
structEmployee
{//声明职工的结构作为链表节点。
//-----数据域-----
stringm_Code;
stringm_Name;
unsignedshortintm_Year;
stringm_Sex;
stringm_Post;
stringm_Department;
unsignedintm_Wage;
//链表节点的指针域---
structEmployee*Next;
};
//-----个人习惯:
取别名-------
typedefstructEmployeeNode;
typedefNode*Link;
//-------函数声明-------------
LinkCreate(LinkHead);
voidRelease(LinkHead);
LinkAdd(LinkHead);
boolSearch(LinkHead);
LinkSearch_Unique(LinkHead);
voidDisplay_List(LinkHead);
voidDisplay_Node(LinkpNode);
LinkModify(LinkHead);
LinkDel(LinkHead);
voidSave_ByFile(LinkHead,fstream&ofile);
LinkSort(LinkHead);
//-------函数实现--------------------------
LinkCreate(LinkHead)
{//创建一个带头节点的空链表。
Head=(Link)newNode;
if(!
Head)
{
cout<<"分配内存失败!
"< returnNULL; } 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; returnHead; } voidRelease(LinkHead) {//释放链表。 Linkptr;//声明一个操作用的指针。 while(Head! =NULL) { ptr=Head; Head=Head->Next; deleteptr;//释放节点资源。 } } LinkAdd(LinkHead) {//前插法添加数据。 LinkpNew;//声明一个新节点。 charagain; stringcode,name,sex,post,department; unsignedshortintyear; unsignedintwage; do { pNew=(Link)newNode; //数据域。 cout<<"请输入职工代码: "; cin>>code; cout< "; cin>>name; cout< "; cin>>year; while(cin.fail()) { cout<<"请输入正确的年份格式。 "< cin.clear(); fflush(stdin); cin>>year; } cout< "; cin>>sex; cout< "; cin>>post; cout< "; cin>>department; cout< "; cin>>wage; while(cin.fail()) { cout<<"请输入正确的工资数据。 "< cin.clear(); fflush(stdin); cin>>wage; } cout< 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)"< cin>>again; }while(again=='Y'||again=='y'); returnHead; } boolSearch(LinkHead) {//查询同时满足“姓名”和“部门”的职工信息。 Linkptr; stringdepartment; stringname; ptr=Head->Next; cout<<"请输入部门: "; cin>>department; cout< "; cin>>name; cout< while(ptr) { if((ptr->m_Name==name)&&(ptr->m_Department==department)) { Display_Node(ptr);//打印满足条件的节点。 returntrue; } ptr=ptr->Next;//查询下一节点。 } cout<<"无此职工的信息。 "< returnfalse; } LinkSearch_Unique_Front(LinkHead) {//查询满足“职工代码“的职工信息(职工代码必需唯一)。 Linkptr; stringcode; ptr=Head; cout<<"请输入职工代码: "; cin>>code; cout< while(ptr->Next) { if(ptr->Next->m_Code==code) //Display_Node(ptr);//打印满足条件的节点。 returnptr;//注意,是返回的查询到的节点的直接前趋节点。 ptr->Next=ptr->Next->Next;//查询下一节点。 } returnptr; } voidDisplay_List(LinkHead) { Linkptr; ptr=Head->Next; cout<<"==================所有职工信息=================="< while(ptr) { Display_Node(ptr); ptr=ptr->Next; } } voidDisplay_Node(LinkpNode) {//在标准输出设备上输出。 cout< < < < < < < } LinkModify(LinkHead) {//修改单一个节点。 Linkptr; ptr=Search_Unique_Front(Head); stringcode,name,sex,post,department; unsignedshortintyear; unsignedintwage; if(ptr->Next) { cout<<"-------你现在可以修改此职工的信息了-------"< //数据域。 cout<<"请输入职工代码: "; cin>>code; cout< "; cin>>name; cout< "; cin>>year; while(cin.fail()) { cout<<"请输入正确的年份格式。 "< cin.clear(); fflush(stdin); cin>>year; } cout< "; cin>>sex; cout< "; cin>>post; cout< "; cin>>department; cout< "; cin>>wage; while(cin.fail()) { cout<<"请输入正确的工资数据。 "< cin.clear(); fflush(stdin); cin>>wage; } cout< 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<<"没找到此职工的记录,无法修改。 "< returnHead; } LinkDel(LinkHead) { Linkptr; Linkptr_front; ptr_front=Search_Unique_Front(Head); ptr=ptr_front->Next; if(ptr) { ptr_front->Next=ptr->Next; deleteptr;//删除此节点。 } cout<<"没找到此职工的记录,无法删除。 "< returnHead; } voidSave_ByFile(LinkHead,fstream&ofile) { LinkpNode; pNode=Head->Next; ofile.clear();//清除文件结束状态。 while(pNode) { ofile< < < < < < < pNode=pNode->Next; } cout<<"数据文件保存成功! "< } LinkSort(LinkHead) {//我创建的是带头节点的链表。 用直接插入法。 if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。 { cout<<"数据节点数少于2个,不用排序! "< returnHead; } //-----------第二步; Linkptr; Linkptr_F; Linkptr_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_Wage>ptr_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<<"从高到低,排序成功! "< returnHead; } intmain() { LinkHead=0; Head=Create(Head); fstreamiofile; iofile.open("d: \\iofile.txt",ios_base: : in|ios_base: : out|ios_base: : app);//文件以三种方式打开。 if(! iofile) { cout<<"打开文件失败! "< return-1; } intmenu; while (1) { cout<<"*****************************************************"< cout<<"*====================菜单选顶=======================*"< cout<<"*===================================================*"< cout<<"*1.注册职工2.修改信息3.删除信息4.信息查询*"< cout<<"*5.保存文件6.工资排行7.信息显示0.退出系统*"< cout<<"*****************************************************"< cout< "; cin>>menu; while(cin.fail()) { cout<<"请选择正确的菜单选项。 "< cin.clear(); fflush(stdin); cin>>menu; } switch(menu) { case0: cout<<"成功退出系统! "< return0; case1: Head=Add(Head); break; case2: Head=Modify(Head); break; case3: Head=Del(Head); break; case4: Search(Head); break; case5: Save_ByFile(Head,iofile); break; case6: Sort(Head); break; case7: Display_List(Head); break; default: cout<<"请选择正确的菜单项进行操作。 多谢合作! "< } } Release(Head); iofile.close(); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 职工 管理 系统