一卡通消费记录管理系统(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
#include
#include
#include#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");
         fflush(stdin);
   scanf("%d",&a);
         switch(a)
         {
             case 1:check(1); goto A;
             case 2:check(2); goto A;
             case 3:check(3); goto A;
             case 4:check(4); goto A;
             case 5:break;
             default:printf("error");
         }     
     }
     if (b==2)
     {
         a=4;
   printf("       ——————————————————————————————————————————————\n");
         printf("*************************************************************************************************************\n");
         printf("              1---按固定时段查询   2---按日期区间段查询   3---按交易金额查询     4---返回 \n");
         printf("*************************************************************************************************************\n");
         printf("        ——————————————————————————————————————————————\n");
         fflush(stdin);
   scanf("%d",&a);
         switch(a)
         {
             case 1:check(1); goto A;
             case 2:check(2); goto A;
             case 3:check(3); goto A;
             case 4:break;
             default:printf("error");
         }
     }
}

8.排序功能菜单

int rank()  //排序功能界面
{
     int a;
   A:system("cls");
     printf("  ————————————————————————————————————————\n");
     printf("*************************************************************************************\n");
     printf("请选择排序方式    1---按金额排序   2---按交易日期排序   3---按交易次数排序   4---返回\n");
     printf("*************************************************************************************\n");
     printf("  ————————————————————————————————————————\n");
     scanf("%d",&a);
     switch(a)
     {
         case 1: Rank_check(1);break;
         case 2: Rank_check(2);break;
         case 3: Rank_check(3);break;
         case 4: goto B; 
         default: printf("error\n");
     }
     goto A;
   B:return 0;
}

9.更新功能菜单

int renew()
{
     int a;
   A:system("cls");
     printf("   ——————————————————————\n");
     printf("****************************************************\n");
     printf("  请选择    1---修改信息   2---删除信息   3---返回 \n");
     printf("****************************************************\n");
     printf("  ——————————————————————\n");
     scanf("%d",&a);
     switch(a)
     {
         case 1:gengxin();break;
         case 2:del();break;
         case 3:goto B; 
         default:printf("error\n");
     }
     goto A;
   B:return 0;
}

10.从文件读取数据存到链表中

node *createlink(int b,char N[20])
{
     node *head;
  head=(node*)malloc(sizeof(node));
     node *p;
     node *q1;
     p=q1=head;
     FILE *r;
     char M[20]="manager";
     if(b==1)
  {
   r= fopen("fee.txt","r");
  }
     if(b==2) 
  {
   r= fopen("fee_del.txt","r");
  }
     if(r==NULL)
     {
         printf("打开文件失败!");
         free(head);
         return NULL; 
     }
     if(strcmp(M,N)==0)
     {
         while(fscanf(r,"%s %d %d %d %ld %f %f %s %ld %s",&q1->name,&q1->year,&q1->month,&q1->day,&q1->inDay,&q1->money,&q1->moneyLeft,&q1->type,&q1->num,&q1->address)!=EOF)
         {  
          p=q1;
             q1= (node*)malloc(sizeof(node));
             p->next=q1;
         }
     }
     else
     {
       while(fscanf(r,"%s %d %d %d %ld %f %f %s %ld %s",&q1->name,&q1->year,&q1->month,&q1->day,&q1->inDay,&q1->money,&q1->moneyLeft,&q1->type,&q1->num,&q1->address)!=EOF)
         {  
         if(strcmp(q1->name,N)==0)
    {
        p=q1;
                 q1= (node*)malloc(sizeof(node));
                 p->next=q1;
             }
         }
         if(strcmp(p->name,N)!=0)
         {
           p=NULL;
           q1=NULL;
           free(head);
           head=(node*)malloc(sizeof(node));
           strcpy(head->name,"无记录");
             head->year=0000;
             head->month=00;
             head->day=00;
             head->inDay=00000000;
             head->money=0.00;
             head->moneyLeft=0.00;
             head->num=0;
             strcpy(head->type,"无");
             strcpy(head->address,"无"); 
           head->next=NULL;
           return head;
   }   
  }
     fclose(r);
     p->next=NULL;
     return head;
}

11.输出链表到屏幕和文件fee.txt,更改信息后的保存功能

void outlink(node *head)
{
     node *q1;
     q1=head;
     FILE *w;
     w =fopen("fee.txt","w");
     if(w==NULL)
     {
         printf("打开文件失败!");
         return; 
     }
     while(q1)
     {
   //输出链表节点数据到文件fee.txt 
         fprintf(w,"%s %d %d %d %ld %f %f %s %ld %s\n",q1->name,q1->year,q1->month,q1->day,q1->inDay,q1->money,q1->moneyLeft,q1->type,q1->num,q1->address);
         q1=q1->next;        
     }     
     printf("\n");
     fprintf(w,"\n");
     fclose(w);
     return;
}

12.查询功能

void check(int b)
{
  system("cls");
  node*pt,*q;
  pt=(node*)malloc(sizeof(node));
  q=pt;
  pt->next=h;
  if (b==1)//按固定日期查询
     {
         int y,m,d;
         printf("请输入您想要查询的时间  例如:2018 1 3\n");
         scanf("%d %d %d\n",&y,&m,&d);
         while(pt->next!=NULL)
         {
             if (((pt->next->year)==y)&&((pt->next->month)==m)&&((pt->next->day)==d))
             {
                 n=1;
                 f=pt->next;
                 printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",f->name,y,m,d,f->inDay,f->money,f->moneyLeft,f->type,f->num,f->address);
                 z=pt;
             }           
             pt=pt->next;
         }
     }
     if (b==2)//按日期区间段查询
     {
         int y1,y2,m1,m2,d1,d2;
         printf("请输入您想要查询的时间段  例如:2018 1 12 2018 3 20\n");
         scanf("%d %d %d %d %d %d\n",&y1,&m1,&d1,&y2,&m2,&d2);
         while(pt->next!=NULL)
         {
             if ((((pt->next->year)==y1)&&(m1<=(pt->next->month))&&(d1<=(pt->next->day)))||(((pt->next->year)==y2)&&((pt->next->month)<=m2)&&((pt->next->day)<=d2)))
             {
                 n=1;
                 f=pt->next;
                 printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",f->name,f->year,f->month,f->day,f->inDay,f->money,f->moneyLeft,f->type,f->num,f->address);
                 z=pt;
             }
         pt=pt->next;
         }
     }
     if (b==3)//按交易金额查询
     {
         float m;
         printf("请输入您想要查询的金额\n");
         scanf("%f",&m);
         while(pt->next!=NULL)
         {
             if ((int)(pt->next->money*10)==(int)(m*10))
             {
                 n=1;
                 f=pt->next;
                 printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",f->name,f->year,f->month,f->day,f->inDay,f->money,f->moneyLeft,f->type,f->num,f->address);
                 z=pt; 
             }
         pt=pt->next;
         }
     }
    if(b==4)//查询已删除记录 
  {
    n=1;
      node*pt,*p;
      char N[20]="manager";
         pt=createlink(2,N);
         p=pt;
         while(pt!=NULL)
         {
            printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",pt->name,pt->year,pt->month,pt->day,pt->inDay,pt->money,pt->moneyLeft,pt->type,pt->num,pt->address);
            pt=pt->next;
         }
     free(p);  
   } 
     if (n==0)
     {
         f=NULL;
         z=NULL;
         printf("无相关记录\n"); 
     } 
     n=0; 
     if(z==q)z=NULL;
     q->next=NULL;
     free(q);
     system("pause");
}

13.排序功能

void Rank_check(int b)
{
     int xu;
     printf("请选择排序方式:1---升序    2---降序\n");
     scanf("%d",&xu);
     node *pt;
     pt=h;
     node *p1,*p2,temp,*p;
     if (b==1)//按金额排序
     {
         if (xu==1)//升序
         {
             for (p1=pt;p1!=NULL;p1=p1->next)
                 for (p2=p1->next;p2!=NULL;p2=p2->next)
                 {
                     if ((p1->money)>(p2->money))
                     {
                         temp=*p1;
                         *p1=*p2;
                         *p2=temp;
                         p=p1->next;
                         p1->next=p2->next;
                         p2->next=p;
                     }
                 }
         }
         else if (xu==2)//降序
         {
             for (p1=pt;p1!=NULL;p1=p1->next)
                 for (p2=p1->next;p2!=NULL;p2=p2->next)
                 {
                     if ((p1->money)<(p2->money))
                     {
                         temp=*p1;
                         *p1=*p2;
                         *p2=temp;
                          p=p1->next;
                         p1->next=p2->next;
                         p2->next=p;
                     }
                 }
         }
         while(pt!=NULL)
         {
             n=1;
             printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",pt->name,pt->year,pt->month,pt->day,pt->inDay,pt->money,pt->moneyLeft,pt->type,pt->num,pt->address);
             pt=pt->next;
         }
     }
     else if (b==2)//按交易日期排序
     {
         if (xu==1)//升序
         {
             for (p1=pt;p1!=NULL;p1=p1->next)
                 for (p2=p1->next;p2!=NULL;p2=p2->next)
                 {
                     if ((p1->inDay)>(p2->inDay))
                     {
                         temp=*p1;
                         *p1=*p2;
                         *p2=temp;
                         p=p1->next;
                         p1->next=p2->next;
                         p2->next=p;
                     }
                 }
         }
         else if (xu==2)//降序
         {
             for (p1=pt;p1!=NULL;p1=p1->next)
                 for (p2=p1->next;p2!=NULL;p2=p2->next)
                 {
                     if ((p1->inDay)<(p2->inDay))
                     {
                         temp=*p1;
                         *p1=*p2;
                         *p2=temp;
                         p=p1->next;
                         p1->next=p2->next;
                         p2->next=p;
                     }
                 }
         }
         while(pt!=NULL)
         {
             n=1;
             printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",pt->name,pt->year,pt->month,pt->day,pt->inDay,pt->money,pt->moneyLeft,pt->type,pt->num,pt->address);
             pt=pt->next;
         }
     }
     else if (b==3)//按交易次数排序
     {
         if (xu==1)//升序
         {
         for (p1=pt;p1!=NULL;p1=p1->next)
             for (p2=p1->next;p2!=NULL;p2=p2->next)
             {
                 if ((p1->num)>(p2->num))
                     {
                         temp=*p1;
                         *p1=*p2;
                         *p2=temp;
                         p=p1->next;
                         p1->next=p2->next;
                         p2->next=p;
                     }
             }
         }
         else if (xu==2)//降序
         {
             for (p1=pt;p1!=NULL;p1=p1->next)
                 for (p2=p1->next;p2!=NULL;p2=p2->next)
                 {
                     if ((p1->num)<(p2->num))
                     {
                         temp=*p1;
                         *p1=*p2;
                         *p2=temp;
                         p=p1->next;
                         p1->next=p2->next;
                         p2->next=p;
                     }
                 }
         }
         while(pt!=NULL)
         {
             n=1;
             printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",pt->name,pt->year,pt->month,pt->day,pt->inDay,pt->money,pt->moneyLeft,pt->type,pt->num,pt->address);
             pt=pt->next;
         }
     }
     if (n==0)
     {
         printf("error\n");  
     }
     system("pause");
}

14.统计功能

void tongji()
{
     node *pt;
     pt=h;
     int y1,y2,m1,m2,d1,d2;
     float total=0;
     printf("请输入您想要查询的时间段  例如:2018 1 12 2018 3 20\n");
     scanf("%d %d %d %d %d %d\n",&y1,&m1,&d1,&y2,&m2,&d2);
     while(pt!=NULL)
     {
         if ((((pt->year)==y1)&&(m1<=(pt->month))&&(d1<=(pt->day)))||(((pt->year)==y2)&&((pt->month)<=m2)&&((pt->day)<=d2)))
         {
             n=1;
             total=total+(pt->money);
         }
         pt=pt->next;
     }
     printf("该段时间的交易总额为: %f\n",total);
     if (n==0)
     {
         printf("没有相关的交易记录\n");
     }
     system("pause");
}

15.录入功能

/*录入功能*/  //头插法 
void input()
{
  node*p,*q;
  p=h;
  do{   
         q=(node*)malloc(sizeof(node));
         system("cls");
         printf("是否继续录入 Y/N\n"); 
         if(getchar()=='N') break;
         printf("请输入:姓名, 交易日期,入账日期,交易额,交易后余额,交易类型,交易次数,交易地点\n");
         printf("例如:刘欣羽 2018 3 12 20180312 3.1 35.15 POS 819 GDUTD2F118\n");
         scanf("%s %d %d %d %ld %f %f %s %ld %s\n",&q->name,&q->year,&q->month,&q->day,&q->inDay,&q->money,&q->moneyLeft,&q->type,&q->num,&q->address);
         printf("是否录入 Y/N\n");
         if(getchar()=='N') break;
         q->next=p;
         p=q;
     }while(1);
     h=p;
     free(q);
     outlink(h); 
     system("pause");
}

16.更新功能

/*更新功能*/   //不足:日期相同只取一次 
void gengxin()
{
     int a;
     node*temp;
     char ch;
     printf("是否需要展示所有记录?Y/N \n");
     fflush(stdin);
     if(getchar()=='Y')
     print(h);
     printf("通过查询锁定需要修改的信息位置\n");
  system("pause");
   A:inquire(2);
     temp=f;
     if(temp==NULL)
     {
       printf("查询失败\n");
       goto B;
  }
     printf("姓名:%s 交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",temp->name,temp->year,temp->month,temp->day,temp->inDay,temp->money,temp->moneyLeft,temp->type,temp->num,temp->address);
     printf("是否要修改该信息 Y/N\n");
     fflush(stdin);
     if (getchar()=='Y')
     {
         getchar();
         printf("请选择您想要修改的信息:0---姓名  1---交易日期   2---入账日期   3---交易额   4---交易后余额   5---交易类型   6---交易次数   7---交易地点\n");
         fflush(stdin);
         scanf("%d",&a);
         getchar();
         switch(a)
         {
           case 0:printf("请输入您想要修改的姓名:例:刘欣羽\n");scanf("%s",&temp->name);break;
             case 1:printf("请输入您想要修改的交易日期:例:2018 2 4\n");scanf("%d %d %d",&temp->year,&temp->month,&temp->day);break;
             case 2:printf("请输入您想要修改的入账日期:例:20180204\n");scanf("%ld",&temp->inDay);break;
             case 3:printf("请输入您想要修改的交易额:例:2.3\n");scanf("%f",&temp->money);break;
             case 4:printf("请输入您想要修改的交易后余额:例:45.2\n");scanf("%f",&temp->moneyLeft);break;
             case 5:printf("请输入您想要修改的交易类型: 例:POS\n");scanf("%s",&temp->type);break;
             case 6:printf("请输入您想要修改的交易次数:例:233\n");scanf("%ld",&temp->num);break;
             case 7:printf("请输入您想要修改的交易地点:例:GDUTC3F588\n");scanf("%s",&temp->address);break;
             default:printf("error\n");
         }
         printf("更新完成\n");
         printf("姓名:%s 交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",temp->name,temp->year,temp->month,temp->day,temp->inDay,temp->money,temp->moneyLeft,temp->type,temp->num,temp->address);
     }
  printf("是否要继续更新 Y/N \n");
  fflush(stdin);
     if(getchar()=='Y')goto A;
   B:outlink(h); 
     system("pause");
}
  

17.删除功能

void del()
{
  int a;
     node*temp,*q;
     char ch;
     printf("是否需要展示所有记录?Y/N \n");
     fflush(stdin);
     if(getchar()=='Y')
     print(h);
     printf("通过查询锁定需要删除的信息位置\n");
     system("pause");
     FILE*w;
     w=fopen("fee_del.txt","at");
     if(w==NULL)
     {
         printf("打开文件失败!");
   goto B;
     }
   A:inquire(2);
     temp=f;
     if(temp==NULL)
     {
       printf("查询失败\n");
       return;
  }
     q=z;
     printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",temp->name,temp->year,temp->month,temp->day,temp->inDay,temp->money,temp->moneyLeft,temp->type,temp->num,temp->address);
     printf("是否要删除该条信息 Y/N\n");
     fflush(stdin);
     if (getchar()=='Y')
     {
      fprintf(w,"%s %d %d %d %ld %f %f %s %ld %s\n",temp->name,temp->year,temp->month,temp->day,temp->inDay,temp->money,temp->moneyLeft,temp->type,temp->num,temp->address);  
  }
     if(temp==h)
     {
      h=h->next;
      temp->next=NULL;
      free(temp);
  } 
  else
  {
      q->next=temp->next;
   temp->next=NULL;
   free(temp);
  }
     printf("删除成功\n");
  printf("是否继续执行删除操作 Y/N\n");  
     fflush(stdin);
     if (getchar()=='Y')goto A;
     printf("\n");
   B:fprintf(w,"\n");
     fclose(w);
     outlink(h); 
     system("pause"); 
}

18.打印链表内容

void print(node*head)
{
  node*pt;
  pt=head;
  while(pt!=NULL)
  {
      printf("姓名:%s  交易日期:%d年%d月%d日  入账日期:%ld  交易额:%f  交易后余额:%f  交易类型:%s  交易次数:%ld  交易地点:%s\n",pt->name,pt->year,pt->month,pt->day,pt->inDay,pt->money,pt->moneyLeft,pt->type,pt->num,pt->address);
   pt=pt->next;  
  }
}

19.登录验证功能

/*登录功能*/
int login(int a,char N[20])
{
     FILE*r;
     char UserName[20];
     char UserPassword[20]; 
     char C[20];
     long long int number,number1;
     printf("请输入学号/工作人员号:\n");
     fflush(stdin);
     scanf("%lld",&number);
     printf("请输入密码:\n");
     fflush(stdin);
     scanf("%s",&C);
     if(a==1)//user
     {
      r=fopen("usercode.txt","r+");
     }
     else//manager
     {
       r=fopen("managercode.txt","r+");
  }
  while(fscanf(r,"%s  %lld  %s\n",&UserName,&number1,&UserPassword)!=EOF)
  {
   if((strcmp(UserName,N)==0)&&(strcmp(UserPassword,C)==0)&&(number==number1))
   {
             fclose(r);
             printf("登录成功!\n"); 
             system("pause");  
             return 1;
         }
     }
     fclose(r);
     printf("登录失败!\n"); 
     system("pause"); 
     return 0;    
} 

三、实现效果


用户登录后只能看到自己的记录,管理员可以看到所有用户的记录。(部分界面如下)
一卡通消费记录管理系统(c语言实现)_第1张图片一卡通消费记录管理系统(c语言实现)_第2张图片

四、完整代码文件/使用说明/可运行文件下载地址


https://download.csdn.net/download/weixin_45849757/12446467

你可能感兴趣的:(c语言作业集)