一卡通消费记录管理系统(c语言实现)

一、 功能需求说明(必须采用结构体和动态链表实现)


  1. 消费记录存在文件fee.txt中,格式如下:每一条记录包括一个消费的交易日期、入账日期、交易额、交易后余额、交易类型、交易次数、交易地点。
  2. 查询搜索功能
    (1)用户能够查询自己的一卡通固定时段消费情况:可以按月、学期、学年查询
    (2)用户可以自定义一个时间段进行查询自己的消费情况
    (3)用户可以按交易金额查找消费记录
    (4)管理员可查询任一用户的消费记录,可按照固定时段、自定义时段、金额方式、已删除记录查询
  3. 排序功能:按消费记录的交易日期、金额、次数中一个进行(升序或降序)排序。
  4. 数据录入:管理员能录入某个用户的一卡通消费情况,可以一次完成若干条记录的输入。
  5. 显示功能:可进行全部消费记录的显示,也可按照查询结果进行显示
  6. 数据变更:管理员可以更改或删除用户的某条消费记录,但删除的信息要保存在另外一个文件fee_undel.dat
  7. 统计功能:(1)用户可统计自己在一个自定义时间段里的消费总金额情况 (2)管理员可统计各个用户在一个自定义时间段里的消费总金额情况
  8. 用户和管理员的权限要分开。
    (另外我自己加了一个登录功能,需要提前在外部设置好用户账户密码文件usercode.txt和管理员账户密码文件managercode.txt)

需要下载代码直接拉到最底端。

二、函数实现


1. 函数声明

/*函数声明*/
int welcome();//权限选择
void del();//删除功能
void print(node*head);//打印链表内容
node*createlink(int b,char N[20]);//从文件中读取数据存入链表 
void check(int b);//查询功能
void gengxin();//更新功能
void input();//录入功能
void inquire(int b);//查询功能
int manager();//管理员界面
int user();//用户界面
void outlink(node*head);//输出链表到屏幕和文件fee.txt,更改信息后的保存功能
int rank();//排序功能的菜单
void Rank_check(int b);//排序功能
int renew();//更新功能的菜单
void tongji();//统计功能
int login(int a,char N[20]); //登录功能

2.全局变量和结构体等声明

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>#define NUL '\0'
/*结构体*/
typedef struct node {
        
  char name[20];//用户      
  int year;//交易日期     
  int month;     
  int day;     
  long inDay;//入账日期    
  float money;//交易额     
  float moneyLeft;//交易后余额     
  long num;//交易次数     
  char type[50];//交易类型     
  char address[50];//交易地点    
  struct node *next;       
}node;     
node *h=NULL;     
node *f=NULL;     
node *z=NULL;     
int n=0;     
typedef struct code{
        
  char name[20];     
  char password[20];
}code;

3. 主函数

/*主调函数*/ 
int main()
{
      
     system("title 一卡通综合信息管理系统V1.0  —— 刘欣羽制作");//设置标题 
     welcome();
     system("pause");
     return 0;
}

4.权限选择(登录菜单)

/*权限选择*/ 
int welcome()
{
       
     int a;
   A:system("cls");
     printf("                     登录页\n"); 
     printf("     ————————————————————\n");
     printf("**************************************************\n");
     printf("请选择你的身份: 1---用户   2---管理员   3---退出\n");
     printf("**************************************************\n");
     printf("     ————————————————————\n");
     scanf("%d",&a);
     switch(a)
     {
   
         case 1:user();goto A;
         case 2:manager();goto A;
         case 3:break;
         default:printf("error\n");goto A;
     } 
  return 0;  
}

5.用户界面

int user()//用户权限
{
   
     int a;
     char N[20];
     printf("请输入用户名:\n");
     fflush(stdin);
     scanf("%s",&N);
     a=login(1,N);//若不需要登录功能此处代码需要修改,需要将登录函数一部分代码移到此处
     if(a==0)goto B;
     h=createlink(1,N);
     if(h==NULL)
     {
   
       printf("无记录\n");
       goto B;
  }
   A:system("cls");
     printf("  ————————————————————\n");
     printf("***********************************************\n");
     printf(" 1---查询   2---排序   3---统计    4---退出登录\n");
     printf("***********************************************\n");
     printf("  ————————————————————\n");
     scanf("%d",&a);
     switch(a)
     {
   
         case 1:inquire(2);goto A;
         case 2:rank();goto A;
         case 3:tongji();goto A;
         case 4:print(h);system("pause");break;
         default:printf("error\n");goto A;
     }
     free(h);
    B:return 0;
} 

6.管理员界面

int manager()//管理员权限
{
   
     int a;
     char M[20];
     printf("请输入用户名:\n");
     fflush(stdin);
     scanf("%s",&M);
     a=login(1,M);//若不需要登录功能此处代码需要修改,需要将登录函数一部分代码移到此处
     if(a==0)goto B;
     char N[20]="manager";
     h=createlink(1,N);
   A:system("cls");
     printf("    ————————————————————————————\n");
     printf("********************************************************************\n");
     printf("1---查询   2---排序   3---统计   4---录入   5---更新   6---退出登录  \n");
     printf("********************************************************************\n");
     printf("    ————————————————————————————\n");
     scanf("%d",&a);
     switch(a)
     {
   
         case 1:inquire(1);goto A;
         case 2:rank();goto A;
         case 3:tongji();goto A;
         case 4:input();goto A;
         case 5:renew();goto A;
         case 6:print(h);system("pause");break; 
         default:printf("error\n");goto A;
     }
     free(h);
   B:return 0;
}

7.查询功能

void inquire(int b)
{
   
     int a;
   A:system("cls");
     if (b==1)
     {
   
         a=5;
   printf("     ——————————————————————————————————————————————\n");
         printf("*************************************************************************************************************\n");
         printf("    1---按固定时段查询   2---按日期区间段查询   3---按交易金额查询   4---已删除记录查询   6---返回\n");
         printf("*************************************************************************************************************\n");
         printf("     ——————————————————————————————————————————————\n"
  • 18
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值