大作业设计报告.docx

上传人:b****7 文档编号:23828706 上传时间:2023-05-21 格式:DOCX 页数:17 大小:85.06KB
下载 相关 举报
大作业设计报告.docx_第1页
第1页 / 共17页
大作业设计报告.docx_第2页
第2页 / 共17页
大作业设计报告.docx_第3页
第3页 / 共17页
大作业设计报告.docx_第4页
第4页 / 共17页
大作业设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

大作业设计报告.docx

《大作业设计报告.docx》由会员分享,可在线阅读,更多相关《大作业设计报告.docx(17页珍藏版)》请在冰豆网上搜索。

大作业设计报告.docx

大作业设计报告

程序设计基础

(一)大作业设计报告

 班级 :

软件1001 学号:

202013138022姓名:

吴胜

完成时间:

2011年1月7日

一、题目要求

设计一个程序,实现ATM机自动管理功能。

基本功能:

1)提供菜单式的用户界面

2)输入账号和密码

3)输入数字1显示基本信息

4)输入数字2进行修改密码功能

5)输入数字3显示余额信息

6)输入数字4进行存款功能

7)输入数字5进行取款功能

8)输入数字0退出系统

二、设计方案

基本思路:

采用单向链表为基本存储结构。

每个客户的基本信息结构保存,再将所有客户信息构成一个文本文件;全部客户信息用一个链表保存,便于统一操作。

在这种数据结构的基础上,进行进一步的功能实现。

在完成相应功能后在把链表中的数据写进文本文件中。

框架结构:

(1):

在voidentermenu()函数中进行显示登录界面的处理,在voidmenu()函数中进行显示功能菜单的处理;

(2):

将其他功能的具体实现分别放到function1(),function2(),function3(),function4(),function5()中,

(3):

利用structperson*creatlist()函数和voidcreat(structperson*head)函数实现链表和文件的建立,

(4):

利用voidpassed(structperson*p)和structperson*search(structperson*p,longs,char[])函数对用户输入密码进行检验,

实现模块化设计和操作。

三、具体功能及实现

包括9大基本功能:

(1)从文件中读入数据初始化

将初始化信息保存到文件中,利用文件输入这些信息,对程序中的客户各个信息进行初始化。

调用structperson*creatlist()函数实现信息的读入。

用一条单向链表将所有的客户信息存储起来

(2)显示登录界面

这一功能在voidentermenu()函数中实现,包括输入密码和账号,输入密码和账号后进行下个功能操作。

(3)对密码进行检验

这一功能在voidpassed(structperson*p)和structperson*search(structperson*p,longs,char[])函数对用户输入密码进行检验,实现用户是否有权进入本ATM机,包括检验账号和密码。

structperson*search(structperson*p,longs,char[])函数用来找到该用户的位置,voidpassed(structperson*p)用来对输入次数进行限制。

(4)显示菜单式的用户界面

这一功能在voidmenu()函数中实现。

显示五大功能,先是基本信息、进行密码修改、余额显示、存款功能、取款功能、以及退出提示。

(5)输入数字1显示基本信息

这一功能在voidfunction1(structperson*p)函数中实现。

显示客户姓名、账号、余额。

(6)输入数字2进行修改密码功能

这一功能在voidfunction2(structperson*p)函数中实现。

包括输入当前密码和输入两次新的密码,若修改成功会给出相应的提示,并且改变节点的值,若没有成功,会提示再次输入新的密码。

(7)输入数字3显示余额信息。

这一功能在voidfunction3(structperson*p)函数中实现。

显示当前该客户的余额

(8)输入数字4进行存款功能。

这一功能在voidfunction4(structperson*p)函数中实现。

提示用户输入存款金额,然后改变当前节点的值,并提示存款成功

(9)输入数字5进行存款功能。

这一功能在voidfunction5(structperson*p)函数中实现。

提示用户输入取款金额,先判断要取金额是否超出余额,若超出则提示不能取款,若不超出则改变当前节点的值,并提示存款成功

(10)输入数字0退出系统

(11)保存当前操作的信息。

利用voidcreat(structperson*head)函数实现文件的建立,把当前链表中的信息重新存入文件中,相当于更新文件信息.

四、特点小结

◆采用模块化的设计方案,源程序分文件编辑,使程序结构清晰,增强程序可读性

◆采用单向链表的存储结构,提高了程序对大量查找和排序的效率,将大量信息有规律地联系在一起,便于处理。

同时也使函数调用时信息的传递变得简单。

◆注重细节的程序设计思路,几乎对每一步操作都进行了判错处理,保证了程序能正常地运行

◆详尽的提示信息,友好的界面设计,提高了程序的实用性和观赏性

程序

#include

#include

#include

structperson

{

longnum;

charname[10];

charpass[10];

floatye;

structperson*next;

};

intm,flag=1;

staticlongs;

structperson*creatlist();

voidpassed(structperson*p);//密码检验函数

voidentermenu();//显示登录界面

voidmenu();//综合作业功能菜单函数

voidfunction1(structperson*p);//显示基本信息

voidfunction2(structperson*p);//修改密码

voidfunction3(structperson*p);//查询余额

voidfunction4(structperson*p);//存款

voidfunction5(structperson*p);//取款

structperson*search(structperson*p,longs,char[]);

voidcreat(structperson*head);

voidmain()

{

structperson*head=NULL;

head=creatlist();

entermenu();

passed(head);

menu();

scanf("%d",&m);

while(flag)

{

menu();

scanf("%d",&m);

switch(m)

{

case1:

function1(head);break;

case2:

function2(head);break;

case3:

function3(head);break;

case4:

function4(head);break;

case5:

function5(head);break;

case0:

flag=0;break;

default:

flag=0;

}

}

creat(head);

printf("\n\n\n\001\002谢谢使用!

\001\002\n");

printf("\n\n\n\n");

}

structperson*creatlist()

{

structperson*p,*head;

FILE*fp;

if((fp=fopen("e:

\\information.txt","r"))==NULL)

{

printf("cannotopenthefile!

\n");

exit(0);

}

head=(structperson*)malloc(sizeof(structperson));

head->next=NULL;

while(!

feof(fp))

{

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

fscanf(fp,"%ld",&p->num);

fscanf(fp,"%s",p->name);

fscanf(fp,"%s",p->pass);

fscanf(fp,"%f",&p->ye);

p->next=head->next;

head->next=p;

}

fclose(fp);

return(head);

}

voidentermenu()

{

system("cls");//清屏

printf("\n欢迎来到本ATM机\n");

printf("\n1.账号:

\n");

printf("\n2.密码:

\n");

printf("\n温馨提示:

请小心自己的密码,以防被盗!

\n");

printf("\n请输入账号和密码:

\n");

}

voidmenu()//综合作业功能菜单

{

system("cls");//清屏

printf("\n用户信息管理系统\n");

printf("\n菜单\n\n");

printf("\n1.显示基本信息\n");

printf("\n2.修改密码\n");

printf("\n3.查询余额\n");

printf("\n4.存款\n");

printf("\n5.取款\n");

printf("\n0.退出\n\n");

printf("\n请选择:

(0~~~~5)\n");

}

voidpassed(structperson*head)//密码检验函数

{

structperson*p;

charuser[10];

inti=0,t=0;

while(flag)

{

p=head;

printf("inputcountnumber:

");

scanf("%ld",&s);

printf("inputpassword:

");

scanf("%s",user);

p=search(p,s,user);

if(p!

=NULL)

{

printf("\n欢迎使用本系统!

\n");

printf("\n祝使用愉快!

\n");

flag=0;

}

else

{

if(t<3)

printf("\n密码错误,请重新输入!

\n");

else

{

printf("\n对不起,你无权使用本系统!

退出系统!

\n");

flag=0;

}

}

t++;

}

flag=1;

getchar();

getchar();

}

voidfunction1(structperson*head)//显示基本信息函数

{

structperson*p;

p=head->next;

system("cls");//清屏

while(flag)

{

if(p->num==s)

{

printf("\n\t姓名账号余额");

printf("\n\t%s%10ld%10.2f\n",p->name,p->num,p->pass,p->ye);

flag=0;

}

p=p->next;

}

flag=1;

getchar();

getchar();

}

voidfunction2(structperson*head)//修改密码函数

{

charuser[10],newpass1[10],newpass2[10];

structperson*p;

system("cls");//清屏

p=head->next;

printf("输入当前密码:

");

scanf("%s",user);

do

{

printf("请输入新的密码:

");

scanf("%s",newpass1);

printf("请再次输入新的密码:

");

scanf("%s",newpass2);

if(strcmp(newpass1,newpass2)==0)

{

strcpy(p->pass,newpass1);

printf("密码修改成功!

\n");

strcpy(p->pass,newpass1);

flag=0;

}

else

{

printf("您两次输入的密码不同!

");

printf("请再次输入新的密码:

");

}

}while(flag);

flag=1;

getchar();

getchar();

}

voidfunction3(structperson*head)//查询余额函数

{

structperson*p;

system("cls");//清屏

p=head->next;

while(flag)

{

if(p->num==s)

{

printf("你目前的余额为%.2f\n",p->ye);

flag=0;

}

elsep=p->next;

}

flag=1;

getchar();

getchar();

}

voidfunction4(structperson*head)//存款函数

{

FILE*fp;

floatn;

structperson*p;

system("cls");//清屏

p=head->next;

while(flag)

{

if(p->num==s)

{

printf("你目前的余额为%.2f\n",p->ye);

printf("请输入你要存款的金额:

");

scanf("%f",&n);

p->ye=p->ye+n;

printf("存款成功!

");

flag=0;

//FILE*fp;

if((fp=fopen("e:

\\information.txt","w"))==NULL)

{

printf("cannotopenthefile!

\n");

exit(0);

}

fprintf(fp,"%f",p->ye);

fclose(fp);

}

elsep=p->next;

}

flag=1;

getchar();

getchar();

}

voidfunction5(structperson*head)//存款函数

{

floatn;

structperson*p;

system("cls");//清屏

p=head->next;

while(flag)

{

if(p->num==s)

{

printf("你目前的余额为%.2f\n",p->ye);

printf("请输入你要取款的金额:

");

scanf("%f",&n);

if(n>p->ye)printf("对不起!

您的余额不足!

\n");

else

{p->ye=p->ye-n;

printf("存款成功!

");

flag=0;

}

}

elsep=p->next;

}

flag=1;

getchar();

getchar();

}

structperson*search(structperson*p,longs,charuser[])

{

while(p)

{

if(strcmp(p->pass,user)==0&&p->num==s)

returnp;

elsep=p->next;

}

p=NULL;

returnp;

}

voidcreat(structperson*head)

{

structperson*p;

FILE*fp;

if((fp=fopen("e:

\\information2.txt","w"))==NULL)

{

printf("cannotopenthefile!

\n");

exit(0);

}

p=head->next->next;

while(p)

{

fprintf(fp,"\n");

fprintf(fp,"%ld",p->num);

fprintf(fp,"%s",p->name);

fprintf(fp,"%s",p->pass);

fprintf(fp,"%.2f",p->ye);

fprintf(fp,"\n");

p=p->next;

}

fclose(fp);

}

 

调试效果图

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1