300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 食堂饭卡管理系统C语言——课程设计实习

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

时间:2023-03-23 11:46:40

相关推荐

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

绪论

饭卡管理系统要实现注册发卡、就餐消费、挂失账户、注销账户、押金记录、查询账户等功能。基于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 10struct 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语言都对自己的职业很有帮助。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。