文档库 最新最全的文档下载
当前位置:文档库 › 学生管理系统链表数据结构课程设计

学生管理系统链表数据结构课程设计

学生管理系统链表数据结构课程设计
学生管理系统链表数据结构课程设计

课程设计任务书

1、题目:学生信息管理系统

2、设计内容及要求:

内容:完成简单的学生信息管理系统

要求:

(1)学生信息包括:学号、姓名、平时成绩、期末考试成绩;

(2)用单链表存放学生信息;

(3)实现简单的菜单调用;

(4)程序的功能包括:

学生信息链表的建立;

学生信息的插入;

学生信息的查询;

学生信息的修改;

学生信息的删除;

学生信息的输出。

编写算法,编码实现基本要求。

3.设计时间:6 月27 日-7 月1 号

目录

一、需求分析--------------------- 3

二、概要设计----------------------4

三、详细设计----------------------6

四、调试分析--------------------- 14

五、用户使用说明----------------- 14

六、测试结果--------------------- 17

七、附录(略)---------------------- 17

一.需求分析

分析课程设计任务书,本次数据结构课程设计的任务是利用数据结构中所学的相关知识编程设计实现一个学生信息管理系统,使该系统可以方便的查询学生的各项信息和方便管理。

根据任务书中的第五条要求,为来使用者方便使用。需给出输入、插入、查询、修改、显示等功能。

根据上面的需求分析,画出程序的功能模块图大致如下:

系统设计流程图

二、概要设计

根据上面所述的需求分析,结合我们学过的数据结构知识,要想在计算机中储存学生的信息,可以使用顺序存储和链式存储两种数据类型

下面给出本程序用到抽象数据类型定义:

ADT List{

数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0 }

数据关系:R1={|ai-1,ai∈D,i=2,…,n}

基本操作P:

InitList(&L);

操作结果:构造一个空的线性表L。

DestroList(&L);

初始条件:线性表L已存在。

操作结果:销毁线性表L。

ClearList(L);

初始条件:线性表L已存在。

操作结果:将L重置为空。

ListEmpty(L);

初始条件:线性表已存在。

操作结果:若L为空表,则返回TURE,否则返回FALSE。

ListLength(L);

初始条件:线性表L已存在。

操作结果:返回L中数据元素的个数。

GetElem(L,I,&e);

初始条件:线性表L已存在,1≤i≤ListLength(L)。

操作结果:用e返回中第i个数据元素的值。

LocateElem(L,e,compare());

初始条件:线性表L已存在,compare()是数据元素判定函数。

操作结果:返回中第1个与满足关系的数据元素的位序。若这样的数据元素不存在,则返回值为0。

PriorElem(L,cur_e,&pre_e)

初始条件:线性表L已存在。

操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义。

NextElem(L,cur_e,&next_e)

初始条件:线性表L已存在。

操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它

的后继,否则操作失败,next_e无定义。

ListInsert(&L,i,e)

初始条件:线性表L已存在,1≤i≤Listlength(L)+1。

操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1。ListDelete(&L,i,&e)

初始条件:线性表L已存在且非空,1≤i≤Listlength(L)。

操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。ListTraverse(L,visit())

初始条件:线性表L已存在。

操作结果:依次对L的每一个数据元素调用函数visit()。一旦visit()失败,则操作失败。

}ADT List

除了上述定义的一些基本操作外,为了实现任务书中的相应功能,还要设计如下一些函数:

void createList(sequenlist*p1)

void printList(sequenlist *head)

void insert(sequenlist *L,int i)

sequenlist *findList(sequenlist *L)

void devise(sequenlist *L)

void change(sequenlist *L)

void delNode(sequenlist *L)

函数调用程序:

三、详细设计

使用单向链表指针,能够管理简单的学生信息,是一个设计较为人性化的操作系统。

首先,建立学生的信息库。然后根据提示,选择“录入学生信息的个数,依次录入”。

若选择继续操作,则会出现菜单栏,可以选择进行学生信息的插入,查询,修改,删除,显示等操作和系统的退出。否则,退出操作程序。根据上面的概要设计,首先要写出数据存储结构的类型定义。

系统由头文件名,一个结构体,八个自定义函数和一个主函数构成

1.系统的总体结构

定义如下:

1)头文件名:

#include

#include //包含字符串的比较函数strcmp

#include

#define LEN sizeof(struct student)

2)结构体:

typedef struct student

{

char num[8];/*学号*/

char name[9];/*姓名*/

float g;/*平时成绩*/

float s;/*期末成绩*/

struct student *next;

}sequenlist;

3)八个自定义函数:

int menu()//提供菜单选项,供用户选择各个功能模块

void createList(sequenlist*p1) //建立学生的信息库

void printList(sequenlist *head) //显示所有学生信息

void insert(sequenlist *L,int i) //插入学生信息

sequenlist *findList(sequenlist *L) //查询学生信息

void devise(sequenlist *L)//修改学生信息子函数

void change(sequenlist *L)//修改学生信息

void delNode(sequenlist *L) //删除学生信息

4)主函数:

void main()//将各函数组合成一个有机的整体,实现各个函数的调用{

sequenlist *p1,*p;

int i;

while(1) {switch(menu_select())

{

case 1:

printf("**************************************\n");

printf(" 学生信息线性表的建立 \n");

printf("***************************************\n");

p1=(sequenlist *)malloc(LEN);

createList(p1);

break

case 2:

printf("**************************************\n");

printf("添加学生信息\n");

printf("**************************************\n");

printf("请输入要插入的位置:\n");

scanf("%d",&i);

printf("i=%d\n",i);

printf("请输入要插入学生的信息\n");

insert(p1,i);

break;

case 3:

printf("**************************************\n");

printf("查询学生信息\n");

printf("**************************************\n");

p=findList(p1);

if(p!=NULL)

{

printf("您要查的学生为:\n学号姓名平时成绩期末成绩\n");

printf("-------------------------------------------\n");

printf("%s,%s,%f,%f\n",p->num,p->name,p->g,p->s);

printf("--------------------------------------------\n");

}

else

printf("没有您要查询的学生信息!");

break;

case 4:

printf("**************************************\n");

printf("修改学生信息\n");

printf("**************************************\n");

change(p1);

break;

case 5:

printf("**************************************\n");

printf("删除学生信息\n");

printf("**************************************\n");

delNode(p1);

break;

case 6:

printf("**************************************\n");

printf("输出所有学生信息\n");

printf("**************************************\n");

printList(p1);

break;

case 0:

printf("退出!\n");

getchar();

return;

}

2.各功能模块的设计

1)结构体模块:

struct student,存储学生多方面的信息,是单向链表的建立和各个函数的运行的基本元素

2)菜单模块:

int menu_select ()函数,用大量的字符拼图组合,输出形成一个美观实用的菜单表格目录,运用case语句,提示用户输入的数字是否有误,若错误,则显示“输入错误,请重选0 - 6”,再次输入,最后把输入数值返回给主函数。

int menu_select()

{

int sn;

printf("\n 学生信息管理系统\n");

printf("=========================================\n");

printf(" 1.学生信息线性表的建立\n");

printf(" 2.插入学生信息\n");

printf(" 3.查询学生信息\n");

printf(" 4.修改学生信息\n");

printf(" 5.删除学生信息\n");

printf(" 6.输出所有学生信息\n");

printf(" 0.退出管理系统\n");

printf("==========================================\n");

printf("请选择0-6:\n");

for(;;)

{

scanf("%d",&sn);

if (sn<0 || sn>6)

printf("\n\t输入错误,重选0-6\n");

else

break;

}

return sn;

}

3)信息库的建立模块:

void createList(sequenlist*p1)函数,运用循环结构和二级指针和一级指针之间的地址值和数据值的相互赋予,新的存储空间的开辟和释放,协助完成了单链表的学生信息的存储。

void createList(sequenlist*p1)//信息库的建立

{

int n,i,j=0;sequenlist *p2;

printf("有几位学生?请输入:\n");

scanf("%d",&n);

printf("以下请输入这%d位学生的信息:\n",n);

for(i=1;i

{

p2=(sequenlist *)malloc(LEN);//开辟新空间

printf("第%d位学生信息为:\n",i);

scanf("%s %s %f %f",p2->num,p2->name,&p2->g,&p2->s);

p1->next=p2;

p1=p2;

}

p1->next=NULL;

}

4)学生信息的插入模块:

void insert(sequenlist *L,int i)函数,新建指针变量*s,将新的学生信息插入单向链表中,形成新的学生信息数据库。

void insert(sequenlist *L,int i)

{

sequenlist * p=L,*s;int j=1;

while(p&&j<=i-1)

{p=p->next; ++j;}

s=(sequenlist *)malloc(LEN);

scanf("%s %s %f %f",s->num,s->name,&s->g,&s->s);

s->next=p->next;

p->next=s;

}

5)学生信息的查询模块:

sequenlist *findList(sequenlist *L)函数,用if等条件语句,实现“1.按学号查询;2.按姓名查询”两种查询方式,接着运用while循环,核对有无该生信息,既而显示该生的所有信息或显示“无该生信息!”等。

sequenlist *findList(sequenlist *L) //学生信息的查询

{

sequenlist *P=L->next;

char num[8];

char name[9];

int xz;

printf("===========================\n");

printf("1、按学号查询\n");

printf("2、按姓名查询\n");

printf("===========================\n");

printf(" 请选择: ");

scanf("%d",&xz);

if (xz==1)

{

printf("请输入要查找学生的学号:");

scanf("%s",num);

while(P!=NULL&&strcmp(P->num,num)!=0){P=P->next;};

if(P==NULL){printf("没有要找的学生\n");return(NULL);}

else

return(P);

}

else if (xz==2)

{

printf("请输入要查找学生的姓名:");

scanf("%s",name);

while(P!=NULL&&strcmp(P->name,name)!=0){P=P->next;};

if(P==NULL){printf("没有要找的学生\n");

return(NULL);}

else return(P);

}

}

6)学生信息的删除模块:

void delNode(sequenlist *L)函数,用了对学号查询方式和核对有无该生信息,既而删除该生的所有信息或者显示“没有要删除的信息!”等。

void delNode(sequenlist *L)

{char num[8];

sequenlist * P1,*p2,*head;

printf("请输入要删除的结点num\n");

scanf("%s",num);

P1=L->next;head=L->next;

while(strcmp(P1->num,num)!=0&&P1->next!=NULL)

{p2=P1;P1=P1->next;}

if(strcmp(P1->num,num)==0)

{if(P1==head)L->next=P1->next;

else p2->next=P1->next;free(P1);printf("信息已删除\n");

}

else printf("没有要删除的信息!\n");

}

7)学生信息的修改模块:

void change(sequenlist *L) 函数,用学号对该学生是否存在进行查找,如存在进入子函数void devise(sequenlist *L),运用switch(choice) case选择要修改的项,如学号、姓名、平时成绩、期末成绩等,如不需修改,则选择0退出修改子函数。如没找到学生,则输出“无学生记录!”void devise(sequenlist *L)

{sequenlist *head,*P;

head=L->next;

int choice;

choice = -1;

do

{

printf("请选择您要修改的学生的信息内容:\n"); printf("+----------------------+\n");

printf("| 姓名请按 1 |\n");

printf("| 学号请按 2 |\n");

printf("| 平时成绩请按 3 |\n");

printf("| 期末成绩请按 4 |\n");

printf("| 取消请按 0 |\n");

printf("+----------------------+\n");

printf("请输入您的选择:");

scanf("%d", &choice);

switch(choice)

{

case 0:

return;

case 1:

printf("请输入新姓名:");

scanf("%s", P->name);

break;

case 2:

printf("请输入新学号:");

scanf("%s", P->num);

break;

case 3:

printf("请输入新平时成绩:");

scanf("%f", &P->g);

break;

case 4:

printf("请输入新期末成绩:");

scanf("%f",&P->s);

break;

default:

printf("\n无效选项!");

break;

}

printf("修改成功!\n") ;

}

while(choice != 0);

}

void change(sequenlist *L)

{ sequenlist *p;

p = L->next;

char num;

if(p == NULL)

{

printf("无学生记录!\n");

return;

}

printf("请输入您要修改的学生的学号:");

scanf("%s", &num);

if(p->num)

devise(p);

return;

}

8)所有学生信息的显示模块:

void printList(sequenlist *head)函数,运用if判断是否为空,若不空则用while循环,输出每个学生的所有信息。

void printList(sequenlist *head)

{

sequenlist *p;

printf("\n学号姓名平时成绩期末成绩\n");

printf("-------------------------------------------\n");

p=head;p=p->next;

if(head!=NULL)

do

{ printf("%s,%s,%f,%f\n",p->num,p->name,p->g,p->s);

printf("-----------------------------------------------\n");

p=p->next;

}while(p);

}

9)主函数模块:

void main(),运用switch,case实现因菜单函数int menu()的不同的返回值而调用不同的功能函数,又用case循环体简洁、直观的实现操作的循环进行。

四.调试

此次函数调试过程中主要存在两个小问题

1.结构体中大小写的定义

2.Strcmp函数的使用,字符之间的比较

五.用户使用说明

1.进入主页面

2.建立学生线性表

3.输入学生信息

4.插入学生信息

5.查询学生信息

6.修改学生信息

7.删除学生信息

8.显示所有学生信息

9.退出

六.测试结果

如用户使用说明可见:

第一模块,录入学生信息可自主选择录入学生的人数且能全部保存。

第二模块,可按学号选择插入的位置并插入。

第三模块,查询可自主选择按学号或学生姓名查询且能正确输出结果。

第四模块,修改可按学号选择要修改的学生信息,并自主选择要修改的信息项。

第五模块,按学号选择要删除的节点并快速删除。

第六模块,能正确输出所有学生信息。

所有模块均能正常工作且能正确执行并自动返回主页面,基本完成了任务书中各项要求。

表格模板-利用单项链表实现简单的学生信息管理 精品

河北工业大学计算机软件技术基础(VC)课程设计报告 一、题目: 利用单项链表实现简单的学生信息管理(07) 二、设计思路 1、总体设计 1)分析程序的功能 创建单项链表保存学生的各项信息,学号、姓名、成绩。并能够完成学生信息的插入、删除及信息的显示功能。 2)系统总体结构: 按照程序要求的功能采用结构化的设计思想,划分为五个功能模块,即创建链表、插入函数、删除函数、显示函数和主函数。 2、各功能模块的设计:说明各功能模块的实现方法 ①头文件:对自己定义的函数进行函数声明。 ②主函数:进行函数的调用,实现各函数的功能,达到预期的目的。 ③函数定义部分:定义各个功能函数,创建链表函数、插入新信息函数、删除信息函数、显 示信息函数。 3、设计中的主要困难及解决方案 1)在插入新信息时,有插入点在表头、中间、表尾三种情况,为此采用讨论的方法,把三种情况进行讨论使其分开进行。 2)在删除信息时,有删除的为头结点和中间结点的情况,采用讨论的方法,把两种情况分开来进行。 4、你所设计的程序最终完成的功能 1)创建链表、插入新信息、删除信息、显示信息。 2)测试数据 ①输入的数据

99812 LiuLifang 91 学号姓名成绩 96085 WangLiPing 77 98120 ZhangLi 75 99912 LiuHai 80 ③删除的数据 学号姓名成绩 99812 liulifang 91 运行结果

三、程序清单 本程序包含creatlist.cpp、insert.cpp、del.cpp、output.cpp、main.cpp、头文件.h六个文件 1、creatlist.cpp文件清单

数据结构实验总结报告

数据结构实验总结报告 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,

会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。 (3)程序界面更加人性化。 Huffman Tree Demo (C) 2011-12-16 boj Usage: huffman [-c file] [-u file] output_file -c Compress file. e.g. huffman -c test.txt test.huff -u Uncompress file. e.g. huffman -u test.huff test.txt 目前的程序提示如上所示。如果要求实用性,可以考虑加入其他人性化的功能。 三、调研常用的压缩算法,对这些算法进行比较分析 (一)无损压缩算法 ①RLE RLE又叫Run Length Encoding,是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如,JPEG就使用它)。 变体1:重复次数+字符 文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。

C++课程设计单链表——学生信息管理系统

学生信息管理系统设计文档 一、设计任务描述 为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管 理系统”软件,该软件适用于所有win dows操作系统,面向广大用户, 界面简洁,操作简单。此软件主要是实现对学生学籍信息进行系统化的管理,可 以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。该软件可以更加方便管理者管理学生学籍信息。 二、功能需求说明 该系统所需要的功能有:1链表的建立; 2、学生信息的插入; 3、学生信息的查询; 4、学生信息的输出; 5、学生信息的修改; 6、学生信息的删除; 7、良好的欢迎选择界面。 三、总体方案设计 一、实现任务的方法 1、在欢迎选择界面中,使用Switch这一选择结构来连接程序的执行和用户的命令; 2、在从学生信息的建立直到删除,都是使用链表的相关知识; 3、在定义学生信息时,建立一个Inform类;在定义学生课程成绩时,自定义了一个achieve结构体;

ST rucr acnieve { int nunber : char nane [10] [10]; float achieveiaent [13]: float xuefen [10]: float 0 : float average ; achieve C): float count average (); struct Inform {chai name[10]: char num[20]: string sex: string: id; string bir; string adr : string tel, achieve ach; void achinput 0 : void achprint 0 ; }; 三、模块划分 (1)链表的建立。 (2)对链表信息的插入。 (3)对链表信息的查找。 (4)对链表信息的输出。 (5)对链表信息的删除。 (6)对链表信息的修改。 课程成绩信息作为附加信息,穿插于各个模块中 三、数据结构说明 一、自定义的数据结构: 1、achieve (课程成绩)用于存放课程成绩信息包括课程数、课程名、 成绩、学分、总分和平均分。 "谍稈数 〃课程容(最參课稈数为nn "成绩 "学专 "总分 "平均分 "默认枸隆雷教 "计算该学生课程的加权平均分(总咸绩/总学分) "元素类型 "姓名 〃学号 〃性别 "身份证号 //出生年月曰 〃家庭地址 "电话号码 "课程咸绩 "谍程成绩输入 "遥程成缢输出 3、结点结构-Nodetype,定义了数据域inform和指针域next; 2、inform (学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。

数据结构课程设计题目选择

数据结构课程设计题目 说明: (1)选用语言:C或Java语言; (2)需要注明3人(可少于3人)小组各自承担和完成的任务(据此给予成绩); (3)如下带“*”的题目,“*”越多,难度越大一些,分值权重更高---要得到更高分数,推荐选择。 要求: (1) 用中文给出设计说明书(含重要子函数的流程图); (2) 给出测试通过、能实现相应功能的源代码; (3) 测试报告。 0、小学数学四则混合运算试题出题、评价、题库自动生成与组卷系统(****)---已经有2组选择 任务: (1)将随机给出的四则混合运算表达式显示在计算机显示器上,要求应试者给出答案;并且使用堆栈对该表达式求值,同给出的答案进行比较,判断 正确和错误。给出鼓励信息和嘉奖信息; (2)保存多人在不同时间应试的题目与他(或她)给出的答案,评价所出题目的难易程度(通过多人回答正确与否的情况给出),形成题库; (3)按照用户给出的题目难易程度指标(例如让50人的得分满足怎样的正态分布,如90分以上10%,80分以上30%,70分以上30%,60分以上20%,60分 以下10%),从题库中抽取不同的题目,组成试卷。 要求:随机产生的题目中,参加运算的数据随机、运算符随机。题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价。 1、集合的并、交和差运算---已经有1组选择 任务:编制一个能演示执行集合的并、交和差运算的程序。 要求: (1) 集合的元素限定为小写字母字符[…a?..?z?] 。 (2) 演示程序以用户和计算机的对话方式执行。 实现提示:以链表表示集合。 选作内容: (1) 集合的元素判定和子集判定运算。 (2) 求集合的补集。 (3) 集合的混合运算表达式求值。 (4) 集合的元素类型推广到其他类型,甚至任意类型。 2、停车场管理------已经有2组选择 任务:设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 要求:以栈模拟停车场,以队列模拟车场外的便道。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停车不收费)。栈以顺序存储结构实现,队列以链表结构实现。 3、哈夫曼码的编/译码系统(**)---已经有1组选择

用链表与文件实现学生成绩管理系统

#include #include #include #include #include using namespace std; struct Class { int Chinese; int Math; int English; }; class Student { public: Student(); void Ofile(ofstream &of); void Infile(ifstream &f); void Out(); void Set(char *name,int no,Class score); char *GetName(); int GetNo(); Student *Next; protected: char Name[20]; int No; Class Score; }; Student::Student():Next(0){} char *Student::GetName() { return Name; } int Student::GetNo() {return No;} void Student::Set(char *name,int no,Class score) { strcpy(Name,name); No=no; Score=score; } void Student::Infile(ifstream &f) { f>>Name>>No>>Score.Chinese>>Score.Math>>Score.English; //将数据输入到文

数据结构课程设计题目及要求

实验一~实验四任选一题;实验五~实验九任选一题。 实验一运动会分数统计 一、实验目的: (1)熟练掌握线性表的两种存储方式 (2)掌握链表的操作和应用。 (3)掌握指针、结构体的应用 (4)按照不同的学校,不同项目和不同的名次要求,产生各学校的成绩单、团体总分报表。 二、实验内容: 【问题描述】 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 【基本要求】 产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 【测试数据】 对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。 【实现提示】 可以假设m≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。 【选作内容】 允许用户指定某些项目可采取其他名次取法。

实验二停车场管理 一、实验目的: (1)熟练掌握栈顺存和链存两种存储方式。 (2)掌握栈的基本操作及应用。 (3)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 二、实验内容: 【问题描述】 设停车场是一个可停放n辆汽车的长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。 【测试数据】 设n=2,输入数据为:(A,1,5),(A,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。 【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少? (2)汽车可有不同种类,则他们的占地面积不同收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 (4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。

用链表与文件实现学生成绩管理系统

用链表与文件实现学生成绩管理系统 学生姓名:李卉指导老师:肖增良 摘要学生成绩管理系统是典型的信息管理系统,是学校教务管理的重要组成部分,其处理信息量很大。本课程设计是用C++实现对学生的成绩管理作一个简单的模拟,实质是建立学生成绩单链表,每条记录由姓名、学号与成绩组成,即链表中每个结点由4个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域。用菜单选择操作方式完成五项功能分别写成五个函数,插入学生成绩对应建立学生单链表的功能,输出全部学生成绩记录,后三个功能分别对应单链表的查询、修改与删除三大基本操作。该系统中的数据采用线性表中的链式存储结构即单链表来存储,用结构体类型和类类型定义每个学生记录并采用外部文件方式记录数据简便数据的读取与保存。 关键词程序设计;C++;单链表;学生成绩管理系统

1 引言............................................................................................................................................................ 3 1.1 课程设计目的..................................................................................................................................... 3 1.2课程设计内容...................................................................................................................................... 3 1.3课程设计目标...................................................................................................................................... 42系统需求与功能分析..................................................................................................................................... 5 2.1 系统需求分析..................................................................................................................................... 5 2.2系统功能分析...................................................................................................................................... 5 2.3系统性能分析...................................................................................................................................... 63总体结构设计................................................................................................................................................. 7 3.1系统的结构设计.................................................................................................................................. 7 3.2系统管理流程图.................................................................................................................................. 7 4 系统详细设计和系统实现............................................................................................................................ 9 5 系统测试.................................................................................................................................................... 13 6 结束语........................................................................................................................................................ 16参考文献........................................................................................................................................................ 17附录1:结构化设计源程序清单......................................................................................................... 18

单链表的学生成绩管理系统设计与实现

长春建筑学院《数据结构》课程设计(论文) 基于单链表的学生成绩管理系统设计与实现 Design and implementation of the system of student performance management based on single table 年级: 12级 学号: 121500103 姓名: 徐文辉 专业:计算机科学与技术 指导老师: 常大俊 二零一三年十二月

摘要 学生成绩管理系统是典型的信息管理系统,是学校教务管理的重要组成部分,其处理信息量很大。本课程设计是用C++实现对学生的成绩管理作一个简单的模拟,实质是建立学生成绩单链表,每条记录由姓名、学号与成绩组成,即链表中每个结点由4个域组成,分别为:学号、、成绩、存放下一个结点地址的next域。用菜单选择操作方式完成五项功能分别写成五个函数,插入学生成绩对应建立学生单链表的功能,输出全部学生成绩记录,后三个功能分别对应单链表的查询、修改与删除三大基本操作。该系统中的数据采用线性表中的链式存储结构即单链表来存储,用结构体类型和类类型定义每个学生记录并采用外部文件方式记录数据简便数据的读取与保存。 关键词:数据结构,单链表,C语言,学生成绩管理

Abstract Student achievement management system is a typical management information system, is an important part of the school educational administration management, the large amount of information. The curriculum design is used to achieve C++ performance management for the students to make a simplesimulation, the essence is to establish students report list, each recordconsists of name,and grade, namely the linked list in each node iscomposed of 4 domains, respectively: next domain name, student number,grade, put down a node address the. Complete the five functions were written in five function menu to select the mode of operation, into the student achievement established a single list of the output function of students, allstudents record, after the three functions corresponding to single table query,modify and delete the three basic operations. The system data in the linked storage structure of linear table is a single linked list to store, use the structure types and class types define each student records and the use of an external file to read and save data and simple data record.

C语言写的学生成绩管理系统(链表)

#include #include #include struct stud{ long num; char name[20]; float sx; float dx; float ts; float dl; float cx; float zf; float pj; }; struct studcode{ struct stud student; struct studcode *next; }; void menu(); void input(struct studcode **); void output(struct studcode *); void binsearch(struct studcode *); void insert(struct studcode **); void delet(struct studcode **); void good(struct studcode *); void fail(struct studcode *); void sort(struct studcode *); void back(); void main() { char choose; int flag=1; struct studcode *head; head=NULL; printf("请先录入学生成绩信息\n"); printf("输入学生学号姓名高数、英语读写、英语听说、计算机导论和程序设计的成绩\n"); input(&head); while (flag)

{ system("cls"); menu(); printf("请选择:"); getchar(); choose=getchar(); switch(choose) { case '1': output(head); back(); break; case '2': binsearch(head); back(); break; case '3': insert(&head); output(head); back(); break; case '4': delet(&head); output(head); back(); break; case '5': good(head); back(); break; case '6': fail(head); back(); break; case '7': sort(head); output(head); back(); break; case '0': flag=0; printf("\n *** The End! ***\n"); printf("\n ####感谢使用,欢迎再次登录,拜拜!####\n");

关于数据结构课程设计心得体会范文

关于数据结构课程设计心得体会范文 心得体会是指一种读书、实践后所写的感受性文字。是指将学习的东西运用到实践中去,通过实践反思学习内容并记录下来的文字,近似于经验总结。下面是小编搜集的关于数据结构课程设计心得体会范文,希望对你有所帮助。 关于数据结构课程设计心得体会(1) 这学期开始两周时间是我们自己选题上机的时间,这学期开始两周时间是我们自己选题上机的时间,虽然上机时间只有短短两个星期但从中确实学到了不少知识。上机时间只有短短两个星期但从中确实学到了不少知识。 数据结构可以说是计算机里一门基础课程,据结构可以说是计算机里一门基础课程,但我觉得我们一低计算机里一门基础课程定要把基础学扎实,定要把基础学扎实,然而这次短短的上机帮我又重新巩固了 c 语言知识,让我的水平又一部的提高。数据结构这是一门语言知识让我的水平又一部的提高。数据结构这是一门知识,纯属于设计的科目,它需用把理论变为上机调试。 纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。来说具有一定的难度。它是其它编程语言的一门基本学科。我选的上机题目是交叉合并两个链表,对这个题目,我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错觉得很基础。 刚开始调试代码的时候有时就是一个很小的错调试代码的时候误,导致整个程序不能运行,然而开始的我还没从暑假的状导致整个程序不能运行,态转到学习上,每当程序错误时我都非常焦躁,态转到学习上,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件! 同时,通过此次课程设计使我了解到,必然具备的条件! 同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得件语言必不可缺少,要想成为一个有能力的人,硬件

基于单链表的学生信息管理系统源代码

//学生信息管理系统 #include #include #include #define NULL 0 #define LEN sizeof(struct student) //建立动态链表.cpp using namespace std; struct student { int num; char name[20]; char sex[5]; float math; float english; int order; struct student *next; }; int n; int male=0; int famale=0; struct student *creat(void) { struct student *head,*p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); cout<<"下面开始创建链表:"<>p1->num>>p1->name>>p1->sex>>p1->math>>p1->english; head=NULL; while(p1->num!=0) { if(strcmp(p1->sex,"男")==0) male++; else famale++; n++; if(n==1)head=p1; else p2->next=p1; p2=p1; p1=(struct student*)malloc(LEN); cin>>p1->num>>p1->name>>p1->sex>>p1->math>>p1->english; } p2->next=NULL; if(head==NULL) {

数据结构课程设计排序算法总结

排序算法: (1) 直接插入排序 (2) 折半插入排序(3) 冒泡排序 (4) 简单选择排序 (5) 快速排序(6) 堆排序 (7) 归并排序 【算法分析】 (1)直接插入排序;它是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好的序的有序表中,从而得到一个新的、记录数增加1的有序表。 (2)折半插入排序:插入排序的基本操作是在一个有序表中进行查找和插入,我们知道这个查找操作可以利用折半查找来实现,由此进行的插入排序称之为折半插入排序。折半插入排序所需附加存储空间和直接插入相同,从时间上比较,折半插入排序仅减少了关键字间的比较次数,而记录的移动次数不变。 (3)冒泡排序:比较相邻关键字,若为逆序(非递增),则交换,最终将最大的记录放到最后一个记录的位置上,此为第一趟冒泡排序;对前n-1记录重复上操作,确定倒数第二个位置记录;……以此类推,直至的到一个递增的表。 (4)简单选择排序:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之。 (5)快速排序:它是对冒泡排序的一种改进,基本思想是,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 (6)堆排序: 使记录序列按关键字非递减有序排列,在堆排序的算法中先建一个“大顶堆”,即先选得一个关键字为最大的记录并与序列中最后一个记录交换,然后对序列中前n-1记录进行筛选,重新将它调整为一个“大顶堆”,如此反复直至排序结束。 (7)归并排序:归并的含义是将两个或两个以上的有序表组合成一个新的有序表。假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序称为2-路归并排序。 【算法实现】 (1)直接插入排序: void InsertSort(SqList &L){ for(i=2;i<=L.length ;i++) if(L.elem[i]L.elem[0];j--) L.elem [j+1]=L.elem [j]; L.elem [j+1]=L.elem[0]; } } (2)折半插入排序:

C++学生成绩管理系统(完整)

( 二〇一四 年 十 一月 课程设计说明书 本科毕业设计 题 目: 学生成绩管理系统(教师端) 学生姓名: 陈 学 院:工学院 专 业:数字媒体技术 班 级:2013级 指导教师:

目录 一、设计题目(问题)描述和要求 ................................................... - 1 - 二、系统分析与模块设计 ................................................................... - 1 - 三、系统设计 ....................................................................................... - 2 - 1. 系统总体框架 ............................................................................ - 4 - 2. 系统关键算法流程图 ................................................................ - 5 - 四、运行结果 ..................................................................................... - 10 - 五、小结 ............................................................................................. - 10 - 六、参考资料 ..................................................................................... - 20 -

C++课程设计 单链表——学生信息管理系统

C++课程设计单链表——学生信息管理系统

学生信息管理系统设计文档 一、设计任务描述 为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管理系统”软件,该软件适用于所有windows操作系统,面向广大用户,界面简洁,操作简单。此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。该软件可以更加方便管理者管理学生学籍信息。 二、功能需求说明 该系统所需要的功能有:1、链表的建立; 2、学生信息的插入; 3、学生信息的查询; 4、学生信息的输出; 5、学生信息的修改; 6、学生信息的删除; 7、良好的欢迎选择界面。 三、总体方案设计 一、实现任务的方法 1、在欢迎选择界面中,使用Switch 这一选择结构来连接程序的执行和用户的命令; 2、在从学生信息的建立直到删除,都是使用链表的相关知识; 3、在定义学生信息时,建立一个Inform 类;在定义学生课程成绩时,自定义了一个achieve 结构体; 二、总体结构

三、模块划分 (1)链表的建立。 (2)对链表信息的插入。 (3)对链表信息的查找。 (4)对链表信息的输出。 (5)对链表信息的删除。 (6)对链表信息的修改。 课程成绩信息作为附加信息,穿插于各个模块中。 三、数据结构说明 一、自定义的数据结构: 1、achieve(课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分。 2、inform(学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。 3、结点结构-Nodetype,定义了数据域inform和指针域next;

利用单项链表实现简单的学生信息管理

利用单项链表实现简单的学生信息管理 一、题目: 利用单项链表实现简单的学生信息治理(07) 二、设计思路 1、总体设计 1)分析程序的功能 创建单项链表储存学生的各项信息,学号、姓名、成绩。并能够完成学生信息的插入、删除及信息的显示功能。 2)系统总体结构: 按照程序要求的功能采纳结构化的设计思想,划分为五个功能模块,即创建链表、插入函数、删除函数、显示函数和主函数。 2、各功能模块的设计:讲明各功能模块的实现方法 ①头文件:对自己定义的函数进行函数声明。 ②主函数:进行函数的调用,实现各函数的功能,达到预期的目的。 ③函数定义部分:定义各个功能函数,创建链表函数、插入新信息函数、删除信息函数、显 示信息函数。 3、设计中的要紧困难及解决方案 1)在插入新信息时,有插入点在表头、中间、表尾三种情形,为此采纳讨论的方法,把三种情形进行讨论使其分开进行。 2)在删除信息时,有删除的为头结点和中间结点的情形,采纳讨论的方法,把两种情形分开来进行。 4、你所设计的程序最终完成的功能 1)创建链表、插入新信息、删除信息、显示信息。 2)测试数据 ①输入的数据

99812 LiuLifang 91 学号姓名成绩 96085 WangLiPing 77 98120 ZhangLi 75 99912 LiuHai 80 ③删除的数据 学号姓名成绩 99812 liulifang 91 运行结果

三、程序清单 本程序包含creatlist.cpp、insert.cpp、del.cpp、output.cpp、main.cpp、头文件.h六个文件

#include #include"头文件.h" int n; student *creatlist() { student *head; student *p1; student *p2; n=0; head=NULL; p1=new(student); //创建一个新结点 p2=p1; cin>>p1->num>>p1->name>>p1->score; while(p1->num!=0) //链表建立过程终止的判定条件{ n++; head=p1; else p2->next=p1; //原链表结点指向新建结点p2=p1; p1=new(student); cin>>p1->num>>p1->name>>p1->score; } delete(p1); p2->next=NULL; return head; //返回表头 } 2、insert.cpp文件清单 #include #include"头文件.h" student *insert(student *head,student *t) { student *p0; //待插入点 student *p1; student *p2; //p0插入p1之前,p2之后p1=head; p0=t; if(p1==NULL) //原链表是空表 { head=p0; p0->next=NULL; } else

相关文档