资源描述
C语言课程设计报告
班学号: 193092
姓名: 马幸佳
指引教师: 张冬梅
日期: 6月
中华人民共和国地质大学(武汉)
计算机学院
一、题目规定
系统重要功能模块:
1,实现系统内制卡,发卡功能。
2,实现系统内购物卡帐户及有关帐户管理。
3,实现购物卡交易和合法性检查。
4,实现购物卡交易积分功能。
5,实现购物卡报表功能。
6,数据以文献形式存储。
提示:制卡:指申请一种购物卡,但还没有使用。发卡:指该卡已经起用。实现卡交易:指从卡中消费掉一定金额。
二、需求分析
依照题目规定,由于购物卡信息是存储在文献中,因此应提供文献输入、输出等操作;在程序中需浏览购物卡信息,应提供报表、查询等操作;此外还应提供键盘式选取菜单实现功能选取。
三、总体设计
依照需求分析,可以将系统分为五大模块:制卡、发卡、登陆、报表、积分。
购物卡管理系统
制卡模块
发卡模块
登录模块
积分模块
报表模块
查询
储蓄
修改密码
消费
四、详细设计
1、主函数
将main()函数体内界面选取某些语句单独抽取出来作为一独立函数,目在于系统执行完每某些功能模块后可以以便返回到系统界面。
void menu()
{
int v,w1;
do
{
printf("\t\t*********************MENU*********************\n\n");
printf("\t\t\t\t 1.card-made\n");
printf("\t\t\t\t 2.card-life\n");
printf("\t\t\t\t 3.card-enter\n");
printf("\t\t\t\t 4.card-browse\n");
printf("\t\t\t\t 5.exit\n");
printf("\n\n\t\t **********************************************\n");
printf("Choice your number(1-5):[]\b\b");
scanf("%d",&v);
if(v<1||v>5)
{
w1=1;
getchar();
}
else w1=0;
}
while(w1==1);
switch(v)
{
case 1:made();break;
case 2:life();break;
case 3:enter();break;
case 4:browse();break;
case 5:exit(0);
}
}
2、各功能模块设计
(1)制卡模块
【数据构造】
struct credicard
{
int number;
char name[20];
char ID[20];
char word[8];
int flag;
float account;
int integal;
}card[M];
/*card[M]中每个数组元素相应一种运动员信息* /
【程序】
void made()
{
int i;
char h[20];
do
{
printf("\n\n\t Input your number:<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
if(strlen(h)!=6)
{
printf("\n\n\n\t\t***************Wrong!Input again****************\n\n");
continue;
}
for(i=0;i<n;i++)
if(strcmp(card[i].ID,h)==0)
{
printf("\n\n\t\t***********The number exist,input again************\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********************The card is made!**********************\n\n");
print_one(n);
n++;
add();
menu();
}
print_one(n):显示一张卡信息函数。
【程序】
void print_one(int j)
{
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|----|--------------------|--------------------|----|----------|----------|");
}
(2)发卡模块
void life()
{
int k=-1;
char h[20];
if(n==0)
printf("\n\n\t\t****************Make card first*********************\n");
else
{
printf("\n\n\t Input your applied number:<\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*****************Wrong number!****************\n");
else
{
if(card[k].flag==1)
printf("\n\n\t\t****************Life already!*****************\n");
else huo(k);
}
}
menu();
}
huo(k):激活一张卡函数。
void huo(int k)
{
char m[20],p[8];
int x,w2;
do
{
printf("\n\n\t\t Life? (1) Yes (2) No \n");
printf("\n\t\t Chioce your number:< >\b\b");
scanf("%d",&x);
if(x<1||x>2)
{w2=1;getchar();}
else w2=0;
}
while(w2==1);
if(x==1)
{
printf("\n\n\t\tInput your name:<\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\tInput six-number code :< >\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********************Life!**********************\n\n");
print_one(k);
add();
}
}
(3)登陆模块
void enter()
{
int k=-1;
char h[20];
if(n==0)
printf("\n\n\t\t****************Make card first*********************\n");
else
{
printf("\n\n\tInput your applied number:<\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*****************Wrong number!****************\n");
else
{
if(card[k].flag=0)
printf("\n\n\t\t************LIFE FIRST!************\n");
else
hedui(k);
}
}
menu();
}
hedui(k):登陆信息。
void hedui(int k)
{
int c=0,w3=0;
char p[8];
do
{
printf("\n\n\t\t*******Input your code:< >\b\b\b\b\b\b\b");
scanf("%s",p);
if(strcmp(card[k].word,p)!=0)
{
printf("\n\n\t\t********Wrong code!**********\n");
c++;
continue;
}
else
{
printf("\n\n\t\t**********Right code!***********\n");
w3=1;
menu1(k);
}
}
while(w3==0&&c<3);
}
子菜单设计如下:
void menu1(int k)
{
int v,w4;
{
printf("\t\t*********************MENU********************\n\n");
printf("\t\t\t\t 1.Inquire\n");
printf("\t\t\t\t 2.Deposit\n");
printf("\t\t\t\t 3.fetch\n");
printf("\t\t\t\t 4.change code\n");
printf("\t\t\t\t 5.back to menu\n");
printf("\n\n\t\t *********************************************\n");
printf("Choice your number(1--5):< >\b\b");
scanf("%d",&v);
if(v<1||v>5)
{w4=1;getchar();}
else w4=0;
}
while(w4==1);
switch(v)
{
case 1:stat_one(k);break;
case 2:deposit(k);break;
case 3:fetch(k);break;
case 4:change(k);break;
case 5:menu();
}
}
子模块设计如下
查询模块:
void stat_one(int k)
{
printf("\n\n\t\t*************Operate successfully!***************");
print_one(k);
menu1(k);
}
储蓄模块
void deposit(int k)
{
float a=0.00;
printf("\n\n\t\tInput your amount:<\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**********deposit successfully!***********");
print_one(k);
add();
menu1(k);
}
消费模块:
void fetch(int k)
{
float b=0.00;
printf("\n\n\t\tInput your amount:<\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**********Remaining sum is not enough !*************");
else
{
card[k].account-=b;
card[k].integal=b;
printf("\n\n\t\t**********Your patronage !***********");
print_one(k);
add();
}
menu1(k);
}
修改密码模块:
void change(int k)
{
char a[8],b[8];
printf("\n\n\t\tInput new six-number code:< >\b\b\b\b\b\b\b");
scanf("%s",a);
printf("\n\t\tInput new code again:< >\b\b\b\b\b\b\b");
scanf("%s",b);
if(strcmp(a,b)==0)
{
printf("\n\n\t\t**********Code change!*************");
add();
}
else
printf("\n\n\t\tDifferent codes,code change failed!");
menu1(k);
}
(4)报表模块:
void browse()
{
int i;
if(n==0)
printf("\n\n\t\t**********Make card first!***********");
else
{
printf("\n\n\t\t*************Operate successfully!**************\n");
printf("\n|----|--------------------|--------------------|----|----------|----------|");
printf("\n|NO. | name | ID |flag| account | integal |");
printf("\n|----|--------------------|--------------------|----|----------|----------|");
for(i=0;i<n;i++)
printf("\n|%4d|%20s|%20s|%4d|%10.2f|%10d|",
card[i].number,card[i].name,card[i].ID,card[i].flag,card[i].account,card[i].integal);
printf("\n|----|--------------------|--------------------|----|----------|----------|");
}
menu( );
}
3、公共函数
(1)保存函数
void add()
{
int i;
FILE *fp;
if((fp=fopen("score.txt","wb"))==NULL)
{
printf("\t\t Can not open the file \n");
return;
}
for(i=0;i<n;i++)
if(fwrite(&card[i],sizeof(struct credicard),1,fp)!=1)
{
printf("\t\t File write error \n");
return;
}
fclose(fp);
printf("\n\n\n\t\t************Keep!!!************\n");
}
(2)查找函数
int search(char h[20])
{
int i,k=-1;
for(i=0;i<n;i++)
if(strcmp(card[i].ID,h)==0)k=i;
return(k);
}
五、运营成果
(1)主菜单
(2)制卡模块:输入卡号
(3)制卡成功
(4)发卡模块
(5)发卡成功
(6)登录模块
(7)储蓄成功
(8)修改密码
(9)报表功能
六、总结
此前在没有做课程设计时候,总觉得自己编写一种程序那简直就是天方夜谭,自己怎么也许写出来。可是当前,照着课本一点点模仿设计,自己居然也可以写个大概,虽然过程不是很顺利,有些某些还需要学长指点,但是,我觉得已有很大收获了。对于有些某些,也许还是不会写,最起码可以看懂了,不会像此前同样,只是能做一两道题目,写个三四十行程序,当前是对于程序有了一种整体把握。虽然耗费了诸多时间和精力,但是可以学到诸多东西,当前自己对于C语言有了更深一点理解和结识。
我懂得,当前只是学了一点皮毛而已,离纯熟掌握C语言尚有很大一段距离,要做尚有诸多,我一定会在这个暑假继续加强学习,在理解学习好自己编写这个程序后,再尝试编写某些其她程序,使自己更加纯熟运用和掌握c语言。
展开阅读全文