mis系统的编写与设计

来源:互联网 发布:白雪racemenu捏脸数据 编辑:程序博客网 时间:2024/05/16 07:23

mis系统

一、实验目的

●熟悉文件流

●熟练掌握类的封装,继承与多态的运用

二、实验实验环境:

 在Code::Blocks编辑器下实现c++编写

三、实验内容

实现一个mis系统

1. 要求至少有两类用户

2.  可以登录后有两类用户

3.利用面向对象技术,充分利用继承和多态及文件流

四、实验前的分析

    所谓MIS(管理信息系统--Management InformationSystem)系统,主要指的是进行日常事物操作的系统。这种系统主要用于管理需要的记录,并对记录数据进行相关处理。

   过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。

    多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。C++中,实现多态有以下方法:虚函数,抽象类,重载,覆盖,模版。

   文件流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存网络数据等多种数据形式。

五、实验步骤

1.新建一个mis.cpp文件用于实现员工对基本信息的查询,老板对信息的管理,员工只具有看的权限,老板在具有看的权限的同时还具有修改和删除的功能.

2.完善登陆界面,此界面包括用户注册,普通用户登录,管理员登录,以及退出部分

cout<<"               简单信息管理系统  "<<endl;

         cout<<"    1. 用户注册 "<<endl;

         cout<<"    2. 用户登录 "<<endl;

         cout<<"    3. 管理员登录 "<<endl;

         cout<<"    4. 退出系统 "<<endl;

         cout<<"   其它:终止系统"<<endl;

         cout<<"请输入操作项:";

         cin>>key;

3.完善注册界面

    cout<<"输入姓名:"; cin>>a;

    cout<<"输入密码:"; cin>>b;

    cout<<"输入性别:"; cin>>c;

    cout<<"输入年龄:"; cin>>d;

    cout<<"输入职业:"; cin>>f;

    b1.Setdata(a,b,c,d,f);

    file3.open("message.dat",ios::app|ios_base::app);//增补方式打开文件

   file3.write((char*)&b1,sizeof(b1));

file3.close();

4.完善普通用户登录界面

    cout<<"输入你的名子:"; cin>>b;

    cout<<"输入你的密码:";cin>>c;

   file1.open("message.dat",ios::in | ios::in);//按读方式打开文件

    if (!file1)

    {

        cout<<"文件打开失败!"<<endl;

        exit(0);

    }

    while(!file1.eof())

    {

        int n;

        file1.read((char*)&b1,sizeof(Worker));

        n=file1.gcount();

        if(n==sizeof(Worker))

        {

            if((strcmp(b1.GetName(),b)==0)&&(strcmp(b1.Getpassword(),c)==0))//名字和密码同时正确才能显示信息

            {

                k=0;

                cout<<"登录成功"<<endl;

                while(loop)

                {

               cout<<"               用户信息管理系统  "<<endl;

                cout<<"    1. 特定用户基本信息查询 "<<endl;

               cout<<"    2. 返回到主界面 "<<endl;

               cout<<"   其它:返回到主界面"<<endl;

                cout<<"请输入操作项:";

                cin>>key;

}

}

5.完善管理员登录界面

cout<<"请输入管理员用户名:"<<endl;

    cin>>adminName;

    cout<<"请输入管理员密码:"<<endl;

    cin>>adminPassword;

    if (strcmp(ADNAME,adminName) == 0)    //用户名输入正确

    {

 

        if (strcmp(ADPASSWORD,adminPassword) ==0)

        {

            cout<<"登录成功!3秒后 自动返回管理员操作界面!请稍后......"<<endl;

        while(loop)

        {

             cout<<"               简单信息管理系统  "<<endl;

             cout<<"    1. 查看用户信息"<<endl;

             cout<<"    2. 修改信息"<<endl;

             cout<<"    3. 删除信息"<<endl;

             cout<<"    4. 返回到主界面"<<endl;

             cout<<"   其它:返回到主界面"<<endl;

             cin>>key;

6.保存运行结果

主登录界面



用户注册界面


普通用户登录界面


管理员登录界面

七、实验小结及问题分析

1.此软件通过运用面向对象,通过类实现数据的继承,封装与继承,并用文件流对数据进行储存与提取,从而构建了一个简单的信息管理系统,同时设置不同的登录界面,来限制不同用户的访问权限.

2.在用类的对数据进行封装时,设置私有和公有访问权限,限制私有访问,通过公有继承实现对同一功能的继承使用.

3.通过文件流对数据进行存储和提取时,有不同的读取方式

  ofstream outFile(“clients.dat”,ios::out|ios::binary); //打开文件

    ofstream 是 fstream中定义的类

    outFile 是我们定义的ofstream类的对象

    “clients.dat”是将要建立的文件的文件名

    ios::out 是打开并建立文件的选项

    ios:out    输出到文件, 删除原有内容

    ios::app  输出到文件, 保留原有内容,总是在尾部添加

    ios::ate   输出到文件, 保留原有内容,可以在文件任意位置添加

    ios::binary 以二进制文件格式打开文件

八、详细代码

#include <cstdlib>#include<stdlib.h>#include <iostream>#include<cstring>#include<windows.h>//Sleep函数头文件#include<fstream>//文件流头文件using namespace std;#define ADNAME            "chuchu"     // 管理员用户名#define ADPASSWORD        "123456"    //管理员密码class Worker{  private:    char Name[20];//用户名    char password[20];//登录密码    char sex[20];//性别    int age;//年龄    char profession[20];//职业  public:    char* GetName(){return Name;}//返回名字    char* Getpassword(){return password;}//返回密码值    void Setdata(char *a,char *b,char *c,int d,char *f)//存入数据    {        strcpy(Name,a);        strcpy(password,b);        strcpy(sex,c);        age=d;        strcpy(profession,f);    }    void show()//显示数据    {        cout<<"Name:"<<Name<<"  password:"<<password<<"  sex:"<<sex<<"  age="<<age<<"  profession:"<<profession<<endl;    }    void changemessage();};Worker mess;//创建Worker的对象class Boss:public Worker{  public:    void lookmessage();    void changemessage();    void deletemessage();};void Boss::lookmessage()//查看信息{    Worker b1;    int loop=1,key=1;    char b[20],c[20];    ifstream  file1;    cout<<"输入要查找的人名:"; cin>>b;    file1.open("message.dat",ios::in | ios::in);//按读方式打开文件    if(!file1)    {        cout<<"文件打开失败!"<<endl;        exit(0);    }    while(!file1.eof())    {        int n;        file1.read((char *)&b1,sizeof(Worker));        n=file1.gcount();        if(n==sizeof(Worker))        {            key=0;            if(strcmp(b1.GetName(),b)==0)//显示书的信息            b1.show();        }    }    if(key)    cout<<"你所查找的信息不存在"<<endl;    file1.close();}void Boss::changemessage()//修改信息{    int loop=1,key;    char a[20],b[20],c[20],f[20],e[20];    int d;    bool flag=false;    //ifstream  file1;    cout<<"输入要查找的人名:";    cin>>e;    fstream file1("message.dat",ios::in | ios::out);//创建向文件读取数据的对象    if(!file1)    {        cout<<"读取文件打开失败!"<<endl;        exit(0);    }    while(file1.read((char*)&mess,sizeof(mess)))  //读取文件数据,直到文件读到末尾    {        if(strcmp(mess.GetName(),e)==0)        {            flag  = true;            mess.show();            cout<<endl;            cout<<"请重新输入姓名:"; cin>>a;            cout<<"请重新输入密码:"; cin>>b;            cout<<"请重新输入性别:"; cin>>c;            cout<<"请重新输入年龄:"; cin>>d;            cout<<"请重新输入职业:"; cin>>f;            //将修改的信息赋值给类相对应的数据            mess.Setdata(a,b,c,d,f);            file1.seekp(-1*(off_t)sizeof(mess),ios_base::cur);  //将指针从当前位置移一条            file1.write((char*)&mess,sizeof(mess));              //将数据写入文件            cout<<"恭喜您!信息修改成功!2秒后返回操作界面......"<<endl;        }      }    if (flag == false)    {        cout<<"您查找的信息不存在!"<<endl;    }    file1.close();//关闭文件}void Boss::deletemessage()//修改信息{    int loop=1,key;    char e[20];    bool flag=false;    cout<<"输入要查找的人名:";    cin>>e;    fstream file1("message.dat",ios::in | ios::out);//创建向文件读取数据的对象    if(!file1)    {        cout<<"读取文件打开失败!"<<endl;        exit(0);    }    while(file1.read((char*)&mess,sizeof(mess)))  //读取文件数据,直到文件读到末尾    {        if(strcmp(mess.GetName(),e)==0)        {            flag  = true;            char a[20]="",b[20]="",c[20]="",f[20]="";            int d=0;            mess.Setdata(a,b,c,d,f);            file1.seekp(-1*(off_t)sizeof(mess),ios_base::cur);  //将指针从当前位置移一条            file1.write((char*)&mess,sizeof(mess));              //将数据写入文件            cout<<"恭喜您!信息删除成功!2秒后返回操作界面......"<<endl;        }      }    if (flag == false)    {        cout<<"您查找的信息不存在!"<<endl;    }    file1.close();//关闭文件}void LoginIterface()//用户注册界面{    cout<<"               用户注册  "<<endl;    Worker b1;    ofstream  file3;    char a[20],b[20],c[20],f[20];    int d;    cout<<"输入姓名:"; cin>>a;    cout<<"输入密码:"; cin>>b;    cout<<"输入性别:"; cin>>c;    cout<<"输入年龄:"; cin>>d;    cout<<"输入职业:"; cin>>f;    b1.Setdata(a,b,c,d,f);    file3.open("message.dat",ios::app|ios_base::app);//增补方式打开文件    file3.write((char*)&b1,sizeof(b1));    file3.close();    cout<<"注册成功!"<<endl;}void  UserInterface()//普通用户登录界面{    Worker b1;    int loop=1,key,k=1;    char b[20],c[20];    ifstream  file1;    cout<<"输入你的名子:"; cin>>b;    cout<<"输入你的密码:";cin>>c;    file1.open("message.dat",ios::in | ios::in);//按读方式打开文件    if (!file1)    {        cout<<"文件打开失败!"<<endl;        exit(0);    }    while(!file1.eof())    {        int n;        file1.read((char *)&b1,sizeof(Worker));        n=file1.gcount();        if(n==sizeof(Worker))        {            if((strcmp(b1.GetName(),b)==0)&&(strcmp(b1.Getpassword(),c)==0))//名字和密码同时正确才能显示信息            {                k=0;                cout<<"登录成功"<<endl;                while(loop)                {                cout<<"               用户信息管理系统  "<<endl;                cout<<"    1. 特定用户基本信息查询 "<<endl;                cout<<"    2. 返回到主界面 "<<endl;                cout<<"   其它:返回到主界面"<<endl;                cout<<"请输入操作项:";                cin>>key;                switch (key)                {                    case 1:                        system("cls");//清屏                        b1.show(); //特定用户基本信息查询                        break;                    case 2:                        loop=0;                        break;                    default:                        loop=0;                        break;                 }                 }            }        }    }    if(k)cout<<"登录错误"<<endl;}void AdminInterface()//管理员登陆界面{    Boss b1;    char adminName[20],adminPassword[20];    int i=0,loop=1,key;    cout<<"请输入管理员用户名:"<<endl;    cin>>adminName;    cout<<"请输入管理员密码:"<<endl;    cin>>adminPassword;    if (strcmp(ADNAME,adminName) == 0)    //用户名输入正确    {        if (strcmp(ADPASSWORD,adminPassword) == 0)        {            cout<<"登录成功!3秒后 自动返回管理员操作界面!请稍后......"<<endl;        while(loop)        {             cout<<"               简单信息管理系统  "<<endl;             cout<<"    1. 查看用户信息 "<<endl;             cout<<"    2. 修改信息 "<<endl;             cout<<"    3. 删除信息 "<<endl;             cout<<"    4. 返回到主界面 "<<endl;             cout<<"   其它:返回到主界面"<<endl;             cin>>key;             switch (key)             {                case 1:                    system("cls");//清屏                    b1.lookmessage(); //用户注册                    break;                case 2:                    system("cls");                    b1.changemessage();//管理员界面                    break;                case 3:                    system("cls");                    b1.deletemessage();//管理员界面                    break;                case 4:                    loop=0;                    break;                default:                    loop=0;                    break;            }         }         }        else        {            cout<<"密码输入错误!3秒后 自动返回主界面重新登录......"<<endl;        }    }    else    {        cout<<"用户名输入错误!3秒后 自动返回主界面重新登录......"<<endl;    }}int main(){    system("color 1D"); //颜色的设置    int loop=1,key;    while(loop)    {         cout<<"               简单信息管理系统  "<<endl;         cout<<"    1. 用户注册 "<<endl;         cout<<"    2. 用户登录 "<<endl;         cout<<"    3. 管理员登录 "<<endl;         cout<<"    4. 退出系统 "<<endl;         cout<<"   其它:终止系统"<<endl;         cout<<"请输入操作项:";         cin>>key;         switch (key)         {            case 1:                system("cls");//清屏                LoginIterface(); //用户注册                break;            case 2:                system("cls");                UserInterface();//用户登录界面                break;            case 3:                system("cls");                AdminInterface();//管理员界面                break;            case 4:                loop=0;                cout<<"byebye";                break;            default:                loop=0;                cout<<"byebye";                break;         }     }    return 0;}


0 0
原创粉丝点击