C语言文件操作实现的记账功能的控制台程序
包含以下功能:
- 登录
- 添加数据
- 删除数据
- *显示数据
- 保存为本地txt文件
代码块
头文件:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#include <dos.h>
#define N 20
#define n 15
#define MAX_BUFF 100
结构体的定义:
struct count
{
char date[n];
char money[n];
char content[MAX_BUFF];
struct count *next;
}str;
重要函数:
char count[MAX_BUFF];
int num=0;
void login()//登录面
{
int x,y;
gotoxy(5,1);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
for(y=2;y<20;y++)
{
gotoxy(5,y);
printf("┃\t\t\t\t\t\t\t ┃");
}
gotoxy(23,5);
printf("欢迎使用维维记账簿");
gotoxy(19,11);
printf("用户名:");
gotoxy(19,14);
printf(" 密码:");
gotoxy(26,10);
printf("┏━━━━━━┓");
gotoxy(26,11);
printf("┃\t\t┃");
gotoxy(26,12);
printf("┗━━━━━━┛");
gotoxy(26,13);
printf("┏━━━━━━┓");
gotoxy(26,14);
printf("┃\t\t┃");
gotoxy(26,15);
printf("┗━━━━━━┛");
for(x=10;x<12;x++)
{
gotoxy(x,7);
printf("━━━━━━━━━━━━━━━━━━━━");
}
gotoxy(5,20);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
gotoxy(45,19);
printf("开发:维维喂");
}
int mima()//密码
{
int i;
char acount[20]={0},psw[20]={0},psw1[20]={0},password[20]={"123456"};
loop:gotoxy(28,11);
gets(acount);
if(strlen(acount)<1){
printf("\a");
goto loop;
}
do{
loop1:gotoxy(28,14);
for(i=0;i<16;i++)
{
psw[i]=getch();
if(psw[i]=='\r')
break;
else{
psw1[i]=psw[i];
printf("*");
}
}
}while(strlen(psw1)<1);
if(strcmp(password,psw1)==0)
return 1;
else
gotoxy(26,10);
printf("┏━━━━━━┓");
gotoxy(26,11);
printf("┃用户名或密码┃");
gotoxy(26,12);
printf("┃错误!请重新┃");
gotoxy(26,13);
printf("┃输入\t┃");
gotoxy(26,14);
printf("┗━━━━━━┛");
getch();
return 0;
}
void ChgPsw()
{
}
int get_key()
{
int c1,c2;
if((c1=getch())!=224)return c1;
c2=getch();
return c2;
}
char xiaochuangkou() //小窗口
{
int i;
gotoxy(18,6);
printf("┏━━━━━━━━━━━━━┓");
for(i=7;i<18;i++)
{
gotoxy(18,i);
printf("┃\t\t\t ┃");}
gotoxy(18,18);
printf("┗━━━━━━━━━━━━━┛");
gotoxy(22,9);
printf("日期:");
gotoxy(27,8);
printf("┏━━━━━━━┓");
gotoxy(27,9);
printf("┃\t\t ┃");
gotoxy(27,10);
printf("┗━━━━━━━┛");
gotoxy(22,12);
printf("金额:");
gotoxy(27,11);
printf("┏━━━━━━━┓");
gotoxy(27,12);
printf("┃\t\t ┃");
gotoxy(27,13);
printf("┗━━━━━━━┛");
gotoxy(22,15);
printf("内容:");
gotoxy(27,14);
printf("┏━━━━━━━┓");
gotoxy(27,15);
printf("┃\t\t ┃");
gotoxy(27,16);
printf("┗━━━━━━━┛");
}
int readcount(FILE *fpt,struct count *rpt)
{
char buf[MAX_BUFF];
int i;
if(fscanf(fpt,"%s",buf)!=1)
return 0;
strncpy(rpt->date,buf,n);
fscanf(fpt,"%s",buf);
strncpy(rpt->money,buf,n);
fscanf(fpt,"%s",buf);
strncpy(rpt->content,buf,MAX_BUFF);
return 1;
}
void display(struct count *rpt)
{
printf("%s\t%s\t%s\n",rpt->date,rpt->money,rpt->content);
}
void list(char *fname)
{
FILE *fp;
struct count s;
int y=6;
if((fp=fopen(fname,"r"))==NULL)
{
printf("无法打开%s\n",fname);
}
system("cls");
chuangkou();
gotoxy(23,y);
while(readcount(fp,&s)!=0)
{
y++;
display(&s);
gotoxy(20,y);
}
gotoxy(7,19);
printf("共计%d条记录",num);
fclose(fp);
}
void writecount(FILE *fpt,struct count *rpt)
{
system("cls");
chuangkou();
xiaochuangkou();
gotoxy(29,9);
scanf("%s",rpt->date);
gotoxy(29,12);
scanf("%s",rpt->money);
gotoxy(29,15);
scanf("%s",rpt->content);
fprintf(fpt,"%s\t%s\t%s\n",rpt->date,rpt->money,rpt->content);
num++;
}
int serchbyd(char *fname,char *key)
{
FILE *fp;
int c=0;
char buf[N];
struct count s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("无法打开%s\n",fname);
return 0;
}
while(readcount(fp,&s)!=0)
{
if(strcmp(s.date,key)==0)
{
display(&s);
c++;
}
}
fclose(fp);
if(c==0)
printf("无信息.");
return 1;
}
int SelSub()//选择功能
{
static int i,j,x=22,y=8;
int key;
gotoxy(23,8);printf(" 1>>初始化数据");
gotoxy(23,9);printf(" 2>>添加新数据");
gotoxy(23,10);printf(" 3>>删除数据");
gotoxy(23,11);printf(" 4>>查找数据");
gotoxy(23,12);printf(" 5>>显示数据");
gotoxy(23,13);printf(" 6>>更改密码");
gotoxy(23,14);printf(" 7>>保存成文档并退出");
gotoxy(22,y);
printf("->");
do{
key=get_key();
switch(key)
{
case 80:
gotoxy(x,y);printf(" ");y++;
gotoxy(x,y);printf("->");
if(y==15)
{
gotoxy(x,y);printf(" ");
y=8;
gotoxy(x,y);printf("->");
}
break;
case 72:
gotoxy(x,y);printf(" ");y--;
gotoxy(x,y);printf("->");
if(y==7)
{
gotoxy(x,y);printf(" ");
y=14;
gotoxy(x,y);printf("->");
}
break;
}
}while(key!='\r');
switch(y)
{
case 8:return 1;
case 9:return 2;
case 10:return 3;
case 11:return 4;
case 12:return 5;
case 13:return 6;
case 14:return 7;
default:printf("未知错误!");break;
}
}
void chuangkou()//所有的窗口界面
{
int i,x,y;
gotoxy(5,1);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
for(y=2;y<20;y++)
{
gotoxy(5,y);
printf("┃\t\t\t\t\t\t\t ┃");
}
for(x=10;x<12;x++)
{
gotoxy(x,5);
printf("━━━━━━━━━━━━━━━━━━━━");
}
gotoxy(5,20);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
gotoxy(23,3);
printf("欢迎使用维维记账簿");
gotoxy(45,19);
printf("开发:维维喂");
}
void shijian()//时间
{
time_t nowTime;
struct tm *nowTm_t;
time(&nowTime);
nowTm_t=localtime(&nowTime);
gotoxy(42,18);
printf("%d/%d/%d %d:%02d",nowTm_t->tm_year+1900,nowTm_t->tm_mon,nowTm_t->tm_mday,nowTm_t->tm_hour,nowTm_t->tm_min);
}
void gotoxy(int x,int y)
{
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
int func()
{
int key;
int x=30;
gotoxy(23,8);printf("┏━━━━━━━━┓");
gotoxy(23,9);printf("┃ 是否继续? ┃");
gotoxy(23,10);printf("┃\t\t ┃");
gotoxy(23,11);printf("┃\t\t ┃");
gotoxy(23,12);printf("┗━━━━━━━━┛");
gotoxy(30,11);printf("是");
gotoxy(35,11);printf("否");
gotoxy(x,11);
do
{
key=get_key();
switch(key)
{
case 75:
x-=5;gotoxy(x,11);
if(x==25)
{
x=35;gotoxy(x,11);
}
break;
case 77:
x+=5;gotoxy(x,11);
if(x==40)
{
x=30;gotoxy(x,11);
}
break;
}
}while(key!='\r');
switch(x)
{
case 30:return 1;
case 35:return 0;
}
}
mian函数:
int main()
{
FILE *fp;
int a;
char b,sle;
char buf[N];
char TB[MAX_BUFF];
strcpy(count,"data.txt");
strcpy(TB," 日期\t\t金额\t内容\n");
struct count c;
end:login();
shijian();
if(mima())
{
system("cls");
if(fp=fopen(count,"r")==NULL)
{
loop2:printf("正在创建文件...\n");
_sleep(1000);printf("创建成功...");_sleep(600);system("cls");
num=0;
fp=fopen(count,"w");
fprintf(fp,TB);
fclose(fp);
}
loop:chuangkou();
a=SelSub();
fp=fopen(count,"a");
switch(a)
{
case 1:
if(func())
goto loop2;
else goto loop;
break;
case 2:
loop1:writecount(fp,&c);
chuangkou();
if(func())
goto loop1;
else
{
fclose(fp);
goto loop;
}
break;
case 4:
system("cls");
chuangkou();
gotoxy(23,8);printf("┏━━━━━━━━┓");
gotoxy(23,9);printf("┃ 输入需要查 ┃");
gotoxy(23,10);printf("┃ 找的信息: ┃");
gotoxy(23,11);printf("┃\t\t ┃");
gotoxy(23,12);printf("┃\t\t ┃");
gotoxy(23,13);printf("┗━━━━━━━━┛");
gotoxy(28,12);scanf("%s",buf);
serchbyd(count,buf);
break;
case 5:
list(count);
getchar();
goto loop;
break;
case 7:
system("cls");
chuangkou();
gotoxy(24,6);
puts("欢迎下次使用!");
exit(0);
}
}
else goto end;
return 0;
}
目录
用 [TOC]
来生成目录: