C++语言综合编程案例:简单职工信息管理系统

C++语言综合编程案例:简单职工信息管理系统

采用类(class),文本界面,能在Dev-C++运行。具有如下功能

查看全部职工信息

查看职工信息

添加职工信息

查找职工信息

修改职工信息

删除职工信息

第一次使用,使用“添加职工信息”,可自动创建数据文本文件myworker.txt,

数据样式

职工号  姓名    所属部门        性别    年龄    工资

001     王小强  办公室          男      22      3600

002     张萌    财务            女      23      4500

登录账号admin 密码abc123

源码如下:

#include <iostream>
#include <cstring>
#include <fstream>
#include <vector>
#include <string>
#include <conio.h>
#include "windows.h"
using namespace std;

//职工类
class Workerinfo
{
	private:
		char wno[20];     //职工号
		char wname[20];   //职工姓名
		char cname[20];   //所属部门 
		char sex[4];      //职工性别
		int  age;          //职工年龄
		float  wages;     //职工工资 
	public:
		//构造函数 
		Workerinfo()
		{	}
		Workerinfo(char wno[], char wname[], char cname[], char sex[], int age, float  wages)
		{
			setWno(wno);
			setWname(wname);
			setCname(cname);
			setSex(sex);
			setAge(age);
			setWages(wages);
		}
		void setWno(char wno[])
		{
			strcpy(this->wno,wno);
		}
		void setWname(char wname[])
		{
			strcpy(this->wname,wname);
		}
		void setCname(char cname[])
		{
			strcpy(this->cname,cname);
		}
		void setSex(char sex[])
		{
			strcpy(this->sex,sex);
		}
		void setAge(int age)
		{
			this->age = age;
		}
		void setWages(float wages) 
		{
			this->wages = wages ;
		}
		void show()
		{
			cout <<endl<< "\t" << wno << "\t" << wname << "\t" << cname << "\t\t" << sex << "\t" << age << "\t" << wages << "\n\t";
		}
		char* getWno()
		{
			return this->wno;
		}
};

class  Mycontroller
{
	public :
		void  myshowinfo();    //显示系统信息 
		void  mymenu();       //主菜单
		void  mydatainit();   //初始化数据
		bool  mylogin();     //用户登录
		void  showworkerinfo() ;   //查看全部职工信息	
		void  addworkerinfo() ;    //添加职工信息
		void  myshow(Workerinfo mywork1);   //显示单名职工信息
		bool  mysave(Workerinfo mywork1);   //保存职工信息
		void  searchworkerinfo();          //查找职工信息
		void  updateworkerinfo() ;         //修改职工信息
		bool  rewriteworkerinfo() ;         //重写职工信息
		void  deleteworkerinfo() ;         //删除职工信息
		int CheckNum(int& n);  //判断输入的字符串是否为正整数,若是,则合规返归其值 ,否则给出提示 
};
//显示系统信息
void Mycontroller::myshowinfo()
{
	cout <<endl<<endl<<"                   欢迎使用简单职工信息管理系统                   "<<endl;
}
//程序主菜单 
void Mycontroller::mymenu()
{
	int option=0;
	int count=0;
	myal: system("cls");   //清屏
	myshowinfo() ;   //调用显示系统信息函数 
	cout <<endl<<endl<<"\t                    程序主菜单                   "<<endl;
	cout <<endl<<"\t                    1.查看全部职工信息                      ";
	cout <<endl<<"\t                    2.查找职工信息                      ";
	cout <<endl<<"\t                    3.添加职工信息                      ";
	cout <<endl<<"\t                    4.修改职工信息                      ";
	cout <<endl<<"\t                    5.删除职工信息                      ";
	cout <<endl<<"\t                    6.退出管理系统                      ";
	
	cout <<endl; 
	
	//处理输入非数字 
    int m;
    while (true){
        cout <<"请输入正确的编号(1~6): ";
        option=CheckNum(m);
        if(option>=1 && option<=6) //限制是合规的选项 
        {
       		break;
		}				
	}
	
	switch(option)
	{
		case 1: showworkerinfo(); break;
		case 2: searchworkerinfo(); break;
		case 3: addworkerinfo(); break;
		case 4: updateworkerinfo(); break;
		case 5: deleteworkerinfo(); break;
		case 6: exit(0);break;
	}
	goto myal;
} 

//判断输入的字符串是否为正整数,若是,则合规返归其值 ,否则给出提示 
int Mycontroller::CheckNum(int& n)
{
    int i;
    string x;  //用来接受输入
    bool flag = false;
    while (cin >> x) {
        for (i = 0; i < x.size(); ++i) {
       		 //判断是否为中文
            if (x[i] & 0x80) {
                cout << "\n输入错误,请重新输入正确的数字: ";
                break;
            }
            //判断是否为字母或者其它字符
            if (!isdigit(x[i])) {
                cout << "\n输入错误,请重新输入正确的数字: ";
                break;
            }
        }

        if (i == x.size()) {
            break;   //如果字符串中所有字符都合法,则退出while循环
        }

    }
    n = atoi(x.c_str()); //将仅含数字的string字符串转化为正整数
    return n; //返回值 
}

vector<Workerinfo>  workerinfos;
//初始化数据
void Mycontroller::mydatainit()
{
	fstream file;
	file.open("myworker.txt", ios::in | ios::binary) ;
	if (file.is_open()) 
	{ // 打开成功
		Workerinfo mywork1 ;     //创建职工类对象 
		while(true)
		{
			file.read((char *)&mywork1, sizeof(Workerinfo));
			
			if(!file)
                break;
            workerinfos.push_back(mywork1);
		}
		file.close();
	}
}
//用户登录
bool Mycontroller::mylogin()   
{
	system("cls");   //清屏 
	int count = 0;
	string account;
	string cipher;
	myshowinfo() ;   //调用显示系统信息函数 
	do
	{
		count ++;
		cout << endl<<endl<<"  请输入登录账号:";
		 //获取用户输入的账号
		cin >> account;
		cout <<endl<<endl<<"  请输入密码:";
	    //获取用户输入的密码
		cin>>cipher ;
		//判断用户输入的账号和密码是否正确
		if( account == "admin" &&  cipher=="abc123")
		{
			mydatainit() ;    //初始化数据
			return true;
		}
		else
		{
			if(count==3)
			{
				cout <<endl<<endl<<"\t对不起,登录失败,系统将自动退出....\n\t";
				exit(0);
			} 
			else 
			{
				cout << "\n\t账号或密码错误,请确认后重新输入。<你还有 " << (3-count) << " 次机会,继续>!!!" << endl;
			}
 		}
	}while(count > 0);
	return false;
}
//查看全部职工信息
void Mycontroller::showworkerinfo()
{
	system("cls");   //清屏 
	myshowinfo();      //显示系统信息
	cout <<endl<<endl<<"\t                      查看全部职工信息                     " << endl;
	if (workerinfos.size() <= 0)
	{
		cout <<endl<<"\t暂无职工信息......";
	}
	else
	{
		cout <<endl<<endl<<"\t                      共有 " << workerinfos.size() << " 名职工                      " << endl;
		cout <<endl<<endl<<"\t职工号" << "\t姓名" << "\t所属部门" << "\t性别" << "\t年龄" << "\t工资" << endl;
		for(int i=0,len=workerinfos.size(); i<len; i++)
		{
			workerinfos[i].show();
		}
	}
	cout << "\n\t<请按任意键如(回车)返回>" << endl;
	getch() ;
}
//显示单个职工信息
void Mycontroller::myshow(Workerinfo mywork1)
{
	cout <<endl<<"\t职工号" << "\t姓名" << "\t所属部门" << "\t性别" << "\t年龄" << "\t工资" << endl;
	mywork1.show();
}
//保存职工信息
bool Mycontroller::mysave(Workerinfo mywork1)
{
	fstream out ;
	out.open("myworker.txt",ios::out | ios::app | ios::binary) ;
	if (out.is_open())
	{
		out.write((char *)&mywork1, sizeof(Workerinfo));
		out.close();
		return true;
	} 
	else 
	{
		return false;
	}
}
//添加职工信息
void Mycontroller::addworkerinfo()
{
	system("cls");
	int result;
	char wno[20];       //职工号
	char wname[20];     //姓名
	char cname[20];    //所属部门
	char sex[4];      // 性别
	int age;          // 年龄
	float  wages;    //工资 
	cout << endl<<endl<<"\t                      添加职工信息                      ";
	cout << endl<<endl<<"\t                     *请输入以下职工信息                     "<<endl;
	cout << "\n\t请输入职工号:";
	cin >> wno;
	cout << "\n\t请输入职工姓名:";
	cin >> wname;
	cout << "\n\t请输入职工所属部门:";
	cin >> cname;
	cout << "\n\t请输入职工性别:";
	cin >> sex;
	cout << "\n\t请输入职工年龄:";
	cin >> age;
	cout << "\n\t请输入职工工资:";
	cin >> wages;
	Workerinfo mywork1(wno, wname, cname, sex, age, wages);
 	cout <<endl<<"\t要添加的职工信息如下,请确认:" << endl;
	myshow(mywork1);    //调用myshow函数显示要添加的职工信息
	//提示对话框 
	result=MessageBox(NULL,"确定要添加此数据吗?","确认提示",MB_YESNO|MB_ICONWARNING);
	if(result==6)
	{
		if (mysave(mywork1))   //调用mysave函数把添加的职工信息添加到文本文件中 
		{
			workerinfos.push_back(mywork1);
			cout <<endl<<"\t职工信息添加成功..." << endl;
		} 
		else 
		{
			cout <<endl<<"\t职工信息添加失败..." << endl;
		}
	}
	cout <<endl<<endl<<"\t<请按任意键如(回车)返回>" << endl;
	getch() ;
}
//查找职工信息
void Mycontroller:: searchworkerinfo()
{
	system("cls");   //清屏
	myshowinfo();      //显示系统信息
	cout <<endl<<endl<<"\t                     查找到的职工信息                     ";
	if (workerinfos.size() <= 0)
	{
		cout <<endl<<"\t暂无职工信息......";
	}
	else
	{
		char wno[20];   //存放用户要查找的职工号 
		cout <<endl<<endl<<"\t请输入要查找的职工号:";
		cin >> wno;
		cout <<endl<<endl<<"\t职工号" << "\t姓名" << "\t所属部门" << "\t性别" << "\t年龄" << "\t工资" << endl;
		int count = 0;    // 记录满足条件的职工个数
		int length = strlen(wno);   // \0
		int temp = 0, j=0;
		char arr[20];
		for(int i=0,len=workerinfos.size(); i<len; i++)     // 循环所有职工信息
		{
			strcpy(arr,workerinfos[i].getWno());
			temp = strlen(arr);
			length = length > temp ? temp : length;
			for (j=0; j<length; j++)
			{
				if(arr[j] != wno[j])
				{
					break;
				}
			}
			if (j >= length)   // 说明满足条件
			{
				count++;
				workerinfos[i].show();
			}
		}
		if (count>0)
		{
			cout << "\n\t                      共有 " << count << " 个基本满足条件                      " << endl;
		}
		else
		{
			cout << "\n\t没有你要查找的职工信息.......";
		}
	}
	cout << "\n\t<请按任意键如(回车)返回>" << endl;
	getch();
}
//重写职工信息
bool Mycontroller:: rewriteworkerinfo() 
{
	int len ;
	if (len <=0)     // 说明没有职工信息,则清空文件中的内容
	{
		fstream file ; 
		file.open("myworker.txt", ios::out | ios::trunc);
		file.close();
	}
	else
	{
		fstream out ;
		out.open("myworker.txt",ios::out | ios::binary);
		if (out.is_open())
		{
			for(int i=0,len=workerinfos.size(); i<len; i++)
			{
				out.write((char *)&workerinfos[i], sizeof(Workerinfo));
			}
			out.close();
			return true;
		} 
		else 
		{
			return false;
		}
	}
	return false;
}
//修改职工信息
void Mycontroller:: updateworkerinfo()
{
	system("cls");   //清屏
	myshowinfo();      //显示系统信息
	cout <<endl<<endl<<"\t                     修改职工信息                     ";
	if (workerinfos.empty())
	{
		cout << "\n\t暂无职工信息......";
	}
	else
	{
		char wno[20];   //职工号
		cout <<endl<<endl<<"\t请输入你要修改的职工号:";
		cin >> wno;
		int i, len = workerinfos.size();
		for(i=0; i<len; i++)
		{
			if (strcmp(wno,workerinfos[i].getWno()) == 0)
			{
				cout <<endl<<"\t你要修改的职工信息如下:";
				cout <<endl<<endl<<"\t职工号" << "\t姓名" << "\t所属部门" << "\t性别" << "\t年龄" << "\t工资" << endl;
				workerinfos[i].show();
				break;
			}
		}
		if ( i >= len )
		{
			cout << "\n\t对不起!没有要删除的职工信息......";
		}
		else
		{
			char wname[20];    //姓名
			char cname[20];    //所属部门 
			char sex[4];      //性别
			int  age;         //年龄
			float wages;    //工资 
			cout << "\n\t请输入职工姓名:";
			cin >> wname;
			cout << "\n\t请输入职工所属部门:";
			cin >> cname;
			cout << "\n\t请输入职工性别:";
			cin >> sex;
			cout << "\n\t请输入职工年龄:";
			cin >> age;
			cout << "\n\t请输入职工工资:";
			cin >> wages ;
			int result=MessageBox(NULL,"您确定要修改此职工信息吗?","确认提示",MB_YESNO|MB_ICONWARNING);
			if(result==6)     //确定按钮 
			{
				workerinfos[i].setWname(wname);
				workerinfos[i].setCname(cname);
				workerinfos[i].setSex(sex);
				workerinfos[i].setAge(age);
				workerinfos[i].setWages(wages);
				//调用重写职工信息函数
				if(rewriteworkerinfo())
				{
					cout << "\n\t职工信息修改成功......" << endl;
				}
				else
				{
					cout << "\n\t职工信息修改失败......." << endl;
				}
			}
		}
	}
	cout << "\n\t<请按任意键如(回车)返回>" << endl;
	getch();
}
//删除职工信息 
void Mycontroller:: deleteworkerinfo()
{
	system("cls");   //清屏
	myshowinfo();      //显示系统信息
	cout <<endl<<endl<<"\t                      删除职工信息                     ";
	if (workerinfos.empty())
	{
		cout << "\n\t暂无职工信息......";
	}
	else
	{
		char wno[20];    //要删除职工的职工号 
		cout << "\n\t请输入要删除的职工号:";
		cin >> wno;
		int i, len = workerinfos.size();
		for(i=0; i<len; i++)
		{
			if (strcmp(wno,workerinfos[i].getWno()) == 0)
			{
				cout <<endl<<endl<<"\t职工号" << "\t姓名" << "\t所属部门" << "\t性别" << "\t年龄" << "\t工资" << endl;
				workerinfos[i].show();
				break;
			}
		}
		if (i>=len)
		{
			cout << "\n\t对不起!没有要删除的职工信息......";
		}
		else
		{
			int result=MessageBox(NULL,"确定要删除此职工信息吗?","确认提示",MB_YESNO|MB_ICONWARNING);
			if(result==6)   //确定按钮 
			{
				workerinfos.erase(workerinfos.begin()+i);
				//调用重写职工信息函数
				if(rewriteworkerinfo())
				{
					cout << "\n\t职工信息删除失败......" << endl;
				}
				else
				{
					cout << "\n\t职工信息删除成功......" << endl;
				}
			}
		}
	}
	cout << "\n\t<请按任意键如(回车)返回>" << endl;
	getch();
}

//主函数 
int main()
{
	//创建控制类对象 
	Mycontroller  mycon ;
	if (mycon.mylogin() )
		{
			mycon.mymenu() ;
 		}
	else
		{
			cout <<endl<<endl<<"\t对不起,登录失败,系统将自动退出....\n\t";
			exit(0);
		}
}

猜你喜欢

转载自blog.csdn.net/cnds123/article/details/129498381