一个试验品

头文件

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//#include <unistd.h>

由于快写代码没有“itoa“函数,所以我加了一条

#include "../../../../.Extend.c"

里面的内容:

#include <stdio.h>

/* int to string
*by: http://t.csdn.cn/ne73g */
char*itoa(int num,char*str,int radix){
 char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//索引表
 unsigned unum;//存放要转换的整数的绝对值,转换的整数可能是负数
 int i = 0,j,k;//i用来指示设置字符串相应位,转换之后i其实就是字符串的长度;转换后顺序是逆序的,有正负的情况,k用来指示调整顺序的开始位置;j用来指示调整顺序时的交换。
 
 //获取要转换的整数的绝对值
 if(radix==10&&num<0)//要转换成十进制数并且是负数
 {
  unum = (unsigned)-num;//将num的绝对值赋给unum
  str[i++] = '-';//在字符串最前面设置为'-'号,并且索引加1
 }
 else
  unum = (unsigned)num;//若是num为正,直接赋值给unum
 
 //转换部分,注意转换后是逆序的
 do{
  str[i++] = index[unum%(unsigned)radix];//取unum的最后一位,并设置为str对应位,指示索引加1
  unum/=radix;//unum去掉最后一位
 }
 while(unum)
  ;//直至unum为0退出循环
 
 str[i] = '\0';//在字符串最后添加'\0'字符,c语言字符串以'\0'结束。
 
 //将顺序调整过来
 if(str[0]=='-')
  k = 1;//如果是负数,符号不用调整,从符号后面开始调整
 else
  k = 0;//不是负数,全部都要调整
 
 char temp;//临时变量,交换两个值时用到
 for(j = k;j<=(i-1)/2;j++)//头尾一一对称交换,i其实就是字符串的长度,索引最大值比长度少1
 {
  temp = str[j];//头部赋值给临时变量
  str[j] = str[i-1+k-j];//尾部赋值给头部
  str[i-1+k-j] = temp;//将临时变量的值(其实就是之前的头部值)赋给尾部
 }
 return str;//返回转换后的字符串
}

//string to int
/*手机有*/

/*=================分割=================*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* by 佰喵Ocelot
* 获取时间*/

char*GeTime(){
 time_t Bai;
 struct tm*CaT;
 char*getime = (char*)malloc(200);
 time(&Bai);
 CaT = gmtime(&Bai);
 if(8+CaT->tm_hour<10){
  if(CaT->tm_min<10){
   if(CaT->tm_sec<10)
    sprintf(getime,"%d-%d-%d 0%d:0%d:0%d",1900+CaT->tm_year,1+CaT->tm_mon,CaT->tm_mday,
    8+CaT->tm_hour,CaT->tm_min,CaT->tm_sec);
   else
    sprintf(getime,"%d-%d-%d 0%d:0%d:%d",1900+CaT->tm_year,1+CaT->tm_mon,CaT->tm_mday,
    8+CaT->tm_hour,CaT->tm_min,CaT->tm_sec);
  }
  else{
   if(CaT->tm_sec<10)
    sprintf(getime,"%d-%d-%d 0%d:%d:0%d",1900+CaT->tm_year,1+CaT->tm_mon,CaT->tm_mday,
    8+CaT->tm_hour,CaT->tm_min,CaT->tm_sec);
   else
    sprintf(getime,"%d-%d-%d 0%d:%d:%d",1900+CaT->tm_year,1+CaT->tm_mon,CaT->tm_mday,
    8+CaT->tm_hour,CaT->tm_min,CaT->tm_sec);
  }
 }
 else{
  if(CaT->tm_min<10){
   if(CaT->tm_sec<10)
   sprintf(getime,"%d-%d-%d %d:0%d:0%d",1900+CaT->tm_year,1+CaT->tm_mon,CaT->tm_mday,
    8+CaT->tm_hour,CaT->tm_min,CaT->tm_sec);
   else
    sprintf(getime,"%d-%d-%d %d:0%d:%d",1900+CaT->tm_year,1+CaT->tm_mon,CaT->tm_mday,
    8+CaT->tm_hour,CaT->tm_min,CaT->tm_sec);
  }
  else{
   if(CaT->tm_sec<10)
    sprintf(getime,"%d-%d-%d %d:%d:0%d",1900+CaT->tm_year,1+CaT->tm_mon,CaT->tm_mday,
    8+CaT->tm_hour,CaT->tm_min,CaT->tm_sec);
   else
    sprintf(getime,"%d-%d-%d %d:%d:%d",1900+CaT->tm_year,1+CaT->tm_mon,CaT->tm_mday,
    8+CaT->tm_hour,CaT->tm_min,CaT->tm_sec);
  }
 }
 return getime;
}

试验品主题代码:

  1. 函数定义

void CaiDan();//菜单
void Xun();//选择
void CYong();//创建用户
void DenLu(char*U,char*P);//创建密码
void BaoCun(char*Yh,char*Mm);//保存
void DuQv();//读用户存放文件[.a]
void Log(char T,char*str,char*str1,char ch);//日志
void EX();//退出
  1. 变量

char strzhu[100];
char*Logs;
  1. 函数功能

void Rfile(){
 FILE*Rfile;
 char ch;
 int i = 0;
 if((Rfile = fopen(".a","r"))==NULL){
  Logs = "打开[.a]失败";
  puts(Logs);
  Log('T',Logs,"",'\n');
  if((Rfile = fopen(".a","w"))==NULL){
   Logs = "创建[.a]失败";
   puts(Logs);
   Log('T',Logs,"",'\n');
   exit(-1);
  }
  else{
   Logs = "创建[.a]成功,请重新运行系统";
   puts(Logs);
   Log('T',Logs,"",'\n');
   exit(-1);
  }
 }
 ch = getc(Rfile);
 while(!feof(Rfile)){
  strzhu[i++] = ch;
  ch = getc(Rfile);
 }
 fclose(Rfile);
}
void CaiDan(){
 Log('T',"\n","菜单",'\n');
 Rfile();
 system("clear");
 puts("╔═══════════════════════╗");
 puts("\t\t这是一个测试品\t\t");
 puts("╟───────────────────────╢");
 puts("\t\t[0]  退出\t\t");
 if(strlen(strzhu)==0)
  puts("\t\t[1]  创建用户\t\t");
 else{
  puts("\t\t     创建用户\t\t");
  puts("\t\t[2]  登陆\t\t");
 }
 puts("╚═══════════════════════╝");
 Xun();
}
void Xun(){
 char ch,str[1];
 printf("请输入操作:");
 L:ch = getch();
 itoa(ch,str,10);
 Log('T',"操作",str,'\n');
 if(ch=='0'||(ch=='1'&&strlen(strzhu)==0)||(ch=='2'&&strlen(strzhu)!=0))
 {
  switch(ch){
  case '0':EX();
   break;
  case '1':CYong();
   break;
  case '2':DuQv();
   break;
  }
 }
 else
  goto L;
}
void CYong(){
 char str[1],yhu[100],yhm[100],ch = '\0';
 system("clear");
 printf("请创建用户名:");
 gets(yhu);
 Log('T',"创建用户:",yhu,'\n');
 
 system("clear");
 printf("用户:%s\n请创建密码:",yhu);
 gets(strzhu);//待改
 
 system("clear");
 printf("用户:%s\n密码:***\n",yhu);
 printf("请再次确认密码:");
 if(!strcmp(gets(yhm),strzhu)){//待改
  *yhm=*strzhu;
 }
 else{
  Logs="密码确认失败";
  puts(Logs);
  Log('T',Logs,"",'\n');
  EX();
 }
 Log('T',"创建密码:","***",'\n');
 
 system("clear");
 printf("用户:%s\n密码:%s\n请确认是否保存(y,n) ",yhu,yhm);
 ch = getch();
 str[0] = ch;
 if(ch=='y'||ch=='Y'){
  Log('T',"保存用户",str,'\n');
  BaoCun(yhu,yhm);
  system("clear");
  CaiDan();
 }
 if(ch=='n'||ch=='N'){
  Log('T',"用户保存",str,'\n');
  system("clear");
  CaiDan();
 }
 else{
  Log('T',"未知命令>",str,'\n');
  printf("未知命令>%c<\n",ch);
  system("clear");
  CaiDan();
 }
}
void DenLu(char*U,char*P){
 char UI[100],PI[100],si[100],i = 0;
 system("clear");
 puts("\t\t登陆");
 printf("用户:");
 while(1){
  if(!strcmp(gets(UI),U))
   break;
  else{
   i++;
   itoa(i,si,10);
   Log('T',"用户名对比失败>",UI,'\0');
   Log('0',si,"(次)",'\n');
   system("clear");
   puts("\t\t登陆");
   printf("没有名为>%s<的用户\n",UI);
   printf("请输入正确的用户名或uid:");
  }
 }
 Log('T',"用户名对比成功","",'\n');
 
 system("clear");
 puts("\t\t登陆");
 printf("用户:%s\n",UI);
 printf("密码:");
 while(1){//待改
  if(!strcmp(gets(PI),P))
   break;
  else{
   system("clear");
   puts("\t\t登陆");
   printf("用户:%s\n",UI);
   printf("密码错误,请重新输入:");
  }
 }
 system("clear");
 
 /*此处嵌套代码*/
 
 Logs = "登陆成功";
 Log('T',Logs,"",'\n');
 puts(Logs);
 EX();
}
void BaoCun(char*Yh,char*Mm){
 FILE*BC;
 if((BC = fopen(".a","w"))==NULL){
  Logs = "保存失败,创建[.a]失败";
  puts(Logs);
  Log('T',Logs,"",'\n');
  exit(-1);
 }
 fputs("User:",BC);
 fputs(Yh,BC);
 fputs("\nPass:",BC);
 fputs(Mm,BC);
 fclose(BC);
 Log('T',"账户保存成功","",'\n');
}
void DuQv(){
 char U[100],P[100];
 FILE*Du;
 if((Du = fopen(".a","rb"))==NULL){
  Logs = "读取[.a]失败";
  puts(Logs);
  Log('T',Logs,"",'\n');
  exit(-1);
 }
 fscanf(Du,"User:%s",U);
 
 char WhichLine = 1;
 char CurrentIndex = 0;
 while(!feof(Du))
 {
  if(CurrentIndex==WhichLine)
  {
   fscanf(Du,"Pass:%s",P);
   break;
  }
  fgets(P,100,Du);
  CurrentIndex++;
 }
 fclose(Du);
 Log('T',"读取[.a]成功","",'\n');
 DenLu(U,P);
}
void Log(char T,char*str,char*str1,char ch){
 FILE*Log;
 Log = fopen("Log.log","abt+");
 if(T=='T'||T=='t'){
  fputc('[',Log);
  fputs(GeTime(),Log);
  fputs("]: ",Log);
 }
 fputs(str,Log);
 fputs(str1,Log);
 fputc(ch,Log);
 fclose(Log);
}
void EX(){
 Logs="EXIT";
 puts(Logs);
 Log('T',Logs,"",'\n');
 exit(0);
}
  1. 主函数

int main(int argc,char**argv){
 CaiDan();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值