C/C++课程设计 之职工管理系统

本文档详述了一个使用C/C++进行的课程设计项目——公司职工管理系统。系统包括职工信息录入、浏览、查询、删除、修改等功能,通过类的设计体现了面向对象的封装、继承和多态特性。具体涵盖概要设计、详细设计、实现代码和多个相关案例。
摘要由CSDN通过智能技术生成

(一) 题目内容及简介

1.课题来源
课题名称和来源,主要介绍为何选择此题目来开展课程设计,此课题的开展能体现面向对象程序设计的哪些特征?
课题题目 : 公司职工管理系统
课题来源 : 课程设计任务书
选择原因 : 内容描述简短,可以按照自己意愿定义其功能。
显现特性 : 三要素,封装、继承、多态。

2.内容简介
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。提供以下功能:
1)系统以菜单方式工作
2)职工信息录入功能(职工信息用文件或者数据库保存)
3)职工信息浏览功能 --输出
4)查询功能:(至少一种查询方式) 按姓名查询 按学历查询等
5)职工信息删除、修改功能,并将删除信息存入另外备份文件


(1) 实现职工信息的注册、增加、删除(包括把删除信息备份)、修改、查找、排序、文件读入与读出等等。
(2) 其余功能可以根据实际情况添加。
(3) 在实现功能的同时,利用类之间的关系体现继承和多态。

(二) 概要设计

1.结构图
在这里插入图片描述
2.内容分析

1.界面登录。使用者必须持有正确的用户名和账号才能正确登录。
2.身份选择。使用者可以选择老板和管理员然后对职工信息进行管理,当然不同的身份对	 应的功能也不一样,比如老板具有所有功能,而管理员只有注册、增加、排序、查询。
3.功能选择。使用者可以根据编号对应的功能进行选择,内容包括职工信息的查询、增加、排序、注册等等。
4.可以根据自己的需求,添加自己想要的功能。

(三) 详细设计

1.类别
1.成员类(class staff)
解释:定义的信息以及指针全为公用类中。
在这里插入图片描述

2.纯虚类(class function)
在这里插入图片描述

解释:

  1. 定义纯虚类,使用this 指针创建头结点,然后在建立头节点的时候取出头结点。
  2. 定义保护类,能被同类成员调用,同时也能被类的派生类调用。

3.功能类(class functioninput)
在这里插入图片描述

解释:
1.继承纯虚类,然后在功能类实现重写。
2.定义功能函数去实现其对应的功能,然后用代码实现。
3.员工信息的写入和写出。

图示:

在这里插入图片描述
在这里插入图片描述

(四) 实现代码

#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<windows.h>
using namespace std;
class staff {
   
	public:
		int num;//工号
		char name[20];//名字
		char sex[10];//性别
		int age;//年龄
		char address[50];//地址邮编
		long long call;//电话
		char level[10];//教育
		int wage;//工资
		char section[20];//部门
		staff *next;
};
class function {
   
	public:
		function(){
   
			this->head =new staff();
			this->head->next = NULL;
		}
		virtual void creatilist()=0;
		virtual void change()=0;
		virtual void delete1()=0;
		virtual void inquiry()=0;
		virtual void addlist()=0;
		virtual void destory()=0;
		virtual void sort()=0;
		virtual void exchange(staff *p,staff *q)=0;
		virtual void in_file()=0;
		virtual void out_file()=0;
		virtual void print()=0;
		virtual void total()=0;
		virtual void readstandby()=0;
		staff *getHead() {
    //取出头结点
			return this->head;
		}
		void setHead() {
   
			this->head = head;//建立头结点
		}
	protected:
		staff *head;
		ifstream  outfile;
};
class functioninput:public function {
   
	public:
		void creatilist();
		void change();
		void delete1();
		void inquiry();
		void addlist();
		void destory();
		void sort();
		void exchange(staff *p,staff *q);
		void in_file();
		void out_file();
		void print();
		void total();
		void readstandby();
};
void functioninput::exchange(staff *p,staff *q) {
   
	staff *Node=new staff;
	Node->num=p->num;
	strcpy(Node->name,p->name);
	Node->age=p->age;
	Node->call=p->call;
	strcpy(Node->address,p->address);
	strcpy(Node->sex,p->sex);
	strcpy(Node->section,p->section);
	Node->wage=p->wage;
	strcpy(Node->level,p->level);

	p->num=q->num;
	strcpy(p->name,q->name);
	p->age=q->age;
	p->call=q->call;
	strcpy(p->name,q->name);
	strcpy(p->sex,q->sex);
	strcpy(p->section,q->section);
	p->wage=q->wage;
	strcpy(p->level,q->level);

	q->num=Node->num;
	strcpy(q->name,Node->name);
	q->age=Node->age;
	q->call=Node->call;
	q->call=Node->wage;
	strcpy(q->address,Node->address);
	strcpy(q->sex,Node->sex);
	strcpy(q->section,Node->section);
	q->wage=Node->wage;
	strcpy(q->level,Node->level);
}
void functioninput::total() {
   
	staff *p=head->next;
	int sum=0;
	if(p->next==NULL) {
   
		cout<<"暂无数据"<<endl;
	}
	while(p!=NULL) {
   
		sum++;
		p=p->next;
	}
	cout<<"当前已录入职工人数:"<<sum<<endl;
}
void functioninput::creatilist() {
    //注册
	
	staff *p1,*p2;
	p2=this->head;
	while(1) {
   
		p1=new staff();
		p1->next=NULL;
		cout<<endl;
		cout << "     -----> 当   输   入   员   工    号     码     为     0     时,   注     册      结       束 !<-------                       "<< endl;
		printf("\n");
		cout << "请输入职工号码: " << endl;
		cin >>p1->num;
		if(p1->num==0){
   
			printf("信息注册结束!\n"); 
			printf("\n");
			break;
		}
		
		cout << "请输入职工姓名:  " << endl;
		cin >> p1->name;
		cout << "请输入职工年龄:  " << endl;
		cin >> p1->age;
		cout << "请输入职工性别:  " << endl;
		cin >> p1->sex;
		cout << "请输入职工电话:  " << endl;
		cin >> p1->call;
		cout << "请输入职工部门:  " << endl;
		cin >> p1->section;
		cout << "请输入职工工资:  " << endl;
		cin >> p1->wage;
		cout<<  "请输入职工水平:  "<< endl;
		cin>>p1->level;
		cout<<  "请输入职工家庭地址:  "<<endl;
		cin>>p1->address;
		cout<<"                    "<<endl;
		
		p2->next=p1;
		p2=p1;
	}
	p1->next=NULL;
}
void functioninput::print() {
    //输出
	staff *pNode=head->next;
	cout<<"输出结果如下:"<<endl; 
	while(pNode) {
   
		cout<<endl;
		cout<<"职工编号:"<<pNode->num<<endl;
		cout<<"职工姓名:"<<pNode->name<<endl;
		cout<<"职工性别: "<<pNode->sex<<endl;
		cout<<"职工年龄:"<<pNode->age<<endl;
		cout<<"家庭住址:"<<pNode->address<<endl;
		cout<<"电话号码:"<<pNode->call<<endl;
		cout<<"学历信息:"<<pNode->level<<endl;
		cout<<"职工工资:"<<pNode->wage<<endl;
		cout<<"->读取完毕"<<endl; 
		cout<<endl;
		pNode=pNode->next;
	}
}
void functioninput::addlist() {
    //添加
	staff *p=head->next;
	staff *q;
	int m=1;
	int n,b=1;
	//统计学生数 
    while(p->next!=NULL)
	 {
   	p=p->next;
		m++;
	 } 

    cout<<"请输入编号:";
    cin>>n;
	p=head->next;
	//判断学号是否重复 
	for(int i=1;i<=m;i++)
	{
   
	   if(p->num==n) 
	{
   
	   cout<<"编号重复"<<endl;
	   b=0;
	   break;
	   
	}
		p=p->next;
	}
	if(b!=0)
	{
   
		p=head;
	   	while(p->next!=NULL)
	   	p=p->next;
	   	q=new staff;
	   	q->num=n;
	cout<<"职工编号"<<endl;
	cin>>q->num;
	cout<<"请输入姓名"<<endl;
	cin>>q->name;
	cout<<"请输入性别";
	cin>>q->sex;
	cout<<"请输入年龄";
	cin>>q->age;
	cout<<"请输入家庭地址";
	cin>>q->address;
	cout<<"请输入电话";
	cin>>q->call;
	cout<<"请输入学历";
	cin>>q->level; 
	cout<<"请输入工资";
	cin>>q->wage; 
	q->next=NULL;
	p->next=q;
	p=q;
	}
	}
void functioninput::inquiry() {
     //查询
	cout<<"请输入你要查询的职工编号:"<<endl;
	int n;
	cin>>n;
	staff *p1=head;
	while(p1!=NULL) {
   
		if(p1->num==n) {
   
			cout<<"----------查询结果----------"<<endl;;
			cout<<"职工姓名:"<<p1->name<<endl;
			cout<<"职工编号:"<<p1->num<<endl;
			cout<<"职工性别:"<<p1->sex<<endl;
			cout<<"职工年龄:"<<p1->age<<endl;
			cout<<"家庭住址:"<<p1->address<<endl;
			cout<<"电话号码:"<<p1->call<<endl;
			cout<<"学历信息:"<<p1->level<<endl;
			cout<<"部门信息:"<<p1->section<<endl;
			cout<<"职工工资:"<<p1->wage<<endl;
		}
		p1=p1->next;
	}
}
void functioninput::delete1() {
    //删除
	staff *p1,*p2;
	int a;
	if(head==NULL) {
   
		cout<<"无!"<<endl;
	} else {
   
		cout<<"请输入要删除的职工编码:"<<endl;
		cin>>a;
		p1=head;
	}
	while(a!=p1->num && p1->next!=NULL) {
   
		p2=p1;
		p1=p1->next;
	}
	if(a==p1->num) {
   
		//找到结点
		if(p1==head) {
   
			//结点是第一位
			head=p1->next;
		} else {
   
			//结点不是第一位
			p2->next=p1->next;
			cout<<"删除成功"<<endl<<endl;
		}
	}
	ofstream standbyfile("备份.txt",ios::app);
	standbyfile<<endl;
	standbyfile<<p1->address<<'\t'<<p1->age<<'\t'<<p1->call<<'\t'<<p1->level<<'\t'<<p1->name<<'\t'<<p1->num<<'\t'<<p1->section<<'\t'<<p1->sex<<'\t'<<p1->wage;
	standbyfile.close();
	delete p1;
}
void functioninput::readstandby() {
   
	staff *head;
	staff *p1,*p2,*p3;
	head=new staff;
	if(head==NULL) {
   
		cout<<"节点创建失败!"<<endl;
		exit(0);
	}
	p1=p2=head;
	ifstream beifenfile("备份.txt");
	if(!beifenfile) {
   
		cout<<"打开失败";
		exit(0);
	}
	while(!beifenfile.eof()) {
   
		p1=new staff;
		if(p1==NULL) {
   
			cout<<"节点创建失败!"<<endl;
			exit(0);
		}
		beifenfile>>p1->address>>p1->age>>p1->call>>p1->level>>p1->name>>p1->num>>p1->section>>p1->sex>>p1->wage;
		p2->next=p1;
		p2=p1;
	}
	p2->next=NULL;
	beifenfile.close();
	p3=head->next;
	while(p3!=NULL) {
   
		cout<<p3->address<<p3->age<<p3->call<<p3->level<<p3->name<<p3->num<<p3->section<<p3->sex<<p3->wage<<endl;
		p3=p3->next;
	}
}
void functioninput::change() {
    //修改
	int a;
	int flag = 0;
	system("cls");
	cout<<"\n\n\n";
	cout<<"\t\t\t请输入要修改人的职工号:";
	cin>>a;
	staff *p;
	p = head->next;
	while(p != head) {
   
		if(p->num == a) {
   
			flag = 1;
			cout<<"\n\t\t\t请输入名字:";
			cin>>p->name;
			cout<<"\n\t\t\t请输入年龄:";
			cin>>p->age;
			cout<<"\n\t\t\t请输入性别:";
			cin>>p->sex;
			cout<<"\n\t\t\t请输入地址:";
			cin>>p->address;
			cout<<"\n\t\t\t请输入修改后的部门:";
			cin>>p->section;
			cout<<"\n\t\t\t请输入修改后的薪资:";
			cin>>p->wage;
			cout<<"\n\t\t\t请输入修改后的电话:";
			cin>>p->call;
			cout<<"\n\t\t\t请输入修改后的教育:" ;
			cin>>p->level;
			break;
		}
		p = p->next;
	}
	if (flag) {
   
		Sleep(1000);//延迟1秒;
		system("cls");
		cout<<"\n\n\n\n\n\n\t\t\t\t修改成功!"<<endl;
	} else {
   
		Sleep(1000);
		system("cls");
		cout<<"\n\n\n\n\n\n经查找,系统无此人。"<<endl;
	}
}
void functioninput::sort () {
    //排序
	staff *p1,*p2;
	int num;
	char name[20];
	char sex[10];
	int age;
	char address[50];
	long call;//电话
	char level[10];//教育
	int wage;//工资
	char section;
	for(p1=head; p1!=NULL; p1=p1->next) {
   
		//利用两个for循环实现两者和多者的比较
		for(p2=p1->next; p2!=NULL; p2=p2->next) {
   
			if(p1->age>p2->age) {
    //如果前者的年龄大于后者的,实现swap的交换,最终的结果都会以从小到大的顺序排列
				exchange(p1,p2);
			}
		}
	}
	staff *p3=head->next;//staff *p3=head;
	while(p3!=NULL) {
   
		cout<<endl;
		cout<<"当前信息如下:"<<endl;
		cout<<"职工编号:"<<p3->num<<endl;
		cout<<"职工姓名:"<<p3->name<<endl;
		cout<<"职工性别:"<<p3->sex<<endl;
		cout<<"职工年龄:"<<p3->age<<endl;
		cout<<"家庭住址:"<<p3->address<<endl;
		cout<<"电话号码:"<<p3->call<<endl;
		cout<<"学历信息:"<<p3->level<<endl;
		cout<<"部门信息:"<<p3->section<<endl;
		cout<<"职工工资:"<<p3->wage<<endl;
		p3=p3->next;
		 } 
	}
void functioninput::in_file() {
    //储存
	staff *p1=head->next;
	fstream outfile("D:\\公司职工管理系统.txt",ios::out);
	if(!outfile) {
   
		cout<<"文件打开失败!"<<endl;
		return ;
	}
	while(p1!=NULL) {
   
		outfile<<p1->num<<p1->name<<p1->sex<<p1->age<<p1->address<<p1->call<<p1->level<<p1->wage<<p1->section;
		p1=p1->next;
	}
	outfile.close();
	cout<<"保存成功"<<endl;
}
void functioninput::out_file() {
    //读出
	fstream infile("D:\\a.txt",ios::in);
	if(infile.eof()) {
   
		cerr<<"error:unable to read output file!"<<endl;
		exit(-1);
	}
	staff *p=head->next;
	while(p!=NULL) {
   
		infile>>p->num>>p->name>>p->sex>>p->age>>p->section>>p->call>>p->level>>p->wage;
		cout<<"职工编号:"<<p->num<<endl;
		cout<<"职工名字:"<<p->name<<endl;
		cout<<"职工性别:"<<p->sex<<endl;
		cout<<"职工年龄:"<<p->age<<endl;
		cout<<"职工部门:"<<p->section<<endl;
		cout<<"职工电话:"<<p->call<<endl;
		cout<<"职工水平:"<<p->level<<endl;
		cout<<"职工工资:"<<p->wage <<endl;
		p=p->next;
	}
	infile.close();
	cout<<"职工信息读取完毕"<<endl;
}
void functioninput::destory() {
    //销毁
	staff *p=head;
	if(p->next!=NULL) {
   
		p=p->next;
		free(p);
		cout<<"所添加的职工信息已经销毁\n"<<endl;
	} else {
   
		cout<<"职工信息销毁失败!\n"<<endl;
	}
}
void QQ() {
    //登录
	system("CLS");
	system("color 3");
	char name[20],sercret[20];
	cout<<"请输入你的用户名:"<<endl;
	cin>>name;
	cout<<"请输入你的密码:"<<endl;
	cin>>sercret;
	if(strcmp("1219913130",name)==0&&strcmp("666666",sercret)==0) {
   
		cout<<"登录成功"<<endl;
	} else {
   
		cout<<"登录失败"<<endl;
		exit(-1);
	}
	cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
	cout.width(55);
	cout<<"内容正在加载中,请等待"<<endl;
	for(int j=0; j<8; j++) {
   
		cout<<" .";
	}
	Sleep(2000);
}
void enter() {
   
	cout<<"__________*******************___________" <<endl;
	cout<<"||  *****************************    || " <<endl;
	cout<<"||       欢迎使用职工管理系统        || " <<endl;
	cout<<"||***********************************|| " <<endl;
	cout<<"          ——————————          " <<endl;
	cout<<"   —————————————————— " <<endl;
	cout<<"-----------请按ENTER进入下一步----------"<<endl;
	cout<<" —>     账号:1219913130"<<endl;
	cout<<" —>      密码:666666    "<<endl;
	getchar();
	system("cls");

}
class BOSS:public functioninput {
   
	public:
		void menu();
};
void BOSS::menu() {
   
	cout<<"**************************************"<<endl;
	cout<<"********** 1 注册职工信息 ************"<<endl;
	cout<<"********** 2 增加职工信息 ************"<<endl;
	cout<<"********** 3 显示职工信息 ************"<<endl;
	cout<<"********** 4 查询职工信息 ************"<<endl;
	cout<<"********** 5 删除职工信息 ************"<<endl;
	cout<<"***********6 修改职工信息 ************"<<endl;
	cout<<"***********7 职工信息排序 ************"<<endl;
	cout<<"***********8 销毁职工信息 ************"<<endl;
	cout<<"***********9 保存职工信息 ************"<<endl;
	cout<<"**********10 读取职工信息 ************"<<endl;
	cout<<"**********11 统计职工人数 ************"<<endl;
	cout<<"**********12 阅读备份信息 ************"<<endl;
	cout<<"**********13   退出系统   ************"<<endl;
	cout<<"请输入功能对应的编号: "<<endl;
}
class administrator:public functioninput {
   
	public:
		void menu();
};
void administrator::menu() {
   
	system("color 1");
	cout<<"********** 1 注册职工信息 ************"<<endl;
	cout<<"********** 2 增加职工信息 ************"<<endl;
	cout<<"********** 3 查询职工信息 ************"<<endl;
	cout<<"********** 4 职工信息排序 ************"<<endl;
	cout<<"********** 5 显示职工信息 ************"<<endl;
	cout<<"********** 6   退出系统   ************"<<endl;
	cout<<"请输入功能对应的编号: "<<endl;
}
int main() {
   
//	enter();
	QQ();
	while(1) {
   
		system("cls");
		system("color 3F");
		cout<<"登录日期:"<<endl;
		system("date/t\n");
		cout<<"登录时间:"<<endl;
		system("time/t\n");
		cout<<"——请选择你要选择的身份——" <<endl;
		cout<<"*************1. BOSS     **********"<<endl;
		cout<<"*************2. 管理员   **********"<<endl;
		cout<<"*************3.退出系统  **********"<<endl;
		int n;
		cin>>n;
		if(n==1) {
   
			BOSS S;
			while(1) {
   
				S.menu();
				int a;
				cin>>a;
				switch(a) {
   
						system("CLS");
					case 1:
						system("CLS");
						S.creatilist();
						break;
					case 2:
						system("CLS");
						S.addlist();
						break;
					case 3:
						system("CLS");
						S.print();
						break;
					case 4:
						system("CLS");
						S.inquiry();
						break;
					case 5:
						system("CLS");
						S.delete1();
						break;
					case 6:
						system("CLS");
						S.change();
						break;
					case 7:
						system("CLS");
						S.sort();
						break;
					case 8:
						system("CLS");
						S.destory();
						break;
					case 9:
						system("CLS");
						S.in_file();
						break;
					case 10:
						system("CLS");
						S.out_file();
						break;
					case 11:
						system("CLS");
						S.total();
						break;
					case 12:
						system("CLS");
						S.readstandby();
						break;
					case 13:
						system("CLS\n");
						system("color 6F");
						cout<<"=============================================================\n";
						cout<<"||******************************************************** ||\n";
						cout<<"||                                                         ||\n";
						cout<<"||                        谢谢你的使用!                    ||\n";
						cout<<"||                                                         ||\n";
						cout<<"||******************************************************** ||\n";
						cout<<"============================================================\n";
						exit(0);
					default:
						cout<<"输入有误!"<<endl;
				}
			}
		}
		if(n==2) {
   
			administrator T;
			while(1) {
   
				T.menu();
				int b;
				cin>>b;
				switch(b) {
   
						system("CLS");
					case 1:
						system("CLS");
						T.creatilist();
						break;
					case 2:
						system("CLS");
						T.addlist();
						break;
					case 3:
						system("CLS");
						T.inquiry();
						break;
					case 4:
						system("CLS");
						T.sort();
						break;
					case 5:
						system("CLS");
						T.print();
						break;
					case 6:
						system("CLS\n");
						system("color 6F");
						cout<<"/============================================================\n";
						cout<<"||                                                         ||\n";
						cout<<"||                      谢谢你的使用!                      ||\n";
						cout<<"||                                                         ||\n";
						cout<<"||=========================================================||\n";
						exit(-1);
				}
			}
		}
		if(n==3) {
   
			system("cls");
			cout<<"希望下次能和你相遇。"<<endl;
			system("pause");
			exit(-1);
		}
	}
}

(五) 相关案例

案例一

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
 typedef struct Staff
 {
   
    int num;
	char name[30]; 
	int age; 
	int money;
	char tel[30];
	char adress[30];
 	struct Staff *next;
 }worker;
 worker *getHead()//创建头节点 
 {
   
    worker *head = (worker *)malloc(sizeof (worker));
    head->next=NULL;
    return head;
 }
void add(worker *head)
 {
   
    worker *p=head;
    int n,i;
    printf("你要增加几个职工的信息");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
     while (p->next!=NULL)
       {
   
       	  p=p->next;
	   }
	  worker *q=(worker *)malloc(sizeof(worker));
    	printf("请输入增加的第%d个职工的编号:",i+1);
    	scanf("%d",&q->num);
    	printf("请输入此职工的姓名:");
		scanf("%s",q->name);
		printf("请输入此职工的年龄:");
		scanf("%d",&q->age); 
    	printf("请输入此职工的工资:");
    	scanf("%d",&q->money);
    	printf("请输入此职工的电话:");
    	scanf("%s",q->tel);
		printf("请输入此职工的住址:");
		scanf("%s",q->adress); 
		printf("\n添加成功");	
		q->next=NULL;
        p->next=q; 
        
	}

 }
void display(worker *head) 
 {
   
	worker *p = head;
	if(p->next==NULL)
	{
    
	  printf("显示不出职工信息");
   	}
	while (p->next!= NULL) 
	{
   
		printf("\t编号:%d 姓名:%s 年龄:%d 工资:%d 电话:%s 住址:%s",p->next->num,p->next->name,p->next->age,p->next->money,p->next->tel,p->next->adress);
		printf("\n"); 
		p = p->next;	
	}
 } 
void del(worker *head)
 {
    worker *p=head;
  
   int number;
   printf("请输入你要删除的职工编号:");
	scanf("%d",&number);
	while(p->next!=NULL)
 	{
   
 		if(p->next->num==number)
 		{
       
 		     break;
		}
		p=p->next;		
	}	
	if(p->next==NULL)
	{
   
	    printf("删除失败");	
	}	
    else
    {
     worker *q=p->next;
    	q=p->next;
    	p->next=q->next;
 		     free(q);
 		     q=NULL;
 		     printf("信息删除成功\n");
	}
	
 }
void search(worker *head)
     {
      
	     int number;
		 printf("请输入要查询的编号:");   
         scanf("%d",&number);
         if(head->next==NULL)
          {
   
		    printf("没有找到要查询的编号!");
		  } 
         while(head->next!=NULL)
         {
   
         	if(head->next->num==number)
         	{
   
         		printf("编号:%d ",head->next->num);
         		printf("姓名:%s",head->next->name);
         		printf("年龄:%d",head->next->age);
         		printf("工资:%d ",head->next->money);
         		printf("电话:%s",head->next->tel);
         		printf("住址:%s",head->next->adress);
         	    break;
			}
			head=head->next;
		 }
		 
	 }
void change(worker *head)
     {
   
     	int number;
     	printf("请输入你要修改职工的编号:"); 
     	scanf("%d",&number);
		if(head->next==NULL)
		{
   	
			printf("没有你要修改的信息!");
		}
		while(head->next!=NULL)
		{
   
		    if(head->next->num==number)
			{
        printf("请输入你想要修改的编号"); 
			      scanf("%d",&head->next->num);
			      printf("请输入你想要修改的姓名"); 
				  scanf("%s",head->next->name);
				  printf("请输入你想要修改的年龄");
				  scanf("%d",&head->next->age); 
				  printf("请输入你想要修改的工资");
				  scanf("%d",&head->next->money);
				  printf("请输入你想要修改的电话");
				  scanf("%s",head->next->tel);
				  printf("请输入你想要修改的住址");
				  scanf("%s",head->next->adress);
				  printf("修改成功"); 
				  break;	
			}	
		   head=head->next;
		} 	
	 }
void house()
           {
    printf("\n             *");
		     printf("\n            ***"); 
           	 printf("\n           *****");
           	 printf("\n          *******");
           	 printf("\n **     ************    **");
           	 printf("\n   *********************"); 
             printf("\n      ** 欢 迎 您 **");
			 printf("\n      **使用职工信**");
			 printf("\n      **息管理系统**");	
		     printf("\n ****************************");
			 printf("\n******************************");
			 printf("\n_______________________________");
			 printf("\n     按回车键进入系统\n");
			 getchar();
			 system("CLS");
			}
void filesave(worker *head)
           {
     FILE *fp;
              worker *p=head->next;
              if(head->next==NULL)
			  {
   
			  	printf("无数据写入!");
			  	system("pause");
			  	return;
			  } 
           	  fp=fopen("D:\职工信息管理系统.txt","w");
           	  if(fp==NULL)
           	  {
   
           	  	printf("打开文件失败!");
			  }
           	  while(p!=NULL)
           	  {
   
           	  	printf("%d\t",p->num);
           	  	printf("%s\t",p->name);
           	  	printf("%d\t",p->age);
           	  	printf("%d\t",p->money);
           	  	printf("%s\t",p->tel);
           	  	printf("%s\n",p->adress);
           	  	fprintf(fp,"%d\t",p->num);
           	  	fprintf(fp,"%s\t",p->name);
           	  	fprintf(fp,"%d\t",p->age);
           	  	fprintf(fp,"%d\t",p->money);
           	  	fprintf(fp,"%s\t",p->tel);
           	  	fprintf(fp,"%s\n",p->adress);
           	    p=p->next;
			  }
           	printf("\n");
           	fprintf(fp,"\n");
           	fclose(fp);
           	printf("保存成功!");
		   }
void  fileread()
              {
   
                 FILE *fp=fopen("D:\职工信息管理系统.txt","r");
				 if(fp==NULL)
				 {
   
				 	printf("读入信息失败!");
				 }
				 char read;
				 printf("学号:\t 姓名:\t 年龄:\t 工资:\t 电话:\t 地址:\n");
				 while((read=fgetc(fp))!=EOF)
				 {
     
				     putchar(read);
				 } 
				 fclose(fp);
				 printf("信息读取成功");	
			  }
int main()
{
     house(); 
   int n;
   worker *head=getHead();
     while(1) {
   	
    printf("\n************||职工信息管理系统v1.0||****************");
    printf("\n  *-----------||1.添加职工信息||---------------*");
    printf("\n  *-----------||2.显示职工信息||---------------*"); 
	printf("\n  *-----------||3.删除职工信息||---------------*");
	printf("\n  *-----------||4.查询职工信息||---------------*");
	printf("\n  *-----------||5.修改职工信息||---------------*");
	printf("\n  *-----------||6.保存职工信息||---------------*");
	printf("\n  *-----------||7.读入职工信息||---------------*"); 
	printf("\n  *-----------||8. 退出该系统 ||---------------*"); 
	printf("\n  *-------------______________---------------*");
	printf("\n  ***************请选择功能******************");
	printf("\n");
    scanf("%d",&n);
    switch(n)
      {
    
		case 1:system("CLS");add(head);break;
	    case 2:system("CLS");display(head);break;
	    case 3:system("CLS");del(head); break;
	    case 4:system("CLS");search(head);break;
	    case 5:system("CLS");change(head);break;
	    case 6:system("CLS");filesave(head);break;
	    case 7:system("CLS");fileread();break;
	    case 8:printf("谢谢使用,再见!"); exit(0); break;
		default:system("CLS");printf("请重新选择:\n");       	   	        
	  }
    }  
	return 0;
}
  

案例二

#include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
class date{
   
	public:
		int year;
		int month;
		int day;
		void scanfdate();
		void showdate();
};
void date::scanfdate(){
   
	cout<<"请输入年月日:";
	cin>>year>>month>>day;
}
void date::showdate(){
   
	cout<<"生日:";
	cout<<year<<'/'<<month<<'/'<<day<<endl; 
}
class Employee{
   
	public:
		char name[10];
		char sex[5];
		date birthday;
		char _class[10];
		int salay;
		virtual void computeSalay()=0;
		void scanfemployee();
		void printfemployee();
};
void Employee::scanfemployee(){
   
	cout<<"请输入职工姓名:";
	cin>>name;
	cout<<"请输入性别:";
	cin>>sex;
	birthday.scanfdate();
	cout<<"请输入员工类别:";
	cin>>_class; 
}
void Employee::printfemployee(){
   
	cout<<"职工姓名:"<<name<<endl;
	cout<<"性别:"<<sex<<endl;
	birthday.showdate();
	cout<<"员工类别:"<<_class<<endl;
	cout<<"薪水:"<<salay<<endl;
	cout<<"-----------"<<endl;
}
class Worker:public Employee{
   
	Worker *next; 
	public:
		void computeSalay();
};
void Worker::computeSalay(){
   
	int workday;
	cout<<"请输入员工工作天数:"; 
	cin>>workday;
	salay=workday*100;
}
class Salesman:public Employee{
   
	Salesman *next;
	public:
		void computeSalay();
};
void Salesman::computeSalay(){
   
	int product;
	cout<<"请输入销售量:";
	cin>>product;
	salay=product*50;
}
class Manager:public Employee{
   
	Manager *next;
	public:
		void computeSalay();
};
void Manager::computeSalay(){
   
	salay=8000;
}
class Floater:public Employee{
   
	Floater *next;
	public:
		void computeSalay();
};
void Floater::computeSalay(){
   
	int workhour;
	cout<<"请输入工作时长:";
	cin>>workhour;
	salay=workhour*15;
}
class list{
   
	public:
		Worker *pw;
		Salesman *ps;
		Manager *pm;
		Floater *pf;
		list *next; 
		static int wsum;
		static int ssum;
		static int msum;
		static int fsum;
};
int list::wsum=0;
int list::ssum=0;
int list::msum=0;
int list::fsum=0;
class listandfile:public list{
   
	public:
		void creatlist(list *head);
		void listtofile(list *head);
		void filetolist(list *head);
		
};
void listandfile::creatlist(list *head){
   
	list *p1,*p2;
	p1=p2=head;
	int count,i,j;
	for(i=0;i<4;i++){
   
		switch(i){
   
			case 0:
			cout<<"请输入普通员工数量:";
			cin>>count;
			cout<<"***********************"<<endl;
			for(j=0;j<count;j++){
   
				p1=new list;
				if(p1==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pw=new Worker;
				if(pw==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pw->scanfemployee();
				p1->pw->computeSalay();
				p2->next=p1;
				p2=p1;
				cout<<"------------------"<<endl;
			}
			break;
		case 1:
			cout<<"请输入销售人员数量:";
			cin>>count;
			cout<<"***********************"<<endl;
			for(j=0;j<count;j++){
   
				p1=new list;
				if(p1==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->ps=new Salesman;
				if(ps==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pw=NULL;
				p1->ps->scanfemployee();
				p1->ps->computeSalay();
				p2->next=p1;
				p2=p1;
				cout<<"------------------"<<endl;
			}
			break;
		case 2:
			cout<<"请输入经理人员数量:";
			cin>>count;
			cout<<"***********************"<<endl;
			for(j=0;j<count;j++){
   
				p1=new list;
				if(p1==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pm=new Manager;
				if(pm==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->ps=NULL;
				p1->pm->scanfemployee();
				p1->pm->computeSalay();
				p2->next=p1;
				p2=p1;
				cout<<"------------------"<<endl;
			}
			break;
		case 3:
			cout<<"请输入临时工数量:";
			cin>>count;
			cout<<"***********************"<<endl;
			for(j=0;j<count;j++){
   
				p1=new list;
				if(p1==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pf=new Floater;
				if(p1->pf==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pm=NULL;
				p1->pf->scanfemployee();
				p1->pf->computeSalay();
				p2->next=p1;
				p2=p1;
				cout<<"------------------"<<endl;
			}
			p2->next=NULL;
			break;
		}
	}
}
void listandfile::listtofile(list *head){
   
	list *p;
	p=head->next;
	ofstream workerfile("普通员工.txt");
	while(p->pw!=NULL){
   
		workerfile<<endl;
		workerfile<<p->pw->name<<'\t'<<p->pw->sex<<'\t'<<p->pw->birthday.year<<" "<<p->pw->birthday.month<<" "<<p->pw->birthday.day<<'\t'<<p->pw->_class<<'\t'<<p->pw->salay; 
		p=p->next;
	}
	workerfile.close();
	ofstream salesmanfile("销售人员.txt");
	while(p->ps!=NULL){
   
		salesmanfile<<endl;
		salesmanfile<<p->ps->name<<'\t'<<p->ps->sex<<'\t'<<p->ps->birthday.year<<" "<<p->ps->birthday.month<<" "<<p->ps->birthday.day<<'\t'<<p->ps->_class<<'\t'<<p->ps->salay;
		p=p->next;
	}
	salesmanfile.close();
	ofstream managerfile("经理.txt");
	while(p->pm!=NULL){
   
		managerfile<<endl;
		managerfile<<p->pm->name<<'\t'<<p->pm->sex<<'\t'<<p->pm->birthday.year<<" "<<p->pm->birthday.month<<" "<<p->pm->birthday.day<<'\t'<<p->pm->_class<<'\t'<<p->pm->salay;
		p=p->next;
	}
	managerfile.close();
	ofstream floaterfile("临时工.txt");
	while(p!=NULL){
   
		floaterfile<<endl;
		floaterfile<<p->pf->name<<'\t'<<p->pf->sex<<'\t'<<p->pf->birthday.year<<" "<<p->pf->birthday.month<<" "<<p->pf->birthday.day<<'\t'<<p->pf->_class<<'\t'<<p->pf->salay;
		p=p->next;
	}
	floaterfile.close();
}
void listandfile::filetolist(list *head){
   
	list *p1,*p2;
	int i;
	p1=p2=head;
	ifstream outworkerfile("普通员工.txt");
	ifstream outsalesmanfile("销售人员.txt");
	ifstream outmanagerfile("经理.txt");
	ifstream outfloaterfile("临时工.txt");
	for(i=0;i<4;i++){
   
		switch(i){
   
		case 0:
			if(!outworkerfile){
   
				cout<<"打开失败!"<<endl;
				exit(0);
			}
			while(!outworkerfile.eof()){
   
				p1=new list;
				if(p1==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pw=new Worker;
				if(pw==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				outworkerfile>>p1->pw->name>>p1->pw->sex>>p1->pw->birthday.year>>p1->pw->birthday.month>>p1->pw->birthday.day>>p1->pw->_class>>p1->pw->salay;
				wsum++;
				p2->next=p1;
				p2=p1;
			}
			outworkerfile.close();
			break;
		case 1:
			if(!outsalesmanfile){
   
				cout<<"打开失败!"<<endl;
				exit(0);
			}
			while(!outsalesmanfile.eof()){
   
				p1=new list;
				if(p1==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->ps=new Salesman;
				if(ps==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pw=NULL;
				outsalesmanfile>>p1->ps->name>>p1->ps->sex>>p1->ps->birthday.year>>p1->ps->birthday.month>>p1->ps->birthday.day>>p1->ps->_class>>p1->ps->salay;
				ssum++;
				p2->next=p1;
				p2=p1;
			}
			outsalesmanfile.close();
			break;
		case 2:
			if(!outmanagerfile){
   
				cout<<"打开失败!"<<endl;
				exit(0);
			}
			while(!outmanagerfile.eof()){
   
				p1=new list;
				if(p1==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pm=new Manager;
				if(pm==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->ps=NULL;
				outmanagerfile>>p1->pm->name>>p1->pm->sex>>p1->pm->birthday.year>>p1->pm->birthday.month>>p1->pm->birthday.day>>p1->pm->_class>>p1->pm->salay;
				msum++;
				p2->next=p1;
				p2=p1;
			}
			outmanagerfile.close();
			break;
		case 3:
			if(!outfloaterfile){
   
				cout<<"打开失败!"<<endl;
				exit(0);
			}
			while(!outfloaterfile.eof()){
   
				p1=new list;
				if(p1==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pf=new Floater;
				if(pf==NULL){
   
					cout<<"节点创建失败!";
					exit(0);
				}
				p1->pm=NULL;
				outfloaterfile>>p1->pf->name>>p1->pf->sex>>p1->pf->birthday.year>>p1->pf->birthday.month>>p1->pf->birthday.day>>p1->pf->_class>>p1->pf->salay;
				fsum++;
				p2->next=p1;
				p2=p1;
			}
			p2->next=NULL;
			outfloaterfile.close();
			break;
		}
	}
	cout<<"读取成功!"<<endl;
	system("pause"); 
}
class function:public listandfile{
   
	public:
		void showall(list *head);
		void addemployee(list *head);
		void search(list *head);
		void amend(list *head);
		void deleteemployee(list *head);
		void sort(list *head); 
};
void function::showall(list *head){
   
	list *p;
	int i;
	p=head->next;
	for(i=0;i<4;i++){
   
		switch(i){
   
			case 0:
				while(p->pw!=NULL){
   
					p->pw->printfemployee();
					p=p->next;	
				}
				break;
			case 1:
				while(p->ps!=NULL){
   
					p->ps->printfemployee();
					p=p->next;	
				}
				break;
			case 2:
				while(p->pm!=NULL){
   
					p->pm->printfemployee();
					p=p->next;	
				}
				break;
			case 3:
				while(p!=NULL){
   
					p->pf->printfemployee();
					p=p->next;	
				}
				break;
		}
	}
	system("pause");
}
void function::addemployee(list *head){
   
	list *p,*q;
	p=head;
	cout<<"请选择添加的员工类别:"<<endl;
	cout<<"1 普通员工	2 销售人员"<<endl<<"3 经理	4 临时工"<<endl;
	int chose;
	cin>>chose;
	switch(chose){
   
		case 1:
			while(p->next->pw!=NULL){
   
				p=p->next;
			}
			q=new list;
			if(q==NULL){
   
				cout<<"节点创建失败!";
				exit(0);
			}
			q->pw=new Worker;
			if(q->pw==NULL){
   
				cout<<"节点创建失败!";
				exit(0);
			}
			cout<<"请输入添加员工的信息:"<<endl;
			q->pw->scanfemployee();
			q->pw->computeSalay();
			q->next=p->next;
			p->next=q;
			break;
		case 2:
			while(p->next->ps!=NULL){
   
				p=p->next;
			}
			q=new list;
			if(q==NULL){
   
				cout<<"节点创建失败!";
				exit(0);
			}
			q->ps=new Salesman;
			if(q->ps==NULL){
   
				cout<<"节点创建失败!";
				exit(0);
			}
			cout<<"请输入添加员工的信息:"<<endl;
			q->ps->scanfemployee();
			q->ps->computeSalay();
			q->next=p->next;
			p->next=q;
			break;
		case 3:
			while(p->next->pm!=NULL){
   
				p=p->next;
			}
			q=new list;
			if(q==NULL){
   
				cout<<"节点创建失败!";
				exit(0);
			}
			q->pm=new Manager;
			if(q->pm==NULL){
   
				cout<<"节点创建失败!";
				exit(0);
			}
			cout<<"请输入添加员工的信息:"<<endl;
			q->pm->scanfemployee();
			q->pm->computeSalay();
			q->next=p->next;
			p->next=q;
			break;
		case 4:
			while(p->next!=NULL){
   
				p=p->next;
			}
			q=new list;
			if(q==NULL){
   
				cout<<"节点创建失败!";
				exit(0);
			}
			q->pf=new Floater;
			if(q->pf==NULL){
   
				cout<<"节点创建失败!";
				exit(0);
			}
			cout<<"请输入添加员工的信息:"<<endl;
			q->pf->scanfemployee();
			q->pf->computeSalay();
			q->next=NULL;
			p->next=q;
			break;
	}
	system("pause");
}
void function::search(list *head){
   
	list *p;
	p=head->next;
	int i;
	char searchname[10],a[10]=" ";
	cout<<"请输入要查找员工的姓名:";
	cin>>searchname;
	for(i=0;i<4;i++){
   
		switch(i){
   
			case 0:
				while(p->pw!=NULL){
   
					if(strcmp(searchname,p->pw->name)==0){
   
						cout<<"---员工信息---"<<endl;
						p->pw->printfemployee();
						system("pause");
						return;
					}
					p=p->next;
				}
				break;
			case 1:
				while(p->ps!=NULL){
   
					if(strcmp(searchname,p->ps->name)==0){
   
						cout<<"---员工信息---"<<endl;
						p->ps->printfemployee();
						system("pause");
						return;
					}
					p=p->next;
				}
				break;
			case 2:
				while(p->pm!=NULL){
   
					if(strcmp(searchname,p->pm->name)==0){
   
						cout<<"---员工信息---"<<endl;
						p->pm->printfemployee();
						system("pause");
						
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值