




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课程设计学 号 班 级姓 名 指导教师 2009 年 3月 1日课程设计任务书院系:航空宇航工程学院 专业:飞行器制造工程 一、课程设计时间200809第2学期第1周,共计1周,20学时。二、课程设计内容用C语言编写软件完成以下任务:1录入学生信息和食谱信息;2按照学号添加餐费;3查询某日食谱。三、课程设计要求1. 程序质量: 贯彻结构化的程序设计思想。 用户界面友好,功能明确,操作方便。 用户界面中的菜单至少应包括“信息录入”、“添加餐费(按照学号)”、“某日食谱查询”、“退出”4项。 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明
2、书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、说明书成绩六、教师评语 目录一、需求分析1二、程序流程图2三、核心技术的实现说明及相应程序段2四、课设总结7五、参考文献11六、源程序11一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:添加学生信息函数(addstudent),添加食谱信息函数(adddiet),按学号添加餐费函数(addfee),查询某日食谱函数(query),显示学生信息函数(show)。在这些函数当中,前四个函数的实现严格按照题目的要求,而后
3、面的一个函数属于附加功能。1、添加学生信息函数 主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;2、添加食谱信息函数 实现的功能是按照日期添加某日的早饭,午饭,晚饭的样式和费用的信息;4、食谱查询函数 允许按照日期对某日的各时段食物进行查询;5、添加餐费函数 可以实现对学生按照学号添加总的就餐餐费;6、显示函数 实现的是显示目前所有的有效学生记录信息。除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。每一个学生记录都包含学号、姓名,以及即时的餐费总费用,在程序当中,将学生记录类型定义为结构体类型,添加以及追加
4、的学生信息直接写入E盘的student.dat文件中,其他函数每次对学生记录的访问,其数据来源都是student.dat文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。每一个食谱记录都包含日期,以及早,午,晚三餐的样式和费用。在程序当中,将食谱记录类型定义为结构体类型,添加以及追加的食谱信息直接写入E盘的diet.dat文件中,其他函数每次对食谱记录的访问,其数据来源都是diet.dat文件,这样做不但可以保证食谱数据的一致性,而且可以对食谱数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1、程序总体结构图当
5、(1) 输入之值n=1?真 假添加学生 真 n=2? 假数据函数addstudent 显示学生 n=3? () 信息函数 真 假 show() 添加食谱 n=4? 数据函数 真 假 adddiet() 按学号添加 n=5? 餐费addfee 查询食谱 query() 退出 ()图1程序总体结构图2、具体功能框图(1)添加学生数据函数add student 图2 添加学生数据函数 读写方式打开E盘student.dat文件不成功? 真 假 写方式打开E盘student.dat 输入追加的学生数量n 真 文件不成功? 假 输入录入学生数量n 从文件中读出学生记录数量赋给j输出文件打开 文件位置指针
6、重回开头rewind 失败 将n值写入文件 学生记录总数n+j写入文件 循环变量i=1 文件位置指针定位在结尾fseek 当in时 循环变量i=1return; 输入学号,姓名 当i=n时 和总餐费 输入学号,姓名和总餐费 学生信息写入 文件i+ 学生信息写入文件i+ 关闭文件(2)添加食谱数据函数adddiet() 图3添加食谱数据函数 读写方式打开E盘diet.dat文件不成功? 真 假 写方式打开E盘diet.dat 输入追加的食谱数量n 真 文件不成功? 假 输入录入食谱数量n 从文件中读出食谱记录数量赋给j输出文件打开 文件位置指针重回开头rewind 失败 将n值写入文件 食谱记录
7、总数n+j写入文件 循环变量i=1 文件位置指针定位在结尾fseek 当in时 循环变量i=1return; 输入日期,早餐 当i=n时 ,午餐和晚餐 输入日期,早餐,午餐和晚餐 食谱信息写入 文件i+ 食谱信息写入文件i+ 关闭文件(3)读取学生数据reads图4读取学生数据三、核心技术的实现说明及相应程序段本程序主要由五个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,添加学生数据函数、添加食谱数据函数和添加学生餐费函数是程序中较为核心的部分,下面分别进行说明。1、添加数据函数 添加数据分为录入学生信息和录入食谱信息两部分。(1)录入学生
8、信息,添加数据分为两种情况,其一是在学生文件(student.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.dat)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:void addstudent() /添加学生信息FILE *fp; int n,i,j; struct student stu; if(fp=fopen(e:student.dat,rb+)!=NULL) /读写 j=getw(fp); rewind(fp); printf(请输入要添加的学生数
9、量,按回车键确认:); scanf(%d,&n); putw(j+n,fp); fseek(fp,0L,2); /移动位置指针 for(i=1;i=n;i+) printf(n请输入第%d个学生的学号和姓名:n,i); scanf(%s%s,stu.num,); printf(n请输入第%d个学生的总餐费:n,i); scanf(%f,&stu.dietcost); fwrite(&stu,sizeof(struct student),1,fp); /向文件写一组数据 else /文件不存在时,新建一个文件,并将数据写入该文件 if(fp=fopen(e:student.dat
10、,wb)!=NULL) /只写 printf(请输入要添加的学生数量:); scanf(%d,&n); putw(n,fp); for(i=1;i=n;i+) printf(n请输入第%d个学生的学号和姓名:n,i); scanf(%s%s,stu.num,); printf(n请输入第%d个学生的总餐费:n,i); scanf(%f,&stu.dietcost); fwrite(&stu,sizeof(struct student),1,fp); fclose(fp);(2)录入食谱信息,与录入学生信息方法类似,具体的程序段如下:void adddiet() /添加食谱信息F
11、ILE *fp2; int n,i,j; struct diet die; if(fp2=fopen(e:diet.dat,rb+)!=NULL) j=getw(fp2); rewind(fp2); printf(请输入要添加的食谱数量:); scanf(%d,&n); putw(j+n,fp2); fseek(fp2,0L,2); for(i=1;i=n;i+) printf(n请输入第%d个食谱的日期:n,i); scanf(%s,die.date); printf(n请输入第%d个食谱的早餐和费用,午餐和费用,晚餐和费用:n,i); scanf(%s%s%s,&die.breakfast
12、,&die.lunch,&die.supper); fwrite(&die,sizeof(struct diet),1,fp2); else /文件不存在时,新建一个文件,并将数据写入该文件 if(fp2=fopen(e:diet.dat,wb)!=NULL) printf(请输入要添加的食谱数量:); scanf(%d,&n); putw(n,fp2); for(i=1;i=n;i+) printf(n请输入第%d个食谱的日期:n,i); scanf(%s,die.date); printf(n请输入第%d个食谱的早餐和费用,午餐和费用,晚餐和费用:n,i); scanf(%s%s%s,&d
13、ie.breakfast,&die.lunch,&die.supper); fwrite(&die,sizeof(struct diet),1,fp2); fclose(fp2);2、按学号添加餐费函数函数该函数的核心内容是首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待添加餐费学生的学号,而后按照该学号进行查找,如果文件中存在该学生的数据,则采用加法算法增加,否则输出学生信息不存在的提示信息。对学生信息的具体加法算法是在结构体数组中实现的。在数组中删除学生信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。具体程序 如下:void addfee() /添加学生
14、餐费struct student stuN,temp; int n,i; float g; FILE *fp; printf(n请输入要增加餐费学生学号:); scanf(%s,temp.num); reads(stu,&n); for(i=0;i=n) printf(无此学生信息!); return; printf(n请输入增加该学生的餐费数:n); scanf(%f,&g); stui.dietfee+=g; /*strcpy(stui.dietfee,temp.dietfee);*/ if(fp=fopen(e:student.dat,wb)=NULL) printf(打开文件失败!);
15、 return; putw(n,fp); for(i=0;in;i+) fwrite(&stui,sizeof(struct student),1,fp); fclose(fp);四、课设总结虽然我在大一下学期学过C语言,但都是些皮毛。经过课设这一个星期的学习,在老师精心的指导,同学的热心帮助下我的C语言编程知识有着突飞猛进的增长,受益匪浅。五、参考文献1 谭浩强C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京:中国铁道出版社,2006六、源程序#include#include#include#define N 20#define M 20struct st
16、udentchar num20; char name10; float dietfee;struct dietchar date20;char breakfast100;char lunch100;char supper100;void menu();void reads();void readss();void addstudent();void adddiet();void addfee();void query();void show();main() int n; while(1) menu(); printf(n 请输入您要选择的操作序号:); scanf(%d,&n); switc
17、h(n) case 1: addstudent();break; case 2: show();break; case 3: adddiet();break; case 4: addfee();break; case 5: query();break; case 6: exit(0); default: printf(输入错误!n ); void menu()printf( * 食堂就餐餐费管理系统* ); printf(n 1 添加学生信息); printf(n 2 显示学生信息); printf(n 3 添加食谱信息); printf(n 4 按学号添加餐费); printf(n 5 查询
18、某日食谱); printf(n 6 退出); void reads(struct student stuN,int *n) /读取学生信息文件 FILE *fp; int i=0; if(fp=fopen(e:student.dat,rb)=NULL) printf(文件打开失败!n); return; else *n=getw(fp); for(i=0;i*n;i+) fread(&stui,sizeof(struct student),1,fp); fclose(fp);void addstudent() /添加学生信息FILE *fp; int n,i,j; struct student
19、 stu; if(fp=fopen(e:student.dat,rb+)!=NULL) /读写 j=getw(fp); rewind(fp); printf(请输入要添加的学生数量:); scanf(%d,&n); putw(j+n,fp); fseek(fp,0L,2); /移动位置指针 for(i=1;i=n;i+) printf(n请输入第%d个学生的学号和姓名:n,i); scanf(%s%s,stu.num,); printf(n请输入第%d个学生的总餐费:n,i); scanf(%f,&stu.dietfee); fwrite(&stu,sizeof(struct
20、student),1,fp); /向文件写一组数据 else /文件不存在时,新建一个文件,并将数据写入该文件 if(fp=fopen(e:student.dat,wb)!=NULL) /只写 printf(请输入要添加的学生数量:); scanf(%d,&n); putw(n,fp); for(i=1;i=n;i+) printf(n请输入第%d个学生的学号和姓名:n,i); scanf(%s%s,stu.num,); printf(n请输入第%d个学生的总餐费:n,i); scanf(%f,&stu.dietfee); fwrite(&stu,sizeof(struct s
21、tudent),1,fp); fclose(fp);void readss(struct diet dieM,int *t) /读取食谱文件 FILE *fp2; int i=0; if(fp2=fopen(e:diet.dat,rb)=NULL) printf(文件打开失败!n); return; else *t=getw(fp2); for(i=0;i*t;i+) fread(&diei,sizeof(struct diet),1,fp2); fclose(fp2);void adddiet() /添加食谱信息FILE *fp2; int n,i,j; struct diet die; i
22、f(fp2=fopen(e:diet.dat,rb+)!=NULL) j=getw(fp2); rewind(fp2); printf(请输入要添加的食谱数量:); scanf(%d,&n); putw(j+n,fp2); fseek(fp2,0L,2); for(i=1;i=n;i+) printf(n请输入第%d个食谱的日期:n,i); scanf(%s,die.date); printf(n请输入第%d个食谱的早餐和费用,午餐和费用,晚餐和费用:n,i); scanf(%s%s%s,&die.breakfast,&die.lunch,&die.supper); fwrite(&die,s
23、izeof(struct diet),1,fp2); else /文件不存在时,新建一个文件,并将数据写入该文件 if(fp2=fopen(e:diet.dat,wb)!=NULL) printf(请输入要添加的食谱数量:); scanf(%d,&n); putw(n,fp2); for(i=1;i=n;i+) printf(n请输入第%d个食谱的日期:n,i); scanf(%s,die.date); printf(n请输入第%d个食谱的早餐和费用,午餐和费用,晚餐和费用:n,i); scanf(%s%s%s,&die.breakfast,&die.lunch,&die.supper); fwrite(&die,sizeof(struct diet),1,fp2); fclose(fp2);void show() /显示学生信息struct
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机器人情感识别与表达考核试卷
- 高级审计培训课件
- 批发市场鱼品安全监管考核试卷
- 批发市场的小批量订单处理考核试卷
- 饲料店转让合同范本
- 教学加盟合同范本
- 材料合同范本简易图表
- 食品运输储藏合同范本
- 家具导购合同范本
- 企业级网络攻击事件预案制定协议
- 金融企业会计第八章证券公司业务的核算
- 2024下半年上海事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 网络安全风险评估行业研究报告
- 新能源汽车充电设施安全检查记录表
- 国有企业管理人员处分条例培训2024
- GB/T 38153.1-2024印刷技术测试印样的实验室制备第1部分:浆状油墨
- 2024高考物理考试大纲
- 《上市公司财务舞弊探究的国内外文献综述》5000字
- 2024年护师类之护士资格证考试题库
- 代理记账业务内部规范(三篇)
- 腰椎间盘突出症课件(共100张课件)
评论
0/150
提交评论