活期储蓄帐目管理数据结构
活期储蓄帐目管理数据结构
活期储蓄帐目管理数据结构在当今的金融领域,活期储蓄是一种常见且重要的储蓄方式。
对于金融机构而言,有效地管理活期储蓄帐目至关重要,而这其中,数据结构的选择和运用起着关键作用。
首先,我们来了解一下活期储蓄帐目管理所涉及的基本元素。
客户的个人信息,如姓名、身份证号码等,是识别和区分不同账户的重要依据。
账户信息则包括账号、开户日期、账户状态(如正常、冻结等)。
交易记录则涵盖了存款、取款、转账、利息计算等各种操作的详细信息,包括交易时间、交易类型、交易金额等。
为了有效地管理这些数据,一种常见的数据结构是链表。
链表的优点在于它能够灵活地进行插入和删除操作。
在活期储蓄帐目管理中,当有新的交易发生时,可以方便地将新的交易记录添加到链表中。
而且,如果某个账户被注销或出现异常需要删除相关数据,也能相对容易地从链表中移除。
然而,链表也存在一些不足之处。
比如,在查找特定元素时,其效率相对较低。
为了提高查找效率,我们可以结合使用哈希表。
通过对关键信息(如账号)进行哈希运算,可以快速定位到相应的账户数据。
另一种常用的数据结构是二叉搜索树。
它具有有序性的特点,使得在查找、插入和删除操作上都能保持相对较高的效率。
在活期储蓄帐目管理中,可以根据账户的某些关键属性(如账户余额)构建二叉搜索树,以便快速获取特定范围内的账户信息。
除了上述数据结构,数组也有其应用场景。
例如,在存储固定长度的客户信息时,数组可以提供快速的随机访问。
但数组的缺点是插入和删除操作的效率较低,因为可能需要移动大量元素。
在实际的活期储蓄帐目管理系统中,往往不会仅仅依赖于一种数据结构,而是根据不同的需求和场景,综合运用多种数据结构。
比如,使用链表来存储交易记录,用哈希表快速查找账户信息,用二叉搜索树来管理按照特定规则排序的账户数据。
为了保证数据的准确性和完整性,还需要考虑数据的备份和恢复机制。
定期对数据进行备份,可以防止因意外情况(如系统故障、数据损坏等)导致的数据丢失。
活期账目储蓄管理
摘要银行作为一个金融机构,在现代人们的生活中扮演着极其重要的角色。
为生活节凑飞快的现代人提供快速、便捷、高效的理财服务。
伴随着电脑技术的发展,各大银行的储蓄管理系统也随之出现在这一舞台上。
本次研究开发的目的是设计并实现一个活期储蓄账目管理系统的基本业务。
本文介绍了活期储蓄账目管理系统,并深入分析活期储蓄账目管理系统的设计和各个功能模块的实现。
系统主要分为五个大的模块:储户开户模块、储户销户模块、储户登录模块、储户的账号存款、取款模块,能够实现对储户的自然信息进行管理,对储户账户信息进行管理,对当天交易进行统计,以及查询指定用户的交易信息。
系统充分采用了模块化的设计思想,将各种功能进行封装,提高了系统的整体扩展性,经使用证明该系统运行良好。
关键词:算法数据结构管理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世纪已经进入到了信息、网络的高科技时代,互联网逐渐普及,社会现代化的脚步不断加快,人们的生活也随之向着多元化的方面发展。
SQL作业-活期储蓄管理系统数据库要点
计科2011级《数据库应用技术》实验报告账号 姓名电话 地址开户行开户日期账号存取标志金额存取款信誉日期编号名称存款额负责人电话地址3、关系模型设计根据概念模型中得出的 E-R 图可转换成对应的关系模型,关系模型设计如下: 转换后的关系模型为:储户信息(账号,姓名,电话,地址,开户行编号,开户日期) 储户动态信息(账号,密码,存款额,状态,信誉) 储蓄所信息(编号,名称,存款额,负责人,电话,地址) 存取款(账号,编号,存取标志,信誉,金额,日期)4、约束关系(1)实体完整性所有实体中的主码都不能为空,即实体“储户信息”的主码“账号”不能为空,实储户储蓄所体“储蓄所信息”的主码“编号”以及“储蓄所信息”中的主码“编号”和“日期”不能 为空,关系“存取款”中的主码“账号”不能为空。
另外,“储户信息”中的所有字段都 不能为空,“储蓄所信息”中的“名称”和“负责人”也不能为空,关系“存取款”中的 “金额”要大于 0. (2)参照完整性参照关系“存取款”的属性“账号”和“编号”分别是被参照关系“储户”和“储蓄 所信息”的外码。
因此,参照关系“存取款”的属性“账号”的值必须是被参照关系“储 户信息”中某一元组的“账号”的值,参照关系“存取款”的属性“编号”的值必须是被 参照关系“储蓄所信息”中某一元组的值。
参照关系“储户信息”的属性“开户行编号” 是被参照关系“储蓄所信息”的外码,因此,参照关系“储户信息”的属性“开户行编号” 的取值必须是“储蓄所信息”的“编号”的值。
(3)用户定义完整性储户按信誉分为“一般”和“良好”,对于信誉为“一般”的储户,只有当储户的存 款额大于储户的取款额时,才可以进行取款,也就是说信誉为“一般”的储户不可以透支 金额。
对于信誉为“良好”的储户,当储户的存款额小于储户的取款额是,也可以进行取 款,但最高不能超过 5 万元。
储户按状态分为“正常”和“挂失”。
当储户状态处于“正常”状态时,可以进行存 取款,当储户状态处于“挂失”状态时,不允许进行存取款。
活期储蓄帐目管理数据结构-无删减范文
活期储蓄帐目管理数据结构活期储蓄帐目管理数据结构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 删除数据在链表中删除指定节点的账目数据是另一个常见的操作。
7C MFC课程设计之活期储蓄管理系统
此报告的源代码(工程)下载地址:/source/3551927大学C++面向对象课程设计报告院(系):计算机工程学院专业:软件工程学生姓名:__班级:__学号: 2题目:银行储蓄管理系统起讫日期: 2010.07.04-2010.07.14 设计地点:指导教师:完成日期: 2010 年07月14日一、课程设计目的1、进行c++面向对象程序设计的复习巩固;2、在完成c++面向对象语言学习的基础上,通过自学MFC,掌握一种可视化编程的方法,并通过实践,加深对面向对象语言的理解。
3、提高运用c++编程的能力和解决实际问题的能力,创新能力及团队合、协调能力4、提高调查研究、查询技术文献、资料和编程及设计文档的能力;5、首次尝试编写软件,学习实际操作开发能力,体验学习基础知识重要性。
6、提高自学能力,体验合作以及独立编程、分析文献等各方面的重要性,加强这些方面素质的训练。
二、课程设计内容与实现的功能课程设计内容是活期储蓄管理系统,次系统主要实现开户、存款、取款、查询以及销户的功能。
还有一些细节的地方,比如各个输入位置输入不合法的情况,及BackSpace的功能,等等。
三、系统分析与设计1、系统分析(1)信息。
完整描述系统中所处理的全部信息;(2)行为。
完全描述系统状态变化所需处理或功能;(3)表示。
详细描述系统的对外接口与界面。
我的这个系统主要是实现活期储蓄中的开户、存款、取款、查询和销户等的操作。
是假定的某银行账户的账号从50000开始的,没增加一个账户,账号就加1,数组对象的每个对象的位置与账号是一一对应的,故,用线性的查找方法可以迅速的找到所查找的账户。
我的这个MFC程序主要是一个界面,上面有两个编辑框,和一个接近键盘的按钮组合,需要用户开户,依次输入姓名、设置密码(密码必须是六位字母或者数字)、输入开户金额(必须大于10元),开户成功,然后就可以进行查询和存取钱了,查询的时候需要输入的就是账号和密码,就能查询到该账户的基本情况。
银行活期储蓄帐目管理系统
一、需求分析:设计一个银行活期储蓄帐目管理系统(每个记录有下列数据项:账户号码、用户名、身份证号、地址等)。
(1) 能比较迅速地找到储户的帐户,以实现存款、取款记账。
(2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
(3) 符合课题要求,实现相应功能;(4) 要求界面友好美观,操作方便易行;(5) 注意程序的实用性、安全性。
所使用的函数:函数: 功能如下:void mainmenu(); 输出主菜单void add(); 添加用户资料void select_name(); 按姓名查询余额void select_id(); 按账号查询余额void display(); 显示用户资料void save_money(); 用户存款void get_money(); 用户取款void delete(); 销户二、概要设计:1、所使用的存储结构是:struct user{int id;char name[20];char person_num[19];double money;}2、其流程图如下:三、详细设计:1. void add() //添加用户资料{printf("%30s\n","***添加用户***");printf("---------------------------------------------\n\n");struct user getuser();int count(); //函数目的:计算文件中的记录数目以生成自动账号FILE *fp;int number;struct user temp;if((fp=fopen(file,"ab"))==NULL){printf("不能打开文件!\n");exit(1);}temp=getuser(); //读取用户名number=count();temp.id=number+1; //生成自动账号fwrite(&temp,sizeof(struct user),1,fp);printf("添加用户成功!\n");fclose(fp);}2. int count() //函数目的:计算文件中的记录总数{FILE *fp;int num;struct user temp;num=0;if((fp=fopen(file,"rb"))==NULL){printf("不能打开文件!\n");exit(1);}while(fread(&temp,sizeof(struct user),1,fp)){num++;}fclose(fp);return num;}3. void getname(char *name) //读取用户姓名(字符数<20){do{scanf("%s",name);fflush(stdin);if(strlen(name)==0)printf("姓名不能为空!\n");elseif(strlen(name)>=20)printf("姓名不能超过20个字符!\n");elsebreak;printf("请重新输入姓名: ");}while(1); //循环以保证读入数据有效}void getperson_num(char *person_num) //函数功能:读取用户身份证号码(15位或者 18位 ){do{int i,mark;char ch;for(i=0,mark=0;;i++) //输入有效性判断(只能是数字)if((ch=getchar())!='\n'){if(ch<='9'&&ch>='0')person_num[i]=ch;else{printf("身份证号码只能是数字!\n");mark=1;break;}}elsebreak;person_num[i]='\0';if(mark==1)continue;if(strlen(person_num)!=15&&strlen(person_num)!=18) printf("身份证号码只能是15位,或者18位!\n");elsebreak;printf("重新输入身份证号码: ");}while(1); //循环以保证读入数据有效}4. void select_name() //按照姓名查询账户余额{void getname(char *name);printf("%30s\n","***按照姓名查询账户余额***");printf("%8s %15s %15s %10s\n","账号","用户姓名","身份证号码","存款余额");printf("---------------------------------------------\n\n");FILE * fp;struct user temp;char name[20];if((fp=fopen(file,"rb"))==NULL){printf("不能打开文件!\n");exit(1);}printf("请输入要查询的姓名:"); //调用读取用户名函数getname(name);while(fread(&temp,sizeof(struct user),1,fp)) //循环读取每一条记录判断是否为要查看的记录if(strcmp(,name)==0){printf("NO.%d %15s %15s %.2f\n",temp.id,,temp.person_num,temp.mone y);}fclose(fp);}5. void select_id() //按照账号查询账户余额{int count();printf("%30s\n","***按照编号查询账户余额***");printf("%8s %15s %15s %10s\n","编号","用户姓名","身份证号码","存款余额");printf("---------------------------------------------\n\n");FILE * fp;struct user temp;int i,maxnum;if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}maxnum=count();printf("输入要查询账号:"); //判断账号是否在记录中scanf("%d",&i);if(i<1||i>maxnum){printf("你要查询的账号不存在!");return;}while(fread(&temp,sizeof(struct user),1,fp))//循环读取每一条记录判断是否为要查看的记录if(temp.id==i){printf("NO.%d %15s %15s %.2f\n",temp.id,,temp.person_num,temp.mone y);}fclose(fp);}6. void display() //显示用户资料{printf("%30s\n","***用户资料显示***");printf("%8s %15s %15s %10s\n","账号","用户姓名","身份证号码","存款余额");printf("---------------------------------------------\n\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 %15s %15s %.2f\n",temp.id,,temp.person_num,temp.mone y);}fclose(fp);}7.void save_money() //函数功能:按账号存款{printf("%30s\n","***用户存款业务***");printf("---------------------------------------------\n\n");int count();FILE *fp;int i,num,mark;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(mark<1||mark>num){printf("你要存款账号不存在!");return;}if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容{printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++){if(temp[i].id==mark){double money=0;printf("输入要存入的金额:");scanf("%lf",&money);if(money<=0){printf("金额只能为正数!\n");money=0;}temp[i].money +=money; //修改该用户的信息}fwrite(&temp[i],sizeof(struct user),1,fp);}fclose(fp);free(temp);printf("你存款业务已办妥!\n");}8.void get_money() //函数功能:用户取款{printf("%30s\n","***用户取款业务***");printf("---------------------------------------------\n\n");int count();FILE *fp;int i,num,mark;struct user *temp;num=count(); //根据记录数申请空间temp=(struct user *)malloc(num*sizeof(struct user));if((fp=fopen(file,"rb"))==NULL){printf("不能打开文件!\n");exit(1);}for(i=0;i<num;i++) //读取文件内容fread(&temp[i],sizeof(struct user),1,fp);fclose(fp);printf("输入要取款账号:");scanf("%d",&mark);if(mark<1||mark>num){printf("你要取款账号不存在!");return;}if((fp=fopen(file,"wb"))==NULL){printf("不能打开文件!\n");exit(1);}for(i=0;i<num;i++) //写方式打开文件,覆盖原文件中的内容{if(temp[i].id==mark){double money=0;printf("输入要取出的金额:");scanf("%lf",&money);if(money<=0) //判断用户余额是否足够{printf("只能为正数!\n");money=0;}elseif(money>temp[i].money){printf("你的余额不足!\n");money=0;}temp[i].money -=money;}fwrite(&temp[i],sizeof(struct user),1,fp);}fclose(fp);free(temp);printf("你取款业务已办妥!\n");}9.void del() //销户{int count();printf("%30s\n","***注销账户***");printf("%8s %15s %15s %10s\n","账号","用户姓名","身份证号码","存款余额");printf("---------------------------------------------\n\n");FILE * fp;struct user temp;int i,maxnum;if((fp=fopen(file,"rb"))==NULL){printf("不能打开文件!\n");exit(1);}maxnum=count();printf("输入要销户账号:"); //判断编号是否在记录中scanf("%d",&i);if(i<1||i>maxnum){printf("你要查询的账号不存在!");return;}while(fread(&temp,sizeof(struct user),1,fp))//循环读取每一条记录判断是否为要查看的记录if(temp.id==i&&temp.money==0.00)//余额为0{temp.id=-1;//算无效帐户printf("NO.%d %15s %15s %.2f\n",temp.id,,temp.person_num,temp.mone y);//printf("%d\n",temp.id);fwrite(&temp,sizeof(struct user),1,fp);//保存修改}fclose(fp);}10void mainmenu() //函数功能:输出界面{printf("%30s\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("%8s,%-20s\n","** 8","退出**");printf("\n请选择功能(1~8):");}四、调试分析:将软件进行初始化,即在VC++6.0中运行该程序,进入程序主菜单。
活期储蓄帐目管理数据结构[1]简版
活期储蓄帐目管理数据结构活期储蓄帐目管理数据结构简介活期储蓄帐目管理是一项常见的任务,尤其是对于个人或家庭来说。
储蓄帐目管理可以帮助人们追踪他们的存款、支出和余额,以便更好地控制财务状况。
为了有效地管理这些帐目,使用数据结构来组织和存储数据是非常重要的。
在本文档中,我们将介绍一种适用于活期储蓄帐目管理的数据结构,该数据结构使用简单且高效的方式存储和操作帐目数据。
我们将首先讨论活期储蓄帐目的结构,然后介绍数据结构的设计以及相应的操作。
活期储蓄帐目结构活期储蓄帐目通常包含以下字段:- 日期:存储帐目发生的日期和时间信息。
- 类别:存储帐目的类型,如存款或支出。
- 金额:存储帐目的金额。
- :可选字段,用于存储关于帐目的额外信息。
这些字段共同组成了一个完整的帐目条目,在数据结构中,我们可以使用一个对象或者一个记录来表示一个帐目条目。
数据结构设计为了有效地管理帐目数据,我们可以选择使用线性表作为底层数据结构。
线性表可以是数组或链表,具体取决于实际的需求。
对于活期储蓄帐目管理,我们可以使用一个动态数组来存储所有的帐目条目。
动态数组可以根据需要自动扩展或收缩,以适应不同数量的帐目。
```markdownstruct AccountEntry {Date date;string category;double amount;string note;}class AccountManager {vector<AccountEntry> entries;// 实现其他的操作方法```上述代码展示了一个包含帐目条目的动态数组的数据结构设计。
每个帐目条目使用一个结构体(`AccountEntry`)来表示,而整个帐目管理系统使用一个类(`AccountManager`)来封装帐目条目的操作方法。
数据结构操作下面是一些常见的数据结构操作,让我们逐一介绍。
添加帐目为了向帐目管理系统中添加新的帐目,我们可以实现一个`addEntry()`方法。
活期账目储蓄管理
摘要银行作为一个金融机构,在现代人们的生活中扮演着极其重要的角色。
为生活节凑飞快的现代人提供快速、便捷、高效的理财服务。
伴随着电脑技术的发展,各大银行的储蓄管理系统也随之出现在这一舞台上。
本次研究开发的目的是设计并实现一个活期储蓄账目管理系统的基本业务。
本文介绍了活期储蓄账目管理系统,并深入分析活期储蓄账目管理系统的设计和各个功能模块的实现。
系统主要分为五个大的模块:储户开户模块、储户销户模块、储户登录模块、储户的账号存款、取款模块,能够实现对储户的自然信息进行管理,对储户账户信息进行管理,对当天交易进行统计,以及查询指定用户的交易信息。
系统充分采用了模块化的设计思想,将各种功能进行封装,提高了系统的整体扩展性,经使用证明该系统运行良好。
关键词:算法数据结构管理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世纪已经进入到了信息、网络的高科技时代,互联网逐渐普及,社会现代化的脚步不断加快,人们的生活也随之向着多元化的方面发展。
银行活期储蓄账户管理课程设计
青岛大学软件技术学院游戏算法实践报告姓名王晓阳专业数字媒体艺术班级 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.在开户过程中,定义新结点,分配新的存储空间,进行结点插入,在账号循环插入中进行账号重复判断,完成开户过程。
活期储蓄帐目管理数据结构
洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目活期储蓄帐目管理专业计算机科学与技术目录一、问题描述与基本要求 (2)1.1问题描述 (2)1.2基本要求 (2)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表的定义 (3)2.3模块划分 (4)三、模块结构图 (5)四、程序流程图 (5)五、调试分析 (9)5.1程序错误修改及完善的过程 (9)5.2最终程序所有功能运行结果 (10)六、心得体会 (12)七、源程序清单 (13)一、问题描述与基本要求1.1问题描述活期储蓄处理中,储户开户、销户、存入、支出活动频繁。
设计一个活期储蓄账目管理系统。
1.2基本要求系统设计要求:1、能比较迅速地实现插入,以实现储户开户的功能,储户开户时需输入的信息包括储户姓名,密码。
2、能比较迅速地通过储户的账户序号和密码找到储户的账户,并删除该账户,以实现销户的功能。
3、能比较迅速地通过储户的账户序号和密码找到储户的账户(密码不对时,可选择是否重新输入密码)实现账户登录的功能。
登录成功后,再通过修改链表结点数据域中的对应元素,以实现存款、取款、显示余额等功能,若取款时账户余额不足,输出提示信息“取款失败!你账户上的金额不足!”,并显示账户当前余额,并且提示重新输入合适的取款金额。
4、查找活期储蓄帐目管理系统当前存在的储户,当输出活期储蓄帐目管理系统没有账户时,输出提示信息“活期储蓄帐目管理系统没有账户”,当有账户时,输出所有账户的相关信息,包括储户姓名,帐号,密码,账户余额。
二、数据结构的设计2.1数据结构的选择课程设计题目的要,要较简单迅速地实现开户、销户、存款、取款、输出用户信息的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的容、输出结点数据域中的容等功能,即可满足课程设计题目的要求。
2.2单链表的定义先定义单链表结点的数据域,数据域包括储户姓名、账户序号、账户密码、账户金额等储户信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
数据结构课程设计活期储蓄帐目管理文章编辑报告
数据结构课程设计报告学院:信息科学与工程学院【题目】1.活期储蓄帐目管理活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:1) 能比较迅速地找到储户的帐户,以实现存款、取款记账;2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要5. 文章编辑**功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80 个字符,共N 行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4 行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;(4)尽可能使用图形界面第一章活期储蓄帐目管理Ⅰ.问题描述1.活期储蓄帐目管理活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:1) 能比较迅速地找到储户的帐户,以实现存款、取款记账;2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要.Ⅱ.需求分析:本演示程序用c-free编写,完成银行管理系统的生成,储户开户、销户、存入、支出。
①输入的形式和输入值的范围:开户时自定义输入用户账号、用户姓名、密码、及开户金额;用户登陆时输入正确的账号及密码,完成登陆后即可进行存款、取款、转账、修改密码、及销户。
②输出的形式:在所有三种操作中都显示操作是否正确以及相应操作后的内容。
其中输入错误后回到主页面,可继续选择操作③程序所能达到的功能:用户开户账户登陆(存款、取款、转账、修改密码)账号注销④测试数据:Ⅲ.概要设计:1).本程序主要包含9个函数1.账户开户函数:set_account();2.账户登陆函数:enter_account();3.销户函数:del_account()4.转账函数:transfer(int);5.存款函数:savemoney();6.取款函数: fetchmoney();7.修改密码函数:change_passwd()8.文件存储函数:save();9.文件打开函数load();2).各函数关系如下:Ⅳ.详细设计1).定义操作类模板class YH{public:YH();void set_account();//银行开户void del_account();void transfer(int); //转账void enter_account();void addmoney(int,float);void exitYH();// 退出系统void functionshow();// 功能界面void save();void load();protected:consumer *account[20];static int acnum;//账户数};2).定义结点类模板class consumer:public YH{public:friend class YH;consumer(int id,string Name,string PassWord,float m){ID=id;name=Name;money=m;passwd=PassWord;}consumer(){ID=0;name='0';money=0;passwd='0';}int get_id(){return ID;}void savemoney();// 存钱string get_passwd(){return passwd;}// 取得密码void display();void fetchmoney(); //取钱void change_passwd(); //修改密码void add_money(float);void dec_money(float);float get_money();private:int ID; //开户帐号string passwd; // 用户密码string name; // 用户姓名float money;};3).定义基本操作1.账户开户void YH::set_account(){int id;string nam;string passw;float m;cout<<endl<<"请输入开户号:";cin>>id;cout<<endl<<"请输入开户人姓名:";cin>>nam;cout<<endl<<"请输入开户密码:";cin>>passw;cout<<endl<<"请输入存入金额:";cin>>m;while(m<=0){cout<<"请输入正确的数字!"<<endl;cin>>m;}consumer * acc = new consumer(id,nam,passw,m);account[acnum] = acc;cout<<"开户成功!!"<<endl<<endl;acnum++;save();cin.get();return;}// set_account2).账户登陆void YH::enter_account(){int id;cout<<"请输入帐号:";cin>>id;int flag = 1;int i = 0;while((i<acnum)&&(flag)){if(id==account[i]->get_id()) flag = 0; else i++;}if(flag){cout<<"帐号不存在!"<<endl<<endl;return;}cout<<"请输入密码:";string passw;cin>>passw;if(passw!=account[i]->get_passwd()) return;account[i]->display();cin.get();cin.get();int n;do{system("cls");cout<<"请选择你要进行的操作:"<<endl<<"1)查看信息"<<endl<<"2)取款"<<endl<<"3)存款"<<endl<<"4)修改密码"<<endl<<"5)转账"<<endl<<"6)返回"<<endl;cin>>n;switch(n){case 1: account[i]->display();break;case 2: account[i]->fetchmoney();save();break;case 3:account[i]->savemoney();save();break;case 4:account[i]->change_passwd();save();break;case 5:transfer(i);save();break;case 6:return;}cin.get();cin.get();}while(1);}// enter_account3).修改密码void consumer::change_passwd(){string pwd,repwd;cout<<"请输入新密码:";cin>>pwd;cout<<"请再输入一次新密码:";cin>>repwd;if(pwd!=repwd)cout<<"你输入的两次密码不一样,请重新输入!"<<endl;passwd=pwd;cout<<"密码修改成功,请牢记!"<<endl;cin.get();}// change_passwd4).取款void consumer::fetchmoney(){float m;char ch;do{cout<<endl<<"你要取多少钱:"<<"$>"<<endl ;// cin>>m;while(m<=0){cout<<"请输入正确的数字!"<<endl;cout<<"$>";cin>>m;}if(money<m){cout<<"对不起,你的余额不足!"<<endl;}else{money=money-m;cout<<endl<<"操作成功,请收好钱!"<<endl;}cout<<"是否要继续该项操作:(Y/N) "<<endl;cout<<"$ >";cin>>ch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y') {cout<<"$ >";cin>>ch;}}while(ch=='y'||ch=='Y');}// fetchmoney4).存款void consumer::savemoney(){float c;char ch;do{cout<<endl<<"你要存多少钱:"<<"$>"<<endl ; cin>>c;while(c<=0){cout<<"请输入正确的数字!"<<endl;cout<<"$>";cin>>c;}money=money+c;cout<<"操作已成功!"<<endl;cout<<"是否要继续该项操作:(Y/N) "<<endl; cout<<"$ >";cin>>ch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y') {cout<<"$ >";cin>>ch;}}while(ch=='y'||ch=='Y');}// savemoney5).转账void YH::transfer(int x)cout<<"请输入帐号:";cin>>id;int flag = 1;int i = 0;while((i<acnum)&&(flag)){if(id==account[i]->get_id()) flag = 0; else i++;}if(flag){cout<<"帐号不存在!"<<endl<<endl;return ;}float b;cout<<endl<<"请输入你要转帐的金额:";cin>>b;while(b<=0){cout<<"请输入正确的数字!"<<endl;cout<<"$>";}if(account[x]->get_money()<b) cout<<"对不起,金额不够!!"<<endl;else{account[x]->dec_money(b);account[i]->add_money(b);} return;}//transferⅤ.测试分析测试数据及测试结果1.用户开户:输入:开户账号:1234567开户人姓名:liyan开户密码:123456存入金额:555输出:开户成功!2.用户登陆*输入:账号:1234567输入密码:123456(在账号和密码都正确的情况下输出:用户姓名:liyan账号:1234567余额:555否则返回主菜单重新选择。
活期储蓄帐目管理数据结构
活期储蓄帐目管理数据结构在当今的金融领域,活期储蓄作为一种常见的储蓄方式,为广大用户提供了灵活的资金存储和支取服务。
而要确保活期储蓄业务的高效、准确运行,离不开科学合理的帐目管理数据结构。
本文将详细探讨活期储蓄帐目管理中所涉及的数据结构及其重要性。
首先,让我们来了解一下活期储蓄帐目管理的基本需求。
用户在进行活期储蓄时,最核心的操作包括存款、取款、查询余额以及查看交易记录等。
为了满足这些需求,数据结构需要能够快速、准确地记录和处理这些信息。
在活期储蓄帐目管理中,一个关键的数据结构是账户信息表。
这个表通常包含了用户的基本信息,如账号、姓名、身份证号、联系方式等。
账号是唯一标识每个用户账户的关键字段,通过它可以快速准确地定位到特定用户的储蓄信息。
与账户信息表紧密相关的是交易记录表。
每一次存款、取款操作都会在交易记录表中生成一条记录。
这条记录通常包含交易时间、交易类型(存款或取款)、交易金额以及账户余额等重要信息。
通过交易记录表,可以清晰地追踪用户账户资金的流动情况。
为了快速查询账户余额,通常会采用一种类似于“余额快照”的数据结构。
也就是说,在每次交易发生后,及时更新账户的当前余额,并将其单独存储。
这样,当用户查询余额时,可以直接获取最新的余额信息,而无需通过复杂的计算或查询交易记录来得出。
在数据存储方面,为了提高数据的读写效率和安全性,常常会采用关系型数据库,如 MySQL 或 Oracle 等。
这些数据库具有强大的数据管理和事务处理能力,能够确保数据的完整性和一致性。
接下来,我们探讨一下如何利用这些数据结构实现活期储蓄的常见功能。
当用户进行存款操作时,系统首先会根据用户提供的账号,在账户信息表中查找对应的账户。
如果找到,就在交易记录表中添加一条存款记录,包括存款时间、存款金额等信息。
同时,更新余额快照中的余额数据。
取款操作的流程类似,但需要额外进行余额的检查。
如果取款金额超过了当前余额,系统会拒绝该操作,并提示用户余额不足。
(数据结构)活期储蓄账目管理 3
课程设计课程名称:活期储蓄账目管理学院:计算机科学与技术专业:信息安全姓名:学号: 13080603年级:2013级1班任课教师:叶洁2015年 7 月日任务说明一. 课程设计题目活期储蓄账目管理。
(说明:能实现储蓄账户的开户、销户、存钱、取钱等功能)二. 课程设计需要达到的目的掌握线性表的存储方式、基本的排序算法、二分查找等查找算法。
三. 课程设计的主要内容以及要求1 、能比较迅速地找到储户的帐户,以实现存款、取款记账;2、能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
3、账户信息存入文件中(刚进入系统把文件中的信息导入内存,系统运行结束把内存中的信息存入文件)4、基本数据有:储蓄账户的姓名、账号、地址、联系电话以及存款的现有余额等等。
四. 参考文献《数据结构》五、任务分工陈谦:完成对函数void findLink()、bool searchLink()、int f_binarySearch()、void choice()的编写和相关流程图的完成。
任柏臻:完成对函数void insertLink()、void meauLink()的函数的编写以及其流程图的完成。
庞晓燕:完成对函数void deleteLink()、void tradeLink()的编写以及其流程图的完成。
彭海惠:完成对函数void modificationLink()、bool verifyPassword()的编写以及其流程图的完成。
饶荣发:完成总的设计,以及统计任务。
设计说明活期储蓄账户主要实现的功能有:开户、销户、查找、交易以及查询的功能,此外还有记账的功能。
用C语言实现以上功能,由顺序表来实现账户的增加、删除、查找。
(说明:选择顺序表是因为要实现二分法查找)注:下列只列出函数名以及其返回类型,实际使用中还有形参开户功能由函数:void insertLink()来实现;销户功能由函数:void deleteLink()来实现;查找功能由函数:bool searchLink()来实现;交易功能由函数:void tradeLink来实现;查询功能由函数:void findLink()来实现;验证密码功能由函数:bool verifyPassword()来实现;显示菜单功能由函数:int meauLink()来实现;修改用户信息功能由函数:void modificationLink()来实现;显示所有用户信息功能由函数:void displayLink()来实现;根据设计要求还提供以下功能:void choice()函数选择各个功能板块来实现其功能。
数据结构课程设计之活期储蓄账目管理
##大学数据结构课程设计报告题目:活期储蓄账目管理院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 2011.6.22--2011.6.29指导教师:2010—2011年度第 2 学期一、需求分析1.问题描述:本程序是对活期储蓄账目管理中开户、销户、存款、取款四个项目的编写。
系统设计要求:1)能比较迅速的找到储户的账户,以实现存款、取款记账;2)能比较简单,迅速的实现插入和删除,以实现开户和销户的需要。
2.基本功能本程序是为了实现四种功能:储户的开户、销户、存款和取款操作。
本程序功能模块实现的具体功能如下表:surface() 程序的界面显示CreatList_L()创建一个空链表Createacount()用户的开户操作search_user()用户的查找操作Savemoney()用户的存款操作draw_money()用户的取款操作sich_abmelden()用户的销户操作3.输入输出本程序在输入是需要用户输入的有用户的ID、用户密码、用户存款数目和用户取款数目,输出的是用户账户中的金额。
所有的输入输出数据都是整形。
其中用户ID和用户密码都为6位数,用户存取款数都为100的整数倍。
二、概要设计1.设计思路:本程序是实现用户开户、销户、存款和取款四种功能。
要求能够快速的找到用户账户,简单迅速的实现开户、销户操作。
主要采用线性链表的结构,运用链表的插入,删除,查找,读取等算法实现程序要求的功能。
2.数据结构设计:本程序采用的是线性链表结构,因为系统设计对程序的要求为能够迅速的找到用户账户,实现存取款操作,能简单迅速的实现开户和销户操作。
线性链表符合系统设计的要求。
通过头结点依次查找用户账户,从而实现存取款操作。
开户既创建新的结点记录用户信息并插入到链表中,而销户既将用户账户所在结点释放。
抽象数据类型线性表的定义如下:ADT List{数据对象:D={a i| a i∈ElemSet,i=1,2,3……,n,n≥0}数据关系:R1={<a i-1,a i>| a i-1,a i∈D,i=1,2,3,……,n}基本操作:CreatList_L(&L,&M)操作结果:创建以L为头结点,M为尾结点的空链表。
数据结构课程设计题目
数据结构课程设计题目题目一:工资管理程序功能简介:完成员工工资信息管理,如员工工资信息的新建、存储、显示、修改和删除等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。
题目二:物品库存管理程序功能简介:实现物品库存管理,如进库、出库、浏览、修改等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。
题目三:个人财政支出管理程序功能简介:个人财政支出管理程序,如完成收入、支出、赢余的记录和管理等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。
题目四:电话簿管理程序功能简介:一个基本的电话簿管理程序,如插入、删除、显示、修改和查询联系人电话号码等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。
题目五:股票交易系统程序功能简介:股票交易系统的管理,如增加新股票、删除旧股票、挂起股票、住手交易、修改股票的名称、代码、股票买卖等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。
题目六:学生信息管理程序功能简介:完成学生基本的管理,如学生基本信息的新建、存储、显示、修改和删除等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。
题目七:学生成绩管理程序功能简介:完成学生成绩管理,如学生成绩信息的录入、显示、修改和浏览等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。
题目八:运动会分数统计任务:参加运动会有 n 个学校,学校编号为1……n。
比赛分成 m 个男子项目,和 w 个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或者前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或者前三名由学生自己设定。
(m<=20,n<=20)功能要求:可以输入各个项目的前三名或者前五名的成绩 ;能统计各学校总分,可以按学校编号或者名称、学校总分、男女团体总分排序输出 ;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或者前五名的学校。
活期储蓄帐目管理数据结构(2023版)
活期储蓄帐目管理数据结构活期储蓄帐目管理数据结构本文档描述了活期储蓄帐目管理系统的数据结构,旨在帮助开发人员了解系统的核心数据组织方式。
本文档详细描述了系统的各个数据模块及其属性,并提供了相应的示例。
⒈用户账户数据模块⑴属性:●用户ID:唯一标识用户的ID●用户姓名:用户的姓名●账户余额:账户中的储蓄金额⑵示例:●用户ID.1001用户姓名:张三账户余额.10000⒉交易记录数据模块⑴属性:●交易ID:唯一标识交易记录的ID●用户ID:发起交易的用户ID●交易时间:交易发生的时间●交易类型:交易的类型(存款、取款、转账等)●交易金额:交易的金额⑵示例:●交易ID.2001用户ID.1001交易时间.2022-01-01 10:00:00交易类型:存款交易金额.5000⒊费用记录数据模块⑴属性:●费用ID:唯一标识费用记录的ID●用户ID:产生费用的用户ID●费用时间:费用发生的时间●费用类型:费用的类型(手续费、利息等)●费用金额:费用的金额⑵示例:●费用ID.3001用户ID.1001费用时间.2022-02-01 10:00:00费用类型:利息费用金额.50附件:本文档不涉及附件。
法律名词及注释:●活期储蓄账户:一种无固定期限的存款账户,持有人可以随时存款、取款,并按照存款金额获得利息。
●数据结构:一种组织数据的方式,用于描述数据元素之间的关系和操作。
●属性:数据元素的特性或特征。
●用户ID:唯一标识用户的身份。
●交易ID:唯一标识一笔交易的身份。
●交易类型:描述交易的种类或性质,如存款、取款、转账等。
●费用ID:唯一标识一笔费用的身份。
●费用类型:描述费用的种类或性质,如手续费、利息等。
c语言活期储蓄账目管理课设答辩
最后,感谢我的指导老师张帆老师,谢谢您!
谢谢!!!!
西安建筑科技大学
数据结构课设答辩
活期储蓄账目管理
答辩人: 张磊 指导老师: 张帆
·系统简介
本课程设计为“活期储蓄账目管理” ,即是一 个对活期储蓄账户进行操作的程序,它的使用者 是银行的客户。为方便客户的账户管理,本系统 有如下功能:创建账户、查询账户、修改密码以 及存取款等操作。用户的每一步操作系统都要给 出相应的提示,操作简单方便。
系统结构图开始系统详细设计储户开户用户输入姓名输入正确用户输入密码用户输入身份证号电话地址存款金额将信息写入文件开始开户成功按姓名查找输入要查找用户姓名输入正确用户输入密码在打开的文件中查找该用户找到开始打印结束按帐号查找输入要查找用户账号输入正确用户输入密码账号是否小于等于count的值并大于0开始查找并打印结果结束显示用户资输入管理员密码输入正确打开文件并全部打印出来开始结束用户存款用户输入账号输入正确用户输入密码用户输入存款金额写方式打开文件将原文件覆盖实现余额的修改开始结束用户取款用户输入账号输入正确用户输入密码用户输入取款金额写方式打开文件将原文件覆盖实现余额的修改开始结束储户销户输入要注销用户的账号输入正确用户输入密码账号是否小于等于count的值并大于0开始查找并删除用户所有信息结束课设总结通过本次数据结构课程设计实现了活期储蓄账目管理使我更加深入的学习了数据结构这门课程尤其是对文件的操作在本次课程设计中用户数据和所有资料都是储存在文件中的通过对文件操作的学习我掌握了数据存储的方法
开户成功
按姓名查找
开始 输入要查找用户姓名
活期储蓄账目管理系统.doc
《数据结构》课程设计课程设计题目:活期存储账目管理系统姓名:院系: 计算机学院专业:计算机科学与技术年级: 11级学号:指导教师:2013 年 10月 12 日目录1 课程设计的目的 (1)2 需求分析 (1)3 课程设计报告内容 (1)3.1概要设计………………………………………………………1-23.2详细设计…………………………………………………… 2-103.3调试分析……………………………………………………10-123.4用户手册 (13)3.5测试结果 (13)3.6程序清单……………………………………………………13-244 小结 (24)5 参考文献……………………………………………………24-251 课程设计的目的设计活期储蓄帐目管理系统的要求:活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:①能比较迅速地找到储户的帐户,以实现存款、取款记账;②能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
设计这个活期账目管理系统可以方便银行人员进行管理和调试,从而也能提高我们的编程技能③熟练使用 C 语言编写程序,解决实际问题;了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2 需求分析(1)创建文件,用数组形式存储用户数据,开户时自定义用户账户、姓名、密码、开户金额。
(2)用户登录时,输入正确的用户姓名、用户密码,完成登录后即可进行存款、取款、查询、修改密码。
(也可以输入用户账号、用户密码)(3)实现输入用户的账户名和密码,将其全部信息删除,进行销户。
3 课程设计报告内容3.1概要设计在本课程设计的方案设计中,已经确定了用链表来作为数据的存储结构(也可以不用单链表),所以这里我没有采用单链表作为其存储结构,首先用结构体来定义其数据类型,然后将数据按照该数据结构存储,之后运用文件的相关知识将更改的数据写入文件中,这样就完成了本课程设计的方案设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目活期储蓄帐目管理专业计算机科学与技术目录一、问题描述与基本要求 (2)1.1问题描述 (2)1.2基本要求 (2)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表的定义 (3)2.3模块划分 (4)三、模块结构图 (5)四、程序流程图 (5)五、调试分析 (10)5.1程序错误修改及完善的过程 (10)5.2最终程序所有功能运行结果 (11)六、心得体会 (13)七、源程序清单 (14)一、问题描述与基本要求1.1问题描述活期储蓄处理中,储户开户、销户、存入、支出活动频繁。
设计一个活期储蓄账目管理系统。
1.2基本要求系统设计要求:1、能比较迅速地实现插入,以实现储户开户的功能,储户开户时需输入的信息包括储户姓名,密码。
2、能比较迅速地通过储户的账户序号和密码找到储户的账户,并删除该账户,以实现销户的功能。
3、能比较迅速地通过储户的账户序号和密码找到储户的账户(密码不对时,可选择是否重新输入密码)实现账户登录的功能。
登录成功后,再通过修改链表结点数据域中的对应元素,以实现存款、取款、显示余额等功能,若取款时账户余额不足,输出提示信息“取款失败!你账户上的金额不足!”,并显示账户当前余额,并且提示重新输入合适的取款金额。
4、查找活期储蓄帐目管理系统当前存在的储户,当输出活期储蓄帐目管理系统没有账户时,输出提示信息“活期储蓄帐目管理系统没有账户”,当有账户时,输出所有账户的相关信息,包括储户姓名,帐号,密码,账户余额。
二、数据结构的设计2.1数据结构的选择课程设计题目的要求是,要较简单迅速地实现开户、销户、存款、取款、输出用户信息的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。
2.2单链表的定义先定义单链表结点的数据域,数据域包括储户姓名、账户序号、账户密码、账户金额等储户信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
数据结构类型定义:typedef struct ListData //定义结点数据域{ char name[3]; //储户姓名int account; //账户账号char password[5]; //账户密码int money; //账户金额}ListData;typedef struct node //定义链表结点{ListData data; //结点数据域struct node *next; //结点链域}ListNode;2.3模块划分(1)建立空链表函数:void InitList (LinkList *L)(2)插入链表结点,实现开户功能函数:void InsertList (LinkList *L) (3)删除链表结点,实现销户功能函数:void DeleteList (LinkList *L) (4)储户存款、取款、显示余额函数:void Deposit (LinkList *L,LinkList *p) (5)链表查找,实现用户登录功能函数:void Search (LinkList *L)(6)输出链表函数:void PrintList (LinkList *L)(7)主菜单函数:void menu()(8)选择函数:void choice()(9)主函数:void main()三、模块结构图四、程序流程图1.InitList ()函数 2. InsertList ()函数3. DeleteList()函数4. PrintList()函数5. Deposit()函数6. Search()函数7. menu()函数8. choice()函数9.main()函数五、调试分析5.1程序错误修改及完善的过程1、当看到这个课程设计题目时,我觉得还算比较简单,因为我之前数据结构实验就做过单链表的插入、删除、查找、输出,而这次活期储蓄帐目管理系统要求的开户、销户、存款、取款、输出储户信息等功能,即可用单链表的相关功能函数来实现,于是我修改了之前写过的单链表的一些函数,以满足这次题目的要求,但在实验过程中仍出现了一些错误。
最终经过我的仔细检查和修改,最终编写出了符合要求的程序,还增加了一些功能。
2、我编写完程序后,觉得程序太过简单,又想到题目是活期储蓄帐目管理系统,那账户应该是有密码保证安全性的,于是我又在单链表结点的数据域中加入了一个新的元素password[5],并且还修改了后面相关函数的定义,确保在销户时,必须账户序号和密码相对应时才能销户成功,在存款、取款时也只有当账户序号和密码相对应时才能登录成功,选择存款、取款或显示余额等功能。
因此,函数定义中除了密码正确时的相关操作,还应有密码错误时的提示信息和相关操作。
于是,我在DeleteList函数和Search函数中加入了判断p->data.password 与mima是否相等的语句。
3、修改了相关函数定义后,调试程序,又出现了如下错误:error C2065: 'strcmp' : undeclared identifier,我才意识到我在DeleteList函数和Search函数的定义中调用了strcmp函数,头文件中应包括#include<string.h>,加上后运行结果就对了。
修改后,相关调试结果如下:4、再次修改完程序后,我希望程序还能更加完善,于是我开始思考出了密码与账户不对应,导致销户失败和登录失败外,还可能出现哪些其他的特殊情况。
于是我又想到了两个特殊情况,一是取款时,账户余额可能不够,则应该输出提示信息,告知用户当前账户余额,并要求用户输入合适的取款金额。
二是,可能系统没有建立账户,或者是建立了账户但是已经销户,就会导致当前系统没有账户,输出账户信息为空,这时就需要输出提示信息“活期储蓄帐目管理系统没有账户”,于是我根据自己的想法又对程序做了一些修改,最终程序完成所有功能运行。
5.2最终程序所有功能运行结果(1)主菜单(2)开户(3)销户(4)账号登录,存、取款及查询余额(5)显示出户信息六、心得体会这次课程设计,我选的题目是活期储蓄账目管理,对于这个实验开始感觉不知从哪儿开始,后来经过认真分析后,结合所学知识并查阅了许多相关的课外知识,我们开始了一步步解题编程。
在编程过程中,遇到问题的时候就与同学一起讨论解决,从其他人身上学到了很多,慢慢把不会不理解的地方给弄明白了。
在经过很多次调试以后,最终没有出现错误了,实验能够执行,将功能实现,最后完成程序编写。
虽然不是很完美,但发现不足之处并在以后的设计中注意这些细节,对于将来的实践还是很有帮助,我们可以不断发现我们的不完美,并想办法去改进这些不完美。
这次的综合性实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的讲解,老师在课上的延伸是课本上所没有的,这些知识对于我们对程序的编写有很大的作用。
同时,编程也要求我们有足够的耐心,细细推敲,越着急可能就越无法得到我们想要的结果,遇到不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,所以问是至关重要的,只要肯下功夫很多东西都是可以完成的。
总之,编程使我学到更多,更全面的知识。
通过这次课程设计学到了很多东西包括以前在课本上没有学到的知识,还使我懂得了理论和时间结合是很重要的。
让我进一步了解了程序设计方法,并且对这门课产生了浓厚的兴趣。
更重要的是培养了自己耐心、细心、用心的良好品质。
同时也非常感谢同学的帮助及老师的建议与指导。
七、源程序清单#include<stdio.h>#include<string.h>#include<stdlib.h>int total=1;//定义的全局变量,用于开户所需typedef struct ListData //定义结点数据域{char name[8]; //储户姓名int account; //账户账号char password[6]; //账户密码float money; //账户金额}ListData;typedef struct node //定义链表结点{ListData data; //结点数据域struct node *next; //结点链域}Link;void InitList(Link *L) //建立空链表{L=(Link *)malloc(sizeof(Link)); //建立头结点L->next=NULL; //建立空的单链表L}void InsertList(Link *L) //链表插入结点,实现开户功能,需输入储户姓名和密码{Link *s;s=(Link*)malloc(sizeof(Link)); //建立新结点sprintf("请输入你要开户的姓名:");scanf("%s",s->);s->data.account=1000+total++;printf("你开户的账号为:%d\n",s->data.account);printf("请输入你账号的密码:");scanf("%s",s->data.password);s->data.money=0.00;s->next=NULL;if(L->next==NULL) //头插法L->next=s;else{s->next=L->next; //将s结点插入表头L->next=s;}printf("开户成功!\n");}void DeleteList(Link *L) //删除链表结点,实现销户功能(需要输入账号和密码){Link *p=L,*q;char pass[6];int s;printf("请输入你要销户的账号:");scanf("%d",&s);printf("请输入该账号的密码:");scanf("%s",pass);while(p->next!=NULL){if(p->next->data.account==s)break;p=p->next;}if(p->next!=NULL){while(strcmp(p->next->data.password,pass)!=0){printf("密码错误!请重新输入:");scanf("%s",pass);}q=p->next;p->next=q->next; //修改指针,删除结点qfree(q);printf("账号销户成功!\n");}else printf("你所要销户的的账号不存在(或已经销户)。