食堂饭卡管理系统C语言

您所在的位置:网站首页 饭卡丢失申请 食堂饭卡管理系统C语言

食堂饭卡管理系统C语言

2023-02-26 17:57| 来源: 网络整理| 查看: 265

绪论

饭卡管理系统要实现注册发卡、就餐消费、挂失账户、注销账户、押金记录、查询账户等功能。基于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 #include #include # 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 Save(); } void Create_card() { char a; fflush(stdin); //使输入内容不影响以后的程序 printf("\n请输入卡号:"); gets( Card[Count].Id);//获取卡号 for(int i=0;i 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 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 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 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--; 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 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语言都对自己的职业很有帮助。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3