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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
(一)需求分析
(二)概要设计
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() //菜单选择函数
(四)调试与操作结果(一)进入操作界面
(二)储蓄开户
(三)储户登陆,存款,查询,取款,查询
(四)显示储户信息
(五)课程设计总结与体会
这次课程设计,我与小组成员选的题目是活期储蓄账目管理,对于这个实验开始感觉不知从哪儿开始,后来经过认真分析后,结合所学知
识并与小组成员查阅了许多相关的课外知识,我们开始了一步步解题编
程。

在编程过程中,遇到问题的时候请教我们班擅长的同学,慢慢把不会不理解的地方给弄明白了,在经过很多次调试以后,最终没有出现错
误了,实验能够执行,将功能实现,最后终于将程序完成。

这次的综合性实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的讲解,老师在课上的延伸是课本上所没有的,这些
知识对于我们对程序的编写有很大的作用,同时,编程也要求我们有足
够的耐心,细细推敲。

越着急可能就越无法得到我们想要的结果,遇到
不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,
所以问是至关重要的,只要肯下功夫很多东西都是可以完成的。

总之,
编程使我学到更多,更全面的知识。

(六)致谢
感谢一起编程的组员,感谢帮助我们的同学们和老师。

(七)参考文献
《数据机构(C语言版)》……严蔚敏,吴伟民编著……清华大学出版社
《C语言程序设计教程》……刘玲主编……清华大学出版社
(八)附源代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define file "lnode.txt"
int total=0; //定义的全局变量,用于开户所需
typedef struct ElemType //定义结构体
{
char name[11];
int account;
char password[7];
float money;
}ElemType;
typedef struct lnode //定义链表
{
ElemType data;
struct lnode *next;
}LINK;
void InitList(LINK *&L) //建立空链表
{
L=(LINK *)malloc (sizeof(LINK));
L->next=NULL;
}
void InsertList(LINK *&L) //链表插入实现开户功能
{
int x;
LINK *s;
s=(LINK*)malloc(sizeof(LINK));
printf("请输入你要开户的姓名(10字符以内):");
scanf("%s",s->);
x=rand()%10; //随机数
total+=x; //total随机增大一个数值(10以内)x
s->data.account=10000000+total;
printf("\n你开户的账号为:%d\n",s->data.account);
printf("请输入你账号的密码(6位数以内):");
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;
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;
free(q);
printf("账号销户成功。

\n");
}
else printf("你所要销户的的账号不存在(或者已经销户)。

\n");
}
void PrintList(LINK*L) //打印链表,实现用户信息输出
{
LINK *p=L->next;
while (p!=NULL)
{
printf("%s\t",p->);
printf("%d\t%s\t%.2f\n",p->data.account,p->data.password,p->data.money);
p=p->next;
}
}
void Deposit(LINK *&L,LINK *p) //用户存款、取款
{
int cq;
float mn;
while(1)
{
if(p!=NULL)
{
printf("请选择存款(1)、取款(2)、查询余额(3)、退出账号(4)。

\n(请输入括号内的数字,输入其它字符默认为取款):");
scanf("%d",&cq);
if(cq==1)
{
printf("请输入你的存款金额:");
scanf("%f",&mn);
p->data.money=p->data.money+mn;
printf("存款成功!\n");
}
else if(cq==3)
{
printf("你账户的余额为:%.2f\n",p->data.money);
}
else if(cq==4)
{
printf("账号退出成功。

\n");
return;
}
else
{
printf("请输入你的取款金额:");
FH:
scanf("%f",&mn);
if((p->data.money-mn)>=0)
{
p->data.money=p->data.money-mn;
printf("取款成功!\n");
}
else
{
printf("取款失败!\n");
printf("你账户上的金额不足!\n你的账户余额为:%.f\n",p->data.money);
printf("请输入合适的取款金额:");
goto FH;
}
}
}
}
}
void Search(LINK *L) //链表查找,实现用户登陆功能
{
LINK *p=L->next;
int acc;
char pass[6];
printf("请输入你要登录的账号:");
scanf("%d",&acc);
printf("请输入你的密码:");
scanf("%s",pass);
while(p!=NULL)
{
if(p->data.account==acc)
break;
p=p->next;
}
if(p==NULL)
printf("不存在该账户\n");
else
{
if(strcmp(p->data.password,pass)==0)
printf("账号登录成功。

\n");
else
{
while(strcmp(p->data.password,pass)!=0)
{
char pa;
printf("密码错误\n");
printf("是否重新输入(是,就输入任意键)、(否,从键盘上输入N or n):");
scanf("\n%c",&pa);
if(pa=='n'||pa=='N')
{system ("cls");return;}
printf("\n请重新输入你的密码:");
scanf("%s",pass);
}
}
Deposit(L,p);
}
}
void save(LINK *L) //保存链表,实现用户信息保存到文件
{
FILE *fp;
if((fp=fopen(file,"rb"))==NULL)
{
printf("cannot open file.\n");
exit(1);
}
LINK *p=L->next;
if (p!=NULL)
{
if(fwrite(p,sizeof(struct lnode),1,fp)!=1)
printf("file write error\n");
p=p->next;
}
fclose(fp);
}
void Print(LINK *&L) //打开文件,得到链表
{
FILE *fp;
LINK *p,*s;
if((fp=fopen(file,"rb"))==NULL)
{
printf("cannot open file.\n");
exit(1);
}
s=(LINK*)malloc(sizeof(LINK));s->next=NULL;
while(fread(s,sizeof(struct lnode),1,fp) )
{
total++; //用于记录账号的,以致账号不重复
if(L->next==NULL)
{
L->next=s;
p=s;
p->next=s->next;
}
else
{
p->next=s;
p=s;
p->next=s->next;
}
s=(LINK*)malloc(sizeof(LINK));
s->next=NULL;
}
fclose(fp);
}
void menu() //主菜单函数
{
printf("************欢迎进入活期储蓄账目管理***********\n");
printf(" 1.储户开户。

\n");
printf(" 2.储户销户。

\n");
printf(" 3.储户的账号存款、取款。

\n");
printf(" 4.查看所有储蓄账户信息。

\n");
printf(" 5.退出账目管理。

\n");
printf("***********************************************\n");
}
void choice() //菜单选择函数
{
LINK *L;
InitList(L);
while(1)
{
menu();
char x,ch;
printf("请选择你需要的功能:");
scanf("%c",&x);
getchar();
if(x>'5')
printf("输入有误,请重新选择操作:\n");
if(x=='5')
break;
switch(x)
{
case '1':InsertList(L);ch=getchar();break;
case '2':DeleteList(L);ch=getchar();break;
case '3':Search(L);ch=getchar();break;
case '4':PrintList(L);ch=getchar();break;
default:break;
}
getch(); //暂停功能(读取任意键继续)(conio.h)
system ("cls");
}
save(L);
}
void main() {
choice(); }。

相关文档
最新文档