目录

A:项目背景 & 业务功能

B:业务功能 & 项目安排

分角色管理设计

管理员角色

医生角色

用户角色

整个系统业务

项目安排

效果展示

一:程序主入口

main.cpp

二:控件基类,窗口基类,标签,按钮,编辑框类的封装

1.CtrBase.h .cpp【控件基类】

2.CWinBase.h .cpp【窗口基类】

3.CLabel.h .cpp【标签类】

4.CEdit.h .cpp【编辑框类】

5.CButton.h .cpp【按钮类】

三:系统不同使用角色类的设计

a.相关类的设计[用户 医生 管理员][管理员默认 账户1000 密码123456]

6.CUser.h .cpp【用户类】

7.CDoctor.h .cpp【医生类】

8.COutpatient.h .cpp【门诊类】

9.CDepartment.h .cpp【科室类】

b.数据存储:数据准备类 [读,写文件的相关操作]

10.CData.h .cpp【公共数据类】


本次项目工程量较大,源码分四篇文章呈现,另外三篇如下

C++项目-门诊预约系统2

C++项目-门诊预约系统3

C++项目-门诊预约系统4

A:项目背景 & 业务功能

本系统是一个单机版的门诊预约应用程序,用C/C++语言编写,在window10环境下运行。模拟医院的门诊预约,实现普通用户注册登录,管理员和医生的账号密码验证登录;普通用户门诊预约、查看就诊信息,取号;医生查看就诊信息、医生填写就诊信息记录;管理员进行用户查询,医生查询,科室查询,数据统计以及导出等功能

B:业务功能 & 项目安排

分角色管理设计

管理员角色

医生角色

用户角色

整个系统业务

项目安排

1.需求分析 进度规划

2.控件基类 窗口基类 标签 按钮 编辑框类的封装

3.相关类的设计(用户 医生[管理员] 门诊 科室)

4.数据存储:数据准备类(读、写文件相关操作)

5.程序主界面绘制、主界面功能选择,实现界面跳转

6.管理员主界面绘制、管理员主界面功能选择,实现界面跳转

7.医生主界面绘制以及功能选择,实现界面跳转

8.用户主界面绘制以及功能选择,实现界面跳转

9.注册用户功能实现(只有普通用户可以注册)

10.登录功能(成功后根据角色进入到不同的界面) 、 退出

11.用户个人中心[信息完善功能实现]、用户个人中心[修改密码功能实现]、用户预约主界面绘制,功能选择以及界面跳转

12.预约门诊功能实现、新增医生信息

13.管理员用户查询界面绘制[表格设计 可以做表格类]、用户查询[精确查询 & 模糊查询]

14.用户查询[数据分页显示] 、医生查询功能实现、科室查询

15.医生信息修改、取号界面绘制以及功能实现、取消预约

16.用户就诊信息查询、医生就诊信息查询、就诊记录填写

17.【选做】新增科室、数据统计功能、导出统计数据、医生个人中心的密码修改

效果展示

程序运行,没有数据会准备数据,创建并写入文件中

用户 user.txt 文件初始化数据如下

医生 doctor.txt 文件初始化数据如下

门诊 outpatient 文件初始化数据如下

科室 department 文件初始化数据如下

在程序运行后,进入程序主界面

以管理员角色,使用该系统 操作如下【用户、医生角色操作在之后文章阐述】

账户 1000  密码 123456  角色选择1 ,登录成功给出提示并且跳转界面

在用户管理中,可以模糊查询

用户管理中,也可以精确查询

刚进入用户管理中,可以看到系统用户所有信息,左右按键实现表格翻页操作

管理员 对医生的管理 如下

可以查询医生信息,左右按键实现翻页,也可以实现模糊查询、精确查询

如下操作展示的是翻页操作

可以对医生人员新增,数据信息在文件中保存,操作如下

可以看到黄医生的信息,成功写入文件

管理员可以对医生信息修改,如修改医生职位,操作如下

如 黄医生 职位从主任医师调整为副主任,在文件中也已成功修改数据

管理员可以进行科室管理,包括有左右按键翻页、精确查询以及模糊查询

查询操作如下

翻页操作如下

一:程序主入口

main.cpp

#pragma warning(disable :4786)
#include<iostream>
using namespace std;
#include "CLabel.h"//标签类
#include"CEdit.h"//编辑框类
#include"CButton.h"//按钮类
#include"CTools.h"//工具类
#include"CtrBase.h"//控件基类
#include"CData.h"//公共数据类
#include<stdlib.h>
#include<windows.h>
#include<vector>
#include<map>
#include<string>
#include"CMainWin.h"//程序主界面
#include"CRegisterWin.h"//注册界面
#include"CLoginWin.h"//登陆界面
#include"CAdminmainWin.h"//管理员主界面
#include"CDoctormainWin.h"//医生主界面
#include"CUsermainWin.h"//用户主界面
#include"CUserpersonalWin.h"//用户个人界面
#include"CUserinformationWin.h"//用户信息完善界面
#include"CUserpwdWin.h"//用户密码修改界面
#include"CUserbookmainWin.h"//用户预约主界面
#include"CUserbookpatientWin.h"//用户预约门诊界面
#include"CUserbookvaccineWin.h"//用户预约疫苗界面
#include"CUservaccinationWin.h"//用户疫苗接种界面
#include"CUsertakenumWin.h"//用户取号界面
#include"CAdmindoctoraddWin.h"//管理员新增医生界面
#include"CAdmindoctorWin.h"//管理员管医生界面
#include"CAdmindoctorqueryWin.h"//管理员医生查询界面
#include"CAdminuserqueryWin.h"//管理员用户查询界面
#include"CAdmindepartmentWin.h"//管理员科室查询界面
#include"CUsermedicalinfoWin.h"//用户的就诊信息界面
#include"CDoctormedicalinfoWin.h"//医生的就诊信息界面
#include"CDoctormedicalrecWin.h"//医生的就诊信息中就诊记录界面
#include"CAdmindoctormodifyWin.h"//管理员修改医生信息界面
#include"CUserorderWin.h"//用户的取号界面
#include"CUsercancelWin.h"//用户的取消预约界面
int main()
{CData::userInit();  //用户数据初始化CData::doctorInit();//医生数据初始化CData::outpatientInit();//门诊数据初始化CData::departmentInit();//科室数据初始化vector<CWinBase *> winVector;winVector.push_back(new CMainWin(3,3,25,23));//0 程序主界面winVector.push_back(new CRegisterWin(3,3,25,25));//1  注册界面winVector.push_back(new CLoginWin(3,3,25,25));//2  按角色登录界面winVector.push_back(new CAdminmainWin(3,3,25,25));//3  管理员主界面winVector.push_back(new CDoctormainWin(3,3,25,25));//4  医生主界面winVector.push_back(new CUsermainWin(3,3,25,25));//5  用户主界面winVector.push_back(new CUserpersonalWin(3,3,25,25));//6  用户个人界面winVector.push_back(new CUserinformationWin(3,3,25,25));//7  用户信息完善界面winVector.push_back(new CUserpwdWin(3,3,25,25));//8  用户密码修改界面winVector.push_back(new CUserbookmainWin(3,3,25,25));//9  用户预约主界面winVector.push_back(new CUserbookpatientWin(3,3,35,30));//10  用户预约门诊界面winVector.push_back(new CUserbookvaccineWin(3,3,25,30));//11  用户预约疫苗界面winVector.push_back(new CUservaccinationWin(3,3,35,20));//12  用户疫苗接种界面winVector.push_back(new CUsertakenumWin(3,3,59,35));//13  用户的取号界面winVector.push_back(new CAdmindoctoraddWin(3,3,35,35));//14 管理员新增医生界面winVector.push_back(new CAdmindoctorWin(3,3,25,25));//15 管理员管理医生界面winVector.push_back(new CAdmindoctorqueryWin(3,3,35,35));//16 管理员查询医生界面winVector.push_back(new CAdminuserqueryWin(3,3,35,35));//17 管理员查询用户界面winVector.push_back(new CAdmindepartmentWin(3,3,45,35));//18 管理员查询科室界面winVector.push_back(new CUsermedicalinfoWin(3,3,55,35));//19 用户的就诊信息界面winVector.push_back(new CDoctormedicalinfoWin(3,3,45,35));//20 医生的就诊信息界面winVector.push_back(new CDoctormedicalrecWin(3,3,35,25));//21 医生的就诊信息的就诊记录界面winVector.push_back(new CAdmindoctormodifyWin(3,3,35,25));//22 管理员修改医生信息界面winVector.push_back(new CUserorderWin(3,3,35,25));//23 用户的取号界面winVector.push_back(new CUsercancelWin(3,3,35,25));//24 用户的取消预约界面int winIndex = 0;  //默认显示主界面 初始化为0while(1){//延时清屏Sleep(1000);system("cls");//显示窗口winVector[winIndex]->showWindow();//窗口运行winIndex = winVector[winIndex]->WinRun();}return 0;
}

二:控件基类,窗口基类,标签,按钮,编辑框类的封装

1.CtrBase.h .cpp【控件基类】

#ifndef CTRBASE_H
#define CTRBASE_H
//宏定义 控件
#define LABEL 1//标签
#define EDIT 2//编辑框
#define BUTTON 3//按钮//控件基类
class CtrBase
{
public:CtrBase();//默认构造~CtrBase();//析构CtrBase(int x,int y,int w,int h,char *pcontent,int type);//带参构造virtual void show()=0;//显示控件函数-纯虚函数//get方法 提供类外访问公共接口int getX();//起始x坐标int getY();//起始y坐标int getW();//宽int getH();//高char *getContent();//控件内容int getType();//控件类型virtual void backSpace();//回删函数virtual void keyListen(int key);//控件监听函数-虚函数
protected://派生类可以访问 父类protected修饰的属性int startX;//起始x坐标int startY;//起始y坐标int width;//宽int height;//高char content[40];//控件内容int ctrlType;//控件类型
};#endif
#include"CtrBase.h"//控件基类
#include"CTools.h"//工具类
#include<iostream>
using namespace std;//控件基类默认构造
CtrBase::CtrBase()
{//初始化数据this->startX = 0;this->startY = 0;this->width = 0;this->height = 0;memset(content,'\0',sizeof(content));this->ctrlType = 0;
}//控件基类 析构
CtrBase::~CtrBase()
{cout<<"CtrBase析构函数"<<endl;
}//控件基类带参构造
CtrBase::CtrBase(int x,int y,int w,int h,char *pcontent,int type)
{//属性赋值this->startX = x;this->startY = y;this->width = w;this->height = h;//内存的初始化memset(content,'\0',sizeof(content));strcpy(this->content,pcontent);this->ctrlType = type;
}/*纯虚函数
void CtrBase::show() //基类 可以不写 纯虚
{CTools::gotoxy(this->startX,this->startY);cout<<this->content<<endl;
}
*///为类对象访问提供公共接口【提供类外访问公共接口】//获取起始x坐标
int CtrBase::getX()
{return this->startX;
}
//获取起始y坐标
int CtrBase::getY()
{return this->startY;
}
//获取宽
int CtrBase::getW()
{return this->width;
}
//获取高
int CtrBase::getH()
{return this->height;
}
//获取控件内容
char* CtrBase::getContent()
{return this->content;
}
//获取控件类型
int CtrBase::getType()
{return this->ctrlType;
}//由子类自己来实现各自的实现方法
//控件监听函数
void CtrBase::keyListen(int key)
{//重定义 基类有写方法 若是子类也有方法 优先走子类方法//虚函数 里面没有任何内容[也可以写] 但优先走子类
}//回删函数 虚函数
void CtrBase::backSpace()
{//重定义 基类有写方法 若是子类也有方法 优先走子类方法//虚函数 里面没有任何内容[也可以写] 但优先走子类
}

2.CWinBase.h .cpp【窗口基类】

#ifndef CWINBASE_H
#define CWINBASE_H
#include"CtrBase.h"//控件基类//窗口基类
class CWinBase
{
public:CWinBase();//默认构造CWinBase(int x,int y,int w,int h);//带参构造virtual  ~CWinBase();//虚 虚构void addControl(CtrBase *ctrl);//添加控件函数virtual int WinRun();//窗口运行函数 虚函数virtual void showWindow();//窗口显示函数 虚函数virtual int doAction()=0;//含有虚函数的类叫抽象类[按键响应执行函数]
protected://基类属性 protected 派生类可以访问int startX;//起始xint startY;//起始yint width;//宽int height;//高int ctrlCount;//控件个数//控件数组长度必须足够,否则下标越界 界面显示不完全 程序异常结束CtrBase *ctrlArr[30];//数组下标是否越界值得注意int focusIndex;  //按下回车键按钮的下标
};#endif
#include"CWinBase.h"//窗口基类
#include"CTools.h"//工具类
#include<iostream>
using namespace std;//默认构造
CWinBase::CWinBase()
{//初始化数据this->startX = 0;this->startY = 0;this->width = 0;this->height = 0;this->ctrlCount = 0;
}//带参构造
CWinBase::CWinBase(int x,int y,int w,int h)
{//属性赋值this->startX = x;this->startY = y;this->width = w;this->height = h;this->ctrlCount = 0;
}//析构[控件对象指针 创建后需要释放]
//虚析构 在声明是加virtual虚标识 定义时不加
CWinBase::~CWinBase()
{for(int i=0;i<this->ctrlCount;i++){delete this->ctrlArr[i];}
}//添加控件
void CWinBase::addControl(CtrBase *ctrl) //统一基类指针进行接收
{//派生类指针赋值给基类指针 范围缩小了this->ctrlArr[this->ctrlCount++] = ctrl;
}//显示整个窗口及控件
void CWinBase::showWindow()
{//显示大框  显示每个控件CTools::paintWindow(this->startX,this->startY,this->width,this->height);for(int i=0;i<this->ctrlCount;i++){//基类指针操作派生类成员函数//虚函数 让每一个子类的函数都能够去调用//通过基类指针 或 引用调用虚函数 触发动态绑定this->ctrlArr[i]->show();  //执行基类的show函数  }//窗口界面 显示时间char buf[15]={0};strcpy(buf,CTools::showTime());CTools::gotoxy(this->startX+this->width+6,10);cout<<buf<<endl;
}//窗口运行函数
int CWinBase::WinRun()
{int i=0,key=0;for(i=0;i<this->ctrlCount;i++){if(this->ctrlArr[i]->getType()==EDIT||this->ctrlArr[i]->getType()==BUTTON){CTools::gotoxy(this->ctrlArr[i]->getX()+2,this->ctrlArr[i]->getY()+1);break;}}while(1){key=CTools::getkey();switch(key){case KEY_DOWN://向下按键  查找下一个编辑框 按钮i++;//按键数组下标越界if(i==this->ctrlCount){i=0;//为了避免下标越界 从头开始对控件结构体数组找编辑框 按钮 }for(;i<this->ctrlCount;i++){if(this->ctrlArr[i]->getType()==EDIT){CTools::gotoxy(this->ctrlArr[i]->getX()+2+strlen(this->ctrlArr[i]->getContent()),this->ctrlArr[i]->getY()+1);break; }else if(this->ctrlArr[i]->getType()==BUTTON){CTools::gotoxy(this->ctrlArr[i]->getX()+(this->ctrlArr[i]->getW()-strlen(this->ctrlArr[i]->getContent())/2),this->ctrlArr[i]->getY()+1);break;}}break;case KEY_UP:i--;if(i==-1)  //从后往前找 数组起始0 i--为-1 数组下标由大到小 (控件数组下标0位置){i=this->ctrlCount-1;  //控件个数(控件结构体数组下标最大)-1 (控件数组下标ctrlCount位置)}for(;i>0;i--){if(this->ctrlArr[i]->getType()==EDIT){CTools::gotoxy(this->ctrlArr[i]->getX()+2+strlen(this->ctrlArr[i]->getContent()),this->ctrlArr[i]->getY()+1);break;}else if(this->ctrlArr[i]->getType()==BUTTON){CTools::gotoxy(this->ctrlArr[i]->getX()+(this->ctrlArr[i]->getW()-strlen(this->ctrlArr[i]->getContent())/2),this->ctrlArr[i]->getY()+1);break;}if(i==0)  //第一个 若第一个不是编辑框 按钮{i=this->ctrlCount;  //就从最后一个往前查找 for循环中有i--,不用再-1}}break;case KEY_ENTER:if(this->ctrlArr[i]->getType()==BUTTON){this->focusIndex=i;return doAction();//返回切换到的界面的下标//获取winRun中输入的编辑框的值}break;default:   //其他字符(不是按键)并且当前控件是编辑框if(this->ctrlArr[i]->getType()==EDIT){if(key==KEY_BACKSPACE)//执行回删{this->ctrlArr[i]->backSpace();         }else{this->ctrlArr[i]->keyListen(key);}}break;}}
}/*
//按键响应驱动函数
void CWinBase::doAction()//纯虚函数[空壳都不写]
{
//每一个子类执行都不同 基类不知如何实现
//每个窗口都不一样 不需要写
}
*/

3.CLabel.h .cpp【标签类】

#ifndef CLABEL_H
#define CLABEL_H
#include"CtrBase.h"//控件基类//标签类 继承 控件基类
class CLabel:public CtrBase
{
public://重写 纯虚函数 每一个子类自己去写属于自己的方法void show();//显示控件//void setContent(char pcontent[20]);//控件内容CLabel();//默认构造~CLabel();//析构CLabel(int x,int y,int w,int h,char pcontent[20],int type);//带参构造
private:   //默认控件基类 属性
};#endif
#include"CLabel.h"//标签类
#include<iostream>
using namespace std;
#include"CTools.h"//工具类//默认构造
CLabel::CLabel():CtrBase()
{
}//带参构造 标签类 继承 控件基类/参数需要按照顺序写入
CLabel::CLabel(int x,int y,int w,int h,char pcontent[20],int type)
:CtrBase(x,y,w,h,pcontent,type)
{
}//虚函数 每一个子类要写自己的实现方法
//显示控件
void CLabel::show()
{//this指针隐藏参数  区别每一个调用show函数的对象CTools::gotoxy(this->startX,this->startY);cout<<this->content<<endl;
}/*
void CLabel::setContent(char pcontent[20])
{
}
*///析构
CLabel::~CLabel()
{
}

4.CEdit.h .cpp【编辑框类】

#ifndef CEDIT_H
#define CEDIT_H
#include"CtrBase.h"//控件基类//编辑框类 继承 控件基类
class CEdit:public CtrBase
{
public :CEdit();//默认构造//带参构造CEdit(int x,int y,int w ,int h,char *pcontent,int maxLen,int inputType,int ips,int type);//重写 纯虚函数 每一个子类自己去写属于自己的方法void show();//显示控件void keyListen(int key);//监听控件函数void backSpace();//回删~CEdit();//析构void clear();//清空
private://派生类 自己额外有的属性int inputType;  //输入的类型int maxLen;  //最大长度int ips;  //明文密文
};#endif
#include"CEdit.h"//编辑框类
#include"CTools.h"//工具类
#include<iostream>
using namespace std;
#include<conio.h>//编辑框类 继承 控件基类 [默认构造]
CEdit::CEdit():CtrBase() //基类构造传参
{//初始化数据this->maxLen = 0;this->inputType = 0;this->ips = 0;
}//为基类构造传参--关注点:派生类形参的名称
CEdit::CEdit(int x,int y,int w,int h,char *pcontent,int maxLen,int inputType,int ips,int type ):CtrBase(x,y,w,h,pcontent,type) //顺序与基类相同 变量名与派生类一致
{//属性赋值this->maxLen = maxLen;this->inputType = inputType;this->ips = ips;
}//析构
CEdit::~CEdit()
{
}//显示控件 子类各不同 需要子类自己去实现各自的方法
void CEdit::show()
{CTools::paintWindow(this->startX,this->startY,this->width,this->height);CTools::gotoxy(this->startX+2+strlen(this->content),this->startY+1);   cout<<this->content;
}//编辑框内容清空
void CEdit::clear()
{memset(this->content,'\0',sizeof(this->content));//内存初始化 清除编辑框内容
}//多态 虚函数
//监听控件函数的具体实现
void CEdit::keyListen(int key)
{int i=strlen(this->content);//从字符串原来的长度开始存储if(key == '\b' && i>0){//中文if(this->inputType == 3){printf("\b \b");printf("\b \b");this->content[--i]='\0';this->content[--i]='\0';}//其他else{printf("\b  \b");this->content[--i]='\0';}return;}switch(this->inputType){case 0: //数字if(key>='0'&&key<='9'&&i<this->maxLen){if(this->ips==0){putch('*'); }else{putch(key);}this->content[i++]=key;         }break;case 1:  //字母if(i<this->maxLen&&((key>='a'&&key<='z')||(key>='A'&&key<='Z'))){if(this->ips==0){putch('*');              }else{              putch(key);}this->content[i++]=key;           }break;case 2:  //数字+字母if(i<this->maxLen&&((key>='a'&&key<='z')||(key>='A'&&key<='Z')||(key>='0'&&key<='9'))){if(this->ips==0){putch('*');                }else{              putch(key);}this->content[i++]=key;       }break;case 3:          //中文if((unsigned char)key>=0xA1&&(unsigned char)key<=0xFE){char key2 = getch();if((unsigned char)key2>=0xA1&&(unsigned char)key2<=0xFE){this->content[i++]=key;this->content[i]= key2;if(this->ips==1){printf("%c%c",key,key2);}else if(this->ips==0){printf("**");}}}break;default:break;     }
}//回删
void CEdit::backSpace()
{int i = strlen(this->content);//从字符串原来的长度开始存储if(i>0){//输入框回删(表面回删)printf("\b \b");//数组内容回删(实际回删)this->content[--i] = '\0';}return;
}

5.CButton.h .cpp【按钮类】

#ifndef CBUTTON_H
#define CBUTTON_H
#include"CtrBase.h"//控件基类//按钮类 继承 控件基类
class CButton:public CtrBase
{
public://重写 纯虚函数 每一个子类自己去写属于自己的方法void show();//显示控件CButton();//默认构造CButton(CButton &button);//拷贝构造CButton(int x,int y,int w,int h,char pcontent[],int type);//带参构造~CButton();//析构
private: //默认控件基类 属性
};#endif
#include"CButton.h"//按钮类
#include<iostream>
using namespace std;
#include"CTools.h"//工具类//按钮类 继承 控件基类 [默认构造]
CButton::CButton():CtrBase()
{
}//按钮类继承控件基类[带参构造] /参数需要按照顺序写入
CButton::CButton(int x,int y,int w,int h,char pcontent[],int type)
:CtrBase(x,y,w,h,pcontent,type)
{
}//析构
CButton::~CButton()
{
}//虚函数 每一个子类要写自己的实现方法
//显示控件
void CButton::show()
{CTools::paintWindow(startX,startY,width,height);CTools::gotoxy(startX+(width*2-strlen(content))/2-1,startY+1);cout<<content<<endl;
}

三:系统不同使用角色类的设计

a.相关类的设计[用户 医生 管理员][管理员默认 账户1000 密码123456]

6.CUser.h .cpp【用户类】

#ifndef CUSER_H
#define  CUSER_H
//宏定义 角色
#define ADMIN 1//管理员
#define DOCTOR 2//医生
#define USER 3//用户
#include<string>
#include<iostream>
using namespace std;//用户类
class User
{
public:User();//默认构造User(string phoneNum,string pwd,int role,string sfzID,string name);//带参构造~User();//析构string getName();//获取用户名字string getPwd();//获取用户密码int getRole();//获取用户身份string getSfzID();//获取身份证号码string getphoneNum();//获取手机号码 用户id(账号)void setPwd(string pwd); //修改密码void setSfzID(string id);//修改身份证void setName(string name);//修改名字
protected:string name;//用户名字(中文)string pwd;//用户密码int role;//用户身份string sfzID;//身份证号码string phoneNum;//手机号码 用户id(账号)
};#endif
#include"CUser.h"//用户类
#include<iostream>
using namespace std;//默认构造
User::User()
{
}//带参构造
User::User(string phoneNum,string pwd,int role,string sfzID,string name)
{//属性赋值this->name = name;this->pwd = pwd;this->role = role;this->sfzID = sfzID;this->phoneNum = phoneNum;
}//析构
User::~User()
{
}//获取用户名字
string User::getName()
{return this->name;
}
//获取用户密码
string User::getPwd()
{return this->pwd;
}
//获取用户角色
int User::getRole()
{return this->role;
}
//获取用户身份证号码
string User::getSfzID()
{return this->sfzID;
}
//获取用户手机号码
string User::getphoneNum()
{return this->phoneNum;
}//修改用户密码
void User::setPwd(string pwd)
{this->pwd = pwd;
}
//修改用户身份证号码
void User::setSfzID(string id)
{this->sfzID=id;
}
//修改用户名字
void User::setName(string name)
{this->name = name;
}

7.CDoctor.h .cpp【医生类】

#ifndef CDOCTOR_H
#define  CDOCTOR_H
//宏定义 角色
#define ADMIN 1//管理员
#define DOCTOR 2//医生
#define USER 3//用户
#include<string>
#include<iostream>
using namespace std;//医生类
class Doctor
{
public:Doctor();//默认构造Doctor(int ID,string name,string pwd,string jianjie,string hospital,string position,string department,int role);//带参构造~Doctor();//析构int getID();//获取医生IDstring getName();//获取医生名字(中文)string getPwd();//获取医生密码string getJianjie();//获取医生简介string getHospital();//获取医生所属医院string getPosition();//获取医生所属职位string getDepartment();//获取医生所属科室int getRole();//获取医生身份void setName(string name);//修改医生名字void setDepartment(string department);//修改医生科室void setPosition(string position);//修改医生职位void setJianjie(string jianjie);//修改医生简介void setID(int ID);//修改医生ID
protected:int ID;//医生ID (D+四位数字)string name;//医生名字(中文)string pwd;//医生密码string jianjie;//医生简介string hospital;//医生 所属医院string position;//医生 职位(1--专家 2--主任医师 3--副主任医师 4--主治医师)string department;//医生 所属科室 1外科  2急救科 3心脏科int role;//医生身份
};#endif
#pragma warning(disable :4786)
#include"CDoctor.h"//医生类
#include"CData.h"//公共数据类
#include<iostream>
using namespace std;//默认构造
Doctor::Doctor()
{
}//带参构造
Doctor::Doctor(int ID,string name,string pwd,string jianjie,string hospital,string position,string department,int role)
{//属性赋值this->ID = ID;this->name = name;this->pwd = pwd;this->jianjie = jianjie;this->hospital = hospital;this->position = position;this->department = department;this->role = role;
}//析构
Doctor::~Doctor()
{
}//获取医生ID
int Doctor::getID()
{return this->ID;
}
//获取医生名字
string Doctor::getName()
{return this->name;
}
//获取医生密码
string Doctor::getPwd()
{return this->pwd;
}
//获取医生的简历
string Doctor::getJianjie()
{return this->jianjie;
}
//获取医生所属医院
string Doctor::getHospital()
{return this->hospital;
}
//获取医生所属职位
string Doctor::getPosition()
{return this->position;
}
//获取医生所属科室
string Doctor::getDepartment()
{return this->department;
}
//获取医生身份
int Doctor::getRole()
{return this->role;
}//修改医生密码
void Doctor::setName(string name)
{this->name = name;
}
//修改医生科室
void Doctor::setDepartment(string department)
{this->department = department;
}
//修改医生职位
void  Doctor::setPosition(string position)
{this->position = position;
}
//修改医生简介
void Doctor::setJianjie(string jianjie)
{this->jianjie = jianjie;
}
//修改医生ID
void Doctor::setID(int ID)
{this->ID = ID;
}

8.COutpatient.h .cpp【门诊类】

#ifndef COUTPATIENT_H
#define  COUTPATIENT_H
//宏定义 角色设置
#define ADMIN 1//管理员
#define DOCTOR 2//医生
#define USER 3//用户
#define ZHUANJIA 4//专家
#define ZHURENYISHI 5//主任医师
#define FUZHUREN 6//副主任医师
#define ZHUZHI 7//主治医师
#define NEIKE 8//内科
#define WAIKE 9//外科#include<string>
#include<iostream>
using namespace std;//门诊类
class Outpatient
{
public:Outpatient();//默认构造Outpatient(string phoneNum,string hospital,string department,string doctor,string nowTime,string time1,string time2,string describeU,string describeD,string state);//带参构造~Outpatient();//析构string getPhoneNum();//获取电话号码string getHospital();//获取预约的医院string getDepartment();//获取预约的科室string getDoctor();//获取预约的医生string getNowTime();//获取 什么时间预约的string getTime1();//获取 预约时间 年月日string getTime2();//获取 预约时间 时分秒string getDescribeU();//获取用户预约描述string getDescribeD();//获取医生就诊描述string getState();//获取就诊状态[未就诊 等待就诊]void setPhoneNum(string phoneNum);//设置用户电话号码 void setHospital(string hospital);//设置预约的医院void setDepartment(string department);//设置预约的科室void setDoctor(string doctor);//设置预约的医生void setNowTime(string nowTime);//设置 什么时间预约的void setTime1(string time1);//设置 预约时间 年月日void setTime2(string time2);//设置 预约时间 时分秒void setDescribeU(string describeU);//设置 用户预约描述void setDescribeD(string describeD);//设置 医生就诊描述void setState(string state);//设置 就诊状态 [未就诊 等待就诊]
protected:string phoneNum;//用户的电话号码idstring hospital;//预约的医院string department;//预约的科室string doctor;//预约的医生名字string nowTime;//什么时候预约的string time1;//预约时间  年月日string time2;//预约时间  时分string describeU;//用户预约描述string describeD;//医生就诊描述string state;//状态 未就诊 等待就诊
};#endif
#include"COutpatient.h"//门诊类
#include<iostream>
using namespace std;//默认构造
Outpatient::Outpatient()
{
}//带参构造
Outpatient::Outpatient(string phoneNum,string hospital,string department,string doctor,string nowTime,string time1,string time2,string describeU,string describeD,string state)
{//属性赋值this->phoneNum= phoneNum;this->hospital = hospital;this->department = department;this->doctor = doctor;this->nowTime = nowTime;this->time1 = time1;this->time2 = time2;this->describeU = describeU;this->describeD = describeD;this->state = state;
}//析构
Outpatient::~Outpatient()
{
}//获取电话号码
string Outpatient::getPhoneNum()
{return this->phoneNum;
}
//获取预约的医院
string Outpatient::getHospital()
{return this->hospital;
}
//获取预约的科室
string Outpatient::getDepartment()
{return this->department;
}
//获取预约的医生
string Outpatient::getDoctor()
{return this->doctor;
}
//获取 什么时间预约的
string Outpatient::getNowTime()
{return this->nowTime;
}
//获取 预约时间 年月日
string Outpatient::getTime1()
{return this->time1;
}
//获取 预约时间 时分秒
string Outpatient::getTime2()
{return this->time2;
}
//获取用户预约描述
string Outpatient::getDescribeU()
{return this->describeU;
}
//获取医生就诊描述
string Outpatient::getDescribeD()
{return this->describeD;
}
//获取就诊状态[未就诊 等待就诊]
string Outpatient::getState()
{return this->state;
}//设置用户电话号码
void Outpatient::setPhoneNum(string phoneNum)
{this->phoneNum = phoneNum;
}
//设置预约的医院
void Outpatient::setHospital(string hospital)
{this->hospital = hospital;
}
//设置预约的科室
void Outpatient::setDepartment(string department)
{this->department = department;
}
//设置预约的医生
void Outpatient::setDoctor(string doctor)
{this->doctor = doctor;
}
//设置 什么时间预约的
void Outpatient::setNowTime(string nowTime)
{this->nowTime = nowTime;
}
//设置 预约时间 年月日
void Outpatient::setTime1(string time1)
{this->time1 = time1;
}
//设置 预约时间 时分秒
void Outpatient::setTime2(string time2)
{this->time2 = time2;
}
//设置 用户预约描述
void Outpatient::setDescribeU(string describeU)
{this->describeU  = describeU;
}
//设置 医生就诊描述
void Outpatient::setDescribeD(string describeD)
{this->describeD = describeD;
}
//设置 就诊状态[未就诊 等待就诊]
void Outpatient::setState(string state)
{this->state = state;
}

9.CDepartment.h .cpp【科室类】

#ifndef CDEPARTMENT_H
#define CDEPARTMENT_H
//宏定义 角色
#define ADMIN 1//管理员
#define DOCTOR 2//医生
#define USER 3//用户
#define ZHUANJIA 4//专家
#define ZHURENYISHI 5//主任医师
#define FUZHUREN 6//副主任医师
#define ZHUZHI 7//主治医师
#define NEIKE 8//内科
#define WAIKE 9//外科#include<string>
#include<iostream>
using namespace std;//科室类
class Department
{
public:Department();//默认构造Department(string ksid,string ksname,string ksstate);//带参构造~Department();//析构string getKsId();//获取科室id string getKsName();//获取科室名称string getKsState();//获取科室说明void setKsId(string ksid);//设置科室idvoid setKsName(string ksname);//设置科室名称void setKsState(string ksstate);//设置科室说明
protected:string ksid;//科室idstring ksname;//科室名称string ksstate;//科室说明
};#endif
#include"CDepartment.h"//科室类
#include<iostream>
using namespace std;//默认构造
Department::Department()
{
}//带参构造
Department::Department(string ksid,string ksname,string ksstate)
{//属性赋值this->ksid = ksid;this->ksname = ksname;this->ksstate = ksstate;
}//析构
Department::~Department()
{
}//获取科室id
string Department::getKsId()
{return this->ksid;
}
//获取科室名称
string Department::getKsName()
{return this->ksname;
}
//获取科室说明
string Department::getKsState()
{return this->ksstate;
}//设置科室id
void Department::setKsId(string ksid)
{this->ksid = ksid;
}
//设置科室名称
void Department::setKsName(string ksname)
{this->ksname = ksname;
}
//设置科室说明
void Department::setKsState(string ksstate)
{this->ksstate = ksstate;
}

b.数据存储:数据准备类 [读,写文件的相关操作]

10.CData.h .cpp【公共数据类】

#ifndef CDATA_H
#define CDATA_H
#pragma warning(disable :4786)
#include<map>
//宏定义 角色
#define ADMIN 1//管理员
#define DOCTOR 2//医生
#define USER 3//用户
#define ZHUANJIA 4//专家
#define ZHURENYISHI 5//主任医师
#define FUZHUREN 6//副主任
#define ZHUZHI 7//主治医师
#define NEIKE 8//内科
#define WAIKE 9//外科
#include"CUser.h"//用户类
#include"CDoctor.h"//医生类
#include"COutpatient.h"//门诊类
#include"CDepartment.h"//科室类
#include<iostream>
#include<string>
using namespace std;//公共数据类
class CData
{
public://静态static 独立于对象 直接使用类访问static void userInit();//预添加用户[用户信息初始化设置]static map<string,User>userMap;static void doctorInit();//预添加医生[医生信息初始化设置]static map<int,Doctor>doctorMap;static void outpatientInit();//预添加门诊信息[门诊信息初始化设置]static map<string,Outpatient>outpatientMap;static void departmentInit();//预添加科室信息[科室信息初始化设置]static map<string,Department>departmentMap;static void addUser(User &user);//追加用户到文件末尾static void writeUser();//把整个用户map容器重新写入文件static string Nowuser;//当前的 用户手机号static void addDoctor(Doctor &doctor);//追加医生到文件末尾static void writeDoctor();//把整个医生map容器重新写入文件static int Nowdoctor;//当前医生IDstatic void addOutpatient(Outpatient &outpatient);//追加门诊信息到文件末尾static void writeOutpatient();//把整个门诊map容器重新写入文件
};#endif
#include"CData.h"//公共数据类
#include<map>
#include<iostream>
#include<fstream>
using namespace std;
#pragma warning(disable :4786)map<string , User> CData::userMap;//用户
map<int , Doctor> CData::doctorMap;//医生
map<string,Outpatient>CData::outpatientMap;//门诊
map<string,Department>CData::departmentMap;//科室string CData::Nowuser="";//当前用户手机号初始化
int CData::Nowdoctor = 1001;//当前医生ID初始化//公共数据 初始化用户数据信息
void CData::userInit()
{fstream fs;fs.open("user.txt",fstream::in | fstream::out |fstream::app);fs.seekg(0,ios::end);//计算文件中字节数int count = fs.tellg();map<string ,User>::iterator it;if(count<=0){cout<<"没有数据,准备数据,写入文件"<<endl;// User::User(string phoneNum,string pwd,int role,string sfzID,string name)CData::userMap.insert(make_pair<string,User>("11111111111",User("11111111111","123456",USER,"350181200004141111","小明")));CData::userMap.insert(make_pair<string,User>("12222222222",User("12222222222","123456",USER,"350181200004141899","小黄")));CData::userMap.insert(make_pair<string,User>("13333333333",User("13333333333","123456",USER,"350181200004141888","小张")));for(it=CData::userMap.begin();it!=CData::userMap.end();it++){char buf2[256]={0};sprintf(buf2,"%s %s %d %s %s\n",it->second.getphoneNum().c_str(),it->second.getPwd().c_str(),it->second.getRole(),it->second.getSfzID().c_str(),it->second.getName().c_str());fs<<buf2;}}//读文件else{fs.seekg(0,ios::beg);char buf[256]={0};int role=0;char pwd[20]={0};char name[20]={0};char sfzID[20]={0};char phoneNum[20]={0};while(fs.peek()!=EOF){fs.getline(buf,256);sscanf(buf,"%s %s %d %s %s",phoneNum,pwd,&role,sfzID,name);CData::userMap.insert(make_pair<string,User>(phoneNum,User(phoneNum,pwd,role,sfzID,name)));}    }fs.close();
}//公共数据 初始化医生数据信息
void CData::doctorInit()
{fstream fs;fs.open("doctor.txt",fstream::in | fstream::out |fstream::app);fs.seekg(0,ios::end);int count = fs.tellg();map<int ,Doctor>::iterator it;if(count<=0){cout<<"没有数据,准备数据,写入文件"<<endl;//int ID,string name,string pwd,string jianjie,string hospital,//string position,string department,int roleCData::doctorMap.insert(make_pair<int ,Doctor>(1001,Doctor(1001,"林医生","123456","厉害","福州医院","专家","外科",DOCTOR)));CData::Nowdoctor++;CData::doctorMap.insert(make_pair<int ,Doctor>(1002,Doctor(1002,"李医生","123456","厉害","福州医院","专家","内科",DOCTOR)));CData::Nowdoctor++;CData::doctorMap.insert(make_pair<int ,Doctor>(1003,Doctor(1003,"王医生","123456","厉害","福州医院","主任医师","内科",DOCTOR)));CData::Nowdoctor++;CData::doctorMap.insert(make_pair<int ,Doctor>(1004,Doctor(1004,"刘医生","123456","厉害","福州医院","主治医师","内科",DOCTOR)));CData::Nowdoctor++;for(it=CData::doctorMap.begin();it!=CData::doctorMap.end();it++){char buf2[256]={0};sprintf(buf2,"%d %s %s %s %s %s %s %d\n",it->first,it->second.getName().c_str(),it->second.getPwd().c_str(),it->second.getJianjie().c_str(),it->second.getHospital().c_str(),it->second.getPosition().c_str(),it->second.getDepartment().c_str(),it->second.getRole());fs<<buf2;}}else{fs.seekg(0,ios::beg);char buf[256]={0};int ID=0;int role=0;char pwd[20]={0};char name[20]={0};char jianjie[20]={0};char hospital[20]={0};char position[20]={0};char department[20]={0};while(fs.peek()!=EOF){fs.getline(buf,256);sscanf(buf,"%d %s %s %s %s %s %s %d",&ID,name,pwd,jianjie,hospital,position,department,&role);CData::doctorMap.insert(make_pair<int,Doctor>(ID,Doctor(ID,name,pwd,jianjie,hospital,position,department,role)));CData::Nowdoctor++;}}fs.close();
}//公共数据 初始化门诊数据信息
void CData::outpatientInit()
{fstream fs;fs.open("outpatient.txt",fstream::in | fstream::out |fstream::app);fs.seekg(0,ios::end);//计算文件中字节数int count = fs.tellg();map<string ,Outpatient>::iterator it;if(count<=0){cout<<"没有数据,准备数据,写入文件"<<endl;//Outpatient(string phoneNum,string hospital,string department,//  string doctor,string nowTime,string time1,string time2,//   string describeU,string describeD,string state);CData::outpatientMap.insert(make_pair<string ,Outpatient>("11111111111",Outpatient("11111111111","省立医院","内科","刘医生","20220404","20220406","14:00-15:00","喉咙痛","打针","待就诊")));CData::outpatientMap.insert(make_pair<string ,Outpatient>("12222222222",Outpatient("12222222222","省立医院","外科","张医生","20220405","20220407","15:00-16:00","喉咙痛","吊瓶","已就诊")));CData::outpatientMap.insert(make_pair<string ,Outpatient>("13333333333",Outpatient("13333333333","省立医院","骨科","胡医生","20220406","20220408","16:00-17:00","喉咙痛","手术","待就诊")));CData::outpatientMap.insert(make_pair<string ,Outpatient>("14444444444",Outpatient("14444444444","省立医院","耳科","黄医生","20220407","20220409","19:00-21:00","喉咙痛","吃药","已就诊")));for(it=CData::outpatientMap.begin();it!=CData::outpatientMap.end();it++){char buf2[256]={0};sprintf(buf2,"%s %s %s %s %s %s %s %s %s %s\n",it->second.getPhoneNum().c_str(),it->second.getHospital().c_str(),it->second.getDepartment().c_str(),it->second.getDoctor().c_str(),it->second.getNowTime().c_str(),it->second.getTime1().c_str(),it->second.getTime2().c_str(),it->second.getDescribeU().c_str(),it->second.getDescribeD().c_str(),it->second.getState().c_str());fs<<buf2;}}else{fs.seekg(0,ios::beg);char buf[256]={0};char phoneNum[20]={0};char hospital[20]={0};char department[20]={0};char doctor[20]={0};char nowTime[20]={0};char time1[20]={0};char time2[20]={0};char describeU[50]={0};char describeD[50]={0};char state[50]={0}; while(fs.peek()!=EOF){fs.getline(buf,256);sscanf(buf,"%s %s %s %s %s %s %s %s %s %s",phoneNum,hospital,department,doctor,nowTime,time1,time2,describeU,describeD,state);CData::outpatientMap.insert(make_pair<string,Outpatient>(phoneNum,Outpatient(phoneNum,hospital,department,doctor,nowTime,time1,time2,describeU,describeD,state)));}}fs.close();
}//公共数据 初始化科室数据信息
void CData::departmentInit()
{fstream fs;fs.open("department.txt",fstream::in | fstream::out |fstream::app);fs.seekg(0,ios::end);//计算文件中字节数int count = fs.tellg();map<string ,Department>::iterator it;if(count<=0){cout<<"没有数据,准备数据,写入文件"<<endl;//Outpatient(string phoneNum,string hospital,string department,//  string doctor,string nowTime,string time1,string time2,//   string describeU,string describeD,string state);CData::departmentMap.insert(make_pair<string ,Department>("1001",Department("1001","内科","内科去一楼")));CData::departmentMap.insert(make_pair<string ,Department>("1002",Department("1002","外科","外科去二楼")));CData::departmentMap.insert(make_pair<string ,Department>("1003",Department("1003","骨科","骨科去三楼")));CData::departmentMap.insert(make_pair<string ,Department>("1004",Department("1004","耳科","耳科去四楼")));for(it=CData::departmentMap.begin();it!=CData::departmentMap.end();it++){char buf2[256]={0};sprintf(buf2,"%s %s %s\n",it->second.getKsId().c_str(),it->second.getKsName().c_str(),it->second.getKsState().c_str());fs<<buf2;}}else{fs.seekg(0,ios::beg);char buf[256]={0};char ksid[20]={0};char ksname[20]={0};char ksstate[20]={0};while(fs.peek()!=EOF){fs.getline(buf,256);sscanf(buf,"%s %s %s",ksid,ksname,ksstate);CData::departmentMap.insert(make_pair<string,Department>(ksid,Department(ksid,ksname,ksstate)));}}fs.close();
}//追加用户数据信息 到文件末尾
void CData::addUser(User &user)
{fstream fs;fs.open("user.txt",fstream::in | fstream::out |fstream::app);fs.seekg(0,ios::end);char buf2[256]={0};sprintf(buf2,"%s %s %d %s %s\n",user.getphoneNum().c_str(),user.getPwd().c_str(),user.getRole(),user.getSfzID().c_str(),user.getName().c_str());fs<<buf2;fs.close();
}//追加医生数据信息 到文件末尾
void CData::addDoctor(Doctor &doctor)
{fstream fs;fs.open("doctor.txt",fstream::in | fstream::out |fstream::app);fs.seekg(0,ios::end);char buf2[256]={0};sprintf(buf2,"%d %s %s %s %s %s %s %d\n",doctor.getID(),doctor.getName().c_str(),doctor.getPwd().c_str(),doctor.getJianjie().c_str(),doctor.getHospital().c_str(),doctor.getPosition().c_str(),doctor.getDepartment().c_str(),doctor.getRole());fs<<buf2;fs.close();
}//追加门诊数据信息 到文件末尾
void CData::addOutpatient(Outpatient &outpatient)
{fstream fs;fs.open("outpatient.txt",fstream::in | fstream::out |fstream::app);fs.seekg(0,ios::end);char buf2[256]={0};sprintf(buf2,"%s %s %s %s %s %s %s %s %s %s\n",outpatient.getPhoneNum().c_str(),outpatient.getHospital().c_str(),outpatient.getDepartment().c_str(),outpatient.getDoctor().c_str(),outpatient.getNowTime().c_str(),outpatient.getTime1().c_str(),outpatient.getTime2().c_str(),outpatient.getDescribeU().c_str(),outpatient.getDescribeD().c_str(),outpatient.getState().c_str());fs<<buf2;fs.close();
}//把整个用户map容器重新写入文件
void  CData::writeUser()
{fstream fs;fs.open("user.txt",ios::in | ios::out );map<string ,User>::iterator it;//迭代器for(it=CData::userMap.begin();it!=CData::userMap.end();it++){char buf2[256]={0};sprintf(buf2,"%s %s %d %s %s\n",it->second.getphoneNum().c_str(),it->second.getPwd().c_str(),it->second.getRole(),it->second.getSfzID().c_str(),it->second.getName().c_str());fs<<buf2;}fs.close();
}//把整个医生map容器重新写入文件
void  CData::writeDoctor()
{fstream fs;fs.open("doctor.txt",ios::in | ios::out );map<int ,Doctor>::iterator it;//迭代器for(it=CData::doctorMap.begin();it!=CData::doctorMap.end();it++){char buf2[256]={0};sprintf(buf2,"%d %s %s %s %s %s %s %d\n",it->first,it->second.getName().c_str(),it->second.getPwd().c_str(),it->second.getJianjie().c_str(),it->second.getHospital().c_str(),it->second.getPosition().c_str(),it->second.getDepartment().c_str(),it->second.getRole());fs<<buf2;}fs.close();
}//把整个门诊map容器重新写入文件
void  CData::writeOutpatient()
{fstream fs;fs.open("outpatient.txt",ios::in | ios::out );map<string ,Outpatient>::iterator it;//迭代器for(it=CData::outpatientMap.begin();it!=CData::outpatientMap.end();it++){char buf2[256]={0};sprintf(buf2,"%s %s %s %s %s %s %s %s %s %s\n",it->second.getPhoneNum().c_str(),it->second.getHospital().c_str(),it->second.getDepartment().c_str(),it->second.getDoctor().c_str(),it->second.getNowTime().c_str(),it->second.getTime1().c_str(),it->second.getTime2().c_str(),it->second.getDescribeU().c_str(),it->second.getDescribeD().c_str(),it->second.getState().c_str());fs<<buf2;}fs.close();
}

【C++项目实战】 门诊预约管理系统(底层UI封装)相关推荐

  1. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  2. Springboot毕设项目博物馆参观预约管理系统gkb2s(java+VUE+Mybatis+Maven+Mysql)

    Springboot毕设项目博物馆参观预约管理系统gkb2s(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + ...

  3. SSM毕设项目宠物医院预约管理系统wjz80(java+VUE+Mybatis+Maven+Mysql)

    SSM毕设项目宠物医院预约管理系统wjz80(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilde ...

  4. 【JavaWeb】JavaWeb项目实战——品牌后台管理系统

    JavaWeb项目实战--品牌后台管理系统 项目概述 功能介绍 成果展示 项目实现 使用Maven构建项目 Maven介绍 具体操作 使用Mybatis封装对数据库的操作 在Mysql中建表,并添加数 ...

  5. springboot项目:驾校预约管理系统5y0y2(java+VUE+Mybatis+Maven+Mysql)

    springboot项目:驾校预约管理系统5y0y2(java+VUE+Mybatis+Maven+Mysql) 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + H ...

  6. Springboot毕设项目婚礼服务预约管理系统5k923(java+VUE+Mybatis+Maven+Mysql)

    Springboot毕设项目婚礼服务预约管理系统5k923(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + ...

  7. c语言专家门诊预约管理系统,专家门诊匹配预约及其均衡匹配

    主题:   专家门诊匹配预约及其均衡匹配主讲人:   唐国春地点:   延安路校区旭日楼306教室时间:   2017-11-23 13:30:00组织单位:   管理学院 报告人简介: 唐国春,上海 ...

  8. 【免费开放源码】审批类小程序项目实战(预约审批端)

    第一节:什么构成了微信小程序.创建一个自己的小程序 第二节:微信开发者工具使用教程 第三节:深入了解并掌握小程序核心组件 第四节:初始化云函数和数据库 第五节:云数据库的增删改查 第六节:项目大纲以及 ...

  9. 【免费开放源码】审批类小程序项目实战(预约历史页面)

    第一节:什么构成了微信小程序.创建一个自己的小程序 第二节:微信开发者工具使用教程 第三节:深入了解并掌握小程序核心组件 第四节:初始化云函数和数据库 第五节:云数据库的增删改查 第六节:项目大纲以及 ...

最新文章

  1. webstorm设置git pull快捷键Ctrl+Shift+P
  2. Flutter入门:application、module、package、plugin
  3. ACwing 2. 01背包问题(DP)
  4. BUAA-OO-2019 第三单元总结
  5. MySQL复习值代码知识点(2)
  6. UWP开发随笔——UWP新控件!AutoSuggestBox!
  7. 实验13——结构体、文件的基本应用
  8. 第二章:09流程控制[2switch]
  9. GHOSTXPSP3电脑爱好者V9.9美化版
  10. 开发独立证券交易系统的一些体会,有下单撮合系统,自己产生交易行情,可实现分布式部署
  11. 台式计算机开机后黑屏,电脑开机显示黑屏有关的问题与解决方法
  12. 工作这么多年,所经历5个骗子上司
  13. 四大名著丨折射中国人性的四面镜子
  14. ADB向手机安装APK失败
  15. 这是昨天的内容,就这样慢慢整吧,然后,荒废了好多时间啊!!
  16. 电子科技大学软件工程860考研上岸初试经验分享
  17. 支付宝,你在憋什么大招?
  18. Centos 7yum安装LAMP
  19. 如何在python中表示微分_Python实现自动微分(Automatic Differentiation)
  20. 格斗游戏c语言代码,C/C++知识点之设计并编写代码自动格斗类游戏

热门文章

  1. Scikit-learn工具的介绍
  2. 语音信箱类企业必须办理存储转发业务许可证吗?
  3. 周志华团队:深度森林挑战多标签学习,9大数据集超越传统方法
  4. 2022-4-19 LT模式和ET模式《Linux高性能服务器》笔记
  5. 微信消灭病毒哪个服务器好,消灭病毒怎么玩 微信小程序98k攻略
  6. 2022-3-30 Leetcode253.会议室II
  7. 用80行代码数1000个孔——《Python也可以》之四
  8. Axure| Axure如何画线
  9. 键盘输入一个英制的身高(几英尺几英寸),计算对应的公制身高(米)
  10. C语言:删除有序链表大于mink小于maxk的数