求各位大神帮忙做程序结构图(也就是模块间的关系)
#include
#include
#include
#include
#include
FILE *fp=NULL;//文件指针
float LJE;//历史金额
int i=0;//变量 分级
int flag;
//定义时间结构体,包括时分秒和10毫秒
struct tm //结构体
{
int hours,minutes,seconds; //定义时,分,秒
int hscd; //毫秒
}time,tmp,total; //time用以计时显示,tmp用以存储上一阶段时间,total记总时间
int cnt;
FILE* fout; //文件指针
//每次调用update函数,相当于时间过了10ms
int Rigester();//登陆函数
void Login();//注册函数
void update(struct tm *t,int i)
{
(*t).hscd++; //10ms单位时间加1
cnt++;
if ((*t).hscd==100) //计时满1s,进位
{
(*t).hscd=0;
(*t).seconds++;
}
if ((*t).seconds==60) //计时满一分,进位
{
(*t).seconds=0;
(*t).minutes++;
}
if ((*t).minutes==60) //计时满一小时,进位
{
(*t).minutes=0;
(*t).hours++;
}
if((*t).hours==24) //满24小时 复位
(*t).hours=0;
Sleep(10);
}
void display(struct tm *t,int i)
{
//此处输出计时结果,\r为回车不换行,既一直在同一行更新时间
printf("%2d:",(*t).hours); //小时
printf("%2d:",(*t).minutes); //分钟
printf("%2d:",(*t).seconds); //秒
printf("%2d",(*t).hscd); //毫秒
printf("\t当前金额%0.1f元\r",(*t).minutes*0.1*i+i); //金额
}
void time_init() //初始化时间
{
time.hours=time.minutes=time.seconds=time.hscd=0;
}
void get_total() //时间换算
{
total.hscd = cnt % 100;
cnt /= 100;
total.seconds = cnt % 60;
cnt /= 60;
total.minutes = cnt % 60;
cnt /= 60;
total.hours = cnt;
}
int main()
{
int a;
char m;
cnt = 0;
time_init(); //初始化时间
fout = fopen("timeout.txt","r+");
system("color 4F");
if(fout==NULL)
{
fout=fopen("timeout.txt","w+");
}
printf("欢迎使用停车计费系统\n");
printf("停车场采用不同车型不同单价计费\n");
printf("大车每分钟3元\n");
printf("中车每分钟2元\n");
printf("小车每分钟1元\n");
{
int select;
printf("1.登录 2.注册 0.退出 \n请选择");
scanf("%d",&select);
switch (select)
{ case 0:printf("退出程序!");return 0;
case 1: Rigester (); break;
case 2: Login ();break;
default: printf("输入错误,退出程序!\n");return 0;
}
}
system("cls");//清屏
fp=fopen("users.txt","r+"); //打开文件
if(fp==NULL)
{
fp=fopen("users.txt","w+");
}
fscanf(fp,"%f",&LJE); //将文件数据(剩余金额)赋予 LJE
fclose(fp);//关闭文件
printf("剩余金额%0.1f元\n",LJE);
printf("请选择车型\n");
printf("大车请按1\n");
printf("中车请按2\n");
printf("小车请按3\n");
scanf("%d",&a); //接收数据
switch(a)//进行判断
{
case 1: i=3;break;
case 2: i=2;break;
case 3: i=1;break;
}
printf("按回车开始计时");
while(1)
{
m = getch();
if(m != '\r') //读入一个输入,如果是回车,那么跳出次循环
printf("输入错误,仅能输入回车键!\n");
else
break;
}
//跳出循环 进行计时
printf("已经开始计时 \n");
while(1)
{
//此处检查是否有键盘输入
if(kbhit()/*监控键盘*/)
{
m=getch();//赋值
//如果等于回车,那么计时结束,跳出循环
if(m == '\r')
break;
//输入错误
else
{
printf("输入错误,仅支持输入回车键!\n");
}
}
update(&time,i); //更新计时器 函数
display(&time,i); //显示计时器时间 函数
}
tmp = time; //输出最后一次即使结果,写入文件
fprintf(fout,"%d:%d:%d:%d\n",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd);
get_total(); //计算总的时间,显示,并写入文件
LJE=LJE-(total.minutes*0.1*i+i);//当前剩余金额
printf("\n总时间:%2d:%2d:%2d:%2d::总金额%0.1f元 剩余金额%0.1f\n",total.hours,total.minutes,total.seconds,total.hscd,total.minutes*0.1*i+i,LJE);
fprintf(fout,"统计时间:%2d:%2d:%2d:%2d::总金额%0.1f元::\n",total.hours,total.minutes,total.seconds,total.hscd,total.minutes*0.1*i+i);
fp=fopen("users.txt","r+");//打开文件
fprintf(fp,"%0.1f",LJE);//记录数据(剩余金额)
fclose(fp);//关闭文件
fclose(fout);//关闭文件
printf("已经保存到当前目录下的timeout.txt文件中按任意键结束!");
getch();
return 0;
}
int Rigester()//登陆
{
FILE *fp=NULL; //文件指针
char str1[10],str2[20]; //字符串 用户名 密码
char name[10],password[10]; // 字符串 用户名 密码
int count=0,flag=0; //初始化
fp=fopen("table.txt","r");//打开文件
while(flag==0&&count<3) //判断 密码是否正确 且 输入次数是否大于3次
{
printf("请输入用户名:");
scanf("%s",name);
printf("请输入密码:");
scanf("%s",password);
count++; //每输入一次密码和用户名 +1
rewind(fp);//文件指针指向文件头
while(!feof(fp))//判断
{
fscanf(fp,"%s%s",str1,str2);//已注册的用户名和密码
if((strcmp(str1,name)==0)&&(strcmp(str2,password)==0))//与输入的用户名和密码进行比较
{
flag=1;break;//相同
}
}
if(flag==0)
printf("用户名或密码错误,请重新输入!\n");
}
if (flag==1)
printf("登录成功!\n");
else
printf("输入超过3次,退出程序!\n");
fclose(fp);
return flag;//返回flag值 进行判断
}
void Login()//注册
{
FILE *fp =NULL;//文件指针
char name [10],password[10];
fp=fopen("table.txt","a");
printf("请输入用户名:");
scanf("%s",name);
printf("请输入密码");
scanf("%s",password);
fprintf(fp,"%10s%10s",name,password);
printf("注册成功\n");
fclose(fp);
return;
}