📄 ask.c
字号:
i=j-k; while(i>=0&&tl[order[i]].time>tl[n].time) { order[i+k]=order[i]; i-=k; } order[i+k]=n; } k/=2; }}int takebus(){ int i,j,k; struct time t; long tn; int tm; int *ptl,*psb; int nptl,npsb; if(nsb<=0||ntl<=0) return 0; tn=time(0); gettime(tn,&t); if(getdays(t.year*10000+t.month*100+t.mday,date)==0) tm=t.hour*100+t.minute; else tm=0; ptl=(int *)malloc(ntl*sizeof(int)); if(ptl==NULL) { showmsg("为票库数据分配内存出错!"); return 0; } for(i=0,nptl=0;i<ntl;i++) if(tl[order[i]].time>tm&&tl[order[i]].state==0&&tl[order[i]].lseat>0) ptl[nptl++]=order[i]; psb=(int *)malloc(nsb*sizeof(int)); if(psb==NULL) { showmsg("为站点-班车指针数据分配内存出错!"); free(ptl); return 0; } for(i=0,npsb=0;i<nsb;i++) if(sb[i].sta==psta) psb[npsb++]=i; if(bus!=NULL) free(bus); bus=(struct buses *)malloc(nptl*sizeof(struct buses)); if(bus==NULL) { showmsg("为班车指针数据分配内存出错!"); free(psb); free(ptl); return 0; } for(i=0,nbus=0;i<nptl;i++) { for(j=0;j<npsb&&sb[psb[j]].bus!=tl[ptl[i]].bus;j++) ; if(j<npsb) { bus[nbus].ptl=ptl[i]; bus[nbus].psb=psb[j]; nbus++; } } free(psb); free(ptl); return nbus;}sort_time(int nbus){ int i,j,k,n; k=nbus/2; while(k>0) { for(j=k;j<nbus;j++) { n=order[j]; i=j-k; while(i>=0&&tl[bus[order[i]].ptl].time>tl[bus[n].ptl].time) { order[i+k]=order[i]; i-=k; } order[i+k]=n; } k/=2; }}int insta(){ int i; static char code[5]="cdc"; while(1) { if(get_s(SHOWROW,showcol[2],"",code,5)==-1) return -1; for(i=0;i<nsta&&strcmp(code,sta[i].code)!=0;i++) ; if(i<nsta) { psta=sta[i].no; strcpy(csta,sta[i].name); return 0; } else showmsg("输入的站点不存在!"); }}showitem(){ int i; char ns[]="服务员:",ds[]="日期:",ss[]="到站:"; mvaddstr(SHOWROW-1,0,tab[1]); mvprintw(SHOWROW,showcol[0]-strlen(ns),"%s%s",ns,uname); mvprintw(SHOWROW,showcol[1]-strlen(ds),"%s%d.%d.%d ",ds, date/10000,date%10000/100,date%100); mvprintw(SHOWROW,showcol[2]-strlen(ss),"%s%s ",ss,csta); refresh();}show(int flag,int sbus,int pbus){ static int s=-1,p=-1; int i; void showtime(); move(2,70); clrtoeol(); if(nbus<=0) { mvaddstr(2,70,"0/0"); clrscr(); refresh(); return; } else mvprintw(2,70,"%d/%d",pbus+1,nbus); if(nbus<=0) { clrscr(); return; } if(flag==0) mvaddch(p-s+ROW,col[0]-1,' '); else { for(i=0;i<ROWS&&(sbus+i)<nbus;i++) { sigignore(SIGALRM); showone(ROW+i,sbus+i); sigset(SIGALRM,showtime); } for(;i<ROWS;i++) move(ROW+i,0), clrtoeol(); } mvaddch(pbus-sbus+ROW,col[0]-1,'>'); p=pbus; s=sbus; refresh();}showone(int row,int n){ int i,j,k,l; int ptl,psb; move(row,0), clrtoeol(); ptl=bus[n].ptl; psb=bus[n].psb; mvprintw(row,col[0],"%d",tl[ptl].bus); mvprintw(row,col[1],"%2d:%02d",tl[ptl].time/100,tl[ptl].time%100); mvprintw(row,col[2],"%d",tl[ptl].nseat); mvprintw(row,col[3],"%d",tl[ptl].lseat); mvprintw(row,col[4],"%d",tl[ptl].gate); for(i=0;i<nmod&&tl[ptl].model!=mod[i].no;i++) ; if(i>=nmod) i=nmod-1; mvaddstr(row,col[5],mod[i].name); j=0; k=nsta-1; while(j<=k) { l=(j+k)/2; if(tl[ptl].laststa<sta[l].no) k=l-1; else if(tl[ptl].laststa>sta[l].no) j=l+1; else break; } if(j>k) mvaddstr(row,col[6],""); else mvaddstr(row,col[6],sta[l].name); mvprintw(row,col[7],"%3d.%02d",sb[psb].price/100,sb[psb].price%100); refresh();}void showtime(){ long tn; struct time t; tn=time(0); gettime(tn,&t); mvprintw(0,0,"%4d.%02d.%02d/%02d:%02d:%02d",t.year, t.month,t.mday,t.hour,t.minute,t.second); refresh();}int gettime(long tn,struct time *t){ int days,ydays; int TZ; char *tzs; int mdays[2][12]={31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31}; int i; tzs=(char *)getenv("TZ"); if(tzs==NULL) TZ=0; else { for(;*tzs!='\0'&&*tzs!='+'&&*tzs!='-'&&(*tzs<'0'||*tzs>'9');tzs++) ; TZ=atoi(tzs); TZ=-TZ; } tn+=TZ*HSEC; days=tn/DSEC; t->tseconds=tn; t->wday=(days+4)%7; ydays=365; for(t->year=BEGINYEAR;days>=ydays;t->year++) { if(t->year%400==0||(t->year%4==0&&t->year%100!=0)) ydays=366; else ydays=365; days-=ydays; } t->yday=days; t->month=1; if(t->year%400==0||(t->year%4==0&&t->year%100!=0)) for(i=0;days>=mdays[1][i];i++) { days-=mdays[1][i]; t->month++; } else for(i=0;days>=mdays[0][i];i++) { days-=mdays[0][i]; t->month++; } t->mday=days+1; t->hour=tn%DSEC/HSEC; t->minute=tn%HSEC/MSEC; t->second=tn%MSEC; return 0;}int getdays(int date1,int date2){ int days; int mdays[2][12]={31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31}; int i; int dd1,dd2; int y1,y2,m1,m2,d1,d2; if(date1>date2) dd1=date2, dd2=date1; else if(date1<date2) dd1=date1, dd2=date2; else return 0; y1=dd1/10000, y2=dd2/10000; m1=dd1%10000/100, m2=dd2%10000/100; d1=dd1%100, d2=dd2%100; days=0; for(i=y1+1;i<y2;i++) if(i%400==0||(i%4==0&&i%100!=0)) days+=366; else days+=365; if(y1==y2) for(i=m1;i<m2;i++) if(y1%400==0||(y1%4==0&&y1%100!=0)) days+=mdays[1][i-1]; else days+=mdays[0][i-1]; else { for(i=m1+1;i<=12;i++) if(y1%400==0||(y1%4==0&&y1%100!=0)) days+=mdays[1][i-1]; else days+=mdays[0][i-1]; for(i=1;i<m2;i++) if(y2%400==0||(y2%4==0&&y2%100!=0)) days+=mdays[1][i-1]; else days+=mdays[0][i-1]; } days-=d1; days+=d2; if(date1>date2) return -days; else return days;}showmsg(char s[]){ move(MSGROW,0); clrtoeol(); mvaddstr(MSGROW,40-strlen(s)/2,s); refresh(); printf("\7\7");}clrmsg(){ move(MSGROW,0); clrtoeol(); refresh();}clrscr(){ int i; for(i=0;i<ROWS;i++) { move(ROW+i,0); clrtoeol(); } refresh();}int get_n(int y,int x,char *prompt,int *n,int b){ char c,s[80],ss[80]; int i; sprintf(s,"%d",*n); for(i=0;i<b-1;i++) ss[i]=' '; ss[b-1]='\0'; mvaddstr(y,x,prompt); x+=strlen(prompt); mvaddstr(y,x,ss); mvaddstr(y,x,s); refresh(); i=0; while(1) { move(y,x+i); refresh(); if(i>=b-1) c=0x0d; else c=getkey(); switch(c) { case -1: continue; case 0x1b: /* <ESC> pressed */ return -1; case 0x0d: /* <ENTER> pressed */ if(i) { ss[i]='\0'; *n=atoi(ss); } return 0; case 0x08: /* <BS> pressed */ if(i<=0) continue; else { ss[--i]=' '; ss[i]='\0'; } break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ss[i++]=c; break; default: printf("\7\7"); break; } mvaddstr(y,x,ss); refresh(); }}int get_s(int y,int x,char prompt[],char s[],int n) /* x,y location of cursor; s the string */ /* n length of s; */{ char c,ss[128]; int i; for(i=0;i<n-1;i++) ss[i]=' '; ss[n-1]='\0'; mvaddstr(y,x,prompt); x+=strlen(prompt); mvaddstr(y,x,ss); mvaddstr(y,x,s); refresh(); i=0; while(1) { move(y,x+i); refresh(); if(i>=n-1) c=0x0d; else c=getkey(); switch(c) { case -1: continue; case 0x1b: /* <ESC> pressed */ return -1; case 0x0d: /* <ENTER> pressed */ if(i) { ss[i]='\0'; strcpy(s,ss); } return 0; case 0x08: /* <BS> pressed */ if(i<=0) continue; else ss[--i]=' '; break; default: ss[i++]=c; break; } mvaddstr(y,x,ss); refresh(); }}getkey(){ char c,key; char keys[]={Up,Down,Right,Left,NONE,End,PgDn,Home, PgUp,NONE,NONE,Ins}; key=getch(); refresh(); if(key==0x1b) { alarm(1); if(getch()!=-1) { c=getch(); refresh(); key=keys[c-'A']; } } return key;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -