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

📄 sshow.c

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