




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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) 解题思路(1) 定义对象类型,三张表的数据类型除了grade设为int型,其余都设为char类型,后面的字符串的匹配。而且还设置指针域。通过链表来实现数据的增删改查的功能。(2) 将三个进行初始化,初始化只创建头指针。(3) 通过尾插法输入数据,建立三张表。(4) 输出三个表的数据,分别对结点设定指针,如 student *p; p=h_student-next; .p=p-next;从而输出表的相关信息。(5) 添加学生数,尾插法来实现。插入过程中判断学生学号是否与表的已有的学生学号重复,性别输入格式是否正确。做了相应的判断,从而
4、防止用户添加学生时出现的误操作。(6) 删除学生。结合student表和course表。用户输入学生的学号或者是姓名,输入后,在学生表中查找,看是否有该学生的信息,如有则删除该学生,考虑到学生的选课情况,再次判断,如果选修表中有该学生对应的选课信息,则删除该学生选课的所有信息。(7) 修改学生信息。考虑各数据项的性质,只能修改学生年龄和学生所在系,同理输入信息,匹配则修改,否则。(8) 查询学生个人基本信息。以姓名或学号为参数,用户输入数据,匹配则显示当前的该学生信息,否则退出到菜单。(9) 查询学生单科目的成绩。结合三张表进行查询,输入数据在表中查询。(10) 添加学生选课信息。考虑到学生是
5、否有重选课程的情况,在此也防止了误操作。(11) 删除学生选课信息(12) 修改学生选课信息(13) 查询某个系所有学生的成绩(14) 保存学生表、课程表、选修表。(15) 加载学生表、课程表、选修表。(16) 定义菜单,定义主函数,运行程序。3)算法描述用流程图、伪码等描述算法。 整体设计流程图说明:由于代码比较多,如果一一用流程和代码描述算法,工作量大,并且有些函数原理一样,自认为没有必要都描述,故就自认为比较有代表性的描述如下: 学生选课系统选修表课程表学生表查询某系所有学生成绩查询学生单科成绩查询学生选课修改学生选课删除学生选课添加学生选课删除学生修改学生查询学生添加学生若学生存在选课
6、信息,则要删除该学生选课信息。退出系统,保存三张表 部分程序设计流程图1、 添加学生信息流程图。开始输入学生学号查找学生表,判断学生表中是否有存在该学生 否退出菜单栏 是输入姓名,性别 在菜单栏输入:0程序结束所有表的数据库都自动保存保存检查性别输入格式是否正确说明:只有选择菜单栏 0 ,才能保存所有表的数据。输入年龄和所在系 是 输入后把数据插入原来表的结尾。插入学生信息函数的代码如下:void insert_student(student *stu) student *s,*s1; /这里定义指针s 和s1printf(| 学号 | 姓名 | 性别 | 年龄 | 所在系 |n);s=(st
7、udent *)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(请输入要删除的信息中学生学号或姓名:);sc
10、anf(%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) /输出误操作情况pr
14、intf(对不起,没有你需要的信息,请检查系名是否输入错误!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);/申请一个新的结点
16、p 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);pr
17、intf( | 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( |-|
18、n);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_
19、all_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_stude
20、nt,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:查询学生单科目的成绩。查询学号为20
22、120001的学生的选修课程4的成绩输入序号10:查询某个系所有学生的成绩。查询学院为cs的学生的选修课程所有的成绩7)设计总结 总结:首先,当我看到这个课程设计题目的时候,第一感觉就想用php+mysql做(自己课外时间学了php网站设计)。说实话,php+mysql做这个课程设计很简单的,但是很可惜,这是数据结构课程设计。所以得把老师在课堂上讲的东西联想起来,但是,老师在课堂上大部分时间讲的很多不是如何写代码,讲的是概念,讲的是算法设计。所以说,这次课程设计对于我来说,是一种挑战。第一次做课程设计嘛,感觉无从下手,无赖之下,只好在网上随便找了一份课程设计,看看别人是怎么设计的,我下载的是图书馆图书信息系统。先琢磨别人的思路。估计琢磨了三个小时左右,之后自己在看要做的课程设计。三张表,定义三个对象类型,各分配指针域,然后是初始化三张表,创建头指针,之后分别输入数据,建立三张表。然后是设计单个表的操作,多个表关联的操作。设计主函数。想好了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中介拍卖合同样本
- 全屋翻新施工合同样本
- 居间担保服务合同
- 企业注册出资合同样本
- 结款合同范例
- 独家技术咨询和服务协议
- 高中语文课堂提问管理教学的实践
- 公司家具搬迁合同样本
- 后浇带专项施工方案
- 新版PEP英语四年级上册Unit-5-What-would-you-like六课时详细教案设计
- 2025-2030中国免洗护发素行业市场发展趋势与前景展望战略研究报告
- 《智能优化算法解析》 课件 第6章-基于群智能的智能优化算法
- 《红岩》中考试题(截至2024年)
- 华为IAD132E(T)开局指导书
- 2024年415全民国家安全教育日知识竞赛测试题库
- (2025)二十大知识竞赛题库(含答案)
- 2025年华北电力大学辅导员及其他岗位招考聘用54人高频重点提升(共500题)附带答案详解
- 2022《信访工作条例》学习课件
- 2025年高考政治一轮复习知识清单选择性必修一《当代国际政治与经济》重难点知识
- 儿童青少年肥胖食养指南(2024年版)
- 2023年高考真题-历史(辽宁卷) 含答案
评论
0/150
提交评论