C语言程序设计学生成绩记录簿设计_第1页
C语言程序设计学生成绩记录簿设计_第2页
C语言程序设计学生成绩记录簿设计_第3页
C语言程序设计学生成绩记录簿设计_第4页
C语言程序设计学生成绩记录簿设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计报告书学生成绩记录簿设计班 级: 0953-1学 号: 20097268姓 名: 赵文龙指导老师: 杨 子 光石家庄铁道大学四方学院2010年7月11日课程设计报告内容1. 选择题目题目:学生成绩记录薄设计2. 内容摘要摘要:本系统实现学生成绩信息的管理与查询,程序具有包括学生信息查询,如姓名,c语言成绩,成绩分段查看等;同时可以c语言成绩信息以及学生情况进行修改,删除和添加。另外还要做到可以对学生成绩信息以及成绩信息查询和维护。程序应具有以下编程思想:1.各模块间通过菜单切换和调用2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。3.程序能够保证各模块

2、功能的独立和数据共享。/*不使用全局变量则能保证函数之间的独立性,利用形参与实参之间的数值传递来实现数据共享*/4.相近功能以级联菜单的形式集成。5.本模块由创建文件以磁盘文件的形式保存。3. 索引关键词关键词:管理与查询,信息链表,信息维护。目 录1.题目要求 042.设计思想 043.系统完成功能及框图 044.界面设计 055.核心算法及说明 176.结论 197.参考资料 198.后记 209.附录 205.正文第一部分:题目要求编制一个c语言成绩记录簿,每个学生信息包括:学号、姓名、c语言成绩。具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的成绩;

3、(3)按学号或姓名查询成绩;(4)添加成绩记录;(5)修改指定姓名或学号的学生的成绩并可存盘;(6)显示输出60分以下、6079、8089、90分以上各分数段的学生信息(可选)第二部分:设计思想1分析程序的功能要求,划分程序功能模块。 2. 画出系统流程图。 3. 代码的编写。定义数据结构和各个功能子函数。 4. 程序的功能调试。 5. 完成系统总结报告以及使用说明书 第三部分:系统完成功能及框图1.学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息2.信息查询时可实现按姓名查询、按学号查询3.输入任意的一个学生名字(如花花)

4、或一个学号(如20097268),统计出在此学生的成绩情况。框图:学生成绩记录簿*1. 成绩录入2. 查询3. 修改4. 增加5. 显示6. 统计7. 删除0. 退出*主模块学生成绩录入学生成绩添加添加学生信息删除学生信息学生信息查询学生成绩显示学生成绩删除学生信息统计修改学生信息按学号删除按成绩删除学生优秀人数退出程序不及格的人数及格的人数按姓名查询按学号查询第四部分:界面设计#include #include #include #include #define n 20typedef struct char name10; int num; float c;stu;/菜单void menu

5、() /*便于操作员使用*/ /*清屏*/ system(cls); printf(nnnnttt 学生平时成绩管理n); printf(ttt=n); printf(ttt 1.成绩录入n); printf(ttt 2.查询n); printf(ttt 3.修改n); printf(ttt 4.插入n); printf(ttt 5.显示n); printf(ttt 6.统计n); printf(ttt 7.删除n); printf(ttt 0.退出n); printf(ttt=n); printf(ttt请选择相应的功能:);/成绩录入void input() file *fp; stu x

6、s; /*定义一个结构体变量来装从文件中读出来的数据*/ if(fp=fopen(student.dat,ab)=null) printf(cant open file!n);exit(0); printf(n录入格式: 姓名 学号 c语言 当输入姓名为ps结束录入n); while(1) /*中间加油break,可使循环中断*/ scanf(%s,); if(strcmp(,ps)=0) break;/*判断姓名是否为ps,用字符串判断*/ scanf(%d%f,&xs.num,&xs.c); fwrite(&xs,sizeof(stu),1,fp); /将成绩信

7、息写入文件 fclose(fp);/姓名定义void xingming() file *fp; stu xs; char name10; printf(n输入要查学生的姓名: );scanf(%s,name); if(fp=fopen(student.dat,rb)=null) printf(cant open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(,name)=0)/*按姓名查询时判断输入的姓名是否存在,会循环从数据中找取*/ printf( 学生的信息如下:n); pri

8、ntf(n%10s %6s %6s n,姓名,学号,c语言); printf(%10s %6d %6.2f n,,xs.num,xs.c); break; if(feof(fp) printf(查找失败!); /*学生不存在*/ fclose(fp);/学号定义void xuehao() file *fp; stu xs; int num; printf(n输入要查学生的学号: );scanf(%d,&num); if(fp=fopen(student.dat,rb)=null) printf(cant open file!n);exit(0); while(!feof(fp)

9、fread(&xs,sizeof(stu),1,fp); if(xs.num=num)/*按学号查询时判断输入的学号是否存在,会循环从数据中找取*/ printf( 学生的信息如下:n); printf(n%10s %6s %6s n,姓名,学号,c语言); printf(%10s %6d %6.2f n,,xs.num,xs.c); break; if(feof(fp) printf(查找失败!); fclose(fp);/查询void search() char ch1; system(cls); printf(请输入按何种方式查询:n); printf(1-姓名,2-学号:

10、); ch1=getchar();/*用字符接收*/ switch(ch1)/*判断*/ case 1:xingming();break; case 2:xuehao();break; getch();/*让屏幕停留同时按任意键返回*/修改:输入学生的姓名,查找该学生,若找到则修改该生的成绩信息,并显示修改前后的结果;void modi1() stu xs; file *fp; char name10; system(cls); printf(n输入要查学生的姓名: );scanf(%s,name); if(fp=fopen(student.dat,rb+)=null) printf(cant

11、 open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(,name)=0)/*判断输入要修改的姓名是否存在*/ printf( 修改前学生的信息如下:n); printf(n%10s %6s %6s n,姓名,学号,c语言); printf(%10s %6d %6.2f n,,xs.num,xs.c); printf(n请输入该生的c语言成绩:);scanf(%f,&xs.c); break; if(!feof(fp) printf( n 修改后的学生的信息如下:n)

12、; printf(n%10s %6s %6s n,姓名,学号,c语言); printf(%10s %6d %6.2f n,,xs.num,xs.c); fseek(fp,-sizeof(stu),1);/*负号表示后退,1表示文件当前位置*/ fwrite(&xs,sizeof(stu),1,fp);/*再写入,同时把要修改的那个覆盖掉*/ else printf(n学生不存在,修改失败!); fclose(fp); getch();/修改:输入学生的学号,查找该学生,若找到则修改该生的成绩信息,并显示修改前后的结果;void modi2() stu xs; file *fp;

13、int num; system(cls); printf(n输入要查学生的学号: );scanf(%d,&num); if(fp=fopen(student.dat,rb+)=null) printf(cant open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(xs.num=num)/*判断输入要修改的姓名是否存在*/ printf( 修改前学生的信息如下:n); printf(n%10s %6s %6s n,姓名,学号,c语言); printf(%10s %6d %6.2f n,,xs.n

14、um,xs.c); printf(n请输入该生的c语言成绩:);scanf(%f,&xs.c); break; if(!feof(fp) printf( n 修改后的学生的信息如下:n); printf(n%10s %6s %6s n,姓名,学号,c语言); printf(%10s %6d %6.2f n,,xs.num,xs.c); fseek(fp,-sizeof(stu),1);/*负号表示后退,1表示文件当前位置*/ fwrite(&xs,sizeof(stu),1,fp);/*再写入,同时把要修改的那个覆盖掉*/ else printf(n学生不存在,修改失败!); f

15、close(fp); getch();/修改void search1() char ch1; system(cls); printf(请输入按何种方式修改:n); printf(1-姓名,2-学号:); ch1=getchar();/*用字符接收*/ switch(ch1)/*判断*/ case 1:modi1();break; case 2:modi2();break; getch();/*让屏幕停留同时按任意键返回*/插入:输入学生的平时的各项成绩,插入到指定位置;当指定的位置超出范围时,将其插入到全班的最后,并显示插入成功后的结果。void insert() int i=0,j,k,le

16、nth; file *fp; stu s,xsn; system(cls); printf(n请输入插入的学生的姓名:);scanf(%s,&); printf(n学生的学号:);scanf(%d,&s.num); printf(n学生的c成绩:);scanf(%f,&s.c); printf(n插入位置:);scanf(%d,&k);/ i=0; if(fp=fopen(student.dat,rb)=null) printf(cant open file!n);exit(0); while(!feof(fp) fread(&xsi,sizeof(stu),1,fp);/*把数据

17、读入到结构体数组中*/ if(feof(fp) break; i+; fclose(fp); lenth=i; if(k=0)/*k的位置要位于数组范围之内*/ /插入 for(j=lenth-1;j=k;j-) xsj+1=xsj;/*一开始j是最大的,往后移一个这样移动避免数据被覆盖*/ /*循环是只循环这一句的*/ xsk=s;/*将输入的学生信息加入这个k位置*/ lenth+;/*长度+1*/ /写回 if(fp=fopen(student.dat,wb)=null) printf(不能建立文件!n);exit(0); for(i=0;ilenth;i+) fwrite(&xsi,s

18、izeof(stu),1,fp); else/*不再数组范围之内*/ if(fp=fopen(student.dat,ab)=null) printf(不能建立文件!n);exit(0); fwrite(&s,sizeof(stu),1,fp); fclose(fp);/显示void print() file *fp; stu s; system(cls); if(fp=fopen(student.dat,rb)=null) printf(cant open file!n);exit(0); printf(n%10s %s %6s n,姓名,学号,c语言); while(!feof(fp) f

19、read(&s,sizeof(stu),1,fp);/从文件中读取成绩信息 if(feof(fp) break;/判断是否文件尾 printf(%10s %6d %6.2f n,,s.num,s.c ); fclose(fp); getch();/统计void tongji() int i=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u; file *fp; stu sn, *p1n,*p2n,*p3n,*p4n;/*用指针数组*/ system(cls); if(fp=fopen(student.dat,rb)=null) printf(cantt open file

20、!n);exit(0); while(!feof(fp) fread(&si+,sizeof(stu),1,fp);/*读入数据*/ if(feof(fp) break; t=i;i=0; for(u=0;ut;u+)/*以下每个指针数组用于指向各分数段的学生信息*/ if(si.c=60&si.c=80&si.c=90) p4m+=&si+;continue; printf(不及格:姓名 学号 c语言n); for(n=0;nname,p1n-num,p1n-c); printf( 60-79:姓名 学号 c语言n); for(p=0;pname,p2p-num,p2p-c); printf

21、( 80-89:姓名 学号 c语言n); for(q=0;qname,p3q-num,p3q-c); printf(90以上:姓名 学号 c语言n); for(r=0;rname,p4r-num,p4r-c); fclose(fp); getch();/删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息void dele1() stu xsn; file *fp; char name10; int i=0,len,k=-1/*k=0)/*k0说明找到删除学生位置*/ if(fp=fopen(student.dat,wb+)=null) printf(cant open f

22、ile!n);exit(0); for(i=0;ilen;i+) if(i=k) continue;/*从这个位置开始写入*/ fwrite(&xsi,sizeof(stu),1,fp); fclose(fp); else printf(删除失败!n);getch(); /*失败后重新返回菜单*/ print();/删除:输入学生学号,若该学生存在,则删除,并显示删除后余下的学生成绩信息void dele2() stu xsn; file *fp; int num; int i=0,len,k=-1/*k=0)/*k0说明找到删除学生位置*/ if(fp=fopen(student.dat,w

23、b+)=null) printf(cant open file!n);exit(0); for(i=0;ilen;i+) if(i=k) continue;/*从这个位置开始写入*/ fwrite(&xsi,sizeof(stu),1,fp); fclose(fp); else printf(删除失败!n);getch(); /*失败后重新返回菜单*/ print();/删除void search11() char ch1; system(cls); printf(请输入按何种方式删除:n); printf(1-姓名,2-学号:); ch1=getchar();/*用字符接收*/ switch

24、(ch1)/*判断*/ case 1:dele1();break; case 2:dele2();break; getch();/*让屏幕停留同时按任意键返回*/菜单选择void main() char ch; while(1) menu();/ 显示菜单 ch=getch();/选择菜单 if(ch=0) break; switch(ch)/判断功能项 case 1:input();break; case 2:search();break; case 3:search1();break; case 4:insert();break; case 5:print( );break; case 6

25、:tongji();break; case 7:search11();break; printf(n欢迎使用!n);第五部分:核心算法及说明1.忽略了“=”与“=”的区别。 在许多高级语言中,用“=”符号作为关系运算符“等于”。如在basic程序中可以写 if (a=3) then 但c语言中,“=”是赋值运算符,“=”是关系运算符。如: if (a=3) a=b; 前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。2.忘记加分号。 分号是c语句中不可缺少的一部分,语句末尾必须有分号。 a=1 b=2 编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上

26、一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。 如: int i=0,n; stu xsn; file *fp; if(fp=fopen(student.dat,rb+)=null) printf(cant open file!n);exit(0);对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和pascal不同的)。 3.多加分号。 对于一个复合语句,如: z=x+y; t=z/100; printf(%f,t); ; 复合语句的花括号后不应再加分号,否则将会画蛇添足。4. 输入变量时忘记加地址运算符“&”。

27、 scanf(%d%f%f%f,&xs.num,&xs.yuwen,&xs.math,&xs.english);这是不合法的。scanf函数的作用是:按照xs.num,xs.yuwen,xs.math,xs.english在内存的地址将xs.num,xs.yuwen,xs.math,xs.english的值存进去。“&xs.num”指xs.num在内存中的地址。 6.输入数据的方式与要求不符。scanf(%d%d,&a,&b); 输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法: 3,4 输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。 scanf(%d,%d,&a,&b); c规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符

温馨提示

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

评论

0/150

提交评论