c语言课程设计 学生饭卡管理系统_第1页
c语言课程设计 学生饭卡管理系统_第2页
c语言课程设计 学生饭卡管理系统_第3页
c语言课程设计 学生饭卡管理系统_第4页
c语言课程设计 学生饭卡管理系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 课程设计说明书 No 201.课程设计的目的 为了熟练掌握C语言的语法特点、及其数据结构,提高自身编写程序的能力。通过课程设计实现理论知识与实际情况的结合,使所学知识能够在现实社会中起到一定的作用,防止所编写的程序脱离实际,让程序可以更好的发挥作用,以便减轻实际工作中所遇到的繁琐步骤,提高现实工作中的效率。此外通过课程设计提高逻辑思考能力和解决实际问题的能力。程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。其次课程设计有利于治学态度的培养。程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无

2、法正常运行。因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。银行管理系统是商业市场不可缺少的部分。随着管理信息系统的发展会计信息系统越来越显得很重要,在信息时代基于计算机科学和通信信息系统是企业竞争的核心资源,会计信息系统与企业产品、服务和管理息息相关。此外人工管理纯在许多缺陷,效率低。保密性差。时间一长给查找。更新和维护带来诸多不便。而相比之下使用计算机进行文件信息管理上面的问题就不复存在了。于是编写了一个银行管理程

3、序是十分必要的。本程序设计具有输入、查询、更新、统计和输出等功能,操作界面简洁美观,易于操作。 程序用了条件、循环、指针、结构体等知识点,综合了文件的打开和保存编写的。可运用于小的管理软件。软件运用菜单实现交互式 管理,用户轻松的按键既可实现对软件的操作,操作简单易懂,功能丰富,可以很好的满足用户的需要。2设计方案论证21设计思路建立一个函数,用来保存学生的学号、姓名、电话号码、班级、餐卡余额、密码等信息,完成餐厅就餐卡的功能。主函数可以调用六个子函数,分别完成添加用户、查询用户、充值、消费、删除用户、退出系统六个功能。在主函数中可以1、2、3、4、5、6数字键分别可以执行某个功能模块。主要功

4、能模块即如图1所示:添加用户查询用户删除用户充 值收 费主菜单退出系统图1. 就餐卡主要功能模块开 始2.2程序设计main ()主函数:读取文件主函数十分简洁,定义了本程序用到的各个变量及函数,然后读取文件后进入主菜单,显示函数各功能。正确读取?其运行的流程图如图2所示。NY输出主菜单 结 束 图2. 就餐卡主函数运行流程图select()主菜单1,主菜单链接各个分菜单,其功能即如图1所示。addnewcard(),添加用户函数。searchcard(),查询用户函数。addbalance(),充值函数函数。charge(), 收费函数函数。deletecard(),删除用户函数。exit(

5、0), 退出系统函数。用户可以键入相应数字进入各个功能的操作界面。同时设置一个断点,即当返回值为“6”时运行exit(0)函数来结束程序,以免造成死循环。其运行流程图如图3所示。开 始输入 iNi=1?YNYi=2?NY调 用addnewcard()i=3? NYi=4?N调 用searchcard()Yi=5?Y调 用addbalance() 调 用charge()调 用deletecard()结 束图3.就餐卡菜单函数流程图newrecord()添加用户菜单。餐厅管理人员可以按需要根据提示来直接添加学生用户,每次添加完毕系统会询问“是否继续添加?(Y/N)”当返回值为“n”或不是系统要求输

6、入数值时,系统自动保存数据并返回主菜单。searchcard()查询用户2。在主菜单输入“2”时自动进入查询学生信息,每次当输入卡号不存在时系统自动警告没有该用户。查询结束按任意键返回主菜单。其流程图如图4所示。addbalance()、charge(),充值/收费模块3。这两个模块十分相似餐厅管理人员只要输入所要充值学生的学号,就可以对相应学生充值或者扣除相应金额,操作十分简单。充值或扣费结束后系统自动显示操作后该学生信息并自动保存。餐卡充值运行流程图如图5所示。收费流程图类似充值,不再重复。deletecard()删除用户模块5。餐卡管理人员可以通过该模块选择删除需要注销的就餐卡。如果餐卡

7、内余额不为零,系统则提示返还相应金额给学生。开 始输入学号n开 始输入学号n输入学号nm=studenti.cardnumberi=0m=studenti.cardnumberi=0i=i+1i=i+1Nm=nNm=nY输出该学生信息Y输入添加金额k输出该学生信息studenti.balance+=k结 束输出该学生信息图4.查询用户流程图 结 束图5.充值流程图2.3.源程序#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include

8、 <math.h>struct record char cardnumber10; char name20; char phone20; char classn40; char password10; int balance; student500; int num=0; /*外部变量num为文件中的纪录数 */FILE *fp; void select(); /* 主菜单 */void addnewcard(); /*添加用户*/ void searchcard(); /*查询用户*/void readfile(); /*读取文件*/ void deletecard(); /*删

9、除用户*/ void addbalance(); /* 充值 */void password(); /* 密码 */void charge(); /* 收费 */void main() /* 主函数 */ readfile(); /*读取文件*/while (1) select(); /* 主菜单 */ void readfile() /*导入文件,打开欢迎进入界面*/ if(fp=fopen("student.bin","rb")=NULL) if (fp=fopen("student.bin","wb")=NU

10、LL) exit(0); else getch(); return; exit(0); fseek(fp,0,2); if (ftell(fp)>0) /*文件非空*/ rewind(fp); for (num=0;!feof(fp) && fread(&studentnum,sizeof(struct record),1,fp);num+); return; void select() /* 主菜单 */ char choic; system("cls"); printf("ntt* 主菜单 *"); printf(&qu

11、ot;ntt* 1-添加用户 2-查询用户 *"); printf("ntt* 3- 充 值 4- 消 费 *"); printf("ntt* 5-删除用户 6-退出系统 *"); printf("ntt*"); printf("ntt请选择:"); choic=getch(); switch (choic) case '1':addnewcard();break; case '2':searchcard();break; case '3':addbalan

12、ce();break; case '4':charge();break; case '5':deletecard();break; case '6':exit(0); default:select(); void addnewcard() /*添加用户*/ printf("ntt* 请输入学生信息 *n"); printf("ntt输入学号:"); scanf("%s",&studentnum.cardnumber); printf("ntt输入姓名:");

13、scanf("%s",&); printf("ntt输入电话号码:"); scanf("%s",&studentnum.phone); printf("ntt输入班级:"); scanf("%s",&studentnum.classn); printf("ntt输入密码:"); scanf("%s",&studentnum.password); printf("ntt输入添加金额:&q

14、uot;); scanf("%d",&studentnum.balance); num+; printf("ntt是否继续添加?(Y/N):"); if (getch()='y') addnewcard(); return; void searchcard() /*查询用户 */ int mark=0; int i; int a=0; printf("ntt* 按学号查找 *n"); char cardnumber10; printf("ntt请输入学号:"); scanf("%s

15、",cardnumber); for(i=0;i<num;i+) if (strcmp(studenti.cardnumber,cardnumber)=0) printf("ntt* 以下是您查找的学生信息 *"); printf("ntt学号: %s",studenti.cardnumber); printf("ntt姓名: %s",); printf("ntt电话: %s",studenti.phone); printf("ntt班级: %s",st

16、udenti.classn); printf("ntt余额: %d",studenti.balance);printf("ntt密码: %s",studenti.password); printf("ntt*"); printf("ntt按任意键返回主菜单:"); mark+; getch(); return; if (mark=0) printf("ntt没有改学生的信息"); printf("ntt按任意键返回主菜单"); getch(); return; void ad

17、dbalance() /*充值*/ int i; int m; int a=0; printf("ntt* 按学号添加金额 *n"); char cardnumber10; printf("ntt请输入学号:"); scanf("%s",cardnumber); for(i=0;i<num;i+) if (strcmp(studenti.cardnumber,cardnumber)=0) printf("ntt* 以下是您所选择学生信息 *"); printf("ntt学号: %s",st

18、udenti.cardnumber); printf("ntt姓名: %s",); printf("ntt电话: %s",studenti.phone); printf("ntt班级: %s",studenti.classn); printf("ntt余额: %d",studenti.balance); printf("ntt密码: %s",studenti.password); printf("ntt*"); printf("ntt是否添

19、加金额?(y/n)"); if (getch()='y') printf("ntt请输入你要添加金额:");scanf("%d",&m);printf("tt确认添加%d元给%s(y/n)?",m,); if (getch()='y') studenti.balance=studenti.balance+m;printf("ntt添加金额成功"); printf("ntt* 以下是您选择学生添加金额后信息 *"); pr

20、intf("ntt学号: %s",studenti.cardnumber); printf("ntt姓名: %s",); printf("ntt电话: %s",studenti.phone); printf("ntt班级: %s",studenti.classn); printf("ntt余额: %d",studenti.balance); printf("ntt密码: %s",studenti.password); printf("ntt

21、*"); printf("ntt按任意键返回主菜单"); getch(); return; void charge() /*收费*/ int i; int k; int a=0; printf("ntt* 按学号扣费 *n"); char cardnumber10; printf("ntt请输入学号:"); scanf("%s",cardnumber); for(i=0;i<num;i+) if (strcmp(studenti.cardnumber,cardnumber)=0) printf(&q

22、uot;ntt* 以下是您选择学生信息 *"); printf("ntt学号: %s",studenti.cardnumber); printf("ntt姓名: %s",); printf("ntt电话: %s",studenti.phone); printf("ntt班级: %s",studenti.classn); printf("ntt余额: %d",studenti.balance); printf("ntt密码: %s",stud

23、enti.password); printf("ntt*"); printf("ntt是否扣除金额?(y/n)"); if (getch()='y') printf("ntt请输入你要扣除金额:");scanf("%d",&k);printf("tt确认扣除%d元给%s?(y/n)",k,); if (getch()='y') studenti.balance=studenti.balance-k;printf("ntt

24、扣除金额成功"); printf("ntt* 以下是您所选择学生扣除金额后信息 *"); printf("ntt学号: %s",studenti.cardnumber); printf("ntt姓名: %s",); printf("ntt电话: %s",studenti.phone); printf("ntt班级: %s",studenti.classn); printf("ntt余额: %d",studenti.balance); pri

25、ntf("ntt密码: %s",studenti.password); printf("ntt*"); printf("ntt按任意键返回主菜单"); getch(); return; void deletecard() /*删除用户*/ int i,j; int deletemark=0; char cardnumber10; printf("ntt请输入要删除学生学号:"); scanf("%s",cardnumber); if(num=0) printf("ntt对不起,文件中无

26、任何纪录"); printf("ntt按任意键返回主菜单"); getch(); return; for (i=0;i<num;i+) if (strcmp(studenti.cardnumber,cardnumber)=NULL) printf("ntt以下是您要删除的学生纪录:"); printf("ntt学号: %s",studenti.cardnumber); printf("ntt姓名: %s",); printf("ntt电话: %s",st

27、udenti.phone); printf("ntt班级: %s",studenti.classn); printf("ntt余额: %d",studenti.balance); printf("ntt密码: %s",studenti.password); printf("ntt是否删除?(y/n)"); if (getch()='y') printf("nntt!退还 %d 元给%s.!nn",studenti.balance,);for (j=i;j

28、<num-1;j+) /*纪录移动,从stud数组中删除*/ studentj=studentj+1; num-; deletemark+; printf("ntt删除成功"); printf("ntt是否继续删除?(y/n)"); if (getch()='y') deletecard(); return; else return; continue; if (deletemark=0) printf("ntt没有该同学的纪录"); printf("ntt是否继续删除?(y/n)"); if

29、 (getch()='y') deletecard(); return; void writetofile() /*保存文件*/ int i; if (fp=fopen("student.bin","wb")=NULL) printf("ntt文件打开失败"); for (i=0;i<num;i+) if (fwrite(&studenti,sizeof(struct record),1,fp)!=1) printf("ntt写入文件错误!n"); fclose(fp); printf

30、("ntt餐卡系统文件已保存"); printf("ntt按任意键退出程序ntt"); exit(0); 3设计结果与分析 在Microsoft Visual C+ 软件中输入源程序,在没有提示错误的情况下编译,生成相应的后缀为“jiucankaguanli.exe”的可执行文件。双击文件,可以看到如图6所示的界面。图6.运行程序进入的主菜单界面 运行主函数时,首先调用readfile()读取文件2,读取成功后运行select()主菜单函数,打开主菜单函数界面。函数使用switch语句实现各功能模块的转移。用getch()来获取餐厅工作人员的选择数据,分

31、别调用相应的自定义函数。从而实现对各个函数的调用。在输入“1”后会提示“请输入学生信息”这时餐厅管理人员可以根据需要按照提示分别输入学生的学号、姓名、电话号码、班级、密码及充值金额。输入完毕后系统自动提示是不是继续添加学生信息。其运行效果图如图7所示。图7.添加用户界面 这一函数实现了对字符串赋值的功能3。系统提示餐厅管理人员输入相应信息,然后用scanf函数获取输入数据。每次输入结束后,系统输出询问是否继续添加的信息,然后执行if语句,如果返回值是“y”,则继续执行addnewcard()函数添加用户,否则返回主菜单。在主菜单界面输入数字“2”,执行searchcard()函数查询用户,系统

32、会根据管理员输入数据查找相应学生的信息并输出。界面如图8所示。图8.查询用户信息界面(1)图8.查询用户信息界面(2)这一函数提示餐厅管理人员输入卡号后,调用scanf函数获取输入信息,然后执行for语句,同餐卡库里第一个用户卡号比较4,如果相等,则输出该学号学生的信息,如图8.查询用户信息界面(1)所示;如果不相等,则执行i+,同下一用户比较,以此循环,若找到目标用户则输出用户信息,而当没有发现相同学号学生时,则输出没有该学生的信息,即如图8.查询用户信息界面(2)所示。在主菜单界面输入数字“3”,执行addbalance()函数为就餐卡充值。为保险起见系统会询问两次以确认充值:“是否添加金额”、 “确认添加%d元给%s”。其运行界面效果如图9所示。图9.就餐卡充值界面本函数首先根据管理者输入的数据来查询相应学生的信息,查到就输出征求确认,查不到则输出没有该学生的信息,界面和图8.查询用户信息界面(2)一样。征得确认后提示管理者输入添加金额,用scanf函数获得输入信息后征得再次确认。然后函数自动调用加法函数,通过studenti.balance=studenti.balance+m将输入的整型数值加上餐卡里原有的余额,并将添加金额后的学生信息输出。在主菜单界面输入数字“4”,执行charge()函数为就餐卡扣费以实现刷卡消费。同样为保险起见系统会询问两次以确认

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论