数据结构课程设计报告书学校青岛科技大学学号姓名指导老师刘勇课程设计的名称:学生成绩管理1.问题描述:学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,该题目是对学生的成绩管理作一个简单的模拟,其中学生信息包括:学号、姓名与成绩。
成绩分为课程1成绩、课程2成绩、课程3成绩和总成绩。
要求设计一个简易的成绩管理系统,输入各门功课的成绩后能自动求出总成绩,并通过菜单选择操作方式完成下列功能:①登记学生成绩;②②查询学生成绩;③插入学生成绩;④④删除学生成绩;⑤按总成绩降序排序。
2.基本要求:该题目涉及到单链表的各种操作,包括单链表的建立、结点的查找、插入、删除等基本运算。
首先建立学生成绩单链表,链表中每个结点由4个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域。
然后将要求完成的四项功能写成四个函数,登记学生成绩对应建立学生单链表的功能,后三个功能分别对应单链表的查询、插入与删除三大基本操作。
3.算法思想:Creat()函数算法思想:从0至n循环输入n个同学的三科成绩,并且计算总成绩。
Inquiry()函数算法思想:将学号与已输入的所有学号做比较,一旦相同则输出该学号信息,否则显示没有该学生信息。
Insert ()函数算法思想:生成一个新节点,然后将其接到原有链表尾部。
Delete()函数算法思想:通过ID找到该节点,并删去该节点。
Sort(函数算法思想:利用排序算法对每一个节点作比较并更换其在链表中的位置顺序。
4.模块划分(1)LinkList Creat(LinkList T,int n)其功能是创造节点,录入成绩。
(2)void Inquiry(LinkList T)其功能是查询与已知ID一致的学生信息并展示出来。
(3)void Insert(LinkList T,int n) 其功能是添加若干个学生的成绩信息。
(4)void Delete(LinkList T) 其功能是删除若干个学生的成绩信息。
(5)void Sort(LNode *p) 其功能是排序并展示若干个学生的成绩信息。
5.数据结构:数据类型LNode定义如下:typedef struct LNode{int ID;char name[20];int score1;int score2;int score3;int total;struct LNode *next;}LNode,*LinkList;6.源程序:源代码//main.c#include <stdio.h>#include <stdlib.h>typedef struct LNode{int ID;char name[20];int score1;int score2;int score3;int total;struct LNode *next;}LNode,*LinkList;LinkList Creat(LinkList T,int n); void Delete(LinkList T);void Inquiry(LinkList T);void Insert(LinkList T,int n); void Sort(LNode *p);void Insert(LinkList T,int n) {int i;LNode *r=T,*p;while((r->next)!=NULL){r=r->next;}for(i=0;i<n;i++){p=(LNode *)malloc(sizeof(LNode));printf("Please enter the student's student ID:");scanf("%d",&p->ID);printf("Please enter the student's name: ");scanf("%s",p->name);printf("Please enter the student's score 1: ");scanf("%d",&p->score1);printf("Please enter the student's score 2: ");scanf("%d",&p->score2);printf("Please enter the student's score 3: ");scanf("%d",&p->score3);p->total=p->score1+p->score2+p->score3;printf("The total score is %d\n",p->total);p->next=NULL;r->next=p;r=p;}printf("\nInsert is complete!");}void Inquiry(LinkList T){int id;printf("Please enter the student ID you want to inquire about: ");scanf("%d",&id);LNode *p=T;p=p->next;while(p!=NULL){if(p->ID==id){printf("\nThe student scores information has been successfully inquired!\n");printf("ID: %d\nName: %s\nScore 1: %d\nScore 2: %d\nScore3: %d\n",p->ID,p->name,p->score1,p->score2,p->score3);break;}else{p=p->next;}}if(!p)printf("Sorry!Did not inquiry the student scores information!"); }。
获取源程序:11350474727. 测试情况:截图:程序输出为:Num: 1ID: 1 Name: n1 Score 1: 78 Score 2: 89 Score 3: 84total: 251Num: 2ID: 3Name: n3Score 1: 68Score 2: 89Score 3: 90total: 247课程设计的名称:停车场的管理1.问题描述:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
2.基本要求:综合利用栈和队列模拟停车场管理,学习利用栈和队列解决实际问题。
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表实现。
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。
输入数据按到达或离去的时刻有序。
栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。
3.算法思想:停车场运用栈的算法思想管理车辆信息;便道运用队列的算法思想管理等待进入停车场的车辆信息;临时停放让路的车辆信息也用队列算法思想管理。
4.模块划分:void PRINT(CarNode *p,int room其功能为打印出场车的信息void Arrive(SeqStackCar *Enter,LinkQueueCar *W) 其功能为记录进场车和等待进场车信息void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) 其功能为记录出场车信息void List1(SeqStackCar *S)其功能为显示存车信息5. 数据结构:(1)数据类型Time定义如下:typedef struct time{int hour;int min;}Time;(2)数据类型CarNode定义如下:typedef struct node{char num[10];Time reach;Time leave;}CarNode;(3)数据类型SeqStackCar定义如下:typedef struct NODE{CarNode *stack[MAX+1];int top;}SeqStackCar;(4)数据类型QueueNode定义如下:typedef struct car{CarNode *data;struct car *next;}QueueNode;(5)数据类型LinkQueueCar定义如下:typedef struct Node{QueueNode *head;QueueNode *rear;}LinkQueueCar;6. 源程序:源代码获取源程序请加QQ:1135047472 7.测试情况:截图:程序输出为:The System of parking1.car arrive2.car leave3.show car0.quit systemParking Lotplace:1 arrived time:5:45 number:2place:2 arrived time:9:14 number:1Return main meun(1.return 0.quit)课程设计的名称:二叉树的基本操作的实现1. 问题描述:•在主程序中编写一个简单的菜单,将有关二叉树的操作•建立一棵二叉树的存储结构•遍历一棵二叉树(包括层次遍历)•统计二叉树叶子结点的个数•求二叉树的深度•子树交换2. 基本要求:•建立一棵二叉树的存储结构•遍历一棵二叉树(包括层次遍历)•统计二叉树叶子结点的个数•求二叉树的深度•子树交换3. 算法思想:CreatBiTree()运用递归创造二叉树的每一个节点;Exchange()通过递归交换左右子树;Depth()通过递归计算二叉树的深度。