handstran 2015-07-16 14:07 采纳率: 0%
浏览 1753
已结题

求各位大神帮忙做程序结构图(也就是模块间的关系)

求各位大神帮忙做程序结构图(也就是模块间的关系)
#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;
}
  • 写回答

4条回答 默认 最新

  • threenewbee 2015-07-16 14:29
    关注

    这种东西都不要手工画的,你如果用的是vs2010或更新版本,并且用的是旗舰版,直接可以通过代码反向工程直接产生

    https://technet.microsoft.com/ZH-CN/LIBRARY/dd409453(v=vs.100)

    评论

报告相同问题?

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?