⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 input.c

📁 LINUX下POS收银系统,可以对货物及工作人员进行管理.近本实现增删改查的功能
💻 C
字号:
#include "input.h"
#include "frame.h"
#include <malloc.h>
#include <string.h>

int inputchar(INPUT *i,int ifshow,int if_use_Fn,int if_english)
{
	int current_count=0,cur_x=0,cur_y=0,cur_sor=0;
	int temp_char=0,j=0;
	char *temp=(char *)malloc((i->length)+1);
	noecho();
	keypad((i->f)->win,TRUE);
	memset(temp,0,(i->length)+1);
	cur_sor=current_count=strlen(i->str);
	getbegyx((i->f)->win,cur_x,cur_y);

	if(ifshow == 1)
	{
		mvwprintw((i->f)->win,0,0,"%s",i->str);
	}
	else
	{
		for(j=0;j<current_count;j++)
		{
			mvwprintw((i->f)->win,0,j,"*");
		}
	}
	wrefresh((i->f)->win);

	move(cur_x,cur_y+current_count);
	wrefresh((i->f)->win);
	
	do
	{
		temp_char=wgetch((i->f)->win);
		switch (temp_char)
		{
		case KEY_BACKSPACE/*263退格键*/:
			if(cur_sor>0&&cur_sor<current_count)
			{
				strcpy((i->str)+cur_sor-1,(i->str)+cur_sor);
				current_count--;
				cur_sor--;
				i->f->clearout(i->f);
				if(ifshow == 1)
				{
					mvwprintw((i->f)->win,0,0,"%s",i->str);
				}
				else
				{
					for(j=0;j<current_count;j++)
					{
						mvwprintw((i->f)->win,0,j,"*");
					}
				}
				wrefresh((i->f)->win);
				move(cur_x,cur_y+cur_sor);
				refresh();
			}
			else
			{
				if(cur_sor>0&&cur_sor==current_count)
				{
					*((i->str)+cur_sor-1)=0;
					current_count--;
					cur_sor--;
					wprintw(i->f->win,"\b \b");
					wrefresh((i->f)->win);
				}
			}
			continue;
		case KEY_UP/*259向上键*/:
			if(i->neighbor[0] != 0)
			{
				free(temp);
				echo();
				return i->neighbor[0];
			}
			continue;
		case KEY_DOWN/*258向下键*/:
			if(i->neighbor[1] != 0)
			{
				free(temp);
				echo();
				return i->neighbor[1];
			}
			continue;
		case KEY_LEFT/*260向左键*/:
			if(cur_sor>0)
			{
				cur_sor--;
				move(cur_x,cur_y+cur_sor);
				refresh();	
			}
			continue;
		case KEY_RIGHT/*261向右键*/:
			if(cur_sor<current_count)
			{
				cur_sor++;
				move(cur_x,cur_y+cur_sor);
				refresh();
				
			}
			continue;
		case 27/*ESC键*/:
			free(temp);
			echo();
			return 27;
			break;
		case 9/*Tab键*/:
			if(i->neighbor[2] != 0)
			{
				free(temp);
				echo();
				return i->neighbor[2];
			}
			continue;
		case 10/*回车键*/:
			free(temp);
			echo();
			if(if_use_Fn)
			{
				return 10;
			}
			else
			{
				return i->neighbor[1];
			}
			continue;
		default:
			if(if_english)/////
			{
				if(temp_char>=33&&temp_char<=126)///////
				{
					if(current_count<(i->length))/**/
					{
						if(cur_sor>=0&&cur_sor<current_count)
						{
							strcpy(temp,(i->str)+cur_sor);
							*((i->str)+cur_sor)=temp_char;
							strcpy((i->str)+cur_sor+1,temp);
							cur_sor++;
							current_count++;
							i->f->clearout(i->f);
							if(ifshow == 1)
							{
								mvwprintw((i->f)->win,0,0,"%s",i->str);
							}
							else
							{
								for(j=0;j<current_count;j++)
								{
									mvwprintw((i->f)->win,0,j,"*");
								}
							}
							wrefresh((i->f)->win);
							move(cur_x,cur_y+cur_sor);
							refresh();
							memset(temp,0,(i->length)+1);
							continue;
						}
						else
						{
							*((i->str)+cur_sor)=temp_char;
							if(ifshow == 1)
							{
							/*	wprintw((i->f)->win,"%c",temp_char);*/
								mvwprintw((i->f)->win,0,0,"%s",i->str);
							}
							else
							{
								wprintw((i->f)->win,"*");
							}
							wrefresh((i->f)->win);
							cur_sor++;
							current_count++;
							continue;
						}
					}
					else
					{
						continue;
					}/**/
				}
				else
				{
					if(if_use_Fn)
					{
						if (temp_char>=265&&temp_char<=276)
						{
							return temp_char;
						}
						else
						{
							continue;
						}
					}
					else
					{
						continue;
					}
				}////////////////

			}else///
			{
				if(current_count<(i->length))/**/
					{
						if(cur_sor>=0&&cur_sor<current_count)
						{
							strcpy(temp,(i->str)+cur_sor);
							*((i->str)+cur_sor)=temp_char;
							strcpy((i->str)+cur_sor+1,temp);
							cur_sor++;
							current_count++;
							i->f->clearout(i->f);
							if(ifshow == 1)
							{
								mvwprintw((i->f)->win,0,0,"%s",i->str);
							}
							else
							{
								for(j=0;j<current_count;j++)
								{
									mvwprintw((i->f)->win,0,j,"*");
								}
							}
							wrefresh((i->f)->win);
							move(cur_x,cur_y+cur_sor);
							refresh();
							memset(temp,0,(i->length)+1);
							continue;
						}
						else
						{
							*((i->str)+cur_sor)=temp_char;
							if(ifshow == 1)
							{
							/*	wprintw((i->f)->win,"%c",temp_char);*/
								mvwprintw((i->f)->win,0,0,"%s",i->str);
							}
							else
							{
								wprintw((i->f)->win,"*");
							}
							wrefresh((i->f)->win);
							cur_sor++;
							current_count++;
							continue;
						}
					}
					else
					{
						continue;
					}/**/
			}
		}
	}
	while (1);
}
void free_input_frame(INPUT **i)
{
	free((*i)->str);
	free((*i));
}

void del_string(INPUT *i)
{
	memset(i->str,'\0',strlen(i->str));
	i->f->clearout(i->f);
	wrefresh((i->f)->win);
	wmove((i->f)->win,0,0);
	wrefresh((i->f)->win);
}
INPUT *create_input(FRAME *f1,int l,int front,int next,int tab)
{
	INPUT *i=(INPUT *)malloc(sizeof(INPUT));
	i->str=(char *)malloc(l+1);
	memset(i->str,0,l+1);
	i->f=f1;
	i->length=l;
	i->neighbor[0]=front;
	i->neighbor[1]=next;
	i->neighbor[2]=tab;
	i->free=free_input_frame;
	i->input_char=inputchar;
	i->del_str=del_string;
}
/*
int main()
{
	initscr();
	int sign=1;
	if(has_colors==FALSE)
	{
		endwin();
		exit(0);
	}
	start_color();
	init_pair(1,COLOR_BLACK,COLOR_WHITE);
	init_pair(2,COLOR_RED,COLOR_BLUE);
	init_pair(3,COLOR_BLACK,COLOR_RED);
	wbkgd(stdscr,COLOR_PAIR(1));
	refresh();
//////////////////////////////////////////////////
	FRAME *f=creat_frame(11,29,1,20,3);
	FRAME *f1=creat_frame(13,29,1,20,3);
	f->draw(f);
	f1->draw(f1);
	INPUT *i1=create_input(f,10,2,2,3);
	INPUT *i2=create_input(f1,10,1,1,3);
	do
	{
		switch (sign)
		{
		case 1:
			sign=i1->input_char(i1,1,0);
			break;
		case 2:
			sign=i2->input_char(i2,1,0);
			break;
		}
	}
	while (sign!=3);
	mvprintw(12,29,"%s",i1->str);
	i1->del_str(i1);
	getchar();
	mvprintw(14,29,"%s",i2->str);
	i2->del_str(i2);
	getchar();
	refresh();
	f->free(&f);
	f1->free(&f1);
	i1->free(&i1);
	i2->free(&i2);
//////////////////////////////////////////////////
	attroff(COLOR_PAIR(1));
	attroff(COLOR_PAIR(2));
	attroff(COLOR_PAIR(3));
	endwin();
	return 0;
}
*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -