亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c.svn-base

?? 可以作為Linux教學用的程序
?? SVN-BASE
字號:
/* main.c */#define _XOPEN_SOURCE#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <ncurses.h>#include <ctype.h>#include <time.h>#include "communication.h"#include "protocol.h"#include "ticket.h"#define MAX_STRING 80 	/* longest allowed response		*/#define MESSAGE_LINE 6	/* misc. messages on this line		*/#define ERROR_LINE 22	/* line to use for errors		*/#define Q_LINE 20	/* line for questions			*/#define PROMPT_LINE 18	/* line for prompting on 		*/#define COLOR_PAIR_1 1#define COLOR_PAIR_2 2#define COLOR_PAIR_3 3static short color_bg;static short color_fg;void clear_all_screen(void);void get_return(void);int get_confirm(void);int getchoice(char *greet, char *choices[]);void draw_menu(char * options[],int highlight, int start_row, int start_col);void get_string(char * string);int user_login(void);int tbs_exit(void);void init_colors(void );int book_ticket();int list_book_history();int check_user(const char *h, const char * l);int query_tickets(ticket_t *tics, int max, const char *trainno, time_t start, time_t end);int book(ticket_t * tic, int count);	char *main_menu[] = {	"Book Ticket",	"List Book History",	"Quit",	NULL,};int user_id;int main(){	//system varibles		//ui stuff	int choice;		initscr();	init_colors();	communication_init();		user_id = user_login();		do{		choice = getchoice("Select The Action You Want To Performed", main_menu);		switch(choice){		case 'b':			book_ticket();			break;		case 'l':			list_book_history();			break;		case 'q':			tbs_exit();			break;		}	}while(choice != 'q');	endwin();	exit(EXIT_SUCCESS);}int tbs_exit(){	endwin();	exit(EXIT_SUCCESS);	return 0;}int user_login(void){	int id = -1;	int i = 0;	int row = 5;	int col = COLS/2 - 15;	char user_name[MAX_STRING];	char user_pwd[MAX_STRING];	for(i = 0;i<3;i++){		clear_all_screen();		mvprintw(row, col + 8, "User Login");		mvprintw( row + 2, col, "User Name: ");		get_string(user_name);		if(strcmp(user_name, "exit") == 0){			tbs_exit();		}		mvprintw( row + 4, col, "Password : ");		noecho();		get_string(user_pwd);		echo();		if((id = check_user(user_name, user_pwd)) <0){			if(i == 2){				tbs_exit();			}else{								if(id == INVALID_USR){					clear_all_screen();					attron(COLOR_PAIR(1));					mvprintw( row+ 5, col, "Invalid User Name");					attroff(COLOR_PAIR(1));					refresh();					sleep(2);				}else if (id == INVALID_PWD){					clear_all_screen();					attron(COLOR_PAIR(1));					mvprintw( row+ 5, col, "Invalid Password");					attroff(COLOR_PAIR(1));					refresh();					sleep(2);				}else{					clear_all_screen();					attron(COLOR_PAIR(1));					mvprintw( row+ 5, col, "Server Busy");					attroff(COLOR_PAIR(1));					refresh();					sleep(2);				}			}		}else{			clear_all_screen();			attron(COLOR_PAIR(3));			mvprintw( row+ 5, col, "Login Succeed");			attroff(COLOR_PAIR(3));			refresh();			sleep(2);			return id;		}	}	return 0;}void init_colors(){	if(has_colors()){		if(start_color() == OK ){			//init color pairs			pair_content(0, &color_fg, &color_bg);			init_pair(COLOR_PAIR_1, COLOR_RED, color_bg );			init_pair(COLOR_PAIR_2, COLOR_BLUE, color_bg );			init_pair(COLOR_PAIR_3, COLOR_GREEN, color_bg );		}	}}int getchoice(char *greet, char *choices[]){	static int selected_row = 0;	int max_row = 0;	int start_screenrow = MESSAGE_LINE,	    start_screencol = 10;	char **option;	int selected;	int key = 0;	option = choices;	while(*option){		max_row++;		option++;	}	/* protect against menu getting shorter when CD deleted */	if(selected_row >= max_row)		selected_row = 0;	clear_all_screen();	mvprintw(start_screenrow - 2, start_screencol, greet);	keypad(stdscr, TRUE);	cbreak();	noecho();	key = 0;	while(key != 'q' && key != KEY_ENTER && key != '\n'){		if( key == KEY_UP){			if(selected_row == 0)				selected_row = max_row -1;			else				selected_row --;		}		if( key == KEY_DOWN){			if(selected_row == (max_row - 1))				selected_row = 0;			else				selected_row ++;		}		selected = *choices[selected_row];		draw_menu(choices, selected_row, start_screenrow, start_screencol);		key = getch();	}	keypad(stdscr, FALSE);	nocbreak();	echo();	if(key == 'q'){		selected = 'q';	}	return tolower(selected);}void draw_menu(char *options[],int current_highlight, int start_row, int start_col){	int current_row = 0;	char **option_ptr;	char * txt_ptr;	option_ptr = options;	while(*option_ptr){		if(current_row == current_highlight) attron(COLOR_PAIR(COLOR_PAIR_2) | A_BOLD);		txt_ptr = options[current_row];		mvprintw(start_row + current_row, start_col, "%s", txt_ptr);		if(current_row == current_highlight) attroff(COLOR_PAIR(COLOR_PAIR_2) | A_BOLD);		current_row++;		option_ptr ++;	}	mvprintw(start_row + current_row +3, start_col, "Move highlight then press Enter");	refresh();}void clear_all_screen(){	char *title = "Live Ticket Booking System";	int len = strlen(title);	clear();	attron(A_BOLD);	mvprintw(2,(COLS -len)/2 ,"%s",title);	attroff(A_BOLD);	refresh();}void get_return(){	int ch;	mvprintw(23,0,"%s", " Press return ");	refresh();	while((ch = getchar()) != '\n' && ch != EOF);}void get_string(char * string){	int len;	wgetnstr(stdscr, string, MAX_STRING);	len = strlen(string);	if(len >0 && string[len - 1] == '\n')		string[len -1] = '\0';}int get_confirm(){	int confirmed = 0;	char first_char;	mvprintw(Q_LINE, 5, "Are you sure? ");	clrtoeol();	refresh();	cbreak();	first_char= getch();	if(first_char == 'Y' || first_char == 'y'){		confirmed = 1;	}	nocbreak();	if(!confirmed){		mvprintw(Q_LINE, 1, "\tCancelled");		clrtoeol();		refresh();		sleep(1);	}	return confirmed;}int check_user(const char *user_name, const char * user_pwd){	protocol_t out_msg;	protocol_t in_msg;	char msg_buf[512];	empty_msg(&out_msg);	empty_msg(&in_msg);		out_msg.act_type = ASK_LOGIN;	strcpy(out_msg.usr_name, user_name);	strcpy(out_msg.usr_pwd, user_pwd);		if(format_msg(&out_msg, msg_buf) != 0){		perror("Cannot format message!");		tbs_exit();	}	send_msg(msg_buf);	recv_msg(msg_buf, 512);		if(parse_msg(&in_msg, msg_buf) != 0){		perror("\nCannot parse message!");		tbs_exit();	}		return in_msg.usr_id;}int book_ticket(){	int row = 4;	int col = COLS/2 - 15;	char trainno[MAX_STRING];	char time_s[MAX_STRING];	char time_e[MAX_STRING];	char time1[MAX_STRING];		time_t time_start;	time_t time_end;	struct tm tim_s;	struct tm tim_e;	const int MAX_TICKET = 10;	ticket_t tickets[MAX_TICKET];	int ticket_num = 0;	int selected_id;	int selected_num;		clear_all_screen();	mvprintw(row, col + 8, "Book Ticket");	mvprintw( row + 2, col, "Train No: ");	get_string(trainno);	if(strcmp(trainno, "e") == 0){		return 0;	}	mvprintw( row + 4, col, "Time Range ");		while(1){		char *ptr;		move(row+6,col);		clrtoeol();		mvprintw(row + 6, col, "From: ");		get_string(time_s);		ptr = strptime(time_s,"%Y-%m-%d %H:%M:%S",&tim_s);		time_start = mktime(&tim_s);		if(ptr != NULL && *ptr == '\0')			break;	}	while(1){		char *ptr;		move(row+7,col);		clrtoeol();		mvprintw(row + 7, col, "To  : ");		get_string(time_e);		ptr = strptime(time_e,"%Y-%m-%d %H:%M:%S",&tim_e);		time_end = mktime(&tim_e);		if(ptr != NULL && *ptr == '\0')			break;	}		ticket_num = query_tickets(tickets, MAX_TICKET, trainno, time_start, time_end);		clear_all_screen();	if(ticket_num <= 0){		mvprintw(row, col + 8, "Book Ticket");		mvprintw( row + 2, col, "No Matched Ticket");		mvprintw( row + 4, col, "Press Enter To Get Return");		get_return();		return 0;	}else{		int start_row = row + 2;		int i ;		for(i = 0;i < ticket_num; i++){			gmtime_r(&(tickets[i].time), &tim_s);			strftime(time1, MAX_STRING,"%Y-%m-%d %H:%M:%S",&tim_s);			mvprintw(start_row+i, 4, "%d\t%s\t%s\t%d\t%s",				i, 				tickets[i].trainno,				time1,				tickets[i].num,				tickets[i].description);		}		refresh();	}		while(TRUE){		mvprintw(Q_LINE, 5, "Enter The Ticket ID: ");		get_string(trainno);		if((selected_id = atoi(trainno))<=ticket_num && selected_id >=0){			if(tickets[selected_id].num != 0)				break;		}	}	while(TRUE){		clrtoeol();		mvprintw(Q_LINE, 5, "Enter The Ticket Count: ");		get_string(trainno);		if((selected_num = atoi(trainno))<=tickets[selected_id].num && selected_num >0)			break;	}		if(get_confirm()){		book(&(tickets[selected_id]), selected_num);	}	return 0;}int query_tickets(ticket_t *tics, int max, const char *trainno, time_t time_start, time_t time_end){	int i;	protocol_t in_msg;	protocol_t out_msg;	char msg_buf[512];		empty_msg(&in_msg);	empty_msg(&out_msg);		out_msg.act_type = ASK_QUERY_TICKET;	out_msg.usr_id = user_id;	out_msg.time_start = time_start;	out_msg.time_end = time_end;	strcpy(out_msg.train_no, trainno);		if(format_msg(&out_msg, msg_buf) != 0){		perror("Cannot format message!");		tbs_exit();	}	// send query	send_msg(msg_buf);		// recieve replies	for(i = 0;;i++){		recv_msg(msg_buf, 512);	//	mvprintw(23, 0, "recieved: %s", msg_buf);	//	refresh();		if(parse_msg(&in_msg, msg_buf) != 0){			perror("\nCannot parse message!");			tbs_exit();		}		if(in_msg.ticket_id >= 0){			if(i>= max)continue;			tics[i].id = in_msg.ticket_id;			tics[i].time = in_msg.time_start;			tics[i].num = in_msg.ticket_count;			strcpy(tics[i].description,in_msg.other);			strcpy(tics[i].trainno, in_msg.train_no);		}else{			return i;		}	}	return 0;}int list_book_history(){	int row = 5;	protocol_t in_msg;	protocol_t out_msg;	char msg_buf[512];	char order_time[256];	char time[256];	struct tm tim1;	struct tm tim2;		empty_msg(&in_msg);	empty_msg(&out_msg);		out_msg.act_type = ASK_QUERY_BOOKING;	out_msg.usr_id = user_id;		if(format_msg(&out_msg, msg_buf) != 0){		perror("Cannot format message!");		tbs_exit();	}	// send query	send_msg(msg_buf);	// recieve replies		clear_all_screen();	while(1){			recv_msg(msg_buf, 512);	//	mvprintw(23, 0, "recieved: %s", msg_buf);	//	refresh();		if(parse_msg(&in_msg, msg_buf) != 0){			perror("\nCannot parse message!");			tbs_exit();		}		if(in_msg.order_no >= 0){			if(row >= LINES -2)continue;					gmtime_r(&(in_msg.time_start), &tim1);			strftime(order_time, MAX_STRING,"%Y-%m-%d %H:%M:%S",&tim1);				gmtime_r(&(in_msg.time_end), &tim2);			strftime(time, MAX_STRING,"%Y-%m-%d %H:%M:%S",&tim2);						mvprintw(++row, 0 , "    %d\t%s\t%s\t%s\t%d\t%s",					in_msg.order_no,					order_time,					in_msg.train_no,					time,					in_msg.ticket_count,					in_msg.other);		}else{			break;		}	}	if(row == 4){		mvprintw(5, 20,"You haven't book any ticket!");		refresh();	}else{		move(++row, 0);		clrtoeol();	}	get_return();	return 0;}int book(ticket_t * tic, int count){	protocol_t in_msg;	protocol_t out_msg;	char msg_buf[512];		empty_msg(&in_msg);	empty_msg(&out_msg);		out_msg.act_type = ASK_BOOK;	out_msg.usr_id = user_id;	out_msg.ticket_id = tic->id;	out_msg.ticket_count = count;		if(format_msg(&out_msg, msg_buf) != 0){		perror("Cannot format message!");		tbs_exit();	}	// send query	send_msg(msg_buf);		recv_msg(msg_buf, 512);	//	mvprintw(23, 0, "recieved: %s", msg_buf);	//	refresh();	if(parse_msg(&in_msg, msg_buf) != 0){		perror("\nCannot parse message!");		tbs_exit();	}	if(in_msg.ticket_id >= 0){		clear_all_screen();		mvprintw(8, 30,"Book Succeeded!");		refresh();		get_return();	}else{		clear_all_screen();		mvprintw(8, 10, "Sorry, There are only %d tickets left.", in_msg.ticket_count);		refresh();		get_return();	}	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜一区二区三区| 麻豆国产精品视频| 亚洲不卡在线观看| 国产.欧美.日韩| 6080日韩午夜伦伦午夜伦| 国产精品久久久久久久久免费相片 | 成人欧美一区二区三区黑人麻豆| 亚洲一区二区欧美日韩| 国产成人在线视频播放| 91精品国产一区二区人妖| 亚洲视频网在线直播| 国产九色sp调教91| 欧美一区二区三区人| 亚洲综合免费观看高清在线观看| 成人一区二区三区中文字幕| 欧美电影免费观看高清完整版在线观看 | 国产精品你懂的在线欣赏| 亚洲va国产天堂va久久en| 99麻豆久久久国产精品免费| 精品久久国产字幕高潮| 免费在线一区观看| 欧美美女一区二区三区| 一区二区三区在线免费播放| 成人国产电影网| 国产精品国产三级国产aⅴ无密码| 国产在线精品免费| 26uuu色噜噜精品一区二区| 美女一区二区视频| 欧美大片在线观看| 久久99热狠狠色一区二区| 日韩欧美成人激情| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美美女一区二区在线观看| 视频一区二区欧美| 欧美一区2区视频在线观看| 五月婷婷激情综合网| 3d成人动漫网站| 蜜桃传媒麻豆第一区在线观看| 欧美精品一级二级三级| 日本在线不卡一区| 日韩欧美国产一区二区三区 | 91福利社在线观看| 亚洲精品国产品国语在线app| 色屁屁一区二区| 亚洲.国产.中文慕字在线| 在线播放/欧美激情| 免费av成人在线| 精品国精品国产尤物美女| 精品一二线国产| 国产精品传媒在线| 欧美丝袜自拍制服另类| 日本成人在线电影网| 久久婷婷综合激情| av一区二区久久| 亚洲成人免费观看| 久久亚洲一区二区三区明星换脸| 高清国产一区二区| 亚洲精品欧美激情| 在线观看91av| 国产一区二区三区日韩 | 一本久久a久久免费精品不卡| 亚洲一区二区三区在线播放| 欧美高清精品3d| 国产精品一区二区在线观看不卡 | 国产在线精品不卡| 欧美一区二区在线免费观看| 日本aⅴ亚洲精品中文乱码| 欧美日精品一区视频| 色综合久久综合中文综合网| 青青青伊人色综合久久| 日本一不卡视频| 日韩中文字幕av电影| 蜜臀99久久精品久久久久久软件| 日韩一区二区三免费高清| 中文字幕一区二区三区四区不卡 | 久久精品视频在线免费观看| 久久se这里有精品| 精品处破学生在线二十三| 九九精品一区二区| 国产色91在线| 欧美性xxxxxxxx| 美女视频网站黄色亚洲| 日韩欧美一卡二卡| 一本久道久久综合中文字幕 | 亚洲国产日韩综合久久精品| 欧美一区二区在线免费播放| 91福利视频久久久久| 亚洲午夜免费电影| 国产精品女主播在线观看| 在线观看免费亚洲| 国产精品性做久久久久久| 亚洲成a人片在线观看中文| 日本一区二区三区在线观看| 91精品国产综合久久久久久 | 在线电影一区二区三区| 波多野结衣亚洲| 精彩视频一区二区| 日韩av电影免费观看高清完整版在线观看| 成人免费在线观看入口| 国产情人综合久久777777| 日韩西西人体444www| 欧美吻胸吃奶大尺度电影| 91网页版在线| 成人免费视频caoporn| 国内成人精品2018免费看| 蜜乳av一区二区三区| 青草av.久久免费一区| 亚洲成人福利片| 一区二区欧美在线观看| 亚洲欧洲国产日韩| 国产精品蜜臀av| 国产精品福利电影一区二区三区四区 | 成人免费的视频| 国产伦精品一区二区三区免费迷| 麻豆成人综合网| 精品一区二区三区视频| 美女精品一区二区| 国产中文字幕精品| 国产精品亚洲午夜一区二区三区 | 成人丝袜高跟foot| 懂色av噜噜一区二区三区av| 国产91在线看| eeuss鲁片一区二区三区在线观看| 粉嫩av一区二区三区粉嫩 | 国产精品久久福利| 亚洲视频综合在线| 亚洲a一区二区| 毛片av一区二区| 国产成人三级在线观看| www.久久久久久久久| 91年精品国产| 欧美日韩成人一区| 欧美精品一区二区三区蜜桃视频| 国产日产亚洲精品系列| 亚洲欧美一区二区三区孕妇| 亚洲最大的成人av| 美女视频一区在线观看| 国产福利一区二区三区| 91国产免费观看| 日韩小视频在线观看专区| 久久精品人人做人人综合| 亚洲欧美另类久久久精品 | 亚洲高清免费视频| 七七婷婷婷婷精品国产| 国产伦理精品不卡| 欧美亚日韩国产aⅴ精品中极品| 欧美片在线播放| 久久亚区不卡日本| 亚洲自拍偷拍网站| 国产伦精品一区二区三区在线观看| 91丨porny丨首页| 日韩午夜在线观看视频| 国产精品理伦片| 日韩高清一级片| 91在线观看成人| 欧美哺乳videos| 一区二区三区毛片| 国产乱码精品一区二区三区忘忧草 | 亚洲第一狼人社区| 国产a级毛片一区| 欧美精品三级在线观看| 中文字幕一区二区5566日韩| 日本sm残虐另类| 日本乱人伦一区| 久久久久久影视| 午夜精品一区二区三区三上悠亚| 国产精品亚洲综合一区在线观看| 欧美老女人第四色| 亚洲另类一区二区| 国产精品88888| 日韩一区二区三| 亚洲成a人片在线不卡一二三区| 成人深夜福利app| 精品国产区一区| 日韩精品欧美成人高清一区二区| 成人av综合一区| 久久久久久99久久久精品网站| 亚洲国产成人av网| 91久久精品一区二区三| 国产欧美视频一区二区三区| 免费精品视频在线| 欧美日本一区二区三区四区| 亚洲精品中文字幕在线观看| 国产99精品视频| 久久久久久免费网| 久久av中文字幕片| 日韩欧美一二三四区| 日本中文字幕一区二区视频 | 国产亚洲欧美日韩俺去了| 丝袜美腿亚洲综合| 欧美三日本三级三级在线播放| 中文字幕中文字幕一区二区| 国产盗摄精品一区二区三区在线| 精品国产一区二区在线观看| 免费在线看成人av| 91麻豆精品国产自产在线| 亚洲综合色婷婷| 在线视频你懂得一区| 亚洲激情网站免费观看| 欧美在线视频日韩|