学生成绩管理系统-C语言课程设计_第1页
学生成绩管理系统-C语言课程设计_第2页
学生成绩管理系统-C语言课程设计_第3页
学生成绩管理系统-C语言课程设计_第4页
学生成绩管理系统-C语言课程设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

广州XX学院课程设计(实训)报告课 程 C语言课程设计 题 目 学生成绩管理系统 专 业 计算机科学与技术 指导教师 XX 班级 181 学号 201822 姓名 李XX 2019 年 5 月 30 日 目录1 需求分析22 设计思路23 详细设计33.1编译预处理33.2数据结构定义33.3菜单函数界面的设计33.4添加学生信息模块43.5 显示学生信息53.6 按学号排序63.7按总成绩排序73.8删除单个学生73.9查找指定学生93.10修改学生信息93.11查看各门课程的成绩情况103.12保存并退出114 调试分析124.1运行工具介绍124.2调试操作125 测试结果135.1添加学生信息135.2显示学生信息135.3查看各门课程的成绩情况146 用户使用说明147 参考资料151、需求分析学校工作流程分析:学校工作总体规划由教务人员在学生成绩管理系统中输入学生的基本信息并对其进行维护管理,包括对信息的增加、修改及对信息的各项处理操作等。新的学年,教务人员首先编排班级,再对在校学生进行基本的信息录入,新生入学后由教务人员在管理系统中完成新学生信息的维护。在每个学期开始,教务处根据班级的情况,以班为单位,为每个班级安排一个班主任,并对各科老师进行安排。每举行一次考试后由任课老师对成绩进行录入。班主任对本班的成绩汇总。并进行排名,并对本年级各科成绩及总成绩进行排名。教务处、班主任及任课老师跟据实际情况对录入的成绩进行维护管理,各位同学对以上录入的信息可以跟据自己的需要进行适当的查询。而且,学生管理系统可以对数据库中的信息进行有效处理,防止数据错乱。也能够按照用户选择的不同条件进行简单查询,方便用户操作,并减少用户的操作。2、设计思路(l)系统主界面允许用户选择想要的操作,包括输入学生信息、显示学生信息、查询学生信息、修改学生信息、删除学生信息、计算成绩以及成绩的排序等。通过输入相应的序号选择相应的操作。(2)录入学生成绩信息,用户根据提示输入学生的学号、姓名、以及三门课的成绩,高等数学的成绩、大学英语的成绩和C语言的成绩。输入完成一条学生记录,可根据提示信息继续输入下一条学生记录或者继续其他的操作。允许输入多条学生的成绩信息记录。输入完的学生记录暂时保持在电脑内存中,等待下一步的操作。(3)查询学生信息,用户可以根据学号或者姓名从系统保存的文件中对学生所有的信息进行查询,如果没有查询到任何信息,系统会提示信息。(4)修改学生信息,首先提示用户输入要进行修改的学生的名字,如果文件中有该学生的信息存在,则提示用户输入要修改的学生的基本信息、各科成绩等,并将修改结果重新存储在文件中。如果用户没有找到要修改的学生信息,系统将给出提示。(5)删除学生信息,首先提示用户输入要删除学生的名字,系统根据用户输入的信息在文件中查找,如果找到,直接删除该学生全部信息,如果没有找到,系统给出提示信息。(6)计算各科成绩平均分,主要进行学生成绩的平均分计算,进入计算界面,并选择相对应的序号,系统自动对各科进行平均分计算。(7)显示学生信息,用户在选择了显示学生信息后,将刚输入的学生信息从文件中调出来显示,如果没有数据,则提示无“没有该学生”。(8)学生排序,成绩信息输入完整后,根据学生的总分或者学号对学生从小到大进行排序,在显示学生信息的时候可以看到学生的其他信息。(10)操作完成后对操作结果进行保存。运行完毕,退出系统。3、详细设计3.1编译预处理C语言的预处理功能主要有:(1)宏定义;(2)文件包含;(3)条件编译。#include #include#include3.2数据结构定义学生成绩管理系统中的变量有学号,性别,名字和三科成绩,这些数据类型各不相同,因此需要定义结构体类型。typedef struct char num10; /*学号*/char name20; /*姓名*/char sex2;/*性别*/int score3; /*成绩*/float avg;/*平均分*/int sum;/*总成绩*/Student;Student studentAll80; /*结构体数组变量*/3.3菜单函数界面的设计系统与用户交换的界面是通过菜单实现的,菜单按预定义格式显示主菜单界面,等待用户输入0-8中的任一数据,系统会根据用户的输入调用相应的功能模块,实现用户所要求的操作。菜单主要通过printf函数显示一些文本选项来构建一个简单的字符界面,并且让用户通过输入关键 字从0-8之间选择相应的操作,函数通过switch调用各功能模块:/*菜单函数*/int menu_select() int check_number;dosystem(cls); /*运行前清屏*/printf(t*学生成绩管理系统*n); /*菜单选择*/printf(t*| 1. 添加学生信息 *n);printf(t*| 2. 显示学生信息 *n);printf(t*| 3. 按学号排序 *n);printf(t*| 4. 按总成绩排序 *n);printf(t*| 5. 查找单个学生 *n);printf(t*| 6. 删除指定学生 *n);printf(t*| 7. 修改学生信息 *n); printf(t*| 8. 查看各门课程的成绩情况 *n);printf(t*| 9. 待定功能 *n);printf(t*| 0. 保存退出 *n);printf(t*n);printf(请输入选择(0-9):);scanf(%d,&check_number); /*读入选择*/while(check_number9);return(check_number); /*返回选择*/3.4添加学生信息模块创建学生信息函数由void Input函数实现,首先定义各个数据的类型,然后判断学生信息是否存在,倘若没有该学生,则开始输入新学生的全部信息。录入完毕可以选择继续录入或者返回。具体函数如下:void Input(Student student)int i=0,j;char flag,clear10; /*clear10为清除多余的数据所用*/char studentNum10; /存放判断学生学号int exist = 0;/判断学生信息标志/判断是否已经存在相同学生的学号while(flag!=n&flag!=N) /判断flag是不是n/N,以此判断是否继续输入学生信息 printf(请输入学生学号:); scanf(%s,studentNum); while(strcmp(studenti.num,studentNum)!=0&istudent_number) i+; /*查找判断*/ /查找到学生,无法增加学生信息,返回主函数 if(istudent_number)printf(已有相同学号的学生,请重新输入n);/如果没有查找到学生,即可增加学生信息 else if(i=student_number) memset(studenti.num, 0, sizeof(studenti.num);/字符串清空 strcpy(studenti.num,studentNum);printf(学生姓名:);scanf(%s,studentstudent_);printf(学生性别:);scanf(%s,studentstudent_number.sex);printf(学生高数成绩:);scanf(%d,&studentstudent_number.score0);/高数成绩录入总成绩/studentstudent_number.sum += studentstudent_number.score0;printf(学生大英成绩:);scanf(%d,&studentstudent_number.score1);/大英成绩录入总成绩/studentstudent_number.sum += studentstudent_number.score1;printf(学生C语言成绩:);scanf(%d,&studentstudent_number.score2);/C语言成绩录入总成绩/studentstudent_number.sum += studentstudent_number.score2;studentstudent_number.sum=0;for(j=0;j3;j+)studentstudent_number.sum+=studentstudent_number.scorej;studentstudent_number.avg = (float)studentstudent_number.sum/3;/printf(%.2fn,studentstudent_number.avg);gets(clear); /*清除多余的输入printf(此学生信息录入完毕,是否继续?(Y/N);scanf(%c,&flag); /输入判断student_number+;i=0;3.5 显示学生信息显示函数void Display主要显示学生基本信息,每当操作完成的时候一般都会调用此函数进行预览。该函数运行后会逐条显示学生信息,直到运行结束,返回到主菜单界面。具体显示函数如下:void Display(Student student) int i=0;FILE *fp; /*定义文件指针*/if(fp=fopen(D:Studentstudent.txt,rb)=NULL) /*打开文件*/ printf(不能打开文件n); /*打开失败信息*/printf();system(pause);exit(0);printf(%dn,student_number); /*循环duqu数据*/while(istudent_number)printf(%-8s %-8s %-s %3d %3d %3d %.2f %3dn,studenti.num,,studenti.sex,studenti.score0,studenti.score1,studenti.score2,studenti.avg,studenti.sum);i+;system(pause);fclose(fp);3.6 按学号排序学生成绩排序函数void Sort_by_num用来对学生成绩按从小到大的顺序排序,在函数里主要运用了“冒泡法”进行排序。通过两个 for 循环实现冒泡排序的全过程,外层 for 循环决定冒泡排序的趟数,内层 for 循环决定每趟所进行两两比较的次数。具体函数如下:void Sort_by_num(Student student)int i,j;Student temp;for ( i = 0; i student_number; i+) for ( j = 0; j 0) temp=studentj; studentj=studentj+1; studentj+1=temp; 3.7按总成绩排序成绩排序函数void Sort_by_sum与学号排序函数具有异曲同工之妙,具体函数如下:void Sort_by_sum(Student student) int i,j;Student temp;for ( i = 0; i student_number; i+) for ( j = 0; j studentj + 1.sum) temp=studentj; studentj=studentj+1; studentj+1=temp; 3.8删除单个学生删除函数void Delete_a_record,首先确定找到你输入名字的这个学生的所有信息,然后用后一个学生的信息覆盖该学生的相应信息,再写入文件中,从而达到删除该学生信息的目的。具体函数如下:void Delete_a_record(Student student) char name20;int i,j;char ch2;FILE *fp;printf(请输入要delete的名字:);scanf(%s,&name);for(i=0;istudent_number;i+)if(strcmp(name,)=0)j=i;printf(学号:%sn性别:%sn高数成绩:%dn大英成绩:%dnC语言成绩:%dn平均成绩:%fn总成绩:%dn,studenti.num,studenti.sex,studenti.score0,studenti.score1,studenti.score2,studenti.avg,studenti.sum);elseprintf(没有这个学生! );break;printf(find the student,delete?(y/n); scanf(%s,ch);if(strcmp(ch,Y)=0|strcmp(ch,y)=0)/*判断是否要进行删除*/ for(j=i;jstudent_number;j+) studentj=studentj+1; student_number-; printf(delete successfully!n); for(i=0;istudent_number;i+) if(fp=fopen(D:Studentstudent.txt,rb)=NULL) /*打开文件*/ printf(不能打开文件n); /*打开失败信息*/printf();system(pause);exit(0);3.9查找指定学生查找函数void Query_a_record,通过输入名字遍历文件中相同的char类型的字符串来确认该学生,并且打印显示该学生的所有信息。具体函数如下:void Query_a_record(Student student) char name20;int i;printf(请输入要查找的名字:);scanf(%s,&name);for(i=0;istudent_number;i+)if(strcmp(name,)=0)printf(学号:%sn性别:%sn高数成绩:%dn大英成绩:%dnC语言成绩:%dn平均成绩:%fn总成绩:%dn,studenti.num,studenti.sex,studenti.score0,studenti.score1,studenti.score2,studenti.avg,studenti.sum);elseprintf(没有这个学生! );break;3.10修改学生信息修改函数oid modifyStudentinformation是对之前所输入的信息出现错误,或者需要修改时使用。用户根据提示输入要编辑学生信息的学号,并按名字查找该学生的基本信息,如果找到该学生,系统提示要修改的各项内容,修改完成后提示成功。具体函数如下:void modifyStudentinformation(Student student)char name20;int i,j;FILE *fp;printf(请输入要修改信息的学生名字:);scanf(%s,&name);for(i=0;istudent_number;i+)if(strcmp(name,)=0)printf(学号:n);scanf(%s,studenti.num);printf(性别:n);scanf(%s,studenti.sex);printf(高数:n);scanf(%d,&studenti.score0);printf(大英:n);scanf(%d,&studenti.score1);printf(C语言:n);scanf(%d,&studenti.score2); elseprintf(没有这个学生! );break;for(i=0;istudent_number;i+) if(fp=fopen(D:Studentstudent.txt,rb)=NULL) /*打开文件*/ printf(不能打开文件n); /*打开失败信息*/printf();system(pause);exit(0);printf(已成功修改!);3.11查看各门课程的成绩情况计算函数void showClass求各科的平均分。首先计算各科的总成绩,最后进行平均分求值,计算完成显示最后计算结果。具体函数如下:void showClass(Student student) int j;int sum=0;float avg1,avg2,avg3;printf(高数平均分:);for(j=0;jstudent_number;j+)sum=studentj.score0+sum;avg1=sum/student_number;printf(%fn,avg1);sum=0;printf(大英平均分:);for(j=0;jstudent_number;j+)sum=studentj.score1+sum;avg2=sum/student_number;printf(%fn,avg2);sum=0;printf(C语言平均分:);for(j=0;jstudent_number;j+)sum=studentj.score2+sum;avg3=sum/student_number;printf(%fn,avg3);3.12保存并退出保存函数void WritetoText主要用来对学生成绩运行后的结果进行保存。该函数在运行之前先要定义一个指向文件的指针*fp,在定义一个移动指针fp和保存输出的文件名studenti。用户根据系统的提示,输入要保存的文件名和保存路径。系统以只写(“w”)方式打开文件,如果移动指针fp不为空则写入一条记录。运行结束返回主菜单。运行过程函数:void WritetoText(Student student) int i = 0;FILE *fp; /*定义文件指针*/if(fp=fopen(D:Studentstudent.txt,w)=NULL) /*打开文件*/printf(不能打开文件n);system(pause);exit(0);fprintf(fp,%dn,student_number); /*循环写入数据*/while(istudent_number)fprintf(fp,%-8s %-8s %-s %3d %3d %3d %.2f %3dn,studenti.num,,studenti.sex,studenti.score0,studenti.score1,studenti.score2,studenti.avg,studenti.sum);i+;fclose(fp); /*关闭文件*/4、调试分析4.1运行工具介绍Dev-C+是一个Windows环境下的一个适合于初学者使用的轻量级C/C+ 集成开发环境(IDE),它是一款自由软件,遵守GPL许可协议分发源代码。Dev-C+ 使用MingW64/TDM-GCC编译器,遵

温馨提示

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

评论

0/150

提交评论