项目整理—ATM机系统(C语言)ING

当初初学C语言的时候,老师用这个ATM机系统的项目作为讲述切入点,学完之后发现自己对这个项目懵懵懂懂。现在来重新整理一下。我会把中间遇到的问题以及值得记录的知识点做成学习笔记,以注释的形式标在涉及到该知识点的地方,然后在文章的最后以超链接来导到笔记页面。这是个大工程,我一点点来。
万事开头难,那么我们可以从简单的事情开始,由简入难。那么,一个项目怎么开始呢?
先来列举一下ATM机需要哪些功能(现在想不完整没关系,做项目的过程中会有许多灵感,可以再回头补充)

用户注册
登录→{存/取款、转账、修改密码、挂失、注销}
退出

那么,开始写了,一个函数的开始,当然是main函数啦
①登录界面main

int main()
{
	char ch;         //定义一个字符变量,方便之后输入字符选择服务
	while(1);     //作为一个基础操作界面,需要每次操作完都要显示,用while语句来保证
	{
		printf("请选择服务类型\n");
		printf("A:用户注册\n");
		printf("B:用户登录\n");
		printf("C:用户退出\n");
		ch=getchar();          //输入字符选择服务类型
		}
}

有了登录界面,那么需要根据我们输入的字符来选择某项服务。这里用if语句来判断字符以及匹配函数。这一段仍然需要在while语句中。

if(ch =='A' || ch =='a')    //输入A或a选择服务,为了用户使用方便,这里不区分大小写
	{
		Register();            //用于注册操作的函数,之后会在main函数之外定义
	}
	else if(ch =='B' || ch =='b')
	{
		Login();      //登录。注意:若在main函数之后定义,则需在之前声明
	}
	else if(ch =='C' || ch =='c')
	{
		exit(0);           //退出程序(需加头文件stdlib.h)
	}
	else
	{
		printf("输入有误!请输入A/a,B/b,C/c选择服务\n");
		getch();       //这里需要停顿一下,随便一个字符就可以,不然提示语会一闪而过
	}
	fflush(stdin);     //需要清除一下输入缓存区,不然从别的界面跳回来之后会直接调用里面的字符导致程序出错
	system("cls");      //清一下屏,不然会跟之前的一个屏,效果是重新换回之前界面

以上main函数就大体出来了,接下来写各服务函数
②注册函数Register
先写一个基础页面

void Register()
{
	system("cls");      //清屏,新的操作界面新的屏
	printf("欢迎注册\n");
	printf("请输入用户名\n");
	fflush(stdin);
	gets(u.name);    //一个用户的背后,有很多的数据,之后会在所有函数之前加一个结构体来存放这些数据
}

既然是注册用户,当然需要设置密码了。

char pw[6];
char pw1[6];
int time=0;   //用来记一共注册错误多少次
while(1)    //确认密码若出现错误,需重新输入,所以用while语句保证仍会保持在输入密码界面
{
	if(time == 3)        //给予三次注册机会,若三次确认密码错误,则返回主界面
		{
			printf("密码输入次数超过三次!按任意键返回\n");
			getch();
			return;     //注释❶
		}
		printf("请输入密码:\n");
		password(pw);   //密码函数,将实现六位约束跟输出加密,之后会定义
		printf("请确认密码:\n");   //为了防止用户输错,需要再确认一遍
		password(pw1);   
		if(strcmp(pw,pw1) == 0)     //当确认密码与注册密码一致时,就跳出循环
		{
			break;
		}else
		{
			printf("密码错误,按任意键重新输入!\n");
			getch();
		}
		time++;   //每循环一次,记一次错误
	}
	strcpy(u.pw,pw);   //将注册的密码存入结构体中存放密码的变量
}

注册时需要把数据存入文件中保存,这样就需要文件操作

fp = fopen("ATM.dat","ab+");   //这里打开/新建文件,其他地方也会用到,所以需要在前面声明指针fp
	if(fp == NULL)    //判断文件是否正常打开,错误的话报错退出
	{
		printf("打开文件失败!按任意键返回\n");
		getch();
		return;
	}
	fseek(fp,-sizeof(tem),2);    //因为需要跟其他内容读写共用一个指针,这里用fseek来控制指针位置
	if(fread(&tem,sizeof(tem),1,fp)/*==NULL*/)
	{
		u.id  = tem.id +1;
	}else
	{
		u.id = 1;   //银行账号,后面根据注册人数累加
	}
	u.money = 0;
	u.stat = 1;
	//将文件指针放到末尾
	fseek(fp,0,2);
	fwrite(&user,sizeof(tem),1,fp);
	//关闭文件
	fclose(fp);

注释: 这里用来列出我在整理过程根据遇到问题所做笔记的超链接
注释❶:retuen;

猜你喜欢

转载自blog.csdn.net/Joyce2018/article/details/83188154