您好,欢迎访问三七文档
1成绩评定教师签名嘉应学院计算机学院《数据结构》实验报告课程名称:数据结构开课学期:2016-2017学年第1学期班级:1401指导老师:钟治初实验题目:学生成绩管理系统学号:141110043姓名:苏永达提交时间:2016年10月27日2一、实验要求:(1)设计一个学生成绩管理系统,模拟高考成绩的管理。功能至少包括数据输入,输出,查找,插入,删除,修改,排序,统计各成绩段的人数,考生成绩的排位,报考志愿的检索等。(2)所有输入输出数据均使用文本文件进行读写。(3)所有过渡性数据使用二进制文件进行读写和保存。(4)设计使用平行志愿进行出档。(5)设计使用非平行志愿行进出档。(6)设计志愿时,可以设计12个志愿,如果平行志愿,则前后各6个分别为第一组和第二组平行志愿处理。(7)设计考生记录的字段时,可以预留补录志愿的字段。或者将未录取考生的数据进行备份,然后将志愿清空后再增加补录志愿。3二、功能:(1)按学号顺序输入学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),并存入文件中。(2)从文件读取数据(3)删除学生信息(4)查询学生信息(查询可分为精确查询和模糊查询)(5)修改学生信息(要求修改后,数据依然是按学号顺序排列)(6)插入学生信息(要求插入后,数据依然是按学号顺序排列)(7)附加功能,学生可自由发挥,如:排名、求各门课程平均分等。三、实验目的1、掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体。2、能够采用模块化思想调试程序。3、通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。四、系统分析4.1相关基础知识选择、循环、函数、指针、结构体、链表4.2总体方案架构图:4方案描述:菜单:运用switchcase选择功能,在每个case中有相对应的调用语句,调用相对应的函数。删除功能:调用删除函数,判断是否保存,如果保存写入文件。插入功能:运用链表插入。修改功能:调用删除函数跟插入函数,先删除再插入,从而实现修改功能。查询功能:调用菜单中的查询函数,用循环实现查询功能。排名功能:调用菜单中的排名函数,通过冒泡排序法实现功能。保存功能:运用写入文件。五、系统设计定义一个student类型的结构体,里面包含学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史)、总分、平均成绩。5.1新建功能从键盘输入N个学生基本信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),编程根据输入信息计算各学生总分和平均分。创建动态链表,将学生信息存入链表中。在DOS屏幕上打印链表内所有学生信息。新建一个文件,将动态链表中的数据(即输入的学生信息)存入文件中。5.2打开功能打开一个文件,从文件中读取学生信息,并新建链表,将数据存入动态链表。在DOS屏幕上打印链表内所有学生信息。5.3修改功能在DOS屏幕上打印出当前的所有学生信息。输入待修改的学生学号,若不存在,输出“查无此人”;若存在,则输入修改的信息,并存回学生信息链表中,存回后学生信息链表依然是按学号顺序排列。最后在DOS屏幕上打印出新的所有学生信息。5.4插入功能在DOS屏幕上打印出当前的所有学生信息。输入插入信息的条数,从第一条开始到最后一条,依次输入每条学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),根据输入信息计算各学生总分和平均分。5若输入的学生学号已经存在,则输出“该学号已存在,无法操作!”,否则将学生信息插入到链表中,插入后链表中的数据依然按照学号排列。最后在DOS屏幕上打印出新的所有学生信息。5.5查询功能查询分为:精确查询、模糊查询精确查询:(1)按姓名查询输入待查询的姓名;根据顺序查询的方法,对学生的姓名依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕上显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。(2)按学号查询输入待查询的学号;根据顺序查询的方法,对学生的学号依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。模糊查询:(1)按姓氏查询输入待查询的姓氏;根据顺序查询的方法,对学生的姓依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。若需要查询的信息不存在,系统则会提示找不到相关信息。可重复查询。(2)按性别查询输入待查询的性别;根据顺序查询的方法,对学生的性别依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。可重复查询。5.6删除功能在DOS屏幕上打印出当前的所有学生信息。(1)按姓名删除6输入需要删除的学生姓名;根据顺序查询的方法,对学生的姓名依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。(2)按学号删除输入需要删除的学生学号;根据顺序查询的方法,对学生的学号依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。5.7排名功能可根据学生的总分进行排名,并在DOS屏幕上输出排名结果。5.8关于我们在DOS屏幕上输出系统相关信息。5.9软件说明5.10退出保存选择‘0’退出系统,保存功能在每段函数结束后实现。5.10运行结果5.10.0主界面5.10.1新建文件(输入一组数据,存入文件中)75.10.2打开文件(打开文件,读取文件数据存入链表)5.10.3修改功能85.10.4插入功能95.10.5查询功能精确查询-按姓名查询10精确查询-按学号查询模糊查询-按姓氏查询模糊查询-按性别查询115.10.6删除功能按姓名删除按学号删除5.10.7总分排名功能125.10.9软件说明5.10.10退出保存保存功能在每段函数结束后实现。六、心得体会通过这次实验我们更好的掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体、链表等功能。通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,虽然在设计过程中遇到了不少问题麻烦,在教材数据的帮助下,完成了这次程序设计。13七、源代码#includestdlib.h#includestdio.h#includestring.h/*---------------------------------------------------------*/#defineLENsizeof(structstudent)//结构体长度/*---------------------------------------------------------*/#defineNEW(structstudent*)malloc(LEN)/*---------------------------------------------------------*/FILE*fp;/*文件指针*//*---------------------------------------------------------*/structstudent{intnum;charname[20];intscore1,score2,score3,score4,score5;charsex;doubleaver;floatsum;structstudent*next;};charfilename[100];structstudent*creat(){structstudent*h;structstudent*p,*q;printf(需要输入几条信息:);inti,n;scanf(%d,&n);printf(\n----------请按学号顺序依次输入学生信息----------\n);charc=getchar();h=NULL;for(i=1;i=n;i++){p=NEW;if(p==NULL)14{printf(Allocationfailure\n);exit(0);}printf(\n);printf(输入姓名如:zhangsan:);gets(p-name);printf(输入学号如:1:);scanf(%d,&p-num);c=getchar();printf(输入性别M/F:);scanf(%c,&p-sex);printf(输入c语言成绩:);scanf(%d,&p-score1);printf(输入高数成绩:);scanf(%d,&p-score2);printf(输入大学语文成绩:);scanf(%d,&p-score3);printf(输入汇编语言成绩:);scanf(%d,&p-score4);printf(输入中近史成绩:);scanf(%d,&p-score5);c=getchar();p-sum=p-score1+p-score2+p-score3+p-score4+p-score5;p-aver=(p-score1+p-score2+p-score3+p-score4+p-score5)/5.0;p-next=NULL;if(h==NULL)/*h为空,表示新结点为第一个结点*/h=p;/*头指针指向第一个结点*/else/*h不为空*/q-next=p;/*新结点与尾结点相连接*/q=p;/*使q指向新的尾结点*/}returnh;}structstudent*paixu(structstudent*head)/*总分排名*/{system(cls);15printf(总分排名如下:\n);structstudent*op;structstudent*p;structstudent*p1,*p2;p1=(structstudent*)malloc(LEN);p1-next=head;head=p1;for(op=NULL;op!=head;op=p){for(p=p1=head;p1-next-next!=op;p1=p1-next){if(p1-next-sump1-next-next-sum){p2=p1-next-next;p1-next-next=p2-next;p2-next=p1-next;p1-next=p2;p=p1-next-next;}}}p1=head;head=head-next;free(p1);p1=NULL;returnhead;}voidprlist(structstudent*head)/*输出函数*/{structstudent*p;p=head;printf(\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n);while(p!=NULL)16{printf(%d%s%c%d%d%d%d%d%.1f%.2f\n,p-num,p-name,p-sex,p-score1,p-score2,p-score3,p-score4,p-score5,p-sum,p-aver);p=p-next;}system(pause);}/*-------------------------------------write将数据存入文件-------------------------------------------*/voidwrite(structstudent*head){structstudent*p;p=head;if(head!=NULL){while(p!=NULL){fwr
本文标题:学生成绩管理系统
链接地址:https://www.777doc.com/doc-4728077 .html