课程设计报告模板2009619.doc_第1页
课程设计报告模板2009619.doc_第2页
课程设计报告模板2009619.doc_第3页
课程设计报告模板2009619.doc_第4页
课程设计报告模板2009619.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

沈 阳 航 空 工 业 学 院 课程设计学 号 班 级 姓 名 指导教师 王 晓 岩 2009 年 6 月 30 日沈阳航空工业学院课程设计任务书院系: 专业: 班级:学号: 题目:同学通讯录信息管理一、课程设计时间2008年6月23日至2008年6月27日,共计1周,20学时。二、课程设计内容用C语言编写软件完成以下任务:能够对同学的通讯信息进行数字化管理,人数不少于3人。通讯信息应保存到文件myfile.dat中。三、课程设计要求1. 程序质量: 贯彻结构化的程序设计思想。 用户界面友好,功能明确,操作方便。 用户界面中的菜单至少应包括“同学信息录入”、“同学信息查询(根据姓名,或编号等)”、“显示全部同学信息”、“退出”4项。 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、说明书成绩六、教师评语沈 阳 航 院 设 计 用 纸目 录一、需求分析1二、程序流程图2三、核心技术的实现说明及相应程序段5四、课设总结9五、参考文献9六、源程序1016一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为九个模块,每一个模块对应一个函数。在这些函数当中,添加学生数据函数,删除数据函数,排序函数,成绩查询函数的实现严格按照题目的要求,而更改数据函数和显示函数属于附加功能。读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。1. 添加学生数据函数 主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;2. 删除学生数据函数 实现的功能是按照学号对学生的数据记录进行删除;3. 排序函数 按照题目的具体要求实现的是总成绩的递减排序以及名次显示,其中总成绩相同者名次相同;4. 成绩查询函数 允许按照学号对学生的各科成绩进行查询;5. 更改数据函数 可以实现对学生的各项信息进行修改;6. 显示函数 实现的是显示目前所有的有效学生记录信息。除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。每一个学生记录都包含学号、姓名,以及英语、计算机和数学三门成绩,在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入E盘的student.txt文件中,其它函数每次对学生记录的访问,其数据来源都是student.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1. 程序总体结构图图1程序总体结构图2. 具体功能框图(1)添加学生数据函数add图2 添加学生数据函数(2)读取学生数据函数reads图3读取学生数据(3)删除学生记录函数del图4 删除学生记录(4)按总分排序函数sort图5按总分排序三、核心技术的实现说明及相应程序段本程序主要由九个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。在这些函数当中,添加学生数据函数、删除数据函数和排序函数是程序中较为核心的部分,下面分别进行说明。1. 添加数据函数添加数据分为两种情况,其一是在学生文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.txt)已经存在的情况下,此时文件以追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:if(fp=fopen(e:student.txt,a)=NULL) /*如果文件已经存在,可以追加学生信息*/if(fp=fopen(e:student.txt,w)=NULL) / 文件不存在时,创建新文件,输入学生信息 printf(文件打开失败!n); return; printf(请输入要添加的学生数量,按回车键确认:); scanf(%d,&n); for(i=1;i=n;i+) printf(n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:n,i); scanf(%s%s,stu.num,); printf(n请输入第%d个学生的英语、计算机和数学三门成绩,用空格分开,并按回车键确认:n,i); scanf(%f%f%f,&stu.english,&puter,&stu.math); fprintf(fp,%s %s %f %f %fn,stu.num,,stu.english,puter,stu.math);2. 删除数据函数该函数的核心内容是删除算法以及最终对源文件的更新。该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待删除学生的学号,而后按照该学号进行查找,如果文件中存在该学生的数据,则采用删除算法删除,否则输出学生信息不存在的提示信息。对学生信息的具体删除算法是在结构体数组中实现的,当学生的信息被找到后,位于数组中该学生后面的学生记录依次向前移动一个元素的位置,这些操作完成后,要删除的学生信息就被后面的数组元素覆盖掉了,也就实现了删除。在数组中删除学生信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。具体程序段如下:n=reads(stu); printf(n请输入要删除信息的学生学号,按回车键确认:); scanf(%s,number); for(i=0;i=n)printf(没有找到该学生信息!n); return; elsefor(j=i+1;jn;j+) stuj-1=stuj; save(stu,n-1);printf(删除成功!n); 3. 总分排序函数对于总分的排序采用的排序算法是冒泡法排序,其中总分的求得是在排序的过程中实现的,这部分程序仍然调用了reads函数,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。排序函数使学生数据的排列顺序发生了变化,因此也需要对源文件进行更新。此外,对于学生排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。具体的程序段如下:n=reads(stu); for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(stuj.english+puter+stuj.mathstuj+1.english+stuj+1.computer+stuj+1.math) temp=stuj; stuj=stuj+1; stuj+1=temp; save(stu,n); j=1;printf(*总成绩排序结果如下*nn);printf( 名次 学号 姓名 英语 计算机 数学 总成绩 n); printf(*n); for(i=0;in;i+) / 输出结果并排名 if(stui.english+puter+stui.math=stui+1.english+stui+1.computer+stui+1.math)printf(n%3d%12s%11s%11.2f%11.2f%11.2f%11.2fn,j,stui.num,,stui.english,puter,stui.math,stui.english+puter+stui.math);elseprintf(n%3d%12s%11s%11.2f%11.2f%11.2f%11.2fn,j+,stui.num,,stui.english,puter,stui.math,stui.english+puter+stui.math);四、课设总结写出在课程设计过程中的收获和体会,并说明程序的完成情况,如果程序未能全部实现请分析其中的原因。五、参考文献1 谭浩强C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京:中国铁道出版社,2006六、源程序#include#include#include#includeconio.h#define N 20struct studentchar num20; char name10; float english; float computer; float math;void menu();int reads(struct student stuN);void save(struct student stuN,int n);void add();void del();void sort();void query();void change();void show();void main() int n; while(1) menu(); printf(n 请输入您要选择的操作序号,按回车键确认:); scanf(%d,&n); switch(n) case 1: add();break; case 2: show();break; case 3: del();break; case 4: change();break; case 5: sort();break; case 6: query();break; case 7: exit(0); default: printf(输入错误,请输入列表中存在的序号!n ); void menu()printf( * 班级成绩管理系统* ); printf(n 1 添加学生数据); printf(n 2 显示学生数据); printf(n 3 删除学生数据); printf(n 4 更改学生数据); printf(n 5 总成绩排序); printf(n 6 成绩查询); printf(n 7 退出);int reads(struct student stuN) / 读取学生文件中的内容 FILE *fp; int i=0; if(fp=fopen(e:student.txt,r)=NULL) printf(文件打开失败!n); return 0; else for(i=0;!feof(fp);i+) fscanf(fp,%s %s %f %f %fn,stui.num,,&stui.english,&puter,&stui.math); fclose(fp); return i;void save(struct student stuN,int n) / 学生信息改变后更新文件FILE *fp; int i=0; if(fp=fopen(e:student.txt,w)=NULL) printf(文件打开失败!n); return ; else for(i=0;in;i+) fprintf(fp,%s %s %f %f %fn,stui.num,,stui.english,puter,stui.math); fclose(fp);void add()/*添加学生信息*/FILE *fp; int n,i; struct student stu; if(fp=fopen(e:student.txt,a)=NULL) /如果文件已经存在,可以追加学生信息 if(fp=fopen(e:student.txt,w)=NULL) / 文件不存在时,创建新文件,输入学生信息 printf(文件打开失败!n); return; printf(请输入要添加的学生数量,按回车键确认:); scanf(%d,&n); for(i=1;i=n;i+) printf(n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:n,i); scanf(%s%s,stu.num,); printf(n请输入第%d个学生的英语、计算机和数学三门成绩,用空格分开,并按回车键确认:n,i); scanf(%f%f%f,&stu.english,&puter,&stu.math); fprintf(fp,%s %s %f %f %fn,stu.num,,stu.english,puter,stu.math); fclose(fp);void show() / 学生信息显示函数struct student stuN; int i,n; n=reads(stu); printf(*所有的学生信息如下*nn);printf( 序号 学号 姓名 英语 计算机 数学 n); printf(*n); for(i=0;in;i+)printf(n%3d%12s%11s%11.2f%11.2f%11.2fn,i+1,stui.num,,stui.english,puter,stui.math); getch();void del() /*学生信息删除函数*/struct student stuN; char number20; int n,i,j; n=reads(stu); printf(n请输入要删除信息的学生学号,按回车键确认:); scanf(%s,number); for(i=0;i=n)printf(没有找到该学生信息!n); return; elsefor(j=i+1;jn;j+) stuj-1=stuj; save(stu,n-1); printf(删除成功!n);void change() /学生信息更改struct student stuN; int n,i;char number20; printf(n请输入要更改信息的学生学号,按回车键确认:); scanf(%s,number); n=reads(stu); for(i=0;i=n)printf(无此学生信息!); return; printf(n请输入更改后学生的学号,姓名,英语、计算机、数学三门成绩,按回车键确认:n); scanf(%s%s%f%f%f,stui.num,,&stui.english,&puter,&stui.math); save(stu,n);void sort() / 按总成绩排序 struct student stuN,temp; int i,j,n; n=reads(stu); for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(stuj.english+puter+stuj.mathstuj+1.english+stuj+1.computer+stuj+1.math) temp=stuj; stuj=stuj+1; stuj+1=temp; save(stu,n);j=1;printf(*总成绩排序结果如下*nn);printf( 名次 学号 姓名 英语 计算机 数学 总成绩 n); printf(*n); for(i=0;in;i+) /

温馨提示

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

评论

0/150

提交评论