1、课程设计(大作业)汇报课程名称:程序设计基础 设计题目:学生成绩统计薄设计 院 系:信息技术学院 班 级:设 计 者: 学 号: 指导老师: 设计时间:.7 8.-.7.13 信息技术学院昆明学院课程设计(大作业)任务书姓 名: 院(系):信息技术学院专 业:计算机科学和技术 学 号:任务起止日期:.7 .8-.7.13 课程设计题目:学生成绩统计薄设计 课程设计要求:(1) 经过课程设计,深入掌握C语言语法结构,基础步骤,愈加深入和全方面了解所学基础概念、基础原理和基础方法。(2) 独立实践机会,将书本上理论知识和实际有机结合起来,锻炼学生分析处理实际问题能力。提升程序编制、程序调试及综合应
2、用能力(3)明确课程设计目标,经过部署含有一定难度,能综合利用所学知识程序设计题目。(4)程序设计经过需求分析,明确程序设计题目要求,进行合理设计,编码阶段编出程序易读、易懂并含有良好交互性,界面清楚。测试阶段应指导学生编写测试用例,尽可能多地找出程序中错误,进行调试。工作计划及安排: 第一天,两个人合作选定题目,建立起程序构思图形,了解题目意思,确立程序方向,而且查阅部分资料开始构建程序。 第二天,两人商议分工合作,确定谁写那段函数,而且在总体思绪框架下,逐步写程序,并确确保程序无误。 第三天,将小程序合并,进行调试,对里面出现问题协商合作共同处理。 第四天,开始写试验汇报,对每次失败原因进
3、行总结,而且整合两人思想纂写汇报。 第五天,实训课也靠近尾声,和班上同学交流心得体会。指导老师签字 7 月 8日 课程设计(大作业)成绩学号: 姓名: 指导老师:课程设计题目: 学生成绩统计薄设计总结:经过一周C语言课程设计,不仅增加了我对C语言学习爱好,还让我对C语言有了更深了解。在这次实训中,我们经过自己动手查找资料,并自己设计程序,还上机运行验证我们程序。即使在上机调试过程中,我碰到了很多困难,(比如:极难了解部分逻辑思维上东西)但经过自己不停重新了解和修正,最终还是成功完成了程序设计。那种喜悦感难以用言语来表示,这让我感觉到学习也能够是愉快。在这次设计我不单单学习到了C语言知识,也学到
4、了很多计算机应用基础知识,对计算机机体也有了一个大致了解。有很多知识,光靠老师上课所讲和自己看书得到,还远远不够,C语言关键是经过上机来熟悉而且利用,这次实训课让我深刻明白了这一点。所以在以后学习生活中,我要常常写程序并上机进行调试,不停从中学习新知识。还有一点就是:不懂就问。碰到难题实在处理不了,问老师同学,和同学共同讨论,有合作精神也是很关键。期望以后还有更多实训机会,让我得到锻炼。指导老师评语:成绩:填表时间:指导老师署名学生成绩统计薄设计一、课程设计目标和要求1.课程设计目标(1)综合利用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单信息管理程序设计
5、。(2)充足表现和体会函数在程序设计中必需性和实用性,并反应主函数main()在程序设计中实现思绪和方法。2. 课程设计要求 设计一个简易学生成绩统计簿设计,其中包含:姓名,学号,C语言成绩; 具体功效: 1系统以菜单方法工作 2. 创建学生成绩信息并以磁盘文件保留; 3. 读取磁盘文件并显示输出全部学生成绩; 4. 查询学生成绩 (1)按学号查询成绩 (2)学号姓名查询成绩 5添加成绩统计; 6修改指定姓名或学号学生成绩并可存盘; 7显示输出60分以下、6079、8089、90分以上各分数段学生信息。二、 总体设计依据系统要求,系统总体设计图1所表示。读取并显示全部成绩学号查询成绩成绩姓名查
6、询成绩添加成绩统计修改学生成绩结束程序学生信息输入 学生成绩统计薄图1 系统总体结构三、具体设计1、数据结构设计#include#include#include#includeint n=4;struct studentint num; /*学号*/char name10; /*姓名*/float score3; /*成绩*/2函数说明1.主函数main()许可用户经过菜单进行功效选择,使用对应功效代码来调用对应函数功效。2.其它部分功效函数包含(1) 将学生成绩信息保留为文件void save(); 算法思想:定义指向文件指针变量;输入保留路径及文件名,打开文件,若不能打开文件给出提醒信息;
7、将存有学生成绩信息结构体数组信息依次保留到文件中。 (2) 学生成绩信息录入函数void input()算法思想:依次录入结构体数组中所包含各个组员;直到输入结构体组员中信息为4,数据输入结束;返回实际录入学生成绩信息数。(3)从文件中读出学生成绩信息void output(); 算法思想:定义指向结构体变量指针和指向文件指针;输入文件路径,打开文件,若不能打开文件给出提醒信息;将文件中信息依次读出,最终结构体指针为NULL。3函数设计(1)主菜单函数main()功效:函数返回值为整数,代表所选菜单项 int main ()printf( * n);printf( n); printf( n)
8、;printf( 欢迎进入学生成绩统计系统 n);printf( n);printf(【1】- 创建学生成绩信息 n); printf( n);printf(【2】- 显示全部学生成绩信息 n); printf( n);printf(【3】- 添加学生成绩信息 n);printf( n);printf(【4】- 查询学生成绩信息 n); printf( n); printf(【5】- 修改学生信息 n); printf( n);printf(【6】- 按分数段显示学生信息 n); printf( n); printf(【0】- 退出 n);printf( n);printf( * n);pri
9、ntf( 请输入对应菜单编号: );(2) 我负责编写程序A.添加学生信息 void Addstudent() FILE *fp;struct student s;fp=fopen(stu.dat,ab); if(fp=fopen(stu.dat,ab)=NULL) printf(File open error!n); else printf(请输入所增加学生 学号 姓名 c语言成绩:n);scanf(%d,&s.num ); scanf(%s,s.name);scanf(%f,&s.score0);fwrite (&s,sizeof(struct student),1,fp);fclose(
10、fp);/*关闭文件*/printf(写入成功!n); /end function Addstudent;B.修改学生成绩void modify() int number,i;printf(请输入要修改信息学生学号:); scanf(%d,&number); for(i=0;in;i+)if(number=studi.num) break;/*查找判定*/ if(in)/*查找判定*/ printf(请输入修改后学生信息:);printf(n请输入学生c语言成绩:); scanf(%f,&studi.score0); save(); else printf(没找到该学生信息n); system
11、(paues);system(cls);C.查询学生成绩void namecheck(void);void scorecheck(void);void searchmenu()printf( * 欢迎进入学生成绩查询系统 * n);printf(* 1-按姓名查询成绩 * n);printf(* 2-按学号查询成绩 * n);printf(* 3-返回上一层 * n);printf(* 4-退出 * n);printf( * n);printf( 请输入对应菜单编号: );int m;scanf(%d,&m);switch(m)case 1: namecheck(); printf(n); s
12、ystem(PAUSE); system(CLS); break;case 2: scorecheck(); printf(n); system(PAUSE); system(CLS); break;case 3: main();break;case 4: exit(0); break;void namecheck() char name10;printf(根据姓名查询请按n);printf(n请输入姓名:);scanf(%s,&name);printf(查询结果n);printf(学号 姓名 c语言成绩n);if(strcpy(studi.name,name) printf(%d %s %.
13、2fn,studi.num,studi.name,studi.score0);void scorecheck() int b;printf(根据学号查询请按n);printf(n请输入学号:);scanf(%d,&b);printf(查询结果n);printf(学号 姓名 c语言成绩n);for(i=0;in;i+)if(studi.num =b) printf(%d %s %.2fn,studi.num,studi.name,studi.score0);四、程序清单和实施结果 1.头文件 #include#include#include#includeint n=4;struct stude
14、ntint num; /*学号*/char name10; /*姓名*/float score3; /*成绩*/*以下是函数原型*/ void save(void); void input(void); void output(void); void modify(); /*修改信息*/void searchmenu(void); /*查询信息*/ void namecheck(void); /*按姓名查询*/ void scorecheck(void); /*按学号查询*/ void Addstudent(); /*添加信息*/void sclsearch(); /*成绩按分数段显示*/2.
15、 函数源程序代码和运行结果1函数源程序代码#include#include#include#includeint n=4;struct studentint num;char name10;float score3;stud100;int i,choose,a,t=0;long int num;int main () void save(void);void input(void);void output(void); void modify();void searchmenu(void);void Addstudent();void sclsearch();while(1)printf( *
16、 n);printf( n);printf( n);printf( 欢迎进入学生成绩统计系统 n);printf( n);printf( 【1】- 创建学生成绩信息 n); printf( n);printf( 【2】- 显示全部学生成绩信息 n); printf( n);printf( 【3】- 添加学生成绩信息 n);printf( n);printf( 【4】- 查询学生成绩信息 n); printf( n); printf( 【5】- 修改学生信息 n); printf( n);printf( 【6】- 按分数段显示学生信息 n); printf( n); printf( 【0】- 退
17、出 n);printf( n);printf( * n);printf( 请输入对应菜单编号: );scanf(%d,&a);switch(a)case 1:input(); save();break;case 2:output();printf(n);system(PAUSE);system(CLS);break; case 3:Addstudent();printf(n); system(PAUSE);system(CLS); break;case 4:searchmenu();printf(n);system(PAUSE);system(CLS);break;case 5:modify(
18、);printf(n);system(PAUSE);system(CLS);break;case 6:sclsearch();printf(n); system(PAUSE);system(CLS); break;case 0:exit(0);default: ;return 0;void save()FILE *fp;if (fp=fopen(stu.dat,wb)=NULL)/*以只写方法打开文件*/printf(无法打开文件!n);return ;for(i=0;in;i+)if (fwrite (&studi,sizeof(struct student),1,fp)!=1)/*写入字节
19、为1信息在文件中*/printf(文件写入错误!n);fclose(fp);/*关闭文件*/void input()/录入学生成绩int i;char a;for(i=0;in;i+) printf(n 请输入学生成绩信息:n); printf(n请依次输入 学号、姓名、c语言成绩:n); scanf(%d%s%f,&studi.num,studi.name,&studi.score0); printf(输入:y(继续),n(终止)!n);fflush(stdin);scanf(%c,&a);if(a=n | a=N)break;n=i+1;void Addstudent() FILE *fp
20、;struct student s;fp=fopen(stu.dat,ab); if(fp=fopen(stu.dat,ab)=NULL) printf(File open error!n); else printf(请输入所增加学生 学号 姓名 c语言成绩:n);scanf(%d,&s.num ); scanf(%s,s.name);scanf(%f,&s.score0);fwrite (&s,sizeof(struct student),1,fp);fclose(fp);/*关闭文件*/printf(写入成功!n); /end function Addstudent;void output
21、()int i;/float s;FILE *fp; if(fp=fopen(stu.dat,rb)=NULL)printf(cannot open filen);exit(0);printf(n学号 姓名 c语言成绩n);for(i=0;fread(&studi,sizeof(struct student),1,fp)=1;i+)printf(%d %10s % 10.2fn,studi.num,studi.name,studi.score0);fclose(fp);n=i;void modify() int number,i;printf(请输入要修改信息学生学号:); scanf(%d,
22、&number); for(i=0;in;i+)if(number=studi.num) break;/*查找判定*/ if(in)/*查找判定*/ printf(请输入修改后学生信息:);printf(n请输入学生c语言成绩:); scanf(%f,&studi.score0); save(); else printf(没找到该学生信息n); system(paues);system(cls);void namecheck(void);void scorecheck(void);void searchmenu()printf( * 欢迎进入学生成绩查询系统 * n);printf(* 1-按
23、姓名查询成绩 * n);printf(* 2-按学号查询成绩 * n);printf(* 3-返回上一层 * n);printf(* 4-退出 * n);printf( * n);printf( 请输入对应菜单编号: );int m;scanf(%d,&m);switch(m)case 1: namecheck(); printf(n); system(PAUSE); system(CLS); break;case 2: scorecheck(); printf(n); system(PAUSE); system(CLS); break;case 3: main();break;case 4:
24、 exit(0); break;void namecheck() char name10;printf(根据姓名查询请按n);printf(n请输入姓名:);scanf(%s,&name);printf(查询结果n);printf(学号 姓名 c语言成绩n);if(strcpy(studi.name,name) printf(%d %s %.2fn,studi.num,studi.name,studi.score0);void scorecheck() int b;printf(根据学号查询请按n);printf(n请输入学号:);scanf(%d,&b);printf(查询结果n);prin
25、tf(学号 姓名 c语言成绩n);for(i=0;in;i+)if(studi.num =b) printf(%d %s %.2fn,studi.num,studi.name,studi.score0);void sclsearch()int i;printf(90分以上:n); printf(学号 姓名 c语言成绩n);for(i=0;i=90) printf(%d %s %.2fn,studi.num,studi.name,studi.score0);printf(8089:n); printf(学号 姓名 c语言成绩n);for(i=0;i=80&studi.score090) prin
26、tf(%d %s %.2fn,studi.num,studi.name,studi.score0);printf(7079:n); printf(学号 姓名 c语言成绩n);for(i=0;i=70&studi.score080) printf(%d %s %.2fn,studi.num,studi.name,studi.score0);printf(6069:n); printf(学号 姓名 c语言成绩n);for(i=0;i=60&studi.score070) printf(%d %s %.2fn,studi.num,studi.name,studi.score0);printf(60分
27、以下:n); printf(学号 姓名 c语言成绩n);for(i=0;in;i+)if(studi.score060) printf(%d %s %.2fn,studi.num,studi.name,studi.score0);(1)系统以菜单方法工作(2)学生成绩录入(3)显示全部学生成绩(4)查询学生成绩按姓名查询按学号查询(5)修改学生成绩(6)按分数段显示学生成绩五、调试和测试我在调试我编写程序当中出现了很多问题,比如,按姓名查询学生成绩中if(strcpy(studi.name,name),开始我写成了studi.name=name,怎么改全部有错误,无奈之下请教了同学,最终在同学
28、帮助下改对了,原来这需要使用strcpy函数才能实现。能够说出问题还是蛮多。好不轻易改对了一个,有出现了新错误,就是输入姓名后,全部学生成绩全部显示了,还把其它学生姓名改成了我输入那个,最终人真检验了一遍才发觉多谢了一条语句for(i=0;in;i+)。这些问题还是给我留下了很深映象,也提醒了我基础知识不扎实警钟,所以期末考试之前我一定要好好复习了!六、 结语经过一周C语言课程设计,不仅使我们愈加牢靠地掌握了程序设计知识,也让自己深刻认识到自己不足和缺点,有很多知识全部存在不是完全了解及掌握,这一系列问题经过自己上机操作已经降低了很多。这我明白光靠书本上学习和老师讲是不够,有很多知识是需要我们
29、去实践才能学到(比如:在调试过程中我发觉自己在编程这方面缺点和不足)这不停完善了自己,也不停丰富了自己对于C语言了解和掌握。而且这让自己明白和体会到了C语言其实含有语句简练,使用灵活,实施效率高等特点。和此同时,还让我明白了不懂就问关键性。现在我们总是太过于要面子,羞于问她人,总认为这个问题会不会太白痴了,她人会不会嘲笑我。其实这些只是我们自己想太多了而已,老师和同学全部很热情,她们全部很愿意教我们。有团体合作精神也很关键,有些问题光靠自己力量做太过于单薄,团体合作显得尤为关键。在这次合作中,我从同伴身上学到了很多自己身上缺乏优点,比如细心,我做事有些太过于粗心,总是在部分小地方不够认真,使程序出现了很多小错误,幸好在同伴帮助顺利处理了这些问题。总而言之,上机实训能够让我们经过实际操作,愈加深刻学会 C语言程序编程基础步骤、基础方法。也增强了自己动手和实践能力。期望以后多部分这么实训,让我不停地提升。