数据结构实习报告Word格式.docx
- 文档编号:22616338
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:37
- 大小:374.19KB
数据结构实习报告Word格式.docx
《数据结构实习报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构实习报告Word格式.docx(37页珍藏版)》请在冰豆网上搜索。
4.程序流程图5
三、程序清单6
四、测试20
1.测试数据20
2.测试结果及分析20
五、总结24
1.收获24
2.不足24
一、设计目标
要求能够实现输入记录、查询记录、维护记录、排序记录等功能。
1.输入记录。
对每个学生的学号、姓名、性别、班级、数学、英语、语文成绩进行输入并存储,在程序的运行过程中,数据的存储可以采用结构体数组或者链表,但是最终应该存储在文件中。
2.维护记录。
能够实现添加、删除、修改学生记录。
3.查询记录。
根据姓名查询学生的成绩。
如果查询时学生数据并没有读入到结构体数组或者链表中,则应该先从文件中读出数据并存储在结构体数组或者链表中,然后在结构体数组或者链表中查询满足条件的数据。
4.排序记录。
可以按总分、平均分、课程、单科成绩进行排序。
二、课题分析与设计
1.课题需求分析
1.在设计时考虑以下几个方面:
操作简单。
因为使用者多为非计算机专业人员,所以该系统要求设计的界面美观,操作方便。
要充分考软件界面友好和操作方便,便愈使用人员快速上手。
易于维护。
一个软件的好坏,关键在于产品的可靠,稳定,便于维护。
2.开发语言的选择
针对世界上流行的大量软件和开发工具,经过认真分析其优缺点,结合目前的软硬件开发环境,选用微软WINDOWS平台下的VisualC++作为软件开发工具。
选用工具有几下几方面优点:
1C语言简洁、紧凑、使用方便、灵活。
有32个关键字。
C语言程序比其他许多高级语言简练,源程序短,因此输入程序时工作量小。
2运算符丰富。
3数据类型丰富,具有现代语言的各种数据结构。
4C语言是完全模块化和结构化的语言。
用函数作为程序的模块单位,便于实现程序的模块化。
5语法限制不太严格,程序设计自由度大。
6生成目标代码质量高,程序执行效率高。
7用C语言编写的程序可移植性好。
综上所述,VisualC++可以满足学生成绩管理的要求,所以用来开发学生成绩管理系统是非常合适的。
2.存储结构设计
voidSaveLinkToFile(void)
{
STUDENT*p;
FILE*fp;
p=headLink->
next;
if(p==NULL)
printf("
现在没有学生信息,请先输入学生信息\n\n"
);
return;
}
fp=fopen("
student.txt"
"
w+"
if(!
fp)
文件不存在\n"
while(p)
fprintf(fp,"
%s%s%s%f%f%f\n"
p->
studentNumber,p->
studentName,p->
className,p->
mark1,p->
mark2,p->
mark3);
p=p->
fclose(fp);
保存链表数据到文件中
3.算法设计
voidmain()
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
主函数调用,对整个模块进行总体概括。
switch(choose)
case1:
OutputInformation();
/*显示所有学生的信息*/
break;
case2:
DesplayInfoBystudentName();
case3:
p=MallocNode();
/*先申请一个新结点*/
GetInformation(p);
/*要求用户输入信息到新结点中*/
InsertOneNode(p);
/*将新结点加到链表中*/
case4:
DeleteNodeBystudentNumber();
/*根据用户输入的学号删除该学生*/
case5:
ChangeMarkByName();
/*根据用户输入的姓名修改学生成绩*/
case6:
ChangeMarkByNumber();
/*根据用户输入的学号修改学生成绩*/
case7:
SaveLinkToFile();
/*保存数据*/
case8:
DesplayMarkSegment();
/*显示不及格的学生成绩*/
case9:
CompositorByTotalMark();
/*按平均成绩排序*/
case10:
CompositorByeachMark1();
break;
case11:
CompositorByeachMark2();
case12:
CompositorByeachMark3();
case13:
/*保存数据后再退出*/
free(headLink);
default:
/*递归调用*/
功能:
定义菜单函数,通过输出函数显示系统功能。
利用switch语句实现多分支选择结构,完成递归调用。
算法思路:
switch语句的执行流程是:
首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句
4.程序流程图
三、程序清单
程序清单:
#include<
stdio.h>
conio.h>
malloc.h>
string.h>
typedefstructSTUDENT
charstudentSex[5];
charstudentNumber[10];
/*学生学号*/
charstudentName[20];
/*学生姓名*/
charclassName[20];
/*班级名称*/
charyearName[20];
/*学期名称*/
floatmark1;
/*第1门成绩*/
floatmark2;
/*第2门成绩*/
floatmark3;
/*第3门成绩*/
structSTUDENT*next;
}STUDENT;
STUDENT*headLink;
/*链表表头指针*/
/*以下是函数声明*/
voidReadInfoFormFile(void);
voidDesplayMenu(void);
voidCreateHeadLink(void);
STUDENT*MallocNode(void);
voidGetInformation(STUDENT*t);
voidOutputInformation(void);
voidDesplayInfoBystudentName(void);
voidDesplayOneNode(STUDENT*t);
voidInsertOneNode(STUDENT*t);
voidDeleteNodeBystudentNumber(void);
voidChangeMarkByName(void);
voidChangeMarkByNumber(void);
voidSaveLinkToFile(void);
voidDesplayMarkSegment(void);
voidCompositorByTotalMark(void);
voidCompositorByeachMark1(void);
voidCompositorByeachMark2(void);
voidCompositorByeachMark3(void);
intchoose;
/*用于接受用户的选择*/
/*主函数*/
voidmain()
/************************************
函数功能:
从文件中读学生信息到链表中
************************************/
voidReadInfoFormFile(void)
r"
while(fscanf(fp,"
%s%s%s%f%f%f"
className,&
(p->
mark1),&
mark2),&
mark3))>
0)
显示菜单,根据用户的输入
完成相应的功能
voidDesplayMenu(void)
*********************请选择相应功能*******************\n\n"
|1按班级输出学生成绩单|\n"
|2按姓名查询|\n"
|3增加学生|\n"
|4删除学生|\n"
|5按班级修改学生成绩|\n"
|6按学期修改学生成绩|\n"
|7保存所有学生信息|\n"
|8显示不及格学生成绩|\n"
|9按总成绩或平均成绩排序并输出成绩|\n"
|10按语文成绩排序并输出成绩|\n"
|11按英语成绩排序并输出成绩|\n"
|12按数学成绩排序并输出成绩|\n"
|13退出|\n"
//printf("
|10|\n\n"
scanf("
%d"
&
choose);
/*取得用户的选择*/
建立链表表头
voidCreateHeadLink(void)
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->
next=NULL;
申请一个新结点,并将其初始化
STUDENT*MallocNode(void)
inti;
returnNULL;
for(i=0;
i<
10;
i++)
studentNumber[i]='
\0'
;
20;
studentName[i]='
className[i]='
mark1=0.0;
mark2=0.0;
mark3=0.0;
returnp;
取得用户输入的学生信息
voidGetInformation(STUDENT*t)
******请输入学生学号:
\n"
%s"
t->
studentNumber);
******请输入学生姓名:
studentName);
******请输入学生性别:
studentSex);
******请输入该生所在班级:
className);
******请输入语文成绩:
%f"
(t->
mark1));
******请输入英语成绩:
mark2));
******请输入数学成绩:
mark3));
在链表的结尾处增加一个结点
voidInsertOneNode(STUDENT*t)
p=headLink;
while(p->
next)
next=t;
根据用户输入的学生姓名显示该学生的信息
voidDesplayInfoBystudentName(void)
charflag=0;
请输入学生姓名:
studentName);
if(strcmp(p->
studentName,studentName)==0)
学号\t姓名\t班级\t语文\t英语\t数学\t总成绩\t平均成绩\n\n"
DesplayOneNode(p);
flag=1;
flag)
对不起,不存在姓名为%s的学生\n"
输出一个结点的信息
voidDesplayOneNode(STUDENT*t)
%s\t"
%.2f\t"
mark1);
mark2);
mark1+t->
mark2+t->
%.2f\t\n"
(t->
mark3)/3);
根据用户输入的学号删除该学生
voidDeleteNodeBystudentNumber(void)
STUDENT*p,*q;
请输入要删除的学生学号:
"
studentNumber);
q=headLink->
while(q)
if(strcmp(q->
studentNumber,studentNumber)==0)
p->
next=q->
free(q);
flag=1;
p=p->
q=q->
if(!
不存在该学号的学生\n"
成功删除\n"
显示所有学生的信息
voidOutputInformation(void)
学号\t姓名\t班级\t语文\t英语\t数学\t总成绩\t平均成绩\n\n"
根据输入的班级修改成绩
voidChangeMarkByName(void)
inta;
floatmark1,mark2,mark3;
请输入学生班级:
a);
请输入新的语文成绩:
请输入新的英语成绩:
请输入新的数学成绩:
mark1=mark1;
mark2=mark2;
mark3=mark3;
修改成功\n"
对不起,不存在班级为%s的学生\n"
根据输入的学期修改成绩
voidChangeMarkByNumber(void)
intb;
charstudentNumber[20];
请输入学生所在学期:
b);
请输入学生学号:
studentNumber,studentNumber)==
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实习 报告