资源描述
C语言集中上机实习报告院 系: 光电工程学院班 级: 02111507姓 名: 指导教师: 谢竞博题目: 学生成绩管理系统 2016年 12月8日完成实验报告的正文有七部分,分别是:题目名称:设计思路:包括总体设计和每个模块的算法最初程序代码:调试过程(写明调试过程中出现的所有语法错误和逻辑错误,这是评定成绩的主要依据)最终程序代码:测试结果:(截图)心得体会:下面以一个简单的题目为例:一、题目:学生成绩管理系统二、思路:先定义学生人数和学号和学生姓名和各科成绩变量,再调用函数,最后再输出,系统基本完善。三、最初程序代码:#include #include #include #define NUMOFSTU 10 /* 定义学生人数 */#define NUMOFCOURSE2 /* 定义考试科目 */struct studentint number; /* 每个学生的学号 */charname10; /* 每个学生的姓名 */int scoreNUMOFCOURSE; /* 每个学生M门功课的成绩 */floatsum; /* 每个学生的总成绩 */floataverage; /* 每个学生的平均成绩 */;typedef struct student STU;void PrintScore(STU pt, int n);void InputStudent(STU pt,int n);void Total(STU pt,int n);void Sort(STU pt,int n);int SearchByNumber(STU pt, int n,int number_to_search); int SearchByName(STU pt, int n,char name_to_search); char Menu(void);四、调试过程:出现的提示如下:1.执行 cl.exe 时出错.执行结果:经过对整个程序的排错,发现在过程中,缺少一个结束语。将输出那行改正为:在后面添加 结果正确。2. H:C语言学生成绩管理系统.cpp(135) : error C2143: syntax error : missing ; before 执行 cl.exe 时出错.执行结果:经过排查,发现在if(ptj.sum ptk.sum)k=j; (k!=i) temp = ptk;ptk = pti;自定义变量时,缺少if条件语句,结果导致整个自定义变量发生改变在k=j; (k!=i)前面添加if条件语句结果正确3.调试过程中,在使用按姓名查询时,出现经排查,发现在int SearchByNumber(STU pt, int n,int number_to_search) int i; for (i=0; in; i+)if (pti.number = number_to_search)return i;return i; 返回按姓名查询时,返回值确定错误,误将返回-1写成i导致返回值全部为查询方式将i改为-1之后,调试正常五、最终程序为:#include #include #include #define NUMOFSTU 10 /* 定义学生人数 */#define NUMOFCOURSE2 /* 定义考试科目 */struct studentint number; /* 每个学生的学号 */charname10; /* 每个学生的姓名 */int scoreNUMOFCOURSE; /* 每个学生M门功课的成绩 */floatsum; /* 每个学生的总成绩 */floataverage; /* 每个学生的平均成绩 */;typedef struct student STU;void PrintScore(STU pt, int n);void InputStudent(STU pt,int n);void Total(STU pt,int n);void Sort(STU pt,int n);int SearchByNumber(STU pt, int n,int number_to_search); int SearchByName(STU pt, int n,char name_to_search); char Menu(void); /*函数功能:打印学生的信息,此子程序即可以打印全部学生成绩的信息, 也可以打印个别几个学生的信息函数参数:结构体数组的指针pt,表示要打印的学生的起始地址 整型参数n,表示要打印n个学生成绩函数返回值:无*/void PrintScore(STU pt, int n) int i,j;char string100=0,tempNUMOFCOURSE;strcat(string, Number ); /* 建立表头 */strcat(string, Name );for (i=1; i=NUMOFCOURSE; i+)strcat(string, Score);itoa(i,temp, 10);strcat(string, temp);strcat(string, );strcat(string,sum);strcat(string, average);printf(%s,string); /* 打印表头 */for (i=0; in; i+) /* 打印n个学生的信息 */ printf(nNo.%3d%8s,pti.number, pti.name); for(j=0;jNUMOFCOURSE;j+)printf(%7d,pti.scorej); printf(%8.2f%8.2fn,pti.sum,pti.average); /* 函数功能:从键盘获得学生的信息子程序 函数参数:结构体数组的指针pt,表示要输入的学生信息头 整型变量n,表示要输入的元素的个数 函数返回值:无 */void InputStudent(STU pt,int n) int i,j; for(i=0; in; i+)printf(n 输入学号:);scanf(%d,&pti.number);printf(n 输入名字:);scanf(%s,pti.name); for(j=0; jNUMOFCOURSE; j+)if (j)printf(n 输入高数分数score2:);elseprintf(n 输入英语分数score1:);scanf(%d,&pti.scorej); /* 函数功能:计算每个学生的M门功课的总成绩和平均成绩子模块函数参数:结构体数组的指针pt,表示要输入的学生信息头 整型变量n,表示要处理的元素的个数函数返回值:无*/void Total(STU pt,int n) int i,j;for (i=0; in; i+) pti.sum = 0; for(j=0;jNUMOFCOURSE;j+) pti.sum = pti.sum + pti.scorej; pti.average = pti.sum/NUMOFCOURSE;/* 函数功能:用选择法按总成绩由高到低排序函数参数:结构体数组的指针pt,表示要输入的学生信息头 整型变量n,表示要处理的元素的个数 函数返回值:无*/void Sort(STU pt,int n) int i,j,k;STU temp;for(i=0; in-1; i+)k = i;for(j=i; j ptk.sum)k=j;if(k!=i) temp = ptk;ptk = pti;pti = temp; /* 函数功能:用顺序查找法按学号查找函数参数:结构体数组首地址pt, 整型变量n,表示数组长度, 整型变量 number_to_search,表示要查找的学号函数返回值:如果找到学号,则返回对应下标,否则返回-1*/int SearchByNumber(STU pt, int n,int number_to_search) int i; for (i=0; in; i+)if (pti.number = number_to_search)return i;return -1;/* 函数功能:用顺序查找法按学号查找函数参数:结构体数组首地址pt, 整型变量n,表示数组长度, 字符数组首地址, name_to_search,用来指向要查找的姓名函数返回值:如果找到姓名,则返回对应下标,否则返回-1*/int SearchByName(STU pt, int n,char name_to_search) int i; for (i=0; in; i+)if (strcmp(pti.name , name_to_search)=0)return i;return -1;/* 函数功能:查找并显示查找结果子模块,可按姓名和学号分别查找,找到,显示该元素的信息,如果没查到,也有相应的提示函数参数:结构体数组的指针pt,表示要输入的学生信息头 整型变量n,表示要处理的元素的个数函数返回值:无 */void Find(STU stu,int n)int number,k,choose;char name25;doprintf(请选择:1-按学号查询, 2-按姓名查询:);scanf(%d,&choose);while(!(choose=1 |choose =2);if(choose = 1)printf(请输入学号:);scanf(%d,&number);k = SearchByNumber(stu,n,number);elseprintf(请输入姓名:);scanf(%s,name);k = SearchByName(stu,n, name);if(k=-1)printf(n没有找到对应学生,请重新输入 !n);elsePrintScore(stu+k, 1);/*函数功能:菜单子模块,显示菜单功能并获得键盘选择函数参数:无 函数返回值:输入的键盘ASCII码 */char Menu(void)printf(n 1.输入学生信息n);printf( 2.列出成绩总表n);printf( 3.按平均分排序n);printf( 4.分类查找n);printf( 5.退出n);return getchar();int main() /* 主程序 */printf(n*欢迎使用学生成绩管理系统*n);char ch;STU stuNUMOFSTU;int n;while(1)ch = Menu(); /* 显示菜单 */ switch(ch) case1:printf(请输入学生人数:); scanf(%d,&n);InputStudent(stu,n); /* 调用输入模块 */ Total( stu,n ); break; case2:PrintScore(stu, n); /* 调用列表模块 */ break; case3:Sort(stu,n); /* 调用排序模块 */ printf(n 分类结果n); PrintScore(stu, n); /* 显示排序结果 */ break; case4:Find(stu,n); /*调用查找模块*/ break;case5:exit(0); /* 退回到DOS */ break; default:break; printf(n按任意键返回主菜单); getchar(); return 0;六、测试结果:1.输入自定义变量之后,程序正常2.使用列出成绩总表,程序正常3.按平均分排序,程序使用正常4.分类查找,按学号按姓名查询均正常心得体会:C语言在实际生活中用处很大,可以利用基本的知识编写简单程序,提高我们的做事效率注意函数应用,在适当的地方用不同的函数,得到的结果也会不同注意输出函数的用法,注意数据类型的区别。仔细认真,程序的完整性一定要注意
展开阅读全文