数据结构课程设计报告林丽.docx
- 文档编号:23707324
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:26
- 大小:291.65KB
数据结构课程设计报告林丽.docx
《数据结构课程设计报告林丽.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告林丽.docx(26页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告林丽
数据结构课程设计报告
学院:
信息科学技术
姓名:
林丽
专业:
通信工程
班级:
08通信
(二)
学号:
20081604B090
指导老师:
吴泽晖
目录
一、需求分析··················3
二、概要设计··················3
三、详细设计·················4
四、调试分析·················5
五、测试结果·················16
六、参考文献················19
七、心得体会··········19
实验题目:
学生成绩管理信息系统
一、设计目的
进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。
二、需求分析
学校需要管理学生的基本信息和各门功课的考试成绩,希望当用到时能直接从计算机的数据库中显示成绩,从而减轻管理人员的负担,也使学生的成绩和信息能够长时间保存。
通过建立一个简单的学生成绩管理信息系统来管理学生的成绩和信息。
其中要完成的功能如下:
(1)可以实现学生基本信息和成绩的录入。
(2)可以实现对学生的学号进行成绩查询,以及对学生成绩和基本信息的显示成绩、录入成绩、删去记录、排序操作。
(3)应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
三、概要设计
(一)现在学生成绩管理系统中包含学生的信息有:
学生的姓名、学号、语文成绩、数学成绩、英语成绩、平均分。
1、用C语言实现系统
2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.
3、学生信息包括:
其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:
(1)每一条记录包括一个学生的学号、姓名、3门课成绩
(2)、成绩信息录入功能:
(成绩信息用文件保存,可以一次完成若干条记录的输入。
)
(3)、成绩信息显示浏览功能:
完成全部学生记录的显示。
(4)、查询功能:
完成按姓名查找学生记录,并显示。
(5)成绩信息的删除:
按学号进行删除某学生的成绩.
(6)、排序功能:
可按学生平均成绩和语文成绩、数学成绩、英语成绩进行排序。
(7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
(二)包含的几大功能模块
1、成绩录入功能
2、成绩输出功能
3、成绩查询功能
4、删除模块
5、排序功能
6、统计功能
7、退出系统
四、详细设计
(一)各函数的功能和实现
1、输入初始的学生信息:
输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数voidinput(STUDENT*data,int*len)来实现此操作。
2、成绩录入、插入:
用函数voidinput()来实现。
3、显示全部成绩模块:
可用voiddisplay()来实现。
找到就输出此学生全部信息。
4、删除模块:
用函数voiddel()来实现
5、排序模块:
用函数voidsort()来实现
6、等待界面:
用函数voidwaiting()来实现
7、退出界面:
可用一个函数voidquit();来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
(二)程序设计流程图
五、调试分析
问题一、学生初始信息模块:
其中包括学生的姓名、学号以及学生的语文、数学、英语相关信息;可用函数cin(stu*p1)来实现此操作。
当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。
解决办法及步骤:
1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。
2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错
3、输出用于循环检查语句中的学生信息,发现乱码
4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。
问题二、查询模块:
可用stu*lookdata(stu*p1)来实现。
找到就输出此学生全部信息包括学生的语文、数学、英语的成绩。
当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语的成绩。
解决办法及步骤:
1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。
(二)、源程序
#include
#include
#include
#include
voidhomepage();//主界面
voiddisplay();//显示全部成绩
voidinput();//录入插入
voiddel();//删除记录
voidsort();//排序
voidwaiting();//等待界面
voidquit();//退出界面
structstudent
{
intnum;
charname[15];
floatscore[3];
floatavg;
};
intcount=0;//当前学生个数
intsort_type=0;//当前排序类型
structstudentstu[10];
voidmain()
{
inti,k=0;
charusername[15],pwd[6];
system("color3f");
printf("\n\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃**********************************************************┃\n");
printf("\t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");
printf("\t┃***┃************************************************┃***┃\n");
printf("\t┃***┃*******┃***┃\n");
printf("\t┃***┃***欢迎使用学生成绩管理信息系统****┃***┃\n");
printf("\t┃***┃***━━━━━━━━━━━━━━****┃***┃\n");
printf("\t┃***┃*******┃***┃\n");
printf("\t┃***┃***xxxxxxxxxxx****┃***┃\n");
printf("\t┃***┃*******┃***┃\n");
printf("\t┃***┃***2010.12.06****┃***┃\n");
printf("\t┃***┃*******┃***┃\n");
printf("\t┃***┃************************************************┃***┃\n");
printf("\t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");
printf("\t┃**********************************************************┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
for(i=0;i<3;i++)
{
printf("\n请输入用户学号:
");
gets(username);
printf("\n请输入6位密码:
");
gets(pwd);
if((strcmp(username,"linli2008")==0)&&(strcmp(pwd,"123456")==0))
{
printf("\t密码正确\n");
printf("\n您已经成功登录\n");
k=1;
for(i=0;i<20;i++)
{
printf(".");
Sleep(100);
}
system("cls");
homepage();
break;
}
else
printf("\n用户名或密码无效请重新输入:
\n");
continue;
}
if(k==0)
printf("\n连续输入错误3次将自动退出程序\n");
Sleep(2000);
quit();
}
voidhomepage()
{
charn;
printf("\n\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃************************************************************┃\n");
printf("\t┃***┃\n");
printf("\t┃*1.显示成绩*2.录入成绩*┃\n");
printf("\t┃***┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┃***┃\n");
printf("\t┃*3.删除记录*4.排序*┃\n");
printf("\t┃***┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┃**┃\n");
printf("\t┃*0.退出程序*┃\n");
printf("\t┃**┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
while((n!
='1')&&(n!
='2')&&(n!
='3')&&(n!
='4')&&(n!
='0'))
{
printf("\n请选择:
");
fflush(stdin);
scanf("%c",&n);
switch(n)
{
case'1':
display();
break;
case'2':
if(count<10)
input();
else
{
printf("记录数已满\n");
Sleep(2000);
system("cls");
homepage();
}
break;
case'3':
del();
break;
case'4':
sort();
case'0':
quit();
break;
default:
printf("\n选项错误\n");
}
}
}
voiddisplay()
{
inti;
charc;
system("cls");
switch(sort_type)
{
case0:
printf("\t\t未排序:
\n\n");
break;
case1:
printf("\t\t按学号排序:
\n\n");
break;
case2:
printf("\t\t按语文成绩排序:
\n\n");
break;
case3:
printf("\t\t按数学成绩排序:
\n\n");
break;
case4:
printf("\t\t按英语成绩排序:
\n\n");
break;
case5:
printf("\t\t按平均成绩排序:
\n\n");
break;
}
printf("\t学号\t姓名\t语文成绩\t数学成绩\t英语成绩\t平均成绩\n");
for(i=0;i { printf("\t%d\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avg); } printf("\n\n按任意键返回\n"); c=getch(); system("cls"); homepage(); } voidinput() { inti,numcheck; charc; system("cls"); do { printf("学号: \n"); scanf("%d",&stu[count].num); numcheck=1; if(stu[count].num<0) printf("请输入正整数: \n"); for(i=0;i { if(stu[count].num==stu[i].num) { numcheck=0; printf("学号重复,重新输入: \n"); } } }while(! numcheck); printf("姓名: \n"); fflush(stdin); gets(stu[count].name); for(i=0;i<3;i++) { printf("第%d门课成绩: \n",i+1); scanf("%f",&stu[count].score[i]); } stu[count].avg=(stu[count].score[0]+stu[count].score[1]+stu[count].score[2])/3; printf("是否继续输入(y/n): \n"); do { c=getchar(); if(c=='y'||c=='Y') { count++; if(count<10) input(); else { printf("记录数已满\n"); Sleep(2000); system("cls"); homepage(); } } elseif(c=='n'||c=='N') { count++; system("cls"); homepage(); } else; }while((c! ='y')&&(c! ='n')&&(c! ='Y')&&(c! ='N')); } voiddel() { inti,j,del_num,match=0; charc; system("cls"); printf("请输入要删除的学生学号: \n"); scanf("%d",&del_num); waiting(); for(i=0;i { if(stu[i].num==del_num) { match=1; for(j=i;j /*{ stu[j].num=stu[j+1].num; strcpy(stu[j].name,stu[j+1].name); stu[j].score[0]=stu[j+1].score[0]; stu[j].score[1]=stu[j+1].score[1]; stu[j].score[2]=stu[j+1].score[2]; stu[j].avg=stu[j+1].avg; }*/ stu[j]=stu[j+1]; } } if(! match) printf("没有要找的学号.\n"); printf("是否继续删除? (y/n)"); fflush(stdin); do { c=getchar(); if(c=='y'||c=='Y') { count--; del(); } elseif(c=='n'||c=='N') { count--; system("cls"); homepage(); } else; }while((c! ='y')&&(c! ='n')); } voidsort() { inti,j; intchoice; structstudenttemp; system("cls"); printf("\t\t请选择排序功能: \n"); printf("\t1.按学号排序\n"); printf("\t2.按语文成绩排序\n"); printf("\t3.按数学成绩排序\n"); printf("\t4.按英语成绩排序\n"); printf("\t5.按平均成绩排序\n"); do { scanf("%d",&choice); }while((choice! =1)&&(choice! =2)&&(choice! =3)&&(choice! =4)&&(choice! =5)); switch(choice) { case1: { for(i=0;i { for(j=0;j { if(stu[j].num>stu[j+1].num) { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } } } sort_type=1; break; } case2: { for(i=0;i { for(j=0;j { if(stu[j].score[0] { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } } } sort_type=2; break; } case3: { for(i=0;i { for(j=0;j { if(stu[j].score[1] { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } } } sort_type=3; break; } case4: { for(i=0;i { for(j=0;j { if(stu[j].score[2] { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } } } sort_type=4; break; } case5: { for(i=0;i { for(j=0;j { if(stu[j].avg { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } } } sort_type=5; break; } } system("cls"); waiting(); homepage(); } voidwaiting() { inti; printf("\n\t请稍等候..........."); for(i=0;i<25;i++) { switch(i%4) { case1: printf("\b\\");break; case2: printf("\b-");break; case3: printf("\b/");break; case0: printf("\b|");break; } Sleep(100); } system("cls"); } voidquit() { system("cls"); printf("\n\n"); printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); printf("\t┃************************************************************┃\n"); printf("\t┃**┃\n"); printf("\t┃*谢谢使用本程序*┃\n"); printf("\t┃************************************************************┃\n"); printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n"); } 六、测试结果 1、运行开始 2、输入用户学号和密码登入学生成绩管理信息系统 3、输入用户学号和密码错误不能登入学生成绩管理系统,输入连续错误三次,将自动退出程序 4、选择2录入成绩 5、选择1显示成绩 6、选择3删去记录 7、选择4排序 8、选择0退出程序 七、参考文献 1、《数据结构》算法实现及解析······高一凡编著 2、数据结构程序设计····李春葆、曾慧、张值民编著 八、心得体会 由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。 在用的时候难免出现这样那样的错误。 如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。 解决的这个问题的办法是调整。 一个系统的菜单和提示信息非常重要。 如果没有这些用户根本不知道怎么用你设计的这个系统。 在设计的调试过程中也无法顺利的完成调试工作。 有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。 回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整两个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计报告 林丽 数据结构 课程设计 报告