数据结构课程设计实验报告学生管理.docx
- 文档编号:9262275
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:23
- 大小:350.06KB
数据结构课程设计实验报告学生管理.docx
《数据结构课程设计实验报告学生管理.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告学生管理.docx(23页珍藏版)》请在冰点文库上搜索。
数据结构课程设计实验报告学生管理
中南大学
“数据结构”课程设计(学生管理系统)
专业:
计算机类
班级:
姓名:
学号:
完成日期:
二〇一〇年七月六日
目录:
1问题描述
2基本要求
3系统分析与设计
4测试数据及结果
5总结
6附录:
源程序清单
学生信息管理系统
1.问题描述
设计一个学生信息管理系统,实现对学生基本信息的添加、删除、修改和查询等操作。
2.基本要求:
程序采用图形界面下进行交互的工作方式,完成如下功能:
(1)多种方式建立学生信息
●每个学生信息由学号、姓名、数学、英语和语文组成;
●可以通过手工录入每个学生信息,并在StudentFile.txt保存;
●也可以导入某个路径下存放学生信息的文本文件。
(2)浏览所有学生信息。
(3)按照学号对所有学生信息进行升序、降序排列,并输出
●可选用冒泡、选择、快速排序等算法;
●不仅输出屏幕显示,还需要写入存放学生信息的文件。
(4)按姓名、学号等方式,实现对学生信息精确查询、模糊查询,并输出屏幕显示
●精确查询结果演示
查询“姓名是刘梅”同学信息,则输出
学号姓名数学英语语文………..
2004112011刘梅889078……....
●模糊查询结果演示
查询“姓刘”的同学信息,则输出
学号姓名数学英语语文………..
2004112011刘梅889078……....
2004112011刘强878098……....
2004112011刘星867058……....
●能够实现连续多次查询
(5)学生信息的插入、删除、修改。
●通过插入、删除和修改后,保持所有学生信息的有序性;
●插入、删除和修改后,对存放所有学生信息的文件及时更新。
(6)数据的统计功能
●统计每个学生的平均分和总分;
●统计每个科目的平均分和最高分、最低分;
●将上述统计结果,写入存放学生信息的文件。
3系统分析与设计
流程图:
学生信息由一个学生结构体保存其个人信息。
学生结构体存放于一个结构体数组中,即线性表。
各个学生按照学号排序,此处用到了直接插入排序。
从数组的第一个元素开始存放学生结构体,0号做“哨兵”。
信息的模糊查询:
可通过学号或者姓名进行查询,用字符串的匹配完成这一功能。
信息的删除:
精确查询到该学生信息的存储位置,然后逐个将后面的信息前移一个位置,实现删除功能。
输出时的结果为顺序排列后的信息。
启动系统,插入信息后,会在C盘根目录下生成一个STUDENTF的文件,学生信息保存在这里,进行删除或者插入后会实时更新文件内容。
重新打开系统,程序会首先载入文件内容,即上次更新后的信息。
我们也可以到C盘根目录下找到保存文件,查看其中内容。
选择退出项后,退出系统。
4测试数据及结果
本程序以TC为编译运行环境。
输入信息后,输出学生信息:
修改0909083124号成绩为150.150.150后:
文件内容:
删除:
删除这三个信息后输出:
可以看到,原来有7组记录,删除3组记录后,剩余4组记录,且有序。
此时文件内容为:
统计结果:
主菜单:
5总结:
本学期学习数据结构这门课程,在学习算法的同时,也在不断巩固着我们C语言的基础知识功底。
本次实验使我深化理解了数据结构的有关知识。
对于线性表,排序,查找,串的匹配等算法在实际中的应用有了更深一步的了解。
真正认识到通用算法的作用,理解并应用这些算法,不但大大提高了编程的速度。
同时这些算法的高效性,也使程序能够更有效的运行,时间复杂度更低。
实验过程中应当注意一些细节性的问题,主要有,=与==经常写错。
循环条件的临界位置,是大于等于或者小于等于还是大于或小于,一不小心便会出错。
通过本次课程设计,我体会到了编程能力的中很重要的两点:
①良好的编程习惯。
有一个良好的编程习惯是很重要的,例如一个好的命名习惯,可以让变量所表示的数据很明显,写程序时结构分明,适当的添加注释。
不但便于和其他人之间的交流,而且在日后重新看自己这段代码的时候,也易于看懂。
否则,一段时间后,自己写的代码也需要花费很多时间才能看懂。
②学习一些算法很重要。
虽然随着科技发展,计算机速度越来越快,程序的运行速度的影响已经大大不如从前。
但是,一个好的算法,能提高程序运行速度。
而且,理解掌握好的算法,不但可以使人养成良好的编程思想,还能提高编程时的速度。
另外的一点体会是,不但要提高自己的编程能力,而且还要注意培养自己的表达能力。
能够将一个程序的功能以一种简单明了的方式表达出来很重要。
现在对着老师讲,尚且讲不好,将来,面对客户呢?
这是通过本次实验,我意识到的又一个很重要的问题。
6附录(源代码):
#include
#include
#include
#include
#include"graphics.h"
typedefstructStudent
{
longkey;
charnum[11];
charname[20];
intenglish;
intmath;
intchinese;
inttotal;
}STU;
typedefstruct
{
STU*stu;
intlength;
}List;
voidinitgr(void)/*BGI初始化*/
{
intgd=DETECT,gm=0;/*和gd=VGA,gm=VGAHI是同样效果*/
initgraph(&gd,&gm,"");
}
voidflash(intx1,inty1,intx2,inty2)
{inti;
setcolor(YELLOW);
rectangle(x1,y1,x2,y2);
for(i=0;i<15;++i)
{
delay(50000);
}
setcolor(BLACK);
rectangle(x1,y1,x2,y2);
for(i=0;i<10;++i)
{
delay(50000);
}
}
voidflash_circle(intx,inty,intr)
{
inti;
setcolor(YELLOW);
circle(x,y,r);
for(i=0;i<15;++i)
{
delay(50000);
}
setcolor(BLACK);
circle(x,y,r);
for(i=0;i<15;++i)
{
delay(50000);
}
}
intIndex(charT1[],charT2[])
{unsignedinti;
for(i=0;(i { if(T1[i]! =T2[i])break; } if(strlen(T2)==i)return1;/*1说明匹配成功*/ elsereturn0; } intmain(void) { floataver_math,aver_english,aver_chinese; longall_math=0,all_english=0,all_chinese=0; inttop_math,low_math,top_english,low_english,top_chinese,low_chinese; intchoose; ListL; inti; intj;FILE*fp_stu; charsearch_num[11]; charyn; L.stu=(STU*)malloc(100*sizeof(STU)); L.length=0; if (1) { if((fp_stu=fopen("c: \\StudentFile.txt","rb"))==NULL) { printf("thefirsttimetousethesystem,pleaseinputinformation"); gotogotostar; } for(j=1;! feof(fp_stu);++j) { fscanf(fp_stu,"%s%s%d%d%d",&L.stu[j].num,&L.stu[j].name,&L.stu[j].math,&L.stu[j].english,&L.stu[j].chinese); ++L.length; } } --L.length; gotostar: printf("%d\n",L.length); while (1) { charkbkey='1';intchoose; initgr();/*BGI初始化*/ setbkcolor(BLACK); setcolor(BLUE); setfillstyle(SOLID_FILL,BLUE);/*这句话的作用,可以不为BLUE*/ rectangle(120,80,500,160); floodfill(162,82,BLUE);/*必须和边框颜色相同*/ rectangle(80,210,240,260); floodfill(82,212,BLUE); rectangle(400,210,560,260); floodfill(402,212,BLUE); rectangle(80,310,240,360); floodfill(82,312,BLUE); rectangle(400,310,560,360); floodfill(402,312,BLUE); rectangle(80,410,240,460); floodfill(82,412,BLUE); rectangle(400,410,560,460); floodfill(401,413,BLUE); setcolor(LIGHTRED); setfillstyle(SOLID_FILL,LIGHTRED); circle(320,240,25);/*画圆*/ floodfill(320,240,LIGHTRED); setcolor(YELLOW); settextjustify(1,1); settextstyle(1,0,1); outtextxy(320,120,"StudentInformationManagementSystem"); outtextxy(160,235,"1.Insert"); outtextxy(480,235,"2.alter"); outtextxy(160,335,"3.detele"); outtextxy(480,335,"4.search"); outtextxy(160,435,"5.outputall"); outtextxy(480,435,"6.statistics"); outtextxy(320,240,"7.exit"); outtextxy(320,50,"Author: ZhaoYingnan"); while (1) { switch(kbkey) { case'1': while(! kbhit()) { flash(75,205,245,265); }break; case'2': while(! kbhit()) { flash(395,205,565,265); } break; case'3': while(! kbhit()) { flash(75,305,245,365); }break; case'4': while(! kbhit()) { flash(395,305,565,365); }break; case'5': while(! kbhit()) { flash(75,405,245,465); }break; case'6': while(! kbhit()) { flash(395,405,565,465); }break; case'7': while(! kbhit()) { flash_circle(320,240,28); }break; default: break; } if(kbkey%48<=7) { choose=kbkey%48; } kbkey=getch(); if('\n'==kbkey||'\r'==kbkey)break; } /*getch();*//*暂停一下,看看前面绘图代码的运行结果*/ closegraph();/*恢复TEXT屏幕模式*/ printf("choose=%d\n",choose);fflush(stdin); switch(choose) { case1: while (1) { i=L.length+1; printf("num: "); gets(L.stu[i].num); printf("name: "); gets(L.stu[i].name); printf("math: "); scanf("%d",&L.stu[i].math);fflush(stdin); printf("english: "); scanf("%d",&L.stu[i].english);fflush(stdin); printf("chinese: "); scanf("%d",&L.stu[i].chinese);fflush(stdin); L.stu[0]=L.stu[i]; for(;i>=0;--i) { L.stu[i].key=atol(L.stu[i].num); } for(j=L.length;L.stu[0].key { L.stu[j+1]=L.stu[j]; } L.stu[j+1]=L.stu[0]; ++L.length; if((fp_stu=fopen("c: \\StudentFile.txt","wb"))==NULL) { printf("Cannotopenfilestrikeanykeyexit! "); getch(); exit (1); } for(j=1;j<=L.length;++j) { fprintf(fp_stu,"%s\t%s\t%d\t%d\t%d\r\n",L.stu[j].num,L.stu[j].name,L.stu[j].math,L.stu[j].english,L.stu[j].chinese); } fclose(fp_stu); printf("continue? (y/n)"); if((yn=getchar())=='y'){fflush(stdin);continue;} elsebreak; } break; case2: while (1) { printf("inputthenumtoalter: "); gets(search_num); for(i=1;i<=L.length;++i) { if(0==strcmp(L.stu[i].num,search_num)) { printf("queryiscompleted! thestudent'sinformation: \n"); printf("num\tname\tMath\tEnglish\tChinese\n"); printf("%s\t%s\t%d\t%d\t%d\n",L.stu[i].num,L.stu[i].name,L.stu[i].math,L.stu[i].english,L.stu[i].chinese); break; } } printf("i=%d,length=%d\n",i,L.length); if(i>L.length){printf("notfind! \nre");continue;} printf("inputinfotochange: \n"); printf("Math: "); scanf("%d",&L.stu[i].math); printf("English: "); scanf("%d",&L.stu[i].english); printf("Chinese: "); scanf("%d",&L.stu[i].chinese); if((fp_stu=fopen("c: \\StudentFile.txt","wb"))==NULL) { printf("Cannotopenfilestrikeanykeyexit! "); getch(); exit (1); } for(j=1;j<=L.length;++j) { fprintf(fp_stu,"%s\t%s\t%d\t%d\t%d\r\n",L.stu[j].num,L.stu[j].name,L.stu[j].math,L.stu[j].english,L.stu[j].chinese); } fclose(fp_stu);fflush(stdin); printf("continue? (y/n)"); if((yn=getchar())=='y'){fflush(stdin);continue;} elsebreak; } break; case3: while (1) { printf("enternumtodelete: "); gets(search_num); for(i=1;i<=L.length;++i) { if(0==strcmp(L.stu[i].num,search_num)) break; } if(i>L.length)printf("nonumtodelete! \n"); else { for(j=i;j {L.stu[j]=L.stu[j+1];} --L.length; } if((fp_stu=fopen("c: \\StudentFile.txt","wb"))==NULL) { printf("Cannotopenfilestrikeanykeyexit! "); getch(); exit (1); } for(j=1;j<=L.length;++j) { fprintf(fp_stu,"%s\t%s\t%d\t%d\t%d\r\n",L.stu[j].num,L.stu[j].name,L.stu[j].math,L.stu[j].english,L.stu[j].chinese); } fclose(fp_stu); printf("continue? (y/n)"); if((yn=getchar())=='y'){fflush(stdin);continue;} elsebreak; } break; case4: while (1) { printf("enterthesearchingnumorname: "); gets(search_num);j=0; for(i=1;i<=L.length;++i) { if(1==Index(L.stu[i].num,search_num)) { printf("queryiscompleted\n"); printf("num\tname\tMath\tEnglish\tChinese\n"); printf("%s\t%s\t%d\t%d\t%d\n",L.stu[i].num,L.stu[i].name,L.stu[i].math,L.stu[i].english,L.stu[i].chinese); ++j; if(i==L.length)break; continue; } if(j>0&&j==L.length)break; } for(i=1;i<=L.length;++i) { if(1==Index(L.stu[i].name,search_num)) { printf("queryiscompleted\n"); printf("num\tname\tMath\tEnglish\tChinese\n"); printf("%s\t\t%s\t%d\t%d\t%d\n",L.stu[i].num,L.stu[i].name,L.stu[i].math,L.stu[i].english,L.stu[i].chinese); ++j; if(i==L.length)break; continue; } if(j>0&&j==L.length)break; } /*for(i=1;i<=L.length;++i) { if(0==strcmp(L.stu[i].num,search_num)) { printf("查询完毕! \n"); printf("学号\t姓名\t数学\t英语\t语文\n"); printf("%s\t%s\t%d\t%d\t%d\n",L.stu[i].num,L.stu[i].name,L.stu[i].math,L.stu[i].english,L.stu[i].chinese); break; } }*/ if(i>L.length)printf("notfind! \n"); printf("continue? (y/n)"); if((yn=getchar())=='y'){fflush(stdin);continue;} elsebreak;/*输入y继续,输入除y以外的字符跳出循环*/ } break; case5: for(i=1;i<=L.length;++i) { printf("num\t\tname\tMath\tEnglish\tChinese\n"); printf("%s\t%s\t%d\t%d\t%d\n",L.stu[i].num,L.stu[i].name,L.stu[i].math,L.stu[i].english,L.stu[i].chinese); } printf("Pressanyke
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实验 报告 学生 管理