绪论

饭卡管理系统要实现注册发卡、就餐消费、挂失账户、注销账户、押金记录、查询账户等功能。基于C语言开发实现的食堂饭卡管理系统,是一套针对大学校园食堂交费和一般消费等方面的信息管理系统,它包括学生在校内消费的各方面内容:刷卡消费、查询、充值和持卡者信息管理等,方便对饭卡信息进行各项操作,保持数据的一致性和准确性。另外,各方面的内容应该相互联系,最终产生各种查询统计报表,以供持卡者进行检查。对于此系统的任务就是把人们从繁琐的交费、找零工作中解放出来,用计算实现存款、消费、查询,修改、删除以及存储等功能。同时,用计算机能够快速准确地完成资料的统计和汇总工作,迅速地打印出各种报表以供使用。当今世界已经进入了在计算机领域中激烈竞争的时代,应用计算机已经变得十分普遍了,随着科学技术的不断提高,计算机日益成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用,越来越多的管理人员意识到信息管理的重要性。

设计要求:
(1)发卡 持有效证件到管理处缴纳押金办理就餐卡。
(2)存款 持卡人存款不足时,到管理处交款存入就餐卡,并打印一张收据。
(3)就餐 显示就餐卡中的余额,工作人员键入本次用餐金额进行结算。(4)挂失 持卡人不慎将卡丢失,可到管理处进行挂失。
(5)注销 退取押金。

设计框图:

设计内容:

  • 设计主界面
    设计主界面,主界面中分为七个选项,分别为发卡,存款,就餐,挂失,注销,退出,查看饭卡信息,用户可进行功能选择。

  • 注册发卡
    根据学生用户唯一学号进行注册饭卡账户信息,即只能拥有唯一账户,重复系统给出提示,管理员根据提示要求输入相关信息,系统写入文件并进行持久化存储,以便后期维护查询。

  • 就餐消费
    学生使用饭卡进行刷卡消费,使用饭卡输入唯一标识学号,判断余额足够的情况的下可以进行消费,成功消费并显示余额,否则根据系统提示进行相关操作。

  • 挂失账户
    挂失界面设计 ,分为挂失,解挂选项,挂失的账户处于临时冻结状态,消费,充值等功能无效。

  • 注销账户
    输入唯一标识学号进行注销操作,系统写入文件并删除该用户信息,领取押金。

  • 查询账户
    主界面选择相关功能,查看已注册的用户的信息。

  • 退出系统
    主界面选择退出功能,退出系统。

模块设计:

  • void menu() //主菜单
  • void Create_card() //注册发卡
  • void Recharge_money() //充值金额
  • void Consume() //消费就餐
  • void Show_information() //查询信息
  • void Lose_card() //挂失账户
  • void Cancel_card() //注销账户
  • void Save() //保存信息
  • void Exit() //退出系统

C语言源程序——建议使用Devc ++ 运行

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
# define max 10
struct Card
{ char Id[100];     //学号定义为字符串char Name[100];       //名字定义为字符串 char State;          //饭卡状态0  为正常  1为挂失饭卡float Balance;      //饭卡余额为浮点类型int Deposit;         //押金
} Card [max];           //定义结构体最大2000人
int Count=0;           //标记建立饭卡的数量void menu(){                             //菜单 printf("\n"); printf("\t\t\t\t   ╭═════════════════════════════════○●○●═══╮\n");printf("\t\t\t\t   │              食堂饭卡管理系统              │\n");printf("\t\t\t\t   ╰═══○●○●═════════════════════════════════╯\n");printf("\t\t\t\t   ┌───────────────────────────────────────────-┐\n");printf("\t\t\t\t   │                                            │\n");printf("\t\t\t\t   │                 1. 发卡                    │\n");printf("\t\t\t\t   │                                            │\n");printf("\t\t\t\t   │                 2. 存款                    │\n");printf("\t\t\t\t   │                                            │\n");printf("\t\t\t\t   │                 3. 就餐                    │\n");printf("\t\t\t\t   │                                            │\n");printf("\t\t\t\t   │                 4. 挂失                    │\n");printf("\t\t\t\t   │                                            │\n");printf("\t\t\t\t   │                 5. 注销                    │\n");printf("\t\t\t\t   │                                            │\n");printf("\t\t\t\t   │                 6. 退出                    │\n");printf("\t\t\t\t   │                                            │\n");printf("\t\t\t\t   │                 7. 查看饭卡信息            │\n");printf("\t\t\t\t   │                                            │\n");printf("\t\t\t\t   └────────────────────────────────────────────┘\n");printf("\t\t\t\t\t\t  请您选择(1-7):\t");
}void Save()
{FILE *fp;//打开文件保存信息所用的指针int i;fp= fopen("饭卡管理数据.txt", "w");//建立一个名字为:饭卡管理数据.txt的文件for(i=0; i<Count; i++)//for循环进行储存信息{fprintf(fp,"%d  %s  %s  %d   %.2f  %d\n",Count,Card[i].Id,Card[i].Name,Card[i].State,Card[i].Balance,Card[i].Deposit);//储存标记 学号 姓名 饭卡状态 饭卡余额  }fclose(fp);//关闭文件
}void Exit(){Save();
}void Create_card()
{                 char a;fflush(stdin); //使输入内容不影响以后的程序printf("\n请输入卡号:");gets( Card[Count].Id);//获取卡号for(int i=0;i<Count;i++){if(strcmp(Card[Count].Id,Card[i].Id)==0){printf("===================================该用户已存在!======================================\n"); printf("\n请重新输入卡号:");gets( Card[Count].Id);//获取卡号}}fflush(stdin);printf("\n请输入姓名:");gets(Card[Count].Name);//获得名字fflush(stdin);Card[Count].State=0;//建立饭卡初状态为0表示可以使用fflush(stdin);printf("\n请输入饭卡余额:");scanf("%f",&Card[Count].Balance);//获得饭卡费printf("\n请输入押金:");scanf("%d",&Card[Count].Deposit);//获得饭卡费//Card[Count].Deposit = 20 ;printf("\n");fflush(stdin);                         printf("=====================================建立成功!======================================\n");printf("===================================轻触回车以继续!====================================");a=getchar();Count++;Save();
}void Show_information()
{int j;char x;do{printf("\n");printf("\t\t=================================用户======================================\n");printf("\t\t卡号\t\t姓名\t\t状态\t\t         余额       押金\n");for(j=0; j<Count; j++){           //循环,显示出所建立饭卡的各个信息if(Card[j].State == 0){printf("\t\t%s\t\t%s\t\t正常 \t", Card[j].Id, Card[j].Name, Card[j].State);printf("\t\t%6.2f",Card[j].Balance);printf("\t\t%d\n",Card[j].Deposit);}else{printf("\t\t%s\t\t%s\t\t已锁定\t", Card[j].Id, Card[j].Name, Card[j].State);printf("\t\t%6.2f",Card[j].Balance);printf("\t\t%d\n",Card[j].Deposit);} }fflush(stdin);printf("请输入回车以返回:");x=getchar();}while(x=='n');
}void Consume()
{int i;float m;char a;char num[20];do{system("cls");fflush(stdin);printf("\n请输入您的卡号:");gets(num);fflush(stdin);printf("\n请输入价格:");scanf("%f",&m);if(m<=0)printf("\n请正确输入饭费!\n");else {for(i=0; i<Count; i++)if(strcmp(num,Card[i].Id)==0)     //字符串比较寻找饭卡break;if(i==Count)printf("=================================该用户不存在!====================================\n");else if(Card[i].State==1)printf("===================================该卡号已冻结!======================================\n");else if(Card[i].Balance < m)             //小于饭钱则提醒充卡费{printf("================================余额不足,请充值!!==================================\n");printf("===============================该用户余额:%5.2f 元===================================\n",Card[i].Balance); }else{printf("\n消费前:%5.2f\n",Card[i].Balance);Card[i].Balance=Card[i].Balance-m;          //实现饭卡费的扣除printf("\n消费后:%5.2f\n",Card[i].Balance);}}printf("\n是否继续买饭?\n请输入【y或n】:\t\t");fflush(stdin);a=getchar();}while(a=='y');//do  while循环Save();
}void Recharge_money()
{int i;float m;char num[10];char a;do{system("cls");fflush(stdin);printf("\n请输入您的卡号:");gets(num);fflush(stdin);printf("\n请输入您的充值金额:");scanf("%f",&m);if(m<=0)printf("================================ 输入错误!====================================\n");else{for(i=0; i<Count; i++)if(strcmp(num,Card[i].Id)==0)            //字符串比较寻找饭卡break;if(i==Count)printf("=================================该用户不存在!====================================\n");else{printf("\n原卡钱:%5.2f\n",Card[i].Balance);Card[i].Balance=Card[i].Balance+m; //实现饭卡的充钱printf("\n现卡钱:%5.2f\n",Card[i].Balance);}}printf("\n是否继续充值?\n请输入【y或n】\t\t");fflush(stdin);a=getchar();}while (a=='y');Save();
}void Cancel_card()
{char Id[20],c;int a,b,i;do{fflush(stdin);printf("请输入要注销的卡号!");gets(Id);for(a=0; a<Count; a++){if(strcmp(Id,Card[a].Id)==0)break;}for(b=a; b<Count; b++)Card[b]=Card[b+1];if(a>=Count)printf("================================ 此用户不存在!====================================\n");else{Count--;printf("=====================================注销成功!!======================================\n");Show_information(); }fflush(stdin);printf("是否继续进行注销操作?【(y/n)】  \t\t");c=getchar();}while(c=='y');Save();
}void Lose_card()
{char temp[20];int b,c;fflush(stdin);printf("\n请输入您的卡号:");gets(temp);for(c=0; c<Count; c++){if(strcmp(temp,Card[c].Id)==0)//比较数组中的学号字符串信息是否有一致的break;}fflush(stdin);printf("\n==========================");printf("\n请选择功能:1.挂失  2.解挂");printf("\n==========================\n");scanf("%d",&b);if(c>=Count){printf("====================================该用户不存在!!======================================\n");}else{if(b==1){Card[c].State=1;printf("====================================挂失成功!!======================================\n");}if(b==2){Card[c].State=0;//通过改变状态0或爱着1 来实现饭卡挂失与解挂printf("====================================解挂成功!!======================================\n");}}Show_information();//调用显示函数来显示还剩余的饭卡数量Save();
}int main()
{system("color 0f");int Option;int i=0;FILE *fp;if((fp=fopen("饭卡管理数据.txt","a+"))==NULL)// 打开文件并且让fp指向 文件{printf("Can not open file\n");Save();}while(!feof(fp))  //读取一组数据后指针指向下一组数据,并且判断是否指向最后一行{fscanf(fp,"%d %s %s %d %f %d\n",&Count,&Card[i].Id,&Card[i].Name,&Card[i].State,&Card[i].Balance,&Card[i].Deposit);//分别读取txt文档中的 标记,学号,姓名,状态,余额信息并存入数组i++;}
fclose(fp);//关闭文件
do{ system("cls");menu();fflush(stdin);scanf("%d",&Option);switch(Option){case 1:Create_card();break;case 2:Recharge_money();break;case 3:Consume();break;case 4:Lose_card();break;case 5:Cancel_card();break;case 6:Exit();break;case 7:Show_information();break;default : printf("\n===================================输入错误!======================================\n");system("pause"); }//通过switch函数来选择需要调用的函数}while (Option!=6);return 0;
}

简要说明

  • 代码运行后在同一路径自动创建相应TXT文件,并进行持久化存储
  • 自动创建失败,可手动创建(饭卡管理数据.txt),运行代码
  • 使用DevC ++ 编译并运行,否则出现不同语法错误!!

结论

经过一段时间的设计和开发,食堂饭卡系统基本开发完毕,系统功能基本符合饭卡管理的需求,由于时间比较紧迫,该系统还有些不足之处,比如有些界面做的不够漂亮,不够人性化。有的操作有点繁琐,这些都是后续工作可以更好完善的。功能不够周全,还需要进一步的完善。 对于一些复杂的代码还需要进一步的修改,使之更加简捷易懂。在开发食堂饭卡系统的过程中,出现了很多问题,如当调试时,出现,页面加载不进去,以前我们只知道单- -的调试方法,即点击调试按钮,不知道代码出错信息在哪里,很难调试成功,后来经过到网上搜索信息,以及请教老师和同学,渐渐的懂得了如何调试程序,这需要在相应的函数添加断点,按F10 分段调试, 一点一点地调试,就能找出错误出现在哪个地方,然后再不断的调试。
还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,C语言还是很有意思的课程。 自己亲自动手编写程序让我增加了对C语言程序开发环境的了解,在上课的时候老师就讲,学习C语言最重要的是学习C语言的逻辑思维,不管以后从事什么行业,学习C语言都对自己的职业很有帮助。

食堂饭卡管理系统C语言——课程设计实习相关推荐

  1. 学生个人消费系统设计C语言,个人消费管理系统C语言课程设计毕业设计word格式.doc...

    个人消费管理系统C语言课程设计毕业设计word格式 目 录 TOC \o "1-3" \h \z HYPERLINK \l "_Toc256000000" 1 ...

  2. c语言课程设计报告停车系统,停车场管理系统C语言课程设计

    <停车场管理系统C语言课程设计>由会员分享,可在线阅读,更多相关<停车场管理系统C语言课程设计(27页珍藏版)>请在人人文库网上搜索. 1.计算机科学与技术系课程设计报告20 ...

  3. c语言专业认知实践报告怎么写,C语言课程设计实习报告范本

    <C语言课程设计实习报告范本>由会员分享,可在线阅读,更多相关<C语言课程设计实习报告范本(16页珍藏版)>请在人人文库网上搜索. 1.C语言课程设计实习报告学生姓名: 萱冰伊 ...

  4. c语言程序设计服装销售系统报告,服装销售管理系统—C语言课程设计

    服装销售管理系统-C语言课程设计 C 语言课程设计实验报告第 1 页 共 37 页C 语言课程设计实验报告一. 目的(本次课程设计所涉及并要求掌握的知识点. )用户与商品信息要采用文件存储,因而要提供 ...

  5. 通讯录管理系统 C语言课程设计实验报告

    通讯录管理系统C语言课程设计 一.实验目的 1.巩固和加深学生对C语言课程的基本知识的理解和掌握 2.掌握C语言编程和程序调试的基本技能 3.利用C语言进行基本的软件设计 4.掌握书写程序设计说明文档 ...

  6. c语言人事管理课程设计,人事管理系统--c语言课程设计.doc

    人事管理系统--c语言课程设计 本科生C语言课程设计论文 课程名称 C语言课程设计 教师姓名 朱莉 本科生姓名 李百蝉 本科生学号 20111002986 本科生专业 地质学 所在院系 地球科学学院 ...

  7. 课程设计图书管理系统c语言,图书管理系统c语言课程设计c语言课程设计作业获得95分全院第一......

    > 下载中心  >   > 图书管理系统 c语言课程设计 english version 图书管理系统 c语言课程设计 所属分类: 开发工具:c/c++ 文件大小:2720kb 下载 ...

  8. c语言停车场管理系统课程设计,停车场管理系统—C语言课程设计

    <停车场管理系统-C语言课程设计>由会员分享,可在线阅读,更多相关<停车场管理系统-C语言课程设计(12页珍藏版)>请在人人文库网上搜索. 1.精品好资料学习推荐停车场管理系统 ...

  9. c语言课程设计宋军答案,C语言课程设计实习报告封面

    <C语言课程设计实习报告封面>由会员分享,可在线阅读,更多相关<C语言课程设计实习报告封面(27页珍藏版)>请在人人文库网上搜索. 1.信息安全基础课程设计姓 名: 范相地 学 ...

  10. 学校运动会管理系统 c语言,学校运动会管理系统——C语言课程设计.docx

    学校运动会管理系统--C语言课程设计 C语言课程设计 学 校 运 动 会 管理系统 专业:网络工程 班级:网133 报告人:王先海 139074347 刘随心 139074338 葛 翔 139074 ...

最新文章

  1. C语言程序设计 | 结构体,枚举,联合
  2. C++中的类加多线程代码修炼之二
  3. 史上最能“拜客户教”的公司,是如何做到持续交付的?(第2趴)|DevOps案例研究...
  4. 【WebRTC---入门篇】(十八)WebRTC非音视频数据传输
  5. 微信开发2之php网页授权登录
  6. NAS、DAS和SAN三种存储究竟是什么?
  7. python怎样算学的好_python怎么学习好
  8. php让符合条件的复选框选中,多条件查询(复选框条件)
  9. 解决编译.spec:rpm build with: fg: no job control报错
  10. CISCO 2811 路由器配置命令全集
  11. win10 如何设置眼睛保护色(绿色)
  12. 领导的这些职场暗语,你一定要知道!
  13. JVM虚拟机基础知识(JVM位置、类加载生命周期、堆、元空间、jvm常用参数)
  14. 社交帝国的至暗时刻,Facebook“非死不可”?
  15. Macbook怎么录屏?macbook怎么屏幕录制
  16. python提取excel中的表格并保存图片
  17. 嵌入地图跳转高德地图_各种地图跳转导航
  18. 瑞芯微RK3328_Demo(1)原理图参考
  19. pure-admin九州权限系统地址简单读
  20. Debian 7.4 下mentohust开机自动认证

热门文章

  1. deepin 应用市场安装软件失败_深度商店软件无法安装问题解决方案
  2. 2021年下软考中级软件设计师经验分享通过技巧
  3. 关于win10系统常用的c盘清理技巧
  4. Android音视频三-AndroidStudio整合FFmpeg项目+FFmpeg视频解码
  5. python list转json对象,python 对象和json互相转换方法
  6. 解决Maven项目pom文件中出现的错误:“Missing artifact oracle:ojdbc7:jar:12.1.0.2.0:compile“
  7. 离散数学杜忠复版答案_离散数学 杜忠复 陈兆均
  8. web渗透--rpcbind利用
  9. 按首字母排序(汉字、英文、数字)简单实现
  10. 天空机器人 联动存档_Wood R4 V1.38内核下载,自选存档大小,修正天空机器人美版等反烧录...