相关文章推荐:
1、 C语言学生成绩管理系统源代码 ★★★★★
2、 C语言学籍管理系统源代码 ★★
3、C语言学生成绩管理系统设计 《C语言程序设计》实训报告 ★★★
4、C语言学生信息管理系统源代码 ★★★★
扫描上方二维码,回复 999 直接获取作者之前收藏的学习资源,谢谢网友们的分享。
更多管理系统更新中,请注意关注!
大学实训课学习到的一段源代码,职工信息管理系统 c++项目源代码。
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <memory.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
class employee
{
public:
string m_Code;
string m_Name;
unsigned short int m_Year;
string m_Sex;
string m_Post;
string m_Department;
unsigned int m_Wage;
//链表节点的指针域---
employee* Next;
public:
employee* Create(employee* Head);
void Rel(employee* Head);
employee* Add(employee* Head);
bool Search(employee* Head);
employee* Search_Unique_Front(employee* Head);
void Display_List(employee* Head);
void Display_Node(employee* pNode);
employee* Modify(employee* Head);
employee* Del(employee* Head);
void Save_ByFile(employee* Head,fstream& ofile);
employee* Sort(employee* Head);
};
employee* employee::Create(employee* Head)
{//创建一个带头节点的空链表。
Head=new employee;
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 employee::Rel(employee* Head)
{//释放链表。
employee* ptr;//声明一个操作用的指针。
while(Head!=NULL)
{
ptr=Head;
Head=Head->Next;
delete ptr;//释放节点资源。
}
}
employee* employee::Add(employee* Head)
{//前插法添加数据。
employee* pNew;// 声明一个新节点。
char again;
string code,name,sex,post,department;
unsigned short int year;
unsigned int wage;
do
{
pNew=new employee;
//数据域。
cout<<"请输入职工代码:";
cin>>code;
cout<<endl<<"请输入职工姓名:";
cin>>name;
cout<<endl<<"请输入职工出生年份:";
cin>>year;
while(cin.fail())
{
cout<<"请输入正确的年份格式。"<<endl;
cin.clear();
fflush(stdin);
cin>>year;
}
cout<<endl<<"请输入职工性别:";
cin>>sex;
cout<<endl<<"请输入职工职称:";
cin>>post;
cout<<endl<<"请输入职工部门:";
cin>>department;
cout<<endl<<"请输入职工工资:";
cin>>wage;
while(cin.fail())
{
cout<<"请输入正确的工资数据。"<<endl;
cin.clear();
fflush(stdin);
cin>>wage;
}
cout<<endl;
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;
cin>>again;
}while(again=='Y'||again=='y');
return Head;
}
bool employee::Search(employee* Head)
{//查询同时满足“姓名”和“部门”的职工信息。
employee* ptr;
string department;
string name;
ptr=Head->Next;
cout<<"请输入部门:";
cin>>department;
cout<<endl<<"请输入姓名:";
cin>>name;
cout<<endl<<"----------------查询结果------------------"<<endl;
while(ptr)
{
if((ptr->m_Name==name)&&(ptr->m_Department==department))
{
Display_Node(ptr);//打印满足条件的节点。
return true;
}
ptr=ptr->Next;//查询下一节点。
}
cout<<"无此职工的信息。"<<endl;
return false;
}
employee* employee::Search_Unique_Front(employee* Head)
{
employee* ptr;
string code;
ptr= Head->Next;
cout<<"请输入职工代码:";
cin>>code;
cout<<endl<<"----------------查询结果------------------"<<endl;
while(ptr)
{
if(ptr->m_Code==code)
return ptr;
ptr=ptr->Next;
}
return ptr;
}
void employee::Display_List(employee* Head)
{
employee* ptr;
ptr=Head->Next;
cout<<"==================所有职工信息=================="<<endl;
while(ptr)
{
Display_Node(ptr);
ptr=ptr->Next;
}
}
void employee::Display_Node(employee* pNode)
{//在标准输出设备上输出。
cout<<setw(10)<<left<<pNode->m_Code
<<setw(10)<<left<<pNode->m_Name
<<setw(10)<<left<<pNode->m_Year
<<setw(10)<<left<<pNode->m_Sex
<<setw(10)<<left<<pNode->m_Post
<<setw(10)<<left<<pNode->m_Department
<<setw(10)<<left<<pNode->m_Wage<<endl;//setw(10)表示占10个字符位置。
}
employee* employee::Modify(employee* Head)
{// 修改单一个节点。
employee* ptr;
ptr=Search_Unique_Front(Head);
string code,name,sex,post,department;
unsigned short int year;
unsigned int wage;
if(ptr)
{
cout<<"-------你现在可以修改此职工的信息了-------"<<endl;
//数据域。
cout<<"请输入职工代码:";
cin>>code;
cout<<endl<<"请输入职工姓名:";
cin>>name;
cout<<endl<<"请输入职工出生年份:";
cin>>year;
while(cin.fail())
{
cout<<"请输入正确的年份格式。"<<endl;
cin.clear();
fflush(stdin);
cin>>year;
}
cout<<endl<<"请输入职工性别:";
cin>>sex;
cout<<endl<<"请输入职工职称:";
cin>>post;
cout<<endl<<"请输入职工部门:";
cin>>department;
cout<<endl<<"请输入职工工资:";
cin>>wage;
while(cin.fail())
{
cout<<"请输入正确的工资数据。"<<endl;
cin.clear();
fflush(stdin);
cin>>wage;
}
cout<<endl;
ptr->m_Code=code;
ptr->m_Name=name;
ptr->m_Year=year;
ptr->m_Sex=sex;
ptr->m_Post=post;
ptr->m_Department=department;
ptr->m_Wage=wage;
}
else
{
cout<<"没找到此职工的记录,无法修改。"<<endl;
}
return Head;
}
employee* employee::Del(employee* Head)
{
string code;
employee* parentptr;
employee* ptr_front;
//ptr_front=Search_Unique_Front(Head);
cout<<"请输入职工代码:";
cin>>code;
parentptr= Head;
ptr_front = Head->Next;
while(ptr_front)
{
if(ptr_front->m_Code==code)
{
parentptr->Next = ptr_front->Next;
delete ptr_front;
return Head;
}
parentptr = ptr_front;
ptr_front = ptr_front->Next;
}
return Head;
}
void employee::Save_ByFile(employee* Head,fstream& ofile)
{
employee* pNode;
pNode=Head->Next;
ofile.clear();//清除文件结束状态。
while(pNode)
{
ofile<<setw(10)<<left<<pNode->m_Code
<<setw(10)<<left<<pNode->m_Name
<<setw(10)<<left<<pNode->m_Year
<<setw(10)<<left<<pNode->m_Sex
<<setw(10)<<left<<pNode->m_Post
<<setw(10)<<left<<pNode->m_Department
<<setw(10)<<left<<pNode->m_Wage<<endl;//setw(10)表示占10个字符位置。
pNode=pNode->Next;
}
cout<<"数据文件保存成功!"<<endl;
}
employee* employee::Sort(employee* Head)
{//我创建的是带头节点的链表。用直接插入法。
if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。
{
cout<<"数据节点数少于2个,不用排序!"<<endl;
return Head;
}
//-----------第二步;
employee* ptr;
employee* ptr_F;
employee* 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_Wage>ptr_F->Next->m_Wage)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;
break;
}
else
{
ptr_F=ptr_F->Next;
}
}
if(ptr_F->Next==NULL)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;//表示插到有序链表的最后面了。
}
ptr=ptr_N;//归位,准备下一次排序。
}
cout<<"从高到低,排序成功!"<<endl;
return Head;
}
int main()
{
employee* st = new employee();
st=st->Create(st);
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;
cout<<"*****************************************************"<<endl;
cout<<endl<<"请选择相应操作菜单项:";
cin>>menu;
while(cin.fail())
{
cout<<"请选择正确的菜单选项。"<<endl;
cin.clear();
fflush(stdin);
cin>>menu;
}
switch(menu)
{
case 0:
cout<<"成功退出系统!"<<endl;
return 0;
case 1:
st=st->Add(st);
break;
case 2:
st=st->Modify(st);
break;
case 3:
st=st->Del(st);
break;
case 4:
st->Search(st);
break;
case 5:
st->Save_ByFile(st,iofile);
break;
case 6:
st->Sort(st);
break;
case 7:
st->Display_List(st);
break;
default:
cout<<"请选择正确的菜单项进行操作。多谢合作!"<<endl;
}
}
st->Rel(st);
iofile.close();
return 0;
}
也希望能帮到正在做实训报告的你,欢迎留言区讨论。
分享:C语言学生成绩管理系统设计 《C语言程序设计》实训报告
扫描下方公众号,发送 成绩系统 4个字,获取下载实训源码。
感谢关注,共同进步!
今天的文章职工信息管理系统C++代码分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30691.html