购物卡管理系统.docx
- 文档编号:11917648
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:28
- 大小:362.35KB
购物卡管理系统.docx
《购物卡管理系统.docx》由会员分享,可在线阅读,更多相关《购物卡管理系统.docx(28页珍藏版)》请在冰点文库上搜索。
购物卡管理系统
题目要求
设计购物卡管理系统,系统主要模块:
实现系统内制卡、发卡功能;
实现系统内账户及相关账户管理;
实现卡交易和合法性检查;
实现卡金融交易积分功能;
实现卡报表功能;
数据以文件形式存储。
(提示)
制卡:
指申请一张购物卡,但还没有使用。
发卡:
指该购物卡已经启用。
实现卡交易:
指从卡中消费掉一定的金额。
系统需求分析
根据题目要求,由于数据要以文件形式存储,所以应提供文件的输入、输出等操作;在程序中要实现银行卡的各项功能,应提供制卡、发卡、存款、消费、查询账户相关信息、查询账户交易记录、查询全部信息、退出程序等一系列操作;另外还应提供键盘式选择菜单实现功能选择。
系统总体设计
分析了整个系统之后,根据上面的系统需求分析,可以将这个系统的设计分为如下七大模块:
制卡、发卡、存款、消费、查询账户相关信息、查询账户交易记录、查询全部信息
系统详细设计
主函数设计
主函数的设计比较简介,只包括一个菜单函数,主要实现菜单功能,提供了菜单输入、模块选择、退出系统等模块的调用。
其中各功能模块用菜单方式选择。
流程图
小结
函数开头有“文件包含”的预处理命令,所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。
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;/*退出模块*/
}
各功能模块设计
制卡模块
流程图
发卡模块
流程图
存款模块
流程图
消费模块
流程图
查询账户相关信息模块
流程图
2.7查询全部信息模块
【流程图】
公共函数设计
返回模块
即在完成一项命令之后,可以选择返回主菜单或者是退出程序。
流程图
总结
经过连日的奋斗,终于完成了这个购物卡管理系统的设计制作,在这个过程中,感谢老师给了我很多的指导和帮助,使我可以更快的完成这个系统的制作。
在读写文件的相关操作中,我屡次犯错,原因是打开一个二进制文件和打开一个文本文件所存放的信息和读取的信息是不同的,由于这一失误,在很长的一段时间内阻碍了我继续向前的脚步,后来向精通C语言的同学请教,终于弄明白了这一原理,得以继续向前,继续完成这一程序设计。
给予每一个用户清晰明了的界面和全面的信息,方便每一位用户的操作,这是我设计程序的一个宗旨,鉴于找一点,我添加了一个函数来实现查询全部信息的功能,使程序更加完善。
但是还有一个不足之处就是不能没能够实现积分的积累,只能记录最后一次消费的积分,财务报表也只能报出每个账户最后一次的消费情况。
毋庸置疑,学习的过程就是寻找错误和改正错误的过程,在这次实习中,我发现了很多自己编程方面的不足,也遇到了很多的困难,但通过自己的努力,终于完成了这个程序设计。
在这次C语言课程设计实习中,我充分的利用了以前学习的知识,更加系统地理解和掌握C语言的基本概念、语言特点和编程技巧,利用系统提供的标准函数和自定义函数进行程序设计,培养了利用C语言设计综合程序的能力。
源代码
#include
#include
#include
#include
#include
#defineM1000
voidmenu();
voidmade();
voidadd();
voidlife();
voidenter();
voidbrowse();
voidhuo(intk);
voidhedui(intk);
voidmenu1(intk);
voidfetch(intk);
voidchange(intk);
voiddeposit(intk);
voidstat_one(intk);
voidprint_one(intj);
intsearch(charh[20]);
intn=0;
structcredicard/*定义信用卡结构体*/
{
intnumber;
charname[20];
charID[20];
charword[8];
intflag;
floataccount;
intintegal;
}card[M];
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);/*退出*/
}
}
voidmain()
{
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t*********************购物卡管理系统************************\n");
printf("\n\n\n\t\t按任意键进入............");
getchar();
menu();
}
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(); } 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|----|--------------------|--------------------|----|----------|----------|"); } 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************成功保存! ! ! ************"); } voidlife()/*登陆*/ { 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==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); } 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(); } } 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(); } 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); } 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\tChoiceyournumber(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(); } } voidstat_one(intk) { printf("\n\n\t\t*************操作成功! ***************"); print_one(k); menu1(k); } 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); } voidfetch(intk)/*消费*/ { floatb=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; printf("\n\n\t\t**********谢谢惠顾! ***********"); print_one(k); add(); } menu1(k); } voidchange(intk)/*修改密码*/ { chara[8],b[8]; printf("\n\n\t\t请输入新六位数密码: <>\b\b\b\b\b\b\b"); scanf("%s",a); printf("\n\t\t请再次输入新六位数密码: <>\b\b\b\b\b\b\b"); scanf("%s",b); if(strcmp(a,b)==0) { printf("\n\n\t\t**********密码修改成功! *************"); add(); } else printf("\n\n\t\t两次密码输入不一致,密码修改失败! "); menu1(k); } voidbrowse() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 购物 管理 系统