数据结构课程设计学生成绩管理系统
更新时间:2023-06-08 16:07:01 阅读量: 实用文档 文档下载
这是自己写的课程设计,嘿嘿。
课程设计报告
课程设计题目:1:学生成绩管理系统 2:joseph环 3:猴子选大王
姓名洪军
学号 201420180706 班级1421807 指导教师邹国华
2015年 12月 17日
这是自己写的课程设计,嘿嘿。
1:学生成绩管理系统
1, 问题分析;
定义一个学生管理系统实现对学生基本数据的管理, 录入:输入每位学生的信息; 输出:输出每位学生的信息;
查询:可以按3学号和4姓名查询某个学生的信息;
修改:可以修改学生(按1学号修改,按2成绩修改)的信息; 插入:可以插入一个学生的信息;
删除:可以删除(按1学号删除,按2成绩删除)满足条件的学生信息; 排序:可以按学生的总成绩排序。
2 结构分析
首先分析结果我采用的是单链表的存储结构通过此系统可以实现如下功能: 定义一个学生类型student(学号,姓名,四门课程成绩),学生链表student,含有学生数组和学生数。
3 实现流程分析
定义数据类型typedefstruct student
初始化结构体并输入学生的数据inputstu(stu&s,int n)
重载运算符便于输入输出学生的成绩
输出函数输出全部学生的信息output(stu s)
查找学生 3按学号查找getstu1(stus,char i[]) 4按姓名查找getstu2(stus,char c[])
插入学生insetstu(stu&s,inti,char nu[],char na[],char se[],intsc[])
1按学号删除学生deletestu1(stu&s),2按姓名删除学生deletestu2(stu&s)
这是自己写的课程设计,嘿嘿。
1按学号修改学生的信息update1(stu&s)2按姓名修改学生的信息update2(stu&s)
对总成绩排序sort(stu&s,structshushuzu[])
CPP文件实现所有功能
4 算法实现
头文件status.h
typedefint status; #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define N 10
typedefstruct student{ //学生结构体(链表)
char num[9]; char name[15]; char sex[2]; int score[4];
student *next; }student,*stu;
structshu{ //辅助结构体数组存储学生总成绩和学号便于排序
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; r=s; {
p=(student *)malloc(sizeof(student)); //申请链表空间
s=(stu)malloc(sizeof(student)); //申请头节点 for(i=0;i<n;i++)
这是自己写的课程设计,嘿嘿。
cin>>p; }
status output(stu s) //输出函数 { }
status getstu1(stus,char i[])//按学号查找 { }
status getstu2(stus,char c[])//按名字查找 {
student *p=s->next;
while(strcmp(p->name,c)!=0) { }
if(p) //判断结点存在并且输出 { else
return ERROR; cout<<p;return 0;} p=p->next; student *p=s;
while(strcmp(p->num,i)!=0) //结点的名字相比较 { }
if(p) //判断结点存在并且输出 { } else
return ERROR; cout<<p; return TURE; p=p->next; student *r; r=s; r=r->next;
while(r) //判断结点存在 {
cout<<r; //输出结点 } return 0;
r=r->next; r->next=p; r=p; }
r->next=NULL; //最后节点指像空
这是自己写的课程设计,嘿嘿。
}
status insetstu(stu&s,inti,char nu[],char na[],char se[],intsc[]) //插入学生 { }
status deletestu1(stu&s) //按学号删除学生 {
char i[10];
cout<<"请输入你要删除学生的学号"<<endl; cin>>i;
while(strcmp(p->next->num,i)!=0) //找到修改学生 { }
if(p) //存在就删除不存在就返回错误 { r=p->next; p->next=r->next; free(r);
p=p->next; student *p=s,*q; int j=0,m;
while(j<i-1&&p->next) //找到学生的位置 { } if(j==i-1) { }
else
return ERROR;
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;
p=p->next; j++;
student *p=s,*r;
这是自己写的课程设计,嘿嘿。
}
} else
return ERROR;
status deletestu2(stu&s) //按姓名删除学生 { }
status update1(stu&s) //按学号修改学生的信息 { }
char i[10];
cout<<"请输入你要修改学生的学号"<<endl; cin>>i;
while(strcmp(p->num,i)!=0) //找到修改学生 { } if(p) { } else
return ERROR; cin>>p; return 0; p=p->next; char i[10];
cout<<"请输入你要删除学生的姓名"<<endl; cin>>i;
while(strcmp(p->next->name,i)!=0) //找到修改学生 { } if(p) { r=p->next; p->next=r->next; free(r); return 0; } else
return ERROR; p=p->next;
student *p=s,*r;
student *p=s;
这是自己写的课程设计,嘿嘿。
status update2(stu&s) //按姓名修改学生的信息 { }
void sort(stu&s,structshushuzu[]) //对总成绩排序 {
int n=0,i,j,k; student *p=s->next;
while(p){ //获取多少个人数 }; p=s->next;
for(i=1;i<=n;i++) //对结构体进行赋值 { shuzu[i].allscore=0; }
for(i=1;i<n;i++){ //对结构体进行排序
k=i;
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); strcpy(shuzu[i].num,shuzu[k].num);
for(j=i+1;j<=n;j++)
for(j=0;j<4;j++)shuzu[i].allscore=shuzu[i].allscore+p->score[j]; strcpy(shuzu[i].num,p->num); p=p->next; n++; p=p->next; char i[10];
cout<<"请输入你要修改学生的姓名"<<endl; cin>>i;
while(strcmp(p->name,i)!=0) //找到修改学生 { } if(p) { } else
return ERROR; cin>>p; return 0; p=p->next;
student *p=s;
shuzu[i].allscore=shuzu[k].allscore; 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) //输出函数的重载 { }
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;
os<<"学号:"<<s->num<<" 姓名:"<<s->name<<" 性别:"<<s->sex<<"科目1 "<<s->score[0]<<"科目2 return os;
"<<s->score[1]<<"科目3 "<<s->score[2]<<"科目4 "<<s->score[3]<<endl;
}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;
structshushuzu[10]; inti,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; switch(j){
case 1:deletestu1(s);break; case 2:deletestu2(s);break; };break; switch(j){
case 1:update1(s);break; case 2:update2(s);break; };break;
case 6:cout<<"1:按学号删除学生的信息;2:按姓名删除学生的信息"<<endl;cin>>j;
case 7:cout<<"1:按学号修改学生的信息;2:按姓名修改学生的信息"<<endl;cin>>j;
case 8:sort(s,shuzu);break; default:return 0; }
调试结果
这是自己写的课程设计,嘿嘿。
这是自己写的课程设计,嘿嘿。
这是自己写的课程设计,嘿嘿。
这是自己写的课程设计,嘿嘿。
5 课程小结
我采用的是链表来存储学生的信息,最大的难点就是总成绩的排序,其他的功能实现还是比较简单,总成绩排序我用啦一个辅助结构体structshu来存储每个学生的学号char num来记录学生以及便于排序的时候查找,还有总成绩float allscore,且用结构体数组来存储首先对每个学生的学号及总成绩赋值给结构体数组shuzu[],然后对结构体数组进行从大到小排序(选择排序)然后对结构体一一查找相应的信息。假如用顺序表来存储可以避免这方面的麻烦。最后对一个管理系统具有较好的结构,即对链表的一系列的操作熟悉及运用
同时也对数据结构这方面的认识深刻,数据存储的重要性。数据结构在程序设计的重要性。
这是自己写的课程设计,嘿嘿。
2:joseph环
1 任务分析
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值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
typedefint status; #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2
typedefstruct node{ //结构体存储密码
intmima; 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++) { } r->next=q;
p=(nodelist*)malloc(sizeof(nodelist)); //创建人 if(i==0) { } else { }
cin>>p->mima;//输入密码 r=p;
r->next=p; //开始下一个
q=p; r->next=p; r=p;
cin>>p->mima; //输入密码
void joseph(nodeli&s,intm,int n) //joseph函数 { }
nodelist *p=s,*q; int i; while(n!=0) {
while(i<m) { }
if(i=m) // 找到目标 { } }
cout<<"\n";
q=p->next; p->next=q->next;
cout<<q->mima<<" ";//输出密码
m=q->mima; //把密码在复制给M找下一个 p=p->next; free(q); n--;
i++;p=p->next;
i=1;
这是自己写的课程设计,嘿嘿。
Cpp文件
#include<stdio.h> #include<stdlib.h> #include<iostream.h> #include"status.h" void main() {
nodeli s; //定义个链表 intn,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,nm,n 为整数,n<m
输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能
2结构分析
采用链表来存储每个猴子的序号每一次出列将序号为下一次报道的M。并输出这个猴子。直到所有人输出最后的猴子为大王下次
3算法实现
Cpp文件
#include<stdio.h> #include<stdlib.h>
typedefstructhouzinode{ intnum; //猴子编号 structhouzinode *next;
}houzinode,*houzilist; //猴子类型
void houzidawan(houzilist&s,intn,int m) //求解猴子选大王问题最后输出的为大王 { inti,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() { intn,m; houzilist s; }
printf("* * * * * *猴子选大王* * * * * *\n"); printf("输入N,M:"); scanf("%d %d",&n,&m); printf("出列人员的顺序为:\n"); houzidawan(s,n,m);//调用函数 return 0;
调试结果
这是自己写的课程设计,嘿嘿。
}4
课程小结
这是一个典型的约瑟夫环的问题应用到生活中与上一个的题目一样只要熟练链表的操作就可以比较容易实现。关键在于每一个猴子的输出。找下一个以上一次输出链表的序号来实现的。最后输出的猴子就是大王
这是自己写的课程设计,嘿嘿。
东华理工大学 课程设计评分表
学生姓名:洪军班级:1421807学号:201420180706 课程设计题目:学生成绩管理系统
正在阅读:
数据结构课程设计学生成绩管理系统06-08
人民日报评论员:坚持不懈惠民生03-29
中考初中数学知识点03-08
入口广场铺装施工方案08-12
中信华南东莞公司培训管理办法06-04
自然资源复习要点03-08
美国西弗吉尼亚丙烷爆炸事故救援分析11-02
【西南●最新版】《汉译英》网上作业及课程考试复习资料(有答案)05-24
总经理年会致辞02-10
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 数据结构
- 管理系统
- 成绩
- 课程
- 学生
- 设计
- 活动策划方案九篇(最新)
- API Q1第九版 中文版
- 浅议英语语言中的性别歧视及其对策
- 活动策划方案锦集6篇(1)(最新)
- 2021年河北会计从业资格考试之财经法规真题题库模拟卷四十八
- 2021年材料范文之材料员毕业实习报告
- 服装厂实习周记【多篇】
- 2021年江西省年度农村信用社考试会计考试模拟试卷
- MTK平板电脑原理图 Technical Drawing-KP78C_MAINPCB-V1.1(位号图)
- 创建平安校园工作领导小组
- 基于MAX7456的视频字符叠加系统设计
- 幼儿园大班游戏活动教案《有趣的椅子》含反思
- 国际格局和大国关系
- 基于随机Petri网的云数据中心能耗感知调度研究与性能分析
- 非市场环境与非市场战略的认识和理解
- UML系统建模与分析设计(3)-需求分析与用例建模
- 安全生产隐患排查治理与重大隐患挂牌督办管理
- 岭澳二期核电站数字化反应堆保护系统
- 掘进工作面防治水管理办法
- 世界卫生组织儿童基本药物标准清单