C++实现教职工信息管理系统课程设计

本文实例为大家分享了C++实现教职工信息管理系统的具体代码,供大家参考,具体内容如下

/*教职工信息管理
基本要求:
定义职工(employee )类,其中至少包括姓名、性别、工号、电话、所在系部和职称。
功能要求:
       1、设计菜单实现功能选择;   
       2、输入功能:输入职工信息,并保存到文件中;
       3、查询功能:
           1)能够根据工号精确查询职工信息;
           2)能够根据姓名、科室查询职工信息
           3)分系部进行职称统计,计算各职称的人数
       4、根据职工的职称排序输出
       5、根据工号修改职工信息
       6、根据工号删除职工信息*/

#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
class employee
{
public:
    employee()
    {
    }
    employee(char na[50], char sex[50], int num, char tel[20], char off[50], char pos[50]) :m_number(num)
    {
        strcpy(m_name, na);
        strcpy(m_sex, sex);
        strcpy(m_telephone, tel);
        strcpy(m_office, off);
        strcpy(m_posting, pos);
    }
    int getnum()
    {
        return m_number;
    }
    char *getna()  //
    {
        return m_name;
    }

    char *getoff()
    {
        return m_office;
    }

    char *getposting()  //
    {
        return m_posting;
    }
    friend ostream& operator <<(ostream &os, const employee & s)
    {
        os << "姓名:" << s.m_name << "  性别:" << s.m_sex << "  工号:" << s.m_number << "  电话:" << s.m_telephone << "  所在系部:" << s.m_office << "  职称:" << s.m_posting << endl;
        return os;
    }
    friend istream& operator >>(istream &is, employee &s)
    {
        is >> s.m_name >> s.m_sex >> s.m_number >> s.m_telephone >> s.m_office >> s.m_posting;
        return is;
    }
    ~employee()
    {
    }
private:
    char m_name[50];
    char m_sex[50];
    int m_number;
    char m_telephone[20];
    char m_office[50];
    char m_posting[50];
};

菜单功能选择:

void menu()       //1)菜单功能选择
{
    cout << "*************************************   教职工信息管理系统   *************************************" << endl;
    cout << "**----------------------------------------------------------------------------------------------**" << endl;
    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 << "**                                 | * 0.关闭系统              |                                **" << endl;
    cout << "**                                 -----------------------------                                **" << endl;
    cout << "**----------------------------------------------------------------------------------------------**" << endl;
    cout << "**请输入序号使用对应的功能:(0,1,2,3,4,5,6,7,8)                                                  **" << endl;
    cout << "**************************************************************************************************" << endl;
}

输入信息:

void input()      //2)输入保存
    {
        fstream fs;
        int len;
        cout << "请输入教职工人数:" << endl;
        cin >> len;
        employee *emp = new employee[len];      //开辟空间,存教职工数据
        fs.open("guanli.dat", ios::out | ios::app | ios::binary);
        if (!fs)
            cout << "Open failed." << endl;
        else
        {
            cout << "Open succeedly." << endl;
            cout << "请输入教职工的姓名,性别,工号,电话,所在系部,职称:" << endl;
            for (int i = 0; i<len; i++)
            {
                cin >> emp[i];
                fs.write((char *)& emp[i], sizeof(emp[i]));     //fs<<emp[i]<<endl;二进制
            }
        }
        fs.close();
        delete[] emp;
    }

查询功能(根据工号):

void find1()       //3-1)查询---能够根据工号精确查询职工信息;
    {
        int num; 
        cout << "请输入教职工的工号:" << endl;
        cin >> num;
        fstream fs;
        fs.open("guanli.dat", ios::in | ios::binary);
        fs.seekg(0, ios::end);      //文件调到末尾
        int s = fs.tellg();      //告诉文件大小
        int n = s / sizeof(employee);      //计算职工人数
        fs.seekg(ios::beg);      //文件指针调到文件开头
        employee *emp = new employee[n];
        for (int i = 0; i<n; i++)
            fs.read((char *)& emp[i], sizeof(emp[i]));  //读入到内存
        fs.close();
        int a = -100;
        for (i = 0; i<n; i++)
        {
            if (num == emp[i].getnum())
            {
                cout << emp[i];
                a = i;
            }
        }
        if (a == -100)
            cout << "工号不正确!无此人!" << endl;
        delete[] emp;
    }

查询功能(根据姓名、科室):

void find2()       //3-2)查询---能够根据姓名、科室查询职工信息
{
    char na[50];
    char off[50];
    cout << "请输入教职工的姓名:" << endl;
    cin >> na;
    cout << "请输入教职工所属科室:" << endl;
    cin >> off;
    fstream fs;
    fs.open("guanli.dat", ios::in | ios::binary);
    fs.seekg(0, ios::end);
    int s = fs.tellg();
    int n = s / sizeof(employee);
    fs.seekg(ios::beg);
    employee *emp = new employee[n];
    for (int i = 0; i<n; i++)
        fs.read((char *)&emp[i], sizeof(emp[i]));
    fs.close();
    int a = -100;
    for (i = 0; i<n; i++)
    {
        if (strcmp(na, emp[i].getna())==0 && strcmp(off, emp[i].getoff())==0)
        {
            cout << emp[i] << endl;
            a = i;
        }
    }
    if (a == -100)
        cout << "名字或所属科室不正确!无此人!" << endl;
}

统计人数:

void find3()       //3-3)分系部进行职称统计,计算各职称的人数
    {
        char off[50], posting[50];
        cout << "请输入所查系部:" << endl;
        cin >> off;
        cout << "请输入所查职称:" << endl;
        cin >> posting;
        fstream fs;
        fs.open("guanli.dat", ios::in | ios::binary);
        fs.seekg(0, ios::end);
        int s = fs.tellg();
        int n = s / sizeof(employee);
        fs.seekg(ios::beg);
        employee *emp = new employee[n];
        for (int i = 0; i<n; i++)
            fs.read((char *)&emp[i], sizeof(emp[i]));
        fs.close();
        int sum = 0;
        for (i=0; i<n; i++)
        {
            if (strcmp(off, emp[i].getoff()) == 0 && strcmp(posting, emp[i].getposting()) == 0)
                sum++;
        }
        cout << "该部门此职称有" << sum << "人!" << endl;
        delete[] emp;
    }

排序输出:

void output()      //4)根据职工的职称排序输出
    {
        fstream fs;
        fs.open("guanli.dat", ios::in | ios::binary);
        fs.seekg(0, ios::end);
        int s = fs.tellg();
        int n = s / sizeof(employee);
        fs.seekg(ios::beg);
        employee *emp = new employee[n];
        for (int i = 0; i<n; i++)
            fs.read((char *)&emp[i], sizeof(emp[i]));
        fs.close();
        employee temp;
        for (int j = 0; j<n - 1; j++)
        {
            for (int k = 0; k<n - 1 - j; k++)
            {
                if (strcmp(emp[k].getposting(), emp[k + 1].getposting())>0)
                {
                    temp = emp[k];
                    emp[k] = emp[k + 1];
                    emp[k + 1] = temp;
                }
            }
        }
        for (i = 0; i<n; i++)
            cout << emp[i];
        delete[] emp;
    }

修改功能:

void modify()      //5)根据工号修改职工信息
{
    fstream fs;
    fs.open("guanli.dat", ios::in | ios::out | ios::binary);
    fs.seekg(0, ios::end);
    int s = fs.tellg();
    int n = s / sizeof(employee);
    fs.seekg(ios::beg);
    employee *emp = new employee[n];
    for (int i = 0; i<n; i++)
        fs.read((char *)&emp[i], sizeof(emp[i]));
    int num;
    cout << "请输入所修改的职工号:" << endl;
    cin >> num;
    int a=-100;
    for (i = 0; i < n; i++)
    {
        if (num == emp[i].getnum())
        {
            fs.seekp(sizeof(employee)*i);
            employee e;
            cout << "请输入要修改的教职工的姓名,性别,工号,电话,所属系部,职称:" << endl;
            cin >> e;
            fs.write((char *)&e, sizeof(employee));
            cout << "职工信息修改成功!" << endl;
            a = i;
        }
    }
    if(a==-100)
        cout << "工号不正确!无此人!" << endl;
        fs.close();
        delete[] emp;
    
}

删除功能:

void del()      // 6)根据工号删除职工信息
{
    fstream fs;
    fs.open("guanli.dat", ios::in | ios::out | ios::binary);
    fs.seekg(0, ios::end);
    int s = fs.tellg();
    int n = s / sizeof(employee);
    fs.seekg(ios::beg);
    employee *emp = new employee[n];
    for (int i = 0; i<n; i++)
    {
        fs.read((char *)&emp[i], sizeof(emp[i]));
    }
    fs.close();
    int num;
    cout << "请输入要删除的职工号:" << endl;
    cin >> num;
    int a=-100;
    for ( i = 0; i<n; i++)
    {
        if (num == emp[i].getnum())
            a = i;
    }
    if(a==-100)
        cout << "工号不正确!无此人!" << endl;
    fs.open("guanli.dat", ios::out | ios::binary);
    if (!fs)
        cout << "Open failed." << endl;
    else
    {
        cout << "Open succeedly." << endl;
        for (int i = 0; i<n; i++)
        {
            if (i == a)
                continue;
            else
                fs.write((char *)& emp[i], sizeof(emp[i]));
        }
    }
    if (a >= 0 && a <= n)
        cout << "删除成功!" << endl;
    else
        cout << "删除失败!" << endl;
    fs.close();
    fs.clear();
    delete[] emp;
}

查看功能:

void show()      //8.查看所有人员信息
    {
        fstream fs;
        fs.open("guanli.dat", ios::in | ios::binary);
        fs.seekg(0, ios::end);
        int s = fs.tellg();
        int n = s / sizeof(employee);
        fs.seekg(ios::beg);
        employee *emp = new employee[n];
        for (int i = 0; i<n; i++)
        {
            fs.read((char *)&emp[i], sizeof(emp[i]));
            cout << emp[i];
        }
        fs.close();
        delete[] emp;
    }

主函数:

 int main()
    {
        char flag = 'n';
        while (flag == 'n' || flag == 'N')    //由y/n控制循环
        {
            menu();
            int judge;
            cin >> judge;
            if (judge >= 0 && judge <= 8)
            {
                switch (judge)
                {
                case 0:
                    cout << "是否退出系统(y/n):" << endl;
                    cin >> flag;
                    break;
                case 1:
                    input();
                    break;
                case 2:
                    find1();
                    break;
                case 3:
                    find2();
                    break;
                case 4:
                    find3();
                    break;
                case 5:
                    output();
                    break;
                case 6:
                    modify();
                    break;
                case 7:
                    del();
                    break;
                case 8:
                    show();
                    break;
                default:
                    break;
                }
            }
            else
                cout << "输入错误,请重新输入!" << endl;
            cout << "------------------------------------------Press any key to continue!------------------------------" << endl;
            getchar();
            getchar();
            system("cls");
        }
        return 0;
    }

运行主界面:(其余的图就不图啦)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++实现简单的职工信息管理系统

    功能主模块描述 模块一:增加人员函数Add():增加职工基本信息. 模块二:删除人员函数Delete():删除指定的职工的基本信息以及薪酬. 模块三:修改人员函数Modify():修改指定的职工基本信息. 模块四:查询职工信息函数Search():查询指定的职工信息以及薪酬. 模块五:排序职工信息函数Sort():职工信息排序功能实现 模块六:基础数据设置函数Set():设置五类职位的基本薪酬. 模块七:数据存盘,载入函数Save()以及Load():储存职工基本信息,薪酬以及五类职位的基本薪酬

  • C++实现高校人员信息管理系统

    高校人员信息管理系统设计,供大家参考,具体内容如下 一.问题描述及功能要求 1.问题描述 某高校有四类员工:教师.实验员.行政人员,教师兼行政人员:共有的信息包括:编号.姓名.性别.年龄等.其中,教师还包含的信息有:所在系部.专业.职称:实验员还包含的信息由:所在实验室.职务:行政人员还包含的信息有:政治面貌.职称等. 2.功能要求 (1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复

  • C++实现学生信息管理系统

    C++的课设作业,分享出来,希望给初学者一些帮助. 该系统主要用到C++的继承,虚函数.所有学生的信息保存在一个异质链表中,并且链表也进行了封装 课设题目 设计一个学生管理系统,要求如下: 1.学生来自英语系,数学系.计算机系: a) 每个学生的公共信息部分包括:学号.姓名.年龄.系别,高数成绩.英语成绩.体育成绩: b) 英语系学生有综合英语.口语等课程成绩: c) 数学系学生有实变函数.泛函分析.微分几何等课程成绩: d) 计算机系学生有计算机组成原理.计算机体系结构.汇编语言等课程成绩.

  • linux下C/C++学生信息管理系统

    一.简介 大学期间用vc++开发的简单的学生信息管理系统,主要有添加学生信息.删除学生信息.修改学生信息.查询学生信息.显示学生信息.综合统计(各课程平均成绩和合格率).总分排序和退出系统.设计: 二.详解 1.代码 (1)main.cpp #include<iostream> #include<fstream> #include<iomanip> //使用setw()函数 #include<windows.h> //使用system()函数 #includ

  • C++实现简单的信息管理系统

    本文为大家分享C++实现简单的信息管理系统,小编之前在学习的时候也要做一些管理系统,在网上查了许多资料,现在我把资料分享给大家,希望能够帮助到大家. #include <stdio.h> #include <stdlib.h> #include "file.h" void savaList(Node *head)/**把用户录入的数据存储到文件里面去方便下次读取*/ { FILE *fp=fopen("data\\data.txt" ,&qu

  • C++实现学生考勤信息管理系统

    学生考勤信息管理系统记录了学生的缺课情况,它包括: 缺课日期.第几节课.课程名称.学生姓名.学生学号.缺课类型(迟到.请假及旷课).系统具有以下功能: 1).录入学生的缺课记录: 2).修改某个学生的缺课记录: 3).查询某个学生的缺课情况: 4).统计 旷课学生姓名及旷课次数,按旷课次数由多到少排序: 5).统计 有学生旷课的课程及旷课人次(每次课时累加),按旷课人次由多到少排序: 重新修改了下,之前的4,5功能未实现. #include<iostream> #include<fstr

  • C++使用文件实现学生信息管理系统

    C++实现文件实现学生信息管理系统,供大家参考,具体内容如下 功能如下: 添加学生信息(学生添加完成将直接保存进文件) 成绩信息(c语言,大学英语,高等数学) 个人信息(姓名.性别.学号.年龄) 显示学生信息 查询学生信息 按学号查询 按名字查询 按学号删除学生信息 修改学生信息 按学号对学生进行排序 类的设计: 表示成绩的Score类: class Score{ public: float cLauage;//c语言成绩 float math;//高数成绩 float english;//英语

  • C++学生信息管理系统

    本文实例为大家分享了C++学生信息管理系统源码,供大家参考,具体内容如下 1. tea_list.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include"teacher.h" int sq_tea ; PTEA head = NULL ; FILE *fp ; int tea_llopen(const char* path)//打开文件 { fp=fopen(path,&q

  • C++实现景区信息管理系统

    本文实例为大家分享了C++实现景区信息管理系统的具体代码,供大家参考,具体内容如下  1.1 建立主程序应用菜单选项 主程序应用菜单选项包含所实现的所有功能,并且对选项采用数字标识进行选择,对其他错误输入可以进行判别,提示输入错误. 1.2 导游线路图的创建级景区分布图的输出 用邻接链表存储景点分布图的信息,(带权无向)图的邻接链表.输出景区景点分布图(邻接矩阵).图中边的权值∞用32767表示. 1.3  输出导游线路图 景区旅游信息管理系统中制订旅游景点导游线路策略,首先通过遍历景点,给出一

  • C++利用链表实现图书信息管理系统

    C++利用链表实现一个简单的图书信息管理系统,供大家参考,具体内容如下 (1)图书信息包括ISBN号.书名.作者名.价格和数量等: (2)系统的主要功能包括:图书信息的创建.输出图书信息.查询图书信息.增加图书信息.删除图书信息. #include <stdio.h> #include <stdlib.h> #include <string.h> //创建结构体及其成员 typedef struct Node { int num;//编号 char name[20];/

随机推荐