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

📄 main.c

📁 非常完善的小型操作系统代码!是学习操作系统的最好的一个
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "main.h"
#include "var.h"
void
VOID_Sale_Ticket()
{
char	bus_bc[10], in_st[6], buffer1[50], buffer2[50];
int	fdr,st_n,b_j, d_n, str_len, i, ticket_n, ticket_n_f, len, input, j;
char	ls[8],display_buf[5][31], f_ret, ticket_num_half[10], ticket_num[10];
long 	l, sum,ls1,ljje,lj1,lj2,jsq;
	memset( (char *)&trans, 0 ,LEN_Sale_Ticket);
		strcpy( trans.busman, Busman.busman);
		get_date(trans.date_time);
		get_time(trans.date_time+9);
		trans.date_time[15]=0;
		trans.settle_flag = 0;
                trans.jsdh=0;
		trans.jk_flag = 0;

        cls();
        display_cen(1,"请选择售票线路");
	display(2,"售票员: %8.8s  ",Busman.busman_name);
	display(4,"请输入班次");
	display(5,"班次:");		
	do{
		input = getstrn(5,7,0,0,5,bus_bc);
		if( bus_bc[0] == (char )0xff && input == 1)
			return;
	}while( input > 5 || input < 1 );
	strcpy( trans.bus_bc, bus_bc);
	
	display(7,"请输入班车编号");
	display(8,"班车编号:");
	do{
                memset( ls, 0,sizeof(ls));
		input = getstrn(8,11,0,0,7,ls);
		if( ls[0] == (char )0xff && input == 1)
			return;
	}while( input > 7 || input < 1 );
        ls1=atol(ls);
        sprintf( trans.bus_no, "%07ld", ls1);
	fdr=get_driver_name( trans.bus_no );      //   寻找车姓名
        if (fdr!=0){
            cls();
            display_cen(5,"该车号没有注册,不能售票");
            inkey(0);
            return;
        }
	//display(2,"%-8.8s 车%-8.8s 车%-3.3s",drive.driver_name, drive.car_no, drive.car_home);
	//inkey(0);
	st_n = 0;
        b_j=0;
	f_ret=openfile("F_STLS");
	if (check_openfile( f_ret ) == US_FAIL ){
		cls();
		display_cen ( 4 , "流水文件系统出错" ) ;
		display_cen ( 5 , "不能正常工作");
		display_cen ( 6 , "按任意键将自动关机" ) ;
		systemsound ( 400 ) ;
		inkey(0);
		enable_poweroff();
		power_off();
	}
	seekfile( f_ret, 0, SEEK_SET);
        jsq=0;
				do{
					memset( (char *)&trans_rec, 0, LEN_Sale_Ticket);
					readfile (f_ret, LEN_Sale_Ticket, (char *)&trans_rec);
					if( trans_rec.settle_flag == 0)
						break;
                                        jsq=jsq+1;
				}while( eoffile( f_ret ) != 1);

        closefile(f_ret); 
	while (1) {
		display_cen(1,"请选择售票线路");
		display(2,"%-8.8s 车次%-5.5s %-8.8s",Busman.busman_name, trans.bus_bc , drive.car_no);
		memset( (char *)&stat_line, 0, LEN_Station);
		for( i = 3; i <10; i++)
			display( i, "");
		for ( d_n = 0; d_n < 5; d_n++){
			memset( buffer2, 0, sizeof( buffer2 ));
			memset( buffer1, 0, sizeof( buffer1 ));
                       if ( station_display[st_n].line_no == 999){
                           b_j=99;
                           st_n=0;
                           break;
                        }
 			if ( station_display[st_n].line_no != 999 && b_j!=99){
				sprintf(buffer1, "%03d.%-10.10s", station_display[st_n].line_no, station_display[st_n].line_name);
			}
                       if ( station_display[st_n+1].line_no == 999){
                           b_j=99;
                           st_n=0;
                           break;
                        }

			if (station_display[st_n+1].line_no != 999 && b_j!=99){
				sprintf(buffer2, "%03d.%-10.10s", station_display[st_n+1].line_no, station_display[st_n+1].line_name);
			}
			sprintf(display_buf[d_n],"  %14.14s%14.14s  ", buffer1, buffer2); 
                        if (b_j!=99){
               		    	st_n = st_n + 2;
                        }
                        if (b_j != 99){
         			display( 3+ d_n, display_buf[d_n] );
                        }
		}
                 b_j=0;
			sprintf(display_buf[d_n],"  %14.14s%14.14s  ", buffer1, buffer2); 
       			display( 3+ d_n, display_buf[d_n] );

		display(8,"全0翻页,线路编号:");
		display(9,"当前票号: %07ld", kpph+1);
		do{
			input = getstrn( 8, 18, 0, 0, 3, in_st);
			if( in_st[0] == (char )0xff && input == 1)
				return;
		}while( input>3 || input < 1);
		str_len = atoi( in_st );
		if ( str_len == 0){
			if ( st_n == LINE_NUM_MAX || station_display[st_n].line_no == 999)
				st_n = 0;
			continue;
		}
		for( i = 0; i< LINE_NUM_MAX; i++){
			if ( station_display[i].line_no == 999 )
				break;
			if ( station_display[i].line_no==str_len){
				memcpy( (char *)&stat_line, (char *)&station_display[i], LEN_Station);
				break;
			}
		}
		if ( stat_line. line_no != 0 ){
			st_n = i;
			break;
		}
	}
	/*
		fileseek=LEN_Station;
		for( i= 0; i< st_n ; i++ ){
			fileseek = fileseek + LEN_Station *( i+1) + LEN_Bus_Fare * station_display[i].station_num;
		}
	*/
	get_sta_name( stat_line. line_no );
	f_ret=openfile("F_STLS");
	if (check_openfile( f_ret ) == US_FAIL ){
		cls();
		display_cen ( 4 , "流水文件系统出错" ) ;
		display_cen ( 5 , "不能正常工作");
		display_cen ( 6 , "按任意键将自动关机" ) ;
		systemsound ( 400 ) ;
		inkey(0);
		enable_poweroff();
		power_off();
	}
	seekfile( f_ret, 0, SEEK_END);
	while(1){
		st_n = 0;
		while(1){
			display_cen(1,"请选择到站站点");
			display(2,"%-8.8s车次%-5.5s %-8.8s",Busman.busman_name, trans.bus_bc , drive.car_no);
			for( i = 3; i <10; i++)
				display( i, "");
			for ( d_n = 0; d_n < 5; d_n++){
				memset( buffer2, 0, sizeof( buffer2 ));
				memset( buffer1, 0, sizeof( buffer1 ));
				if (strlen(bus_fare[st_n].station_name) != 0){
					sprintf(buffer1, "%02d.%-10.10s", st_n+1, bus_fare[st_n].station_name);
				}
				if (strlen(bus_fare[st_n+1].station_name) != 0){
					sprintf(buffer2, "%02d.%-10.10s", st_n+2, bus_fare[st_n+1].station_name);
				}
				sprintf(display_buf[d_n],"  %13.13s%13.13s  ", buffer1, buffer2); 
				st_n = st_n + 2;
				display( 3+ d_n, display_buf[d_n] );
			}
			display(8,"00翻页99打结算单,站点号:");
			display(9,"当前票号: %07ld", kpph+1);
			do{
				input = getstrn( 8, 25, 0, 0, 2, in_st);
				if( in_st[0] == (char )0xff && input == 1){
					closefile(f_ret); 
					return;
				}
			}while( input > 2 ||input <1);
			str_len = atoi( in_st );
			if ( str_len == 99 ){	
				cls();
				display_cen(5,"正在统计数据");
				display_cen(6,"请等待");
				if ( get_printer_status() != 0 ){
					cls();
					closefile(f_ret); 
					display_cen(5,"请安装好打印纸");
					display_cen(6,"按任意键,重新操作");
					return;
				}
                                jsdh=jsdh+1;
				//seekfile(f_ret,0,SEEK_SET);
                                seekfile(f_ret,(long)(jsq*LEN_Sale_Ticket), SEEK_SET);
				for ( i = 0; i < LINE_ST_MAX ; i++ ){
					memset( settle_name[i], 0, sizeof( settle_name[i] ));
					settle_data[i] = 0L;
					settle_num[i] = 0L;
				}
				do{
					memset( (char *)&trans_rec, 0, LEN_Sale_Ticket);
					readfile (f_ret, LEN_Sale_Ticket, (char *)&trans_rec);
					if( trans_rec.settle_flag == 1)
						continue;
					if(strcmp( trans_rec.bus_no, trans.bus_no) != 0 )
						continue;
					//if(strcmp( trans_rec.bus_bc, trans.bus_bc ) != 0 )
					//	continue;
					if( trans_rec.void_flag == 1)
						continue;
					for ( i = 0; i < LINE_ST_MAX ; i++ ){
						if ( strlen( settle_name[i] ) == 0)
							strcpy( settle_name[i], trans_rec.end_station );
						if (strcmp( settle_name[i], trans_rec.end_station ) == 0 ){
							settle_data[i] += trans_rec.bus_fare-trans_rec.stat_fare;
							settle_num[i] += 1;
							break;
						}
					}
					trans_rec.settle_flag = 1;
      			                trans_rec.jsdh = jsdh ;
                                        if ( trans_rec.jsdh > 99999 || trans_rec.jsdh < 0 ){
	                        	     	    	trans_rec.jsdh = 1;
                                        }
                                        jsdh = trans_rec.jsdh;
			                seekfile(f_ret, (long)(0L-LEN_Sale_Ticket), SEEK_CUR);
					len=writefile(f_ret, LEN_Sale_Ticket, (char*)&trans_rec);
					if ( len != LEN_Sale_Ticket ){
						break;
					}
				}while( eoffile( f_ret ) != 1);
				sum = 0;
				l = 0L;
				for ( j = 0; j < 4; j ++ ){
               				sum = 0;
         				l = 0L;
 					if ( strlen( settle_name[j*8] ) == 0)
						break;
                                        display( 5, "  按确认键打印第%d页结算单",j+1);
                                        inkey(0);
					init_printer( 0 );
					cprinter("%6.6s%-4.4s次结算单第%d页", Busman1.busman_name,trans.bus_bc, j+1);
					cprinter("车牌: %8.8s%8.8s", drive.car_no,drive.driver_name);
					for( i = j*8; i < (j+1)*8; i ++ ){
						strcpy( buffer1, "      ");
						if ( strlen( settle_name[i] ) != 0){
							print_amount( settle_data[i], buffer2 );
							sprintf( buffer1,"%-8.8s %02ld人 %s", settle_name[i], settle_num[i], buffer2);
							sum += settle_num[i];
							l += settle_data[i];
						}
						cprinter( buffer1 );
					}
					print_amount( l, buffer2 );
					sprintf( buffer1,"合计: %03ld 人 %s", sum, buffer2); 
					cprinter( buffer1 );
					get_date(buffer1);
					get_time(buffer2);
					cprinter( "日期:%2.2s年%2.2s月%2.2s日%2.2s时%2.2s分", buffer1+2, buffer1+4, buffer1+6, buffer2, buffer2+2);
					cprinter( "结算号%3.3s%s%1.1s%05ld", Busman1.password,Busman.busman,sbh,jsdh);
					cprinter( "--");
                                        init_printer( 0 );
                                        cprinter( "--");
                                        init_printer( 0 );
                                        cprinter( "--");
				}
				closefile(f_ret); 
                                fdr=feed_printer(32);
				return;
			}
			if ( str_len == 0){
				if ( strlen( bus_fare[st_n].station_name ) == 0 )
					st_n = 0;
				continue;
			}
			if ( str_len-1 < stat_line.station_num ){
				strcpy( trans.end_station, bus_fare[str_len-1].station_name );
				trans.bus_fare = bus_fare[str_len-1].bus_fare;
				trans.stat_fare = bus_fare[str_len-1].stat_fare;
				break;
			}
		}
		cls(); 
                ljje=0;lj1=0;lj2=0;
		display_cen(1,"请选择售票张数");
		display(2,"%-8.8s车次%-5.5s %-8.8s",Busman.busman_name, trans.bus_bc , drive.car_no);
		display(9,"当前票号: %08ld", kpph+1);
		memset( ticket_num_half, 0, sizeof( ticket_num_half));
		memset( ticket_num, 0, sizeof( ticket_num));
		print_amount( trans.bus_fare, buffer1);
                lj1=trans.bus_fare;
		lj2 = lj1/2;
		if ( lj2 % 10  > 0 )
	           lj2 = (lj2 /10 + 1) * 10;
		display(4,"    到达站     单价"); 
		display(5,"%10.10s     %ld.%01ld元",trans.end_station, trans.bus_fare/10, trans.bus_fare%10); 
		display(7,"全票数:     ");
		input = getstrn(7,9,0,0,2,ticket_num);
		if(ticket_num[0] == (char )0xff && input == 1){
			closefile(f_ret); 
			return;
		}
		disp(7,15,"半票数:"); 
		input = getstrn(7,24,0,0,1,ticket_num_half);
		if(ticket_num_half[0] == (char )0xff && input == 1) {
			closefile(f_ret); 
			return;
		}
		ticket_n = atoi( ticket_num );
		ticket_n_f = atoi( ticket_num_half );
                if (ticket_n > 8 || ticket_n_f > 8 ){
         		ticket_n = 0;
         	       	ticket_n_f = 0;
                }   
                ljje=lj1*ticket_n+lj2*ticket_n_f;
                disp(8,4,"合计 %ld.%01ld元 确认打票",ljje/10,ljje%10);
                inkey(0);
                seekfile( f_ret, 0, SEEK_END);
		for ( i = 0; i < ticket_n; i++ ){
		if ( get_printer_status() != 0 ){
			cls();
			closefile(f_ret); 
			display_cen(5,"请安装好打印纸");
			display_cen(6,"按任意键,重新操作");
			inkey(0);
			return;
		}
			trans.ticket_no = kpph + 1;
			if ( trans.ticket_no > 9999999 || trans.ticket_no < 0){
				trans.ticket_no = 1;
                        }
                                kpph = trans.ticket_no;
			trans.void_flag = 0;
			trans.half_flag = 0;
			len=writefile(f_ret, LEN_Sale_Ticket, (char*)&trans);
			if ( len != LEN_Sale_Ticket ){
				cls();
                                closefile(f_ret);
				display_cen ( 4 , "流水文件系统出错" ) ;
				display_cen ( 5 , "不能正常工作");
				display_cen ( 6 , "按任意键将自动关机" ) ;
				systemsound ( 400 ) ;
				inkey(0);
				enable_poweroff();
				power_off();
			}
                        feed_printer(8);
			Void_Print(0);
		}
                       if (ticket_n_f>0){
			trans.bus_fare = trans.bus_fare /2;
			if ( trans.bus_fare % 10  > 0 )
				trans.bus_fare = (trans.bus_fare /10 + 1) * 10;
                       }
		for ( i = 0; i < ticket_n_f; i++){
		if ( get_printer_status() != 0 ){

⌨️ 快捷键说明

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