C语言文件操作实现的记账功能的控制台程序

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]来生成目录:

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值