📄 baggage.c
字号:
while(1) { showrettitle(); tn=time(0); gettime(tn,&t); date=t.year*10000+t.month*100+t.mday; dd=date; tt=t.hour*100+t.minute; while(1) { n=get_n(ROW+3,35,"",&date,10); if(n==-1) break; if(checkdate(date)==0) break; else showmsg("错误的日期, 请重新输入!"); } if(n==-1) return; if(get_n(ROW+4,35,"",&busno,10)==-1) continue; if(get_n(ROW+5,35,"",&seat,10)==-1) continue; if((locate=readbag(date,busno,seat,&bag))==-1) { showmsg("未办理过该笔行包, 请核实!"); continue; } if(bag.ruser!=-1) { showmsg("该笔行包已经退办, 不能重退!"); continue; } if(bag.checkflag!=0) { showmsg("办理该笔行包的票已检, 不能退办!"); continue; } mvprintw(ROW+6,35,"%d",bag.model); mvprintw(ROW+7,35,"%d",bag.npiece); mvprintw(ROW+8,35,"%d",bag.weight); mvprintw(ROW+9,35,"%d.%02d(元)",(bag.price+bag.lift)/100, (bag.price+bag.lift)%100); bag.rprice=((bag.price+bag.lift)*80/100+5)/10*10; mvprintw(ROW+10,35,"%d.%02d(元)", (bag.price+bag.lift-bag.rprice)/100, (bag.price+bag.lift-bag.rprice)%100); mvprintw(ROW+11,35,"%d.%02d(元)",bag.rprice/100,bag.rprice%100); refresh(); bag.ruser=uno; bag.rdate=dd; bag.rtime=tt; if(get_s(INROW,30,"上述数据正确吗(y/n)? ",s,10)==-1) { showmsg("你取消了此次行包退办!"); continue; } if(s[0]!='y'&&s[0]!='Y') { showmsg("你取消了此次行包退办!"); continue; } if(writeretbag(date,locate,bag)==0&&writeud(date,bag,tic)==0) showmsg("行包退办成功!"); }}showrettitle(){ mvaddstr(ROW+3,30,"日期:"); mvaddstr(ROW+4,30,"班次:"); mvaddstr(ROW+5,30,"座号:"); mvaddstr(ROW+6,30,"货名:"); mvaddstr(ROW+7,30,"件数:"); mvaddstr(ROW+8,30,"重量:"); mvaddstr(ROW+9,28,"原金额:"); mvaddstr(ROW+10,28,"手续费:"); mvaddstr(ROW+11,28,"应退回:"); refresh();}int readbag(int date,int bus,int seat,struct baggage *bag){ int fd; char fn[80]; long size; char msg[80]; int i; sprintf(fn,"%s/data/baggage/%d",RP,date); fd=open(fn,O_RDONLY); if(fd==-1) { sprintf(msg,"文件 %s 打开失败!",fn); showmsg(msg); return -1; } for(i=0;;i++) { size=read(fd,(char *)bag,sizeof(struct baggage)); if(size!=sizeof(struct baggage)) { close(fd); return -1; } if(bag->bus==bus&&bag->seat==seat) break; } close(fd); return i;}int writeretbag(int date,int locate,struct baggage bag){ char fn[80]; int fd; long size,ss; sprintf(fn,"%s/data/baggage/%d",RP,date); fd=open(fn,O_RDWR); if(fd==-1) { showmsg("行包文件无法打开, 数据不能写入!"); return -1; } lseek(fd,locate*sizeof(struct baggage),0); while(lockf(fd,F_TLOCK,sizeof(struct baggage))!=0) ; size=write(fd,(char *)&bag,sizeof(struct baggage)); close(fd); if(size!=sizeof(struct baggage)) { showmsg("行包数据写入时有错误, 办理失败!"); return -1; } else return 0;}int readsta(){ int fd; char fn[80]; long size,ss; char msg[80]; sprintf(fn,"%s/bas/stas.dat",RP); fd=open(fn,O_RDONLY); if(fd==-1) { sprintf(msg,"文件 %s 打开失败!",fn); showmsg(msg); return fd; } size=lseek(fd,0L,2); lseek(fd,0L,0); ss=read(fd,(char *)sta,size); close(fd); if(ss!=size) { showmsg("读取站点文件时有错误!"); return ss/sizeof(struct station); } else return size/sizeof(struct station);}int readbs(int date,int bus,struct busstate *bs){ int fd; char fn[80]; long size; char msg[80]; sprintf(fn,"%s/data/state/%d",RP,date); fd=open(fn,O_RDONLY); if(fd==-1) { sprintf(msg,"文件 %s 打开失败!",fn); showmsg(msg); return fd; } while(1) { size=read(fd,(char *)bs,sizeof(struct busstate)); if(size!=sizeof(struct busstate)) { showmsg("班次状态文件与售票文件不一致!"); close(fd); return -1; } if(bs->bus==bus) break; } close(fd); return 0;}int readtic(int date,int bus,int seat,struct ticket *tic){ char fn[80]; int fd; long size,ss; sprintf(fn,"%s/data/ticket/%d",RP,date); fd=open(fn,O_RDONLY); if(fd==-1) { showmsg("售票文件打开失败, 请排除故障后重新办理!"); return fd; } size=sizeof(struct ticket); while(1) { ss=read(fd,(char *)tic,size); if(ss!=size) { showmsg("本站未售出过此票!"); close(fd); return -1; } if(tic->bus==bus&&tic->seat==seat&&tic->ruser==-1) break; } close(fd); return 0;}int gettime(long tn,struct time *t){ int days,ydays; short TZ; char *tzs; short 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}; short 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++,days-=ydays) if(t->year%400==0||(t->year%4==0&&t->year%100!=0)) ydays=366; else ydays=365; 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 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(); }}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(); }}char getkey(){ char c,key; char keys[]={Up,Down,Right,Left,NONE,End,PgDn,Home, PgUp,NONE,NONE,Ins}; void showtime(); sigset(SIGALRM,showtime); alarm(1); key=getch(); refresh(); if(key==0x1b) { alarm(1); if(getch()!=-1) { c=getch(); refresh(); key=keys[c-'A']; } } sigignore(SIGALRM); return key;}void showtime(){ long tn; struct time t; tn=time(0); gettime(tn,&t); mvprintw(0,0,"%d年%2d月%2d日%2d时%02d分%02d秒",t.year,t.month, t.mday,t.hour,t.minute,t.second); refresh();}showmsg(char s[]){ move(MSGROW,0); clrtoeol(); mvaddstr(MSGROW,(80-strlen(s))/2,s); refresh();}clrscr(){ int i; for(i=0;i<ROWS;i++) { move(ROW+i,0); clrtoeol(); } refresh();}clrmsg(){ move(MSGROW,0); clrtoeol(); refresh();}clrin(){ move(INROW,0); clrtoeol(); refresh();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -