📄 pbusapp.c
字号:
while(ret==0) if(get_n(pb-sb+ROW,col[3],"",&owner,col[4]-col[3])==-1) ret=1; else { for(i=0;i<nown;i++) if(owner==own[i].no) break; if(i>=nown) showmsg("无此车主!"); else { mvaddstr(pb-sb+ROW,col[3],own[i].name); refresh(); break; } } while(ret==0) if(get_n(pb-sb+ROW,col[4],"",&rate,col[5]-col[4])==-1) ret=1; else if(rate<0||rate>100) showmsg("错误的提成率!"); else { mvprintw(pb-sb+ROW,col[4],"%d%%",rate); refresh(); break; } if(get_n(pb-sb+ROW,col[5],"",&gate,col[6]-col[5])==-1) ret=1;/* while(ret==0) if(get_n(pb-sb+ROW,col[5],"",&gate,col[6]-col[5])==-1) ret=1; else { for(i=0;i<ngat&&gate!=gat[i].no;i++) ; if(i>=ngat) showmsg("无此检票口!"); else break; }*/ while(ret==0) if(get_n(pb-sb+ROW,col[6],"",&model,col[7]-col[6])==-1) ret=1; else { for(i=0;i<nmod&&model!=mod[i].no;i++) ; if(i>=nmod) showmsg("无此种车型!"); else { mvaddstr(pb-sb+ROW,col[6],mod[i].name); refresh(); break; } } while(ret==0) if(get_n(pb-sb+ROW,col[7],"",&nseat,79-col[7])==-1) ret=1; else { if(nseat<=0||nseat>MAXSEAT) showmsg("错误的座位数!"); else break; } if(ret==0) { bus[pb].no=no; bus[pb].time=time; bus[pb].owner=owner; bus[pb].rate=rate; bus[pb].gate=gate; bus[pb].model=model; bus[pb].nseat=nseat; } } nbus--; move(pb-sb+ROW,0); clrtoeol(); refresh(); if(nbus!=nb) return 0; else return -1;}int checkbus(int bus){ char fn[80]; int fd; long s,tn,size; int i,j,n; struct ticketlib tl; struct time t; int date; tn=time(0); gettime(tn,&t); date=t.year*10000+t.month*100+t.mday; sprintf(fn,"%s/data/ticlib/%d",RP,date); fd=open(fn,O_RDONLY); if(fd==-1) { showmsg("票库数据有错误!"); return -1; } size=sizeof(struct ticketlib); while(1) { s=read(fd,(char *)&tl,size); if(s!=size) { close(fd); return 0; } if(tl.bus==bus) { close(fd); return -1; } }}int modify(int sb,int pb){ int i,j; int no,time,owner,rate,gate,model,nseat; while(1) { no=bus[order[pb]].no; if(get_n(pb-sb+ROW,col[0],"",&no,col[1]-col[0])==-1) return -1; else { for(i=0;i<nbus;i++) if(no==bus[i].no&&i!=order[pb]) break; /*for(j=0;j<nbbus&&no!=bbus[j].no;j++) ;*/ if(i<nbus/*||j<nbbus*/) showmsg("此车次有重复!"); else break; } } while(1) { time=bus[order[pb]].time; if(get_n(pb-sb+ROW,col[2],"",&time,col[3]-col[2])==-1) return -1; else if(time<0||time>=2400) showmsg("错误的时间!"); else { mvprintw(pb-sb+ROW,col[2],"%2d:%02d", time/100,time%100); refresh(); break; } } while(1) { owner=bus[order[pb]].owner; if(get_n(pb-sb+ROW,col[3],"",&owner,col[4]-col[3])==-1) return -1; else { for(i=0;i<nown&&owner!=own[i].no;i++) ; if(i>=nown) showmsg("无此车主!"); else { mvaddstr(pb-sb+ROW,col[3],own[i].name); refresh(); break; } } } while(1) { rate=bus[order[pb]].rate; if(get_n(pb-sb+ROW,col[4],"",&rate,col[5]-col[4])==-1) return -1; else if(rate<0||rate>100) showmsg("错误的提成率!"); else { mvprintw(pb-sb+ROW,col[4],"%d%%",rate); refresh(); break; } } gate=bus[order[pb]].gate; if(get_n(pb-sb+ROW,col[5],"",&gate,col[6]-col[5])==-1) return -1;/* while(1) { gate=bus[order[pb]].gate; if(get_n(pb-sb+ROW,col[5],"",&gate,col[6]-col[5])==-1) return -1; else { for(i=0;i<ngat&&gate!=gat[i].no;i++) ; if(i>=ngat) showmsg("无此检票口!"); else break; } }*/ while(1) { model=bus[order[pb]].model; if(get_n(pb-sb+ROW,col[6],"",&model,col[7]-col[6])==-1) return -1; else { for(i=0;i<nmod&&model!=mod[i].no;i++) ; if(i>=nmod) showmsg("无此种车型!"); else { mvaddstr(pb-sb+ROW,col[6],mod[i].name); refresh(); break; } } } while(1) { nseat=bus[order[pb]].nseat; if(get_n(pb-sb+ROW,col[7],"",&nseat,79-col[7])==-1) return -1; else { if(nseat<=0||nseat>MAXSEAT) showmsg("错误的座位数!"); else break; } } i=order[pb]; bus[i].no=no; bus[i].time=time; bus[i].owner=owner; bus[i].rate=rate; bus[i].gate=gate; bus[i].model=model; bus[i].nseat=nseat; return 0;}int delete(int sb,int pb){ if(nbus<=0) return -1; delf[order[pb]]=1; mvaddch(pb-sb+ROW,col[0]-1,'*'); refresh(); return 0;}int undelete(int sb,int pb){ if(delf[order[pb]]!=0) { delf[order[pb]]=0; mvaddch(pb-sb+ROW,col[0]-1,' '); refresh(); return 0; } else return -1;}int save(){ char fn[80]; char msg[128]; int fd; long size; int i; sprintf(fn,"%s/bus.dat",homedir); fd=open(fn,O_WRONLY|O_TRUNC); if(fd==-1) { fd=open(fn,O_CREAT|O_WRONLY,0666); if(fd==-1) { sprintf(msg,"文件%s打开失败!",fn); showmsg(msg); return -1; } } lockf(fd,F_LOCK,0L); size=sizeof(struct buses); for(i=0;i<nbus;i++) if(delf[order[i]]==0) write(fd,(char *)(bus+order[i]),size); lseek(fd,0L,0); lockf(fd,F_ULOCK,0L); close(fd); chmod(fn,0666); return 0;}int yn(char *p){ char c; do{ move(INROW,0); clrtoeol(); mvprintw(INROW,40-strlen(p)/2,p); move(INROW,41+strlen(p)/2); refresh(); c=getkey(); }while(c!='y'&&c!='Y'&&c!='n'&&c!='N'); if(c>='A'&&c<='Z') c=c-'A'+'a'; if(c=='y') return 0; else return 1;}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 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;}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 sbus,int pbus){ static int n=-1; static int s=-1; static int p=-1; static int o[ROWS]; int i; move(2,70); clrtoeol(); if(nbus>0) mvprintw(2,70,"%d/%d",pbus+1,nbus); else { mvaddstr(2,70,"0/0"); clrscr(); refresh(); return; } mvaddch(p-s+ROW,col[0]-2,' '); if(p!=pbus) p=pbus; for(i=0;i<ROWS&&s+i<nbus&&o[i]==order[s+i];i++) ; if((n!=nbus&&(p-s)>=ROWS)||s!=sbus||(i<ROWS&&s+i<nbus)) { n=nbus; s=sbus; clrscr(); for(i=0;i<ROWS&&(s+i)<nbus;i++) { o[i]=order[s+i]; showone(ROW+i,o[i],s+i); } } else { move(p-s+ROW,0); clrtoeol(); showone(p-s+ROW,order[p],p); } mvaddch(p-s+ROW,col[0]-2,'>'); refresh();}showone(int row,int n,int nn){ int i,j,k,l; if(delf[n]) mvaddch(row,col[0]-1,'*'); mvprintw(row,col[0]-5,"%d",nn+1); mvprintw(row,col[0],"%d",bus[n].no); mvaddstr(row,col[1],ssta[n]); mvprintw(row,col[2],"%2d:%02d",bus[n].time/100,bus[n].time%100); for(i=0;i<nown&&bus[n].owner!=own[i].no;i++) ; if(i>=nown/*j>k*/) mvaddstr(row,col[3],"(无)"); else mvaddstr(row,col[3],own[i/*l*/].name); mvprintw(row,col[4],"%d%%",bus[n].rate); mvprintw(row,col[5],"%d",bus[n].gate); for(i=0;i<nmod&&bus[n].model!=mod[i].no;i++) ; if(i<nmod) mvaddstr(row,col[6],mod[i].name); else mvaddstr(row,col[6],"(无)"); mvprintw(row,col[7],"%3d",bus[n].nseat); refresh();}int appoint(int pbus){ int n; char prompt[]="请输入序号: "; n=pbus+1; if(get_n(INROW,40-strlen(prompt)/2,prompt,&n,10)==-1) return -1; if(n>0&&n<=nbus) return n-1; else return nbus-1;}clrscr(){ int i; for(i=0;i<ROWS;i++) { move(ROW+i,0); clrtoeol(); } refresh();}showmsg(char s[]){ move(MSGROW,0); clrtoeol(); mvaddstr(MSGROW,40-strlen(s)/2,s); refresh(); printf("\7\7");}clrmsg(){ move(MSGROW,0); clrtoeol(); refresh();}clrin(){ move(INROW,0); clrtoeol(); refresh();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -