学生成绩管理系统20833

成绩评定 教师签名 嘉应学院 计算机学院 数据结构实验报告 课程名称 数据结构 开课学期 2016-2017学年第1学期 班 级 1401 指导老师 钟治初 实验题目 学生成绩管理系统 学 号 141110043 姓 名 永达 提交时间 2016年10月27日 一、 实验要求 (1) 设计一个学生成绩管理系统,模拟高考成绩的管理。功能至少包括数据输入,输出,查找,插入,删除,修改,排序,统计各成绩段的人数,考生成绩的排位,报考志愿的检索等。

(2) 所有输入输出数据均使用文本文件进行读写。

(3) 所有过渡性数据使用二进制文件进行读写和保存。

(4) 设计使用平行志愿进行出档。

(5) 设计使用非平行志愿行进出档。

(6) 设计志愿时,可以设计12个志愿,如果平行志愿,则前后各6个分别为第一组和第二组平行志愿处理。

(7) 设计考生记录的字段时,可以预留补录志愿的字段。或者将未录取考生的数据进行备份,然后将志愿清空后再增加补录志愿。

二、功能 1 按学号顺序输入学生信息,包括学号、、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),并存入文件中。

2 从文件读取数据 3 删除学生信息 4 查询学生信息(查询可分为精确查询和模糊查询) 5 修改学生信息(要求修改后,数据依然是按学号顺序排列) 6 插入学生信息(要求插入后,数据依然是按学号顺序排列) 7 附加功能,学生可自由发挥,如排名、求各门课程平均分等。

三、实验目的 1、掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体。

2、能够采用模块化思想调试程序。

3、通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机部表示出来,并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。

四、系统分析 4.1 相关基础知识 选择、循环、函数、指针、结构体、链表 4.2 总体方案 架构图 方案描述 菜单运用switch case选择功能,在每个case中有相对应的调用语句,调用相对应的函数。

删除功能调用删除函数,判断是否保存,如果保存写入文件。

插入功能运用链表插入。

修改功能调用删除函数跟插入函数,先删除再插入,从而实现修改功能。

查询功能调用菜单中的查询函数,用循环实现查询功能。

排名功能调用菜单中的排名函数,通过冒泡排序法实现功能。

保存功能运用写入文件。

五、系统设计 定义一个student类型的结构体,里面包含学生信息,包括学号、、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史)、总分、平均成绩。

5.1 新建功能 从键盘输入N个学生基本信息,包括学号、、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),编程根据输入信息计算各学生总分和平均分。

创建动态链表,将学生信息存入链表中。在DOS屏幕上打印链表所有学生信息。

新建一个文件,将动态链表中的数据(即输入的学生信息)存入文件中。

5.2 打开功能 打开一个文件,从文件中读取学生信息,并新建链表,将数据存入动态链表。

在DOS屏幕上打印链表所有学生信息。

5.3 修改功能 在DOS屏幕上打印出当前的所有学生信息。

输入待修改的学生学号,若不存在,输出“查无此人”;
若存在,则输入修改的信息,并存回学生信息链表中,存回后学生信息链表依然是按学号顺序排列。

最后在DOS屏幕上打印出新的所有学生信息。

5.4 插入功能 在DOS屏幕上打印出当前的所有学生信息。

输入插入信息的条数,从第一条开始到最后一条,依次输入每条学生信息,包括学号、、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),根据输入信息计算各学生总分和平均分。

若输入的学生学号已经存在,则输出“该学号已存在,无法操作”,否则将学生信息插入到链表中,插入后链表中的数据依然按照学号排列。

最后在DOS屏幕上打印出新的所有学生信息。

5.5 查询功能 查询分为精确查询、模糊查询 精确查询 (1) 按查询 输入待查询的;

根据顺序查询的方法,对学生的依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕上显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。

(2) 按学号查询 输入待查询的学号;

根据顺序查询的方法,对学生的学号依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。

模糊查询 (1) 按姓氏查询 输入待查询的姓氏;

根据顺序查询的方法,对学生的姓依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。若需要查询的信息不存在,系统则会提示找不到相关信息。可重复查询。

(2) 按性别查询 输入待查询的性别;

根据顺序查询的方法,对学生的性别依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。可重复查询。

5.6 删除功能 在DOS屏幕上打印出当前的所有学生信息。

(1)按删除 输入需要删除的学生;

根据顺序查询的方法,对学生的依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。

(2)按学号删除 输入需要删除的学生学号;

根据顺序查询的方法,对学生的学号依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。

5.7排名功能 可根据学生的总分进行排名,并在DOS屏幕上输出排名结果。

5.8 关于我们 在DOS屏幕上输出系统相关信息。

5.9 软件说明 5.10 退出保存 选择‘0’退出系统,保存功能在每段函数结束后实现。

5.10运行结果 5.10.0 主界面 5.10.1 新建文件(输入一组数据,存入文件中) 5.10.2 打开文件(打开文件,读取文件数据存入链表) 5.10.3 修改功能 5.10.4 插入功能 5.10.5 查询功能 精确查询-按查询 精确查询-按学号查询 模糊查询-按姓氏查询 模糊查询-按性别查询 5.10.6 删除功能 按删除 按学号删除 5.10.7 总分排名功能 5.10.9 软件说明 5.10.10 退出保存 保存功能在每段函数结束后实现。

六、心得体会 通过这次实验我们更好的掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体、链表等功能。通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机部表示出来,并培养基本的、良好的程序设计技能,虽然在设计过程中遇到了不少问题麻烦,在教材数据的帮助下,完成了这次程序设计。

七、源代码 include include include /*---------------------------------------------------------*/ define LEN sizeofstruct student//结构体长度 /*---------------------------------------------------------*/ define NEW struct student *mallocLEN /*---------------------------------------------------------*/ FILE *fp;/*文件指针*/ /*---------------------------------------------------------*/ struct student { int num; char name[20]; int score1,score2,score3,score4,score5; char sex; double aver; float sum; struct student *next; }; char filename[100]; struct student *creat { struct student *h; struct student *p,*q; printf“需要输入几条信息“; int i,n; scanf“d“, printf“\n----------请按学号顺序依次输入学生信息----------\n“; char cgetchar; hNULL; fori1;iname; printf“输入学号 “; scanf“d“, cgetchar; printf“输入性别 “; scanf“c“, printf“输入c语言成绩 “; scanf“d“, printf“输入高数成绩 “; scanf“d“, printf“输入大学语文成绩 “; scanf“d“, printf“输入汇编语言成绩 “; scanf“d“, printf“输入中近史成绩 “; scanf“d“, cgetchar; p-sump-score1p-score2p-score3p-score4p-score5; p-averp-score1p-score2p-score3p-score4p-score5/5.0; p-nextNULL; if hNULL /* h为空,表示新结点为第一个结点 */ hp; /* 头指针指向第一个结点 */ else /* h不为空 */ q-nextp; /*