数据结构课程设计--活期储蓄账目管理
活期储蓄帐目管理数据结构

活期储蓄帐目管理数据结构在当今的金融领域,活期储蓄是一种常见且重要的储蓄方式。
对于金融机构而言,有效地管理活期储蓄帐目至关重要,而这其中,数据结构的选择和运用起着关键作用。
首先,我们来了解一下活期储蓄帐目管理所涉及的基本元素。
客户的个人信息,如姓名、身份证号码等,是识别和区分不同账户的重要依据。
账户信息则包括账号、开户日期、账户状态(如正常、冻结等)。
交易记录则涵盖了存款、取款、转账、利息计算等各种操作的详细信息,包括交易时间、交易类型、交易金额等。
为了有效地管理这些数据,一种常见的数据结构是链表。
链表的优点在于它能够灵活地进行插入和删除操作。
在活期储蓄帐目管理中,当有新的交易发生时,可以方便地将新的交易记录添加到链表中。
而且,如果某个账户被注销或出现异常需要删除相关数据,也能相对容易地从链表中移除。
然而,链表也存在一些不足之处。
比如,在查找特定元素时,其效率相对较低。
为了提高查找效率,我们可以结合使用哈希表。
通过对关键信息(如账号)进行哈希运算,可以快速定位到相应的账户数据。
另一种常用的数据结构是二叉搜索树。
它具有有序性的特点,使得在查找、插入和删除操作上都能保持相对较高的效率。
在活期储蓄帐目管理中,可以根据账户的某些关键属性(如账户余额)构建二叉搜索树,以便快速获取特定范围内的账户信息。
除了上述数据结构,数组也有其应用场景。
例如,在存储固定长度的客户信息时,数组可以提供快速的随机访问。
但数组的缺点是插入和删除操作的效率较低,因为可能需要移动大量元素。
在实际的活期储蓄帐目管理系统中,往往不会仅仅依赖于一种数据结构,而是根据不同的需求和场景,综合运用多种数据结构。
比如,使用链表来存储交易记录,用哈希表快速查找账户信息,用二叉搜索树来管理按照特定规则排序的账户数据。
为了保证数据的准确性和完整性,还需要考虑数据的备份和恢复机制。
定期对数据进行备份,可以防止因意外情况(如系统故障、数据损坏等)导致的数据丢失。
活期账目储蓄管理

摘要银行作为一个金融机构,在现代人们的生活中扮演着极其重要的角色。
为生活节凑飞快的现代人提供快速、便捷、高效的理财服务。
伴随着电脑技术的发展,各大银行的储蓄管理系统也随之出现在这一舞台上。
本次研究开发的目的是设计并实现一个活期储蓄账目管理系统的基本业务。
本文介绍了活期储蓄账目管理系统,并深入分析活期储蓄账目管理系统的设计和各个功能模块的实现。
系统主要分为五个大的模块:储户开户模块、储户销户模块、储户登录模块、储户的账号存款、取款模块,能够实现对储户的自然信息进行管理,对储户账户信息进行管理,对当天交易进行统计,以及查询指定用户的交易信息。
系统充分采用了模块化的设计思想,将各种功能进行封装,提高了系统的整体扩展性,经使用证明该系统运行良好。
关键词:算法数据结构管理Title Current savings account management systemAbstractBank, as a financial institution, in modern plays an extremely important role in people's lives. For modern living section of Minato quickly with fast, convenient, and efficient financial services. Along with the development of computer technology, the major bank savings management system also arise at this stage.This research aims to design and implement a basic business checking savings account management system. This article describes the current savings account management system, and in-depth analysis of current savings account management system design and realization of each functional module.System is divided into five modules: customer account login module, customer sales module, savers account deposit, withdrawal of modules, savers can be achieved naturally information management, to manage customer account information, trading statistics on that day, and the query transaction information for the specified user.Full systems with modular design concept, package various functions, improve the overall scalability of the system, the used result shows that the system is running well.Keywords:Algorithm Data structure Management目录1 绪论 (1)1.1 研究开发目的和意义 (1)2 活期储蓄账目管理系统开发技术 (2)2.1 C++语言简介 (2)2.2 Visual Studio 2005开发平台 (2)2.3 活期储蓄账目管理介绍 (4)3 系统分析 (5)4 系统设计 (5)4.1 系统模块设计 (5)4.1.1登录功能模块的分析 (6)4.1.2用户自然信息管理功能模块的分析 (6)4.1.3账户信息管理功能模块分析 (7)4.1.4当天交易统计功能模块的分析 (7)4.1.5用户交易查询模块的分析 (7)4.2 系统设计所采用技术 (7)4.3 数据库结构设计 (8)4.4 函数设计 (10)4.5 关键流程 (11)4.5.1系统函数调用流程 (11)4.5.2系统执行流程 (12)4.5.3功能详细执行流程 (13)5 调试分析 (15)6 测试及运行结果 (16)6.1登陆功能 (16)6.2主操作界面 (17)结论 (27)致谢 (28)参考文献 (29)1 绪论随着科技的提高和社会的日益发展,21世纪已经进入到了信息、网络的高科技时代,互联网逐渐普及,社会现代化的脚步不断加快,人们的生活也随之向着多元化的方面发展。
活期储蓄帐目管理数据结构-无删减范文

活期储蓄帐目管理数据结构活期储蓄帐目管理数据结构1. 简介活期储蓄帐目管理是指对个人或机构的活期储蓄账户进行有效管理和记录的过程。
为了方便对储蓄账户进行账目管理,需要采用合适的数据结构来存储和操作账目数据。
本文将介绍一种适用于活期储蓄帐目管理的数据结构。
2. 数据需求在活期储蓄帐目管理中,我们需要记录每一笔储蓄交易的相关信息,包括交易日期、交易类型、交易金额等。
同时,还需要能够对账目数据进行高效的增删改查操作以及排序功能。
3. 数据结构设计为了满足上述需求,我们可以采用链表的数据结构来存储账目数据。
链表由多个节点构成,每个节点包含一个保存账目信息的结构体。
结构体中的字段可以包括交易日期、交易类型、交易金额等。
```markdownstruct Node {Date date; // 交易日期string type; // 交易类型float amount; // 交易金额Node next; // 下一个节点的指针};```上述结构体 Node 表示链表中的一个节点。
其中,包括交易日期(date)、交易类型(type)、交易金额(amount)等字段。
4. 操作实现4.1 插入数据在链表的尾部插入新的账目数据是一种常见的操作。
我们可以先找到链表的尾节点,然后在其后面插入一个新的节点。
```markdownvoid insert(Node head, Date date, string type, float amount) {Node newNode = new Node;newNode->date = date;newNode->type = type;newNode->amount = amount;newNode->next = nullptr;Node curr = head;while (curr->next != nullptr) {curr = curr->next;}curr->next = newNode;}```4.2 删除数据在链表中删除指定节点的账目数据是另一个常见的操作。
活期储蓄帐目管理数据结构[1]简版
![活期储蓄帐目管理数据结构[1]简版](https://img.taocdn.com/s3/m/1e2cdc5c0a1c59eef8c75fbfc77da26925c59611.png)
活期储蓄帐目管理数据结构活期储蓄帐目管理数据结构简介活期储蓄帐目管理是一项常见的任务,尤其是对于个人或家庭来说。
储蓄帐目管理可以帮助人们追踪他们的存款、支出和余额,以便更好地控制财务状况。
为了有效地管理这些帐目,使用数据结构来组织和存储数据是非常重要的。
在本文档中,我们将介绍一种适用于活期储蓄帐目管理的数据结构,该数据结构使用简单且高效的方式存储和操作帐目数据。
我们将首先讨论活期储蓄帐目的结构,然后介绍数据结构的设计以及相应的操作。
活期储蓄帐目结构活期储蓄帐目通常包含以下字段:- 日期:存储帐目发生的日期和时间信息。
- 类别:存储帐目的类型,如存款或支出。
- 金额:存储帐目的金额。
- :可选字段,用于存储关于帐目的额外信息。
这些字段共同组成了一个完整的帐目条目,在数据结构中,我们可以使用一个对象或者一个记录来表示一个帐目条目。
数据结构设计为了有效地管理帐目数据,我们可以选择使用线性表作为底层数据结构。
线性表可以是数组或链表,具体取决于实际的需求。
对于活期储蓄帐目管理,我们可以使用一个动态数组来存储所有的帐目条目。
动态数组可以根据需要自动扩展或收缩,以适应不同数量的帐目。
```markdownstruct AccountEntry {Date date;string category;double amount;string note;}class AccountManager {vector<AccountEntry> entries;// 实现其他的操作方法```上述代码展示了一个包含帐目条目的动态数组的数据结构设计。
每个帐目条目使用一个结构体(`AccountEntry`)来表示,而整个帐目管理系统使用一个类(`AccountManager`)来封装帐目条目的操作方法。
数据结构操作下面是一些常见的数据结构操作,让我们逐一介绍。
添加帐目为了向帐目管理系统中添加新的帐目,我们可以实现一个`addEntry()`方法。
银行活期储蓄账户管理课程设计

青岛大学软件技术学院游戏算法实践报告姓名王晓阳专业数字媒体艺术班级 4班指导教师刘春秋2013年 1 月 16日目录1 问题定义与描述 (3)1.1 问题定义 (3)1.2 问题描述 (3)2 关键技术 (3)3 程序的执行命令操作 (3)4 总体设计 (4)4.1 系统模块图 (4)4.2结构设计说明 (5)5 详细设计 (5)5.1构建节点类模板 (5)5.2主函数构建 (5)5.3其他各功能函数 (6)6 测试结果及分析 (8)7 心得体会 (11)附录:程序代码 (13)1 问题定义与描述1.1 问题定义活期储蓄账目管理1.2 问题描述本程序需要先建立结点类模板,然后使用链表的基本操作应用实现各个程序的实现,头插法先建立链表使之成当前操作数据基础,然后可以使用节点的删除进行储户的销户,结点的插入的应用成为程序的开户(注意:建立新的用户要先确认新建的用户号不可以语之前的用户号码相同, 引起系统错误!本程序应用链表节点的比较改进程序。
)。
储户的存取也是应用节点的比较查找之后进行的账户钱数加减。
2 关键技术链表的插入、删除与查找3 程序的执行命令操作(1).建立节电类模板,构建链表.(2).输入储户信息.(3).执行各项操作(数据测试)1.查询储户信息.2.开户.3.储户支取信息查询.4.储户的程序销户.5.程序完成.6.程序退出.4 总体设计4.1 系统模块图图4.1 系统模块图4.2结构设计说明1.本程序主要应用数据结构节点类模板,首先构建节点类模板,在建立已有储户数据中对头结点(*head)分配动态存储空间,对头结点的邻接点(head->next)赋初值,循环插入新结点建立储户数据(头插法)。
在账号循环插入中进行账号重复判断。
2.在查找账户的过程中,应用结点下移继续查找,实现账户正确查找应用。
3.在销户过程中,进行结点删除,从而实现储户的销户。
4.在开户过程中,定义新结点,分配新的存储空间,进行结点插入,在账号循环插入中进行账号重复判断,完成开户过程。
活期账目存储管理

河南城建学院课程设计报告书专业:计算机科学与技术课程设计名称:《数据结构课程设计》题目:活期储蓄账目管理班级:0814102班学号:081410205姓名:孙甄妮同组人员:曾广海指导老师:张延红张芳芳杨斌完成时间:2012年2月17日摘要随着计算机的普及,现代人越来越多的想到用计算机来代替许多人做的事情。
从而提高办事效率,使经济收入更加可观,从而就产生了计算机这门课程。
而计算机主要是通过程序来实现各种事情的,再者程序也必须通过各种算法才能达到存储各种数据,所以数据结构这门课程就应运而生。
本课程设计主要是用数据结构编写关于活期储蓄账目管理的算法,来达到活期储蓄账目管理的目的。
关键词:计算机算法数据结构管理目录目录 (3)第一章开发环境和开发工具 (4)1.1C/C语言简介 (4)1.2 开发背景 (4)1.3 开发环境 (4)第二章算法思想 (5)2.1 系统需求分析 (5)2.2 系统总体设计 (5)2.2.1 系统设计目标 (5)2.2.2 开发设计思想 (6)2.2.3 系统功能模块设计 (6)2.3 算法思想描述 (7)第三章算法实现 (8)3.1 数据结构 (8)3.2 程序模块 (8)3.3 各模块之间的调用关系 (11)3.4 源程序代码 (11)第四章测试与分析 (19)4.1 测试数据选择 (19)4.2 测试结果分析 (19)总结 (25)心得体会 (26)参考文献 (28)第一章开发环境和开发工具1.1 C/ C ++语言简介C作为系统描述语言,既可以用来编写系统软件,也可以用来编写应用软件。
C语言诞生后,许多原来用汇编语言编写的软件,现在都可以用C语言编写;C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
1.2开发背景随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。
数据结构课程设计-活期储蓄账目管理

目录(一)需求分析(二)概要设计1)主要思想2)具体功能流程3)定义结构(三)详细设计基本函数(四)调试与操作结果一、进入操作界面二、储蓄开户三、储户登陆,存款,查询,取款,查询四、显示储户信息(五)课程设计总结与体会(六)致谢(七)参考文献(八)附源代码(一)需求分析设计简单的活期储蓄账目管理系统,实现最基本的功能。
1.设计题目:设计活期储蓄账目管理。
2.设计任务:活期储蓄处理中,储户开户、销户、存入、支出活动频繁。
系统设计要求:1)能比较迅速地找到储户的账目,以实现存款、取款记账。
2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
3.设计思想:建立链表,快速实现账户的增添,插入,删除功能。
4.运行环境:VC6.0++(二)概要设计1)主要思想:2)具体功能流程:a)开户b)查询,存款或取款c)定义结构:typedef struct ElemType //定义结构体{char name[11];int account;char password[7];float money;}ElemType;typedef struct lnode //定义链表{ElemType data;struct lnode *next;}LINK;(三)详细设计基本函数:01)void InsertList(LINK *&L) //链表插入实现开户功能02)void Search(LINK *L) //链表查找,实现用户登陆功能03)void Deposit(LINK *&L,LINK *p) //用户存款、取款04)void PrintList(LINK*L) //打印链表,实现用户信息输出05)oid DeleteList(LINK *&L) //链表删除,实现销户功能(需要账号和密码)06)void save(LINK *L) //保存链表,实现用户信息保存到文件07)void Print(LINK *&L) //打开文件,得到链表08)void menu() //主菜单函数09)void choice() //菜单选择函数(四)调试与操作结果(一)进入操作界面(二)储蓄开户(三)储户登陆,存款,查询,取款,查询(四)显示储户信息(五)课程设计总结与体会这次课程设计,我与小组成员选的题目是活期储蓄账目管理,对于这个实验开始感觉不知从哪儿开始,后来经过认真分析后,结合所学知识并与小组成员查阅了许多相关的课外知识,我们开始了一步步解题编程。
活期储蓄项目

算法与数据结构课程设计题目名称:活期储蓄项目管理班级:计算机4班组长:朱磊小组成员:朱磊,牛紫晗,修镜洋,秦博目录一.问题描述 (2)1. 题目 (2)2. 基本要求 (2)二.需求分析 (2)三.概要设计 (2)3.1程序的整体流程图 (2)3.2存储结构的定义 (3)3.3模块划分: (3)本程序分为开户,销户,登录3个模块,其中登录部分又分为存款,取款,查看余额3个小模块,下面是各个子模块的算法描 (3)3.3.1开户 (4)3.3.2销户 (5)3.3.3登录 (5)四.详细设计 (7)4.1每个算法的说明 (7)4.2算法的调用关系 (8)4.3各个子算法的源程序 (8)4.3.1插入账户算法 (8)4.3.2删除账户算法 (9)4.3.3登录账户算法 (11)4.3.4存款算法: (11)4.3.5取款算法: (11)4.3.6查看余额算法 (12)4.3.7主函数的算法: (12)五.调试分析 (14)5.1时间复杂度分析 (14)5.2算法的运行和测试 (14)5.2.1测试开户 (14)5.2.2测试销户 (14)5.2.3测试存款,取款,查看余额 (15)5.2.4算法的改进思想 (15)六.课程设计总结 (15)一.问题描述1.题目:活期储蓄帐目管理2.基本要求:活期储蓄处理,储户开户、销户、存入、支出活动频繁,系统设计要求:a)能比较迅速地找到储户的帐户,以实现存款、取款记账b)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
二.需求分析1.由于,题目要求简单迅速的实现插入,删除,所以单链表等简单的数据结构无法满足要求,散列表正好可以实现这个功能。
2.登录成功后才可以进行存款,取款,查看余额等操作,否则操作一次就需要验证一次,不人性化。
3.插入过程中,用拉链法处理冲突三.概要设计3.1程序的整体流程图3.2存储结构的定义struct account_struct//账户的数据结构{char *name;//开户人姓名char *password;//帐号密码float money;//账户余额int id;//账户IDstruct account_struct *next;//下个账户的指针};typedef struct account_struct *paccount;//指向账户的指针类型3.3模块划分:本程序分为开户,销户,登录3个模块,其中登录部分又分为存款,取款,查看余额3个小模块,下面是各个子模块的算法描述:3.3.3登录登录成功后,得到当前节点,并且保存3.3.3.1存款3.3.3.2取款3.3.3.3查看余额四.详细设计4.1每个算法的说明void insert() //开户void insert_account( char *name, char *password ) //根据姓名和密码插入账户void display() //显示所有帐户的信息int del() //销户void del_account( int id ) //根据ID删除账户paccount login() //登录paccount find_account_by_id( int id ) //根据ID查找账户void cunkuan( paccount node ) //存款void qukuan( paccount node ) //取款void chakan( paccount node ) //查看余额4.2算法的调用关系4.3各个子算法的源程序4.3.1插入账户算法void insert() //开户{char *name;name=(char *)malloc(sizeof(char)*20);printf("请输入您的开户姓名:");scanf("%s",name);char *password;password=(char *)malloc(sizeof(char)*20);printf("请输入您的账户密码:");scanf("%s",password);insert_account(name,password);//根据姓名和密码创建账户}过程中调用算法:insert_account(name,password),定义如下void insert_account( char *name, char *password ) //根据姓名和密码插入账户{//int key=simple_hash(name);//int value=key%M;total_id++;int value=total_id%M;paccount new_account;//新建一个节点,把当前信息保存new_account=(paccount)malloc(sizeof(struct account_struct));paccount current_account=(paccount)malloc(sizeof(struct account_struct));//找到此节点应该插入的链条*current_account=account[value];new_account->id=total_id;new_account->money=0;new_account->name=name;new_account->password=password;new_account->next=NULL;if (current_account->next==NULL){account[value].next=new_account;}if (current_account->next!=NULL){while(current_account->next!=NULL)current_account=current_account->next;current_account->next=new_account;}printf("****************************************************************** *********\n");printf("开户成功!\n");printf("您的姓名为:%s 账户ID为:%d 密码为: %s\n",new_account->name,new_account->id,new_account->password);printf("请您牢记此信息!\n");printf("****************************************************************** *********\n");}4.3.2删除账户算法int del() //销户{int id;printf("请输入您账户的ID:");scanf("%d",&id);paccount node=(paccount)malloc(sizeof(struct account_struct));node=find_account_by_id(id);if (node==NULL)//不存在帐号则直接退出{printf("无此帐号,请您确认后重新选择输入!!\n");return 0;}//若散列文件中存在帐号id则进行验证用户的姓名和密码char name[20];printf("请输入您的姓名:");scanf("%s",name);char password[20];printf("请输入您的密码:");scanf("%s",password);if (strcmp(name,node->name)!=0||strcmp(password,node->password)!=0)//验证不成功{printf("用户名或者密码错误,请您确认后再次选择输入!!");return 0;}if (node->money>0)//账户余额大于0,无法销户{printf("账户余额大于0,请您取款后再进行销户,以免造成损失");return 0;}//帐号密码正确,则进行销户,下面是删除散列表中的节点操作del_account(id);return 1;}过程中调用算法del_account(id),定义如下:void del_account( int id ) //根据ID删除账户{int value=id%M;paccount node=(paccount)malloc(sizeof(struct account_struct));*node=account[value];if (node->next->id==id){account[value].next=node->next->next;}while(node->next->id!=id)node=node->next;node->next=node->next->next;}4.3.3登录账户算法paccount login() //登录{int id;printf("请输入您账户的ID:");scanf("%d",&id);paccount node=(paccount)malloc(sizeof(struct account_struct));node=find_account_by_id(id);if (node==NULL)//不存在帐号则直接退出{printf("无此帐号,请您确认后重新选择输入!!\n");return NULL;}char password[20];//存在帐号则进行密码验证printf("请输入您的密码:");scanf("%s",password);if (strcmp(password,node->password)!=0)//验证不成功{printf("密码错误,请您确认后再次选择输入!!");return NULL;}return node;}4.3.4存款算法:void cunkuan( paccount node ) //存款{float money;printf("请输入存款的钱数:");scanf("%f",&money);node->money+=money;printf("\n 存款成功!,您的当前账户余额为:%f\n\n",node->money);}4.3.5取款算法:void qukuan( paccount node ) //取款{float money;printf("请输入您取款的金额:");scanf("%f",&money);if (node->money>=money){node->money-=money;printf("\n 取款成功!");}elseprintf("\n 账户余额不足,取款失败!!");printf(" 您的当前账户余额为:%f\n\n",node->money);}4.3.6查看余额算法void chakan( paccount node ) //查看余额{printf("****************************************************************** **\n");printf(" 您的ID为:%d\n",node->id);printf(" 您的账户余额为:%f\n",node->money);printf("****************************************************************** **\n");}4.3.7主函数的算法:void main(void){initialize_account();bool b=true;while(b){fflush(stdin);//刷新缓冲区printf(" 1.开户\n");printf(" 2.销户\n");printf(" 3.登录(登录后可以存款,取款,查看余额等)\n");printf(" 4.查看全部储户的信息\n");printf(" 5.退出系统\n\n");printf(" 请输入您的选择:");int choice;scanf("%d",&choice);if (choice==1)insert();//开户else if(choice==2)del();//销户else if (choice==3){paccount node=(paccount)malloc(sizeof(struct account_struct));node=login();if (node!=NULL)//如果登录成功{bool bl=true;while(bl){printf(" 1.存款\n");printf(" 2.取款\n");printf(" 3.查看余额\n");printf(" 4.退出登录\n");fflush(stdin);int input;printf(" 请输入您的选择:");scanf("%d",&input);if(input==1){cunkuan(node);}else if(input==2)qukuan(node);else if(input==3)chakan(node);else if(input==4)bl=false;elseprintf("输入错误,请重新选择输入!\n");}}}else if(choice==4)//显示全部信息display();else if (choice==5)//退出b=false;elseprintf("输入错误,请确认后重新输入!\n");}}五.调试分析5.1时间复杂度分析由于插入,删除查找的算法的复杂度都是O(n),所以此算法的复杂度为O(n) 5.2算法的运行和测试5.2.1测试开户5.2.2测试销户5.2.3测试存款,取款,查看余额存款取款查看余额由以上测试可知,程序的功能和要求可以实现5.2.4算法的改进思想1.人性化的界面:由于用的是DOS界面,与用户的交互设计的不是太好,进一步的研究可以设计更加人性化的界面2.删除算法的ID的有待进一步的研究,因为删除了ID,次ID就会永久作废,不利于节约ID资源,下一步可以探讨怎样可以使删除的ID重新利用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计--活期储蓄账目管理活期储蓄账目管理一目的满足活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求。
①能比较迅速地找到储户的帐户进而显示储户信息,以实现存款、取款记账;②能比较简单,迅速地实现插入和删除,以实现开户和销户的需要;③熟练使用 C 语言编写程序,解决实际问题;学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。
二需求分析1、数据需求1.需先进行储户开户才可进行之后的所有的操作。
2.开户时需要的数据有姓名、身份证号码、联系电话、密码、账号会自动生成。
3.销户时,需用输入账号与密码(两者都正确后)方可销户;存取款时,也需进行账号及密码验证后方可进行交易。
2、基本功能需求基本的功能有新建储户(开户)、删除储户(销户)、存取款、查询储户信息(此步也可看见交易后的信息)、显示所有储户信息。
3、非功能性需求系统以菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进行。
三概要设计1、数据结构设计用结构体来定义其数据类型,然后将数据按照该数据结构存储,之后运用文件的相关知识将更改的数据写入文件中,采用数组类型的存储结构。
2、储存结构体设计本系统主要用线性表表结构类型来存储在“活期储蓄账目管理系统”中的信息。
其中,结构体由5个分量构成:用户账号、用户姓名、用户身份证号码、用户密码、开户金额。
3、模块设计void add()函数实现新建储户功能void select_id()函数实现查询储户信息功能void display()函数实现显示所有储户信息功能void del()函数实现删除储户功能void save_money() 函数实现存款功能void get_money()函数实现取款功能void print()函数用于显示菜单void main()函数用于实现菜单中的功能四详细设计1、结构体的详细定义struct user //用户类型(账号,姓名,身份证号,存款) {int id;char name[20];char person_num[19];char password[6];double money;};2、系统函数详细介绍void add()函数实现新建储户功能void add() //添加用户{printf("%45s\n","***新建储户***");printf("--------------------------------------------------------------------------------\n\n");struct user getuser();struct user temp;int count(); //函数目的:计算文件中的记录数目以生成自动账号FILE *fp;int number;if((fp=fopen(file,"ab"))==NULL){printf("Can not open file!\n");exit(1);}temp=getuser(); //读取用户名number=count();temp.id=number+1; //生成自动账号fwrite(&temp,sizeof(struct user),1,fp);printf("添加用户成功!\n");fclose(fp);}void select_id()函数实现查询储户信息功能void select_id() //查询储户信息{int count();void getpassword(char *password);printf("%45s\n","***查询储户信息***");printf("--------------------------------------------------------------------------------\n");printf("%s %15s %15s %15s\n","编号","用户姓名","身份证号码","存款余额");printf("--------------------------------------------------------------------------------\n\n");FILE *fp;struct user temp;int i,maxnum;char password[8];bool flag=false;if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}maxnum=count();printf("输入要查询账号:");scanf("%d",&i);if(i<i||i>maxnum){printf("你要查询的账号不存在!");return;}printf("输入账号密码:");scanf("%s",&password);while(fread(&temp,sizeof(struct user),1,fp)) //循环读取每一条记录判断是否为要查看的记录{if(temp.id==i&&strcmp(temp.password,password)==0){printf("NO.%d %8s %25s %.2f\n",temp.id,,temp.person_num,te mp.money);flag=true;break;}}if(flag==false) //判断密码是否正确{printf("您输入的密码不正确!\n");return;}fclose(fp);}void display()函数实现显示所有储户信息功能void display() //显示所有储户信息{printf("%45s\n","***显示所有储户信息***");printf("--------------------------------------------------------------------------------\n");printf("%s %15s %15s %15s\n","账号","用户姓名","身份证号码","存款余额");printf("--------------------------------------------------------------------------------\n");FILE *fp;struct user temp;if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}while(fread(&temp,sizeof(struct user),1,fp)){printf("NO.%d %10s %23s %.2f\n",temp.id,,temp.person_num,t emp.money);}fclose(fp);}void del()函数实现删除储户功能void del() //删除储户{printf("%45s\n","***删除储户***");printf("--------------------------------------------------------------------------------\n");printf("%s %15s %15s %10s\n","账号","用户姓名","身份证号码","存款余额");printf("--------------------------------------------------------------------------------\n");int count();void getname(char *name);void getperson_num(char *person_num);void getpassword(char *password);FILE *fp;int i,num,mark;char password[6];bool flag=false;struct user *temp;num=count(); //根据记录数申请空间temp=(struct user *)malloc(num*sizeof(struct user));if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++) //读取文件内容fread(&temp[i],sizeof(struct user),1,fp); fclose(fp);printf("输入要需要注销的账号:");scanf("%d",&mark);if(i<mark||mark>num){printf("你要注销的账号不存在!");return;}printf("输入账号密码: ");scanf("%s",&password);if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容{printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++) //无效账户信息全部置为0{if(temp[i].id==mark&&strcmp(temp[i].password,password)==0&&temp[i].mo ney==0.00){strcpy(temp[i].person_num,"0");strcpy(temp[i].name,"0");strcpy(temp[i].password,"0");flag=true;}fwrite(&temp[i],sizeof(struct user),1,fp);}fclose(fp);free(temp);if(flag==false){printf("您输入的密码不正确或是余额不为零!\n");}elseprintf("储户注销成功!\n");void save_money() 函数实现存款功能void save_money() //函数功能:存款{printf("%45s\n","***用户存款业务***");printf("--------------------------------------------------------------------------------\n\n");int count();void getpassword(char *password);FILE *fp;int i,num,mark;bool flag=false;struct user *temp;char password[6];num=count();temp=(struct user *)malloc(num*sizeof(struct user)); //根据记录数申请空间if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++) //将文件内容存入数组fread(&temp[i],sizeof(struct user),1,fp);fclose(fp);printf("输入要存款账号:"); //读取存款账号scanf("%d",&mark);if(i<mark||mark>num){printf("你要查询的账号不存在!");return;}printf("输入账号密码: ");scanf("%s",&password);if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容{printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++){if(temp[i].id==mark&&strcmp(temp[i].password,password)==0){double money=0;printf("输入要存入的金额:");scanf("%lf",&money);while(1){if(money<=0){printf("只能为正数!\n");money=0;printf("输入要存入的金额:");scanf("%lf",&money);}elsebreak;}temp[i].money +=money;flag=true;}fwrite(&temp[i],sizeof(struct user),1,fp); //修改该用户的信息}fclose(fp);free(temp);if(flag==false){printf("您输入的密码不正确!\n");}elseprintf("你存款业务已办妥!\n");}void get_money()函数实现取款功能void get_money() //函数功能:用户取款{printf("%45s\n","***用户取款业务***");printf("--------------------------------------------------------------------------------\n\n");int count();FILE *fp;int i,num,mark;char password[6];bool flag=false;struct user *temp;num=count(); //根据记录数申请空间temp=(struct user *)malloc(num*sizeof(struct user));if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++) //读取文件内容fread(&temp[i],sizeof(struct user),1,fp);fclose(fp);printf("输入要取款账号:");scanf("%d",&mark);if(i<mark||mark>num){printf("你要查询的账号不存在!");return;}printf("输入账号密码: ");scanf("%s",&password);if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容{printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++){if(temp[i].id==mark&&strcmp(temp[i].password,password)==0){double money=0;printf("输入要取出的金额:");scanf("%lf",&money);if(money<=0) //判断用户余额是否足够{printf("只能为正数!\n");money=0;}else if(money>temp[i].money){printf("你的余额不足!\n");money=0;}temp[i].money -=money;flag=true;}fwrite(&temp[i],sizeof(struct user),1,fp);}fclose(fp);free(temp);if(flag==false){printf("您输入的密码不正确!\n");}elseprintf("你取款业务已办妥!\n");}void print()函数用于显示菜单void print() //函数功能:输出界面{printf("%48s\n","***活期储蓄帐目管理系统***");printf("--------------------------------------------------------------------------------\n\n");printf("%8s,%-20s\n","1","新建储户");printf("%8s,%-20s\n","2","查询储户信息");printf("%8s,%-20s\n","3","显示所有储户信息");printf("%8s,%-20s\n","4","删除储户");printf("%8s,%-20s\n","5","存款");printf("%8s,%-20s\n","6","取款");printf("%8s,%-20s\n","7","退出");printf("\n请选择功能(1~7):");}void main()函数用于实现菜单中的功能,主函数void main(){char choose;do{print();scanf(" %c",&choose); //读取功能标号,根据标号选择不同的函数fflush(stdin);system("cls");switch(choose){case '1':add();break;case '2':select_id();break;case '3':display();break;case '4':del();break;case '5':save_money();break;case '6':get_money();break;case '7':exit(1);default:printf("对不起,你所选择的功能不存在!\n");}getch(); //暂停功能(读取任意键继续)(conio.h)system("cls"); //清除屏幕显示(stdlib.h)}while(1);}五调试分析系统运行主界面如图所示,各子功能测试运行结果如下:每个方面实现一个功能。