划艇POS机代码.docx
《划艇POS机代码.docx》由会员分享,可在线阅读,更多相关《划艇POS机代码.docx(102页珍藏版)》请在冰豆网上搜索。
划艇POS机代码
本代码是在Linux下实现,纯控制台程序。
。
。
环境:
ubuntu10.10linux
作者:
右手兂名指,邮箱:
zyj.211@
make支持:
1.make编译
2.makeCLEAN清除所有数据
本代码实现功能:
1.初次登录
初次登录显示管理员初始密码:
123456,初始化价格:
包括价格和押金。
2.登录
1).管理员登录
2).销售员登录
3.欢迎界面
根据当前时间打印欢迎界面。
4.租用管理
进去后选项:
单人划艇、双人划艇、死人汽艇、八人游艇,选择任意一个打印提示信息:
价格、押金、定员
确认租用输入船只编号、押金即租用成功
5.结算管理
1).结算:
输入船只编号即可结算,打印出找零金额
2).显示未结算游客数据:
船只编号、租用时间、押金
6.价格管理
1).显示价格:
4种类型船只价格和最低押金
2).更改价格(必须要管理员密码)
(1).初始化价格:
按照系统设置初始化价格。
(2).按类型更改价格:
4种划艇类型,选择一种会给出提示信息,根据提示完成更改
7.销售员设置
更改密码
8.管理员设置(销售员登录需管理员密码)
1).更改密码
2).显示销售员信息:
用户名
3).增加销售员:
输入用户名和密码创建成功
4).删除销售员:
输入用户名即可
9.初始化系统
销售员登录显示无权限
管理员登录要需输入管理员密码
初始化内容:
管理员密码初始化、价格初始化、销售员记录清空、历史数据清空
10.统计数据
1).当天统计:
统计当天数据
2).当月统计:
统计当月数据
3).本年统计:
统计本年数据
4).按天统计
(1).区间统计:
输入2个具体日期统计期间数据
(2).自动统计:
输入一个具体日期,自动统计至前一天数据
5).按月统计
(1).区间统计:
输入2个具体月份统计期间数据
(2).自动统计:
输入一个具体月份,自动统计至前一月数据
6).按年统计
(1).区间统计:
输入2个具体年份统计期间数据
(2).自动统计:
输入一个具体年份,自动统计至前一年数据
7).历史统计:
统计历史数据
11.退出
1).管理员密码退出:
任何情况用管理员密码都可以退出
2).销售员密码退出:
当前是销售员直接提示输入密码,当前是管理员需同时输入用户名和密码退出。
目录结构入下图:
(bin目录是运行make时生成的)
主目录makefile:
CC=gcc
SUBDIRS=Admin_Set\
Checkout\
Init_Sys\
main\
Log_In\
Price_Set\
Quit_Sys\
Rent_Choice\
Sales_man_Set\
Stats\
Welcome\
obj
OBJS=Admin_Set.oCheckout.oInit_Sys.omain.oLog_In.o\
Price_Set.oQuit_Sys.oRent_Choice.oSales_man_Set.o\
Stats.oWelcome.o
BIN=rowboat
OBJS_DIR=obj
BIN_DIR=bin
exportCCOBJSBINOBJS_DIRBIN_DIR
all:
CHECK_DIR$(SUBDIRS)
CHECK_DIR:
mkdir-p$(BIN_DIR)
$(SUBDIRS):
ECHO
make-C$@
ECHO:
@echo$(SUBDIRS)
@echobegincompile
CLEAN:
@$(RM)$(OBJS_DIR)/*.o
@rm-rf$(BIN_DIR)
@rm./*.db
Main.c文件:
#include"../head/head.h"
intmain(void)
{
intchoice;
inti;
Log_In();//登录界面
Welcome();//欢迎界面
do
{
printf("\n>>>>>>>>>>>>>>>GO<<<<<<<<<<<<<<<\n");
printf("SYSTEM:
请选择您需要的服务:
\n");
do
{
choice=9;//避免字母弊端后,防止自动选择上一次的操作
printf("SYSTEM:
主选项:
\n");
printf("\t...租用管理:
1...\n");
printf("\t...结算管理:
2...\n");
printf("\t...价格管理:
3...\n");
printf("\t...销售员设置:
4...\n");
printf("\t...管理员设置:
5...\n");
printf("\t...初始化系统:
6...\n");
printf("\t...统计数据:
7...\n");
printf("\t...退出程序:
0...\n");
scanf("%d",&choice);
getchar();//防止输入字母或符号一直循环
}while(choice!
=1&&choice!
=2&&choice!
=3&&choice!
=4&&choice!
=5&&choice!
=6&&choice!
=7&&choice!
=0);
switch(choice)
{
case1:
Rent_Choice();
break;
case2:
Checkout();
break;
case3:
Price_Set();
break;
case4:
Sales_man_Set();
break;
case5:
if(1==permission)//验证当前用户权限
{
Admin_Set();
}else
{
i=Admin_Code_Check();//普通用户验证管理员密码
if(0==i)
{
Admin_Set();
}
}
break;
case6:
if(1==permission)
{
i=Admin_Code_Check();
if(0==i)
{
charc;
getchar();//清除缓冲区回车符
do
{
printf("SYSTEM:
您确定要初始化系统:
(y/n)!
\n");
scanf("%c",&c);
getchar();//清除缓冲区回车符
}while(c!
='y'&&c!
='n'&&c!
='Y'&&c!
='N');
if('y'==c||'Y'==c)
{
Init_Sys();//删除系统产生文件
Init_Set();//调用初始化设置
Price_Init_Set();//价格初始化
}else
{
printf("SYSTEM:
您放弃了初始化系统!
\n");
}
}
}else
{
printf("SYSTEM:
您的权限不足!
\n");
}
break;
case7:
i=Admin_Code_Check();
if(0==i)
{
Stats();
}
break;
case0:
i=Quit_Sys();
if(0==i)
{
exit(0);
}
}
}while
(1);
}
Main目录下makefile:
../$(OBJS_DIR)/main.o:
main.c
$(CC)-c$^-o$@
Admin_Set.c文件:
#include"../head/head.h"
intAdmin_Code_Change()
{
FILE*fp;
charcode_set1[CODE_SIZE];
charcode_set2[CODE_SIZE];
if((fp=fopen("./code.db","wb+"))==NULL)
{
perror("Admin_Code_Changefopencode.db");
exit(-1);
}
do
{
printf("SYSTEM:
请输入新密码:
\n");
scanf("%s",code_set1);
printf("SYSTEM:
请再次输入新密码:
\n");
scanf("%s",code_set2);
if(strcmp(code_set1,code_set2)!
=0)
{
printf("SYSTEM:
两次输入不一致,请确认!
\n");
}else
{
if(fwrite(code_set1,CODE_SIZE,1,fp)!
=1)
{
perror("init_sysfwrite");
return-1;
}
printf("SYSTEM:
管理员密码设置成功!
\n");
fclose(fp);
return0;
}
}while
(1);
}
intSales_man_Add()
{
FILE*fp;
charsales_name1[NAME_SIZE];
charsales_name2[NAME_SIZE];
charcode_set1[CODE_SIZE];
charcode_set2[CODE_SIZE];
if((fp=fopen("./salesman.db","ab+"))==NULL)
{
perror("Salesman_Addfopensalesman.db");
exit(-1);
}
do
{
printf("SYSTEM:
请输入用户名(字母符号形式):
\n");
scanf("%s",sales_name1);
printf("SYSTEM:
请再次输入用户名(字母符号形式):
\n");
scanf("%s",sales_name2);
if(strcmp(sales_name1,sales_name2)==0)
{
break;
}else
{
printf("SYSTEM:
两次输入不一致,请确认!
\n");
}
}while
(1);
rewind(fp);//定位为文件头部
do
{
memset(&sales2,0,sizeof(sales2));
fread(&sales2,sizeof(sales2),1,fp);
if(ferror(fp)!
=0)
{
perror("Sales_man_Addfread");
exit(-1);
}
if(strcmp(sales2.name,sales_name1)==0&&sales2.sales_index==0)
{
printf("SYATEM:
您输入的用户已存在,请确认!
\n");
return-1;
}
}while(!
feof(fp));
do
{
printf("SYSTEM:
请输入密码(少于20位字符或数字):
\n");
scanf("%s",code_set1);
printf("SYSTEM:
请再次输入密码(少于20位字符或数字):
\n");
scanf("%s",code_set2);
if(strcmp(code_set1,code_set2)==0)
{
memset(&sales1,0,sizeof(sales1));
strcpy(sales1.name,sales_name1);
strcpy(sales1.sales_code,code_set1);
sales1.sales_index=0;
if(fwrite(&sales1,sizeof(sales1),1,fp)!
=1)
{
perror("Sales_man_Addfwrite");
return-1;
}
printf("SYSTEM:
增加销售员成功!
\n");
fclose(fp);
return0;
}else
{
printf("SYSTEM:
两次输入不一致,请确认!
\n");
}
}while
(1);
}
intSales_man_Show()
{
FILE*fp;
inti=0;//控制SYSTEM输出
intj=0;//控制分行
if((fp=fopen("./salesman.db","rb"))==NULL)
{
perror("Sales_man_Showfopensalesman.db");
exit(-1);
}
while
(1)
{
memset(&sales2,0,sizeof(sales2));
fread(&sales2,sizeof(sales2),1,fp);
if(feof(fp)!
=0)
{
break;
}
if(ferror(fp)!
=0)
{
perror("Sales_man_Showfread");
exit(-1);
}
if(0==sales2.sales_index)
{
if(0==i)
{
i=1;
printf("SYSTEM:
销售员信息:
");
}
j++;
printf("%d:
%s\t",j,sales2.name);
if(j%4==0)
{
printf("\n");
}
}
}
fclose(fp);
if(0==i)
{
printf("SYSTEM:
不存在销售员用户!
\n");
return-1;
}else
{
printf("\nSYSTEM:
销售员数量:
%d\n",j);
return-1;
}
}
intSales_man_Delet()
{
intfd;
inti;
charsales_name1[NAME_SIZE];
charsales_name2[NAME_SIZE];
if((fd=open("./salesman.db",O_RDWR))==-1)
{
perror("Sales_man_Deletopensalesman.db");
exit(-1);
}
do
{
printf("SYSTEM:
请输入用户名:
\n");
scanf("%s",sales_name1);
printf("SYSTEM:
请再次输入用户名:
\n");
scanf("%s",sales_name2);
if(strcmp(sales_name1,sales_name2)==0)
{
break;
}else
{
printf("SYSTEM:
两次输入不一致,请确认!
\n");
}
}while
(1);
do
{
memset(&sales2,0,sizeof(sales2));
if((i=read(fd,&sales2,sizeof(sales2)))==-1)
{
perror("Sales_man_Deletread");
exit(-1);
}
if(strcmp(sales2.name,sales_name1)==0&&sales2.sales_index==0)
{
sales2.sales_index=1;
lseek(fd,-sizeof(sales2),SEEK_CUR);
if(write(fd,&sales2,sizeof(sales1))==-1)
{
perror("Sales_man_Deletwrite");
exit(-1);
}
printf("SYSTEM:
销售员%s删除成功!
\n",sales2.name);
close(fd);
return0;
}
if(i{
printf("SYSTEM:
您输入的用户名不存在,请确认!
\n");
return-1;
}
}while
(1);
}
intAdmin_Set()
{
inti;
intchoice;
while
(1)
{
printf("\n>>>>>>>>>>>>>>>GO<<<<<<<<<<<<<<<\n");
do
{
choice=8;
printf("SYSTEM:
设置选项:
\n");
printf("\t...更改管理员密码:
1...\n");
printf("\t...显示销售员信息:
2...\n");
printf("\t...增加销售员:
3...\n");
printf("\t...删除销售员:
4...\n");
printf("\t...退出设置:
0...\n");
scanf("%d",&choice);
getchar();
}while(choice!
=1&&choice!
=2&&choice!
=3&&choice!
=4&&choice!
=0);
switch(choice)
{
case1:
i=Admin_Code_Check();
if(0==i)
{
Admin_Code_Change();
}
break;
case2:
Sales_man_Show();
break;
case3:
Sales_man_Add();
break;
case4:
Sales_man_Delet();
break;
case0:
return0;
}
}
}
Admin_Set目录下makefile:
../$(OBJS_DIR)/Admin_Set.o:
Admin_Set.c
$(CC)-c$^-o$@
Check_Out.c文件:
#include"../head/head.h"
intAccount()
{
intfd,i;
inthour1;
intnum;
time_tp;
structtm*q;
if((fd=open("./backup.db",O_RDWR))==-1)
{
perror("Accountopenbackup.db");
exit(-1);
}
time(&p);
q=localtime(&p);
printf("SYSTEM:
请输入船只编号:
\n");
scanf("%d",&num);
do
{
memset(&visitor1,0,sizeof(visitor1));
if((i=read(fd,&visitor1,sizeof(visitor1)))==-1)
{
perror("Accountreadbackup.db");
exit(-1);
}
if(i{
printf("SYSTEM:
没有该船只编号记录,请确认!
\n");
return-1;
}
if(num==visitor1.boat_no&&visitor1.index==0)
{
if(q->tm_mday!
=visitor1.day)
{
Set_Null();//防止前一天忘记退出系统,并且有游客未结账的情况
continue;
}
visitor1.index=1;
time(&p);
q=localtime(&p);
hour1=(q->tm_hour-visitor1.hour)*60+q->tm_min-visitor1.min;
if(hour1%30!
=0)
{
hour1=(hour1/30+1)*30;//以每半小时计费
}
visitor1.expense=visitor1.price*hour1/60.0;
printf("SYSTEM:
船只编号:
%d,结算找零:
%.1f\n",visitor1.boat_no,visitor1.deposit-visitor1.expense);
/*-----------------------结算小票打印格式控制------------------------*/
/*printf(">>>>>>>>>>划艇编号:
%d<<<<<<<<<<\n",visitor1.boat_no);
printf("%d类划艇:
每小时%d元,押金%d元!
\n",visitor1.type,visi