大作业设计报告.docx
《大作业设计报告.docx》由会员分享,可在线阅读,更多相关《大作业设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
大作业设计报告
程序设计基础
(一)大作业设计报告
班级 :
软件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);
}
调试效果图