补充(需要注意的):如何在找账的时候不查到别人的账目。
main.c
#include"HeadFile.h"
int main()
{
system("clear");
int choice;
do
{
printf("------------\n");
printf("1.登陆\n2.注册\n0.退出\n");
printf("------------\n");
scanf("%d",&choice);
switch(choice)
{
case 1: UserLogin(); break;
case 2: UserRegis(); break;
// case 3: UserTallt(); break;
case 0: system("clear");
break;
}
}while(choice);
return 0;
}
HeadFile.h
ifndef __UserAdm_
#define __UserAdm_
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#define ACCOUNT 8; //璁板綍鏀跺叆鍜屾敮浠樼殑閽辨暟鐨勫瓧绗︿覆涓嬫爣
typedef struct UserStruct
{
char UserID[18];
char UserPassword[12];
char UserPhoneNum[12];
}UserStruct;
UserStruct User;
typedef struct UserAccount
{
char _UserID[18];
char UserPay[8];
char UserGet[8];
char UserMatter[20];
char UserDate[12];
}UserAccount;
UserAccount Account;
extern int UserRegsi();
extern int UserLogin();
//extern void UserPrint();
extern int UserTallt(char LoginID[18]); //璁拌处
extern int UserAudit(char LoginID[18]); //鏌ュ笎
//extern int UserAcMod(); //鏀硅处
#endif
register.c
/*
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
typedef struct UserStruct
{
char UserID[18];
char UserPassword[12];
char UserPhoneNum[12];
}UserStruct;
UserStruct User;
*/
#include"HeadFile.h"
//int main()
int UserRegis()
{
system("clear");
char RegisID[18];
char RegisPassword[12];
char _RegisPassword[12];
char RegisPhoneNum[12];
char FileName[20]="user_test_0.txt";
//------
//界面栏
//------
printf("-----------------------------\n");
printf("请输入用户名: ");
scanf("%s",RegisID);
int fd;
//-----------------------------------------------------------
//检测用户名是不是已经注册
//-----------------------------------------------------------
int res=0;
UserStruct Test;
fd=open("filetest0.txt",O_RDONLY|O_CREAT,0644);
if(fd==-1)
{
perror("open");
return -1;
}
while(( res=read(fd,&Test,sizeof(UserStruct)) )>0)
{
// printf("test1\n");
if(!strcmp(RegisID,Test.UserID))
{
// printf("test\n");
printf("该用户已注册,注册失败\n");
printf("--------------------------------\n");
usleep(500000);
system("clear");
close(fd);
return 0;
}
};
close(fd);
printf("请输入密码: ");
scanf("%s",RegisPassword);
printf("请再次输入密码: ");
scanf("%s",_RegisPassword);
while(strcmp(_RegisPassword,RegisPassword)!=0)
{
printf("两次密码不匹配\n");
printf("请输入密码: ");
scanf("%s",RegisPassword);
printf("请再次输入密码: ");
scanf("%s",_RegisPassword);
}
printf("请输入联系方式: ");
scanf("%s",RegisPhoneNum);
printf("---------------------------------\n");
printf("Register\n");
//-----------------------------------------------------------
//信息放入结构体2
//-----------------------------------------------------------
strcpy(User.UserID,RegisID);
strcpy(User.UserPassword,RegisPassword);
strcpy(User.UserPhoneNum,RegisPhoneNum);
//-----------------------------------------------------------
//写入文件操作
//-----------------------------------------------------------
int count=0,count1=0,count2=0,count3=0;
fd=open("filetest0.txt",O_RDWR|O_CREAT|O_APPEND,0666);//以可读可写可执行,有文件则以追加方式打开,无文件则创建的方式打开文件
if(fd==-1)
{
perror("open");
return -1;
}
// lseek(fd,0,SEEK_END);
count=write(fd,&User,sizeof(UserStruct)); //将结构体写入文件,并用count记录写入了多少字符
// count1=write(fd,User.UserID, strlen(User.UserID));
// count2=write(fd,User.UserPassword,strlen(User.UserPassword));
// count3=write(fd,User.UserPhoneNum,strlen(User.UserPhoneNum));
// count=count1+count2+count3;
// printf("%d\n",count);
usleep(3000000);
system("clear");
close(fd); //关闭文件
return 0;//
}
login.c
/*
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#define __FILE_ "filetest0.txt"
typedef struct UserStruct
{
char UserID[18];
char UserPassword[12];
char UserPhoneNum[12];
}UserStruct;
UserStruct User;
*/
//int main()
#include"HeadFile.h"
int UserLogin()
{
system("clear");
//---------------------------------------------------------------
char LoginID[18];
char LoginPassword[12];
// char LoginPhoneNum[12];
//---------------------------------------------------------------
printf("---------------------\n");
printf("请输入用户名: ");
scanf("%s",LoginID);
printf("请输入密码: ");
scanf("%s",LoginPassword);
printf("---------------------\n");
//---------------------------------------------------------------
//----文件操作
//---------------------------------------------------------------
UserStruct LoginTest;
int fd;
fd=open("filetest0.txt",O_RDONLY|O_CREAT,0644);
if(fd==-1)
{
perror("open");
return -1;
}
int res=0;
//---检测密码是否相同--------------------------------------------
while((res=read(fd,&LoginTest,sizeof(UserStruct)))>0)
{
// printf("res=%d\n",res);
if(!strcmp(LoginTest.UserID,LoginID))
{
// printf("flag1\n");
if(strcmp(LoginTest.UserPassword,LoginPassword))
{
// printf("flag2\n");
printf("------------------\n");
printf("密码错误\n");
printf("------------------\n");
usleep(500000);
system("clear");
close(fd);
return -1;
}
else break;
}
}
if(res==0)
{
printf("res1=%d\n",res);
printf("---------------------\n");
printf("用户名不存在\n");
printf("---------------------\n");
usleep(500000);
system("clear");
close(fd);
return -1;
}
// printf("res1=%d\n",res);
//---------------------------------------------------------------
printf("--------------------------\n");
printf("登陆成功\n");
printf("--------------------------\n");
usleep(1000000);
system("clear");
//---------------------------------------------------------------
//---打印
//---------------------------------------------------------------
printf("-------------------------------\n");
printf("用户名: %s",LoginID);
printf("\n");
printf("密码: %s",LoginPassword);
printf("\n");
printf("电话: %s",LoginTest.UserPhoneNum);
printf("\n");
printf("-------------------------------\n");
//---------------------------------------------------------------
int a;
printf("1.记账\n2.查帐\n");
printf("0.返回上一级\n");
scanf("%d",&a);
if(a==1)
{
UserTallt(LoginID);
}
if(a==2)
{
UserAudit(LoginID);
}
if(!a)
{
system("clear");
usleep(200000);
close(fd);
}
return 0;
}
tallt.c
#include"HeadFile.h"
/*
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#define ACCOUNT 8; //璁板綍鏀跺叆鍜屾敮浠樼殑閽辨暟鐨勫瓧绗︿覆涓嬫爣
typedef struct UserStruct
{
char UserID[18];
char UserPassword[12];
char UserPhoneNum[12];
}UserStruct;
UserStruct User;
typedef struct UserAccount
{
char _UserID[18];
char UserPay[8];
char UserGet[8];
char UserMatter[20];
char UserDate[12];
}UserAccount;
UserAccount Account;
//extern int UserRegsi();
//extern int UserLogin();
//extern void UserPrint();
//int UserTallt(); //璁拌处
//extern int UserAudit(); //鏌ュ笎
//extern int UserAcMod(); //鏀硅处
*/
//int main()
int UserTallt(char LoginID[18])
{
// char AcID[18];
// char Pay[8];
// char Get[8];
// char Matter[20];
// char Date[12];
strcpy(Account._UserID,LoginID);
//---------------------------------------------------------------
//---界面
//---------------------------------------------------------------
int button=0;
do
{
printf("\n\n-------------------\n");
printf("日期: ");
scanf("%s",Account.UserDate);
printf("收入: ");
scanf("%s",Account.UserGet);
printf("支出: ");
scanf("%s",Account.UserPay);
printf("事项: ");
scanf("%s",Account.UserMatter);
//---------------------------------------------------------------
//---存入文件
//---------------------------------------------------------------
int fd;
fd=open("talltfile.txt",O_WRONLY|O_CREAT|O_APPEND,0666);
if(fd==-1)
{
perror("open");
return -1;
}
write(fd,&Account,sizeof(UserAccount));
close(fd);
printf("\n\n-------------------\n1.继续\n0.完成\n\n");
scanf("%d",&button);
}while(button);
return 0;
}
#include"HeadFile.h"
int UserAudit(char LoginID[18])
//int main()
{
system("clear");
char Date[12];
printf("输入查询日期: ");
scanf("%s",Date);
system("clear");
//---------------------------------------------------------------
//查帐功能实现
//---------------------------------------------------------------
int fd;
int res=0;
UserAccount Audit;
fd=open("talltfile.txt",O_RDONLY|O_CREAT,0644);
if(fd==-1)
{
perror("open");
return -1;
}
printf("日期: %s\n\n",Date);
printf("\t————————————————————————-\n\t|项目\t|收入\t|支出\t|\n\t————————————————————————-\n");
//----------------------------------------------------
//检测日期,并输出
//----------------------------------------------------
while((res=read(fd,&Audit,sizeof(UserAccount)))>0)
{
// printf("test3\n");
if(!strcmp(Audit._UserID,LoginID))
{
// printf("test2\n");
if(!strcmp(Audit.UserDate,Date))
{
// printf("test1\n");
// printf("日期: %s\n\n",Date);
// printf("\t|项目\t|收入\t|支出\t|\n");
printf("\t|%s\t|%s\t|%s\t|\n",Audit.UserMatter,Audit.UserGet,Audit.UserPay);
}
}
else break;
}
printf("\t————————————————————————-\n");
int button=0;
printf("1.继续\n0.退出\n");
scanf("%d",&button);
if(button)
UserAudit(LoginID);
if(!button)
close(fd);
//---------------------------------------------------------------
return 0;
}
makefile
main:main.o login.o register.o tallt.o audit.o
gcc main.o login.o register.o tallt.o audit.o
main.o:main.c HeadFile.h
gcc -c main.c
login.o:login.c HeadFile.h
gcc -c login.c
register.o:register.c HeadFile.h
gcc -c register.c
tallt.o:tallt.c HeadFile.h
gcc -c tallt.c
audit.o:audit.c HeadFile.h
gcc -c audit.c