本栏目下题库来源于互联网,轻速云承诺对于用户导入平台的题库是严格保密的,不会在此呈现!
轻速云给您提供更好的在线考试系统服务!
2006年上半年软件设计师下午试题
1、【 简答题
试题一(15分)
  阅读下列说明以及数据流图,回答问题1、问题2和问题3,将解答填入答题纸的对应栏内。
[说明]
  某学校建立了一个网上作业提交与管理系统,基本功能描述如下:
  (1)帐号和密码。任课老师用帐号和密码登录系统后,提交所有选课学生的名单。系统自动为每个选课学生创建登录系统的帐号和密码。
  (2)作业提交。学生使用帐号和密码登录系统后,可以向系统申请所选课程的作业。
系统首先检查学生的当前状态,如果该学生还没有做过作业,则从数据库服务器申请一份作业。若申请成功,则显示需要完成的作业。学生需在线完成作业,单击“提交”按钮上交作业。
  (3)在线批阅。系统自动在线批改作业,显示作业成绩,并将该成绩记录在作业成绩统计文件中。

[问题1](3分)
  如果将数据库服务器(记为DB)作为一个外部实体,那么在绘制该系统的数据流图时,还应有哪些外部实体和数据存储?

[问题2](7分)
  根据说明结合问题1的解答,指出在该系统的顶层数据流图中应有哪些数据流.请采用说明中的词汇给出这些数据流的起点、终点以及数据流名称,下表给出了数据流的部分信息,请填充空缺处。
 
序号 起 点 终 点 数据流名称
1  __(1)__  网上作业提交与管理系统  作业申请
2  __(2)__  网上作业提交与管理系统  提交的作业
3  网上作业提交与管理系统  __(3)__  需完成的作业
4  网上作业提交与管理系统  __(4)__  __(5)__
5  网上作业提交与管理系统  __(6)__  作业申请
6  网上作业提交与管理系统  __(7)__  __(8)__
7  __(9)__  网上作业提交与管理系统  选课学生名单
8  __(10)__  网上作业提交与管理系统  __(11)__
9  __(12)__  网上作业提交与管理系统  帐号和密码
10  __(13)__  网上作业提交与管理系统  帐号和密码


[问题3](5分)
  根据数据流图的设计原则,阅读下图所示的数据流图,找出其中的错误之处。
     [15分]
解析:
[问题1]
 外部实体:(选课)学生、(任课)老师
 数据存储:作业成绩统计文件
[问题2]
 (1)(选课)学生
 (2)(选课)学生
 (3)(选课)学生
 (4)(选课)学生
 (5) 作业成绩
 (6) DB
 (7) 作业成绩统计文件
 (8) 作业成绩
 (9)(任课)老师
 (10) DB
 (11) 作业
 (12)(选课)学生
 (13)(任课)老师
[问题3]
 错误1:外部实体A和B之间不能存在数据流
 错误2:外部实体A和数据存储H之间不能存在数据流
 错误3:加工2的输入/输出数据流名字相同
 错误4:加工4只有输入没有输出
 错误5:加工5只有输出,没有输入。
2、【 简答题
试题二(15分)
  阅读下列说明以及UML类图,回答问题1、问题2和问题3,将解答填入答题纸的对应栏内。
[说明]
  某客户信息管理系统中保存着两类客户的信息:
  (1)个人客户。对于这类客户,系统保存了其客户标识(由系统生成)和基本信息(包括姓名、住宅电话和email)。
  (2)集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识(由系统生成)之外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、email、办公电话以及职位。
  该系统除了可以保存客户信息之外,还具有以下功能:
  (1)向系统中添加客户(addCustomer);
  (2)根据给定的客户标识,在系统中查找该客户(getCustomer);
  (3)根据给定的客户标识,从系统中删除该客户(re田oveCustoner);
  (4)创建新的联系人(addContact);
  (5)在系统中查找指定的联系人(getContact);
  (6)从系统中删除指定的联系人(removeContact)。
  该系统采用面向对象方法进行开发。在面向对象分析阶段,根据上述描述,得到如表2-1所示的类,
表2-1 
 
类名 说明
 CustomerlnformationSystem  客户信息管理系统
 IndividualCustomer  个人客户
 InstitutionalCustomer  集团客户
 Contact  联系人

  描述该客户信息管理系统的UML类图如图2-1所示。
    
图2-1 客户信息管理系统的UML类图

[问题1](3分)
  请使用说明中的术语,给出图2-1中类Customer和类Person的属性。

[问题2](6分)
  识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图中的(1)~(6)。

[问题3](6分)
  根据说明中的叙述,抽象出如表2-2所示的方法,请指出图2-1中的类CustomerlnformationSystem和  InstitutionalCustomer应分别具有其中的哪些方法。
表2-2 
 
功能描述 方法名
 向系统中添加客户  addCustomer
 根据给定的客户标识,在系统中查找该客户  getCustomer
 根据给定的客户标识,从系统中删除该客户  removeCustomer
 创建新的联系人  addContact
 在系统中查找指定的联系人  getContact
 从系统中删除指定的联系人  removeContact

[15分]
解析:
[问题1]
 Customer的属性:客户标识
 Person的属性:姓名、住宅电话、email

[问题2]
 (1)1 (2)0..* (3)1 (4)1 (5)1 (6)1..*

[问题3]
 CustomerInformationSystem的方法:
 addCustomer,getCustomer,removeCustomer。
 InstitutionalCustomer的方法:
 addContact,getContact,removeContact。
3、【 简答题
试题三(15分)
  阅读下列说明,回答问题1、问题2和问题3,将解答填入答题纸的对应栏内。
[说明]
  某单位资料室需要建立一个图书管理系统,初步的需求分析结果如下:
  (1)资料室有图书管理员若干名,他们负责已购入图书的编目和借还工作,每名图书管理员的信息包括工号和姓名;
  (2)读者可在阅览室读书,也可通过图书流通室借述图书,读者信息包括读者ID、姓名、电话和Email,系统为不同读者生成不同的读者ID;
  (3)每部书在系统中对应惟一的一条图书在版编目数据(CIP,以下简称书目),书目的基本信息包括ISBN号、书名、作者、出版商、出版年月,以及本资料室拥有该书的册数(以下简称册数),不同书目的ISBN号不相同;
  (4)资料室对于同一书目的图书可拥有多册(本),图书信息包括图书ID、ISBN号、存放位置、当前状态,每一本书在系统中被赋予惟一的图书ID;
  (5)一名读者最多只能借阅十本图书,且每本图书最多只能借两个月,读者借书时需由图书管理员登记读者ID、所借图书ID、借阅时间和应还时间,读者还书时图书管理员在对应的借书信息中记录归还时间;
  (6)当某书目的可借出图书的数量为零时,读者可以对其进行预约登记,即记录读者ID、需要借阅的图书的ISBN号、预约时间。
  某书目的信息如表3-1所示,与该书目对应的图书信息如表3-2所示。
表3-1 书目信息 
 
书名 作者 出版商 ISBN号 出版年月 册数 经办人
(数据结构) 严蔚敏吴伟民 清华大学出版社 ISBN7-302-02368-9 1997.4 4 01


表3-2 图书信息 
 
图书ID ISBN号 存放位置 状态 经办人
C832.1 ISBN7-302-02368-9 图书流通室 已借出 01
C832.2 ISBN7-302-02368-9 图书阅览室 不外借 01
C832.3 ISBN7-302-02368-9 图书流通室 未借出 01
C832.4 ISBN7-302-02368-9 图书流通室 已预约 01


  系统的主要业务处理如下:
  (1)入库管理;图书购进入库时,管理员查询本资料室的书目信息,若该书的:书目尚未建立,则由管理员编写该书的书目信息并录入系统,然后编写并录入图书信息:否则,修改该书目的册数,然后编写并录入图书信息,对于进入流通室的书,其初始状态为“未借出”,而送入阅览室的书的状态始终为“不外借”。
  (2)借书管理:读者借书时,若有,则由管理员为该读者办理借书手续,并记录该读者的借书信息,同时将借出图书的状态修改为“已借出”。
  (3)预约管理;若图书流通室没有读者要借的书,则可为该读者建立预约登记,需要记录读者ID、书的ISBN号、预约时间和预约期限(最长为10天)。一旦其他读者归还这种书,就自动通知该预约读者。系统将自动清除超出预约期限的预约记录并修改相关信息。
  (4)还书管理:读者还书时,则记录相应借还信息中的“归还时间”,对于超期归还者,系统自动计算罚金(具体的计算过程此处省略)。系统同时自动查询预约登记表,若存在其他读者预约该书的记录,则将该图书的状态修改为“已预约”,并将该图书ID写入相应的预约记录中(系统在清除超出预约期限的记录时解除该图书的“已预约”状态);否则,将该图书的状态修改为“未借出”。
  (5)通知处理:对于已到期且未归还的图书,系统通过Email自动通知读者;若读者预约的书已到,系统则自动通过Email通知该读者来办理借书手续。

[问题1](4分)
  根据以上说明设计的实体联系图如图3-1所示,请指出读者与图书、书目与读者、书目与图书之间的联系类型。 
    
图3-1 图书管理系统的实体联系图
 
[问题2](4分)
  该图书管理系统的主要关系模式如下,请补充“借还记录”和“预约登记”关系中的空缺。
  管理员(工号,姓名)
  读者(读者ID,姓名,电话,Email)
  书目(1SBN号,书名,作者,出版商,出版年月,册数,经办人)
  图书(图书ID,ISBN号,存放位置,状态,经办人)
  借还记录(__(a)__,借出时间,应还时间,归还时间)
  预约登记(__(b)__,预约时间,预约期限,图书ID)
  注:时间格式为“年.月.日 时:分:秒”

[问题3](7分)
  请指出问题2中给出的读者、书目关系模式的主键,以及图书、借还记录和预约登记关系模式的主键和外键。 [15分]
解析:
[问题1] (1) n
 (2) m
 (3) l
 (4) n 或 m
 (5) m
 (6) n

[问题2] (a)读者ID,图书ID
        (b)读者ID,ISBN号

[问题3]
关系模式 主键 外键
读者 读者ID
书目 ISBN号
图书 图书ID ISBN号
借还记录 读者ID,图书ID,借书时间 读者ID,图书ID
预约登记 读者ID,ISBN号,预约时间 读者ID,ISBN号,图书ID
 
4、【 简答题
试题四(15分)
  阅读以下说明,回答问题1、问题2和问题3,将解答填入答题纸的对应栏内。
[说明]
  某单位正在使用一套C/S模式的应用软件系统,现在需要升级为B/S应用模式,但需要保持业务的连续性。开发人员提出用Web Service作为中间层的接口进行开发。

[问题1](6分)
  请用120字以内文字,从业务的继承性、升级成本(时间、工作量)和扩展性三个方面简要说明开发人员所提方案的优点。

[问题2](3分)
  Web Service的三个基本技术是WSDL;SOAP、UDDI,它们都是以XML为基础定义的,请用120字以内文字,简要说明WSDL、SOAP和UDDI的作用。

[问题3](6分)
  服务注册中心、服务提供者和服务请求者之间的交互和操作构成了WebService的体系结构,如图4-1所示。请用180字以内文字,说明这三者的主要功能及其交互过程。
    
图4-1 Web Service的工作模式 [15分]
解析:
[问题1]
 1.开发人员无需重新设计业务模式,只需在原系统的界面和中间层添加webservice层,就能继承原系统的所有业务。
 2.有可能以较少的开发时间和工作量,将系统升级为B/S应用模式。
 3.可以不修改原有的web服务和中间层,直接扩展新服务。

[问题2]
  WSDL是Web Service的描述语言,用于描述Web Service的服务、接口绑定等,为用户提供详细的接口说明书。
  SOAP是通信协议,用于以服务的方式在互联网上发布有用的程序模块。
  UDDI提供了一种统一的发布、查找和定位Web服务的方法。

[问题3]
  在Web Service模型的解决方案中,服务提供者定义并实现Web Service,使用服务描述语言(WSDL)描述Web Service,然后将服务描述发布到服务请求者或服务注册中心;服务请求者使用查找操作从本地或服务注册中心检索服务描述,然后使用服务描述与服务提供者进行绑定并调用Web Service。服务注册中心是整个模型中的可选角色,它是连接服务提供者和服务请求者的纽带。
5、【 简答题
试题五(15分)
  阅读下列说明、图和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[说明5-1]
  B树是一种多叉平衡查找树。一棵m阶的B树,或为空树,或为满足下列特性的m叉树:
  ①树中每个结点至多有m棵子树;
  ②若根结点不是叶子结点,则它至少有两棵子树;
  ③除根之外的所有非叶子结点至少有「m/2]棵子树;
  ④所有的非叶子结点中包含卞列数据信息
   (n,A0,K1,A1,K2,A2,…,Kn,An)
  其中:Ki(i=1,2,…,n)为关键字,且Ki<Ki+1(i=1,2,…,n-1):Ai(i=0,1,…,n)
  ⑤所有的叶子结点都出现在同一层次上,并且不带信息(可以看作县外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。
  例如,一棵4阶B树如图5-1所示(结点中关键字的数目省略)。
    
                      图5-1 4阶B树示例
  B树的阶M、bool类型、关键字类型及B树结点的定义如下:
  #define M 4         /*B树的阶*/
  typedef enum {FALSE: O, TRUE = 1} bool;
  typedef int ElemKeyType;
  typedef struct BTreeNode{
   int numkeys;          /*结点中关键字的数目*/
   struct BTreeNode *parent;   /*指向父结点的指针,树根的父结点指针为空*/
   struct BTreeNode *A[M];    /*指向子树结点的指针数组*/
   ElemgeyType K[M];       /*存储关键字的数组,K[0]闲置不用*/
  }BTreeNode;

  函数SearchBtree(BTreeNode*root,ElemKeyType akey,BTreeNode**ptr)的功能是:在给定的一棵M阶B树中查找关键字akey所在结点,若找到则返回TRUE,否则返回FALSE。其中,root是指向该M阶B树根结点的指针,参数ptr返回akey所在结点的指针,若akey不在该B树中,则ptr返回查找失败时空指针所在结点的指针,例如,在图5-1所示的4阶B树中查找关键字25时,ptr返回指向结点e的指针。

  注:在结点中查找关键字akey时采用二分法。
[函数5-1]
  bool SearchBtree(BTreeNode* root, ElemKeyType akey, BTreeNode **ptr)
  int 1w, hi, mid;
  BTreeNode *p = root;
  *ptr =NULL;
  while (p) {
   lw = 1; hi=__(1)__;
   while (lw <= hi) {
    mid = (lw + hi)/2;
    if (p -> K[mid] == akey){
     *ptr = p;
     return TRUE;
    }
    else
    if (__(2)__)
     hi = mid - 1;
    else
     lw = mid + 1;
   }
   *ptr = p;
   p = __(3)__
  }
  return FALSE;
[说明5-2]
  在M阶B树中插入一个关键字时,首先在最接近外部结点的某个非叶子结点中增加一个关键字,若该结点中关键字的个数不超过M-1,则完成插入;否则,要进行结点的“分裂”处理。所谓“分裂”,就是把结点中处于中间位置上的关键字取出来并插入其父结点中,然后以该关键字为分界线,把原结点分成两个结点。“分裂”过程可能会一直持续到树根,若树根结点也需要分裂,则整棵树的高度增1。
  例如,在图5-1所示的B树中插入关键字25时,需将其插入结点e中,由于e中已经有3个关键字,因此将关键字24插入结点e的父结点b,并以24为分界线将结点e分裂为e1和e2两个结点,结果如图5-2所示。
    
                 图5-2 在图5-1所示的4阶B树中插入关键字25后的B树

  函数Isgrowing(BTreeNode*root,ElemKeyTypeakey)的功能是;判断在给定的M阶B树中插入关键字akey后,该B树的高度是否增加,若增加则返回TRUE,否则返回FALSE。
  其中,root是指向该M阶B树根结点的指针。
  在函数Isgrowing中,首先调用函数SearchBtree(即函数5-1)查找关键字akey是否在给定的M阶B树中,若在则返回FALSE(表明无需插入关键字akey,树的高度不会增加);否则,通过判断结点中关键字的数目考察插入关键字akey后该B树的高度是否增加。
[函数5-2]
  bool Isgrowing (BTreeNode* root, ElemKeyType akey)
  { BTreeNode *t, *f;
   if ( !SearchBtree( __(4)__ ) ) {
    t=f;
    while ( __(5)__) {
     t = t -> parent;
    }
    if (!t)
    return TRUE;
   }
   return FALSE;
  } [15分]
解析:
  (1) p -> numkEys
 (2) p -> K[mid] > akey
 (3) p -> A[hi]
 (4) root,akey,&f
 (5) t && t -> numkeys == M - 1
6、【 简答题
试题六(15分)
  阅读下列说明、图和C++代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[说明]
  某订单管理系统的部分UML类图如图6-1所示。
    
图6-1 订单管理系统的部分UML类图
  图6-1中,Product表示产品,ProductList表示产品目录,Order表示产品订单,Orderltem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。
  请完善类Order的成员函数getOrderedAmount()和类SalesSystem的statistic()方法,各个类的属性及部分方法定义参见下面的C++代码。
[C++代码]
  class Product{               //产品类
   private:
    string pid;              //产品识别码
    string description;          //产品描述
    double price;             //产品单价
   public:
    void setProductPrice(double price);   //设置产品单价
    string getProductld();         //获取产品识别码
    string getProductDescription();    //获取产品描述
    double getProductPrice();       //获取产品单价
    //其他成员省略
  };
  class ProductList{             //产品列表类
   private:
    vector<Product>products;
   public:
    ProductList();
    Product getProductByIndex(int i);   //获得产品列表中的第i件产品
    void addProduct(Product t);      //在产品列表中加入一件产品
    Product*getProductByID(string pid);  //获得识别码为pid的产品指针
    unsigned int getProductAmount();    //获得产品列表中的产品数量
  };
  class orderltem{              //订单条目类
   private:
    Product*productPtr;          //指向被定购产品的指针
    int quantity;             //定购数量
   public:
    orderltem(Product*,int);
    Product*getProductptr();        //获取指向被定购产品的指针
    int getquantity();           //获取被定购产品的数量
  };
  class Order{                //订单类
   private:
    unsigned int orderid;         //订单识别号
    vector<Orderltem>items;        //订单内容(订单项)
   public:
    Order(unsigned int orderid);
    //获得识别码为tid的产品在当前订单中被定购的数量
    int getOrderedAmount(string tid);
    void additem(Product*productPtr,unsigned int n);//在订单中增加一个订单项
    //其他成员省略
  };
  class orderList{              //订单列表类
   private:
    vector<order>orders;
   public:
    OrderList():
    //Begin()返回指向订单列表第一个元素的迭代器(指针)
    virtual vector<Order>::iterator OrderList::Begin();
    //End()返回指向订单列表最后一个元素之后的迭代器(指向一个不存在的元素)
    virtual vector<order>::iterator orderList::End();
    void addOrder(Order t);        //在订单列表中加入一份订单
    //其他成员省略
  };
  Class SalesSystem{
   private:
    ProductList catalog;          //产品目录
    OrderList sales;            //订单列表
   public:
    SalesSystem();
    void statistic();            //统计所有产品的定购情况
    //其他成员省略
  } ;
  //在订单中查找识别码为tid的产品的定购数量,若该产品没有被定购,则返回0
  int Order::getOrderedAmount(string tid)
  { for(int k=0;k<items.size();k++){
    if (__(1)__=tid)
     return __(2)__;
   }
   return 0;
  }
  //方法statistic()依次统计产品目录中每个产品的订购总量,并打印输出
  //每个产品的识别码、描述、订购总量和订购金额
  void SalesSystem::statistic()
  { unsigned iht k,t,ordered_qty.p;
   vector<Order>::iterator it;Product p;
   tout<<"产品识别码\t描述\t\t定购数量\t金额"<<endl;
   for(k=0;k<catalog.getProductAmount();k++){   //遍历产品列表:
    p = __(3)__;           //从产品列表取得一件产品信息存入变量p
    ordered_qty:0:
    //通过迭代器变量it遍历订单列表中的每一份订单
    for(it=sales.Begin();__(4)__;it++{
    //根据产品识别码获得产品p茬当前订单中被定购的数量
     t __(5)__ (p.getProductld());
     ordered_qty += t;
    }
    cout<<p.getProductld()<<"\t\t"<<p.getProductDescriptiOn<)<<"\t\t";
    cout<<ordered_qty<<"\t\t"<<p.getProductPrice()*ordered_qty<<endl;
   }
  } [15分]
解析:
  (1) itEms[k].GEtProDuCtptr() ->GEtProDuCtID()
 (2) items[k].getQuantity()
 (3) catalog.getProductByIndex(k)
 (4) it != sales.End()
 (5) it->getOrderedAmount
7、【 简答题
试题七(15分)
  阅读下列说明、图以及Java程序,将应填入__(n)__处的字句写在答题纸的对应栏内。
[说明]
  某订单管理系统的部分UML类图如图7-1所示
    
图7-1 订单管理系统的部分类图
  图7-1中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,0rderltem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如表7-1所示。
表7-1
  
成员 说明
ProductList ArrayList(Product) products  
Product String String code 产品编号
description 产品描述
double price 产品单价
Boolean equals(Object object) 若两个产品相同则返回true,否则返回false
Orderltem Product product 订单项中的产品
int quantity 产品的订购数量
Product getProduct() 获取订单项中的产品
Order ArrayList(Orderlten) items 订单中包含的订单项
OrderList ArrayList(Order)orders 订单
void addOrder(0rder order) 向订单列表中添加新订单
int getNumberOfOrders() 获取订单列表中的订单总数
SalesSystem ProductList catalog 产品目录
OrderList sales 订单列表
void statistic() 依次统计产品目录中每个产品的订购总量,并打印 出每个产品的编号、说明、订购总量和订购金额

  可以使用类java.util。ArrayList<E>来实现对象的聚集关系,如图7-1中OrderList与Order之间的聚集关系。
  for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接收集合中每个元素的变量,其语法如下;
  for(用来接收集合中元素的变量:需要遍历的对象集合)
  如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口java.util.Iterable<T>。
  Java程序7-1和Java程序7-2分别给出了类OrderList和方法statistic的Java代码。
 
[Java程序7-1]
  import java.util.*;
  public class OrderList __(1)__ {
   private ArrayList<Order> orders;
   public OrderListO {
    this.orders = new ArrayList(Order) 0;
   }
   public void addOrder(Order order) {
    this.orders, add (order);
   }
   public Iterator<Order> iteratorO {
    return __(2)__;
   }
   public int getNunberOfOrders() {
    return this.orders, size();
   }
  }

[Java程序7-2]
  import java.util.*;
  public class SalesSystem {
   private ProductList catalog;
   private OrderList sales;
   private static PrintWriter stdOut = new PrintWriter(System.out,true);
   public void statistic(){
    for(Product product : __(3)__{
     int number = 0; ’
     for(Order order : __(4)__ {
      for(__(5)__ : order){
       if<product.equals(item.getProduct()))
        numbe r += item.getQuantity();
      }
     }
     stdOut.println(product.getCode() + " "
        + product.getDescription() + " "
        + number + " " + number *product.getPrice());
    }
   }
   //其余的方法未列出
  } [15分]
解析:
  (1) implEmEnts ItErABlE<OrDEr>
 (2) this.orders.iterator()
 (3) this.catalog
 (4) this.sales
 (5) OrderItem item
1
1页,共7个题库
1页,共7个题库
轻速云给您提供更好的在线考试系统服务!
推荐
推荐题库
众多企事业单位的信赖之选
36万+企事业单位的共同选择
查看更多合作案例
众多企事业单位的信赖之选
开始使用轻速云组织培训考试
四步组织一场考试答题,一键搭建企业培训平台
免费使用 免费使用 预约演示
咨询热线
400-886-8169
周一到周日 8:00-22:00
©2025 轻速云 苏ICP备16049646号-1 轻速云科技提供专业的在线考试系统、在线培训系统
联系我们
客服热线客服热线:400-886-8169 | 周一至周日 8:00-22:00
©2025 轻速云 苏ICP备16049646号-1
轻速云科技提供专业的在线考试系统、在线培训系统
在线咨询 400-886-8169