数据结构课程设计学生成绩管理系统_第1页
数据结构课程设计学生成绩管理系统_第2页
数据结构课程设计学生成绩管理系统_第3页
数据结构课程设计学生成绩管理系统_第4页
数据结构课程设计学生成绩管理系统_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告课程设计题目: 1:学生成绩管理系统 2:joseph环 3:猴子选大王姓 名 洪军学 号 201420180706班 级 1421807指导教师 邹国华 2015年 12月 17日1:学生成绩管理系统1, 问题分析; 定义一个学生管理系统实现对学生基本数据的管理, 录入:输入每位学生的信息; 输出:输出每位学生的信息; 查询:可以按3学号和4姓名查询某个学生的信息; 修改:可以修改学生(按1学号修改,按2成绩修改)的信息; 插入:可以插入一个学生的信息; 删除:可以删除(按1学号删除,按2成绩删除)满足条件的学生信息; 排序:可以按学生的总成绩排序。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) ò 插入学生

3、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.htypedef int status;#d

4、efine TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define N 10typedef struct student /学生结构体(链表)char num9;char name15;char sex2;int score4; student *next;student,*stu;struct shu /辅助结构体数组存储学生总成绩和学号便于排序float allscore;char num9;shuzu10; ostream &operator<<(ostream &o

5、s,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->ne

6、xt=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;elsereturn ERROR;status get

7、stu2(stu s,char c)/按名字查找student *p=s->next;while(strcmp(p->name,c)!=0) p=p->next; if(p) /判断结点存在并且输出 cout<<p;return 0;elsereturn 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->nex

8、t;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->scorem=scm;strcpy(q->sex,se);q->next=p->next;p->next=q;return OK;else return ERROR;status deletestu1(stu &s) /按学号删除学生char i10

9、;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;elsereturn ERROR;status deletestu2(stu &s) /按姓名删除学生char i10;cout<<"请输入你要删除

10、学生的姓名"<<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;elsereturn ERROR;status update1(stu &s) /按学号修改学生的信息char i10;cout<<"请输入你要修改学生的学号"<<endl;cin>>i; st

11、udent *p=s;while(strcmp(p->num,i)!=0) /找到修改学生p=p->next;if(p)cin>>p;return 0;elsereturn ERROR;status update2(stu &s) /按姓名修改学生的信息char i10;cout<<"请输入你要修改学生的姓名"<<endl;cin>>i; student *p=s;while(strcmp(p->name,i)!=0) /找到修改学生p=p->next;if(p)cin>>p;ret

12、urn 0;elsereturn 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+) /对结构体进行赋值 shuzui.allscore=0; for(j=0;j<4;j+)shuzui.allscore=shuzui.allscore+p->scorej; strcpy(shuzui.num,p->num); p=p-&

13、gt;next; for(i=1;i<n;i+) /对结构体进行排序 k=i; for(j=i+1;j<=n;j+) if(shuzuj.allscore>shuzuk.allscore) k=j; if(k!=j) shuzu0.allscore=shuzui.allscore; strcpy(shuzu0.num,shuzui.num); shuzui.allscore=shuzuk.allscore; strcpy(shuzui.num,shuzuk.num); shuzuk.allscore=shuzu0.allscore; strcpy(shuzuk.num,shu

14、zu0.num); for(i=1;i<=n;i+) /对总成绩从大到小输出 p=s->next; while(strcmp(p->num,shuzui.num)!=0) /按学号查找相对应的学生信息 p=p->next; cout<<p<<" 总成绩为 :"<<shuzui.allscore<<endl; ostream &operator<<(ostream &os,stu &s) /输出函数的重载os<<"学号:"<<

15、s->num<<" 姓名:"<<s->name<<" 性别:"<<s->sex<<"科目1 "<<s->score0<<"科目2 "<<s->score1<<"科目3 "<<s->score2<<"科目4 "<<s->score3<<endl;return os;istream &

16、amp;operator>>(istream &is,stu &s) /输入函数的重载 cout<<""<<"学号 "<<"姓名 "<<"性别 "<<"科目1 "<<"科目2 "<<"科目3 "<<"科目4 "<<endl;is>>s->num>>s->name>

17、;>s->sex>>s->score0>>s->score1>>s->score2>>s->score3;return is;CPP文件#include<iostream.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include"Status.h"void menu()cout<<"* * * * * * * *学生管理系统* * * * * * *&q

18、uot;<<endl;cout<<"* * * 1:添加学生 * * *"<<endl; cout<<"* * * 2:显示信息 * * *"<<endl; cout<<"* * * 3:按学号查找 * * *"<<endl; cout<<"* * * 4:按姓名查找 * * *"<<endl;cout<<"* * * 5: 插入学生 * * *"<<endl;co

19、ut<<"* * * 6: 删除学生 * * *"<<endl;cout<<"* * * 7: 修改学生 * * *"<<endl;cout<<"* * * 8: 学生总成绩排序 * * *"<<endl;cout<<"* 其他:返回主菜单"<<endl;cout<<"请选择"int main() stu s;struct shu shuzu10;int i,k4,j; char c9,p

20、9; char x20,o20; char l3;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<<"请

21、输入你要找的学生姓名:"cin>>x;getstu2(s,x);break;case 5:cout<<"需要插入位置,学号,姓名,性别,科目,科目,科目,科目"<<endl; cin>>i>>p>>o>>l;for(j=0;j<4;j+)cin>>kj; insetstu(s,i,p,o,l,k);break;case 6:cout<<"1:按学号删除学生的信息;2:按姓名删除学生的信息"<<endl;cin>&g

22、t;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 课程小结 我采用的是链表来存储学生的信息,最大的难点就是总成绩

23、的排序,其他的功能实现还是比较简单,总成绩排序我用啦一个辅助结构体 struct shu 来存储每个学生的学号char num来记录学生以及便于排序的时候查找,还有总成绩float allscore,且用结构体数组来存储首先对每个学生的学号及总成绩赋值给结构体数组shuzu,然后对结构体数组进行从大到小排序(选择排序)然后对结构体一一查找相应的信息。假如用顺序表来存储可以避免这方面的麻烦。最后对一个管理系统具有较好的结构,即对链表的一系列的操作熟悉及运用同时也对数据结构这方面的认识深刻,数据存储的重要性。数据结构在程序设计的重要性。 2:joseph环1 任务分析编号是1,2,,n的n个人按照

24、顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。测试数据:m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?要求:输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。输出形式:建立一个输出函数,

25、将正确的输出序列2结构分析采用链表来存储每个人的密码每一次出列将密码为下一次报道的M。并输出这个人。直到所有人输出3算法实现头文件status.htypedef int status;#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef struct node /结构体存储密码int mima;struct node *next;nodelist,*nodeli;void creatlist(nodeli &s,int n) /创建循环链表nodelist *p,*r,*q;

26、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;elsecin>>p->mima; /输入密码 r->next=p; /开始下一个r=p;r->next=q;void jos

27、eph(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<st

28、dio.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函数调

29、用调试结果4课程小结这是一个典型的约瑟夫环差不多的问题只要熟练链表的操作就可以比较容易实现。关键在于每一个的输出。找下一个以上一次输出链表的密码来实现的。关键对数据结构分析的重要。链表的运用熟练3:猴子选大王 1 任务分析7、 猴子选大王一堆猴子都有编号,编号是1,2,3 .m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。要求:输入数据:输入m,n m,n 为整数,n<m输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能 2结构分析采

30、用链表来存储每个猴子的序号每一次出列将序号为下一次报道的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);/产生结点

温馨提示

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

评论

0/150

提交评论