数据结构之学生成绩管理系统.doc
《数据结构之学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《数据结构之学生成绩管理系统.doc(14页珍藏版)》请在咨信网上搜索。
学生成绩管理系统 一、 实验目的 1. 通过此次课程设计中学生成绩管理系统的题目,掌握链表等数据结构的基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解; 2. 将所学数据结构方面的知识与一门具体的语言——C语言来进行实现,感受数据结构的强大作用,加深理解。 二、 试验要求 管理系统中有五个要求:输入 查找 修改 插入 删除 存储 (1) 输入要求:能够通过键盘输入和文件输入两种 (2) 查找要求:能够根据学生号查找单个学生的信息,也可以遍历所有学生信息 (3) 修改要求:能够根据学生号修改单个学生所有信息 (4) 插入要求:能够实现头插和尾插 (5) 删除要求:能够根据学生号删除单个学生信息 (6) 存储要求:通过链表存储所有信息 三、 算法的思想与算法实现步骤 1. 基本思想 通过链表数据类型进行基本操作,主要有三个模块:分别是主函数模块、 主要操作函数及基本操作函数。 其中,主函数负责其他子函数的调用实现以及基本界面的操作 主要函数包括: void StuInput(Student *); //学生成绩管理系统的输入函数,由主函数调用 void StuSelect(Student *); //学生成绩管理系统的查找函数,由主函数调用 void StuAlter(Student *); //学生成绩管理系统的修改函数,由主函数调用 void StuInsert(Student *); //学生成绩管理系统的插入函数,由主函数调用 void StuDelect(Student *); //学生成绩管理系统的删除函数,由主函数调用 void StuSave(Student *); //学生成绩管理系统的存储函数,由主函数调用 基本操作函数: void StuOutput(Student *p); //输出函数 int StuImport(Student *head,Student *p); //输入函数 void StuInputHand(Student *head); //学生成绩管理系统的手动输入函数,由输入函数调用 void StuInputFile(Student *head); //学生成绩管理系统的文件输入函数,由输入函数调用 void StuSelectErg(Student *head); //学生成绩管理系统的遍历函数,由查找函数调用 void StuSelectNumFind(Student *head); //学生成绩管理系统的按学号查找函数,由查找函数调用 void StuSelectSubFind(Student *head); //学生成绩管理系统的按科目查找函数,由查找函数调用 2. 实现步骤 首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表等; 其次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能; 最后,编写主函数对每个实现进行按需调用,实现操作。 3.流程图 main StuMain StuInput StuSelect StuAlter StuInsert StuDelect StuSave StuInputHand StuInputFile StuSelectErg StuSelectNumFind StuSelectSubFind 四.代码: #include<stdio.h> #include<malloc.h> #include<string.h> struct Student { char name[10]; char subject[10]; int num; int grade; Student *next; }; void StuMain(); //学生成绩管理系统的主函数,由main函数调用 void StuInput(Student *); //学生成绩管理系统的输入函数,由主函数调用 void StuSelect(Student *); //学生成绩管理系统的查找函数,由主函数调用 void StuAlter(Student *); //学生成绩管理系统的修改函数,由主函数调用 void StuInsert(Student *); //学生成绩管理系统的插入函数,由主函数调用 void StuDelect(Student *); //学生成绩管理系统的删除函数,由主函数调用 void StuSave(Student *); //学生成绩管理系统的存储函数,由主函数调用 void StuOutput(Student *p); //输出函数 int StuImport(Student *head,Student *p); //输入函数 void StuOutput(Student *p) //打印函数,将链表的该节点信息输出 { printf("学生姓名:"); printf("%s ",p->name); printf("学生号:"); printf("%d ",p->num); printf("科目: "); printf("%s ",p->subject); printf("学生成绩:"); printf("%d \n",p->grade); } int StuImport(Student *head,Student *p) { Student *Opinion=(Student *)malloc(sizeof(Student)); //用来判断输入节点中学生号是否有重复 Opinion=head->next; printf("学生姓名:\n"); scanf("%s",p->name); printf("学生号:\n"); scanf("%d",&p->num); printf("科目:\n"); scanf("%s",p->subject); if(Opinion!=NULL) { if(Opinion->num==p->num&&!strcmp(Opinion->subject,p->subject)) { printf("该学生这门科目已有成绩,请重新输入\n"); return 1; } Opinion=Opinion->next; } printf("学生成绩:\n"); scanf("%d",&p->grade); return 0; } void main() { StuMain(); } void StuMain() { char decide='y'; //定义while变量,函数是否继续进行 int num=1; //定义switch变量,函数跳转到哪个子函数 Student *head; //定义链表的头指针 head=(Student *)malloc(sizeof(Student)); //给头指针开辟空间 head->next=NULL; //初始化头指针 while(decide!='n') { printf(" ***************************************************\n"); printf(" ********** 1 输入 2 查找 3 修改 4 插入 ********\n"); printf(" ********** 5 删除 6 存储 7 退出 ********\n"); printf(" ***************************************************\n"); scanf("%d",&num); switch(num) { case 1: StuInput(head); break; case 2: StuSelect(head); break; case 3: StuAlter(head); break; case 4: StuInsert(head); break; case 5: StuDelect(head); break; case 6: StuSave(head); break; default: decide='n'; break; } }; } void StuInputHand(Student *head); //学生成绩管理系统的手动输入函数,由输入函数调用 void StuInputFile(Student *head); //学生成绩管理系统的文件输入函数,由输入函数调用 void StuInput(Student *head) //学生成绩管理系统的输入函数,由主函数调用 { char decide='y'; //定义while变量,函数是否继续进行 int num; //定义switch变量,函数跳转到哪个子函数 while(decide!='n') { printf(" ***************************************************\n"); printf(" ** 1 手动输入 2 文件输入 3 退出 **\n"); printf(" ***************************************************\n"); scanf("%d",&num); switch(num) { case 1: StuInputHand(head); break; case 2: StuInputFile(head); default: decide='n'; break; } } } void StuInputHand(Student *head) //学生成绩管理系统的手动输入函数,由输入函数调用 { if(head->next==NULL) { Student *point=(Student *)malloc(sizeof(Student)); //链表中最后一个节点,只在该函数中存在 point->next=NULL; int decide=1; while(decide!=0) { Student *p=(Student *)malloc(sizeof(Student)); p->next=NULL; StuImport(head,p); if(head->next==NULL) { head->next=p; point=p; } else { point->next=p; point=p; } printf("是否继续:1/0\n"); scanf("%d",&decide); } } else printf("管理系统中已存在信息,若想输入学生信息,请转插入子系统"); } void StuInputFile(Student *head) //学生成绩管理系统的文件输入函数,由输入函数调用 { if(head->next!=NULL) { printf("学生管理系统中已有信息,请跳转到插入选项\n"); return ; } FILE *fp; printf("请输入文件名(包括物理地址)\n"); char filename[10]; scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL) { printf("can not open file\n"); return; } Student *point=(Student *)malloc(sizeof(Student)); Student *Opinion=(Student *)malloc(sizeof(Student)); //用来判断输入节点中学生号是否有重复 while(!feof(fp)) { Opinion=head->next; Student *p=(Student *)malloc(sizeof(Student)); p->next=NULL; fread(p,sizeof(Student),1,fp); if(Opinion!=NULL) { if(Opinion->num==p->num&&!strcmp(Opinion->subject,p->subject)) { printf("该文件中有重复学生信息,请验明再传输\n"); head->next=NULL; return ; } Opinion=Opinion->next; } if(head->next==NULL) { head->next=p; point=p; } else { point->next=p; point=p; } }; Opinion=head->next; while(Opinion->next!=NULL) { Opinion=Opinion->next; if(Opinion->next->next==NULL) Opinion->next=NULL; }; fclose(fp); printf("传输成功\n"); } void StuSelectErg(Student *head); //学生成绩管理系统的遍历函数,由查找函数调用 void StuSelectNumFind(Student *head); //学生成绩管理系统的按学号查找函数,由查找函数调用 void StuSelectSubFind(Student *head); //学生成绩管理系统的按科目查找函数,由查找函数调用 void StuSelect(Student *head) //学生成绩管理系统的查找函数,由主函数调用 { char decide='y'; //定义while变量,函数是否继续进行 int num; //定义switch变量,函数跳转到哪个子函数 while(decide!='n') { printf(" ***************************************************\n"); printf(" **** 1 遍历 2 学号查找 3 科目查找 4 退出 ****\n"); printf(" ***************************************************\n"); scanf("%d",&num); switch(num) { case 1: StuSelectErg(head); break; case 2: StuSelectNumFind(head); break; case 3: StuSelectSubFind(head); break; default: decide='n'; break; } } } void StuSelectErg(Student *head) //学生成绩管理系统的遍历函数,由查找函数调用 { Student *p=(Student *)malloc(sizeof(Student)); p=head->next; int i=1; while(p!=NULL) { printf("第%d位学生信息:\n",i); StuOutput(p); p=p->next; i++; } } void StuSelectNumFind(Student *head) //学生成绩管理系统的查找子系统,有查找函数调用 { int num; printf("输入想要查找学生的学生号:\n"); scanf("%d",&num); Student *p=(Student *)malloc(sizeof(Student)); p=head->next; int i=1; while(p!=NULL) { if(num==p->num) { StuOutput(p); i++; } p=p->next; } if(i==1) printf("没有该学生信息"); } void StuSelectSubFind(Student *head) //学生成绩管理系统的按科目查找函数,由查找函数调用 { char Sub[10]; printf("输入想要查找科目:\n"); scanf("%s",Sub); Student *p=(Student *)malloc(sizeof(Student)); p=head->next; int i=1; while(p!=NULL) { if(!strcmp(Sub,p->subject)) { StuOutput(p); i++; } p=p->next; } if(i==1) printf("没有该学生信息"); } void StuAlter(Student *head) //学生成绩管理系统的修改函数,由主函数调用 { int num; printf("输入想要查找学生的学生号:\n"); scanf("%d",&num); char Sub[10]; printf("输入想要查找科目:\n"); scanf("%s",Sub); Student *p=(Student *)malloc(sizeof(Student)); p=head->next; int i=1; while(p!=NULL) { if(num==p->num&&!strcmp(Sub,p->subject)) { printf("输入修改成绩:\n"); scanf("%d",&p->grade); printf("修改成功\n"); i++; } p=p->next; if(i==1) printf("没有该学生信息"); } } void StuInsert(Student *head) //学生成绩管理系统的插入函数,由主函数调用 { Student *point=(Student *)malloc(sizeof(Student)); point=head->next; while(point->next!=NULL) point=point->next; //找到尾结点 char decide='y'; //定义while变量,函数是否继续进行 int num; //定义switch变量,函数跳转到哪个子函数 while(decide!='n') { printf(" ***************************************************\n"); printf(" **** 1 头插 2 尾插 3 退出 ****\n"); printf(" ***************************************************\n"); scanf("%d",&num); Student *p=(Student *)malloc(sizeof(Student)); switch(num) { case 1: StuImport(head,p); p->next=head->next; head->next=p; printf("插入成功\n"); break; case 2: StuImport(head,p); point->next=p; p->next=NULL; printf("插入成功\n"); break; default: decide='n'; break; } } } void StuDelect(Student *head) //学生成绩管理系统的删除函数,由主函数调用 { int num; printf("输入想要删除学生的学生号:\n"); scanf("%d",&num); char Sub[10]; printf("输入想要删除科目:\n"); scanf("%s",Sub); Student *p=(Student *)malloc(sizeof(Student)); p->next=head->next; int i=1; while(p->next!=NULL) { if(num==p->next->num&&!strcmp(Sub,p->next->subject)) { StuOutput(p->next); printf("是否删除:1/0\n"); scanf("%d",&i); if(num==head->next->num&&!strcmp(Sub,head->next->subject)) { head->next=head->next->next; } else { p->next=p->next->next; } i=2; printf("删除成功\n"); break; } p=p->next; } if(i==1) printf("没有该学生信息\n"); } void StuSave(Student *head) //学生成绩管理系统的存储函数,由主函数调用 { FILE *fp; char filename[10]; printf("请输入存储文件名(包括物理地址)\n"); scanf("%s",filename); Student *p=(Student *)malloc(sizeof(Student)); p=head->next; if((fp=fopen(filename,"w"))==NULL) { printf("cannot open file"); return; } printf("input data:/n"); while(p!=NULL) { fwrite(p,sizeof(Student),1,fp); /* 成块写入文件*/ p=p->next; } fclose(fp); }其中专业理论知识内容包括:保安理论知识、消防业务知识、职业道德、法律常识、保安礼仪、救护知识。作技能训练内容包括:岗位操作指引、勤务技能、消防技能、军事技能。 二.培训的及要求培训目的 安全生产目标责任书 为了进一步落实安全生产责任制,做到“责、权、利”相结合,根据我公司2015年度安全生产目标的内容,现与财务部签订如下安全生产目标: 一、目标值: 1、全年人身死亡事故为零,重伤事故为零,轻伤人数为零。 2、现金安全保管,不发生盗窃事故。 3、每月足额提取安全生产费用,保障安全生产投入资金的到位。 4、安全培训合格率为100%。 二、本单位安全工作上必须做到以下内容: 1、对本单位的安全生产负直接领导责任,必须模范遵守公司的各项安全管理制度,不发布与公司安全管理制度相抵触的指令,严格履行本人的安全职责,确保安全责任制在本单位全面落实,并全力支持安全工作。 2、保证公司各项安全管理制度和管理办法在本单位内全面实施,并自觉接受公司安全部门的监督和管理。 3、在确保安全的前提下组织生产,始终把安全工作放在首位,当“安全与交货期、质量”发生矛盾时,坚持安全第一的原则。 4、参加生产碰头会时,首先汇报本单位的安全生产情况和安全问题落实情况;在安排本单位生产任务时,必须安排安全工作内容,并写入记录。 5、在公司及政府的安全检查中杜绝各类违章现象。 6、组织本部门积极参加安全检查,做到有检查、有整改,记录全。 7、以身作则,不违章指挥、不违章操作。对发现的各类违章现象负有查禁的责任,同时要予以查处。 8、虚心接受员工提出的问题,杜绝不接受或盲目指挥; 9、发生事故,应立即报告主管领导,按照“四不放过”的原则召开事故分析会,提出整改措施和对责任者的处理意见,并填写事故登记表,严禁隐瞒不报或降低对责任者的处罚标准。 10、必须按规定对单位员工进行培训和新员工上岗教育; 11、严格执行公司安全生产十六项禁令,保证本单位所有人员不违章作业。 三、 安全奖惩: 1、对于全年实现安全目标的按照公司生产现场管理规定和工作说明书进行考核奖励;对于未实现安全目标的按照公司规定进行处罚。 2、每月接受主管领导指派人员对安全生产责任状的落- 配套讲稿:
如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。
关于本文