数据结构课程设计——学生成绩管理系统
来源:互联网 发布:方便面 数据报告 编辑:程序博客网 时间:2024/04/30 21:25
student.cpp
main.cpp
/**********************************************版权所有(C)2017,SunMingxin**文件名称:student.cpp*文件标识:无*内容摘要:该部分代码用于自定义函数说明*其它说明:无*当前版本:V1.0*作 者:孙铭馨*完成日期:20171221**版本号:V1.0***********************************************/#include "student.h"int choose;/*用于接受用户的选择*/STUDENT *headLink;/*链表表头指针*//************************************函数功能:从文件中读学生信息到链表中************************************/void ReadInfoFormFile(void){ FILE *fp; STUDENT *p; fp=fopen("student.txt","r"); if(!fp) { printf("文件不存在\n"); return; } p=MallocNode(); while(fscanf(fp,"%s%s%f%f%f",p->studentNumber,p->studentName,&(p->mark1),&(p->mark2),&(p->mark3))>0) { InsertOneNode(p); p=MallocNode(); } fclose(fp);}/************************************函数功能:显示菜单,根据用户的输入完成相应的功能************************************/void DesplayMenu(void){ STUDENT *p; printf(" ##############学生成绩管理系统###############\n"); printf(" *********************************************\n"); printf(" ***************请选择您的操作****************\n"); printf(" # ① 增加学生 #\n"); printf(" # ② 按姓名查询 #\n"); printf(" # ③ 输出学生成绩单 #\n"); printf(" # ④ 删除学生 #\n"); printf(" # ⑤ 按姓名修改学生成绩 #\n"); printf(" # ⑥ 按学号修改学生成绩 #\n"); printf(" # ⑦ 按平均成绩排序并输出学生信息 #\n"); printf(" # ⑧ 显示不及格学生成绩 #\n"); printf(" # ⑨ 保存信息到文件中 #\n"); printf(" # 10 退出操作 #\n"); printf(" *********************************************\n"); printf(" #############################################\n"); scanf("%d",&choose);/*取得用户的选择*/ switch(choose) { case 1: p=MallocNode();/*先申请一个新结点*/ GetInformation(p);/*要求用户输入信息到新结点中*/ InsertOneNode(p);/*将新结点加到链表中*/ break; case 2: DesplayInfoBystudentName(); break; case 3: OutputInformation();/*显示所有学生的信息*/ break; case 4: DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/ break; case 5: ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/ break; case 6: ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/ break; case 7: CompositorByTotalMark();/*按平均成绩排序*/ break; case 8: DesplayMarkSegment();/*显示不及格的学生成绩*/ break; case 9: SaveLinkToFile();/*保存数据*/ break; case 10: SaveLinkToFile();/*保存数据后再退出*/ free(headLink); exit(0); break; default: break; } DesplayMenu();/*递归调用*/}/************************************函数功能:建立链表表头************************************/void CreateHeadLink(void){ STUDENT *p; p=(STUDENT*)malloc(sizeof(STUDENT)); headLink=p; p->next=NULL;}/************************************函数功能:申请一个新结点,并将其初始化************************************/STUDENT *MallocNode(void){ STUDENT *p; int i; p=(STUDENT*)malloc(sizeof(STUDENT)); if(p==NULL) return NULL; for(i=0; i<10; i++) p->studentNumber[i]='\0'; for(i=0; i<20; i++) p->studentName[i]='\0'; for(i=0; i<20; i++) p->mark1=0.0; p->mark2=0.0; p->mark3=0.0; p->next=NULL; return p;}/************************************函数功能:取得用户输入的学生信息************************************/void GetInformation(STUDENT *t){ printf("请输入学生学号:\n"); scanf("%s",t->studentNumber); printf("请输入学生姓名:\n"); scanf("%s",t->studentName); printf("请输入第1门成绩:\n"); scanf("%f",&(t->mark1)); printf("请输入第2门成绩:\n"); scanf("%f",&(t->mark2)); printf("请输入第3门成绩:\n"); scanf("%f",&(t->mark3));}/************************************函数功能:在链表的结尾处增加一个结点************************************/void InsertOneNode(STUDENT *t){ STUDENT *p; p=headLink; while(p->next) { p=p->next; } p->next=t;}/************************************函数功能:根据用户输入的学生姓名 显示该学生的信息************************************/void DesplayInfoBystudentName(void){ STUDENT *p; char studentName[20]; char flag=0; p=headLink->next; printf("请输入学生姓名:\n"); scanf("%s",studentName); while(p) { if(strcmp(p->studentName,studentName)==0) { printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n"); DesplayOneNode(p); flag=1; break; } p=p->next; } if(!flag) printf("对不起,不存在该学生\n",studentName);}/************************************函数功能:输出一个结点的信息************************************/void DesplayOneNode(STUDENT *t){ printf("%s\t",t->studentNumber); printf("%s\t",t->studentName); printf("%.2f\t",t->mark1); printf("%.2f\t",t->mark2); printf("%.2f\t",t->mark3); printf("%.2f\t",t->mark1+t->mark2+t->mark3); printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);}/************************************函数功能:根据用户输入的学号 删除该学生************************************/void DeleteNodeBystudentNumber(void){ char studentNumber[10]; STUDENT *p,*q; char flag=0; printf("请输入要删除的学生学号:"); scanf("%s",studentNumber); p=headLink; q=headLink->next; while(q) { if(strcmp(q->studentNumber,studentNumber)==0) { p->next=q->next; free(q); flag=1; break; } p=p->next; q=q->next; } if(!flag) { printf("不存在该学号的学生\n"); return; } printf("成功删除\n");}/************************************函数功能:显示所有学生的信息************************************/void OutputInformation(void){ STUDENT *p; p=headLink->next; if(p==NULL) { printf("现在没有学生信息,请先输入学生信息\n\n"); return; } printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n"); while(p) { DesplayOneNode(p); p=p->next; }}/************************************函数功能:根据输入的姓名 修改成绩************************************/void ChangeMarkByName(void){ STUDENT *p; int a; char studentName[20]; char flag=0; float mark1,mark2,mark3; p=headLink->next; printf("请输入学生姓名:\n"); scanf("%s",studentName); while(p) { if(strcmp(p->studentName,studentName)==0) { printf("请输入新的第1门成绩:\n"); scanf("%f",&mark1); printf("请输入新的第2门成绩:\n"); scanf("%f",&mark2); printf("请输入新的第3门成绩:\n"); scanf("%f",&mark3); p->mark1=mark1; p->mark2=mark2; p->mark3=mark3; flag=1; printf("修改成功\n"); break; } p=p->next; } if(!flag) printf("对不起,不存在该学生\n",&a,studentName);}/************************************函数功能:根据输入的学号 修改成绩************************************/void ChangeMarkByNumber(void){ STUDENT *p; int b; char studentNumber[20]; char flag=0; float mark1,mark2,mark3; p=headLink->next; printf("请输入学生学号:\n"); scanf("%s",studentNumber); while(p) { if(strcmp(p->studentNumber,studentNumber)==0) { printf("请输入新的第1门成绩:\n"); scanf("%f",&mark1); printf("请输入新的第2门成绩:\n"); scanf("%f",&mark2); printf("请输入新的第3门成绩:\n"); scanf("%f",&mark3); p->mark1=mark1; p->mark2=mark2; p->mark3=mark3; flag=1; printf("修改成功\n"); break; } p=p->next; } if(!flag) printf("对不起,不存在学号为 %s 的学生\n",studentNumber);}/************************************函数功能:保存链表数据到文件中************************************/void SaveLinkToFile(void){ STUDENT *p; FILE *fp; p=headLink->next; if(p==NULL) { printf("现在没有学生信息,请先输入学生信息\n\n"); return; } fp=fopen("student.txt","w+"); if(!fp) { printf("文件不存在\n"); return; } while(p) { fprintf(fp,"%s %s %f %f %f\n",p->studentNumber,p->studentName,p->mark1,p->mark2,p->mark3); p=p->next; } fclose(fp);}/************************************函数功能:不及格学生成绩************************************/void DesplayMarkSegment(void){ STUDENT *p; int count=0; p=headLink->next; printf("60分以下(不及格)的学生成绩如下:\n"); printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n"); while(p) { if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就认为该生不及格*/ { count++; DesplayOneNode(p); } p=p->next; } printf("不及格的学生一共有%d人\n",count);}/************************************函数功能:按平均成绩排序************************************/void CompositorByTotalMark(void){ STUDENT exchange,*r,*p,*q; r=headLink->next; if(r==NULL) { printf("现在还没学生信息,请先输入学生信息\n"); return; } while(r)/*两层while循环实现排序*/ { p=r; q=r->next; while(q) { if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3)) { strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/ strcpy(exchange.studentName,q->studentName); exchange.mark1=q->mark1; exchange.mark2=q->mark2; exchange.mark3=q->mark3; strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/ strcpy(q->studentName,p->studentName); q->mark1=p->mark1; q->mark2=p->mark3; q->mark3=p->mark3; strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/ strcpy(p->studentName,exchange.studentName); p->mark1=exchange.mark1; p->mark2=exchange.mark2; p->mark3=exchange.mark3; } q=q->next; } r=r->next; } OutputInformation();}
student.h
/**********************************************版权所有(C)2017,SunMingxin**文件名称:student.h*文件标识:无*内容摘要:函数声明*其它说明:无*当前版本:V1.0*作 者:孙铭馨*完成日期:20171221**版本号:V1.0***********************************************/#ifndef STUDENT_H_INCLUDED#define STUDENT_H_INCLUDED#include<stdio.h>#include<conio.h>#include<malloc.h>#include<string.h>typedef struct STUDENT{ char studentNumber[10];/*学生学号*/ char studentName[20];/*学生姓名*/ float mark1;/*第1门成绩*/ float mark2;/*第2门成绩*/ float mark3;/*第3门成绩*/ struct STUDENT *next;} STUDENT;/*以下是函数声明*/void ReadInfoFormFile(void);//从文件中读学生信息到链表中void DesplayMenu(void);//显示菜单,根据用户的输入完成相应的功能void CreateHeadLink(void);//建立链表表头STUDENT *MallocNode(void);//申请一个新结点,并将其初始化void GetInformation(STUDENT *t);//获取信息void OutputInformation(void);//显示所有学生信息void DesplayInfoBystudentName(void);//根据姓名显示学生信息void DesplayOneNode(STUDENT *t);//输出一个结点的信息void InsertOneNode(STUDENT *t);//结尾处增加一个结点void DeleteNodeBystudentNumber(void);//删除学生信息void ChangeMarkByName(void);//通过姓名修改void ChangeMarkByNumber(void);//通过学号修改void SaveLinkToFile(void);//保存信息到文件中void DesplayMarkSegment(void);//显示不及格学生信息void CompositorByTotalMark(void);//按平均成绩排序#endif // STUDENT_H_INCLUDED
main.cpp
/**********************************************版权所有(C)2017,SunMingxin**文件名称:main.cpp*文件标识:无*内容摘要:主函数*其它说明:无*当前版本:V1.0*作 者:孙铭馨*完成日期:20171221**版本号:V1.0***********************************************/#include "student.h"int main(){ CreateHeadLink(); ReadInfoFormFile(); DesplayMenu();}
阅读全文
0 0
- 数据结构课程设计——学生成绩管理系统
- 数据结构课程设计——学生成绩管理系统
- 数据结构课程设计——ytu学生成绩管理系统
- 数据结构课程设计——学生成绩管理系统
- 数据结构课程设计——学生成绩管理系统
- 数据结构 课程设计 学生成绩管理系统
- 数据结构课程设计-学生成绩管理系统
- 数据结构课程设计---学生成绩管理系统
- 数据结构课程设计--学生成绩管理系统
- <数据结构课程设计> 学生成绩管理系统开发
- 数据结构课程设计学生成绩管理系统源代码
- 课程设计———学生成绩管理系统
- c语言课程设计—学生成绩管理系统
- 课程设计报告——学生成绩管理系统课程设计报告
- c语言版数据结构课程设计 学生成绩管理系统
- 数据结构课程设计—学生系统管理
- C++课程设计:学生成绩管理系统
- C++课程设计:学生成绩管理系统
- 喝果汁、玩AR,AR圈里总有一种让人又爱又恨的走心体验
- 手把手教你怎么撩妹,五分钟读懂!提取于《谈话的力量》
- 2017.12.21
- JSP学习心得之一:JSP开发环境下载与配置
- es6浅学-let和const
- 数据结构课程设计——学生成绩管理系统
- Android 异步回调中操作UI线程,UI同步、卡死阻塞等性能问题
- mybatis中的动态sql
- 弘智教育-效果图10-建模最后一节课
- 【七月Python入门】 第五课面文件访问与函数式编程入门
- 打造浪漫的Android表白程序
- pandas—Dataframe操作(选取 插入 删除)
- 存储器层次结构1
- LDD3 study note 3