购物卡管理系统课程设计文档格式.docx
《购物卡管理系统课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《购物卡管理系统课程设计文档格式.docx(42页珍藏版)》请在冰豆网上搜索。
![购物卡管理系统课程设计文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/5/ed613385-46b0-4c15-a0fc-64eff7a2cd3f/ed613385-46b0-4c15-a0fc-64eff7a2cd3f1.gif)
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();
/*发卡模块*/
case3:
in_m();
/*存款模块*/
case4:
out_m();
/*取款模块*/
case5:
c_i();
/*查询账户相关信息模块*/
case6:
c_r();
/*查询交易记录模块*/
case7:
check();
/*查看所有信息模块*/
case8:
exit(0);
/*退出模块*/
}
主菜单函数
[程序]
voidmenu()
intv,w1;
do
printf("
\n\n\n\n"
\t\t<
________________________THEMENU_______________________>
\n"
\t\t||
(1)制卡操作||\n"
\t\t||------------------------------------------------------||\n"
\t\t||
(2)帐号激活||\n"
\t\t||(3)帐户登陆||\n"
\t\t||(4)报表操作||\n"
\t\t||(5)退出||\n"
\t\t||______________________________________________________||\n"
\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)
made();
/*制作*/
life();
/*激活*/
enter();
/*登陆*/
browse();
/*报表*/
/*退出*/
2、功能模块设计
2.1制卡模块
1、制卡
【数据结构】
所输入的数据信息在磁盘上以文本文件的形式保存,一条记录对应一个购物卡,既符合习惯也方便信息管理。
【分析】
制卡时需要把开卡的户主的信息输入,包括卡号、姓名、初始金额、是否开始使用此卡,并且还需要输出其信息。
把购物卡的卡号、姓名、密码、存款金额、消费金额、积分数作为结构体成员,存放在结构体数组:
structcredicard/*定义信用卡结构体*/
intnumber;
charID[20];
charword[8];
intflag;
floataccount;
intintegal;
intjifen;
}card[M];
voidmade()/*制卡操作*/
inti;
charh[20];
\n\n\t请输入要申请的号码:
\t\t\t>
\b\b\b\b\b\b\b"
%s"
h);
if(strlen(h)!
=6)
\n\n\n\t\t***************输入有误,请重新输入****************\n\n"
continue;
for(i=0;
i<
n;
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;
\n\n\n\t\t********************制卡成功!
**********************\n\n"
print_one(n);
n++;
add();
2、显示卡的信息
将刚制的卡的信息输出到屏幕。
voidprint_one(intj)/*显示消息*/
\n|----|--------------------|--------------------|----|----------|----------|"
\n|NO.|name|ID|flag|account|integal|"
\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);
3、用文件的形式将卡保存
voidadd()/*写入文件*/
FILE*fp;
if((fp=fopen("
score.txt"
"
wb"
))==NULL)
\t\tCannotopenthefile\n"
return;
for(i=0;
if(fwrite(&
card[i],sizeof(structcredicard),1,fp)!
=1)
\t\tFilewriteerror\n"
return;
fclose(fp);
\n\n\n\t\t************成功保存!
!
2.2发卡模块
该模块的功能是根据输入的卡号查找对应的记录,找到后可进行发卡,填写申请人的姓名、设置密码等操作,并决定是否激活。
最后登录此卡查看是否已激活,输出到屏幕。
【流
程图】
1、首先输入卡号进行激活该卡操作:
voidhuo(intk)/*激活操作*/
charm[20],p[8];
intx,w2;
\n\n\t\t是否激活该卡?
(1)是
(2)否\n"
\n\t\t请选择卡号:
scanf("
x);
if(x<
1||x>
2)
{w2=1;
getchar();
elsew2=0;
while(w2==1);
if(x==1)
\n\n\t\t请输入姓名:
\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
m);
strcpy(card[k].name,m);
\n\n\t\t请输入六位数密码:
p);
strcpy(card[k].word,p);
card[k].flag=1;
\n\n\n\t\t********************激活成功!
print_one(k);
2、登陆该卡验证是否激活
voidlife()/*登陆*/
intk=-1;
FILE*fp;
r"
for(n=0;
feof(fp);
n++)
fread(&
card[n],sizeof(structcredicard),1,fp);
if(n==0)
\n\n\t\t****************请先制卡*********************\n"
else
\n\n\t请输入购物卡号码:
k=search(h);
if(k==-1)
\n\n\t\t\t*****************该号码不存在!
****************\n"
else
if(card[k].flag==1)
\n\n\t\t****************该卡已经激活!
*****************\n"
elsehuo(k);
intsearch(charh[20])
inti,k=-1;
if(strcmp(card[i].ID,h)==0)k=i;
return(k);
3、进入该卡进行核对信息
voidenter()/*进入*/
if(card[k].flag=0)
\n\n\t\t************该卡还未激活,请先激活!
************\n"
else
hedui(k);
4、核对卡号密码
voidhedui(intk)/*验证核对*/
intc=0,w3=0;
charp[8];
{
\n\n\t\t*******请输入密码:
if(strcmp(card[k].word,p)!
=0)
\n\n\t\t********密码不正确,请重新输入!
**********\n"
c++;
continue;
\n\n\t\t**********密码正确!
***********\n"
w3=1;
menu1(k);
while(w3==0&
&
c<
3);
5、核对户主信息并选择操作
voidmenu1(intk)/*显示*/
intv,w4;
\n\n\n"
_______________________THEMENU1_______________________>
\t\t||
(1)查询||\n"
\t\t||
(2)存款||\n"
\t\t||(3)消费||\n"
\t\t||(4)修改密码||\n"
\t\t||(5)返回主菜单||\n"
{w4=1;
elsew4=0;
while(w4==1);
stat_one(k);
deposit(k);
fetch(k);
change(k);
menu();
2.3存款模块
该模块的功能是在账户登录后,通过选择步骤进行对此卡进行此存款,最后以表格的形式将卡上的信息输出。
voiddeposit(intk)
floata=0.00;
\n\n\t\t请输入存款金额:
\t\t>
\b\b\b\b\b\b\b\b\b\b\b"
%f"
a);
card[k].account+=a;
\n\n\t\t**********存款成功!
***********"
print_one(k);
}
2.4消费积分模块
该模块的功能是使用该卡进行消费,最后以表格的形式将此卡现状输出到屏幕。
【
流程图】
voidfetch(intk)/*消费*积分*/
floatb=0.00,jifen=0.00;
\n\n\t\t请输入消费金额:
b);
if(b>
card[k].account)
\n\n\t\t**********余额不足!
*************"
card[k].account-=b;
card[k].integal=b;
card[k].jifen+=b;
\n\n\t\t**********谢谢惠顾!
2.5查询账户相关信息模块
该模块的功能是在户主登录后对账户的信息进行查询,并且可以根据需要进行密码修改。
【选择程序】
\t\t||---------------------------------------------