数据结构课程设计实验报告

三、软件模块结构图 ....................................... 6 3.1大体模块关系图 ..................................... 6 3.2各模块具体分析 ..................................... 7 四、程序流程图 ........................................... 8 五、源程序 .............................................. 11 六、调试分析 ............................................ 16 6.1程序错误修改及完善的过程 .......................... 16 6.2最终程序所有功能运行结果 .......................... 20 6.3测试数据 ......................................... 22 七、用户使用手册 ........................................ 23 八、心得体会 ............................................ 23

数据结构课程设计

一、问题描述与基本要求

1.1问题描述

设计一个活期储蓄帐目管理系统

活期储蓄处理中,储户开户、销户、存入、支出活动频繁。

1.2基本要求

系统设计要求:

1、能比较迅速地实现插入,以实现储户开户的功能,储户开户时需输入的信息包括储户姓名,密码。

2、能比较迅速地通过储户的账户序号和密码找到储户的账户,并删除该账户,以实现销户的功能。

3、能比较迅速地通过储户的账户序号和密码找到储户的账户(密码不对时,可选择是否重新输入密码)实现账户登录的功能。登录成功后,再通过修改链表结点数据域中的对应元素,以实现存款、取款、显示余额等功能,若取款时账户余额不足,输出提示信息“取款失败!你账户上的金额不足!”,并显示账户当前余额,并且提示重新输入合适的取款金额。

4、查找活期储蓄帐目管理系统当前存在的储户,当输出活期储蓄帐目管理系统没有账户时,输出提示信息“活期储蓄帐目管理系统没有账户”,当有账户时,

输出所有账户的相关信息,包括储户姓名,帐号,密码,账户余额。

二、数据结构的设计

2.1数据结构的选择

课程设计题目的要求是,要较简单迅速地实现开户、销户、存款、取款、输出用户信息的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。

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;

typedef ListNode *LinkList; //指向链表结点的指针

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) //输出链表,实现储户姓名,账号序号,密码,现有余额等相关信息。(当输出活期储蓄帐目管理系统没有账户时,输出提示信息,当有账户时,输出所有账户的相关信息。) 以下为重要函数的定义:

2

数据结构课程设计 void InitList(LinkList &L) //建立空链表 {

L=(ListNode*)malloc (sizeof(ListNode)); L->next=NULL; }

void InsertList(LinkList &L) //链表插入结点,实现开户功能,需输入储户姓名和密码 {

LinkList p;

p=(ListNode*)malloc(sizeof(ListNode));

牰湩晴尨请输入你要开户的姓名(不超过4个字符):); scanf(%s,p->data.name); number=number+1; p->data.account=number;

牰湩晴尨你开户的账号为:%d\\n,p->data.account); 牰湩晴尨请输入你账号的密码(不超过6个字符):); scanf(%s,p->data.password); p->data.money=0; p->next=NULL;

if(L->next==NULL) //前插法 L->next=p; else {

p->next=L->next; L->next=p; }

牰湩晴尨开户成功!\\n); }

void DeleteList(LinkList &L) //删除链表结点,实现销户功能(需要输入账号和密码) {

LinkList p=L,q; char mima[5]; int s;

牰湩晴尨请输入你要销户的账号:); scanf(%d,&s);

牰湩晴尨请输入该账号的密码:); scanf(%s,mima);

while(p->next!=NULL) {

if(p->next->data.account==s) break; p=p->next; }

if(p->next!=NULL)

3

数据结构课程设计 {

while(strcmp(p->next->data.password,mima)!=0) {

牰湩晴尨密码错误!请重新输入:); scanf(%s,mima); }

q=p->next; p->next=q->next; free(q);

牰湩晴尨销户成功。\\n); }

汥敳瀠楲瑮?你所要销户的的账号不存在。\\n); }

void Deposit(LinkList &L,LinkList p) //储户存款、取款、显示余额 { int m; int n; while(1) {

if(p!=NULL) { printf(\\

请输入数字选择功能:1、存款 2、取款 3、查询余额 4、退出账号 :); scanf(%d,&m); if(m==1) {

牰湩晴尨请输入你的存款金额:); scanf(%d,&n);

p->data.money=p->data.money+n; 牰湩晴尨存款成功!\\n); }

else if(m==2) {

牰湩晴尨请输入你的取款金额:); gg:

scanf(%d,&n);

if((p->data.money-n)>=0) {

p->data.money=p->data.money-n; 牰湩晴尨取款成功!\\n); } else {

牰湩晴尨取款失败!你账户上的金额不足!\\n); 牰湩晴尨你的账户余额为:%d\\n,p->data.money);

4

数据结构课程设计 牰湩晴尨请输入合适的取款金额:); goto gg; } }

else if(m==3) {

牰湩晴尨你账户的余额为:%d\\n,p->data.money); }

else if(m==4) {

牰湩晴尨账号退出成功。\\n); return; } } } }

void Search(LinkList L) //链表查找,实现用户登录功能(需要输入账号和密码) {

LinkList p=L->next; int i; char mima[5];

牰湩晴尨请输入你要登录的账号:); scanf(%d,&i);

tt: 牰湩晴尨请输入你的密码:); scanf(%s,mima); while(p!=NULL) {

if(p->data.account==i) break;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4