分享
分销 收藏 举报 申诉 / 49
播放页_导航下方通栏广告

类型学生管理系统样本.doc

  • 上传人:人****来
  • 文档编号:9854535
  • 上传时间:2025-04-10
  • 格式:DOC
  • 页数:49
  • 大小:1.12MB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    学生 管理 系统 样本
    资源描述:
    资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 信息科学与技术学院 《数据结构》课程设计报告 题目名称: 学生管理系统 专业班级: 11级计科2班 学生姓名: 陶 鑫 学生学号: 指导教师: 郭 理 完成日期: -01-09 1 课程设计的目的 1 1.1 课程设计的目的 1 1.2 课程设计的题目 1 1.3 题目要求 1 2 概要设计 2 2.1 存储结构 2 2.2 基本操作 3 3 详细设计 3 3.1 流程图 3 3.2 源程序 10 4 测试 21 5 课程设计总结 29 6参考书目: 29 1 课程设计的目的 1.1 课程设计的目的 更好的掌握数据结构这门课程, 会用数据结构的基本思想及算法解决实际问题。更好的掌握链表, 能进行各种基本的操作, 提高编程能力。 1.2 课程设计的题目 《学生管理系统》 1.3 题目要求 使用下面的数据, 用C/C++设计一个简单的学籍管理系统, 实现出最基本的功能。 学生基本信息文件(A.TXT)及其内容: A.TXT文件不需要编程录入数据, 可用文本编辑工具直接生成 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756122 … …. .. … ……….. 学生成绩基本信息文件(B.TXT)及其内容: 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66 … …. ………. .. .. … (一) 功能要求及说明: (1) 数据录入功能: 对B.TXT进行数据录入,只录入每个学生的学号、 课程编号、 课程名称、 学分、 平时成绩、 实验成绩、 卷面成绩共7个数据. 综合成绩、 学分由程序根据条件自动运算。 综合成绩的计算:如果本课程的实验成绩为-1, 则表示无实验, 综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% . 实得学分的计算: 采用等级学分制. 综合成绩在90-100之间 ,应得学分=学分*100% 综合成绩在80-90之间 ,应得学分=学分*80% 综合成绩在70-80之间 ,应得学分=学分*75% 综合成绩在60-70之间 ,应得学分=学分*60% 综合成绩在60以下 ,应得学分=学分*0% ( 2) 查询功能: 分为学生基本情况查询和成绩查询两种 A: 学生基本情况查询: A1----输入一个学号或姓名( 可实现选择) , 查出此生的基本信息并显示输出。 A2---输入一个宿舍号码, 可查询出本室所有的学生的基本信息并显示输出。 B: 成绩查询: B1: 输入一个学号时, 查询出此生的所有课程情况, 格式如下: 学 号: xx 姓 名: xxxxx 课程编号: xxx 课程名称: xxxxx 综合成绩: xxxx 实得学分: xx 课程编号: xxx 课程名称: xxxxx 综合成绩: xxxx 实得学分: xx 课程编号: xxx 课程名称: xxxxx 综合成绩: xxxx 实得学分: xx … … … … ……… … … 共修: xx科, 实得总学分为: xxx ( 3) 删除功能: 当在A.TXT中删除一个学生时, 自动地在B.TXT中删除此人所有信息。 (4 ) 排序功能: 能实现选择按综合成绩或实得学分升序或降序排序并显示数据。 ( 二) 其它要求: ( 1) 只能使用C/C++语言, 源程序要有适当的注释, 使程序容易阅读 ( 2) 至少采用文本菜单界面( 如果能采用图形菜单界面更好) ( 3) 学生可自动增加新功能模块( 视情况可另外加分) ( 4) 写出课程设计报告, 具体要求见相关说明文档 2 概要设计 2.1 存储结构 首先, 为了能使自己得到锻炼, 存储结构我使用了顺序存储与链式存储, 学生基本信息用的数组来存储, 对学生成绩基本信息使用链表进行存储。结构体定义如下: //学生基本信息的结构体定义 typedef struct student {string xuehao; //学号 string name; //姓名 string gender; //性别 string sushe; //宿舍号 string tel;//电话 }student; //学生成绩信息的结构体定义 typedef struct grade {string xuehao;//学号 string courseno; //课程号 string coursename; //课程名称 int xuefen; //学分 int pingshi; //平时成绩 int shiyan; //实验成绩 int juanmian;//卷面成绩 float zonghe;//综合成绩 float shide;//实得学分 grade *next; }grade; 2.2 基本操作 ( 1) 数据录入功能 ( 2) 查询功能 ( 3) 删除功能 ( 4) 排序功能 ( 5) 显示所有学生信息 ( 6) 保存 ( 7) 退出 3 详细设计 3.1 流程图 各个算法的设计如下: 1.主函数: int main( ); 从A.txt中读取存储的学生基本信息到内存, 以便进行处理, 过程如图1 开始 创立存储学生信息的单链表的头结点 将学生信息读取到内存 调用菜单函数 结束 图 1 2. 菜单函数: void menu(student *stu,grade *head,grade *gra); stu是指向学生基本信息数组的指针, head是指向学生成绩信息链表头结点的指针, gra是指向学生成绩信息链表最后一个结点的指针。 用于进行指示进行各种操作, 是与每个函数都相联系的一个函数, 功能操作见图2 6保存 0退出 开始 输入i 菜单 4排序 3删除 5显示学生信息 2查询 1数据录入 其它有误误 结束 6保存 0退出 开始 输入i 菜单 4排序 3删除 5显示学生信息 2查询 1数据录入 其它有误误 图2 3. 数据录入函数: void luru(grade *gra); 其中gra是指向单链表最后一个结点的指针, 用于后插法中进行插入。 将学生成绩信息依次输入单链表中, 其中单链表边输入边创立, 综合成绩和实得学分可由计算机自己计算。流程图见图3 判断成绩范围 应得学分=学分*100% 应得学分=学分*80% 应得学分=学分*75% 应得学分=学分*60% 应得学分=0 结束 综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% 输入学生平时成绩 输入学生实验成绩 输入学生卷面成绩 输入学生课程编号 输入学生的学号 输入学生学分 开始 gra->shiyan=-1 综合成绩=平时成绩*30%+卷面成绩*70% 输入学生平时成绩 输入学生实验成绩 输入学生卷面成绩 输入学生课程编号 输入学生的学号 输入学生学分 开始 gra->shiyan=-1 Y N 综合成绩=平时成绩*30%+卷面成绩*70% 90-100 80-90 70-80 60-70 60以下   图3 4.查询功能: void lookfor(student *p,grade *head); P为指向学生基本信息数组的指针, head为指向学生成绩链表的头结点的指针。 有学生基本情况查询和成绩查询两种大功能, 基本情况查询又分为按学号或姓名查找单个学生基本信息, 也可输入宿舍号查询整个宿舍学生的基本信息。成绩查询只要输入学号便可查询相应学生的成绩信息。见图4 1.输入一个学号或姓名 2.输入一个宿舍号码 a 按学号查找 b 按姓名查找 输出一个宿舍学生信息 输出相应学生信息 输出相应学生所有成绩 结束 开始 输入i A:学生基本情况查询 B:成绩查询 输入j 输入学号 图4 5. 删除功能: void del(student *stu,grade *head); stu为指向学生基本信息数组的指针, head为指向学生成绩链表的头结点的指针。 执行删除功能时在存储学生基本信息的数组中与存储学生成绩信息的链表中同时删除该学生信息, 以便进行下面操作与向文件中存储信息。功能见图5 开始 输入要删除学生的学号 在学生基本信息中删除 在学生成绩基本信息中删除 结束 图5 6. 排序功能: void sort(grade *head); head为指向学生成绩链表的头结点的指针。 下面流程图实现的是按综合成绩升序排序, 使用的选择排序法, 虽说使用的存储结构为链式存储结构, 但排序时并非改变的指针指向, 而是只修改存储的信息, 指针指向不用改变。如图6 开始 head=head->next head->next! =NULL p=head->next P! =NULL head->zonghe>p->zonghe 交换相邻节点中数据 p=p->next 结束 N Y P! =NULL head->zonghe>p->zonghe 交换相邻节点中数据 p=p->next N Y N Y head=head->next 图6 7. 显示所有学生信息: void show(student *stud); stud为指向学生基本信息数组的指针 用于显示内存中学生基本情况信息, 以便更好了解学生的一些情况. 开始 i=1 stud[i].xuehao!="0" 输出学号, 姓名, 性别, 宿舍, 电话号 结束 N Y i++ 图7 8. 保存功能:void save1(student *stud); void save2(grade *head); stud为指向学生基本信息数组的指针, head为指向学生成绩链表的头结点的指针。函数用于将内存中数据存储到文件中以便更好保存信息。 开始 输入i i==1 I==2 保存学生基本信息到A.TXT 保存学生成绩信息到B.TXT 输入有误, 重新操作! 结束 N Y N Y 图8 3.2 源程序 #define num 10 #include <iostream>. #include <string> #include<fstream> //定义文件输入输出流 using namespace std; //学生基本信息的结构体定义 typedef struct student {string xuehao; //学号 string name; //姓名 string gender; //性别 string sushe; //宿舍号 string tel;//电话 }student; //学生成绩信息的结构体定义 typedef struct grade {string xuehao;//学号 string courseno; //课程号 string coursename; //课程名称 int xuefen; //学分 int pingshi; //平时成绩 int shiyan; //实验成绩 int juanmian;//卷面成绩 float zonghe;//综合成绩 float shide;//实得学分 grade *next; }grade; void luru(grade *gra); void menu(student *stu,grade *head,grade *gra); void lookfor(student *p,grade *head); void sort(grade *head); void out(grade *head); void sort1(grade *head); void del(student *stu,grade *head); void show(student *stu); void save1(student *stud); void save2(grade *head); void leave(); //数据录入 void luru(grade *gra) {string str; cout<<"请输入学生的学号, "<<endl; cin>>str; gra->xuehao=str; cout<<"请录入该生课程编号"<<endl; cin>>gra->courseno; cout<<"请录入该生课程名称"<<endl; cin>>gra->coursename; cout<<"请录入该生学分"<<endl; cin>>gra->xuefen; cout<<"请录入该生平时成绩"<<endl; cin>>gra->pingshi; cout<<"请录入该生实验成绩"<<endl; cin>>gra->shiyan; cout<<"请录入该生卷面成绩"<<endl; cin>>gra->juanmian; //综合成绩计算 if(gra->shiyan==-1) gra->zonghe=gra->pingshi*0.3+gra->juanmian*0.7; else gra->zonghe=gra->pingshi*0.15+gra->juanmian*0.7+gra->shiyan*0.15; //实得学分的计算 if(gra->zonghe>=90&&gra->zonghe<=100) gra->shide=gra->xuefen; else if(gra->zonghe>=80) gra->shide=gra->xuefen*0.8; else if(gra->zonghe>=70) gra->shide=gra->xuefen*0.75; else if(gra->zonghe>=60) gra->shide=gra->xuefen*0.60; else if(gra->zonghe<60) gra->shide=0; else cout<<"您输入有误,请按提示操作! "<<endl; } //查询功能 void lookfor(student *p,grade *head) {char i,k; string str; int j,x=0; float sum=0; cout<<"-------------------------------------------------"<<endl; cout<<"-- A:学生基本情况查询 B:成绩查询 --"<<endl; cout<<"-------------------------------------------------"<<endl; cin>>i; switch(i) {//学生基本情况查询 case 'A':cout<<"-------------------------------------------------"<<endl; cout<<"--1.输入一个学号或姓名 2.输入一个宿舍号码 --"<<endl; cout<<"-------------------------------------------------"<<endl; cin>>j; //A1----输入一个学号或姓名( 可实现选择) , 查出此生的基本信息并显示输出。 if(j==1) { cout<<"*****************************************************"<<endl; cout<<"************a 按学号查找 b 按姓名查找************"<<endl; cout<<"*****************************************************"<<endl; cin>>k; if(k=='a') {cout<<"请输入学号: "<<endl; cin>>str; for( j=1;j<8;j++) {if(p[j].xuehao==str) cout<<p[j].xuehao<<" "<<p[j].name<<" "<<p[j].gender<<" "<<p[j].sushe<<" "<<p[j].tel; cout<<endl; } } else if(k=='b') {cout<<"请输入姓名: "<<endl; cin>>str; for( j=1;j<8;j++) {if(p[j].name==str) cout<<p[j].xuehao<<" "<<p[j].name<<" "<<p[j].gender<<" "<<p[j].sushe<<" "<<p[j].tel; cout<<endl; } } } //A2---输入一个宿舍号码, 可查询出本室所有的学生的基本信息并显示输出。 else if(j==2) {cout<<"请输入宿舍号: "<<endl; cin>>str; for( j=1;j<8;j++) {if(p[j].sushe==str) cout<<p[j].xuehao<<" "<<p[j].name<<" "<<p[j].gender<<" "<<p[j].sushe<<" "<<p[j].tel; cout<<endl; } } else cout<<"您输入有误,请按提示操作! "<<endl; break; //成绩查询 case 'B': cout<<"请输入要查询学生的学号: "<<endl; cin>>str; for(j=1;j<8;j++) {if(p[j].xuehao==str) cout<<"学号: "<<str<<"\t"<<"姓名: "<<p[j].name<<endl; } head=head->next;//指向首元结点 while(head!=NULL) { if(head->xuehao==str) {cout<<"课程编号: "<<head->courseno<<"\t" <<"课程名称: "<<head->coursename<<"\t" <<"综合成绩: "<<head->zonghe<<"\t" <<"实得学分: "<<head->shide<<endl; x++; sum=sum+head->shide; } head=head->next; //指针后指 } cout<<"共修: "<<x<<"科, 实得总学分为: "<<sum<<endl; break; default:cout<<"您输入有误,请按提示操作! "<<endl; } } //删除功能 void del(student *stu,grade *head) {string str; grade *p=head->next; grade *q; cout<<"请输入要删除学生的学号: "<<endl; cin>>str; //在学生基本信息中删除 for(int i=1;stu[i].xuehao!="0";i++) { if(stu[i].xuehao==str) { for(int j=i;stu[j].xuehao!="0";j++) {stu[j].gender=stu[j+1].gender; stu[j].name=stu[j+1].name; stu[j].sushe=stu[j+1].sushe; stu[j].tel=stu[j+1].tel; stu[j].xuehao=stu[j+1].xuehao; } stu[j].gender="0"; stu[j].name="0"; stu[j].sushe="0"; stu[j].tel="0"; stu[j].xuehao="0"; } } //在学生成绩基本信息中删除 while(p) { if(p->xuehao==str) {head->next=p->next; q=p; p=p->next; delete q; } else {p=p->next; head=head->next; } } cout<<"删除成功! "<<endl; } //排序功能 //按综合成绩升序排序 void sort(grade *head) {grade *temp=new grade; grade *h=head; for(head=head->next;head->next;head=head->next) {for(grade *p=head->next;p;p=p->next) { if(head->zonghe>p->zonghe) {temp->xuehao=head->xuehao; head->xuehao=p->xuehao; p->xuehao=temp->xuehao; temp->courseno=head->courseno; head->courseno=p->courseno; p->courseno=temp->courseno; temp->coursename=head->coursename; head->coursename=p->coursename; p->coursename=temp->coursename; temp->xuefen=head->xuefen; head->xuefen=p->xuefen; p->xuefen=temp->xuefen; temp->pingshi=head->pingshi; head->pingshi=p->pingshi; p->pingshi=temp->pingshi; temp->shiyan=head->shiyan; head->shiyan=p->shiyan; p->shiyan=temp->shiyan; temp->juanmian=head->juanmian; head->juanmian=p->juanmian; p->juanmian=temp->juanmian; temp->zonghe=head->zonghe; head->zonghe=p->zonghe; p->zonghe=temp->zonghe; temp->shide=head->shide; head->shide=p->shide; p->shide=temp->shide;//数据交换 } } } cout<<"按综合成绩升序排序为: "<<endl; out(h); } //按实得学分降序排序 void sort1(grade *head) {grade *temp=new grade; grade *h=head; for(head=head->next;head->next;head=head->next) {for(grade *p=head->next;p;p=p->next) { if(head->shide<p->shide) {temp->xuehao=head->xuehao; head->xuehao=p->xuehao; p->xuehao=temp->xuehao; temp->courseno=head->courseno; head->courseno=p->courseno; p->courseno=temp->courseno; temp->coursename=head->coursename; head->coursename=p->coursename; p->coursename=temp->coursename; temp->xuefen=head->xuefen; head->xuefen=p->xuefen; p->xuefen=temp->xuefen; temp->pingshi=head->pingshi; head->pingshi=p->pingshi; p->pingshi=temp->pingshi; temp->shiyan=head->shiyan; head->shiyan=p->shiyan; p->shiyan=temp->shiyan; temp->juanmian=head->juanmian; head->juanmian=p->juanmian; p->juanmian=temp->juanmian; temp->zonghe=head->zonghe; head->zonghe=p->zonghe; p->zonghe=temp->zonghe; temp->shide=head->shide; head->shide=p->shide; p->shide=temp->shide; } } } cout<<"按实得学分降序排序为: "<<endl; out(h); } //输出学生成绩信息 void out(grade *head) {head=head->next; cout<<"学号"<<" "<<"课程编号"<<" "<<"课程名称\t"<<" " <<"学分"<<" "<<" 平时成绩"<<" " <<"实验成绩"<<" "<< "卷面成绩"<<" "<< "综合成绩"<<" "<< "实得学分"<<endl; while(head) {cout<<head->xuehao<<"\t"<<head->courseno<<"\t"<<head->coursename<<"\t"<<head->xuefen<<"\t"<<head->pingshi<<"\t"<<head->shiyan<<"\t"<<head->juanmian<<"\t"<<head->zonghe<<" \t"<<head->shide<<endl; head=head->next; } } //显示所有学生信息 void show(student *stud) {for(int i=1;stud[i].xuehao!="0";i++) { cout<<stud[i].xuehao<<" "<<stud[i].name<<" "<<stud[i].gender<<" "<<stud[i].sushe<<" "<<stud[i].tel; cout<<endl; } } //将学生信息保存到A.txt void save1(student *stud) {ofstream outfile("A.txt",ios::out); //打开文件 if(!outfile) { cerr<<" 打开文件失败, 程序中止!"<<endl; exit(1); //打开文件失败, 终止程序 } for(int i=0;stud[i].xuehao!="0";i++) { outfile<<stud[i].xuehao<<" "<<stud[i].name<<" "<<stud[i].gender<<" "<<stud[i]
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:学生管理系统样本.doc
    链接地址:https://www.zixin.com.cn/doc/9854535.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork