c语言课程设计学生饭卡管理系统.docx
- 文档编号:11434012
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:25
- 大小:157.80KB
c语言课程设计学生饭卡管理系统.docx
《c语言课程设计学生饭卡管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生饭卡管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
c语言课程设计学生饭卡管理系统
1.课程设计的目的
为了熟练掌握C语言的语法特点、及其数据结构,提高自身编写程序的能力。
通过课程设计实现理论知识与实际情况的结合,使所学知识能够在现实社会中起到一定的作用,防止所编写的程序脱离实际,让程序可以更好的发挥作用,以便减轻实际工作中所遇到的繁琐步骤,提高现实工作中的效率。
此外通过课程设计提高逻辑思考能力和解决实际问题的能力。
程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。
其次课程设计有利于治学态度的培养。
程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。
因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。
这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。
银行管理系统是商业市场不可缺少的部分。
随着管理信息系统的发展会计信息系统越来越显得很重要,在信息时代基于计算机科学和通信信息系统是企业竞争的核心资源,会计信息系统与企业产品、服务和管理息息相关。
此外人工管理纯在许多缺陷,效率低。
保密性差。
时间一长给查找。
更新和维护带来诸多不便。
而相比之下使用计算机进行文件信息管理上面的问题就不复存在了。
于是编写了一个银行管理程序是十分必要的。
本程序设计具有输入、查询、更新、统计和输出等功能,操作界面简洁美观,易于操作。
程序用了条件、循环、指针、结构体等知识点,综合了文件的打开和保存编写的。
可运用于小的管理软件。
软件运用菜单实现交互式管理,用户轻松的按键既可实现对软件的操作,操作简单易懂,功能丰富,可以很好的满足用户的需要。
2.设计方案论证
2.1设计思路
建立一个函数,用来保存学生的学号、姓名、电话号码、班级、餐卡余额、密码等信息,完成餐厅就餐卡的功能。
主函数可以调用六个子函数,分别完成添加用户、查询用户、充值、消费、删除用户、退出系统六个功能。
在主函数中可以1、2、3、4、5、6数字键分别可以执行某个功能模块。
主要功能模块即如图1所示:
图1.就餐卡主要功能模块
程序设计
①main()主函数:
主函数十分简洁,定义了本程序
用到的各个变量及函数,然后读取文件后进
入主菜单,显示函数各功能。
其运行的流程图如图2所示。
图2.就餐卡主函数运行流程图
②select()主菜单[1],主菜单链接各个分菜单,其功能即如图1所示。
addnewcard(),添加用户函数。
searchcard(),查询用户函数。
addbalance(),充值函数函数。
charge(),收费函数函数。
deletecard(),删除用户函数。
exit(0),退出系统函数。
用户可以键入相应数字进入各个功能的操作界面。
同时设置一个断点,即当返回值为“6”时运行exit(0)函数来结束程序,以免造成死循环。
其运行流程图如图3所示。
Y
图3.就餐卡菜单函数流程图
③newrecord()添加用户菜单。
餐厅管理人员可以按需要根据提示来直接添加学生用户,每次添加完毕系统会询问“是否继续添加?
(Y/N)”当返回值为“n”或不是系统要求输入数值时,系统自动保存数据并返回主菜单。
④searchcard()查询用户[2]。
在主菜单输入“2”时自动进入查询学生信息,每次当输入卡号不存在时系统自动警告没有该用户。
查询结束按任意键返回主菜单。
其流程图如图4所示。
⑤addbalance()、charge(),充值/收费模块[3]。
这两个模块十分相似餐厅管理人员只要输入所要充值学生的学号,就可以对相应学生充值或者扣除相应金额,操作十分简单。
充值或扣费结束后系统自动显示操作后该学生信息并自动保存。
餐卡充值运行流程图如图5所示。
收费流程图类似充值,不再重复。
⑥deletecard()删除用户模块[5]。
餐卡管理人员可以通过该模块选择删除需要注销的就餐卡。
如果餐卡内余额不为零,系统则提示返还相应金额给学生。
图4.查询用户流程图
图5.充值流程图
.源程序
#include<>
#include<>
#include<>
#include<>
#include<>
structrecord
{
charcardnumber[10];
charname[20];
charphone[20];
charclassn[40];
charpassword[10];
intbalance;
}
student[500];
intnum=0;/*外部变量num为文件中的纪录数*/
FILE*fp;
voidselect();/*主菜单*/
voidaddnewcard();/*添加用户*/
voidsearchcard();/*查询用户*/
voidreadfile();/*读取文件*/
voiddeletecard();/*删除用户*/
voidaddbalance();/*充值*/
voidpassword();/*密码*/
voidcharge();/*收费*/
voidmain()/*主函数*/
{
readfile();/*读取文件*/
while
(1)
{
select();/*主菜单*/
}
}
voidreadfile()/*导入文件,打开欢迎进入界面*/
{
if((fp=fopen("","rb"))==NULL)
{
if((fp=fopen("","wb"))==NULL)
{
exit(0);
}
else
{
getch();
return;
}
exit(0);
}
fseek(fp,0,2);
if(ftell(fp)>0)/*文件非空*/
{
rewind(fp);
for(num=0;!
feof(fp)&&fread(&student[num],sizeof(structrecord),1,fp);num++);
return;
}
}
voidselect()/*主菜单*/
{
charchoic;
system("cls");
printf("\n\t\t********************主菜单********************");
printf("\n\t\t***********1-添加用户2-查询用户************");
printf("\n\t\t***********3-充值4-消费************");
printf("\n\t\t***********5-删除用户6-退出系统************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:
");
choic=getch();
switch(choic)
{
case'1':
addnewcard();break;
case'2':
searchcard();break;
case'3':
addbalance();break;
case'4':
charge();break;
case'5':
deletecard();break;
case'6':
exit(0);
default:
select();
}
}
voidaddnewcard()/*添加用户*/
{
printf("\n\t\t***************请输入学生信息***************\n");
printf("\n\t\t输入学号:
");
scanf("%s",&student[num].cardnumber);
printf("\n\t\t输入姓名:
");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:
");
scanf("%s",&student[num].phone);
printf("\n\t\t输入班级:
");
scanf("%s",&student[num].classn);
printf("\n\t\t输入密码:
");
scanf("%s",&student[num].password);
printf("\n\t\t输入添加金额:
");
scanf("%d",&student[num].balance);
num++;
printf("\n\t\t是否继续添加?
(Y/N):
");
if(getch()=='y')
addnewcard();
return;
}
voidsearchcard()/*查询用户*/
{
intmark=0;
inti;
inta=0;
printf("\n\t\t*****************按学号查找*****************\n");
charcardnumber[10];
printf("\n\t\t请输入学号:
");
scanf("%s",cardnumber);
for(i=0;i { if(strcmp(student[i].cardnumber,cardnumber)==0) { printf("\n\t\t**************以下是您查找的学生信息**********"); printf("\n\t\t学号: %s",student[i].cardnumber); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t班级: %s",student[i].classn); printf("\n\t\t余额: %d",student[i].balance); printf("\n\t\t密码: %s",student[i].password); printf("\n\t\t************************************************"); printf("\n\t\t按任意键返回主菜单: "); mark++; getch(); return; } } if(mark==0) { printf("\n\t\t没有改学生的信息"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } } voidaddbalance()/*充值*/ { inti; intm; inta=0; printf("\n\t\t***************按学号添加金额***************\n"); charcardnumber[10]; printf("\n\t\t请输入学号: "); scanf("%s",cardnumber); for(i=0;i { if(strcmp(student[i].cardnumber,cardnumber)==0) { printf("\n\t\t*************以下是您所选择学生信息***********"); printf("\n\t\t学号: %s",student[i].cardnumber); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t班级: %s",student[i].classn); printf("\n\t\t余额: %d",student[i].balance); printf("\n\t\t密码: %s",student[i].password); printf("\n\t\t************************************************"); printf("\n\t\t是否添加金额? (y/n)"); if(getch()=='y') { printf("\n\t\t请输入你要添加金额: "); scanf("%d",&m); printf("\t\t确认添加%d元给%s(y/n)? ",m,student[i].name); if(getch()=='y'){student[i].balance=student[i].balance+m;} printf("\n\t\t添加金额成功"); } printf("\n\t\t********以下是您选择学生添加金额后信息********"); printf("\n\t\t学号: %s",student[i].cardnumber); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t班级: %s",student[i].classn); printf("\n\t\t余额: %d",student[i].balance); printf("\n\t\t密码: %s",student[i].password); printf("\n\t\t************************************************"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } } } voidcharge()/*收费*/ { inti; intk; inta=0; printf("\n\t\t*****************按学号扣费*****************\n"); charcardnumber[10]; printf("\n\t\t请输入学号: "); scanf("%s",cardnumber); for(i=0;i { if(strcmp(student[i].cardnumber,cardnumber)==0) { printf("\n\t\t**************以下是您选择学生信息************"); printf("\n\t\t学号: %s",student[i].cardnumber); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t班级: %s",student[i].classn); printf("\n\t\t余额: %d",student[i].balance); printf("\n\t\t密码: %s",student[i].password); printf("\n\t\t************************************************"); printf("\n\t\t是否扣除金额? (y/n)"); if(getch()=='y') { printf("\n\t\t请输入你要扣除金额: "); scanf("%d",&k); printf("\t\t确认扣除%d元给%s? (y/n)",k,student[i].name); if(getch()=='y') { student[i].balance=student[i].balance-k; } printf("\n\t\t扣除金额成功"); } printf("\n\t\t******以下是您所选择学生扣除金额后信息********"); printf("\n\t\t学号: %s",student[i].cardnumber); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t班级: %s",student[i].classn); printf("\n\t\t余额: %d",student[i].balance); printf("\n\t\t密码: %s",student[i].password); printf("\n\t\t************************************************"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } } } voiddeletecard()/*删除用户*/ { inti,j; intdeletemark=0; charcardnumber[10]; printf("\n\t\t请输入要删除学生学号: "); scanf("%s",cardnumber); if(num==0) { printf("\n\t\t对不起,文件中无任何纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } for(i=0;i { if(strcmp(student[i].cardnumber,cardnumber)==NULL) { printf("\n\t\t以下是您要删除的学生纪录: "); printf("\n\t\t学号: %s",student[i].cardnumber); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t班级: %s",student[i].classn); printf("\n\t\t余额: %d",student[i].balance); printf("\n\t\t密码: %s",student[i].password); printf("\n\t\t是否删除? (y/n)"); if(getch()=='y') { printf("\n\n\t\t! ! ! 退还%d元给%s.! ! ! \n\n",student[i].balance,student[i].name); for(j=i;j student[j]=student[j+1]; num--; deletemark++; printf("\n\t\t删除成功"); printf("\n\t\t是否继续删除? (y/n)"); if(getch()=='y') deletecard(); return; } else return; } continue; } if(deletemark==0) { printf("\n\t\t没有该同学的纪录"); printf("\n\t\t是否继续删除? (y/n)"); if(getch()=='y') deletecard(); return; } } voidwritetofile()/*保存文件*/ { inti; if((fp=fopen("","wb"))==NULL) { printf("\n\t\t文件打开失败"); } for(i=0;i { if(fwrite(&student[i],sizeof(structrecord),1,fp)! =1) { printf("\n\t\t写入文件错误! \n"); } } fclose(fp); printf("\n\t\t餐卡系统文件已保存"); printf("\n\t\t按任意键退出程序\n\t\t"); exit(0); } 3.设计结果与分析 ①在MicrosoftVisualC++软件中输入源程序,在没有提示错误的情况下编译,生成相应的后缀为“”的可执行文件。 双击文件,可以看到如图6所示的界面。 图6.运行程序进入的主菜单界面 运行主函数时,首先调用readfile()读取文件[2],读取成功后运行select()主菜单函数,打开主菜单函数界面。 函数使用switch语句实现各功能模块的转移。 用getch()来获取餐厅工作人员的选择数据,分别调用相应的自定义函数。 从而实现对各个函数的调用。 ②在输入“1”后会提示“请输入学生信息”这时餐厅管理人员可以根据需要按照提示分别输入学生的学号、姓名、电话号码、班级、密码及充值金额。 输入完毕后系统自动提示是不是继续添加学生信息。 其运行效果图如图7所示。 图7.添加用户界面 这一函数实现了对字符串赋值的功能[3]。 系统提示餐厅管理人员输入相应信息,然后用scanf函数获取输入数据。 每次输入结束后,系统输出询问是否继续添加的信息,然后执行if语句,如果返回值是“y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 管理 系统