mis系统的编写与设计
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;
}
mis系统的编写与设计相关推荐
- 使用java开发简单的mis系统所需的技术
开发mis系统用到的技术 1. b/s架构:就broser/server,浏览器/服务器的说法.服务器端要运行tomcat,提供链接数据库服务供java代码读写数据,这个可以在eclipse中配置运行 ...
- 开发MIS系统需要的技术及其含义、作用
开发MIS系统需要哪些技术?各技术都有什么含义?什么作用? 1. b/s架构:就broser/server,浏览器/服务器的说法.服务器端要运行tomcat,提供链接数据库服务供java代码读写数据, ...
- web mis系统构建
开发mis系统用到的技术 1.b/s架构 b/s架构:就broser/server,浏览器/服务器的说法.服务器端要运行tomcat,提供链接数据库服务供java代码读写数据,这个可以在eclipse ...
- 基于Case的MIS系统 - 总账模块
基于Case的MIS系统 - 总账模块 (凭证单据) Case以减少开发量为旨,致力于MIS系统开发的产品.下面介绍如何在Case上以少量代码下开发总账模块中的凭证单据录入界面. 一.在Case中配置 ...
- 一个好的MIS系统应该考虑哪些内容
如果真正用心来做一套好的MIS系统应该考虑哪些内容呢? 大概想了一下,以后再慢慢补充: 一.界面友好 ⑴界面是可以灵活定制的. 实现难度:中级 做好基础类窗口,在窗口初始化的时候进行读取定制方案,一种 ...
- 系统架构师—软件架构设计(二)CS/BS/SOA/DSSA/ABSD
1.层次架构风格 1.1.两层C/S架构 客户端和服务器都有处理功能,相比较于传统的集中式软件架构,还是有不少优点的,但是现在已经不常用,原因有:开发成本较高.客户端程序设计复杂.信息内容和形式单一. ...
- 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.3 模型在设计中的作用...
本节书摘来自华章出版社<信息物理融合系统(CPS)设计.建模与仿真--基于 Ptolemy II 平台>一书中的第1章,第1.3节,作者:[美]爱德华·阿什福德·李(Edward Ashf ...
- c语言编程票务系统,C语言课程设计票务管理系统
C语言课程设计票务管理系统 C语言课程设计1西安交通大学城市学院C语言程序设计课程设计报告题目图书信息管理系统专业自动化班级自动化101姓名陈蕾完成日期2012年5月31日C语言课程设计2目录第一章项 ...
- B2C电子商务系统研发——促销引擎设计(一)
颜超敏的电子商务博客 随笔分类 -B2C电子商务系统研发 B2C电子商务系统研发--促销引擎设计(一)(Promotion Engine) 2012-10-29 22:40 by 颜超敏, 1281 ...
- 壁纸搜索系统/壁纸管理系统的设计与实现
摘 要 本论文主要论述了如何使用java语言开发一个壁纸搜索系统,系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发.在引言中,本人将论述壁纸搜索的当前背景以及系统开发的目的 ...
最新文章
- 记录一次自己调试代码的过程
- C# 调用C++ dll 返回char*调用方式(StringBuilder乱码)
- 域滤波:方框、高斯、中值、双边滤波
- CI框架 守护进程nohup让PHP以常驻内存的形式执行订阅消息
- java 线程 单例_多线程单例模式
- 【Python】提升Python程序性能的好习惯
- 信息学奥赛一本通 1077:统计满足条件的4位数 | OpenJudge NOI 1.5 26
- 如何防止app接口被别人调用
- SQL Server遍历表(临时表)
- cortex-m 2017 whitepaper (English and Chinese)
- Kotlin | Kotlin教程
- python 3.8.2安装教程
- GateWay 集成 Swagger
- Java判断时间在5分钟的之内方法
- LoRaWAN 帧计数机制及典型问题分析
- 从零开始大数据--Hadoop、HDFS、MapReduce、HBase、Hive
- SpringBoot:Whitelabel Error Page 404
- python快速实现NPV净现值计算
- 无人驾驶工业车辆企业「未来机器人」完成数亿元融资
- 华为苹果两家独霸中国高端手机市场,4000元以上份额合计近九成