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

📄 pbusapp.c

📁 这是一个使用了 cursor 编程技术实现的车站自动售票系统的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		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 + -