学生成绩管理系统实验报告
来源:互联网 发布:关键词下拉框软件 编辑:程序博客网 时间:2024/05/11 11:25
一.问题的需求分析
1.问题描述
设计一个程序实现学生成绩管理,以便管理学生成绩。
2.需求分析
(1)录入
(2)修改
(3)删除
(4)查询
(5)排序
二.抽象数据类型的设计
存储学生成绩的结构体数据
typedef struct{
char num[10];//学号
char name[20];//姓名
int date[3];//修改日期
float Chinese;//语文
float math;//数学
float English;//英语
float total;//总分
float average;//平均分
}Stu;
函数:
menu()//功能选择菜单
Record();//录入
——getDate()//获取系统当前日期 getTotal()//获取总分
getAverage()//获取平均分
Input()//读取信息 OutputAll()//输出全部数据
Update();//修改
——Input()//读取信息 ListUpdate()//顺序列表更新数据
Delete();//删除
——ListDelete()//顺序列表删除数据 Output()
Search();//查询
——SearchOrder();//按输入顺序查找
(没有进行排序操作前使用)
SearchNum();//按学号查找 SearchName();//按名字查找
SearchChinese();//按语文成绩查找
SearchMath();//按数学成绩查找
SearchEnglish();//按英语成绩查找
SearchTotal();//按总成绩查找
SearchAverage();//学号按平均成绩查找
SearchDate();//按日期查找
Sort();//排序
——SortDate()//按日期排序
SortTotal()//按总分排序
SortChinese()//按语文成绩排序
SortMath()//按数学成绩排序
SortEnglish()//按英语成绩排序
SortName()//按名字排序
SortNum()//按学号排序
exchange()//交换数据组
OutputAll();//输出
三.算法与数据结构的设计
1 数据结构设计
在对上述问题的数据进行抽象之后,确定应用以下存储结构:
typedef Stu ElemType;//基本数据设为Stu
typedef struct//顺序存储结构
{
ElemType data[MaxSize];
int size;
}SequenceList;
2 算法设计
线性表的顺序存储结构是最简单最常用的数据结构:用一段连续地址依次存储表中的数据元素。逻辑上和物理上都相邻。
优点:节省存储空间优点:随机存取表中元素。
缺点:插入和删除操作需要移动元素。
插入时后面的部分整体移动腾出空位给插入数据
删除时后面的部分整体移动填上空位
四.算法的精化与程序的实现(程序实现的核心算法)
void ListInitialize(SequenceList*L){
//顺序列表初始化
L->size=0;
printf("初始化成功!\n");}
int ListInsert(SequenceList *L,inti,ElemType x){
//顺序列表插入数据
int j;
if(L->size>MaxSize)
{printf("顺序表已经满,无法插入!\n");
return 0;}
else if(i<0||i>L->size+1)
{printf("位置错误!\n");
return 0;}
else
{for(j=L->size;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=x;
L->size++;
return 1;}
}
int ListDelete(SequenceList *L,inti){
//顺序列表删除数据
int j;
if(L->size<=0)
{printf("顺序表已经空,无数据元素可删!\n");
return 0;
}
else if(i<0||i>L->size+1)
{
printf("位置错误!\n");
return 0;}
else
{
for(j=i+1;j<=L->size-1;j++)
L->data[j-1]=L->data[j];
L->size--;
return 1;}
}
int ListGet(SequenceList L,inti,ElemType *x){
//顺序列表获取数据
*x=L.data[i];
return 1;
}
int ListUpdate(SequenceList *L,inti,ElemType x){
//顺序列表更新数据
int j;
for(j=i+1;j<=L->size-1;j++)//删除原项
L->data[j-1]=L->data[j];
L->size--;
for(j=L->size;j>i;j--)
L->data[j]=L->data[j-1]; //插入新项
L->data[i]=x;
L->size++;
return 1;
}
五.程序的调试与计算的结果分析
用户进入程序之后就顺序列表初始化,然后显示功能选项表,进行功能选择。
1.调试情况
(1)录入数据到顺序表,如上图所示。
(2)修改数据,结果如下:
(3)输出数据,结果如下:
(4)删除数据,结果如下:
(5)查询数据,结果如下:
(6)排序数据,结果如下:
2.结果分析
整体调试过程中在更新数据的那个地方卡了很久,不能直接复制给指定的数据组,只能
六.时间代价的分析
1.顺序存储结构
平均插入元素移动次数=n/2
平均删除元素移动次数=(n-1)/2
时间复杂度度O(n)
2.冒泡排序法
比较次数=n(n-1)/2
移动次数=3 n(n-1)/2
时间复杂度为O(n^2)
空间复杂度为O(1)
- 学生成绩管理系统实验报告
- 数据结构实验 第一单元 学生成绩管理系统(链表版)
- c语言综合实验 学生成绩管理系统
- shell 编程实验--实现学生成绩管理系统
- 课程设计报告——学生成绩管理系统课程设计报告
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 小猪的数据结构辅助教程——3.1 栈与队列中的顺序栈
- 怎么把自己的代码传到github上
- 2015,2016 占个坑
- 平面点集的三角剖分算法
- 利用C++11实现一个自动注册的工厂
- 学生成绩管理系统实验报告
- P2P金融
- SSH框架的整体认识
- bk
- Android快速开发框架
- android数据库sqlite的简单总结
- 图解Linux命令之--modprobe命令
- 硬盘盘符拒绝访问-问题和解决办法
- 2015年总结