课程设计(大作业)报告课程名称:程序设计基础设计题目:学生成绩记录薄设计院系:信息技术学院班级:设计者:学号:指导教师:设计时间: 2013.7 8.-2013.7.13信息技术学院昆明学院课程设计(大作业)任务书姓名:院(系):信息技术学院专业:计算机科学与技术学号:任务起止日期:2013.7 .8-2013.7.13课程设计题目:学生成绩记录薄设计课程设计要求:(1)通过课程设计,进一步掌握 C 语言的语法结构,基本流程,更加深入和全面理解所学的基本概念、基本原理和基本方法。
(2)独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高程序编制、程序调试及综合应用的能力(3)明确课程设计的目的,通过布置具有一定难度的,能综合运用所学知识的程序设计题目。
(4)程序设计经过需求分析,明确程序设计题目要求,进行合理的设计,编码阶段编出的程序易读、易懂并具有良好的交互性,界面清晰。
测试阶段应指导学生编写测试用例,尽量多地找出程序中的错误,进行调试。
工作计划及安排:第一天的,两个人合作选定题目,建立起程序的构思图形,了解题目意思,确立程序的方向,并且查阅一些资料开始构建程序。
第二天,两人商量分工合作,确定谁写那段函数,并且在总体思路的框架下,逐步写程序,并确保证程序无误。
第三天,将小程序合并,进行调试,对里面出现的问题协商合作共同解决。
第四天,开始写实验报告,对每次失败原因进行总结,并且整合两人思想纂写报告。
第五天,实训课也接近尾声,和班上的同学交流心得体会。
指导教师签字2013年7 月8日课程设计(大作业)成绩学号:姓名:指导教师:课程设计题目:学生成绩记录薄设计总结:通过一周 C 语言课程设计,不仅增加了我对 C 语言学习的兴趣,还让我对 C 语言有了更深的了解。
在这次的实训中,我们通过自己动手查找资料,并自己设计程序,还上机运行验证我们的程序。
虽然在上机调试过程中,我遇到了很多的困难,(比如:很难理解一些逻辑思维上的东西)但通过自己不断的重新理解和修正,最终还是成功的完成了程序的设计。
那种喜悦感难以用言语来表达,这让我感觉到学习也可以是快乐的。
在这次设计我不单单学习到了 C 语言的知识,也学到了许多计算机应用基础知识,对计算机的机体也有了一个大体的了解。
有许多知识,光靠老师上课所讲的和自己看书得到的,还远远不够, C 语言主要是通过上机来熟悉并且运用的,这次的实训课让我深刻的明白了这一点。
所以在以后的学习生活中,我要经常写程序并上机进行调试,不断从中学习新的知识。
还有一点就是:不懂就问。
遇到难题实在解决不了的,问老师同学,和同学共同讨论,有合作精神也是很重要的。
希望以后还有更多的实训机会,让我得到锻炼。
指导教师评语:成绩:填表时间:指导教师签名学生成绩记录薄设计一、课程设计目的与要求1.课程设计目的(1)综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单的信息管理程序的设计。
(2)充分体现和体会函数在程序设计中的必要性和实用性,并反映主函数main ()在程序设计中的实现思路和方法。
2.课程设计要求设计一个简易学生成绩记录簿设计,其中包括:姓名,学号, C 语言成绩;具体功能:1 .系统以菜单方式工作2.创建学生成绩信息并以磁盘文件保存;3.读取磁盘文件并显示输出所有学生的成绩;4.查询学生成绩( 1)按学号查询成绩( 2)学号姓名查询成绩5.添加成绩记录;6.修改指定姓名或学号的学生的成绩并可存盘;7.显示输出 60 分以下、 60~79、 80~89、 90 分以上各分数段的学生信息。
二、总体设计根据系统的要求,系统总体设计如图 1 所示。
学生成绩记录薄学读学姓添修结生取号名加改束信并查查成学程息显询询绩生序输示成成记成入所绩绩录绩有成成绩绩三、详细设计1、数据结构设计#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>int n=4;struct student{int num;/* 学号 */char name[10];/* 姓名 */float score[3];/* 成绩 */}2.函数说明1.主函数main() 允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。
2.其他部分功能函数包括(1) 将学生成绩信息保存为文件void save();算法思想:①定义指向文件的指针变量;②输入保存路径及文件名,打开文件,若不能打开文件给出提示信息;③将存有学生成绩信息的结构体数组信息依次保存到文件中。
(2 )学生成绩信息录入函数void input()算法思想:①依次录入结构体数组中所包含的各个成员;②直到输入的结构体成员中信息为4,数据输入结束;③返回实际录入的学生成绩信息数。
(3) 从文件中读出学生成绩信息void output();算法思想:①定义指向结构体变量的指针和指向文件的指针;②输入文件的路径,打开文件,若不能打开文件给出提示信息;③将文件中的信息依次读出,最后结构体的指针为NULL 。
3.函数设计(1)主菜单函数 main()功能:函数返回值为整数,代表所选的菜单项int main (){printf("********************************************************* \n");printf("§§\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】-------------------------- 退出§\n");printf("§§\n");printf("*********************************************************\n");printf("请输入相应菜单编号 :");}(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");{printf(" 请输入所增加学生的学号姓名 c 语言成绩: \n");scanf("%d",&s.num );scanf("%s",);scanf("%f",&s.score[0]);fwrite (&s,sizeof(struct student),1,fp);fclose(fp);/* 关闭文件 */}printf(" 写入成功 !\n");}//end function Addstudent;B.修改学生成绩void modify(){int number,i;printf(" 请输入要修改信息的学生学号:");scanf("%d",&number);for(i=0;i<n;i++)if(number==stud[i].num)break;/* 查找判断 */if(i<n)/* 查找判断 */{printf(" 请输入修改后的学生的信息:");printf("\n请输入学生的 c 语言成绩: ");scanf("%f",&stud[i].score[0]);save();}elseprintf(" 没找到该学生的信息\n");system("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");system("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 name[10];printf(" 按照姓名查询请按\n");printf("\n 请输入姓名 :");scanf("%s",&name);printf(" 查询结果 \n");printf(" 学号姓名 c 语言成绩 \n");if(strcpy(stud[i].name,name)){printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}}void scorecheck(){int b;printf(" 按照学号查询请按\n");{printf("\n 请输入学号 :");scanf("%d",&b);printf(" 查询结果 \n");printf(" 学号姓名 c 语言成绩 \n");for(i=0;i<n;i++)if(stud[i].num ==b){printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}}}四、程序清单和执行结果1.头文件#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>int n=4;struct student{int num;/* 学号 */char name[10];/* 姓名 */float score[3];/* 成绩 *//****** 以下是函数原型*******/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.函数源程序代码与运行结果[1]函数源程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>int n=4;struct student{int num;char name[10];float score[3];}stud[100];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("********************************************************* \n");printf("§§\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】--------------------------退出§ \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();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;i<n;i++)if (fwrite (&stud[i],sizeof(struct student),1,fp)!=1)/*写入字节为 1 的信息在文件中*/ printf(" 文件写入错误!\n");fclose(fp);/* 关闭文件 */}void input()// 录入学生成绩{int i;char a;for(i=0;i<n;i++){printf("\n请输入学生成绩信息:\n");printf("\n 请依次输入学号、姓名、 c 语言成绩 :\n");scanf("%d%s%f",&stud[i].num,stud[i].name,&stud[i].score[0]);printf(" 输入: y(继续 ), n(终止 )!\n");fflush(stdin);scanf("%c",&a);if(a=='n' || a=='N')break;}n=i+1;}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",);scanf("%f",&s.score[0]);fwrite (&s,sizeof(struct student),1,fp);fclose(fp);/* 关闭文件 */}printf(" 写入成功 !\n");}//end function Addstudent;void output(){int i;//float s;FILE *fp;if((fp=fopen("stu.dat","rb"))==NULL){printf("cannot open file\n");exit(0);}printf("\n 学号姓名 c 语言成绩 \n");for(i=0;fread(&stud[i],sizeof(struct student),1,fp)==1;i++){printf("%d%10s%10.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); }fclose(fp);n=i;}void modify(){int number,i;printf(" 请输入要修改信息的学生学号:");scanf("%d",&number);for(i=0;i<n;i++)if(number==stud[i].num)break;/* 查找判断 */if(i<n)/* 查找判断 */{printf(" 请输入修改后的学生的信息:");printf("\n请输入学生的 c 语言成绩: ");scanf("%f",&stud[i].score[0]);save();}elseprintf(" 没找到该学生的信息\n");system("paues");system("cls");}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");system("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 name[10];printf(" 按照姓名查询请按\n");printf("\n 请输入姓名 :");scanf("%s",&name);printf(" 查询结果 \n");printf(" 学号姓名 c 语言成绩 \n");if(strcpy(stud[i].name,name)){printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}}void scorecheck(){int b;printf(" 按照学号查询请按\n");{printf("\n 请输入学号 :");scanf("%d",&b);printf(" 查询结果 \n");printf(" 学号姓名 c 语言成绩 \n");for(i=0;i<n;i++)if(stud[i].num ==b){printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}}}void sclsearch(){int i;printf("90 分以上 :\n");printf(" 学号姓名 c 语言成绩 \n");for(i=0;i<n;i++){if(stud[i].score[0]>=90)printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}printf("80~89:\n");printf(" 学号姓名 c 语言成绩 \n");for(i=0;i<n;i++){if(stud[i].score[0]>=80&&stud[i].score[0]<90)printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}printf("70~79:\n");printf(" 学号姓名 c 语言成绩 \n");for(i=0;i<n;i++){if(stud[i].score[0]>=70&&stud[i].score[0]<80)printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}printf("60~69:\n");printf(" 学号姓名 c 语言成绩 \n");for(i=0;i<n;i++){if(stud[i].score[0]>=60&&stud[i].score[0]<70)printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}printf("60 分以下 :\n");printf(" 学号姓名 c 语言成绩 \n");for(i=0;i<n;i++){if(stud[i].score[0]<60)printf("%d%s%.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);}}(1)系统以菜单方式工作( 2)学生成绩录入(3)显示所有学生成绩(4)查询学生成绩按姓名查询按学号查询(5)修改学生成绩(6)按分数段显示学生成绩五、调试与测试我在调试我编写的程序当中出现了很多问题,比如,按姓名查询学生成绩中if(strcpy(stud[i].name,name)),开始我写成了 stud[i].name=name,怎么改都有错误,无奈之下请教了同学,最后在同学的帮助下改对了,原来这需要使用strcpy函数才能实现。