数据结构课程设计

上传人:无*** 文档编号:80146399 上传时间:2022-04-25 格式:DOC 页数:22 大小:676.52KB
收藏 版权申诉 举报 下载
数据结构课程设计_第1页
第1页 / 共22页
数据结构课程设计_第2页
第2页 / 共22页
数据结构课程设计_第3页
第3页 / 共22页
资源描述:

《数据结构课程设计》由会员分享,可在线阅读,更多相关《数据结构课程设计(22页珍藏版)》请在装配图网上搜索。

1、计算机科学与技术学院课程设计成绩单课程名称:数据结构课程设计 指导教师: 姓名 性别 学号班级计科1203班综合成绩成绩等级程序运行情况(占总成绩20%)能正确运行 基本能正确运行 能运行但结果不完善(20分) (15分) (10分)程序功能的完善程度(占总成绩10%)完善 基本完善 不完善(10分) (8分) (5分)程序结构的合理性(占总成绩10%)合理 基本合理 不太合理(10分) (8分) (5分)对问题的答辩情况(占总成绩40%)概念正确有创新 能正确回答所有问题 基本能正确回答(40分) (35分) (30分)部分问题回答概念不清晰(20分)学生的工作态度与独立工作能力(占总成绩1

2、0%)工作态度认真能独立完成任务 工作态度认真但独立性较差(10分) (8分)工作态度基本认真但缺乏独立性(5分)设计报告的规范性(占总成绩10%)符合规范 基本符合规范 规范性较差(10分) (8分) (5分)优秀:90分100分 良好:80分89分 中等:7079分 及格:6069分 不及格0分59分 计算机科学与技术学院制表1)问题描述无歧义的陈述设计的内容,明确设计所能够达到的要求或功能。这个课程设计一般不懂的问题,自己都解决了,比较难搞定的是对文件的处理这块,但是通过自己上网查资料,自己摸索,才得以解决问题。还有在对删除学生信息的时候,起初没有考虑到要把选修表里面的学生信息也删除掉,

3、后来经过自己仔细考虑,结合实际情况才完善了等等一些细节。2) 解题思路(一) 定义对象类型,三张表的数据类型除了grade设为int型,其余都设为char类型,后面的字符串的匹配。而且还设置指针域。通过链表来实现数据的增删改查的功能。(二) 将三个进行初始化,初始化只创建头指针。(三) 通过尾插法输入数据,建立三张表。(四) 输出三个表的数据,分别对结点设定指针,如 Student *p; p=h_student-next; .p=p-next;从而输出表的相关信息。(五) 添加学生数,尾插法来实现。插入过程中判断学生学号是否与表的已有的学生学号重复,性别输入格式是否正确。做了相应的判断,从而

4、防止用户添加学生时出现的误操作。(六) 删除学生。结合Student表和Course表。用户输入学生的学号或者是姓名,输入后,在学生表中查找,看是否有该学生的信息,如有则删除该学生,考虑到学生的选课情况,再次判断,如果选修表中有该学生对应的选课信息,则删除该学生选课的所有信息。(七) 修改学生信息。考虑各数据项的性质,只能修改学生年龄和学生所在系,同理输入信息,匹配则修改,否则。(八) 查询学生个人基本信息。以姓名或学号为参数,用户输入数据,匹配则显示当前的该学生信息,否则退出到菜单。(九) 查询学生单科目的成绩。结合三张表进行查询,输入数据在表中查询。(十) 添加学生选课信息。考虑到学生是否

5、有重选课程的情况,在此也防止了误操作。(十一) 删除学生选课信息(十二) 修改学生选课信息(十三) 查询某个系所有学生的成绩(十四) 保存学生表、课程表、选修表。(十五) 加载学生表、课程表、选修表。(十六) 定义菜单,定义主函数,运行程序。3)算法描述用流程图、伪码等描述算法。 整体设计流程图说明:由于代码比较多,如果一一用流程和代码描述算法,工作量大,并且有些函数原理一样,自认为没有必要都描述,故就自认为比较有代表性的描述如下: 学生选课系统选修表课程表学生表查询某系所有学生成绩查询学生单科成绩查询学生选课修改学生选课删除学生选课添加学生选课删除学生修改学生查询学生添加学生若学生存在选课信

6、息,则要删除该学生选课信息。退出系统,保存三张表 部分程序设计流程图1、 添加学生信息流程图。开始输入学生学号查找学生表,判断学生表中是否有存在该学生 否退出菜单栏 是输入姓名,性别 在菜单栏输入:0程序结束所有表的数据库都自动保存保存检查性别输入格式是否正确说明:只有选择菜单栏 0 ,才能保存所有表的数据。输入年龄和所在系 是 输入后把数据插入原来表的结尾。插入学生信息函数的代码如下:void Insert_Student(Student *stu) Student *s,*s1; /这里定义指针s 和s1printf(| 学号 | 姓名 | 性别 | 年龄 | 所在系 |n);s=(Stu

7、dent *)malloc(sizeof(Student); /这里为s申请一个新的结点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)/如果没有找到重复的学号,说明可

8、以插入新学生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(插入成功!

9、nn);elseprintf(插入失败! 性别输入有误!n); /返回错误信息2、 删除学生信息流程图 开始输入学生学号查找学生表,判断学生表中是否有存在该学生 否 是删除学生表中的该学生信息查找选修表,判断选修表中是否有该学生的选课信息 否 是删除两个表中对应该学生的所有信息返回主菜单删除学生信息函数的代码如下:void Delete_Student(Student *stu,SC *S)char sn20;定义一个char类型的字符串,表示要输入学生的学号或者姓名Student *p; /这里定义指针pSC *s;/这里定义指针sprintf(请输入要删除的信息中学生学号或姓名:);sca

10、nf(%s,&sn); /用户输入要删除的学生的学号或姓名p=stu-next; /p指向头指针的下一个结点s=S-next; /s指向头指针的下一个结点Student *q=stu; /把头指针赋给指针qSC *s1=S; /把头指针赋给指针s1while(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-

11、next; /如果有,则删除学生对应的选课信息free(s); /释放s结点,删除选课信息s=s1-next; /指向下一个结点,看选课表中是否还有该学生的选课信息,若有,则删除continue;if(s!=NULL)s=s-next;s1=s1-next;q-next=p-next;/指向下一个结点,看学生表中是否还有该学生的相关信息,若有,则删除free(p);/释放p结点,删除该学生printf(删除成功!nn); 开始break;p=p-next;输入系名q=q-next;查找学生表,判断学生表中是否有存在有学生在该系3、 查询某个系所有学生的成绩 否 有结合选修表,看在该系对应的学生

12、是否有选课 否 有返回主菜单输出信息4、 查询某个系所有学生的成绩的代码:void Select_Sdept_Grade(Student *stu,SC *S)char Sdept4;定义一个char类型的字符串,表示要输入的系名Student *p; /定义一个指向学生表的指针SC *q;/定义一个指向选修表的指针int i=0; /此处设置一个标记printf(请输入系名:);scanf(%s,&Sdept); /输入系名p=stu-next; /指向头指针的下一个结点printf(-n);printf(| 学号 | 姓名 | 课程号 | 成绩 |n);printf(-n);printf(

13、| Sno | Sname | Cno | Grade |n);printf(-n);while(p!=NULL)/在学生表中表中查找,看是否这样的一个学生if(strcmp(p-Sdept,Sdept)=0)q=S-next; /找出所有匹配的系名,并全部输出while(q!=NULL)if(strcmp(p-Sno,q-Sno)=0)i=1;printf(|%9s%11s%14s%17d |n,q-Sno,p-Sname,q-Cno,q-Grade); printf(-n);q=q-next; /指向下一个结点,查询对应系名的相关信息p=p-next;if(i=0) /输出误操作情况pri

14、ntf(对不起,没有你需要的信息,请检查系名是否输入错误!n);/保存课程表void Save_Course()Course *p,*p0; /定义一个指向课程表的指针p=h_course-next; /指向头结点的指针赋给pif(fp_course=fopen(Course.txt,wb)=NULL) /创建文件,进行保存printf(文件保存失败!n请重新启动本系统!n);exit(0); /直接退出系统while(p!=NULL) /在课程表中表中访问链表数据,将链表信息一一写入文件中if(fwrite(p,sizeof(Course),1,fp_course)!=1) /将链表中的信息

15、写入文件中printf(写入文件失败!n请重新启动本系统!n); p0=p; p=p-next; /指向下一个结点 free(p0); /释放所有结点free(h_course); /释放指针fclose(fp_course); /关闭文件/加载课程表的相关信息void Load_Course() Course *p;/定义一个指向课程表的指针Course *q=h_course; /把课程信息的一个指针指向q fp_course=fopen(Course.txt,rb); 打开Course.txt , p=(Course *)malloc(sizeof(Course);/申请一个新的结点p

16、while(fread(p,sizeof(Course),1,fp_course) q-next=p;q=p;p=(Course *)malloc(sizeof(Course); q-next=NULL;r_course=q; fclose(fp_course); /关闭文件(主菜单和主函数比较简单,C语言里面的知识,一看便知)/主菜单int Menu() int i;printf( |-|n);printf( | 欢迎进入学生选课管理系统 |n);printf( | 本系统含有三张信息表 |n);printf( | 学生表、课程表、学生选课信息表 |n);printf( |-|n);prin

17、tf( | 1 = 查看各个表信息 |n);printf( | 2 = 查询学生信息 |n);printf( | 3 = 删除学生信息 |n);printf( | 4 = 修改学生信息 |n);printf( | 5 = 添加学生信息 |n);printf( | 6 = 删除学生选课信息 |n);printf( | 7 = 修改学生选课信息 |n);printf( | 8 = 添加学生选课信息 |n);printf( | 9 = 查询学生单科目的成绩 |n);printf( | 10 = 查询某个系所有学生的成绩 |n);printf( | 0 = 退出系统 |n);printf( |-|n)

18、;printf(请选择您需要的操作(0-10);for(;)scanf(%d,&i); /输入要操作的数字if(i10)printf(n错误!请重新输入:);exit(0);else break;return i;/主菜单选择函数void Menu_select()for(;) switch(Menu() /功能选择case 0:system(cls);printf(谢谢使用,再见!n);Save(); /退出系统才能保存三张表三个表printf(nnt文件保存成功!n); exit(0);case 1:Show_All_Student(); Show_All_Course();Show_Al

19、l_SC(); break;case 2:Select_Student(h_student);break;case 3:Delete_Student(h_student,h_sc);break;case 4:Show_All_Student(); Update_Student(h_student);break;case 5:Insert_Student(h_student);break;case 6:Show_All_SC();Delete_Student_SC(h_student,h_course,h_sc);break; case 7:Update_Student_SC(h_student

20、,h_course,h_sc);break; case 8: Show_All_Course();Add_Student_SC(h_student,h_course,h_sc);break;case 9:Select_SC(h_student,h_course,h_sc);break;case 10:Select_Sdept_Grade(h_student,h_sc);break;default:printf(输入错误,请重新输入!n);system(cls); break;5)测试结果截图给出你的测试结果,并对输出结果进行适当的分析、比对和客观的评价。说明:截屏图片太多,故采用层叠放置第一次

21、打开首页面输入数据到三张表1、以下是添加学生表、课程表、选修表输入序号1:显示结果为输入序号2:演示学号为20120005,和不存在的学号20120004输入序号3:演示学号为20120001,和不存在的学号20120004显示是否删除成功输入序号4:修改学生信息。演示学号为20120002,修改其年龄输入序号4:添加学生信息。添加学号为20120006的学生输入序号6:删除学生选课信息。删除学号为20120001的学生输入序号7:修改学生选课信息。删除学号为20120001的学生输入序号8:添加学生选课信息。删除学号为20120003的学生输入序号9:查询学生单科目的成绩。查询学号为2012

22、0001的学生的选修课程4的成绩输入序号10:查询某个系所有学生的成绩。查询学院为CS的学生的选修课程所有的成绩7)设计总结 总结:首先,当我看到这个课程设计题目的时候,第一感觉就想用php+mysql做(自己课外时间学了php网站设计)。说实话,php+mysql做这个课程设计很简单的,但是很可惜,这是数据结构课程设计。所以得把老师在课堂上讲的东西联想起来,但是,老师在课堂上大部分时间讲的很多不是如何写代码,讲的是概念,讲的是算法设计。所以说,这次课程设计对于我来说,是一种挑战。第一次做课程设计嘛,感觉无从下手,无赖之下,只好在网上随便找了一份课程设计,看看别人是怎么设计的,我下载的是图书馆

23、图书信息系统。先琢磨别人的思路。估计琢磨了三个小时左右,之后自己在看要做的课程设计。三张表,定义三个对象类型,各分配指针域,然后是初始化三张表,创建头指针,之后分别输入数据,建立三张表。然后是设计单个表的操作,多个表关联的操作。设计主函数。想好了思路之后,开始写代码,在写的过程中,发现很多代码只需写一次,然后直接复制。比如,创建学生表,之后的课程表,学生选修表都可以借用上面的代码,这让我明白了,很多看似复杂的东西其实真真地做起来也不是那么费事,三张表,就可以轻松地视为一张表来对待。至于后面的多表查询,删除学生要联系选修表,可以多建几个指针就可以了,关键是链表的操作,定义的指针怎么指,怎么访问数

24、据,可以自己通过画图来解决。当然,对于课程设计,是生活中的一个实际问题,当然要灵活处理数据,比喻说添加学生,不能与表中的原有的数据重复,性别输入格式要正确。如果有误操作该怎么处理等。还有一个课程设计,程序运行的界面当然要设计好了,回顾这次课程设计,在界面设计这块,也花费了不少的功夫,哪里看起来不够乐观,重新调整。最后,对于这次课程设计,最恼火的就是对文件操作这块了,因为自己课余时间学习了php,所以对文件操作相对来说要熟悉一点,但还是不容乐观,毕竟这计算机语言之间也是有一些区别的,php相对于语言来学,对文件操作这块有很多可以直接运用的函数了。所以对文件操作这块又得自己上网学习,但是很遗憾,就是不能把表导入数据,还有加载表中数据的问题。搞了很长时间,但还是不知道怎么弄,所以得借鉴别人的方法了,上网查了一些案例,然后运用到我的代码中,才解决了问题。回顾自己做这个课程设计,花了将近天的时间,写了近千行的代码。不过花费时间总会有收获的。总的来说,这次课程设计既让我复习了语言的一些知识,如数组,while语句,switch语句,还有数据结构链表的一些知识,又让我有了一个新的挑战,很多知识我们不可能都搞懂,但是通过自己百度,上网查资料,哪里不会去学哪儿。简而言之,这次的实验增加了我的动手动脑的能力,让我有了敢于挑战问题的勇气和决心。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!