数据结构优秀课程设计学生成绩综合管理系统.docx
《数据结构优秀课程设计学生成绩综合管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构优秀课程设计学生成绩综合管理系统.docx(28页珍藏版)》请在咨信网上搜索。
课程设计汇报 课程设计题目: 1:学生成绩管理系统 2:joseph环 3:猴子选大王 姓 名 洪军 学 号 0706 班 级 1421807 指导老师 邹国华 12月 17日 1:学生成绩管理系统 1, 问题分析; 定义一个学生管理系统实现对学生基础数据管理, 录入:输入每位学生信息; 输出:输出每位学生信息; 查询:能够按3学号和4姓名查询某个学生信息; 修改:能够修改学生(按1学号修改,按2成绩修改)信息; 插入:能够插入一个学生信息; 删除:能够删除(按1学号删除,按2成绩删除)满足条件学生信息; 排序:能够按学生总成绩排序。 2 结构分析 首先分析结果我采取是单链表存放结构经过此系统能够实现以下功效: 定义一个学生类型student(学号,姓名,四门课程成绩),学生链表student,含有学生数组和学生数。 3 实现步骤分析 定义数据类型typedef struct student ò 初始化结构体并输入学生数据inputstu(stu &s,int n) ò 重载运算符便于输入输出学生成绩 ò 输出函数输出全部学生信息output(stu s) ò 查找学生 3按学号查找getstu1(stu s,char i[]) 4按姓名查找getstu2(stu s,char c[]) ò 插入学生insetstu(stu &s,int i,char nu[],char na[],char se[],int sc[]) ò 1按学号删除学生deletestu1(stu &s),2按姓名删除学生deletestu2(stu &s) ò 1按学号修改学生信息update1(stu &s) 2按姓名修改学生信息update2(stu &s) ò 对总成绩排序sort(stu &s,struct shu shuzu[]) ò CPP文件实现全部功效 4 算法实现 头文件status.h typedef int status; #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define N 10 typedef struct student{ //学生结构体(链表) char num[9]; char name[15]; char sex[2]; int score[4]; student *next; }student,*stu; struct shu{ //辅助结构体数组存放学生总成绩和学号便于排序 float allscore; char num[9]; }shuzu[10]; ostream &operator<<(ostream &os,stu &s); //运算符重载 istream &operator>>(istream &is,stu &s); //运算符重载 void inputstu(stu &s,int n) //初始化而且输入函数 { student *p,*r; int i; s=(stu)malloc(sizeof(student)); //申请头节点 r=s; for(i=0;i<n;i++) { p=(student *)malloc(sizeof(student)); //申请链表空间 cin>>p; r->next=p; r=p; } r->next=NULL; //最终节点指像空 } status output(stu s) //输出函数 { student *r; r=s; r=r->next; while(r) //判定结点存在 { cout<<r; //输出结点 r=r->next; } return 0; } status getstu1(stu s,char i[])//按学号查找 { student *p=s; while(strcmp(p->num,i)!=0) //结点名字相比较 { p=p->next; } if(p) //判定结点存在而且输出 { cout<<p; return TURE; } else return ERROR; } status getstu2(stu s,char c[])//按名字查找 { student *p=s->next; while(strcmp(p->name,c)!=0) { p=p->next; } if(p) //判定结点存在而且输出 { cout<<p;return 0;} else return ERROR; } status insetstu(stu &s,int i,char nu[],char na[],char se[],int sc[]) //插入学生 { student *p=s,*q; int j=0,m; while(j<i-1&&p->next) //找到学生位置 { p=p->next; j++; } if(j==i-1) { q=(student*)malloc(sizeof(student)); //申请新结点 if(!q)return OVERFLOW; //申请失败返回错误 { strcpy(q->name,na); //赋值 strcpy(q->num,nu); for(m=0;m<4;m++) q->score[m]=sc[m]; strcpy(q->sex,se); q->next=p->next; p->next=q; return OK; } } else return ERROR; } status deletestu1(stu &s) //按学号删除学生 { char i[10]; cout<<"请输入你要删除学生学号"<<endl; cin>>i; student *p=s,*r; while(strcmp(p->next->num,i)!=0) //找到修改学生 { p=p->next; } if(p) //存在就删除不存在就返回错误 { r=p->next; p->next=r->next; free(r); return 0; } else return ERROR; } status deletestu2(stu &s) //按姓名删除学生 { char i[10]; cout<<"请输入你要删除学生姓名"<<endl; cin>>i; student *p=s,*r; while(strcmp(p->next->name,i)!=0) //找到修改学生 { p=p->next; } if(p) { r=p->next; p->next=r->next; free(r); return 0; } else return ERROR; } status update1(stu &s) //按学号修改学生信息 { char i[10]; cout<<"请输入你要修改学生学号"<<endl; cin>>i; student *p=s; while(strcmp(p->num,i)!=0) //找到修改学生 { p=p->next; } if(p) { cin>>p; return 0; } else return ERROR; } status update2(stu &s) //按姓名修改学生信息 { char i[10]; cout<<"请输入你要修改学生姓名"<<endl; cin>>i; student *p=s; while(strcmp(p->name,i)!=0) //找到修改学生 { p=p->next; } if(p) { cin>>p; return 0; } else return ERROR; } void sort(stu &s,struct shu shuzu[]) //对总成绩排序 { int n=0,i,j,k; student *p=s->next; while(p){ //获取多少个人数 n++; p=p->next; }; p=s->next; for(i=1;i<=n;i++) //对结构体进行赋值 { shuzu[i].allscore=0; for(j=0;j<4;j++)shuzu[i].allscore=shuzu[i].allscore+p->score[j]; strcpy(shuzu[i].num,p->num); p=p->next; } for(i=1;i<n;i++){ //对结构体进行排序 k=i; for(j=i+1;j<=n;j++) if(shuzu[j].allscore>shuzu[k].allscore) k=j; if(k!=j) {shuzu[0].allscore=shuzu[i].allscore; strcpy(shuzu[0].num,shuzu[i].num); shuzu[i].allscore=shuzu[k].allscore; strcpy(shuzu[i].num,shuzu[k].num); shuzu[k].allscore=shuzu[0].allscore; strcpy(shuzu[k].num,shuzu[0].num); } } for(i=1;i<=n;i++) { //对总成绩从大到小输出 p=s->next; while(strcmp(p->num,shuzu[i].num)!=0) //按学号查找相对应学生信息 { p=p->next; } cout<<p<<" 总成绩为 :"<<shuzu[i].allscore<<endl; } } ostream &operator<<(ostream &os,stu &s) //输出函数重载 { os<<"学号:"<<s->num<<" 姓名:"<<s->name<<" 性别:"<<s->sex<<"科目1 "<<s->score[0]<<"科目2 "<<s->score[1]<<"科目3 "<<s->score[2]<<"科目4 "<<s->score[3]<<endl; return os; } istream &operator>>(istream &is,stu &s) //输入函数重载 { cout<<""<<"学号 "<<"姓名 "<<"性别 "<<"科目1 "<<"科目2 "<<"科目3 "<<"科目4 "<<endl; is>>s->num>>s->name>>s->sex>>s->score[0]>>s->score[1]>>s->score[2]>>s->score[3]; return is; }CPP文件 #include<iostream.h> #include<stdio.h> #include<string.h> #include<stdlib.h> #include"Status.h" void menu() { cout<<"* * * * * * * *学生管理系统* * * * * * *"<<endl; cout<<"* * * 1:添加学生 * * *"<<endl; cout<<"* * * 2:显示信息 * * *"<<endl; cout<<"* * * 3:按学号查找 * * *"<<endl; cout<<"* * * 4:按姓名查找 * * *"<<endl; cout<<"* * * 5: 插入学生 * * *"<<endl; cout<<"* * * 6: 删除学生 * * *"<<endl; cout<<"* * * 7: 修改学生 * * *"<<endl; cout<<"* * * 8: 学生总成绩排序 * * *"<<endl; cout<<"* 其它:返回主菜单"<<endl; cout<<"请选择"; } int main() { stu s; struct shu shuzu[10]; int i,k[4],j; char c[9],p[9]; char x[20],o[20]; char l[3]; menu(); while(1) { static int n; scanf("%d",&n); switch(n) { case 1:cout<<"输入多少个学生"<<endl;cin>>n;inputstu(s,n);break; case 2:output(s);break; case 3:cout<<"请输入你要找学生学号:";cin>>c;getstu1(s,c);break; case 4:cout<<"请输入你要找学生姓名:";cin>>x;getstu2(s,x);break; case 5:cout<<"需要插入位置,学号,姓名,性别,科目1,科目2,科目3,科目4"<<endl; cin>>i>>p>>o>>l;for(j=0;j<4;j++)cin>>k[j]; insetstu(s,i,p,o,l,k);break; case 6:cout<<"1:按学号删除学生信息;2:按姓名删除学生信息"<<endl;cin>>j; switch(j){ case 1:deletestu1(s);break; case 2:deletestu2(s);break; };break; case 7:cout<<"1:按学号修改学生信息;2:按姓名修改学生信息"<<endl;cin>>j; switch(j){ case 1:update1(s);break; case 2:update2(s);break; };break; case 8:sort(s,shuzu);break; default:return 0; } } 调试结果 5 课程小结 我采取是链表来存放学生信息,最大难点就是总成绩排序,其它功效实现还是比较简单,总成绩排序我用啦一个辅助结构体 struct shu 来存放每个学生学号char num来统计学生和便于排序时候查找,还有总成绩float allscore,且用结构体数组来存放首先对每个学生学号及总成绩赋值给结构体数组shuzu[],然后对结构体数组进行从大到小排序(选择排序)然后对结构体一一查找对应信息。假如用次序表来存放能够避免这方面麻烦。最终对一个管理系统含有很好结构,即对链表一系列操作熟悉及利用 同时也对数据结构这方面认识深刻,数据存放关键性。数据结构在程序设计关键性。 2:joseph环 1 任务分析 编号是1,2,……,nn个人根据顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始次序报数,报到m时停止报数。报m人出列,将她密码作为新m值,从她在顺时针方向下一个人开始重新从1报数,如此下去,直到全部些人全部出列为止。设计一个程序来求出出列次序。 要求:利用单向循环链表存放结构模拟此过程,根据出列次序输出各个人编号。 测试数据: m初值为20,n=7 ,7个人密码依次为3,1,7,2,4,7,4,首先m=6,则正确输出是什么? 要求: 输入数据:建立输入处理输入数据,输入m初值,n ,输入每个人密码,建立单循环链表。 输出形式:建立一个输出函数,将正确输出序列 2结构分析 采取链表来存放每个人密码每一次出列将密码为下一次报道M。并输出这个人。直到全部些人输出 3算法实现 头文件status.h typedef int status; #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef struct node{ //结构体存放密码 int mima; struct node *next; }nodelist,*nodeli; void creatlist(nodeli &s,int n) //创建循环链表 { nodelist *p,*r,*q; int i; s=(nodeli)malloc(sizeof(nodelist)); //申请空间 r=s; cout<<"输入她们密码:"<<endl; //输入她们密码 for(i=0;i<n;i++) { p=(nodelist*)malloc(sizeof(nodelist)); //创建人 if(i==0) { q=p; cin>>p->mima; //输入密码 r->next=p; r=p; } else { cin>>p->mima; //输入密码 r->next=p; //开始下一个 r=p; } } r->next=q; } void joseph(nodeli &s,int m,int n) //joseph函数 { nodelist *p=s,*q; int i; while(n!=0) { i=1; while(i<m) { i++;p=p->next; } if(i=m) // 找到目标 { q=p->next; p->next=q->next; cout<<q->mima<<" ";//输出密码 m=q->mima; //把密码在复制给M找下一个 p=p->next; free(q); n--; } } cout<<"\n"; } Cpp文件 #include<stdio.h> #include<stdlib.h> #include<iostream.h> #include"status.h" void main() { nodeli s; //定义个链表 int n,m=20,l; cout<<"输入人个数"<<endl; cin>>n; //输入人个数 creatlist(s,n); //创建链表 cout<<"输入初始M "<<endl; cin>>l; m=l; joseph(s,m,n); //JOSEPH函数调用 } 调试结果 4课程小结 这是一个经典约瑟夫环差不多问题只要熟练链表操作就能够比较轻易实现。关键在于每一个输出。找下一个以上一次输出链表密码来实现。关键对数据结构分析关键。链表利用熟练 3:猴子选大王 1 任务分析 7、 猴子选大王 一堆猴子全部有编号,编号是1,2,3 ...m ,这群猴子(m个)根据1-m次序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这么依次下来,直到圈中只剩下最终一只猴子,则该猴子为大王。 要求: 输入数据:输入m,n m,n 为整数,n<m 输出形式:汉字提醒根据m个猴子,数n 个数方法,输出为大王猴子是几号 ,建立一个函数来实现此功效 2结构分析 采取链表来存放每个猴子序号每一次出列将序号为下一次报道M。并输出这个猴子。直到全部些人输出最终猴子为大王下次 3算法实现 Cpp文件 #include<stdio.h> #include<stdlib.h> typedef struct houzinode{ int num; //猴子编号 struct houzinode *next; }houzinode,*houzilist; //猴子类型 void houzidawan(houzilist &s,int n,int m) //求解猴子选大王问题最终输出为大王 { int i,j; houzinode *r,*p,*q; s=(houzilist)malloc(sizeof(houzinode)); //头结点 r=q=s; //r p 指向头结点 q=r; for(i=1;i<=n;i++){ p=(houzilist)malloc(sizeof(houzinode));//产生结点 p->num=i; //给猴子赋值 r->next=p;r=p; } r->next=q->next;//指向第一个猴子 p=q->next; for(i=1;i<n;i++){ for(j=1;j<m;j++){ //找猴子恰好报这个数 r=p; p=p->next; } printf("%d ",p->num); //输出立即淘汰猴子 r->next=p->next; free(p); //淘汰去 p=r->next; } printf("大王为%d\n",r->num);//最终一个猴子 free(r); } int main() { int n,m; houzilist s; printf("* * * * * *猴子选大王* * * * * *\n"); printf("输入N,M:"); scanf("%d %d",&n,&m); printf("出列人员次序为:\n"); houzidawan(s,n,m);//调用函数 return 0; } 调试结果 }4课程小结 这是一个经典约瑟夫环问题应用到生活中和上一个题目一样只要熟练链表操作就能够比较轻易实现。关键在于每一个猴子输出。找下一个以上一次输出链表序号来实现。最终输出猴子就是大王 东华理工大学 课程设计评分表 学生姓名: 洪军 班级:1421807 学号:0706 课程设计题目:学生成绩管理系统 项目内容 满分 实 评 选 题 能结合所学课程知识、有一定能力训练。符合选题要求 (5人一题) 10 工作量适中,难易度合理 10 能 力 水 平 能熟练应用所学知识,有一定查阅文件及利用文件资料能力 10 理论依据充足,数据正确,公式推导正确 10 能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等 10 能表现发明性思维,或有独特见解 10 成 果 质 量 总体设计正确、合理,各项技术指标符合要求。 10 说明书综述简练完整,概念清楚、立论正确、技术用语正确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清楚 10 设计说明书栏目齐全、合理,符号统一、编号齐全。 格式、绘图、表格、插图等规范正确,符合国家标准 10 有一定篇幅,字符数不少于5000 10 总 分 100 指导老师评语: 指导老师署名: 年 月 日- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 优秀 课程设计 学生 成绩 综合 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文