0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用LABwindows/CVI软件搭建学生管理器界面(二)

CHANBAEK 来源:小陈是个工程师 作者:xiaoxiaodawei 2023-01-16 14:17 次阅读

上期使用LABwindows/CVI这个软件搭建了学生管理器的UI界面,这期就是将UI界面中各个控件编程,使其能够实现一定的功能。

关键词:控件编程;

01控件编程

1.1、生成控件的头文件内容

生成框架代码之后,我们应该可以在uir同名的h文件中看到CVI为我们生成了如下代码,包含了CVI框架运行、CVI用户界面运行所需要的基本函数的声明与定义。 show.h是界面文件show.uir的头文件库,包含了界面中的控件的定义与声明:

头文件内柔如下所示:

/**************************************************************************/
/* LabWindows/CVI User Interface Resource (UIR) Include File              */
/*                                                                        */
/* WARNING: Do not add to, delete from, or otherwise modify the contents  */
/*          of this include file.                                         */
/**************************************************************************/
#include 
#ifdef __cplusplus
    extern "C" {
#endif
     /* Panels and Controls: */
#define  PANEL                1       /* callback function: MainCallBack */
#define  PANEL_STRING_Name  2       /* control type: string, callback function: (none) */
#define  PANEL_BTN_Change    3       /* control type: command, callback function: MainPanelBtnCallback */
#define  PANEL_BTN_Show      4       /* control type: command, callback function: MainPanelBtnCallback */
#define  PANEL_BTN_insert      5       /* control type: command, callback function: MainPanelBtnCallback */
#define  PANEL_BTN_Delete     6       /* control type: command, callback function: MainPanelBtnCallback */
#define  PANEL_BTN_Add       7       /* control type: command, callback function: MainPanelBtnCallback */
#define  PANEL_NUM_Student_Insert  8       /* control type: numeric, callback function: (none) */
#define  PANEL_NUM_Student        9       /* control type: numeric, callback function: (none) */
     /* Control Arrays: */
     /* (no control arrays in the resource file) */
     /* Menu Bars, Menus, and Menu Items: */
     /* (no menu bars in the resource file) */
     /* Callback Prototypes: */
int  CVICALLBACK MainCallBack(int panel, int event, void *callbackData, int eventData1, int eventData2);
int  CVICALLBACK MainPanelBtnCallback(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
#ifdef __cplusplus
    }
#endif

1.2、添加的文件

程序如下:

#include 
#include   //CVI运行时库(CVI Run-Time Engine)  
#include //CVI用户界面库(CVI User Interface)  
#include  //包含了C、C++语言的最常用的系统函数
#include "show.h"

1.3、添加结构体

结构体程序如下:

static int panelHandle;
//为面板的全局句柄,当对面板或者面板上的控件进行操作时经常用到
#define LEN sizeof(struct Student) //宏定义节点长度得命名
#define TYPE struct Student      //宏定义结构体变量命名
struct Student                   //定义一个学生类型结构体,包括学号,分数
{
  char Name[20];
  int Number;
  TYPE *Next;             //next是指针变量,指向结构体变量
};
TYPE *Head = NULL;         //定义头指针地址,全局变量
TYPE *PTmp = NULL;        //定义新开辟结点变量,全局变量

以下就是五个按键对应的功能函数

1.4、动态链表函数

代入如下:

TYPE* Creat(void)                //定义函数,此函数返回一个指向链表头的指针
{
  char Name[20] = {0};          //定义保存姓名的数组
  int Number = 0;        //定义保存姓名的整形
  GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);   
//得到PANEL_STRING_Name字符框中字符串给Name
  GetCtrlAttribute(panelHandle, PANEL_NUM_Student, ATTR_CTRL_VAL, &Number); 
//得到PANEL_SPANEL_NUM_Student整形框中字符串给Number 
  if((strlen(Name) < 1) || (Number < 1))    
//根据输入的数据长度来判断学生数据是否输入有误
  {
    MessagePopup("提示", "请重新输入...");  //显示对话消息对话框
  }
  else
  {
    PTmp = (struct Student *)malloc(sizeof(struct Student));//开辟新的结点空间
    memset(PTmp, 0, sizeof(struct Student));        // 将空间清零
    PTmp->Number = Number;              //结点中保存学号,姓名
    strcat(PTmp->Name, Name);
    struct Student *PMov = Head;                  //每次都返回头指针
    if(Head == NULL)
    {
      Head = PTmp;                  //把第一个结点给头指针
    }
    else
    {
      while(PMov->Next)              //循环从头到尾找指针域
       {
         PMov = PMov->Next;
      }
      PMov->Next = PTmp;              //找到指针域后更新
    }
    printf("新添加了1个学生:%s 学号:%d号\\n", PTmp->Name, PTmp->Number);  
//显示添加信息
  }
  return (Head);                                       //返回首地址
}

1.5、删除结点函数

代码如下:

void delet(TYPE* head)                   //定义结点删除函数
{
  TYPE* p = head, * in;                  //定义两边指针
  int i = 0;                          //定义记录值
  char Name[20] = {0};             //定义姓名数组
  GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);
//得到PANEL_STRING_Name字符框中字符串给Name  
  while ((strcmp(p->Name, Name) !=0)  && p != NULL)                     
//找到对应姓名并且不为空的结点
  {
    in = p;                            //找到左边的
    p = p->Next;                       //找到右边的
    i++;
  }
  if (p != NULL) 
  {
    printf("删除的学生为:%s 学号:%d号\\n", p->Name, p->Number); //显示删除信息
    in->Next = p->Next;                                      //将左右链接
    free(p);                                                 //释放中间结点
  }
  else {
    MessagePopup("提示", "学生节点不存在...");             //显示对话消息对话框  
  }
}

1.6、链表显示函数

代码如下:

void print(TYPE * head)                    //定义将链表输出函数
{
  TYPE * p;                           //定义指针
  p = head;                            //使p指向第一个结点
  int count = 0;                         //记录多少哥结点数
  if(Head == NULL)                  //判断是否为空
  {
    MessagePopup("提示", "表中不包含任何学生...");  //显示对话消息对话框 
  }
  else
  if(head!=NULL)                                  //输出第一个结点后的信息
    do {
      printf("第%d个学生:%s 学号:%d号\\n", ++count, p->Name, p->Number);
//显示结点信息 
      p = p->Next;                              //指向下个结点
    } while (p != NULL);
}

1.7、链表的插入

代码如下:

void insert(TYPE* head) {             //定义链表的插入函数
  TYPE* p = head, * in;             //定义首尾指针
  int i = 0;               //记录值
  int n;               //定义插入的地方
  char Name[20] = {0};         //定义姓名数组 ,学号
  int Number = 0;
  GetCtrlAttribute(panelHandle, PANEL_NUM_Student_Insert, ATTR_CTRL_VAL, &n); 
//得到PANEL_NUM_Student_Insert整形中数据给n
  while (i < (n-1) && p != NULL) {
    p = p->Next;
    i++;                       //找到相应结点
  }
  if (p != NULL) {
    in = (TYPE*)malloc(sizeof(TYPE));  //开辟新的空间
    memset(in, 0, sizeof(struct Student));  //清零
    GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);   //得到PANEL_STRING_Name字符中数据给Name 
      GetCtrlAttribute(panelHandle, PANEL_NUM_Student, ATTR_CTRL_VAL, &Number);//得到PANEL_NUM_Student整形中数据给Number 
    in->Number = Number;     
    strcat(in->Name, Name);            //复制信息给in->Name   
    printf("插入学生:%s 学号:%d号\\n",  in->Name, in->Number); //显示插入的信息
    in->Next = p->Next; 
//填充in节点的指针域,也就是说把in的指针域指向p的下一个节点
    p->Next = in;       //填充p节点的指针域,把p的指针域重新指向in
  }
  else {
    MessagePopup("提示", "表中不包含任何学生...");//显示对话消息对话框 
  }
}

1.8、链表的修改

代码如下:

void change(TYPE* head)       //修改指定位置的结点的信息函数
{
  TYPE* p = head;          //传入首地址
  int i = 0;            //记录值 
  char Name[20] = {0};      //定义姓名数组 ,学号 
  int Number = 0;   
  GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name); 
//得到PANEL_STRING_Name字符中数据给Name  
  while ((strcmp(p->Name, Name) !=0) && p != NULL) {            
 //找到对应姓名并且不为空的结点  
    p = p->Next;
    i++;
  }                         //找到相应的位置结点
  if (p != NULL) {
    GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);   //得到PANEL_STRING_Name字符中数据给Name  
      GetCtrlAttribute(panelHandle, PANEL_NUM_Student, ATTR_CTRL_VAL, &Number);//得到PANEL_NUM_Student整形中数据给Number
p->Number = Number;      //保存学号
    printf("修改的学生:%s 学号:%d号\\n",  p->Name, p->Number); //显示修改的信息
  }
  else 
    MessagePopup("提示", "表中不包含该学生"); //显示对话消息对话框
  }

下期就是讲解控件怎么回调!!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LabWindows
    +关注

    关注

    15

    文章

    62

    浏览量

    47811
  • 管理器
    +关注

    关注

    0

    文章

    233

    浏览量

    18315
  • CVI
    CVI
    +关注

    关注

    9

    文章

    41

    浏览量

    22099
  • 控件编程
    +关注

    关注

    0

    文章

    2

    浏览量

    5075
  • ui界面
    +关注

    关注

    0

    文章

    11

    浏览量

    1540
收藏 人收藏

    评论

    相关推荐

    关于LabWindows/CVI和Labview

    最近在学习LabWindows/CVI,想找个学习网站,最后就找到了这个Labview的网站,不知道有没有人用LabWindows/CVI
    发表于 07-04 15:49

    美国国家仪器(NI)软件Labview,Labwindows cvi,Motion,Vision,DAQ开发与培训

    `` 本帖最后由 wuxi2010 于 2016-3-7 16:42 编辑 1)Labview(Labwindows cvi)与access/SQL server数据库程序开发 2
    发表于 02-29 12:21

    采用LabWindows CVI的飞行模拟应用

    载体,以LabWindowsCVI为开发环境,主要面向学生演示飞机的飞行的姿态(纵向、升降、倾向、俯仰、横滚和航向)以及飞行过程中各种仪器仪表的变化,使学生对飞机的飞行原理以及驾驶技
    发表于 07-12 07:37

    如何利用LabWindowsCVI平台开发虚拟函数信号发生

    虚拟仪器和LabWindowsCVI简介基于LabWindowsCVI平台开发虚拟函数信号发生
    发表于 04-25 06:17

    一种LabWindows/CVI与MATLAB混合编程的实现

    Labwindows/CVI 是一套面向测控领域的优秀软件开发平台;MATLAB 具有强大的数据处理函数库和多样且简易的绘图方法。本文提出的修改LabWindows/
    发表于 06-24 09:29 52次下载

    LabWindows/CVI基础教程

    LabWindows/CVI基础教程:LabWindows/CVI是National Instruments公司推出的一套面向测控领域的软件
    发表于 07-23 08:22 0次下载

    基于多CPU和LabWindows/CVI 的行车记录仪系统

    介绍基于多CPU 和LabWindows/CVI 的行车记录仪系统,阐述了主机的硬件和软件的设计方法和数据分析软件的实现。
    发表于 08-31 17:40 142次下载

    DLL在基于LabWindows/CVI 的虚拟仪器中的应用

    介绍了动态链接库的概念,并根据一个具体实现的TMR 虚拟仪器系统来对VC 编写动态链接库和它与LabWindows/CVI 的集成方法加以说明。【关键词】虚拟仪器,动态链接库,LabWindows/
    发表于 09-01 09:23 54次下载

    cvi 8.0 下载 (NI LabWindows 电子测量)

    NI LabWindows/CVI 8.0 (电子测量): NI LabWindows CVI 8.0 最新完整版,专业强大的用于测试、测量与控制开发
    发表于 01-26 09:36 880次下载
    <b class='flag-5'>cvi</b> 8.0 下载 (NI <b class='flag-5'>LabWindows</b> 电子测量)

    LabWindows_CVI多线程技术在油门测试软件中的应用_倪

    LabWindows_CVI多线程技术在油门测试软件中的应用_倪笑宇
    发表于 01-13 21:40 3次下载

    LabWindows CVI在USB2. 0接口数据采集器在开发中的应用

    文章介绍了虚拟仪器软件LabWindows/CVI在USB2. 0接口数据采集器中的应用, 阐述了利用LabWindows/CVI进行USB
    发表于 07-02 15:37 27次下载
    <b class='flag-5'>LabWindows</b> <b class='flag-5'>CVI</b>在USB2. 0接口数据采集器在开发中的应用

    Labwindows CVI的简介说明

    CVI全称LabWindows/CVI,是一个用于测试和测量的ANSI C开发环境,使用CVI编写测控软件,能够极大地提高工程师和科学家们的
    发表于 03-17 08:00 19次下载
    <b class='flag-5'>Labwindows</b> <b class='flag-5'>CVI</b>的简介说明

    使用LABwindows/CVI软件搭建学生管理器界面(一)

      学习完链表就需要将其加以应用,这期使用LABwindows/CVI创建一个学生管理器,其中用到了链表的知识以及LABwindows/
    的头像 发表于 01-16 14:07 3521次阅读
    使用<b class='flag-5'>LABwindows</b>/<b class='flag-5'>CVI</b><b class='flag-5'>软件</b><b class='flag-5'>搭建</b><b class='flag-5'>学生</b><b class='flag-5'>管理器</b><b class='flag-5'>界面</b>(一)

    使用LABwindows/CVI软件搭建学生管理器界面(三)

    上期对LABwindows/CVI建立的学生管理器的UI界面中的控件进行编程,但是没有做回调处理,这期主要对其中控件进行回调函数的设计!
    的头像 发表于 01-16 14:21 1589次阅读

    LabWindows CVI基本学习教程

    本书主要介绍了LabWindows/CVI 6.0 下的C语言编程技术教程,主要内容有: LabWindows/CVI 6.0 的集成开发环境,面板、控件和菜单的设计,交互式代码生成,
    发表于 05-30 14:27 7次下载