这是我要编的程序的一些要求
问题描述
饭卡管理系统要求实现日常中对于饭卡的一些基本管理操作,建立饭卡文件、买饭、续钱、添加新饭卡、注销旧饭卡、设置与解除挂失等操作都要求能成功的在构建的平台上进行准确的处理。
功能要求
在主菜单中选择1,建立名为card.dat的文件,并在其中添加若干人的饭卡号、姓名、金额、挂失信息,要求饭卡号是唯一的;
在主菜单中选择2,要求用户输入饭卡号、饭费,然后系统自动从该人的饭卡中减去饭前,并分别显示买饭前后的金额,如果原来饭卡中的余额不足5元,则不能买饭,而且显示“余额不足,请续钱!”,如果挂失信息为真,则显示“本卡已冻结!”;
在主菜单中选择3,要求用户输入饭卡号、续钱额,续钱完成后分别显示续钱前后的金额;
在主菜单中选择4,添加新饭卡,这是要求新饭卡号和已有的饭卡号不能重号;
在主菜单中选择5,注销旧饭卡;
在主菜单中选择6,要求用户输入饭卡号和挂失信息,然后更新该饭卡的挂失信息。
>> 本文固定链接: http://www.vcgood.com/archives/2485
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define N 96
struct card
{
char num[10];
char name[10];
float money;
int lock;
};
void myprint();
void mycreate();
void mybuy();
void myplus();
void myadd();
void myzhux();
void mylock();
main()
{ char select=’\0′,y_n=’\0′;
do
{
myprint();
printf(“”);
select=getch();
switch(select)
{ case ’1′: mycreate(); break;
case ’2′: mybuy() ; break;
case ’3′: myplus() ; break;
case ’4′: myadd() ; break;
case ’5′: myzhux() ; break;
case ’6′: mylock() ; break;
case ’0′: exit(0) ; break;
default : printf(“输入数据错误!请重新输入:”);
}
printf(“继续输入(Y or y)退出(N or n)\n”);
do
{ y_n=getch();
}while(y_n!=’Y'&&y_n!=’y'&&y_n!=’N'&&y_n!=’n');
} while(y_n==’Y'||y_n==’y');
}
void myprint()
{ system(“cls”);
printf(“ |—————————-|\n”);
printf(“ | 请输入选项编号(0——9):|\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(“ | 8——创新功能2 |\n”);
printf(“ | 9——创新功能3 |\n”);
printf(“ | 0——退出 |\n”);
printf(“ |—————————-|\n”);
}
void mycreate()
{ int i=1;
struct card temp={0};
FILE *fp=NULL;
char conti=’\0′;
printf(“\n重新创建将删除以前的数据是否继续(Y/N)”);
do
{ conti=getch();
}while(conti!=’Y'&&conti!=’y'&&conti!=’N'&&conti!=’n');
if(conti==’n'||conti==’N')
return;
fp=fopen(“d:\\card.dat”,”w”);
if (fp==NULL)
{ printf(“\n存储失败!请检查路径和文件名是否正确”); return;}
system(“cls”);
printf(“\n请开始录入数据\n”);
printf(“输入饭卡编号 (以 #结束输入):”);
do
{ gets(temp.num);
}while(strcmp(temp.num,”")==0);
printf(“输入饭卡持有者姓名:”);
gets(temp.name);
printf(“请为建立的饭卡充值:”);
scanf(“%f”,&temp.money);
while (temp.num[0]!=’#'&&temp.name[0]!=’#')
{ temp.lock=0;
fprintf(fp,”%23s%16s%8.2f%3d”,temp.num,temp.name,temp.money,temp.lock);
i++;
printf(“\n开始录入第%d个数据:\n”,i);
printf(“输入饭卡编号:(以#结束输入)”);
do
{ gets(temp.num);
}while(strcmp(temp.num,”")==0);
printf(“输入饭卡持有者姓名:”);
gets(temp.name);
printf(“请为建立的饭卡充值:”);
scanf(“%f”,&temp.money);
}
fclose(fp);
}
void mybuy()
{ char c=’\0′;
int n=0,i,find;
float mon;
struct card temp={0},record[N]={0};
FILE *fp=NULL;
fp=fopen(“d:\\card.dat”,”r”);
if(fp==NULL)
{ printf(“\n存储失败!\n 请检查路径和文件名是否正确\n”);
}
while(feof(fp)==0)
{ fscanf(fp,”%23s%16s%f%3d”,record[n].num,record[n].name,&record[n].money,&record[n].lock);
n++;
}
fclose(fp);
if(n==0)
{ printf(“\n文件中无记录!\n请重新指定文件或创建文件 \n”); return;}
printf(“请输入你的卡号”);
gets(temp.num);
find=n;
for(i=0;i<n;i++)
{
if(strcmp(temp.num,record[i].num)==0)
{ printf(“\n卡上的余额:%f”,record[i].money);
find=i;
break;
}
}
if(find==n)
{ printf(“无输入卡号记录!任意键返回主菜单\n”);
getch();
return;
}
printf(“输入购买的金额:”);
scanf(“%f”,&mon);
fp=fopen(“d:\\card.dat”,”w”);
for(i=0;i<n;i++)
{ if(i==find)
{ printf(“%23s%16s%8.2f\n”,record[i].num,record[i].name,record[i].money);
if (record[i].money<=5)
{ printf(“余额不足请续钱\n”);
printf(“%f”,record[i].money);
break;
}
else
{ record[i].money=record[i].money-mon;
printf(“%23s%16s%8.2f\n”,record[i].num,record[i].name,record[i].money),record[i].lock;
}
}
fprintf(fp,”%23s%16s%8.2f%3d\n”,record[i].num,record[i].name,record[i].money,record[i].lock);
}
fclose(fp);
}
void myplus()
{ char c=’\0′;
int n=0,mon,i,find;
int fin=0;
struct card temp={0},record[N]={0};
FILE *fp=NULL;
fp=fopen(“d:\\card.dat”,”r”);
if(fp==NULL)
{ printf(“\n存储失败!\n 请检查路径和文件名是否正确\n”);
}
while(feof(fp)==0)
{ fscanf(fp,”%23s%16s%f%3d”,record[n].num,record[n].name,&record[n].money,&record[n].lock);
n++;
}
fclose(fp);
if(n==0)
{ printf(“\n文件中无记录!\n请重新指定文件或创建文件 \n”); return;}
printf(“请输入你的卡号”);
gets(temp.num);
find=n;
for(i=0;i<n;i++)
if(strcmp(temp.num,record[i].num)==0)
{ find=i; break; }
if(find==n)
{
printf(“无输入的卡号记录”);
do
{ printf(“请重新输入卡号\n”);
do
{ gets(temp.num);
}while(strcmp(temp.num,”")==0);
for(i=0;i<n;i++)
if((strcmp(temp.num,record[i].num)==0))
{ find=i; break;}
if(find==n)
{ printf(“\n 输入的卡号无记录!\n”);
printf(“\n 是否重新输入:(Y/N)\n”);
}
do
{ c=getche();
}while(c!=’Y'&&c!=’y'&&c!=’n'&&c!=’N');
}while(c==’y'||c==’Y');
}
printf(“请输入冲值金额:”);
scanf(“%d”,&mon);
fp=fopen(“d:\\card.dat”,”w”);
for(i=0;i<n;i++)
{ if(i==find)
{ printf(“%23s%16s%10.2f\n”,record[i].num,record[i].name,record[i].money);
record[i].money=record[i].money+mon;
printf(“%23s%16s%16f\n”,record[i].num,record[i].name,record[i].money);
}
fprintf(fp,”%23s%16s%8.2f%3d\n”,record[i].num,record[i].name,record[i].money,record[i].lock);
fclose(fp);
}
}