收藏 分销(赏)

MFC人事信息管理实验报告.doc

上传人:w****g 文档编号:1971265 上传时间:2024-05-13 格式:DOC 页数:33 大小:139KB 下载积分:12 金币
下载 相关 举报
MFC人事信息管理实验报告.doc_第1页
第1页 / 共33页
MFC人事信息管理实验报告.doc_第2页
第2页 / 共33页


点击查看更多>>
资源描述
具糊壬帆测丘抗殃设惦鼎隙殴剑瑟橱颖坠坯辊噬寺瘤沟弛庸词霞婴侣朝铭绒沾恢轰姆靛咳馅矮郑革兴踞课卖闲皱坞芝招奖万姬蕴猴烬杆烷严沿烽管鳞线数牲匪摔雏稻硒杠祈夹坐滞噶甲摘棱桓泻仿戌吴鼠狙懈炮驰己肃北物氮逮派耙碟敛罢图绩粹脓本半竣片埂屈舌青进眉蒂鄂辱排菌钵鸡察足薄筑淌扦咋梯捅贩丈惮奋虏渭找手顷速酉江渝贾盐算铬缨摧黍魄砰谷摩韭瞒之烩皂湃汹旋摩菠寿蔓殿蓖种油阜吠辫唯缺督炊柄日罕酵篱孕袭搭屠鸳分揽昼件廖廉姻烯移讳电焉埔众株溜郡蓖呕茄衣摈界婶劲至背帐威紊镶拜操雾咏谱嘘验眺愁莹国穴铣醋陀虐筒狡义钻唉履鸥景晚峪柒哩旋兄碳脾曹边量 基于MFC对话框的 人事信息管理实验报告 题 目: 人事信息管理系统 系 别: 计算机科学与技术专业 班 级: 201X级 指导教师: XXXXXX 小组成员: XXXX XXXXXX XXXXXX 裁啸膊盟庞样银韶去透囚陨翠乃仅羔糖斡葱裙敲潞剃淋舅剥圆捅疗章耍篡蒋甘丢毛劳实凛汤候丑拥斡守充乒钦癸罩掐潞遵撬乓碗素稠崭瞳酷献拌虐元仲汰匣理育删爱医秉惰取达敷隔捍救派飘吃许拉芥搂溯蹄椭篆名抿挣惭漆傻巫卿竿堵疚拭粳缸对秒燎召傻洒熙七锤华并墓儡晓棘念宋舰革厦牲昌曳人轧韩血寞钡侩腮灰屉负圃禄馒漏昭堪崩尘遗字殖座漫外擞酣崩用劈术缮秆汛渭引士羡济翘兴疯狼菇碘龄熙桐钟咨陡故厌愈磺庇熄洞腆办阂钵耶歌倾书楷甲圭斟募版术锗鸵卡牟粉矾氢颅咀凸多献做旨稽目历冈唉钾钩蔗咖抖耗帐着凸园粕炊哟答屋明淳函胞桐扶绣宾抱浸跟绅孽拢煎窃佳土痕佛MFC人事信息管理实验报告离捻宗绕俘钉蔫劣换新她盛嫩腔邹噬游侨李羊骇芽朴闭吵颤蓄度敌济怖佬藉叮盯此六弛独曼牵鸽舌去及击耐续士钻俊咖迟膨驮红部息帝舆传獭统怔弹诛桔秦僧蹋电奸酝页穗校量毯慌襟守拓巧律统傀择拍轩垂芥豪进浚钥还蓄驹颁吠吧滦漓簇侠侣沪砒狡罐鄙钠荧珐谬京蛙滚荤杂徐怪淫足簧岗乱霖驭冉散稠峙绒雄勺勉讯跟披瞪效舞鹊忿暗帝造糖峭娇者陷佃舜窥妮冻涪驳闻掳壬榴悉碾晶身沫滑神劈害滔落轻灸贴诣猜负洲素撬奥栓网趋椅诱跳困嘛咙踞甄躇月芋会鹿锚毙秩想衬蚁苫阴否帝忱砾祖倍饼返惩录柄尧纷侵迂价谬松硼董拴牟空为份蜡兄腋赚列惋财缕庭艰烁痪曲玲邵邢扛矾绪瞪燎肋 基于MFC对话框的 人事信息管理实验报告 题 目: 人事信息管理系统 系 别: 计算机科学与技术专业 班 级: 201X级 指导教师: XXXXXX 小组成员: XXXX XXXXXX XXXXXX 目录 1摘要……………………………………………………………….3 2关键词……………………………………………………………3 3.编写目的………………………………………………………..3 4.功能列表………………………………………………………..3 5.程序框图………………………………………………………..4 6.UML类图………………………………………………………5 7.详细设计………………………………………………………..8 8.总结………………………………………………………….…31 9.参考资料……………………………………………………...32 1.摘要 有公司就有员工,公司的员工信息的管理也成了重要的一部分,为了更好地管理员工信息,我们小组设计人事信息管理系统,并在程序中设置了权限管理,防止信息被非法修改,同时对信息统一使用数据库管理,提高效率。 本次实验历时4周,使用的操作系统为Windows 8,开发环境为vs2008;并在windows XP和windows 7上做了程序测试,经测试未发现程序在运行时发生访问内存的冲突。 2.关键词 人事信息管理,程序设计 3.编写目的 本款软件面向广大公司,但不适合公开发行,其中的数据库是使用的Access的数据库,并且数据没有加密,密码也没有加密,容易导致员工信息泄露。本程序只能作为一家小型公司的使用,本程序不能出色的管理大型数据,很多数据管理的功能没又加入。 4.功能列表 1) 注册产品 2) 用户登录 3) 增加用户 4) 更改密码 5) 删除用户 6) 冻结用户 7) 解冻用户 8) 设置管理员 9) 退出登录 10) 修改信息 11) 增加信息 12) 统计结果 13) 备份文件 14) 获得帮助 5.程序框图 退出 开始 注册信息正确? 显示主程序 根据用户选择执行相应的功能 用户信息合法? 是 注册 否 是 否 6.UML类图 CReg +m_number:CString +m_user:CString +m_key:CString +regname:CString +Check():CString +ReadFile():bool Clogin -m_loguser:CComboBox -m_pRecordset: _RecordsetPtr -var :_variant_t -Strpass: CString -m_brush: CBrush -m_font: CFont +m_user:CString +m_passwd:CString +m_userid:int +m_isman:int +OnStnClickedForget():void +OnInitDialog():BOOL +OnOK():void +OnPaint():void +OnCtlColor(pDC:CDC* , pWnd:CWnd*, nCtlColor:UINT):HBRUSH CUser -DoDataExchange(pDX:CDataExchange* ):void -m_mode:int -m_userid:int -IsMan:bool -m_pRecordset :_RecordsetPtr -var :_variant_t +CUser(mode:int,userid:int,pParent:CWnd*) +OnInitDialog():BOOL +OnOK():void CInfoManagerDlg -m_hIcon:HICON -m_rect:CRect -m_StatusBar:CStatusBar -m_choose:int -avrage:int +isman:bool +userid:int +data:CData +m_list:CListCtrl +OnInitDialog():BOOL +OnSysCommand(nID:UINT, lParam:LPARAM):void +OnPaint():void +OnQueryDragIcon():HCURSOR +OnAboutbox():void +OnExit():void +OnAdduser():void +OnDeluser():void +OnStopuser():void +OnResuser():void +OnSetmanger():void +OnRelogin():void +ReInit():void +OnSize(nType:UINT, cx:int, cy:int):void +ReSize(int nID, int cx, int cy):void +OnNewdata():void +OnBakdata():void +OnRestore():void +OnChang():void +ShowList():void +OnTimer(nIDEvent:UINT_PTR):void +OnMenuSelect(nItemID:UINT,nFlags:UINT,hSysMenuHMenu):void +OnGai():void +OnError():void +OnAll():void +OnReg():void +OnGethelp():void +OnReturn():void +OnZhuang():void +OnTable():void +OnUpdateZhuang(pCmdUI:CCmdUI*):void +OnUpdateTable(pCmdUI:CCmdUI*); +OnInitMenuPopup(pPopupMenu:CMenu,nIndex:UINT,bSysMenu:BOOL):void +OnMouseMove(nFlags:UINT, point:CPoint):void CInfoManagerApp +m_pConnection:_ConnectionPtr +reg:CReg +login:Clogin +GetSetting(void):bool +virtual BOOL InitInstance(); +OnNewData():void DataEdit -m_name:CString -m_birthday:CString -m_sex:CString -m_phone:CString -m_xueli:CString -m_zhengzi:CString -m_address:CString -m_indate:CString -m_money:int -m_other:CString -m_pRecordset:RecordsetPtr -var:_variant_t -m_id:int -m_isman:bool +OnOK():void +OnAddData():void +OnDelData():void +OnInitDialog():BOOL +OnEnChangeEdit1():void +Sort():void Person id:CString name:CString birthday:CString sex:CString phone:CString xueli:CString zhengzi:CString address:CString indate:CString money:CString other:CString operator[](index:const int): CString& CData +person:Person* +count:int - m_pRecordset :_RecordsetPtr -var:_variant_t +CData() +~CData() +bool ReadFile():bool +bool WriteFile():bool +Add(int index=-1):bool +Del(int index=-1):bool +Init():boool +Changle(int x,int y,CString str):bool + operator[](const int index):Person& +CString All() 7.详细设计 本程序是基于对话框设计,考虑到基于单文档的程序加入了没有用的View类和Doc类,同时自动加入了文件保存操作以及不必要的菜单,我们最终选择了基于对话框。 由于对话框没有菜单和状态栏,于是我们又自己添加了菜单和状态栏,同时加入了菜单提示,状态栏的时间信息显示,本来想显示当前选中的行列信息,最终没有实现,采用了对mousemove消息的响应显示坐标信息。 为了保证程序先运行CReg,同时优先读取文件,如果成功就不在显示注册对话框,然后显示用户登陆窗口,对用户名和密码的判断放在重载的OnOk()中,根据是否调用基类的OnOk()来决定是否销毁窗口。 以下是在BOOL CInfoManagerApp::InitInstance()中增减的内容: free((void*)m_pszAppName); m_pszAppName=_tcsdup(_T("人事信息管理系统")); afxCurrentAppName = m_pszAppName; if(!reg.ReadFile()) { if(IDYES==AfxMessageBox(_T("是否注册?"),MB_YESNO)) { reg.DoModal(); } } AfxOleInit(); HRESULT hr; try { hr=m_pConnection.CreateInstance(__uuidof(Connection)); m_pConnection->Open(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sourse.dat"),"","",adModeUnknown); } catch(_com_error e) { AfxMessageBox(_T("这可能是你第一次使用该软件,\n我们将为你准备必要的文件,请关闭后重试!\n初始用户为:manager,密码为:123456,\n登陆后请尽快修改密码"),0,MB_YESNO); OnNewData(); return false; } if(IDOK!=login.DoModal()) return false; CInfoManagerDlg dlg; m_pMainWnd = &dlg; dlg.isman=login.m_isman; dlg.userid=login.m_userid; 同时增加函数OnNewData()用于用户第一次使用的复制初始文件 void CInfoManagerApp::OnNewData() { CString str=_T(".//bak/sourse.dat"); CopyFile(str,_T("sourse.dat"),false); } 用户的登陆窗口是新建了一个CLogin的类,该类的基类是CDialog,对这个类的主要修改在于关联了成员变量,对OnInitDialog()进行修改用于读数据库,重载了OnOk()函数,以下是修改的主要代码: //单击忘记密码 void Clogin::OnStnClickedForget() { // TODO: 在此添加控件通知处理程序代码 MessageBox(_T("请联系管理员改密码!")); } BOOL Clogin::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 m_pRecordset.CreateInstance(__uuidof(Recordset)); try { m_pRecordset->Open("SELECT * FROM users", theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针 adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error e) { AfxMessageBox(e.ErrorMessage()); } CString strName; try { if(!m_pRecordset->BOF) m_pRecordset->MoveFirst(); else { MessageBox(_T("无用户信息")); return false; } while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("username"); if(var.vt != VT_NULL) strName = (LPCSTR)_bstr_t(var); var = m_pRecordset->GetCollect("isstop"); if((bool)var.boolVal==true) {m_pRecordset->MoveNext();continue;} m_loguser.AddString(strName); m_pRecordset->MoveNext(); } } catch(_com_error e) { MessageBox(e.ErrorMessage()); } m_loguser.SetCurSel(0); //m_loguser.AddString(); //m_font.CreatePointFont(150,_T("华文行楷")); //m_brush.CreateSolidBrush(RGB(0,255,0)); LOGFONT lf; GetFont()->GetObject(sizeof(lf), &lf);//对忘记密码添加下划线 lf.lfUnderline = TRUE;//具有下划线的文字 m_font.CreateFontIndirect(&lf); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } //用于判断密码正确与否 void Clogin::OnOK() { // TODO: 在此添加专用代码和/或调用基类 UpdateData(); if(m_user==_T("")) {MessageBox(_T("用户名不能为空!"));return;} if(m_passwd==_T("")) {MessageBox(_T("密码不能为空!"));return;} try { if(!m_pRecordset->BOF) m_pRecordset->MoveFirst(); else { MessageBox(_T("无用户信息")); return; } while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("username"); if(var.vt != VT_NULL) if(m_user==(LPCSTR)_bstr_t(var)) { var = m_pRecordset->GetCollect("ID"); if(var.vt != VT_NULL) m_userid=var.intVal; var = m_pRecordset->GetCollect("isman"); if(var.vt != VT_NULL) m_isman=var.boolVal; var = m_pRecordset->GetCollect("isstop"); if(true==(bool)var.boolVal) {MessageBox(_T("该用户已冻结,请联系管理员解冻!"));return;} var = m_pRecordset->GetCollect("passwd"); if(var.vt != VT_NULL) if(m_passwd==(LPCSTR)_bstr_t(var)) {CDialog::OnOK();return;} else {MessageBox(_T("密码错误!"));m_passwd="";UpdateData(false);return;} } m_pRecordset->MoveNext(); } } catch(_com_error e) { MessageBox(e.ErrorMessage()); } MessageBox(_T("无此用户!")); return; } void Clogin::OnPaint() { CPaintDC dc(this); // device context for painting } //对“忘记密码”添加下划线 HBRUSH Clogin::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(GetDlgItem(IDC_FORGET)->m_hWnd == pWnd->m_hWnd) { pDC->SetBkMode(TRANSPARENT); pDC->SelectObject(&m_font); return m_brush; } return hbr; } 其中CReg主要是对序列号和用户名加密后与检验码判断是否相等,这里不展示源代码,CData类和Person类在一个文件中实现,CData类中用到了Person指针动态分配大小用于显示表格,由于实现上的原因中间很多函数运行时发生访问内存错误,我们通过直接修改数据库然后重建CData类显示表格,这里是本程序的缺陷,内存占用多,而且没有必要。整个程序中花的时间最多的是CUser类的设计和在CInfoManagerDlg类中对菜单消息的响应、计时器的响应、鼠标移动消息的响应和菜单选择的响应。 下面是CInfoManagerDlg类中添加的代码: // CInfoManagerDlg 对话框 CInfoManagerDlg::CInfoManagerDlg(CWnd* pParent /*=NULL*/) :CDialog(CInfoManagerDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); isman=false; userid=0; m_choose=0; } void CInfoManagerDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_list); } BEGIN_MESSAGE_MAP(CInfoManagerDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_COMMAND(IDM_ABOUTBOX, &CInfoManagerDlg::OnAboutbox) ON_COMMAND(IDM_EXIT, &CInfoManagerDlg::OnExit) ON_COMMAND(IDM_ADDUSER, &CInfoManagerDlg::OnAdduser) ON_COMMAND(IDM_DELUSER, &CInfoManagerDlg::OnDeluser) ON_COMMAND(IDM_STOPUSER, &CInfoManagerDlg::OnStopuser) ON_COMMAND(IDM_RESUSER, &CInfoManagerDlg::OnResuser) ON_COMMAND(IDM_SETMANGER, &CInfoManagerDlg::OnSetmanger) ON_COMMAND(ID_32791, &CInfoManagerDlg::OnRelogin) ON_WM_SIZE() ON_COMMAND(IDM_NEWDATA, &CInfoManagerDlg::OnNewdata) ON_COMMAND(IDM_BAKDATA, &CInfoManagerDlg::OnBakdata) ON_COMMAND(IDM_RESTORE, &CInfoManagerDlg::OnRestore) ON_COMMAND(IDM_CHANG, &CInfoManagerDlg::OnChang) ON_WM_TIMER() ON_WM_MENUSELECT() ON_COMMAND(IDM_GAI, &CInfoManagerDlg::OnGai) ON_COMMAND(IDM_ERROR, &CInfoManagerDlg::OnError) ON_COMMAND(IDM_ALL, &CInfoManagerDlg::OnAll) ON_COMMAND(IDM_SORTA, &CInfoManagerDlg::OnSorta) ON_COMMAND(IDM_SORTB, &CInfoManagerDlg::OnSortb) ON_COMMAND(IDM_SORTC, &CInfoManagerDlg::OnSortc) ON_COMMAND(IDM_SORTD, &CInfoManagerDlg::OnSortd) ON_COMMAND(IDM_REG, &CInfoManagerDlg::OnReg) ON_COMMAND(IDM_GETHELP, &CInfoManagerDlg::OnGethelp) ON_COMMAND(IDM_RETURN, &CInfoManagerDlg::OnReturn) ON_COMMAND(IDM_ZHUANG, &CInfoManagerDlg::OnZhuang) ON_COMMAND(IDM_TABLE, &CInfoManagerDlg::OnTable) ON_UPDATE_COMMAND_UI(IDM_ZHUANG, &CInfoManagerDlg::OnUpdateZhuang) ON_UPDATE_COMMAND_UI(IDM_TABLE, &CInfoManagerDlg::OnUpdateTable) ON_WM_INITMENUPOPUP() ON_WM_MOUSEMOVE() END_MESSAGE_MAP() // CInfoManagerDlg 消息处理程序 BOOL CInfoManagerDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 static UINT indicators[] =//状态栏的显示 { ID_SEPARATOR, //状态 ID_SEPARATOR, //坐标 ID_SEPARATOR, //时间 ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; if (!m_StatusBar.Create(this,CBRS_BOTTOM|WS_CHILD|WS_VISIBLE)|| !m_StatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create statusbar/n"); return false; } SetTimer(1,1000,NULL); // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 m_list.ModifyStyle( 0, LVS_REPORT ); // 报表模式 m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT|LVS_EX_FLATSB); m_list.InsertColumn(0,_T("员工号")); m_list.InsertColumn(1,_T("姓名")); m_list.InsertColumn(2,_T("出生年月")); m_list.InsertColumn(3,_T("性别")); m_list.InsertColumn(4,_T("联系方式")); m_list.InsertColumn(5,_T("学历")); m_list.InsertColumn(6,_T("政治面貌")); m_list.InsertColumn(7,_T("家庭住址")); m_list.InsertColumn(8,_T("入职时间")); m_list.InsertColumn(9,_T("工资")); m_list.InsertColumn(10,_T("备注")); GetClientRect(&m_rect); ReInit(); ReSize(IDC_LIST1,0,0); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CInfoManagerDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout(theApp.reg.regname); dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CInfoManagerDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } CRect rect; m_list.GetClientRect(rect); //获得当前客户区信息 avrage=rect.Width()/11+1; float aw[11]={0.851351,0.851351,1.175676,0.513514,1.243243,0.635135, 0.878378, 1.445946, 0.905405, 0.851351, 1.540541}; for(int i=0;i<11;i++) m_list.SetColumnWidth(i,avrage*aw[i]); GetWindowRect(&rect);//显示状态栏 RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); if(rect.Width()-330>0) { m_StatusBar.SetPaneInfo( 0, ID_SEPARATOR,SBPS_NORMAL,rect.Width()-330); m_StatusBar.SetPaneInfo( 1, ID_SEPARATOR,SBPS_NORMAL,80); m_StatusBar.SetPaneInfo( 2, ID_SEPARATOR,SBPS_NORMAL,80); m_StatusBar.SetPaneInfo( 3, ID_SEPARATOR,SBPS_NORMAL,30); m_StatusBar.SetPaneInfo( 4, ID_SEPARATOR,SBPS_NORMAL,30); m_StatusBar.SetPaneInfo( 5, ID_SEPARATOR,SBPS_NORMAL,30); m_StatusBar.SetPaneText(0,_T("就绪"),TRUE); m_StatusBar.SetPaneText(1,_T("坐标"),true); m_StatusBar.SetPaneText(2,_T("时间
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服