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

📄 baggage.c

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