聊城大学C语言课程实训任务书wangh
发布时间:2013-07-22 09:19:35
发布时间:2013-07-22 09:19:35
C语言实训任务书
一、实训目标
通过项目实战,掌握C语言掌握C语言的精髓:指针、函数、结构体的使用、文件读写。
课程要求从两个方面的能力目标实现,素养目标要求学员在通过学习具备相对应的学习技能、素养要求;技术目标要求学员必须掌握课程产品所定义的知识与技能。
(1)素养目标
阅读帮助文档的能力;
问题解决能力、总结归纳能力;
(2)技术目标
使用C语言编程的能力;
二、实训内容(见附录)
三、实训进度安排
按教学计划规定,该设计总学时数为3周,其进度及时间大致分配如下:
四、考核评定
聊城大学
《C语言实训》
题目 ATM机银行仿真模拟系统
指导教师: 王春哲
姓名: 王秀明
学号: 2012201533
班级: 2012级3班
专业: 电子信息科学与技术
地点: 聊城大学
时间: 7月15 日 至 7月22日
一、项目名称 创建ATM模拟管理系统
二、功能要求摘要二十世纪末,随着金融服务的迅速发展,银行提款机已经发展成了各大银行金融服务战略中的重要一环,同时,银行提款机系统也经历了持续的更新换代为广大用户提供了更加便捷和人性化的服务。模拟ATM系统就是对提款机操作系统在个人PC上及主流操作平台上的编程实现,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发制作两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用界面友好等特点。本系统采用VS2005,微软SQLSERVER2005,实现了用户身份的认证、取款转帐、交易明细的查询等功能。分析并解决实现中遇到的若干问题,例如数据库资料如何实现更新,文本框的文字输出需要用到什么技术,如何实现中英文两种界面,用户服务功能如何实现等等。
三、需求分析
四、设计思想
,在头文件下面建立一个ATM.h和function.h的头文件。头文件的ATM.h的文件是对执行文件的信息进行声明。Char zhanghao[40];//,char xingming [40];//用户姓名,char phone[20];//电话号码,char mima [20];//密码,char ximima[20];//新密码,double cm://存入金额,,static double;//利率。function.h文件是对函数就行声明/int kehu();//客户,int guanli();//管理端,int change();//修改密码,int open();//开户,int query();//查询,int lilv();//利率计算,int jiexi();//计息
五、具体实现
六、附录typedef struct
{
char account[40]; //账号
char name[20]; //姓名
char phone[20]; //电话号码
char password[40]; //密码
char npassword[40]; //新密码
double cm; //存入的金额
double qm; //取走的金额
double sm; //剩余的金额
double zm; //转账的金额
static double lilv; //利率
}ATM; #include"stdafx.h"
#include
#include
#include
#include"atm.h"
extern ATM*atm;
extern int current;
extern int total;
int kehu()
{
char account[40];
char password[40];
printf("请输入账户名: \n");
scanf("%s",account);
int i;
for (i=0;i
{
if(strcmp(atm[i].account,account)==0)
{
break;
}
}
if(i>=current)
{
printf("该账号不存在! \n");
return 1;
}
else
{
printf("请输入密码 \n");
scanf("%s",password);
if(strcmp(atm[i].password,password)!=0)
{
printf("密码错误! \n");
return 1;
}
}
char choice;
while (1)
{
printf("\n");
printf("\t 用户端功能主菜单 \n");
printf("\t **************** \n");
printf("\t 1.取款 \n");
printf("\t 2.存款 \n");
printf("\t 3.查询账户 \n");
printf("\t 4.转账 \n");
printf("\t 5.修改密码 \n");
printf("\t 0.返回上一级 \n");
printf("\t **************** \n");
printf("\n");
printf("\t 请选择: \n");
choice=getch();
switch(choice)
{
case'1':
printf("温馨提示:当前金额为%lf\n",atm[i].sm);
printf("取款值必须为100的倍数,且最多不得超过2000! \n");
printf("请输入取款金额:");
scanf("%lf",&atm[i].qm);
atm[i].sm=atm[i].sm-atm[i].qm;
printf("当前金额:%lf保存成功\n",atm[i].sm);
break;
case '2':
printf("请输入要存金额:");
scanf("%lf", &atm[i].cm);
atm[i].sm=atm[i].sm+atm[i].cm;
printf("当前余额为:%lf保存成功\n",atm[i].sm);
break;
case '3':
printf("账户信息如下 \n");
printf("账户名:%s\n", atm[i].account);
printf("姓名:%s\n", atm[i].name);
printf("电话号码:%s\n", atm[i].phone);
printf("余额:%lf\n",atm[i].sm);
break;
case'4':
printf("请输入转账金额:");
scanf("%lf", &atm[i].zm);
printf("请输入转账对象账号:");
scanf("%s", account);
int j;
for (j = 0; j < current; j++)
{
if (strcmp(atm[j].account, account) == 0)
{
break;
}
}
if (j >= current)
{
printf("转账对象账号不存在!\n");
}
else
{
atm[i].sm = atm[i].sm-atm[i].zm;
atm[j].sm = atm[j].sm+atm[i].zm;
printf("该用户当前余额为:%lf\n", atm[i].sm);
}
break;
case'5':
printf("请输入原密码:");
scanf("%s",password);
printf("请输入新密码:");
scanf("%s", atm[i].npassword);
printf("保存成功!\n");
break;
case'0':
return 0;
default:
printf("非法选择,请重新选择\n");
}
}
}extern ATM *atm;
extern int current;
extern int total;
double ATM::lilv=0.045;
int guanli()
{
char adminPass[40]; //管理员密码
printf("\t 请输入密码: \n");
scanf("%s",adminPass);
if(strcmp("00",adminPass)!=0)
{
printf("管理员密码错误!\n");
return 1;
}
char choice;
while(1)
{
printf("\t 程序功能\n");
printf("\t 1:开户 \n");
printf("\t 2:查询账户信息\n");
printf("\t 3:修改账户密码\n");
printf("\t 4:设置利率\n");
printf("\t 5:结息\n");
printf("\t 6:删除账户信息\n");
printf("\t 0:返回上一级\n");
printf("\n");
printf("请选择:\n");
choice=getch();
char password[40];
char account[40];
int i;
switch(choice)
{
case '0':
return 0;
case '1':
while(total<=0)
{
printf ("请输入要开户的个数:");
scanf ("%d",&total);
}
if(atm==NULL)
{
atm=(ATM*)malloc(total * sizeof(ATM));
}
if(atm==NULL)
{
printf("内存空间不够!\n");
return 1;
}
if (total <= 0)
{
atm = (ATM*) malloc(2 * sizeof(ATM));
if (atm != NULL)
{
total = 2;
}
else
{
printf("内存空间不够!\n");
return 1;
}
}
if (current >= total)
{
ATM *t = NULL;
t = (ATM*) malloc((total + 2) * sizeof(ATM));
if (t == NULL)
{
printf("内存空间不够!\n");
return 1;
}
memcpy(t, atm, total * sizeof(ATM));
free(atm);
atm = t;
total = total + 2;
}
printf("请输入账号:");
scanf("%s", atm[current].account);
for(i=0;i
{
if (strcmp(atm[i].account, atm[current].account) == 0)
{
break;
}
}
if( i < current )
{
printf("该账号已经存在!\n");
}
else
{
printf("请输入姓名:");
scanf("%s", atm[current].name);
printf("请输入电话号码:");
scanf("%s", atm[current].phone);
printf("请输入存入的金额:");
scanf("%lf", &atm[current].cm);
printf("请输入密码:");
scanf("%s", atm[current].password);
printf("请重新输入密码:");
scanf("%s", atm[current].npassword);
atm[current].qm = 0;
atm[current].sm = atm[current].cm - atm[current].qm;
if (strcmp(atm[current].password, atm[current].password) != 0)
{
printf("两次密码不一致:\n");
}
else
{
printf("操作成功,信息如下:\n");
printf("\t 账号:%s\n", atm[current].account);
printf("\t 姓名:%s\n", atm[current].name);
printf("\t 电话号码:%s\n", atm[current].phone);
printf("\t余额:%lf\n", atm[current].sm);
printf("\t 保存成功! \n");
current++;
}
}
break;
case'2':
printf("请输入要查询的账户名:");
scanf("%s", account);
for (i = 0; i < current; i++)
{
if (strcmp(atm[i].account, account) == 0)
{
break;
}
}
if( i >= current )
{
printf("该账户不存在!\n\n");
}
else
{
printf("第%d个账户信息 \n", i + 1);
printf("账户信息如下 \n");
printf("账户名:%s\n", atm[i].account);
printf("姓名:%s\n", atm[i].name);
printf("电话号码:%s\n", atm[i].phone);
printf("余额:%lf\n",atm[i].sm);
}
break;
case '3':
printf("请输入要修改密码的账户名:");
scanf("%s", account);
for ( i = 0; i < current; i++)
{
if (strcmp(atm[i].account, account) == 0)
{
break;
}
}
if( i >= current )
{
printf("该账户不存在!\n\n");
}
else
{
printf("请输入原始密码:");
scanf("%s", password);
if (strcmp(atm[i].password, password) == 0)
{
printf("请输入新密码:");
scanf("%d", atm[current].npassword);
printf("保存成功!\n");
}
else
{
printf("密码错误,请重新输入!\n\n");
return 1;
}
}
break;
case '4':
printf("当前利率是:%lf\n",ATM::lilv);
printf("请输入新的利率:");
scanf("%lf",&ATM::lilv);
printf("保存成功!\n");
break;
case'5':
printf("请输入要结息的账户名:");
scanf("%s", account);
for ( i = 0; i < current; i++)
{
if (strcmp(atm[i].account, account) == 0)
{
break;
}
}
if( i >= current )
{
printf("该账户不存在!\n\n");
}
else
{
printf("该用户的结息金额为:%lf\n", atm[i].sm+atm[i].sm*ATM::lilv);
atm[i].sm = atm[i].sm+atm[i].sm*ATM::lilv;
}
break;
case '6':
printf("请输入要删除的账户名:");
scanf("%s", account);
for ( i = 0; i < current; i++)
{
if (strcmp(atm[i].account, account) == 0)
{
break;
}
}
if( i >= current )
{
printf("该账户不存在!\n\n");
}
else
{
printf("第%d个账户信息 \n", i + 1);
printf("账户信息如下 \n");
printf("账户名:%s\n", atm[i].account);
printf("姓名:%s\n", atm[i].name);
printf("电话号码:%s\n", atm[i].phone);
printf("余额:%lf\n", atm[i].sm);
memcpy(atm+i, atm+i+1, (current-i) * sizeof(ATM));
--current;
printf("删除成功\n");
}
break;
default:
printf("非法选择,请重新选择\n");
}
}
return 0;
}
// Atm Manager.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include"atm.h"
#include
#include "function.h"
#include
ATM*atm;
int current=0; //存入的金额
int total; //总金额
int _tmain(int argc, _TCHAR* argv[])
{
while(1)
{
char choice;
char password[40];
char input;
printf("\n");
printf("\t 欢迎进入ATM机银行仿真模拟系统 \n");
printf("\n");
printf("\t ********************");
printf("\n");
printf("\t 1:客户端 \n");
printf("\t 2:管理端 \n");
printf("\t 0:退出系统 \n");
printf("\t ********************");
printf("\n");
printf("\t 温馨提示:\n");
printf("\t 进入客户端,请选择1: \n");
printf("\t 进入管理端,请选择2: \n");
printf("\t 退出系统,请选择0: \n");
printf("\t 请选择:");
choice=getch();
switch(choice)
{
case'1':
printf("执行进入客户端");
kehu();
break;
case'2':
printf("执行进入管理端");
guanli();
break;
case'3':
if(atm!=NULL)
{
free(atm);
}
return 0;
default:
printf("非法选择,请重新选择\n");
}
}
return 0;
} typedef struct
{
char account[40]; //账号
char name[20]; //姓名
char phone[20]; //电话号码
char password[40]; //密码
char npassword[40]; //新密码
double cm; //存入的金额
double qm; //取走的金额
double sm; //剩余的金额
double zm; //转账的金额
static double lilv; //利率
}ATM;