购物卡管理系统课程设计.docx

上传人:b****5 文档编号:6371548 上传时间:2023-01-05 格式:DOCX 页数:42 大小:339.72KB
下载 相关 举报
购物卡管理系统课程设计.docx_第1页
第1页 / 共42页
购物卡管理系统课程设计.docx_第2页
第2页 / 共42页
购物卡管理系统课程设计.docx_第3页
第3页 / 共42页
购物卡管理系统课程设计.docx_第4页
第4页 / 共42页
购物卡管理系统课程设计.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

购物卡管理系统课程设计.docx

《购物卡管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《购物卡管理系统课程设计.docx(42页珍藏版)》请在冰豆网上搜索。

购物卡管理系统课程设计.docx

购物卡管理系统课程设计

购物卡管理系统程序设计

一、题目要求:

设计购物卡管理系统,系统主要模块:

(1)实现系统内制卡、发卡功能;

(2)实现系统内账户及相关账户管理;

(3)实现卡交易和合法性检查;

(4)实现卡金融交易积分功能;

(5)实现卡报表功能;

(6)数据以文件形式存储。

【提示】

制卡:

指申请一张购物卡,但还没有使用。

发卡:

指该购物卡已经启用。

实现卡交易:

指从卡中消费掉一定的金额

二、需求分析

根据题目要求,由于数据要以文件形式存储,所以应提供文件的输入、输出等操作;在程序中要实现银行卡的各项功能,应提供制卡、发卡、存款、消费、查询账户相关信息、查询账户交易记录、查询全部信息、退出程序等一系列操作;另外还应提供键盘式选择菜单实现功能选择。

三、总体设计

分析了整个系统之后,根据上面的系统需求分析,可以将这个系统的设计分为如下七大模块:

制卡、发卡、存款、消费积分、查询账户相关信息、查询账户交易记录、查询全部信息

 

 

四、详细设计

1.主函数设计

主函数的设计比较简介,只包括一个主菜单函数,主要实现菜单功能,提供了菜单输入、模块选择、退出系统等模块的调用。

其中各功能模块用菜单方式选择。

【流程图】

 

【程序】

voidmain()

{

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

printf("\t\t*********************购物卡管理系统************************\n");

printf("\n\n\n\t\t按任意键进入............");

getchar();

menu();

}

函数开头有“文件包含”的预处理命令,所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。

C语言提供了#include命令用来实现“文件包含”的操作。

在本程序中包含了一下头文件:

"string.h"、"ctype.h"、"stdio.h",方便调用库函数实现某些功能。

在程序设计中,只使用一些基本类型(或称简单类型)的变量(如整型、实型、字符型变量等)和构造类型数据——数组,是远远不够的。

有时候需要将不同类型的数据组合成一个有机的整体,以便于引用。

这些组合在一个整体中的数据是相互联系的。

在这个程序中,定义了一个结构体数组来存放购物卡用户的各种信息,包括账户卡号、户主姓名、账户余额、账户状态、账户积分,结构体如下:

structuser

{

intnum;/*账户号码*/

charname[20];/*户主名称*/

floatsurplus;/*账户余额*/

charstate[2];/*账户状态,y:

已启用,n:

未启用*/

intpoint;/*账户积分*/

}u[100];

同时在各分函数中,定义了int、float、char等一系列变量类型,用来实现函数功能。

在主函数前面,要加上对各功能函数的声明,声明的作用是把函数的名字、函数的类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查,例如函数名是否正确,实参与形参的类型和个数是否一致等。

主函数比较简单,但是函数的调用很多,所以,在程序的开头就加上了各函数的声明,如下:

voidc_c();/*制卡函数模块*/

voids_u();/*发卡函数模块*/

voidin_m();/*存款函数模块*/

voidout_m();/*取款函数模块*/

voidc_i();/*查询账户相关信息函数模块*/

voidc_r();/*查询账户交易记录函数模块*/

voidcheck();/*查询全部信息函数模块*/

voidmenu();/*主菜单函数模块*/

voidback();/*返回函数模块*/

voidcheck_b();/*给用户提示已有信息*/

实现菜单选择功能,使用的是switch语句,根据用户输入的菜单选项a,调用不同的函数实现各种功能:

switch(a)

{

case1:

c_c();break;/*制卡模块*/

case2:

s_u();break;/*发卡模块*/

case3:

in_m();break;/*存款模块*/

case4:

out_m();break;/*取款模块*/

case5:

c_i();break;/*查询账户相关信息模块*/

case6:

c_r();break;/*查询交易记录模块*/

case7:

check();break;/*查看所有信息模块*/

case8:

exit(0);break;/*退出模块*/

}

主菜单函数

[程序]

voidmenu()

{

intv,w1;

do

{

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

printf("\t\t<________________________THEMENU_______________________>\n");

printf("\t\t||

(1)制卡操作||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||

(2)帐号激活||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||(3)帐户登陆||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||(4)报表操作||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||(5)退出||\n");

printf("\t\t||______________________________________________________||\n");

printf("\n\n\t\t请选择操作(1--5):

<>\b\b");

scanf("%d",&v);

if(v<1||v>5)

{

printf("\n\n\t\t**********输入有误!

************");

w1=1;

getchar();

}

elsew1=0;

}

while(w1==1);

switch(v)

{

case1:

made();break;/*制作*/

case2:

life();break;/*激活*/

case3:

enter();break;/*登陆*/

case4:

browse();break;/*报表*/

case5:

exit(0);/*退出*/

}

}

 

2、功能模块设计

2.1制卡模块

1、制卡

【数据结构】

所输入的数据信息在磁盘上以文本文件的形式保存,一条记录对应一个购物卡,既符合习惯也方便信息管理。

【分析】

制卡时需要把开卡的户主的信息输入,包括卡号、姓名、初始金额、是否开始使用此卡,并且还需要输出其信息。

把购物卡的卡号、姓名、密码、存款金额、消费金额、积分数作为结构体成员,存放在结构体数组:

structcredicard/*定义信用卡结构体*/

{

intnumber;

charname[20];

charID[20];

charword[8];

intflag;

floataccount;

intintegal;

intjifen;

}card[M];

【流程图】

【程序】

voidmade()/*制卡操作*/

{

inti;

charh[20];

do

{

printf("\n\n\t请输入要申请的号码:

<\t\t\t>\b\b\b\b\b\b\b");

scanf("%s",h);

if(strlen(h)!

=6)

{

printf("\n\n\n\t\t***************输入有误,请重新输入****************\n\n");

continue;

}

for(i=0;i

if(strcmp(card[i].ID,h)==0)

{

printf("\n\n\t\t***********该号码已经存在,请重新输入************\n\n");

break;

}

}

while(((strlen(h))!

=6)||strcmp(card[i].ID,h)==0);

card[n].number=n;

strcpy(card[n].name,"***");

strcpy(card[n].ID,h);

strcpy(card[n].word,"000000");

card[n].flag=0;

card[n].account=0.00;

card[n].integal=0;

printf("\n\n\n\t\t********************制卡成功!

**********************\n\n");

print_one(n);

n++;

add();

menu();

}

2、显示卡的信息

【分析】

将刚制的卡的信息输出到屏幕。

【程序】

voidprint_one(intj)/*显示消息*/

{

printf("\n|----|--------------------|--------------------|----|----------|----------|");

printf("\n|NO.|name|ID|flag|account|integal|");

printf("\n|----|--------------------|--------------------|----|----------|----------|");

printf("\n|%4d|%20s|%20s|%4d|%10.2f|%10d|",

card[j].number,card[j].name,card[j].ID,card[j].flag,card[j].account,card[j].integal);

printf("\n|----|--------------------|--------------------|----|----------|----------|");

}

3、用文件的形式将卡保存

voidadd()/*写入文件*/

{

inti;

FILE*fp;

if((fp=fopen("score.txt","wb"))==NULL)

{

printf("\t\tCannotopenthefile\n");

return;

}

for(i=0;i

if(fwrite(&card[i],sizeof(structcredicard),1,fp)!

=1)

{

printf("\t\tFilewriteerror\n");

return;

}

fclose(fp);

printf("\n\n\n\t\t************成功保存!

!

!

************");

}

2.2发卡模块

【分析】

该模块的功能是根据输入的卡号查找对应的记录,找到后可进行发卡,填写申请人的姓名、设置密码等操作,并决定是否激活。

最后登录此卡查看是否已激活,输出到屏幕。

【流

程图】

 

1、首先输入卡号进行激活该卡操作:

【程序】

voidhuo(intk)/*激活操作*/

{

charm[20],p[8];

intx,w2;

do

{

printf("\n\n\t\t是否激活该卡?

(1)是

(2)否\n");

printf("\n\t\t请选择卡号:

<>\b\b");

scanf("%d",&x);

if(x<1||x>2)

{w2=1;getchar();}

elsew2=0;

}

while(w2==1);

if(x==1)

{

printf("\n\n\t\t请输入姓名:

<\t\t\t>\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");

scanf("%s",m);

strcpy(card[k].name,m);

printf("\n\n\t\t请输入六位数密码:

<>\b\b\b\b\b\b\b");

scanf("%s",p);

strcpy(card[k].word,p);

card[k].flag=1;

printf("\n\n\n\t\t********************激活成功!

**********************\n\n");

print_one(k);

add();

}

}

2、登陆该卡验证是否激活

【程序】

voidlife()/*登陆*/

{

intk=-1;

charh[20];

FILE*fp;

if((fp=fopen("score.txt","r"))==NULL)

{

printf("\t\tCannotopenthefile\n");

return;

}

for(n=0;!

feof(fp);n++)

{

fread(&card[n],sizeof(structcredicard),1,fp);

}

if(n==0)

printf("\n\n\t\t****************请先制卡*********************\n");

else

{

printf("\n\n\t请输入购物卡号码:

<\t\t\t>\b\b\b\b\b\b\b");

scanf("%s",h);

k=search(h);

if(k==-1)

printf("\n\n\t\t\t*****************该号码不存在!

****************\n");

else

{

if(card[k].flag==1)

printf("\n\n\t\t****************该卡已经激活!

*****************\n");

elsehuo(k);

}

}

menu();

}

intsearch(charh[20])

{

inti,k=-1;

for(i=0;i

if(strcmp(card[i].ID,h)==0)k=i;

return(k);

}

3、进入该卡进行核对信息

【程序】

voidenter()/*进入*/

{

intk=-1;

charh[20];

if(n==0)

printf("\n\n\t\t****************请先制卡*********************\n");

else

{

printf("\n\n\t请输入购物卡号码:

<\t\t\t>\b\b\b\b\b\b\b");

scanf("%s",h);

k=search(h);

if(k==-1)

printf("\n\n\t\t\t*****************该号码不存在!

****************\n");

else

{

if(card[k].flag=0)

printf("\n\n\t\t************该卡还未激活,请先激活!

************\n");

else

hedui(k);

}

}

menu();

}

4、核对卡号密码

【程序】

voidhedui(intk)/*验证核对*/

{

intc=0,w3=0;

charp[8];

do

{

printf("\n\n\t\t*******请输入密码:

<>\b\b\b\b\b\b\b");

scanf("%s",p);

if(strcmp(card[k].word,p)!

=0)

{

printf("\n\n\t\t********密码不正确,请重新输入!

**********\n");

c++;

continue;

}

else

{

printf("\n\n\t\t**********密码正确!

***********\n");

w3=1;

menu1(k);

}

}

while(w3==0&&c<3);

}

5、核对户主信息并选择操作

【程序】

voidmenu1(intk)/*显示*/

{

intv,w4;

do

{

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

printf("\t\t<_______________________THEMENU1_______________________>\n");

printf("\t\t||

(1)查询||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||

(2)存款||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||(3)消费||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||(4)修改密码||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||(5)返回主菜单||\n");

printf("\t\t||______________________________________________________||\n");

printf("\n\n\t\t请选择操作(1--5):

<>\b\b");

scanf("%d",&v);

if(v<1||v>5)

{w4=1;getchar();}

elsew4=0;

}

while(w4==1);

switch(v)

{

case1:

stat_one(k);break;

case2:

deposit(k);break;

case3:

fetch(k);break;

case4:

change(k);break;

case5:

menu();

}

}

 

2.3存款模块

【分析】

该模块的功能是在账户登录后,通过选择步骤进行对此卡进行此存款,最后以表格的形式将卡上的信息输出。

【流程图】

 

【程序】

voiddeposit(intk)

{

floata=0.00;

printf("\n\n\t\t请输入存款金额:

<\t\t>\b\b\b\b\b\b\b\b\b\b\b");

scanf("%f",&a);

card[k].account+=a;

printf("\n\n\t\t**********存款成功!

***********");

print_one(k);

add();

menu1(k);

}

2.4消费积分模块

【分析】

该模块的功能是使用该卡进行消费,最后以表格的形式将此卡现状输出到屏幕。

流程图】

 

【程序】

voidfetch(intk)/*消费*积分*/

{

floatb=0.00,jifen=0.00;

printf("\n\n\t\t请输入消费金额:

<\t\t>\b\b\b\b\b\b\b\b\b\b\b");

scanf("%f",&b);

if(b>card[k].account)

printf("\n\n\t\t**********余额不足!

*************");

else

{

card[k].account-=b;

card[k].integal=b;

card[k].jifen+=b;

printf("\n\n\t\t**********谢谢惠顾!

***********");

print_one(k);

add();

}

menu1(k);

}

2.5查询账户相关信息模块

【分析】

该模块的功能是在户主登录后对账户的信息进行查询,并且可以根据需要进行密码修改。

【选择程序】

voidmenu1(intk)/*显示*/

{

intv,w4;

do

{

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

printf("\t\t<_______________________THEMENU1_______________________>\n");

printf("\t\t||

(1)查询||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||

(2)存款||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||(3)消费||\n");

printf("\t\t||------------------------------------------------------||\n");

printf("\t\t||(4)修改密码||\n");

printf("\t\t||---------------------------------------------

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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