资源描述
《计算机科学与应用系程序类课程设计》
设计报告书
题 目:会员消费积分管理系统
一、 需求分析
首先该问题分为两个大块,一个是会员卡管理功能,另一个是会员积分管
理功能。针对会员卡管理功能,首先应具备7项功能,新会员的录入,查询会员
的信息,会员的挂失操作,会员的冻结操作,修改密码的操作,注销会员的操作,
以及返回上一层目录的操作。在没有一个会员的时候,如果用户进行了查询及注
销等其他在有用户基础上才应该进行的操作,也应该给出相应的提示,来警示用
户应该正确的操作。
要实现新会员的增加,首先应设置一个会员的结构体数据结构来存储每个
会员的信息,以防会员之间的信息混淆,每个会员的信息包含身份证号码的存储
数组,密码的存储数组,冻结的存储,挂失的存储,消费额的存储,级别的存储,
积分的存储这些内容,在增加时对于身份证号码的判定,输入错误时应该采取的
措施,新会员增加时密码的设置,对于密码位数的要求以及出现不符合要求应该
采取的相应措施,以及再次密码的确认。
实现会员信息输出时要进行身份证号码的识别,密码的确认,然后按照一
定的格式给出会员信息存储的内容。
在进行冻结以及后面的相应操作时也都是首先进行身份的识别,密码的确
认,通过后再进行相应的操作。
进行密码修改的时候,首先要进行身份的识别,进行旧密码的确认,然后
才提示输入新密码,并再次进行新密码的确认。新密码要覆盖旧密码,下次进行
其他操作时要实现新密码的置换。
在进行注销用户操作时,要删除该用户,在进行下一次操作时,要做出相
应的提示该用户已删除。
返回上一层菜单可以使用户返回到上一层的菜单,该功能较容易实现。
在进行积分查询时首先要消费额的录入来验证该功能的实现。
在进行折扣率查询时首先要级别的录入来验证该功能。
二、 系统主要功能
该系统的主要功能是:会员卡管理功能和会员卡储值积分管理。
会员卡管理功能:
(1)根据身份证办理会员卡,一张身份证只能办理一张会员卡。
(2)根据需要可以注销、挂失、冻结会员卡或修改会员卡密码以及积分和消费金额查询。会员基本信息包括:会员身份证号、卡号、密码、积分、消费金额、级别。
会员卡储值积分管理:
(1)根据会员卡级别设置折扣率,根据折扣率自动打折计算消费金额。
(2)根据消费金额计算积分,积分累计达到一定标准后换购商品。
三、功能模块描述及功能模块图
本系统包含以下函数:
①. 系统主函数 函数名 void main()
②. 主控模板call函数 函数名 void call()
③. 系统退出函数 函数名 int tuichu()
④. 会员管理总函数 函数名 int guanli()
⑤. 会员积分总函数 函数名 int jifen()
⑥. 会员信息查询函数 函数名 int chaxun()
⑦. 信息输出函数 函数名 int shuchu(int aa)
⑧. 冻结函数 函数名 int dongjie()
⑨. 挂失函数 函数名 int guashi()
⑩. 注销函数 函数名 int zhuxiao()
⑪. 返回函数 函数名 int fanhui()
⑫. 密码设置函数 函数名 int mimashezhi()
⑬. 检查函数 函数名 int jiancha(int aaa)
⑭. 增加新会员函数 函数名 int zengjia()
⑮. 修改密码函数 函数名 int xiugaimima()
⑯. 输入级别函数 函数名 int shurujibie()
⑰. 输入消费额函数 函数名 int shuruxiaofei()
⑱. 查询积分函数 函数名 int chaxunjifen()
⑲. 查询折扣率函数 函数名 int zhekoulv()
各模板的N-S图如下:
1系统主函数
输出“会员卡存储值积分管理系统”
调用call()
2主控模板call函数
清空缓冲区fflush(stdin)
屏幕输出提示操作的内容
读取键盘输入的数字
i=1
真
否
调用guanli()
i=2
真
否
调用jifen()
调用tuichu()
3. 系统退出函数
调用exit(0)
返回0
4.会员管理函数
清空缓冲区fflush(stdin)
屏幕输出提示操作的内容
读取键盘输入的数字
是
i=1
否
调用zengjia()
是
i=2
否
调用chaxun()
是
i=3
否
调用guashi()
是
i=4
否
调用dongjie()
是
i=5
否
调用xiugaimima()
是
i=6
否
调用zhuxiao()
调用fanhui()
返回0
5.会员积分总函数
清空缓冲区fflush(stdin)
屏幕输出提示操作的内容
读取键盘输入的数字
是
i=1
否
调用shuruxiaofei()
是
i=2
否
调用shurujibie()
是
i=3
否
调用zhekoulv()
是
i=4
否
调用chaxunjifen()
调用fanhui()
返回0
6.会员信息查询函数
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
调用jiancha(bc)
调用shuchu(bc)
调用guanli()
7.信息输出函数
处理数据
输出第一行内容
输出信息
zong[aa].guashi
是
== 0
否
输出“否”
输出“是”
zong[aa].dongjie
是
== 0
否
输出“否”
输出“是”
输出其他数据
i=0,i++ 直到 i=17
返回0
8.冻结函数
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
调用jiancha(bc)
zong[bc].dongjie = 1
输出冻结成功的消息
调用guanli()
9.挂失函数
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
调用jiancha(bc)
zong[bc].guashi = 1
输出挂失成功的消息
调用guanli()
10.注销函数
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
调用jiancha(bc)
zong[x].shen[y] = zong[x+1].shen[y]
y=0,y++ 直到 y=17
zong[x].mima[y] =zong[x+1].mima[y]
y=0,y++ 直到 y=5
处理数据
x=bc,x++ 直到 x=zonglen-1
输出注销成功
调用guanli()
11.返回函数
调用call()
12.密码设置函数
输出提示操作
读取键盘输入的数据
直到mimalen == 6
读取键盘再次输入的内容
i=0,i++ 直到 i=5 并且 c[i] == b[i]
c[6] = ‘\0’
zong[zonglen-1].mima[i] = c[i]
i=0,i++ 直到 i=6
返回0
13.检查函数
清空缓冲区fflush(stdin)
输出提示信息
读取输入的字符串b
mimalen=strlen(b)
直到mimalen == 6
b[6] = ‘\0’
n = 0
zong[aaa].mima[i]
是
== b[i]
否
n=n+1
无操作
i=0,i++,直到i=5 并且 n == 6
返回0
14.增加新会员函数
输出提示信息
读取从键盘录入的字符串
直到字符串的长度为18
i=0,i++ 直到 i=17 并且 a[i]>= 48 && a[i]<=57
Zonglen =zonglen +1
zong[zonglen-1].shen[i] = a[i]
i=0,i++ 直到 i=18
处理数据
调用mimashezhi()
输出成功的消息
调用guanli()
15.修改密码函数
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
输出提示信息
读取输入的字符串b
mimalen=strlen(b)
直到mimalen == 6
zong[bc].mima[i]
是
== b[i]
否
n = n+1
无操作
i=0,i++ 直到 i=5 并且 n== 6
输出提示操作
读取键盘输入的数据
直到mimalen == 6
读取键盘再次输入的内容
i=0,i++ 直到 i=5 并且 c[i] == b[i]
c[6] = ‘\0’
zong[bc].mima[i] = c[i]
i=0,i++ 直到 i=6
输出密码修改成功
调用guanli()
16.输入级别函数啊
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
调用jiancha(bc)
输出提示信息
读取键盘输入的信息x
zong[bc].jibie = x
输出设置成功
调用jifen()
17.输入消费函数
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
调用jiancha(bc)
输出提示信息
读取键盘输入的信息x
zong[bc].xiaofei = x
zong[bc].jifen = zong[bc].xiaofei/50
输出设置成功
调用jifen()
18.查询积分
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
调用jiancha(bc)
输出该用户有zong[bc].jifen个积分
输出请进行其他操作
调用jifen ()
19.查询折扣率函数
清空缓冲区fflush(stdin)
是
Zonglen==0
否
输出错误信息
输出提示信息
读取输入的字符串a
Shenlen=strlen(a)
直到shenlen == 18
i=0,i++,直到i=17 并且 a[i]>=48 && a[i]<=57
a[18] = ‘\0’
zong[i].shen[j]
是
== a[j]
否
调用guanli()
m=m+1
无操作
j=0,j++,直到j=17
i=0,i++,直到i=zonglen-1 并且 m == 18
bc=i
调用jiancha(bc)
是
zong[bc].jibie == 0
否
输出不能打折
zong[bc].jibie
是
== 1
否
输出打9折
zong[bc].jibie
是
== 2
否
输出打8.5折
输出打8折
输出请进行其他操作
调用jifen()
四、 主要代码
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
char a[25],b[10],c[6];
int shenlen,i,zonglen,zl,mimalen,gua,ab,bc,j,m,n,x,y; //用到的变量名称
struct abc //会员信息存储结构
{
char shen[18];
int guashi;
int dongjie;
char mima[6];
int jifen;
int xiaofei;
int jibie;
}zong[300];
void main() //主函数main()
{
int call();
printf("会员卡储值积分管理系统\n");
call();
}
int call() //主控程序模块call函数
{
fflush(stdin);
int guanli();
int jifen();
int tuichu();
printf("\n");
printf("请按照提示进行操作\n");
printf("1.会员卡管理\n");
printf("2.会员卡储值积分管理\n");
printf("3.退出系统\n");
printf("请输入编号:");
scanf("%d",&ab);
switch(ab)
{
case 1: {guanli(); break;}
case 2:{jifen(); break;}
case 3:{ tuichu(); break;}
}
return 1;
}
int tuichu() //退出系统函数
{
exit(0);
return 0;
}
int guanli() //会员信息管理函数
{
int zengjia();
int chaxun();
int guashi();
int dongjie();
int xiugaimima();
int zhuxiao();
int fanhui();
fflush(stdin);
printf("\n");
printf("请按照提示进行操作\n");
printf("1.申请会员卡\n");
printf("2.查询会员信息\n");
printf("3.申请挂失\n");
printf("4.申请冻结\n");
printf("5.重置密码\n");
printf("6.申请注销\n");
printf("7.返回上一级\n");
printf("请输入编号:");
scanf("%d",&ab);
switch(ab)
{
case 1:zengjia();
case 2:chaxun();
case 3:guashi();
case 4:dongjie();
case 5:xiugaimima();
case 6:zhuxiao();
case 7:fanhui();
}
return 0;
}
int jifen() //会员积分函数
{
int shuruxiaofei();
int shurujibie();
int zhekoulv();
int chaxunjifen();
int fanhui();
fflush(stdin);
printf("\n");
printf("请按照提示进行操作\n\n");
printf("请先设置用户的消费额和级别进行测试,消费额为0到10000,级别为0到3\n\n");
printf("1.根据用户输入消费额\n");
printf("2.根据用户输入级别.\n");
printf("3.查询折扣率\n");
printf("4.查询积分\n");
printf("5.返回上一级\n");
printf("请输入编号:");
scanf("%d",&ab);
switch(ab)
{
case 1:shuruxiaofei();
case 2:shurujibie();
case 3:zhekoulv();
case 4:chaxunjifen();
case 5:fanhui();
}
return 0;
}
int chaxun() //查询信息函数
{
//int z;
int shuchu(int aa);
int jiancha(int aaa);
printf("\n");
fflush(stdin);
if(zonglen == 0)
{printf("\n还未有用户注册\n");
goto dom;}
top:
printf("请输入要查询的身份证号码:");
fflush(stdin);
gets(a);
shenlen = strlen(a);
if(shenlen != 18)
{
printf("\n您输入的号码有误,");
goto top;
}
for(i=0;i<18;i++)
{
if((a[i] < 48) || (a[i] > 57))
{printf("\n您输入的号码有误,");
goto top;}
}
a[18] = '\0';
for(i=0;i<zonglen;i++)
{
m = 0;
for(j=0;j<18;j++)
{
if(zong[i].shen[j] == a[j])
m = m+1;
}
if(m == 18)
{bc = i;
jiancha(bc);
shuchu(bc);
goto dom;
}
if(i == (zonglen-1) && (m!=18))
{printf("\n您输入的用户不存在\n\n");
goto top;}
}
dom:
printf("\n");
return (guanli());
}
int shuchu(int aa) //信息输出函数
{
int ef;
ef = aa;
printf("\n");
printf(" 身份证号 挂失 冻结 积分 消费额 级别\n");
for(i = 0;i<18;i++)
{printf("%c",zong[aa].shen[i]);}
if(zong[aa].guashi == 0) printf(" 否 ");
else printf(" 是 ");
if(zong[aa].dongjie == 0) printf(" 否 ");
else printf(" 是 ");
printf(" %d ",zong[aa].jifen);
printf(" %d ",zong[aa].xiaofei);
printf(" %d ",zong[aa].jibie);
return 0;
}
int dongjie() //会员信息冻结函数
{
int jiancha(int aaa);
printf("\n");
fflush(stdin);
if(zonglen == 0)
{printf("\n还未有用户注册\n");
goto dom;}
top:
printf("请输入要冻结的身份证号码:");
fflush(stdin);
gets(a);
shenlen = strlen(a);
if(shenlen != 18)
{
printf("\n您输入的号码有误,");
goto top;
}
for(i=0;i<18;i++)
{
if((a[i] < 48) || (a[i] > 57))
{printf("\n您输入的号码有误,");
goto top;}
}
a[18] = '\0';
for(i=0;i<zonglen;i++)
{
m = 0;
for(j=0;j<18;j++)
{
if(zong[i].shen[j] == a[j])
m = m+1;
}
if(m == 18)
{bc = i;
jiancha(bc);
zong[bc].dongjie = 1;
goto domaa;
}
if(i == (zonglen-1) && (m!=18))
{printf("\n您输入的用户不存在\n\n");
goto top;}
}
domaa:
printf("冻结成功,请进行其他操作");
dom:
printf("\n");
return (guanli());
}
int guashi() //会员信息挂失函数
{
int jiancha(int aa);
printf("\n");
fflush(stdin);
if(zonglen == 0)
{printf("\n还未有用户注册\n");
goto dom;}
top:
printf("请输入要挂失的身份证号码:");
fflush(stdin);
gets(a);
shenlen = strlen(a);
if(shenlen != 18)
{
printf("\n您输入的号码有误,");
goto top;
}
for(i=0;i<18;i++)
{
if((a[i] < 48) || (a[i] > 57))
{printf("\n您输入的号码有误,");
goto top;}
}
a[18] = '\0';
for(i=0;i<zonglen;i++)
{
m = 0;
for(j=0;j<18;j++)
{
if(zong[i].shen[j] == a[j])
m = m+1;
}
if(m == 18)
{bc = i;
jiancha(bc);
zong[bc].guashi = 1;
goto domaa;
}
if(i == (zonglen-1) && (m!=18))
{printf("\n您输入的用户不存在\n\n");
goto top;}
}
domaa:
printf("挂失成功,请进行其他操作");
dom:
printf("\n");
return (guanli());
}
int zhuxiao() //会员注销函数
{
int jiancha(int aa);
printf("\n");
fflush(stdin);
if(zonglen == 0)
{printf("\n还未有用户注册\n");
goto dom;}
top:
printf("请输入要查询的身份证号码:");
fflush(stdin);
gets(a);
shenlen = strlen(a);
if(shenlen != 18)
{
printf("\n您输入的号码有误,");
goto top;
}
for(i=0;i<18;i++)
{
if((a[i] < 48) || (a[i] > 57))
{printf("\n您输入的号码有误,");
goto top;}
}
a[18] = '\0';
for(i=0;i<zonglen;i++)
{
m = 0;
for(j=0;j<18;j++)
{
if(zong[i].shen[j] == a[j])
m = m+1;
}
if(m == 18)
{bc = i;
jiancha(bc);
for(x=bc;x<zonglen;x++)
{
for(y=0;y<18;y++)
{
zong[x].shen[y] = zong[x+1].shen[y];
}
for(y=0;y<6;y++)
{
zong[x].mima[y] = zong[x+1].mima[y];
}
zong[x].dongjie = zong[x+1].dongjie;
zong[x].guashi = zong[x+1].guashi;
zong[x].jibie = zong[x+1].jibie;
zong[x].jifen = zong[x+1].jifen;
zong[x].xiaofei = zong[x+1].xiaofei;
}
zonglen = zonglen -1;
goto domaa;
}
if(i == (zonglen-1) && (m!=18))
{printf("\n您输入的用户不存在\n\n");
goto top;}
}
domaa:
printf("\n注销成功,请进行其他操作\n");
dom:
printf("\n");
return (guanli());
}
int fanhui() //系统内返回上一层菜单函数
{
return (call());
}
int mimashezhi() //密码设置函数
{
printf("\n");
top:
fflush(stdin);
printf("请设置密码(6位密码):");
gets(b);
mimalen = strlen(b);
if(mimalen != 6)
{
printf("\n您输入的密码不符合要求,");
goto top;
}
abcd:
printf("\n");
printf("请再次输入密码:");
gets(c);
for (i=0;i<6;i++)
{
if(c[i] != b[i])
{printf("您再次输入的密码有误,");
goto abcd;}
}
c[6] = '\0';
for(i=0;i<7;i++)
{
zong[z
展开阅读全文