数据结构课程设计.docx
- 文档编号:11575458
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:34
- 大小:23.25KB
数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(34页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
2012级数据结构课程设计任务书
【设计目的】
数据结构是计算机学科实践性很强的一门核心课程。
课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C/C++程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。
严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
【设计要求】
1、课程设计时间为1.5周;
2、每个学生必须独立完成;
3、设计语言C/C++/Java不限;
4、课余时间完成源程序和课程设计报告等文档书写工作,上机时间只能做调试工作。
5、上机任务
1)选择合适的数据结构,并定义数据结构的结构体;
2)根据程序所要完成的基本要求,设计出完整的算法;
3)设计出主程序(main函数),使其成为完整的程序。
6、上机时间:
上午8:
20~11:
50,下午2:
10~5:
40
7、无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、规章制度,学生有事离校必须请假。
课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理。
特别说明:
自行定义数据结构,鼓励思路创新。
【题目】
[问题描述]
1、有3个文件:
Student.txt中的内容:
SnoSnameSsexSageSdept(所在班级)
20120001李勇男20CS
20120002刘晨女19CS
20120003王敏女18MA
20120005张立男19IS
Course.txt中的内容:
CnoCnameCcredit
1英语4
2数学2
3信息系统4
4操作系统3
5数据结构4
6数据处理2
7C/C++4
SC.txt中的内容:
SnoCnoGrade
20120001190(这里是说20120001的学生选了1,2,4这三门课)
20120001280
20120001485
20120002186
20120003382(这里是说2012003的学生选了3.5这两门课门课)
20120003588
20120005790
2、为存储学生、课程和选课信息设计数据结构,将以上文件内容导入其中;
3、对学生表进行插入、删除、修改和查询操作;
考查点:
●插入时注意学号的处理,可以不填吗?
是否重复?
其他数据是否可以乱填?
如何控制?
●删除时一要防止误操作,二要考虑该生的选课信息,如何处理?
●修改时同样要考虑各数据项的性质;
●查询要求可以实现多条件查询,越灵活越好,发挥你们的想象,自行设计。
4、对选修表进行插入、删除、修改操作;
5、综合查询
考查点:
例如查询“选修了数据结构课程的学生的姓名”,希望大家设计出有实际意义、灵活、丰富的综合查询。
另外,为了加快查询速度,可以考虑采用索引表,参考教材第一章绪论中的第一个例子:
书目检索问题,也可以考虑将课堂所学的第9章查找、第10章排序加入到系统中。
6、最后把系统中的数据保存回文件中。
【课程设计报告的编写格式规范】
报告首页为成绩单,填写姓名、性别、学号、班级和指导教师。
正文要求把课程设计的过程、算法设计的内容描述清楚,一般有如下几个方面的内容(也可自行增减):
1)问题描述
无歧义的陈述设计的内容,明确设计所能够达到的要求或功能。
2)解题思路
用文字表达设计思想即可。
3)算法描述
用流程图、伪码等描述算法。
4)程序设计
说明本程序中所有用到的数据及其数据结构的定义,对包含的基本操作及其实现给出详细注解。
5)测试结果
截图给出你的测试结果,并对输出结果进行适当的分析、比对和客观的评价。
6)设计总结
可以包括设计过程中遇到的问题是如何解决的以及对设计与实现的回顾和分析,或者改进思想,经验和体会等。
【成绩评定】
1、由指导教师根据检查学生程序的情况、课程设计报告的质量和课程设计过程中的工作态度等综合打分。
成绩评定实行优秀、良好、中等、及格和不及格五个等级。
2、设计程序的检查由指导教师当面在计算机上检查测试,并同时对程序运行中的问题至少提出三个问题,学生当面回答,教师根据以上检查做好记载;
3、按时独立完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。
发现课程设计报告基本雷同,一律不及格。
#include
#include
#include
//定义学生对象类型
typedefstructnode1
{
charSno[10];//学号
charSname[10];//姓名
charSsex[3];//性别
charSage[3];//年龄
charSdept[4];//所在系
structnode1*next;//指针域/
}Student;//结点的类型
//定义课程对象类型
typedefstructnode2
{
charCno[10];//课程号
charCname[10];//课程名
charCcredit[3];//学分
structnode2*next;
}Course;
//定义选课对象类型
typedefstructnode3
{
charSno[10];//学号
charCno[10];//课程号
intGrade;//分数
structnode3*next;
}SC;
Student*h_student;
Student*r_student;//指向表h_student的尾结点指针
Course*h_course;
Course*r_course;//指向表h_course的尾结点指针
SC*h_sc,*r_sc;
FILE*fp_student,*fp_course,*fp_sc;//创建文件型指针
//只需创建头指针
voidInit()//三个表的初始化
{
//Create_Student(h_student);
h_student=(Student*)malloc(sizeof(Student));//创建表头结点
h_student->next=NULL;
r_student=h_student;//尾指针指向表头结点
//Create_Course(h_course);
h_course=(Course*)malloc(sizeof(Course));
h_course->next=NULL;
r_course=h_course;
//Create_SC(h_sc);
h_sc=(SC*)malloc(sizeof(SC));
h_sc->next=NULL;
r_sc=h_sc;
}
//用户输入数据建立学生信息表(尾插法)
voidCreate_Student(Student*stu)
{
Student*s;
intm,i;
printf("现在输入学生信息\n");
printf("请输入学生个数:
");
scanf("%d",&m);
printf("|学号|姓名|性别|年龄|所在系|\n");
for(i=1;i<=m;i++)
{
s=(Student*)malloc(sizeof(Student));
if(i>1)
{
printf("第%d位学生的相关信息输入完毕!
\n\n",i-1);
}
printf("现在输入第%d位学生的相关信息\n",i);
printf("请输入学号:
");scanf("%s",&s->Sno);
printf("请输入姓名:
");scanf("%s",&s->Sname);
printf("请输入性别:
");scanf("%s",&s->Ssex);
printf("请输入年龄:
");scanf("%s",&s->Sage);
printf("请输入所在系:
");scanf("%s",&s->Sdept);
r_student->next=s;
r_student=s;
}
r_student->next=NULL;
}
//由用户输入数据建立课程信息列表
voidCreate_Course(Course*C)
{
Course*s;
intm,i;
printf("\n现在输入课程信息\n");
printf("请输入课程数量:
");
scanf("%d",&m);
printf("|课程号|课程名|学分|\n");
for(i=1;i<=m;i++)
{
s=(Course*)malloc(sizeof(Course));
if(i>1)
{
printf("第%d个课程的相关信息输入完毕!
\n\n",i-1);
}
printf("现在输入第%d个课程的相关信息\n",i);
printf("请输入课程号:
");scanf("%s",&s->Cno);
printf("请输入课程名:
");scanf("%s",&s->Cname);
printf("请输入学分:
");scanf("%s",&s->Ccredit);
r_course->next=s;
r_course=s;
}
r_course->next=NULL;
}
//由用户输入数据建立选课信息列表
voidCreate_SC(SC*S)
{
SC*q;
intm,i;
printf("\n现在输入选课信息\n");
printf("请输入选课信息条数:
");
scanf("%d",&m);
printf("|学号|课程号|成绩|\n");
for(i=1;i<=m;i++)
{
q=(SC*)malloc(sizeof(SC));
if(i>1)
{
printf("第%d条选课的相关信息输入完毕!
\n\n",i-1);
}
printf("现在输入第%d条选课的相关信息\n",i);
printf("请输入学号:
");scanf("%s",&q->Sno);
printf("请输入课程号:
");scanf("%s",&q->Cno);
printf("请输入课程分数:
");scanf("%d",&q->Grade);
r_sc->next=q;
r_sc=q;
}
r_sc->next=NULL;
}
//输出学生信息表
voidShow_All_Student()
{
Student*p;
p=h_student->next;
printf("学生信息表\n");
printf("---------------------------------------------------\n");
printf("|学号|姓名|性别|年龄|所在系|\n");
printf("---------------------------------------------------\n");
printf("|Sno|Sname|Ssex|Sage|Sdept|\n");
printf("---------------------------------------------------\n");
while(p!
=NULL)
{
printf("|%9s%8s%9s%9s%9s|\n",p->Sno,p->Sname,p->Ssex,p->Sage,p->Sdept);
printf("---------------------------------------------------\n\n");
p=p->next;
}
}
//输出课程信息表
voidShow_All_Course()
{
Course*p;
p=h_course->next;
printf("课程信息表\n");
printf("-----------------------------------------------\n");
printf("|课程号|课程名|学分|\n");
printf("-----------------------------------------------\n");
printf("|Cno|Cname|Ccredit|\n");
printf("-----------------------------------------------\n");
while(p!
=NULL)
{
printf("|%6s%21s%13s|\n",p->Cno,p->Cname,p->Ccredit);
printf("-----------------------------------------------\n\n");
p=p->next;
}
}
//输出选课信息表
voidShow_All_SC()
{
SC*p;
p=h_sc->next;
printf("选课信息表\n");
printf("-----------------------------------------------\n");
printf("|学号|课程号|成绩|\n");
printf("-----------------------------------------------\n");
printf("|Sno|Cno|Grade|\n");
printf("-----------------------------------------------\n");
while(p!
=NULL)
{
printf("|%11s%13s%16d|\n",p->Sno,p->Cno,p->Grade);
printf("-----------------------------------------------\n\n");
p=p->next;
}
}
//在学生信息表中添加学生(尾插法)
voidInsert_Student(Student*stu)
{
Student*s,*s1;
printf("|学号|姓名|性别|年龄|所在系|\n");
s=(Student*)malloc(sizeof(Student));
printf("请输入学号:
");scanf("%s",&s->Sno);
s1=stu->next;//检查是否存在这名学生,输入的学号不能重复
while(s1!
=NULL)
{
if(strcmp(s1->Sno,s->Sno)==0)
{
printf("该学生已存在,请检查是否输入错误\n");
printf("请重新输入学号:
");scanf("%s",&s->Sno);
}
s1=s1->next;
}
if(s1==NULL)
{
printf("请输入姓名:
");scanf("%s",&s->Sname);
printf("请输入性别(男/女):
");scanf("%s",&s->Ssex);
if((strcmp(s->Ssex,"男")==0)||(strcmp(s->Ssex,"女")==0))
{
printf("请输入年龄:
");scanf("%s",&s->Sage);
printf("请输入所在系:
");scanf("%s",&s->Sdept);
r_student->next=s;
r_student=s;
r_student->next=NULL;
printf("插入成功!
\n\n");
}
else
{
printf("插入失败!
性别输入有误!
\n");
}
}
}
//删除学生
//一要防止误操作
//二要考虑该生的选课信息,删除学生的同时把该学生对应的课程也删除了
voidDelete_Student(Student*stu,SC*S)
{
charsn[20];
Student*p;
SC*s;
inti=0;
printf("请输入要删除的信息中学生学号或姓名:
");
scanf("%s",&sn);
p=stu->next;
s=S->next;
Student*q=stu;
SC*s1=S;
while(p!
=NULL)
{
if(strcmp(p->Sno,sn)==0||strcmp(p->Sname,sn)==0)//找到对应的学生
{
strcpy(sn,p->Sno);
while(s!
=NULL)
{
if(strcmp(sn,s->Sno)==0)
{
s1->next=s->next;
free(s);
s=s1->next;
continue;
}
if(s!
=NULL)
{
s=s->next;
s1=s1->next;
}
}
q->next=p->next;
free(p);
printf("删除成功!
\n\n");
break;
}
p=p->next;
q=q->next;
}
}
//修改学生信息
//考虑各数据项的性质,现在只能修改学生年龄和学生所在系
voidUpdate_Student(Student*stu)
{
charsn[20];
Student*p;
inti;
printf("请输入要修改的信息中学生学号或姓名:
");
scanf("%s",&sn);
p=stu->next;
Student*q;
while(p!
=NULL)
{
if(strcmp(p->Sno,sn)==0||strcmp(p->Sname,sn)==0)
{
q=p;
break;
}
p=p->next;
}
if(p==NULL)
{
printf("对不起,无该学生信息!
\n");
return;
}
else
{
printf("请输入要修改的信息\n");
printf("你可以修改的内容为:
1、年龄2、院系\n");
printf("请输入修改序号(1或者2):
");
scanf("%d",&i);
switch(i)
{
case1:
printf("请输入你所需要修改该学生现在的年龄:
");
scanf("%s",&q->Sage);
printf("修改成功!
\n\n");
break;
case2:
printf("请输入你所需要修改该学生现在所在的系:
");
scanf("%s",&q->Sdept);
printf("修改成功!
\n\n");
break;
default:
printf("输入错误,请重新输入!
\n");
break;
}
}
}
//查询学生个人基本信息,以姓名或学号为参数
voidSelect_Student(Student*stu)
{
inti=0;
charsn[20];
Student*p;
p=stu->next;
printf("请输入所要查询的学生的学号或姓名:
");
scanf("%s",&sn);
while(p!
=NULL)
{
if(strcmp(p->Sname,sn)==0||strcmp(p->Sno,sn)==0)
{
printf("---------------------------------------------------\n");
printf("|学号|姓名|性别|年龄|所在系|\n");
printf("---------------------------------------------------\n");
printf("|Sno|Sname|Ssex|Sage|Sdept|\n");
printf("---------------------------------------------------\n");
printf("|%9s%9s%9s%8s%9s|\n",p->Sno,p->Sname,p->Ssex,p->Sage,p->Sdept);
printf("---------------------------------------------------\n");
break;
}
p=p->next;
}
if(p==NULL)
printf("对不起,无该学生信息!
\n");
}
//查询学生单科目的成绩
voidSelect_SC(Student*stu,Course*C,SC*S)
{
charsn[20];
charcn[20];
Student*p;
Course*q;
SC*r;
p=stu->next;
printf("请输入所要查询的学生的学号和课程号\n");
printf("请输入学号或姓名:
");
scanf("%s",&sn);
p=stu->next;
while(p!
=NULL)
{
if(strcmp(p->Sname,sn)==0||strcmp(p->Sno,sn)==0)
{
strcpy(sn,p->Sno);
break;
}
p=p->next;
}
if(p==NULL)
{
printf("对不起,无该学生的信息!
\n");
return;
}
printf("请输入课程号或课程名:
");
scanf("%s",&cn);
q=C->next;
while(q!
=NULL)
{
if(strcmp(q->Cno,cn)==
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计