c语言饭卡管理系统课程设计报告Word格式文档下载.docx

上传人:b****6 文档编号:21624767 上传时间:2023-01-31 格式:DOCX 页数:38 大小:478.06KB
下载 相关 举报
c语言饭卡管理系统课程设计报告Word格式文档下载.docx_第1页
第1页 / 共38页
c语言饭卡管理系统课程设计报告Word格式文档下载.docx_第2页
第2页 / 共38页
c语言饭卡管理系统课程设计报告Word格式文档下载.docx_第3页
第3页 / 共38页
c语言饭卡管理系统课程设计报告Word格式文档下载.docx_第4页
第4页 / 共38页
c语言饭卡管理系统课程设计报告Word格式文档下载.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

c语言饭卡管理系统课程设计报告Word格式文档下载.docx

《c语言饭卡管理系统课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言饭卡管理系统课程设计报告Word格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。

c语言饭卡管理系统课程设计报告Word格式文档下载.docx

在主菜单中选择5,注销旧饭卡。

在主菜单中选择6,要求用户输入饭卡号和挂失信息,然后更新该饭卡的挂失信息。

在主菜单中选择7,

在主菜单中选择0,显示“感谢使用本软件!

已正常退出,按任意键结束。

”按任意键退出本系统。

第2部分《饭卡管理系统》的设计与功能实现

1.总体设计

图1初始的主模块

图2细分后的主模块图

2.数据结构

例如:

structcard

{charname[10],num[10];

floatyu,sum;

intguashi;

};

num[10]表示学号放在一维数组中,name[10]表示姓名放在一维数组中,yu表示余额,sum表示消费金额的累积,guashi表示挂失的情况。

3.算法设计

图3主函数流程图

图4建立饭卡模块流程图

图5买饭模块流程图

图6续钱模块流程图

图7添加新饭卡模块流程图

图8注销旧饭卡模块流程图

图9设置与解除挂失模块流程图

图10创新功能模块流程图

4.程序代码设计

采用模块化的思想,按照“自顶向下,逐步细化”的原则设计算法。

(1)菜单的设计

1,本例需要输出主菜单选择界面,简单菜单的制作可利用printf函数实现。

用printf函数将菜单项逐一打印到屏幕上,界面中的边框可以通过多个printf函数输出的“|”和“-”拼接起来。

2,菜单应根据用户的选择做出不同的反应,因此需要使用分支结构实现选择选项的功能。

根据题意,主菜单含有8个菜单选项,属于多分支条件判断,使用带break和switch语句最为合适。

3,因为本例具有重复选择主菜单选项的功能,因此需要使用循环结构。

在本例中菜单至少要显示一次,随后才判断是否继续选择主菜单,所以使用do-while循坏比较好,因为do-while循坏是先执行循环体,然后再判断表达式。

4,作为菜单,应该给用户一个正常的出口,即满足一定条件时退出程序。

为了给用户提供方便,我们采用人机对话形式,当用户选择某一菜单项后,系统立即完成相应的功能,然后询问用户是否需要继续选择,只要用户继续选择(输入y或Y),主菜单就会在屏幕上反复出现,只有当用户不再选择(输入N或n),才可退出主菜单。

除此之外,为了使用方便,在主菜单中还特设0选项,选择它也能正常退出程序。

为了实现上述功能,有关语句都应放在do-while循环体中。

选择选项的程序段可设计成如下形式:

choose=getchar();

switch(choose)

{

case'

1'

:

mycreat();

break;

2'

mybuy();

3'

myaddyu();

4'

myaddcard();

5'

myzhuxiao();

6'

mysetguashi();

7'

mynew();

0'

{printf("

\n非常感谢使用本软件!

\n已正常退出,按任意键结束...."

);

exit(0);

}break;

default:

\n该选项非法!

"

}

(2)设计各模块的算法,这是逐步细化的过程。

1,建立饭卡模块,函数名mycreat。

在该模块中输入学生的卡号,姓名,充值钱数,并将它们存放在文件中;

每输入一组数据,记录数增1。

建立饭卡的程序设计如下:

voidmycreat()

inti=1;

structcardtemp={0};

FILE*fp=NULL;

charyes_no='

\0'

;

temp.guashi=0;

temp.sum=0;

system("

cls"

fp=fopen("

D:

\\饭卡管理系统\\files\\card.dat"

"

a"

if(fp==NULL){printf("

\n\n饭卡文件丢失!

按任意键继续..."

getchar();

else

{

fclose(fp);

do

{

printf("

\n请输入第%d个记录:

\n\n"

i);

卡号:

scanf("

%s"

&

temp.num);

if(myexist(temp.num)!

=1)

{

fp=fopen("

printf("

姓名:

scanf("

temp.name);

充值钱数:

%f"

temp.yu);

fprintf(fp,"

%10s%10s%20.2f%4d%20.2f\n"

temp.num,temp.name,temp.yu,temp.guashi,temp.sum);

fclose(fp);

i++;

}

elseprintf("

卡号重复!

\n"

\n请问您要继续吗?

do

yes_no=getchar();

}while(yes_no!

='

Y'

&

yes_no!

y'

N'

n'

}while(yes_no=='

||yes_no=='

}

}

在文件夹中寻找已输入的卡号用函数myexist系统自动用循环将文件中读入的学

号一一做比较。

用fp=fopen("

追加打开文件,输入学生的姓名,充值钱数,并将它们存放在文件中;

用do---while语句实现人机对话的功能,机器问用户是否继续,如果继续就接着建立新饭卡,否则返回主菜单。

2,买饭设计模块,函数名mybuy.

voidmybuy()

system("

fp=fopen("

r"

while(feof(fp)==0)

{fscanf(fp,"

%s%s%f%d%f"

temp[i].num,temp[i].name,&

temp[i].yu,&

temp[i].guashi,&

temp[i].sum);

i++;

fclose(fp);

printf("

\n请输入卡号:

num_temp);

if(myexist(num_temp)==-1)printf("

\n卡号不存在!

elseif(myguashi(num_temp)==1)printf("

\n本卡已冻结!

elseif(myyu(num_temp)==0)printf("

\n余额不够,请续费!

else

{for(j=0;

j<

i;

j++)

if(strcmp(num_temp,temp[j].num)==0)break;

\n请输入消费金额:

money);

\n卡号姓名余额\n"

\n消费前:

%-10s%-10s%-10.2f\n"

temp[j].num,temp[j].name,temp[j].yu);

\n消费后:

temp[j].num,temp[j].name,temp[j].yu-money);

temp[j].yu=temp[j].yu-money;

temp[j].sum=temp[j].sum+money;

w"

for(j=0;

i-1;

fprintf(fp,"

temp[j].num,temp[j].name,temp[j].yu,temp[j].guashi,temp[j].sum);

\n\n此次消费成功!

按任意键返回主菜单....."

getch();

return;

\n\n此次消费失败!

按任意键返回主菜单..."

判断卡号存在模块:

函数名myexist。

系统自动用循环将文件中读入的学号一一做比较。

判断卡号挂失情况模块:

函数名myguashi。

系统自动用if---else语句判断挂失情况。

判断卡号余额情况模块:

函数名myyu。

系统自动用if---else语句分别判断卡号余额是否充足。

3,续钱设计模块,函数名myaddyu。

voidmyaddyu()

%s%s%f%d%f\n"

i++;

\n\n请输入卡号:

num_temp);

if(myexist(num_temp)==1&

myguashi(num_temp)==0)

{if(strcmp(num_temp,temp[j].num)==0)

{printf("

\n请输入续费金额:

续费前:

%-10s%-10s%-10.2f\n\n"

续费后:

%-10s%-10s%-10.2f\n"

temp[j].num,temp[j].name,temp[j].yu+money);

temp[j].yu=temp[j].yu+money;

for(k=0;

k<

k++)

temp[k].num,temp[k].name,temp[k].yu,temp[k].guashi,temp[k].sum);

\n\n续费成功!

按任意键返回主菜单......"

\n\n卡号不存在或已挂失!

判断卡号存在情况:

判断挂失情况:

用for循环结构找寻对应的学号,并输入续费金额,使续费成功。

备注:

以下函数为续钱设计模块的子函数:

temp[k].num,temp[k].name,&

temp[k].yu,&

temp[k].guashi,&

temp[k].sum);

k++;

for(i=0;

i<

k;

i++)

{if(strcmp(num,temp[i].num)==0)

{flag=1;

returnflag;

4,添加新饭卡模块,函数名myaddcard。

添加饭卡模块设计程序如下:

voidmyaddcard

{inti=0;

structcardtemp={0};

FILE*fp=NULL;

charyes_no='

temp.guashi=0;

temp.sum=0;

if(fp==NULL){printf("

\n饭卡文件丢失!

do

i+1);

if(myexist(temp.num)!

=1)

}elseprintf("

\n卡号重复!

\n\n要继续吗?

do{yes_no=getch();

}while(yes_no!

}while(yes_no=='

没有找到,符合条件并输入学生的姓名,充值钱数,并将它们存放在文件中;

5,注销旧饭卡模块,函数名myzhuxiao。

fclose(fp);

if(myexist(num_temp)==1)

if(strcmp(num_temp,temp[j].num)==0)

for(k=j;

temp[k]=temp[k+1];

\n注销成功!

\n%s不存在!

查找学生饭卡卡号用比较函数strcmp(num_temp,temp[j].num)==0。

用for循环语句利用数组的替换使学生饭卡被注销。

6,设置与解除挂失模块,函数名mysetguashi。

|******************************************|\n"

|请输入选项编号(0~2)|\n"

|1--设置挂失|\n"

||\n"

|2--解除挂失|\n"

|0--返回|\n"

\n请输入操作编号"

if(choose=='

if(myexist(num_temp)==1)

temp[j].guashi=1;

\n设置成功!

}else{printf("

\n此卡不存在!

elseif(choose=='

temp[j].guashi=0;

%10s%10s%20.2f%4d%20.2f%\n"

此卡不存在!

用if---else语句分别选择设置和解除挂失功能。

以下函数为设置与解除挂失的子函数:

intmyguashi(charnum[10])

{FILE*fp=NULL;

structcardtemp[N]={0};

inti=0,j;

{if(strcmp(num,temp[j].num)==0)

if(temp[j].guashi==1)

return1;

return0;

7,创新功能模块,函数名mynew。

do

fp=fopen("

if(fp==NULL){printf("

\n打开文件失败!

while(feof(fp)==0)

fscanf(fp,"

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

当前位置:首页 > 工程科技 > 电力水利

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

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