| 所在班级 | 软件工程 |
| ---- | ---- | ---- |
| 作业要求 | ATM管理系统 |
| 作业目标 | 熟悉代码编写 |
| 本人学号 | 3180701328 |

题目要求

编写一个ATM管理系统,语言不限,要求应包括以下主要功能:

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)等...

代码提交

代码分析

头文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include "login.h"   //登陆函数模块
#include "Welcome.h" //界面欢迎模块
#include "client.h"  //用户操作界面

主界面

void menu(){
    int end = 0; 
    do {
        
	system("cls");   //清屏操作 
	printf("* 安徽工程大学ATM管理系统   *\n");
	printf("*****************************\n");
	printf("*      1.开户               *\n");
	printf("*      2.销户               *\n");
	printf("*      3.查询余额           *\n"); 
	printf("*      4.存款               *\n");
	printf("*      5.取款               *\n"); 
	printf("*      6.转账               *\n");
	printf("*      7.退出               *\n");
	printf("*****************************\n");

        int choose = 0;
        scanf("%d",&choose);
        switch (choose) {
          
            case 1:
                BuildUser();
                break;
            case 2:
                logout();
                break;
            case 3:
                showmoney();
                break;
            case 4:
               savemoney();
                break;
            case 5:
                drawmoney();
                break;
            case 6:
                Trans();
                break;
             case 7:
                printf("退出\n");
                exit(0);    
            default:
                break;
        }
        printf("您是否需要继续使用其他功能?输入1继续,输入0则退出\n");
        scanf("%d",&end);
    } while (end);
}

开户

void BuildUser()
{
	printf("\n\t\t\t开始录入用户:\n");
	USERDATA userdata;
	int i=0;FILE *fp;    //判断是否继续录入,如果继续按1,否则按2
	char ch;
		if((fp=fopen("iddata.txt","a+"))==NULL)
    {
        printf("Failure to open admin.txt!\n");
        exit(0);
    }
	do{
		system("cls");
		printf("\n\t\t\t请输入你的卡号:");
		gets(userdata.UserID);
		printf("\n\t\t\t请输入用户密码:");
		gets(userdata.UserPassword);
		fprintf(fp,"%-10s%-10s%-10s%-10.2f\n",userdata.Name,userdata.UserID,userdata.UserPassword,userdata.money);  //见录入数据保存到文件中
		system("cls");
		printf("\n\t\t\t录入成功。\n\t\t\t继续录入请按 1 \n\t\t\t结束录入并推出登陆请按 2\n");
		printf("\t\t\t----");
	 	scanf("%d",&i);
		ch=getchar();
		}while(i==1);
		fclose(fp);
		if(i==2) main();
}

销户

void logout()
{
	char confirm;//confirm 确认
	printf("您正在使用注销功能\n");
	printf("%d确认注销?\n",user[find].account);
	printf("Y表示确定,其它字符表示取消\n");
	scanf("%c",&confirm);
	if(confirm=='y'||confirm=='Y')
	{
		printf("正在注销%d\n",user[find].account);
		isLogout=1;
	}else
	{
		printf("取消注销帐号%d,返回服务界面\n",user[find].account);
		isLogout=0;
	}
}

查询余额

void showmoney()
{
	printf("\t用户名  :%s\n",user.name);
	printf("\t账户余额:%d\n",user.money);
	printf("\t请按Enter键返回\n");
	getchar();
}

存款


void savemoney()
{
	FILE *fp;
	int a,i;
	char c;
	printf("\t请输入您的存款数额:");
	scanf("%d",&a);
	getchar();
	user.money+=a;
	if((fp=fopen("data/client.dat","wb"))!=NULL)
	{
		fwrite(&user, sizeof(client), 1 ,fp);
		fclose(fp);
	}
	printf("\t存款成功\n");
		printf("\t请按Enter键退出\n");
		getchar();
	
}

取款


void drawmoney()
{
	FILE *fp;
	int a,i;
	char c;
	while(1){
	printf("\t请输入您的取款金额:");
	scanf("%d",&a);
	if(a>user.money)
		printf("\t账户余额不足,请重新输入!\n");
	else if(a<0)
		printf("\t输入有误,请重新输入!\n");
	else
		break;
 
	}
	getchar();
	user.money-=a;
	if((fp=fopen("data/client.dat","wb"))!=NULL)
	{
		fwrite(&user, sizeof(client), 1 ,fp);
		fclose(fp);
	}
	printf("\t取款成功,请收好您的钞票!\n");
	
		printf("\t请按Enter键退出\n");
		getchar();
			
}

转账

float Trans(struct User *p)
{
	FILE *fp;
	char a[N];
	float money;
	printf("\n\t\t\t请输入您要转账的同行账户:");
re:
	scanf(" %s",a);
	char path[30]="G:\\1\\ATM\\private_record\\",suffix[]=".txt";
    strcat(path,a);
    strcat(path,suffix);
	if((fp=fopen(path,"r+"))==NULL)
	{
	    fp=fopen(path,"w+");
	    printf("\n\t\t\t该账户不存在,请重新输入转账账户:");
		goto re;
	}
	else
	{
		printf("\n\t\t\t请输入转账金额:");
		scanf("%f",&money);
		while(money>p->money||money<=0)
		{
			if(money>p->money)
            {
			printf("\n\t\t\t卡里余额不足\n");
			printf("\n\t\t\t请先按键查询余额后重新确认转账金额。");
			printf("\t\t   ");
			getch();return 0;
			break;
            }
		}
		p->money-=money;
		printf("\n\t\t\t成功转入目标账户%.2f元,按任意键返回上层\n",money);
		fclose(fp);
		printf("                                    ");
		getch();
		return -money;
	}
}

运行截图

开户

销户

查询余额

存款

取款

转账

个人小结
这次报告使用C语言编写一个简单的ATM管理系统,其实如果是用Java来写更好,但Java我们并没有学习,所以只能用
c了。在导入文件的时候出现了乱码,但后面及时改正。让我对编程又有了新的认识。

PSP:

PSP2.1 任务内容 预计时间(分钟) 实际耗时(分钟)
Planning 计划 20 40
Estimate 估算开发时间 290 500
Development 开发 80 100
Analysis 需求分析 20 20
Design Spec 生成设计文档 10 20
Design Review 设计复审 10 10
Coding Standard 代码规范 10 10
Design 具体设计 20 20
Coding 具体编码 20 20
Code Review 代码复审 20 20
Test 测试 30 20
Reporting 报告 20 30
Test Report 测试报告 20 30
Size Measurement 计算工作量 20 20
Postmorten & Process Improvement 事后总结,并提出过程改进计划 20 20
Size Measurement 合计 300 350
posted on 2020-11-17 20:43  夹击妹抖  阅读(123)  评论(0编辑  收藏  举报