📄 sshow.c
字号:
}}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(); }}getkey(){ char c,key; char keys[]={Up,Down,Right,Left,NONE,End,PgDn,Home, PgUp,NONE,NONE,Ins}; void timeint(); sigset(SIGALRM,timeint); key=getch(); refresh(); if(key==0x1b) { alarm(1); if(getch()!=-1) { c=getch(); refresh(); key=keys[c-'A']; } } sigignore(SIGALRM); return key;}void timeint(){}show(int flag,int stic,int ptic){ static int s=-1,p=-1; int i;/* for(i=0;i<ntic;i++) order[i]=i; sort();*/ move(2,70); clrtoeol(); mvprintw(2,0,"累计金额: %6d.%02d元",count/100, count<0?-count%100:count%100); if(ntic!=0) mvprintw(2,70,"%d/%d",ptic+1,ntic); else mvprintw(2,70,"0/0"); if(ntic<=0) { clrscr(); return; } if(flag==0) mvaddch(p-s+ROW,col[0]-1,' '); else { for(i=0;i<ROWS&&(stic+i)<ntic;i++) showone(ROW+i,stic+i); for(;i<ROWS;i++) { move(ROW+i,0); clrtoeol(); } } mvaddch(ptic-stic+ROW,col[0]-1,'>'); s=stic; p=ptic; refresh();}/*sort(){ int i,j,k,n; k=ntic/2; while(k>0) { for(j=k;j<ntic;j++) { n=order[j]; i=j-k; while(i>=0&&tic[order[i]].number>tic[n].number) { order[i+k]=order[i]; i-=k; } order[i+k]=n; } k/=2; }}*/int indate(int date){ int d=date; if(get_n(INROW,30,"请输入日期: ",&d,10)==-1) return -1; else return d;}int checkdate(int date){ int year,month,day; 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}; long tn; struct time t; year=date/10000; month=date%10000/100; day=date%100; tn=time(0); gettime(tn,&t); /*if(year<t.year||year>t.year+1) return -1; */if(month<1||month>12) return -1; if(year%4==0) { if(day<1||day>mdays[1][month-1]) return -1; } else if(day<1||day>mdays[0][month-1]) return -1; return 0;}showone(int row,int n){ int i,j,k,l; struct passwd *upwd; move(row,0), clrtoeol();/* n=order[m]; */ mvprintw(row,col[0],"%d",tic[n].bus); if(nsta>1) { j=0; k=nsta-1; while(j<=k) { l=(j+k)/2; if(tic[n].sta<sta[l].no) k=l-1; else if(tic[n].sta>sta[l].no) j=l+1; else break; } if(j>k) mvaddstr(row,col[1],""); else mvaddstr(row,col[1],sta[l].name); } else mvaddstr(row,col[1],""); upwd=getpwuid(tic[n].user); if(upwd!=NULL) mvaddstr(row,col[2],upwd->pw_comment); else mvprintw(row,col[2],"%d",tic[n].user); mvprintw(row,col[3],"%4d.%02d.%02d",tic[n].date/10000, tic[n].date%10000/100,tic[n].date%100); mvprintw(row,col[4],"%2d:%02d",tic[n].time/100,tic[n].time%100); mvprintw(row,col[5],"%d",tic[n].number); mvprintw(row,col[6],"%d",tic[n].seat); mvprintw(row,col[7],"%3d.%02d",tic[n].price/100,tic[n].price%100); switch(tic[n].flag) { case -1: mvprintw(row,col[7],"%3d.%02d",tic[n].rprice/100, tic[n].rprice%100); mvaddstr(row,col[8],"退票"); break; case 0: mvprintw(row,col[7],"%3d.%02d",tic[n].price/100, tic[n].price%100); mvaddstr(row,col[8],"全票"); break; case 1: mvprintw(row,col[7],"%3d.%02d",tic[n].price/100, tic[n].price%100); mvaddstr(row,col[8],"半票"); break; case 2: mvprintw(row,col[7],"%3d.%02d", (tic[n].price+tic[n].fee)/100, (tic[n].price+tic[n].fee)%100); mvaddstr(row,col[8],"行包"); break; case -2: mvprintw(row,col[7],"%3d.%02d",tic[n].rprice/100, tic[n].rprice%100); mvaddstr(row,col[8],"行包退办"); break; } refresh();}int appoint(int ptic){ int n; n=ptic+1; if(get_n(INROW,30,"请输入序号: ",&n,6)==-1) return -1; if(n>0&&n<=ntic) return n-1; else return -1;}int print(int date){ if(ntic<=0) { showmsg("该工作人员无记录!"); return -1; } printf("%c{",0x1b); /* print initialize string */ if(count!=0&&tic[0].flag==0) { printf("%30s\n","售票员缴款单"); printf("%33s\n","=================="); printf(" 售票员: %s%20d年%2d月%2d日\n",sname,date/10000, date%10000/100,date%100); printf("------------------------------------------------" "---------\n"); printf("| 起号 | 止号 |票数|新技术费| 客票款 |" "合计金额 |\n"); printf("------------------------------------------------" "---------\n"); printf("|%10d|%10d|%4d|%5d.%02d|%6d.%02d|%6d.%02d|\n", startnum,endnum,ntic,ntic*250/100,ntic*250%100, (count-ntic*250)/100,(count-ntic*250)%100, count/100,count%100); printf("------------------------------------------------" "---------\n"); printf("%20s%s\n\n\n\n\n\n","收款员: ",uname); } if(count!=0&&tic[0].flag==-1) { printf("%30s\n","退票员日报"); printf("%33s\n","================"); printf(" 退票员: %s%20d年%2d月%2d日\n",sname,date/10000, date%10000/100,date%100); printf("------------------------------------------------\n"); printf("| 票数 | 退票款 | 手续费 |\n"); printf("------------------------------------------------\n"); printf("|%10d |%13d.%02d|%11d.%02d|\n",ntic,count/100, count%100,fee/100,fee%100); printf("------------------------------------------------\n"); printf("%15s%s\n\n\n\n\n\n","操作员: ",uname); } if(count!=0&&(tic[0].flag==2||tic[0].flag==-2)) { printf("%30s\n","行包员日报"); printf("%33s\n","================"); printf(" 行包员: %s%20d年%2d月%2d日\n",sname,date/10000, date%10000/100,date%100); printf("---------------------------------------------------\n"); printf("| 行 包 费 | 搬 运 费 | 退 办 费 | 应 缴 款 合 计 |\n"); printf("---------------------------------------------------\n"); printf("|%7d.%02d|%7d.%02d|%7d.%02d|%13d.%02d|\n", count/100,count%100,lift/100,lift%100, fee/100,fee%100,(count+lift+fee)/100, (count+lift+fee)%100); printf("---------------------------------------------------\n"); printf("%15s%s\n\n\n\n\n\n","操作员: ",uname); } printf("%c}",0x1b); /* print end string */ return 0;}int printmx(int date){ struct { int sta; char ssta[10]; int ntic; int money; }item[1000]; int nitem; int i,j; if(ntic<=0) { showmsg("该工作人员无记录!"); return -1; } showmsg("正在统计..."); nitem=0; for(i=0;i<1000;i++) { item[i].sta=-1; item[i].ntic=0; item[i].money=0; } for(i=0;i<ntic;i++) { for(j=0;j<nitem&&tic[i].sta!=item[j].sta;j++) ; if(j>=nitem) { item[nitem].sta=tic[i].sta; for(j=0;j<nsta&&item[nitem].sta!=sta[j].no;j++) ; if(j<nsta) strcpy(item[nitem].ssta,sta[j].name); else item[nitem].ssta[0]='\0'; item[nitem].ntic++; item[nitem].money+=tic[i].price; nitem++; } else { item[j].ntic++; item[j].money+=tic[i].price; } } showmsg("正在打印..."); printf("%c{",0x1b); /* print initialize string */ printf("%20s\n","售票员明细表"); printf("%23s\n","=================="); printf("售票员: %s\n",sname); printf("时间: %d年%2d月%2d日%2d时%2d分\n", date/10000,date%10000/100,date%100, btime/100,btime%100); printf(" ---%d年%2d月%2d日%2d时%2d分\n", date/10000,date%10000/100,date%100, etime/100,etime%100); printf("票号: %d---%d\n",startnum,endnum); printf("----------------------------\n"); printf("| 站 点 | 票 数 | 金 额 |\n"); for(i=0;i<nitem;i++) { printf("----------------------------\n"); printf("|%8s|%7d|%6d.%02d|\n",item[i].ssta,item[i].ntic, item[i].money/100,item[i].money%100); } printf("----------------------------\n"); printf("| 合 计 |%7d|%6d.%02d|\n",ntic,count/100,count%100); printf("----------------------------\n"); printf("%c}",0x1b); /* print end string */ return 0;}clrscr(){ int i; for(i=0;i<ROWS;i++) { move(ROW+i,0); clrtoeol(); } refresh();}showmsg(char s[]){ move(MSGROW,0); clrtoeol(); mvaddstr(MSGROW,(80-strlen(s))/2,s); refresh(); printf("\7\7");}clrerr(){ move(MSGROW,0); clrtoeol(); refresh();}clrin(){ move(INROW,0); clrtoeol(); 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%4==0) ydays=366; else ydays=365; days-=ydays; } t->yday=days; t->month=1; if(t->year%4==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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -