(一) 题目内容及简介
1.课题来源
课题名称和来源,主要介绍为何选择此题目来开展课程设计,此课题的开展能体现面向对象程序设计的哪些特征?
课题题目 : 公司职工管理系统
课题来源 : 课程设计任务书
选择原因 : 内容描述简短,可以按照自己意愿定义其功能。
显现特性 : 三要素,封装、继承、多态。
2.内容简介
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。提供以下功能:
1)系统以菜单方式工作
2)职工信息录入功能(职工信息用文件或者数据库保存)
3)职工信息浏览功能 --输出
4)查询功能:(至少一种查询方式) 按姓名查询 按学历查询等
5)职工信息删除、修改功能,并将删除信息存入另外备份文件
(1) 实现职工信息的注册、增加、删除(包括把删除信息备份)、修改、查找、排序、文件读入与读出等等。
(2) 其余功能可以根据实际情况添加。
(3) 在实现功能的同时,利用类之间的关系体现继承和多态。
(二) 概要设计
1.结构图
2.内容分析
1.界面登录。使用者必须持有正确的用户名和账号才能正确登录。
2.身份选择。使用者可以选择老板和管理员然后对职工信息进行管理,当然不同的身份对 应的功能也不一样,比如老板具有所有功能,而管理员只有注册、增加、排序、查询。
3.功能选择。使用者可以根据编号对应的功能进行选择,内容包括职工信息的查询、增加、排序、注册等等。
4.可以根据自己的需求,添加自己想要的功能。
(三) 详细设计
1.类别
1.成员类(class staff)
解释:定义的信息以及指针全为公用类中。
2.纯虚类(class function)
解释:
- 定义纯虚类,使用this 指针创建头结点,然后在建立头节点的时候取出头结点。
- 定义保护类,能被同类成员调用,同时也能被类的派生类调用。
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");