包小琪

导航

个人作业三-ATM管理系统

一、作业信息

这个作业属于哪个课程 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
这个作业要求在哪里 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478
这个作业的目标 编写一个ATM管理系统,语言不限,
学号 3180701308
一.题目要求

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

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

二.代码提交
开户

void zhuce()   
{
	int baiwei, shiwei, gewei, len;/*定义账号的后三位*/
	char password2[7];/*注册时第二次输入的密码*/
	int  j = 0;
	strcpy(C[Cnum].account, "123456543210");/*复制账号的前12位*/
	baiwei = Cnum / 100;
	shiwei = Cnum / 10 % 10;
	gewei = Cnum % 10;
	C[Cnum].account[12] = baiwei + '0';
	C[Cnum].account[13] = shiwei + '0';
	C[Cnum].account[14] = gewei + '0';
	C[Cnum].account[15] = '\0';
	system("cls");/*运行前清屏*/
	printf("\n\n\n\t\t注册————ZHUCE\n\n\n");
	printf("\t\t请输入姓名:");
	scanf("%s", C[Cnum].name);
	do
	{
		printf("\t\t请输入6位数密码:");
		scanf("%s", C[Cnum].password);
		len = strlen(C[Cnum].password);
		if (len != 6)/*判断密码是否为6位*/
		{
			printf("\t\t您的密码不是6位数!\n");
			system("pause");
			return;
		}
		//此处用字符串长度函数来判断密码的位数
		printf("\t\t请再次输入密码:");
		scanf("%s", password2);
		if (strcmp(C[Cnum].password, password2) != 0)/*判断两次密码输入是否相同*/
		{
			j++;
			printf("\n\t\t您的密码输入错误!您还有%d次机会输入密码!\n", 3 - j);
		}
		if (j == 3)/*密码输入错误不得超过三次*/
		{
			system("pause");
			return;
		}
	} while (strcmp(C[Cnum].password, password2) != 0);
	do
	{
		printf("\t\t请输入身份证号:");
		scanf("%s", C[Cnum].IDnumber);
		len = strlen(C[Cnum].IDnumber);
		if (len != 18 && len != 15)/*判断身份证号位数是否为15位或18 位*/
			printf("\t\t身份证号错误!请输入15位或18位身份证号!\n");
	} while (len != 18 && len != 15);
	printf("\n\t\t请输入存入金额:");
	scanf("%f", &C[Cnum].yue);
	if ((int)C[Cnum].yue % 50 != 0)/*存款金额必须为50的整数倍*/
	{
		printf("\t\t本机只接受50元或100元面值的存款!\n");
		system("pause");
		return;
	}
	strcpy(T[Tnum].account, C[Cnum].account);/**/
	strcpy(T[Tnum].type, "存储");/*复制交易类型*/
	T[Tnum].Tmoney = C[Cnum].yue;/*第一次交易的账户余额值赋给交易经额的值*/
	T[Tnum].Tyue = C[Dxiabiao].yue;/*第一次交易的账户余额值赋给交易余额的值*/
	printf("\n\t\t开户成功!\n");
	system("pause");/*暂停功能*/
	printf("\n\n账号  \t\t交易类型\t交易金额\t余额\n");/*输出账户第一次交易的数据清单*/
	printf("%s", C[Cnum].account);
	printf("  %s", T[Tnum].type);
	printf("\t\t%.2f", C[Cnum].yue);
	printf("   \t%.2f", C[Cnum].yue);
	printf("\n");
	Cnum++;/*账户序号加一*/
	Tnum++;/*交易序号加一*/
	Dxiabiao++;
	system("pause");/*暂停*/
}
 

查询账户余额

void quary()     
{
	for (;;)/*空循环语句*/
	{
		switch (quary_menu()) /*查询界面选择判断*/
		{
		case 1:quary_yue();break;/*调用查询余额函数*/
		case 2:quary_mingxi();break; /*调用查询明细函数*/	
		case 3:quary_credit();break; /*调用查询存款函数*/
		case 4:quary_debit();break;/*调用查询取款函数*/	
		case 0:return;		
		}
	}
}

取款

void debit()    
{
	float money;/*定义取款金额*/
	system("cls");/*清屏*/
	printf("\n\n\n\t\t取款————debit \n\n\n");/*进入取款功能界面*/
	printf("\t\t本机只可取50或100元币值人民币!\n");
	printf("\n\n\t\t请输入取款金额:");
	scanf("%f", &money);	/*输入取款金额*/
	if (money> C[Dxiabiao].yue)/*账户余额是否足够取款*/
	{
		printf("\n\t\t您的余额不足!\n");
		system("pause");
		return;
	}
	if ((int)money % 50 != 0 || money <= 0)/*取款金额必须为50的整数倍且为正数*/
	{
		printf("\n\t\t请输入面值为50或100的存款金额!请勿输入负数或0!\n");
		system("pause");
		return;
	}
	strcpy(T[Tnum].account, C[Dxiabiao].account);/*把当前登录账号复制给交易记录里的账号*/
	strcpy(T[Tnum].type, "取款");/*复制交易类型*/
	T[Tnum].Tmoney = money;/*取款金额值赋给交易金额*/
	C[Dxiabiao].yue -= T[Tnum].Tmoney;/*计算取款后的账户余额*/
	T[Tnum].Tyue = C[Dxiabiao].yue;/*取款后余额等于账户余额*/
	printf("\n\t\t取款成功!\n");
	system("pause");
	printf("\n账号  \t\t交易类型\t交易金额\t交易余额\n");//输出账户和交易的数据清单
	printf("%s", T[Tnum].account);
	printf("   %s", T[Tnum].type);
	printf("\t\t%.2f", T[Tnum].Tmoney);
	printf("\t\t%.2f", T[Tnum].Tyue);
	printf("\n");
	Tnum++;/*交易序号加一*/
	system("pause");
}

存款

void credit()  
{
	float money;/*输入的存款金额*/
	system("cls");/*清屏*/
	printf("\n\n\n\t\t存款————credit \n\n\n");/*进入存款功能界面*/
	printf("\t\t本机只接收50元或100元币值人民币!\n");/*提示信息*/
	printf("\n\t\t请输入存款金额:");
	scanf("%f", &money);/*输入存款金额*/
	if ((int)money % 50 != 0 || money <= 0)/*存款金额必须为50的整数倍且为正数*/
	{
		printf("\n\t\t请输入面值为50或100的存款金额!请勿输入负数或0!\n");
		system("pause");
		return;
	}
	strcpy(T[Tnum].account, C[Dxiabiao].account);/*把当前登录账号复制给交易记录里的账号*/
	strcpy(T[Tnum].type, "存款");/*复制交易类型*/
	T[Tnum].Tmoney = money;/*把存款金额赋给交易金额*/
	C[Dxiabiao].yue += T[Tnum].Tmoney;/*计算存款后的账户余额*/
	T[Tnum].Tyue = C[Dxiabiao].yue;/*交易后的余额等于账户余额*/
	printf("\n\t\t存款成功!");
	system("pause");
	printf("\n账号  \t\t交易类型\t交易金额\t交易余额\n");//输出账户存款交易的数据清单
	printf("%s", T[Tnum].account);
	printf("   %s", T[Tnum].type);
	printf("\t\t%.2f", T[Tnum].Tmoney);
	printf("\t\t%.2f", T[Tnum].Tyue);
	printf("\n");
	Tnum++;/*交易序号加一*/
	system("pause");
}
 

修改密码

void updatepassword()   
{
	char password[7], newpassword1[7], newpassword2[7];
	int j = 0;
	printf("\n\n\t\t请输入原来的密码:");
	scanf("%s", password);/*输入旧密码*/
	if (strcmp(password, C[Dxiabiao].password) != 0)/*判断旧密码正确与否*/
	{
		printf("\n\t\t您的密码输入错误!\n");
		system("pause");
		return;
	}
	do
	{
		printf("\n\t\t请输入新密码:");
		scanf("%s", newpassword1);
		printf("\n\t\t请再一次输入新密码:");/*输入两次新密码*/
		scanf("%s", newpassword2);
		if (strcmp(newpassword1, newpassword2) != 0)/*判断输入的两次新密码是否相等*/
		{
			j++;
			printf("\n\t\t您的密码输入错误!您还有%d次机会输入密码!\n", 3 - j);
		}
		if (j == 3)/*新密码输入错误不得超过三次*/
		{
			printf("密码修改未成功!\n");
			system("pause");
			return;
		}
	} while (strcmp(newpassword1, newpassword2) != 0);
	strcpy(C[Dxiabiao].password, newpassword1);/*拷贝新密码到账户信息里*/
	printf("\n\t\t您的密码修改成功!\n");
	system("pause");
	return;
}

主菜单

int menu() 
{
	char c;
	do
	{
		system("cls"); /*每次选择运行前清屏*/
		printf("\n\n\n\t\t**************************\n");
		printf("\t\t**          主菜单      **\n"); /*主菜单选择*/
		printf("\t\t**************************\n");
		printf("\t\t--------------------------\n");
		printf("\t\t**        1. 注册       **\n");
		printf("\t\t**        2. 登录       **\n");
		printf("\t\t**        3. 加载数据   **\n");
		printf("\t\t**        4. 保存数据   **\n");
		printf("\t\t**        5. 系统帮助   **\n");
		printf("\t\t**        0. 退出       **\n");
		printf("\t\t--------------------------\n");
		printf("\t\t**************************\n");
		printf("\t\t请作出选择(0-5):");
		c = getchar(); /*读入选择*/
	} while (c<'0' || c>'5');
	return(c - '0'); /*c变为空后返回重新选择*/
}

运行截图

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996)/*将4966警报置为失效*/
#define CNUM 100
struct Customer/*账户的结构体*/
{
	char account[16];/*用户账号*/
	char name[9];/*用户姓名*/
	char password[7];/*账户密码*/
	char IDnumber[19];/*用户身份证号*/
	float yue;/*账户余额*/
};
typedef struct 
{
	char account[16];/*交易的账号*/
	char Ttime[50];/*交易时间*/
	char type[5];/*交易类型*/
	float Tmoney;/*交易金额*/
	float Tyue;/*交易后的余额*/
} Transaction;/*交易记录的结构体*/
Transaction T[1000];/*定义交易记录的结构体数组,可以保存1000条交易记录*/
struct Customer C[100];/*定义账户的结构体数组,可以注册100个账户*/
int Cnum = 0;/*账户序号*/
int Tnum = 0; /*交易序号*/
int Dxiabiao = 0;/*当前登录的账户下标*/
 
int menu();        /*声明主菜单函数*/
void help();     /*声明帮助函数*/
void zhuce();      /*声明注册函数*/
void denglu();     /*声明登录函数*/
void load();  /*声明装载数据函数*/
void save();     /*声明保存数据函数*/
int denglu_menu(); /*声明登录菜单函数*/
void credit();    /*声明存款函数*/
void debit();     /*声明取款函数*/
void quary();     /*声明查询函数*/
void print();   /*声明打印函数*/
void updatepassword(); /*声明修改密码函数*/
int quary_menu();      /*声明查询菜单函数*/
void quary_yue();      /*声明查询余额函数*/
void quary_mingxi();   /*声明查询明细函数*/
void quary_credit();  /*声明查询存款函数*/
void quary_debit();   /*声明查询取款函数*/
 
/**************************主函数***********************************/
void main()
{
	system("color 3F");/*设置背景颜色为蓝色*/
	printf("\n\t****************************************************\n");
	printf("\n\t*****               欢迎使用ATM终端机!         *****\n");
	printf("\n\t****************************************************\n");
	system("pause");/*暂停功能*/
	system("cls");/*清屏*/
	for (;;)/*空循环语句*/
	{
		switch (menu()) /*主菜单选择判断*/
		{
		case 1:zhuce(); break;/*调用注册函数*/
		case 2:denglu(); break;/*调用登录函数*/
		case 3:load(); break;/*调用加载数据的函数*/
		case 4:save(); break;/*调用保存数据的函数*/
		case 5:help(); break;/*调用帮助函数*/
		case 0:printf("\t\t欢迎使用ATM终端机管理系统。谢谢!\n"); 
			system("pause");
			exit(0);/*结束程序*/
		}
	}
}
 
/*********************定义主菜单函数*******************************/
int menu() 
{
	char c;
	do
	{
		system("cls"); /*每次选择运行前清屏*/
		printf("\n\n\n\t\t**************************\n");
		printf("\t\t**          主菜单      **\n"); /*主菜单选择*/
		printf("\t\t**************************\n");
		printf("\t\t--------------------------\n");
		printf("\t\t**        1. 注册       **\n");
		printf("\t\t**        2. 登录       **\n");
		printf("\t\t**        3. 加载数据   **\n");
		printf("\t\t**        4. 保存数据   **\n");
		printf("\t\t**        5. 系统帮助   **\n");
		printf("\t\t**        0. 退出       **\n");
		printf("\t\t--------------------------\n");
		printf("\t\t**************************\n");
		printf("\t\t请作出选择(0-5):");
		c = getchar(); /*读入选择*/
	} while (c<'0' || c>'5');
	return(c - '0'); /*c变为空后返回重新选择*/
}
 
/***********************定义帮助函数*******************************/
void help()
{
	system("cls");
	printf("\n\t\t******************************\n");
	printf("\n\t\t*   欢迎使用ATM机帮助功能    *\n");
	printf("\n\t\t* 1.如有记录,先用加载功能   *\n");
	printf("\n\t\t* 2.注册记得要保存数据       *\n");
	printf("\n\t\t* 3.登录后可选择功能存款、取 *\n");
	printf("\n\t\t*   款打印票据或查询         *\n");
	printf("\n\t\t* 4.登录后可查询账户余额     *\n");
	printf("\n\t\t* 注:一切操作切勿忘记保存   *\n");
	printf("\n\t\t******************************\n");
	system("pause");
}
 
/********************定义注册函数***********************/
void zhuce()   
{
	int baiwei, shiwei, gewei, len;/*定义账号的后三位*/
	char password2[7];/*注册时第二次输入的密码*/
	int  j = 0;
	strcpy(C[Cnum].account, "123456543210");/*复制账号的前12位*/
	baiwei = Cnum / 100;
	shiwei = Cnum / 10 % 10;
	gewei = Cnum % 10;
	C[Cnum].account[12] = baiwei + '0';
	C[Cnum].account[13] = shiwei + '0';
	C[Cnum].account[14] = gewei + '0';
	C[Cnum].account[15] = '\0';
	system("cls");/*运行前清屏*/
	printf("\n\n\n\t\t注册————ZHUCE\n\n\n");
	printf("\t\t请输入姓名:");
	scanf("%s", C[Cnum].name);
	do
	{
		printf("\t\t请输入6位数密码:");
		scanf("%s", C[Cnum].password);
		len = strlen(C[Cnum].password);
		if (len != 6)/*判断密码是否为6位*/
		{
			printf("\t\t您的密码不是6位数!\n");
			system("pause");
			return;
		}
		//此处用字符串长度函数来判断密码的位数
		printf("\t\t请再次输入密码:");
		scanf("%s", password2);
		if (strcmp(C[Cnum].password, password2) != 0)/*判断两次密码输入是否相同*/
		{
			j++;
			printf("\n\t\t您的密码输入错误!您还有%d次机会输入密码!\n", 3 - j);
		}
		if (j == 3)/*密码输入错误不得超过三次*/
		{
			system("pause");
			return;
		}
	} while (strcmp(C[Cnum].password, password2) != 0);
	do
	{
		printf("\t\t请输入身份证号:");
		scanf("%s", C[Cnum].IDnumber);
		len = strlen(C[Cnum].IDnumber);
		if (len != 18 && len != 15)/*判断身份证号位数是否为15位或18 位*/
			printf("\t\t身份证号错误!请输入15位或18位身份证号!\n");
	} while (len != 18 && len != 15);
	printf("\n\t\t请输入存入金额:");
	scanf("%f", &C[Cnum].yue);
	if ((int)C[Cnum].yue % 50 != 0)/*存款金额必须为50的整数倍*/
	{
		printf("\t\t本机只接受50元或100元面值的存款!\n");
		system("pause");
		return;
	}
	strcpy(T[Tnum].account, C[Cnum].account);/**/
	strcpy(T[Tnum].type, "存储");/*复制交易类型*/
	T[Tnum].Tmoney = C[Cnum].yue;/*第一次交易的账户余额值赋给交易经额的值*/
	T[Tnum].Tyue = C[Dxiabiao].yue;/*第一次交易的账户余额值赋给交易余额的值*/
	printf("\n\t\t开户成功!\n");
	system("pause");/*暂停功能*/
	printf("\n\n账号  \t\t交易类型\t交易金额\t余额\n");/*输出账户第一次交易的数据清单*/
	printf("%s", C[Cnum].account);
	printf("  %s", T[Tnum].type);
	printf("\t\t%.2f", C[Cnum].yue);
	printf("   \t%.2f", C[Cnum].yue);
	printf("\n");
	Cnum++;/*账户序号加一*/
	Tnum++;/*交易序号加一*/
	Dxiabiao++;
	system("pause");/*暂停*/
}
 
/********************定义登录函数**************************/
void denglu()
 { 
	char account[16], password[7];/*登录时输入的账号和密码*/
	int i = 0, j = 0;
	system("cls");/*清屏*/
	printf("\n\n\n\t\t登录————DENGLU\n\n\n");/*进入登录得功能界面*/
	printf("\t\t输入账号:");
	scanf("%s", account);/*输入账号*/
	for (i = 0; i<Cnum; i++)/*在已注册的账号中依次寻找该账号*/
		if (strcmp(account, C[i].account) == 0)
		{
			Dxiabiao = i;/*若找到,则跳出循环*/
			break;
		}
	if (i == Cnum)/*注册的账号中没输入的账号*/
	{
		printf("\n\t\t当前账号不存在!\n");
		system("pause");
		return;
	}
	do
	{
		printf("\n\t\t输入密码:");
		scanf("%s", password);
		if (strcmp(password, C[i].password) != 0)
		{
			j++;
			printf("\t\t您的密码输入错误!您还有%d次机会输入密码!\n\n", 3 - j);
		}
		if (j == 3)/*密码输入错误不得超过三次*/
		{
			printf("\n\t\t此卡已被锁定,请到工作人员处解锁。\n");
			system("pause");
			return;
		}		
	} while (strcmp(password, C[i].password) != 0);
	for (;;)/*空循环语句*/
	{
		switch (denglu_menu()) /***登陆界面选择判断***/
		{
		case 1:credit();break;/*调用存款函数*/			
		case 2:debit();break;/*调用取款函数*/		
		case 3:quary();break;/*调用查询函数*/		
		case 4:updatepassword();break;/*调用修改密码函数*/
		case 5:print(); break;  /*调用打印函数*/
		case 0:return;/*返回上一级菜单界面*/	
		}
	}
}
 
/***********************定义加载数据函数**************************/
void load()  
{
	FILE *fp;/*定义文件指针*/
	int i;
	char Fname[20];/*定义输入的文件名*/
	printf("\t\t请输入打开的文件名(文件名.txt):");
	scanf("%s", Fname);/*输入要读入数据的文件名*/
	if ((fp = fopen(Fname, "r")) == NULL)/*找不到输入的文件名*/
	{
		printf("\t\t无法打开该文件!");
		system("pause");
		return;
	}
	fscanf(fp, "%d\n", &Cnum);
	fscanf(fp, "账号  \t\t姓名\t密码\t身份证号  \t\t余额\n");
	for (i = 0; i<Cnum; i++)/*依次从文件读入注册账户的信息*/
	{
		fscanf(fp, "%16s %9s %7s %19s %12f", 
			C[i].account,	C[i].name, C[i].password,C[i].IDnumber, &C[i].yue);
		fscanf(fp, "\n");
	}
	fscanf(fp, "%d\n", &Tnum);
	fscanf(fp, "账号  \t\t交易类型\t交易金额\t交易余额\n");
	for (i = 0; i<Tnum; i++)/*依次从文件读入交易记录的信息*/
	{
		fscanf(fp, "%16s ", T[i].account);
		fscanf(fp, "%5s\t%12f\t%12f", 
			T[i].type,&T[i].Tmoney, &T[i].Tyue);
		fgets(T[i].account, 16, fp);
		fscanf(fp, "\n");
	}
	fclose(fp);/*关闭文件*/
	printf("\t\t读入成功!\n\n");
	system("pause");
}
 
/***********************定义保存数据函数**************************/
void save()    
{
	FILE *fp;/*文件指针*/
	int i;
	char Fname[13];
	printf("\t\t请输入文件名(输入格式为:文件名.txt):");
	scanf("%s", Fname);/*输入要保存的文件名*/
	if ((fp = fopen(Fname, "w")) == NULL)
	{
		printf("\n\t\t无法打开文件!\n");
		system("pause");
		return;
	}
	fprintf(fp, "%d\n", Cnum);
	fprintf(fp, "账号  \t\t姓名\t密码 \t身份证号  \t\t余额\n");
	for (i = 0; i<Cnum; i++)/*把账户信息依次输出到指定文件*/
		fprintf(fp, "%-16s%-9s%-7s%-19s%-12.2f\n", 
			C[i].account,C[i].name, C[i].password,C[i].IDnumber, C[i].yue);
	fprintf(fp, "%d\n", Tnum);
	fprintf(fp, "账号  \t\t交易类型\t交易金额 \t\t交易余额 \n");
	for (i = 0; i<Tnum; i++)/*把交易记录的信息依次输出到指定文件*/
		fprintf(fp, "%-16s  %-5s \t%-12.2f \t%-12.2f \n",
			T[i].account, T[i].type, T[i].Tmoney, T[i].Tyue);
	fclose(fp);/*关闭文件*/
	printf("\n\t\t保存成功!\n");
	system("pause");
}
 
/**********************定义登录菜单函数**************************/
int denglu_menu()
{
	char c;
	do
	{
		system("cls"); /*每次选择运行前清屏*/
		printf("\n\n\n\t\t*********欢迎进入    登录界面!*********\n\n"); /*登录界面菜单选择*/
		printf("\t\t * 1. 存款 \n");
		printf("\t\t * 2. 取款 \n");
		printf("\t\t * 3. 查询  \n");
		printf("\t\t * 4. 修改密码  \n");
		printf("\t\t * 5. 打印票据  \n");
		printf("\t\t * 0. 返回 \n");
		printf("\t\t*****************************************\n");
		printf("\t\t请作出选择(0-5):");
		c = getchar(); /*读入选择*/
	} while (c<'0' || c>'5');
	return(c - '0'); /*c变为空后返回重新选择*/
}
 
/**********************定义打印函数******************************/
void print()
{
	FILE *file;
	int i;
	if ((file = fopen("票据.txt", "w")) == NULL)
	{
		printf("\t\t无法打开该文件!");
		system("pause");
		return;
	}
	fprintf(file, "**********************************\n");
	for (i = 0; i < Tnum; i++)
		if (strcmp(T[i].account, C[Dxiabiao].account) == 0)
		{
			fprintf(file, "** 交易类型:");
			fprintf(file, " %s \n", T[i].type);
			fprintf(file, "** 交易金额:");
			fprintf(file, " %.2f \n", T[i].Tmoney);
			fprintf(file, "** 交易余额:");
			fprintf(file, " %.2f \n", T[i].Tyue);
			fprintf(file, "** 您的账号:");
			fprintf(file, " %s \n", T[i].account);
		}
	fprintf(file, "**********************************\n");
	fclose(file);/*关闭文件*/
	printf("\t\t打印成功!\n");
	system("pause");
}
 
 /*************************定义存款函数***********************/
void credit()  
{
	float money;/*输入的存款金额*/
	system("cls");/*清屏*/
	printf("\n\n\n\t\t存款————credit \n\n\n");/*进入存款功能界面*/
	printf("\t\t本机只接收50元或100元币值人民币!\n");/*提示信息*/
	printf("\n\t\t请输入存款金额:");
	scanf("%f", &money);/*输入存款金额*/
	if ((int)money % 50 != 0 || money <= 0)/*存款金额必须为50的整数倍且为正数*/
	{
		printf("\n\t\t请输入面值为50或100的存款金额!请勿输入负数或0!\n");
		system("pause");
		return;
	}
	strcpy(T[Tnum].account, C[Dxiabiao].account);/*把当前登录账号复制给交易记录里的账号*/
	strcpy(T[Tnum].type, "存款");/*复制交易类型*/
	T[Tnum].Tmoney = money;/*把存款金额赋给交易金额*/
	C[Dxiabiao].yue += T[Tnum].Tmoney;/*计算存款后的账户余额*/
	T[Tnum].Tyue = C[Dxiabiao].yue;/*交易后的余额等于账户余额*/
	printf("\n\t\t存款成功!");
	system("pause");
	printf("\n账号  \t\t交易类型\t交易金额\t交易余额\n");//输出账户存款交易的数据清单
	printf("%s", T[Tnum].account);
	printf("   %s", T[Tnum].type);
	printf("\t\t%.2f", T[Tnum].Tmoney);
	printf("\t\t%.2f", T[Tnum].Tyue);
	printf("\n");
	Tnum++;/*交易序号加一*/
	system("pause");
}
 
/***********************定义取款函数**************************/
void debit()    
{
	float money;/*定义取款金额*/
	system("cls");/*清屏*/
	printf("\n\n\n\t\t取款————debit \n\n\n");/*进入取款功能界面*/
	printf("\t\t本机只可取50或100元币值人民币!\n");
	printf("\n\n\t\t请输入取款金额:");
	scanf("%f", &money);	/*输入取款金额*/
	if (money> C[Dxiabiao].yue)/*账户余额是否足够取款*/
	{
		printf("\n\t\t您的余额不足!\n");
		system("pause");
		return;
	}
	if ((int)money % 50 != 0 || money <= 0)/*取款金额必须为50的整数倍且为正数*/
	{
		printf("\n\t\t请输入面值为50或100的存款金额!请勿输入负数或0!\n");
		system("pause");
		return;
	}
	strcpy(T[Tnum].account, C[Dxiabiao].account);/*把当前登录账号复制给交易记录里的账号*/
	strcpy(T[Tnum].type, "取款");/*复制交易类型*/
	T[Tnum].Tmoney = money;/*取款金额值赋给交易金额*/
	C[Dxiabiao].yue -= T[Tnum].Tmoney;/*计算取款后的账户余额*/
	T[Tnum].Tyue = C[Dxiabiao].yue;/*取款后余额等于账户余额*/
	printf("\n\t\t取款成功!\n");
	system("pause");
	printf("\n账号  \t\t交易类型\t交易金额\t交易余额\n");//输出账户和交易的数据清单
	printf("%s", T[Tnum].account);
	printf("   %s", T[Tnum].type);
	printf("\t\t%.2f", T[Tnum].Tmoney);
	printf("\t\t%.2f", T[Tnum].Tyue);
	printf("\n");
	Tnum++;/*交易序号加一*/
	system("pause");
}
 
 /****************************定义修改密码函数****************************/
void updatepassword()   
{
	char password[7], newpassword1[7], newpassword2[7];
	int j = 0;
	printf("\n\n\t\t请输入原来的密码:");
	scanf("%s", password);/*输入旧密码*/
	if (strcmp(password, C[Dxiabiao].password) != 0)/*判断旧密码正确与否*/
	{
		printf("\n\t\t您的密码输入错误!\n");
		system("pause");
		return;
	}
	do
	{
		printf("\n\t\t请输入新密码:");
		scanf("%s", newpassword1);
		printf("\n\t\t请再一次输入新密码:");/*输入两次新密码*/
		scanf("%s", newpassword2);
		if (strcmp(newpassword1, newpassword2) != 0)/*判断输入的两次新密码是否相等*/
		{
			j++;
			printf("\n\t\t您的密码输入错误!您还有%d次机会输入密码!\n", 3 - j);
		}
		if (j == 3)/*新密码输入错误不得超过三次*/
		{
			printf("密码修改未成功!\n");
			system("pause");
			return;
		}
	} while (strcmp(newpassword1, newpassword2) != 0);
	strcpy(C[Dxiabiao].password, newpassword1);/*拷贝新密码到账户信息里*/
	printf("\n\t\t您的密码修改成功!\n");
	system("pause");
	return;
}
 
 /**********************定义查询函数****************************************/
void quary()     
{
	for (;;)/*空循环语句*/
	{
		switch (quary_menu()) /*查询界面选择判断*/
		{
		case 1:quary_yue();break;/*调用查询余额函数*/
		case 2:quary_mingxi();break; /*调用查询明细函数*/	
		case 3:quary_credit();break; /*调用查询存款函数*/
		case 4:quary_debit();break;/*调用查询取款函数*/	
		case 0:return;		
		}
	}
}
/*************************定义查询菜单函数**********************************/
int quary_menu()
{
	char c;
	do
	{
		system("cls"); /*每次选择运行前清屏*/
		printf("\n\n\n\t\t *********欢迎进入    查询界面!*********\n\n"); /*查询界面菜单选择*/
		printf("\t\t *| 1. 查询余额 |\n");
		printf("\t\t *| 2. 查询明细 |\n");
		printf("\t\t *| 3. 查询存款 |\n");
		printf("\t\t *| 4. 查询取款 |\n");
		printf("\t\t *| 0. 返回 |\n");
		printf("\t\t*****************************************\n");
		printf("\t\t请作出选择(0-4):");
		c = getchar(); /*读入选择*/
	} while (c<'0' || c>'4');
	return(c - '0'); /*c变为空后返回重新选择*/
}
 
/**************************定义查询余额函数**********************************/
void quary_yue()    
{
	printf("\n\n\t\t这是查询余额功能\n\n");
	printf("\t\t您的账户余额为:%.2f\n\n", C[Dxiabiao].yue);/*输出账户余额*/
	system("pause");
}
 
 /*************************定义查询明细函数***********************************/
void quary_mingxi()  
{
	int i;
	system("cls");/*清屏*/
	printf("\n\n\n\t\t查询明细————quary MINGXI\n\n");/*进入查询明细界面*/
	printf("\n\t\t您的账号:%s", C[Dxiabiao].account);
	printf("\n\n交易类型\t交易金额\t交易余额\n");//输出账户和交易的数据清单
	for (i = 0; i<Tnum; i++)
		if (strcmp(T[i].account, C[Dxiabiao].account) == 0)
		{
			printf("  %s", T[i].type);
			printf("\t\t%.2f", T[i].Tmoney);
			printf("\t\t%.2f", T[i].Tyue);
			printf("\n");
		}
	system("pause");
}
 
/**************************定义查询存款函数***********************************/
void quary_credit()   
{
	int i;
	system("cls");
	printf("\n\n\t\t查询存款————quary credit\n\n");
	printf("\n\t\t您的账号:%s", C[Dxiabiao].account);
	printf("\n\n交易类型\t交易金额\t交易余额\n");//输出账户和交易的数据清单
	for (i = 0; i<Tnum; i++)
		if (strcmp(T[i].account, C[Dxiabiao].account) == 0 && strcmp(T[i].type, "存款") == 0)
		{
			printf("  %s", T[i].type);
			printf("\t\t%.2f", T[i].Tmoney);
			printf("\t\t%.2f", T[i].Tyue);
			printf("\n");
		}
	system("pause");
}
 
/**************************定义查询取款函数***********************************/
void quary_debit()    
{
	int i;
	system("cls");
	printf("\n\n\n\t\t查询取款————quary debit\n\n");
	printf("\n\t\t您的账号:%s", C[Dxiabiao].account);
	printf("\n\n交易类型\t交易金额\t交易余额\n");//输出账户和交易的数据清单
	for (i = 0; i<Tnum; i++)/*输出存款记录*/
		if (strcmp(T[i].account, C[Dxiabiao].account) == 0 && strcmp(T[i].type, "取款") == 0)
		{
			printf("%s", T[i].type);
			printf("\t\t%.2f", T[i].Tmoney);
			printf("\t\t%.2f", T[i].Tyue);
		}
	printf("\n");
	system("pause");
}

三.个人小结

小结
在这次的上机实验中,我找到了许多知识漏洞,学到了很多以前不懂的知识,以前认为自己已经懂了的知识点也理解更加深刻了,多样化的处理问题,才是成功之道。尤其是遇到自己当时不知道如何题目如何编写,通过自己的学习和同学的交流后,试编和改错,最后能够顺利的编写出来,带来了成就感。

(psp表格)

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 45 60
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 30 15
Develpment 开发 150 178
Analyosis 需求分析(包括学习新技术) 40 30
Design Spec 生成设计文档 34 34
Design Review 设计复审 30 20
Coding Standard 代码规范 30 30
Design 具体设计 45 45

posted on 2020-11-18 23:22  包琪  阅读(89)  评论(0编辑  收藏  举报