一、题目要求
- 以银行账户信息管理业务为背景,通过调研、分析现有的管理模式和已有的管理软件,建立系统模型;
- 完成软件结构设计和算法设计;
- 完成系统的软件开发和测试工作;
- 撰写设计说明书;
二、需求分析2.1 产品需求概述
2.1.1 功能简介
本产品的开发意图、应用目标及作用范围:本系统针对银行账户信息的特点以及管理中的实际需求而设计,能够有效的实现账户信息管理的信息化,减轻管理人员地工作负担,达到高效率、规模化管理账户信息、避免人为操作的错误和不规范行为。
产品主要功能概述:
银行账户管理系统 | 账户信息录入 | 录入账户、户主姓名、年龄、性别、联系方式 |
查询账户信息 | 在已录入信息中查询指定账户 | |
修改账户信息 | 在已录入信息中修改指定账户信息 | |
显示所有账户信息 | 浏览所有已录入账户信息 | |
存取款 | 给指定账户修改余额 | |
删除账户 | 在已录入信息中删除指定账户信息 | |
添加账户 | 添加新账户 |
2.1.2 运行环境
1.硬件环境:
最低配置:CPU:Pentium3 800以上或其他的兼容规格,内存:256M以上,硬盘:100GB以上空间
推荐配置:CPU:Pentium4 1.6G,内存:512M以上,硬盘:100GB以上空间
2.软件环境:
运用VC++6.0编程环境
2.2 功能需求
本系统主要功能:账户信息录入;查询账户信息;修改账户信息;显示所有账户信息;存取款;删除账户;添加账户
2.2.1账户信息录入
录入账户、户主姓名、年龄、性别、联系方式。
2.2.2查询账户
根据用户所输入的账户,在已录入信息中查询指定账户。
2.2.3修改账户信息
根据用户所输入的账户,在已录入信息中修改指定账户。
2.2.4显示所有账户信息
浏览所有已录入信息。
2.2.5存取款
根据用户所输入的账户,给指定账户修改余额。
2.2.6删除账户
根据用户所输入的账户,在已录入信息中删除指定账户。
2.2.7添加账户
添加新账户。
2.3 数据描述
本系统是银行账户信息管理系统,采用VC++6.0编译器作为开发环境,输入输出数据类型主要为char,int数据类型。
图 1 系统数据描述
三、概要设计
根据对题目的分析,该系统主要包括,账户信息的录入、浏览、查询、删除、修改、存取款、信息保存文件七个模块,每一个模块对应一个函数。保存函数对其他的函数起辅助作用,主函数控制整个程序的运行,除此外还具有退出功能,可以使程序在一次的运行之中循环执行所有的功能,根据需要终止程序,使程序更加的完美。在程序当中将学生数据记录类型定义为结构体类型,函数每次对账户信息的访问,其数据来源都是“message.txt”文件。
3.1 系统体系结构图
图 2 系统体系结构
3.1.1 模块描述
模块1:录入信息模块
名称 | 账户信息录入 | 标识 | new_message | 子系统名称 | 信息录入 添加账户 | 系统 名称 | 银行账户管理系统 |
接口说明 | 输入 | 账户各项信息 | |||||
输出 | 无 | ||||||
功能说明 | 录入账户的相关信息,并保存信息到文件 | ||||||
运行环境 | 运行于VC++6.0编程坏境之下 | ||||||
调用关系说明 | 调用模块 | 无 | |||||
被调用模块 | 无 |
模块2:查询信息模块
名称 | 查询账户信息 | 标识 | search_message | 子系统名称 | 查询账户信息 | 系统 名称 | 银行账户管理系统 |
接口说明 | 输入 | 所查询账户 | |||||
输出 | 所输入账户的相关信息 | ||||||
功能说明 | 查询指定账户的相关信息 | ||||||
运行环境 | 运行于VC++6.0编程坏境之下 | ||||||
调用关系说明 | 调用模块 | 无 | |||||
被调用模块 | 无 |
模块3:修改信息模块
名称 | 修改账户信息 | 标识 | up_message | 子系统名称 | 修改账户信息 | 系统 名称 | 银行账户管理系统 |
接口说明 | 输入 | 要修改的账户 | |||||
输出 | 所输入账户的相关信息 | ||||||
功能说明 | 修改指定账户的相关信息 | ||||||
运行环境 | 运行于VC++6.0编程坏境之下 | ||||||
调用关系说明 | 调用模块 | 保存信息模块 | |||||
被调用模块 | 无 |
模块4:浏览所有信息模块
名称 | 显示所有账户信息 | 标识 | play_message | 子系统名称 | 显示所有信息 | 系统 名称 | 银行账户管理系统 |
接口说明 | 输入 | 无 | |||||
输出 | 已保存的所有账户的相关信息 | ||||||
功能说明 | 浏览所有账户的相关信息 | ||||||
运行环境 | 运行于VC++6.0编程坏境之下 | ||||||
调用关系说明 | 调用模块 | 无 | |||||
被调用模块 | 无 |
模块5:存取款模块
名称 | 存取款 | 标识 | up1_message | 子系统名称 | 存取款 | 系统 名称 | 银行账户管理系统 |
接口说明 | 输入 | 要存取款的账户;存取款后账户余额 | |||||
输出 | 所输入账户的相关信息 | ||||||
功能说明 | 修改指定账户的余额 | ||||||
运行环境 | 运行于VC++6.0编程坏境之下 | ||||||
调用关系说明 | 调用模块 | 保存信息模块 | |||||
被调用模块 | 无 |
模块6:删除信息模块
名称 | 删除账户信息 | 标识 | up2_message | 子系统名称 | 删除账户信息 | 系统 名称 | 银行账户管理系统 |
接口说明 | 输入 | 要删除的账户 | |||||
输出 | 所输入账户的相关信息 | ||||||
功能说明 | 删除指定账户的相关信息 | ||||||
运行环境 | 运行于VC++6.0编程坏境之下 | ||||||
调用关系说明 | 调用模块 | 保存信息模块 | |||||
被调用模块 | 无 |
模块7:信息保存模块
名称 | 保存信息 | 标识 | save_message | 子系统名称 | 保存信息 | 系统 名称 | 银行账户管理系统 |
接口说明 | 输入 | 无 | |||||
输出 | 无 | ||||||
功能说明 | 保存信息 | ||||||
运行环境 | 运行于VC++6.0编程坏境之下 | ||||||
调用关系说明 | 调用模块 | 无 | |||||
被调用模块 | 修改信息模块;存取款模块;删除信息模块; |
四、详细设计
4.1 系统主要函数说明
函数名称 | 函数功能 |
new_message | 录入账户的相关信息 |
search_message | 查询指定账户的相关信息 |
up_message | 修改指定账户的相关信息 |
up1_message | 浏览所有账户的相关信息 |
up2_message | 修改指定账户的余额 |
play_message | 删除指定账户的相关信息 |
save_message | 保存信息 |
4.1.1 函数new_message
【功能】
录入账户的相关信息
【参数】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
struct.name | char | 姓名 |
struct.money | char | 余额 |
struct.age | char | 年龄 |
struct.sex | char | 性别 |
struct.tel | char | 联系方式 |
【返回值】
无
【算法描述】
图 3 录入函数算法流程
4.1.2 函数search_message
【功能】
查询指定账户的相关信息
【参数】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
【返回值】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
struct.name | char | 姓名 |
struct.money | char | 余额 |
struct.age | char | 年龄 |
struct.sex | char | 性别 |
struct.tel | char | 联系方式 |
4.1.2 函数search_message
【功能】
查询指定账户的相关信息
【参数】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
【返回值】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
struct.name | char | 姓名 |
struct.money | char | 余额 |
struct.age | char | 年龄 |
struct.sex | char | 性别 |
struct.tel | char | 联系方式 |
【算法描述】
图 4 查询函数算法流程
4.1.3 函数up_message
【功能】
修改指定账户的相关信息
【参数】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
struct.name | char | 姓名 |
struct.money | char | 余额 |
struct.age | char | 年龄 |
struct.sex | char | 性别 |
struct.tel | char | 联系方式 |
【返回值】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
struct.name | char | 姓名 |
struct.money | char | 余额 |
struct.age | char | 年龄 |
struct.sex | char | 性别 |
struct.tel | char | 联系方式 |
【算法描述】
图 5 修改函数算法流程
4.1.4 函数up1_message
【功能】
修改指定账户的余额
【参数】
参数名称 | 类型 | 含义 |
struct.money | char | 余额 |
【返回值】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
struct.name | char | 姓名 |
struct.money | char | 余额 |
struct.age | char | 年龄 |
struct.sex | char | 性别 |
struct.tel | char | 联系方式 |
【算法描述】
图 6 存取款函数算法流程
4.1.5 函数up2_message
【功能】
删除指定账户
【参数】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
【返回值】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
struct.name | char | 姓名 |
struct.money | char | 余额 |
struct.age | char | 年龄 |
struct.sex | char | 性别 |
struct.tel | char | 联系方式 |
【算法描述】
图 7 删除函数算法流程
4.1.6 函数play_message
【功能】
浏览所有账户的相关信息
【参数】
无
【返回值】
参数名称 | 类型 | 含义 |
struct.num | char | 账户 |
struct.name | char | 姓名 |
struct.money | char | 余额 |
struct.age | char | 年龄 |
struct.sex | char | 性别 |
struct.tel | char | 联系方式 |
【算法描述】
输出所有已保存账户的相关信息
4.1.7 函数save_message
【功能】
保存信息
【参数】
无
【返回值】
无
【算法描述】
保存储存在结构体中的所有信息到文件
五、程序代码
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 100
//函数声明
void new_message(); //信息录入函数
void search_message(); //信息查询函数_按账户查询
void up_message(); //信息修改函数
void up1_message(); //存取款函数
void up2_message(); //信息删除函数
void play_message(); //显示信息函数
void save_message(); //信息保存函数
struct message{ //定义账户信息
char num[MAX]; //账户
char name[MAX]; //姓名
char money[MAX]; //余额
char age[MAX]; //年龄
char sex[MAX]; //性别
char tel[MAX]; //联系方式
};
message mes[MAX];
int main()
{
int p;
do{
printf("------------------------------------------------\n\n");
printf(" 银行账户管理系统 \n\n");
printf("------------------------------------------------\n\n");
printf("1--账户信息录入 2--查询账户信息\n3--修改账户信息 4--显示所有账户信息\n");
printf("5--存款 6--取款\n7--删除账户 8--添加账户\n");
printf("0--退出系统\n\n");
printf("请输入:");
fflush(stdin);
scanf("%d",&p);
switch(p){
case 1:{system("cls");new_message();break;} //调用信息录入函数
case 2:{system("cls");search_message();break;} //调用信息查询函数_按账户查询
case 3:{system("cls");up_message();break;} //调用信息修改函数
case 4:{system("cls");play_message();break;} //调用显示信息函数
case 5:{system("cls");up1_message();break;} //调用存取款函数
case 6:{system("cls");up1_message();break;} //调用存取款函数
case 7:{system("cls");up2_message();break;} //调用信息删除函数
case 8:{system("cls");new_message();break;} //调用信息录入函数
default: system("cls");
}
if(p==0) break; //退出系统
} while(1); //死循环
}
void new_message() //信息录入函数
{
int i=0;
char ch;
FILE *fp; //打开文件*追加
if((fp=fopen("message.txt","a"))==NULL) {printf("File open error!\n");exit(0);}
do{
printf("------------------------------------------------\n\n");
printf(" 银行账户管理系统 \n\n");
printf("------------------------------------------------\n\n");
printf("账户信息录入!\n\n输入第%d个账户的信息\n",i+1);
printf("\n输入账户:");
fflush(stdin); //清空缓冲区,防止影响输入
gets(mes[i].num);
strcpy(mes[i].money,"0");
printf("\n输入户主姓名:");
fflush(stdin);
gets(mes[i].name);
printf("\n输入户主年龄:");
fflush(stdin);
gets(mes[i].age);
printf("\n输入户主性别:");
fflush(stdin);
gets(mes[i].sex);
printf("\n输入户主联系方式:");
fflush(stdin);
gets(mes[i].tel);
printf("\n\n");
fprintf(fp,"\n%s %s %s %s %s %s\n",mes[i].num,mes[i].money,mes[i].name,mes[i].age,mes[i].sex,mes[i].tel); //保存信息
i++;
printf("是否继续输入?(Y/N)\n");
fflush(stdin);
ch=getch();
}while(ch!='n'&&ch!='N');
fclose(fp);
printf("账户信息已保存在message.txt中!\n");
system("pause");
system("cls");
}
void search_message() //信息查询函数_按账户查询
{
int i;
char ch[1];
char as;
FILE*fp; //打开文件*只读
if((fp=fopen("message.txt","r"))==NULL) {printf("File open error!\n无数据文件!\n");exit(0);}
for(i=0;i<MAX;i++){fscanf(fp,"%s %s %s %s %s %s",mes[i].num,mes[i].money,mes[i].name,mes[i].age,mes[i].sex,mes[i].tel);} //储存所有已录入信息到结构数组中//
fclose(fp);
printf("------------------------------------------------\n\n");
printf(" 银行账户管理系统 \n\n");
printf("------------------------------------------------\n\n");
printf("输入要查询的账户:");
fflush(stdin);
gets(ch);
for(i=0;i<MAX;i++) { if(strcmp(ch,mes[i].num)==0) break; }
if(strcmp(ch,mes[i].num)==0){
printf("\n查询成功!\n");
printf("----------------------------------\n");
printf("账户:%s\n",mes[i].num);
printf("姓名:%s\n",mes[i].name);
printf("余额:%s\n",mes[i].money);
printf("年龄:%s\n",mes[i].age);
printf("性别:%s\n",mes[i].sex);
printf("联系方式:%s\n",mes[i].tel);
}
else printf("没有找到该账户信息!!\n");
printf("\n按任意键返回主菜单!");
system("pause");
system("cls");
}
void up_message() //信息修改函数
{
int i;
int n=0;
char ch[5];
char as;
FILE*fp; //打开文件*只读
if((fp=fopen("message.txt","r"))==NULL) {printf("File open error!\n");exit(0);}
for(i=0;i<MAX;i++){fscanf(fp,"%s %s %s %s %s %s",mes[i].num,mes[i].money,mes[i].name,mes[i].age,mes[i].sex,mes[i].tel);} //储存所有已录入信息到结构数组中//
fclose(fp);
printf("------------------------------------------------\n\n");
printf(" 银行账户管理系统 \n\n");
printf("------------------------------------------------\n\n");
printf("请输入要修改信息的账户:");
fflush(stdin);
gets(ch);
for(i=0;i<MAX;i++){if(strcmp(ch,mes[i].num)==0) break;} //筛选所查询账户
if(strcmp(ch,mes[i].num)==0){
printf("****************************************\n");
printf("账户:%s\n",mes[i].num);
printf("姓名:%s\n",mes[i].name);
printf("余额:%s\n",mes[i].money);
printf("年龄:%s\n",mes[i].age);
printf("性别:%s\n",mes[i].sex);
printf("联系方式:%s\n",mes[i].tel);
printf("\n0-返回主菜单\n1-姓名 2-年龄\n3-性别 4-联系方式\n");
printf("\n请输入要修改的信息(0--4):");
fflush(stdin);
scanf("%d",&n);
switch(n) {
case 1: { fflush(stdin);printf("请输入:");gets(mes[i].name); break; }
case 2: { fflush(stdin);printf("请输入:");gets(mes[i].age) ; break; }
case 3: { fflush(stdin);printf("请输入:");gets(mes[i].sex) ; break; }
case 4: { fflush(stdin);printf("请输入:");gets(mes[i].tel) ; break; }
case 0: { system("pause");system("cls");break;}
}
if(n!=0) {printf("信息修改成功!\n");save_message();}
}
else{
printf("没有找到该账户信息!!\n");
printf("\n按任意键返回主菜单!");
system("pause");
system("cls");
}
}
void play_message() //显示信息函数
{
int i;
FILE*fp; //打开文件
if((fp=fopen("message.txt","r"))==NULL) {printf("File open error!\n");exit(0);}
for(i=0;i<MAX;i++){fscanf(fp,"%s %s %s %s %s %s",mes[i].num,mes[i].money,mes[i].name,mes[i].age,mes[i].sex,mes[i].tel);} //储存所有已录入信息到结构数组中//
printf("------------------------------------------------\n\n");
printf(" 银行账户管理系统 \n\n");
printf("------------------------------------------------\n\n");
for(i=0;i<MAX&&mes[i].num[0];i++){
printf("第%d个账户\n",i+1);
printf("账户:%s\n",mes[i].num);
printf("姓名:%s\n",mes[i].name);
printf("余额:%s\n",mes[i].money);
printf("年龄:%s\n",mes[i].age);
printf("性别:%s\n",mes[i].sex);
printf("联系方式:%s\n\n",mes[i].tel);
}
fclose(fp);
printf("\n按任意键返回主菜单!");
system("pause");
system("cls");
}
void up1_message() //存取款函数
{
int i;
char ch[MAX];
FILE*fp; //打开文件
if((fp=fopen("message.txt","r"))==NULL) {printf("File open error!\n");exit(0);}
for(i=0;i<MAX;i++){fscanf(fp,"%s %s %s %s %s %s",mes[i].num,mes[i].money,mes[i].name,mes[i].age,mes[i].sex,mes[i].tel);} //储存所有已录入信息到结构数组中//
fclose(fp);
printf("------------------------------------------------\n\n");
printf(" 银行账户管理系统 \n\n");
printf("------------------------------------------------\n\n");
printf("请输入账户:");
fflush(stdin);
gets(ch);
for(i=0;i<MAX&&mes[i].num[0];i++) {if(strcmp(ch,mes[i].num)==0) break;} //筛选所查询账户
if(strcmp(ch,mes[i].num)==0){
printf("****************************************\n");
printf("1.账户:%s\n",mes[i].num);
printf("2.姓名:%s\n",mes[i].name);
printf("3.余额:%s\n",mes[i].money);
printf("4.年龄:%s\n",mes[i].age);
printf("5.性别:%s\n",mes[i].sex);
printf("6.联系方式:%s\n",mes[i].tel);
printf("请输入余额:");
gets(mes[i].money);
save_message();
}
else{
printf("没有找到该账户信息!!\n");
printf("\n按任意键返回主菜单!");
system("pause");
system("cls");
}
}
void up2_message() //信息删除函数
{
int i=0;
int n=0;
char ch[2];
FILE*fp; //读取文件
if((fp=fopen("message.txt","r"))==NULL) {printf("File open error!\n");exit(0);}
for(i=0;i<MAX;i++){fscanf(fp,"%s %s %s %s %s %s",mes[i].num,mes[i].money,mes[i].name,mes[i].age,mes[i].sex,mes[i].tel);}
fclose(fp);
printf("------------------------------------------------\n\n");
printf(" 银行账户管理系统 \n\n");
printf("------------------------------------------------\n\n");
printf("请输入账户:");
fflush(stdin);
gets(ch);
for(i=0;i<MAX&&mes[i].num[0];i++){if(strcmp(ch,mes[i].num)==0) break;} //筛选所查询账户
if(strcmp(ch,mes[i].num)==0){
printf("****************************************\n");
printf("1.账户:%s\n",mes[i].num);
printf("2.姓名:%s\n",mes[i].name);
printf("3.余额:%s\n",mes[i].money);
printf("4.年龄:%s\n",mes[i].age);
printf("5.性别:%s\n",mes[i].sex);
printf("6.联系方式:%s\n",mes[i].tel);
printf("确认删除请按1!");
scanf("%d",&n);
if(n==1){
for(;i<MAX&&mes[i].num[0];i++){
strcpy(mes[i].num,mes[i+1].num);
strcpy(mes[i].name,mes[i+1].name);
strcpy(mes[i].money,mes[i+1].money);
strcpy(mes[i].age,mes[i+1].age);
strcpy(mes[i].sex,mes[i+1].sex);
strcpy(mes[i].tel,mes[i+1].tel);
}
save_message();
}
}
else printf("没有找到该账户信息!!\n");
printf("\n按任意键返回主菜单!");
system("pause");
system("cls");
}
void save_message() //信息保存函数
{
int i;
FILE *fp; //打开文件
if((fp=fopen("message.txt","wb"))==NULL) {printf("File open error!\n");exit(0);}
for(i=0;i<MAX;i++){fprintf(fp,"\n%s %s %s %s %s %s\n",mes[i].num,mes[i].money,mes[i].name,mes[i].age,mes[i].sex,mes[i].tel); }
fclose(fp);
system("pause");
system("cls");
printf("------------------------------------------------\n\n");
printf(" 银行账户管理系统 \n\n");
printf("------------------------------------------------\n\n");
printf("\n信息保存成功!\n");
system("pause");
system("cls");
}