c语言中简易公交一卡通系统的实现

c语言中简易公交一卡通系统的实现

1.基本功能介绍:

系统启动则进入登陆菜单。
根据不同角色的选取来确定是普通用户还是管理员帐户

  1. 添加新卡
    能够添加一张新卡,卡号按照自然数列向下自动产生,而用户名键盘输入,系统创建新卡用户,初始余额为0,状态为使用中。
  2. 注销旧卡
    由用户输入要注销的用户名,并输入要注销的卡号,若输入正确则显示卡用户注销成功!该卡状态为已注销。
  3. 修改卡的信息
    由用户输入自己的用户账号,如果输入正确的用户账号,则显示用户的旧用户名,然后由用户输入进行更改的用户名,并且输入两次,两次必须输入一致,若两次输入不一致,则需要重新输入,两次输入一致则显示用户名修改成功。
  4. 查询所有用户信息及状态
    系统显示目前的所有用户账号,用户名称,用户余额以及用户状态,状态显示为1则为可用,状态显示为0则为已注销。
  5. 查询现有余额最多的用户
    系统会自动找出目前余额最多的用户,并显示其全部信息。
  6. 进入乘车读卡扣费界面
    由用户输入自己的卡号,若输入卡号正确,则系统会要求输入乘坐的站数,站数为130站,10站以内1元,1115站2元,1620站3元,2125站4元,2630站5元。用户输入范围内的乘坐站数后显示交易成功,并扣除相应的金额,并显示本卡余额。若输入的站数不是130,则显示输入的站数非法,请重新刷卡。若输入的卡号不正确则会提示:该账户不存在,请联系管理员注册用户。
  7. 公交一卡通充值
    由用户输入要充值的卡号,若输入正确则显示账号名和用户名,用户再输入要充值的金额,出入完成后系统会显示充值成功;若输入的卡号不存在,则提示该账户不存在,请注册新用户。

2.设计思路

1.需要存储一定的信息,则考虑使用结构体进行存储,为了查找使用链表。
2.每次使用完程序关闭程序后将链表转存成进文件,下次打开该程序后将上次已经存入的数据转成链表进行相关操作。

3.代码

// An highlighted block
/*编译项目:公交一卡通系统*/
/*编译环境:vs2010*/
/*编译人:李和平*/

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<Windows.h>
#include<malloc.h>
#include<time.h>
#include<string.h>

typedef struct Bus       //自定义结构体
{
   
	int num;                 //卡号从0开始依次上升
	char name[20];           //卡用户的姓名
	int  money;              //卡用户的余额默认为0
	int state;               //用户状态默认为1(使用),状态为0(注销)
	struct Bus * pnext;
	//连接
}Bus;

static int NUMBER=0;       //静态全局变量

struct Bus * Head = NULL;//链表头指针
struct Bus * End = NULL; //链表尾指针

void Save()          //存入板块
{
   
	FILE * pfile=NULL;
	struct Bus * atemp=Head;
	if(atemp==NULL)
	{
   
		return;
	}
	pfile=fopen("公交一卡通.dat","wb");
	//以二进制格式打开一个文件只用于写入。
	//如果该文件已存在则将其覆盖。
	//如果该文件不存在,创建新文件。
	if(pfile==NULL)
	{
   
		printf("\n警告:用户数据丢失请检查!!!\n");
	}
	while(atemp!=NULL)
	{
   
		fwrite(atemp,sizeof(struct Bus),1,pfile);
		/*是要输出数据的地址。
		要写入的字节数;
		要进行写入size字节的数据项的个数;
		目标文件指针。*/
		atemp=atemp->pnext; 
	}
	fclose(pfile);
}

void Read()          //读取板块
{
   
	int count=0;
	FILE *fp;
	if ((fp = fopen("公交一卡通.dat", "rb")) == NULL )
	{
   
		printf("\n警告:用户数据丢失请检查!!!\n");
		return;
	}
	else
	{
   
		while(!feof(fp))
		{
   
			Bus * atemp=(struct Bus *)malloc(sizeof(struct Bus));
			fread(atemp, sizeof(struct Bus), 1, fp);
			count++;
		}
		fp = fopen("公交一卡通.dat", "rb");
		while(count!=1) 
		{
   
			Bus * atemp=(struct Bus *)malloc(sizeof(struct Bus));
			fread(atemp, sizeof(struct Bus), 1, fp);
			if (NULL==Head||NULL==End)    //排除只有头尾的情况
			{
   
				Head = atemp;              //链表为空,新节点即是头也是尾
				End = atemp;
			}
			else
			{
   
				End->pnext =atemp;       //新节点下一个指向尾
				End = atemp;            //新节点变成尾
			}
			count--;
		}
	}
	fclose(fp);
} 

void loading()//虚假的加载界面
{
   
	int k=1;
	system("color 0c");
	for(;k<3;k++)
	{
   
		system("cls");
		printf("|        请稍等.                                                     | \n");
		printf("|        加载中:   --                                                | \n");
		Sleep(200);system("cls");
		printf("|        请稍等..                                                    | \n");
		printf("|        加载中:   \\                                                 | \n");
		Sleep(200);system("cls");
		printf("|        请稍等...                                                   | \n");
		printf("|        加载中:   ||                                                | \n");
		Sleep(200);system("cls");
		printf("|        请稍等....                                                  | \n");
		printf("|        加载中:   //                                                | \n");
		Sleep(200);system("cls");
		printf("|        请稍等.....                                                 | \n");
		printf("|        加载中:   --                                                | \n");
		Sleep(200);system("cls");
		printf("|        请稍等......                                                | \n");
		printf("|        加载中:   \\                                                 | \n");
		Sleep(200);system("cls");
		printf("|        请稍等......                                                | \n");
		printf("|        加载中:   ||                                                | \n");
		Sleep(200);system("cls");
		printf("|        请稍等......                                                | \n");
		printf("|        加载中:   //                                                | \n");
		Sleep(200);system("cls");
	}
}

void CreateList()     //创建板块
{
   
	Bus * atemp=(struct Bus *)malloc(sizeof(struct Bus));//空信息结点
	//struct Bus * temp =Head;   //重新定义一个指针记住头
	strcpy(atemp->name,"--++--++");
	atemp->num =-1;
	atemp->state =-1;
	atemp->pnext =NULL;
	Head = atemp;             //链表为空,新节点即是头也是尾
	End =atemp;               //
}

void Add2()         //回收板块
{
   
	char name[20];
	struct Bus * atemp=Head;
	while(atemp!=NULL)
	{
   
		if(atemp->state == 0)
		{
   
			break;
		}
		atemp=atemp->pnext ;
	}
	printf("欢迎添加新用户:\n");Sleep(50);
	printf("请输入新用户的用户名\n");Sleep(50);
	scanf("%s",name);
	atemp->money =0;
	atemp->state =1;
	strcpy(atemp->name,name);
	printf("新卡用户创建成功!\n");Sleep(50);
	printf("卡号:%d\n",atemp->num );Sleep(50);
	printf("用户名:%s\n",atemp->name );Sleep(50);
	printf("余额:%d\n",atemp->money );Sleep(50);
	if(atemp->state ==1)
	{
   
		printf("状态:使用中\n");Sleep(50);
	}
	else
	{
   
		printf("状态:已注销\n");Sleep(50);
	}
	system("pause");
}

void Add1()           //添加板块
{
   
	char name[20];
	Bus * atemp=(struct Bus *)malloc(sizeof(struct Bus));
	printf("欢迎添加新用户:\n");Sleep(50);
	printf("请输入新用户的用户名\n");Sleep(50
  • 34
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值