c语言做交互界面,c语言做交互界面怎么做

发布时间:2023-01-08

本文目录一览:

  1. 怎么用c语言做一个界面
  2. C语言怎么做界面?
  3. 编写的C语言程序,怎样制作一个UI界面?
  4. 十万火急!C语言怎样编人机界面

怎么用c语言做一个界面

用turbo c是可以做窗口程序的,不过不会是象vb做出来的窗口那样。是dos下面的。 还可以用vc++,这个可以用c语言做出窗口程序来的。

C语言怎么做界面?

空窗口:

#include <windows.h>
/* 所有的窗口输出到这里去 */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    switch(Message) {
        /* 停止后,告诉主线程停止 */
        case WM_DESTROY: {
            PostQuitMessage(0);
            break;
        }
        /* 所有其他消息(很多人)都使用默认程序处理 */
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
/* Win32 GUI程序的主要功能:执行从这里开始 */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc; /* 窗口的属性结构 */
    HWND hwnd; /* "句柄" 一个窗口的标识符 */
    MSG Msg; /* 所有消息的临时位置 */
    /* 修改结构和设置的东西 */
    memset(&wc,0,sizeof(wc));
    wc.cbSize         = sizeof(WNDCLASSEX);
    wc.lpfnWndProc    = WndProc; /* 将发送消息的地方 */
    wc.hInstance      = hInstance;
    wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
    /* 白色,COLOR_WINDOW是系统定义的颜色值,其数值是5 */
    wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName  = "WindowClass";
    wc.hIcon          = LoadIcon(NULL, IDI_APPLICATION); /* 载入一个标准图标 */
    wc.hIconSm        = LoadIcon(NULL, IDI_APPLICATION); /* 使用名称“A”来作为该项目图标 */
    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "WindowClass", "Caption", WS_VISIBLE|WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, /* x */
                          CW_USEDEFAULT, /* y */
                          640, /* 宽度 */
                          480, /* 高度 */
                          NULL, NULL, hInstance, NULL);
    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
    /* 所有的输入处理和发送到窗口过程。
       注意,这个块代码流,直到它接收到的东西,
       所以回路不会产生不合理的高CPU使用率。 */
    while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* 如果没有收到任何错误… */
        TranslateMessage(&Msg); /* 如果存在翻译关键码字符 */
        DispatchMessage(&Msg); /* 发送它到WndProc */
    }
    return Msg.wParam;
}

编写的C语言程序,怎样制作一个UI界面?

c语言制作UI界面需要相关的UI库 如windows操作系统本身就提供了UI的接口 一个简单的示例代码如下

#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR line, int cmd)
{
    static TCHAR AppName[] = TEXT("99");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndclass;
    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = WndProc;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hinstance;
    wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName  = NULL;
    wndclass.lpszClassName = AppName;
    if(!RegisterClass(&wndclass))
    {
        MessageBox(NULL, TEXT("This program requires Windows NT!"), AppName, MB_ICONERROR);
        return 0;
    }
    hwnd = CreateWindow(AppName, TEXT("九九乘法口诀表"),
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        NULL,
                        NULL,
                        hinstance,
                        NULL);
    ShowWindow(hwnd, cmd);
    UpdateWindow(hwnd);
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    static int x, y;
    int i, j;
    int len;
    TCHAR buf[50];
    TEXTMETRIC tm;
    switch(message)
    {
        case WM_CREATE:
            hdc = GetDC(hwnd);
            GetTextMetrics(hdc, &tm);
            x = tm.tmAveCharWidth;
            y = tm.tmHeight + tm.tmExternalLeading;
            ReleaseDC(hwnd, hdc);
            return 0;
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            GetClientRect(hwnd, rect);
            for(i = 1; i != 10; ++i)
            {
                for(j = 1; j != i + 1; ++j)
                {
                    len = wsprintf(buf, TEXT("%dx%d=%-4d"), j, i, i * j);
                    TextOut(hdc, j * len * x, i * y, buf, len);
                }
            }
            EndPaint(hwnd, &ps);
            return 0;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, message, wparam, lparam);
}

上面是一个打印windows下拥有窗口界面的九九乘法口诀表的c语言程序代码 同样的c语言也会有其它的UI库 比如Gtk,Gtk是可移植的UI库 可以使用它在Linux、windows包括mac等等操作系统上做ui程序设计 一个简单的示例代码如下

#include <gtk/gtk.h>
int main(int argc, char **argv)
{
    GtkWidget *win;
    GtkWidget *label;
    int i, j;
    GString *str;
    gtk_init(&argc, &argv);
    win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
    g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
    str = g_string_new(NULL);
    for(i = 1; i <= 9; ++i)
    {
        for(j = 1; j != i + 1; ++j)
            g_string_append_printf(str, "%dx%d=%-4d", j, i, i * j);
        g_string_append(str, "\n");
    }
    label = gtk_label_new(str->str);
    gtk_container_add(GTK_CONTAINER(win), label);
    gtk_widget_show_all(win);
    gtk_main();
    g_string_free(str, TRUE);
    return 0;
}

十万火急!C语言怎样编人机界面

你可以参考该程序,tc2.0下通过,源自《C语言课程设计案例精编》; /头文件(.h)*****/

#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*标准库函数*/
#include "string.h"/*字符串函数*/
#include "ctype.h" /*字符操作函数*/
#define M 50 /*定义常数表示记录数*/
typedef struct /*定义数据结构*/
{
    char name[20]; /*姓名*/
    char units[30]; /*单位*/
    char tele[10]; /*电话*/
} ADDRESS;

/以下是函数原型*/

int enter(ADDRESS t[]); /*输入记录*/
void list(ADDRESS t[], int n); /*显示记录*/
void search(ADDRESS t[], int n); /*按姓名查找显示记录*/
int delete(ADDRESS t[], int n); /*删除记录*/
int add(ADDRESS t[], int n); /*插入记录*/
void save(ADDRESS t[], int n); /*记录保存为文件*/
int load(ADDRESS t[]); /*从文件中读记录*/
void display(ADDRESS t[]); /*按序号查找显示记录*/
void sort(ADDRESS t[], int n); /*按姓名排序*/
void qseek(ADDRESS t[], int n); /*快速查找记录*/
void copy(); /*文件复制*/
void print(ADDRESS temp); /*显示单条记录*/
int find(ADDRESS t[], int n, char *s); /*查找函数*/
int menu_select(); /*主菜单函数*/

/主函数开始*/

main()
{
    int i;
    ADDRESS adr[M]; /*定义结构体数组*/
    int length; /*保存记录长度*/
    clrscr(); /*清屏*/
    for(;;)/*无限循环*/
    {
        switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
        {
            case 0: length = enter(adr); break;/*输入记录*/
            case 1: list(adr, length); break; /*显示全部记录*/
            case 2: search(adr, length); break; /*查找记录*/
            case 3: length = delete(adr, length); break; /*删除记录*/
            case 4: length = add(adr, length); break; /*插入记录*/
            case 5: save(adr, length); break; /*保存文件*/
            case 6: length = load(adr); break; /*读文件*/
            case 7: display(adr); break; /*按序号显示记录*/
            case 8: sort(adr, length); break; /*按姓名排序*/
            case 9: qseek(adr, length); break; /*快速查找记录*/
            case 10: copy(); break; /*复制文件*/
            case 11: exit(0); /*如返回值为11则程序结束*/
        }
    }
}

/菜单函数,函数返回值为整数,代表所选的菜单项/

menu_select()
{
    char s[80];
    int c;
    gotoxy(1, 25);/*将光标定为在第25行,第1列*/
    printf("press any key enter menu......\n");/*提示压任意键继续*/
    getch(); /*读入任意字符*/
    clrscr(); /*清屏*/
    gotoxy(1, 1);
    printf("********************MENU*********************\n\n");
    printf(" 0. Enter record\n");
    printf(" 1. List the file\n");
    printf(" 2. Search record on name\n");
    printf(" 3. Delete a record\n");
    printf(" 4. add record \n");
    printf(" 5. Save the file\n");
    printf(" 6. Load the file\n");
    printf(" 7. display record on order\n");
    printf(" 8. sort to make new file\n");
    printf(" 9. Quick seek record\n");
    printf(" 10. copy the file to new file\n");
    printf(" 11. Quit\n");
    printf("***********************************************\n");
    do
    {
        printf("\n Enter you choice(0~11):"); /*提示输入选项*/
        scanf("%s", s); /*输入选择项*/
        c = atoi(s); /*将输入的字符串转化为整型数*/
    } while(c < 0 || c > 11); /*选择项不在0~11之间重输*/
    return c; /*返回选择项,主程序根据该数调用相应的函数*/
}

/**输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度/

int enter(ADDRESS t[])
{
    int i, n;
    char *s;
    clrscr(); /*清屏*/
    printf("\nplease input num \n"); /*提示信息*/
    scanf("%d", &n); /*输入记录数*/
    printf("please input record \n"); /*提示输入记录*/
    printf("name unit telephone\n");
    printf("------------------------------------------------\n");
    for(i = 0; i < n; i++)
    {
        scanf("%s%s%s", t[i].name, t[i].units, t[i].tele); /*输入记录*/
        printf("----------------------------------------------\n");
    }
    return n; /*返回记录条数*/
}

/显示记录,参数为记录数组和记录条数/

void list(ADDRESS t[], int n)
{
    int i;
    clrscr();
    printf("\n\n*******************ADDRESS******************\n");
    printf("name unit telephone\n");
    printf("------------------------------------------------\n");
    for(i = 0; i < n; i++)
        printf("%-20s%-30s%-10s\n", t[i].name, t[i].units, t[i].tele);
    if((i + 1) % 10 == 0) /*判断输出是否达到10条记录*/
    {
        printf("Press any key continue...\n"); /*提示信息*/
        getch(); /*压任意键继续*/
    }
    printf("************************end*******************\n");
}

/查找记录/

void search(ADDRESS t[], int n)
{
    char s[20]; /*保存待查找姓名字符串*/
    int i; /*保存查找到结点的序号*/
    clrscr(); /*清屏*/
    printf("please search name\n");
    scanf("%s", s); /*输入待查找姓名*/
    i = find(t, n, s); /*调用find函数,得到一个整数*/
    if(i > n - 1) /*如果整数i值大于n-1,说明没找到*/
        printf("not found\n");
    else
        print(t[i]); /*找到,调用显示函数显示记录*/
}

/显示指定的一条记录/

void print(ADDRESS temp)
{
    clrscr();
    printf("\n\n********************************************\n");
    printf("name unit telephone\n");
    printf("------------------------------------------------\n");
    printf("%-20s%-30s%-10s\n", temp.name, temp.units, temp.tele);
    printf("**********************end***********************\n");
}

/*查找函数,参数为记录数组和记录条数以及姓名s */

int find(ADDRESS t[], int n, char *s)
{
    int i;
    for(i = 0; i < n; i++)/*从第一条记录开始,直到最后一条*/
    {
        if(strcmp(s, t[i].name) == 0) /*记录中的姓名和待比较的姓名是否相等*/
            return i; /*相等,则返回该记录的下标号,程序提前结结束*/
    }
    return i; /*返回i值*/
}

/删除函数,参数为记录数组和记录条数/

int delete(ADDRESS t[], int n)
{
    char s[20]; /*要删除记录的姓名*/
    int ch = 0;
    int i, j;
    printf("please deleted name\n"); /*提示信息*/
    scanf("%s", s);/*输入姓名*/
    i = find(t, n, s); /*调用find函数*/
    if(i > n - 1) /*如果i>n-1超过了数组的长度*/
        printf("no found not deleted\n"); /*显示没找到要删除的记录*/
    else
    {
        print(t[i]); /*调用输出函数显示该条记录信息*/
        printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/
        scanf("%d", &ch); /*输入一个整数0或1*/
        if(ch == 1) /*如果确认删除整数为1*/
        {
            for(j = i + 1; j < n; j++) /*删除该记录,实际后续记录前移*/
            {
                strcpy(t[j - 1].name, t[j].name); /*将后一条记录的姓名拷贝到前一条*/
                strcpy(t[j - 1].units, t[j].units); /*将后一条记录的单位拷贝到前一条*/
                strcpy(t[j - 1].tele, t[j].tele); /*将后一条记录的电话拷贝到前一条*/
            }
            n--; /*记录数减1*/
        }
    }
    return n; /*返回记录数*/
}

/插入记录函数,参数为结构体数组和记录数/

int add(ADDRESS t[], int n)/*插入函数,参数为结构体数组和记录数*/
{
    ADDRESS temp; /*新插入记录信息*/
    int i, j;
    char s[20]; /*确定插入在哪个记录之前*/
    printf("please input record\n");
    printf("************************************************\n");
    printf("name unit telephone\n");
    printf("--------------------------------------------------\n");
    scanf("%s%s%s", temp.name, temp.units, temp.tele); /*输入插入信息*/
    printf("------------------------------------------------\n");
    printf("please input locate name \n");
    scanf("%s", s); /*输入插入位置的姓名*/
    i = find(t, n, s); /*调用find,确定插入位置*/
    for(j = n - 1; j >= i; j--) /*从最后一个结点开始向后移动一条*/
    {
        strcpy(t[j + 1].name, t[j].name); /*当前记录的姓名拷贝到后一条*/
        strcpy(t[j + 1].units, t[j].units); /*当前记录的单位拷贝到后一条*/
        strcpy(t[j + 1].tele, t[j].tele); /*当前记录的电话拷贝到后一条*/
    }
    strcpy(t[i].name, temp.name); /*将新插入记录的姓名拷贝到第i个位置*/
    strcpy(t[i].units, temp.units); /*将新插入记录的单位拷贝到第i个位置*/
    strcpy(t[i].tele, temp.tele); /*将新插入记录的电话拷贝到第i个位置*/
    n++; /*记录数加1*/
    return n; /*返回记录数*/
}

/保存函数,参数为结构体数组和记录数/

void save(ADDRESS t[], int n)
{
    int i;
    FILE *fp; /*指向文件的指针*/
    if((fp = fopen("record.txt", "wb")) == NULL) /*打开文件,并判断打开是否正常*/
    {
        printf("can not open file\n");/*没打开*/
        exit(1); /*退出*/
    }
    printf("\nSaving file\n"); /*输出提示信息*/
    fprintf(fp, "%d", n); /*将记录数写入文件*/
    fprintf(fp, "\r\n"); /*将换行符号写入文件*/
    for(i = 0; i < n; i++)
    {
        fprintf(fp, "%-20s%-30s%-10s", t[i].name, t[i].units, t[i].tele);/*格式写入记录*/
        fprintf(fp, "\r\n"); /*将换行符号写入文件*/
    }
    fclose(fp);/*关闭文件*/
    printf("****save success***\n"); /*显示保存成功*/
}

/读入函数,参数为结构体数组/

int load(ADDRESS t[])
{
    int i, n;
    FILE *fp; /*指向文件的指针*/
    if((fp = fopen("record.txt", "rb")) == NULL)/*打开文件*/
    {
        printf("can not open file\n"); /*不能打开*/
        exit(1); /*退出*/
    }
    fscanf(fp, "%d", &n); /*读入记录数*/
    for(i = 0; i < n; i++)
        fscanf(fp, "%20s%30s%10s", t[i].name, t[i].units, t[i].tele); /*按格式读入记录*/
    fclose(fp); /*关闭文件*/
    printf("You have success read data from file!!!\n"); /*显示保存成功*/
    return n; /*返回记录数*/
}

/按序号显示记录函数/

void display(ADDRESS t[])
{
    int id, n;
    FILE *fp; /*指向文件的指针*/
    if((fp = fopen("record.txt", "rb")) == NULL) /*打开文件*/
    {
        printf("can not open file\n"); /*不能打开文件*/
        exit(1); /*退出*/
    }
    printf("Enter order number...\n"); /*显示信息*/
    scanf("%d", &id); /*输入序号*/
    fscanf(fp, "%d", &n); /*从文件读入记录数*/
    if(id >= 0 && id < n) /*判断序号是否在记录范围内*/
    {
        fseek(fp, (id - 1) * sizeof(ADDRESS), 1); /*移动文件指针到该记录位置*/
        print(t[id]); /*调用输出函数显示该记录*/
        printf("\r\n");
    }
    else
        printf("no %d number record!!!\n ", id); /*如果序号不合理显示信息*/
    fclose(fp); /*关闭文件*/
}

/排序函数,参数为结构体数组和记录数/

void sort(ADDRESS t[], int n)
{
    int i, j, flag;
    ADDRESS temp; /*临时变量做交换数据用*/
    for(i = 0; i < n; i++)
    {
        flag = 0; /*设标志判断是否发生过交换*/
        for(j = 0; j < n - 1; j++)
            if((strcmp(t[j].name, t[j + 1].name)) > 0) /*比较大小*/
            {
                flag = 1;
                strcpy(temp.name, t[j].name); /*交换记录*/
                strcpy(temp.units, t[j].units);
                strcpy(temp.tele, t[j].tele);
                strcpy(t[j].name, t[j + 1].name);
                strcpy(t[j].units, t[j + 1].units);
                strcpy(t[j].tele, t[j + 1].tele);
                strcpy(t[j + 1].name, temp.name);
                strcpy(t[j + 1].units, temp.units);
                strcpy(t[j + 1].tele, temp.tele);
            }
        if(flag == 0) break; /*如果标志为0,说明没有发生过交换循环结束*/
    }
    printf("sort sucess!!!\n"); /*显示排序成功*/
}

/快速查找,参数为结构体数组和记录数/

void qseek(ADDRESS t[], int n)
{
    char s[20];
    int l, r, m;
    printf("\nPlease sort before qseek!\n"); /*提示确认在查找之前,记录是否已排序*/
    printf("please enter name for qseek\n"); /*提示输入*/
    scanf("%s", s); /*输入待查找的姓名*/
    l = 0; r = n - 1; /*设置左边界与右边界的初值*/
    while(l <= r) /*当左边界<=右边界时*/
    {
        m = (l + r) / 2; /*计算中间位置*/
        if(strcmp(t[m].name, s) == 0) /*与中间结点姓名字段做比较判是否相等*/
        {
            print(t[m]); /*如果相等,则调用print函数显示记录信息*/
            return ; /*返回*/
        }
        if(strcmp(t[m].name, s) < 0) /*如果中间结点小*/
            l = m + 1; /*修改左边界*/
        else
            r = m - 1; /*否则,中间结点大,修改右边界*/
    }
    if(l > r) /*如果左边界大于右边界时*/
        printf("not found\n"); /*显示没找到*/
}

/复制文件/

void copy()
{
    char outfile[20]; /*目标文件名*/
    int i, n;
    ADDRESS temp[M]; /*定义临时变量*/
    FILE *sfp, *tfp; /*定义指向文件的指针*/
    clrscr();/*清屏*/
    if((sfp = fopen("record.txt", "rb")) == NULL) /*打开记录文件*/
    {
        printf("can not open file\n"); /*显示不能打开文件信息*/
        exit(1); /*退出*/
    }
    printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
    scanf("%s", outfile); /*输入目标文件名*/
    if((tfp = fopen(outfile, "wb")) == NULL) /*打开目标文件*/
    {
        printf("can not open file\n"); /*显示不能打开文件信息*/
        exit(1); /*退出*/
    }
    fscanf(sfp, "%d", &n); /*读出文件记录数*/
    fprintf(tfp, "%d", n);/*写入目标文件数*/
    fprintf(tfp, "\r\n"); /*写入换行符*/
    for(i = 0; i < n; i++)
    {
        fscanf(sfp, "%20s%30s%10s\n", temp[i].name, temp[i].units, temp[i].tele); /*读入记录*/
        fprintf(tfp, "%-20s%-30s%-10s\n", temp[i].name, temp[i].units, temp[i].tele); /*写入记录*/
        fprintf(tfp, "\r\n"); /*写入换行符*/
    }
    fclose(sfp); /*关闭源文件*/
    fclose(tfp); /*关闭目标文件*/
    printf("you have success copy file!!!\n"); /*显示复制成功*/
}