购物卡管理系统设计实习报告.docx

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

购物卡管理系统设计实习报告.docx

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

购物卡管理系统设计实习报告.docx

购物卡管理系统设计实习报告

 

C语言课程设计报告

 

姓名:

居江月

班号:

040091

学号:

20091001669

专业:

环境学院试验班

指导老师:

彭雷

 

完成时间:

2010年7月15日

17题购物卡管理系统

 

【题目要求】

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

(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();

}

这里通过简单的输入输出函数来实现欢迎界面,通过用户输入回车键进入菜单进行操作。

 

2.主函数

主函数的设计比较简介,只提供了进入菜单、模块选择、退出系统等模块的调用。

其中各功能模块用菜单方式选择,力图做到简洁明了,直观大方。

流程图如下:

【流程图】

【分析】:

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

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

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

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

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

structcredicard

{

intnum;/*账户号码*/

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

floatsurplus;/*账户余额*/

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

已启用,n:

未启用*/

intpoint;/*账户积分*/

charword[8];/*账户密码*/

intflag;

floataccount;/*账户余额*/

intintegal;/*账户支出*/

floatpoint;}u[100];

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

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

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

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

voidppoint();/*积分查询模块*/

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

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

voidbrowse();/*报表模块*/

voidactivate(intk);

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

voidmenu1(intk);/*次级菜单函数模块*/

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

3.各功能模块设计

2.1制卡模块

【流程图】

 

2.2发卡模块

【流程图】

 

2.3存款模块

【流程图】

 

2.4消费模块

【流程图】

 

2.5查询账户相关信息模块

【流程图】

 

2.7查询全部信息模块

【流程图】

4.积分查询模块设计

【流程图】

 

5.公共函数设计

返回模块,即在完成一项命令之后,可以选择返回主菜单或者是退出程序。

【流程图】

 

总结

功夫不负有心人,经过了连续6天的学习,练习,思考和编写,终于完成了这个实习题目的编写,完成了任务,写出了报告。

期间不乏艰难困苦,想要放弃的时候。

但是通过老师耐心的指导,同学热心的帮助,再加上网上查阅的资料和自身的思考,终于攻破了一道道难关,最终写出了程序。

在程序的编写过程中,我对数据的存储和提取方面的知识比较模糊,不能有效运用,导致我多次出错,严重阻碍了我编写的步伐,后来经过对c语言教科书再次深入的学习和同学的指点下,我终于弄清了思路,解决了问题。

再就是各个模块中各种条件的判断上我出了不少错误,百思不得其解,不知道如何限制条件。

最后在老师的指导下,通过网络上一个相似程序的解读,终于解决难题,通过判断来导向不同函数。

这次实习告诉了我,要学会利用资源,学会学习别人的长处,再加以自身的思考,理解才能成功。

因为这是个购物卡系统,本着以人为本的思想,我在如何使系统看上更加美观,人性化上下了不少功夫。

并且实际去观察了超市收银台的系统,进行学习,在剩余的时间对程序进行了改良。

让程序更容易使用和操作理解,让界面更人性化,更简洁明了,方便查询信息。

我相信这是每一个编程人员需要做的。

但是每个程序总有不足之处,我程序的缺点就是数据可能会溢出,且设置的最大存储量是1000,且密码也容易看到,这些都不太好。

总之,在这次实习中,我充分的利用了以前学习的知识,也学到了很多,遇到困难知难而进不退缩,努力思考解决难题,逐个攻破,也巩固了c语言的知识,动手实践能力也增强了,第一次编出了这么完整有用的一个程序,对自己也比较满意,充分培养了自己的动手实践能力。

最后,感谢学校给我这个实习的机会,还有同学老师的帮助,让我能够完成这个实习任务。

源代码:

#include

#include/*调用字符函数*/

#include

#include/*通用输入输出库*/

#include

#defineM1000

voidmenu();

voidmade();

voidppoint();

voidputin();

voidlife();

voidenter();

voidbrowse();

voidactivate(intk);

voidcheck(intk);

voidmenu1(intk);

voidfetch(intk);

voidchange(intk);

voiddeposit(intk);

voidstat_one(intk);

voidprint_one(intj);

voidpoint();

intsearch(charh[20]);

intn=0;

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

{

intnumber;

charname[20];

charID[20];

charword[8];

intflag;

floataccount;

intintegal;

floatpoint;

}card[M];

voidmenu()

{

intv,w1;

do

{

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

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

printf("\t\t<主菜单>\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("\t\t||(6)退出||\n");

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

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

<>\b\b");

scanf("%d",&v);

if(v<1||v>6)

{

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

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

w1=1;

getchar();

}

elsew1=0;

}

while(w1==1);

switch(v)

{

inti;

case1:

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

case2:

life();break;/*发卡*/

case3:

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

case4:

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

case5:

ppoint(i);break;/*查询积分*/

case6:

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请输入要申请的8位数号码:

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

scanf("%s",h);

if(strlen(h)!

=8)

{

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))!

=8)||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;

card[n].point=0;

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

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

print_one(n);

n++;

putin();

menu();

}

voidppoint()

{

intl;

if(n==0)

printf("\n\n\t\t**********无记录,请先制卡!

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

else

{

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

printf("\n|NO.|姓名|卡号|point|");

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

for(l=0;l

printf("\n|%4d|%15s|%16s|%10f",

card[l].number,card[l].name,card[l].ID,card[l].point);

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

}

menu();

}

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

{

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

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

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

printf("\n|%4d|%15s|%16s|%4d|%9f|%8d|%10f|",

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

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

}

voidputin()/*存款*/

{

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\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");

elseactivate(k);

}

}

menu();

}

intsearch(charh[20])

{

inti,k=-1;

for(i=0;i

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

return(k);

}

voidactivate(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);

putin();

}

}

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\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

check(k);

}

}

menu();

}

voidcheck(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||******************************************************||\n");

printf("\t\t

\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**********存

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

当前位置:首页 > 小学教育 > 英语

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

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