头文件
#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;
}
试验品主题代码:
函数定义
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();//退出
变量
char strzhu[100];
char*Logs;
函数功能
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);
}
主函数
int main(int argc,char**argv){
CaiDan();
}